明树Git Lab

Commit c1d8e4a4 authored by zhanghan's avatar zhanghan

增加单位

parent d7b10ba8
Pipeline #109397 passed with stage
in 21 seconds
...@@ -102,6 +102,21 @@ ...@@ -102,6 +102,21 @@
</el-select> </el-select>
</template> </template>
<!-- Autocomplete 类型(联想输入框) -->
<template v-else-if="col.type === 'autocomplete'">
<el-autocomplete
v-model="scope.row[col.prop]"
:placeholder="col.placeholder || '请输入或选择'"
:disabled="disabled || col.disabled"
:fetch-suggestions="(queryString, callback) => handleQuerySearch(queryString, callback, col.optionKey)"
:trigger-on-focus="col.triggerOnFocus !== false"
:debounce="col.debounce || 300"
clearable
style="width: 100%"
size="small"
/>
</template>
<!-- Number 类型 --> <!-- Number 类型 -->
<template v-else-if="col.type === 'number'"> <template v-else-if="col.type === 'number'">
<el-input <el-input
...@@ -224,6 +239,21 @@ ...@@ -224,6 +239,21 @@
</el-select> </el-select>
</template> </template>
<!-- Autocomplete 类型(联想输入框) -->
<template v-else-if="col.type === 'autocomplete'">
<el-autocomplete
v-model="scope.row[col.prop]"
:placeholder="col.placeholder || '请输入或选择'"
:disabled="disabled || col.disabled"
:fetch-suggestions="(queryString, callback) => handleQuerySearch(queryString, callback, col.optionKey)"
:trigger-on-focus="col.triggerOnFocus !== false"
:debounce="col.debounce || 300"
clearable
style="width: 100%"
size="small"
/>
</template>
<!-- Number 类型 --> <!-- Number 类型 -->
<template v-else-if="col.type === 'number'"> <template v-else-if="col.type === 'number'">
<el-input <el-input
...@@ -443,6 +473,36 @@ const headerColumnGroups = computed(() => { ...@@ -443,6 +473,36 @@ const headerColumnGroups = computed(() => {
return result; return result;
}); });
// 联想搜索处理方法
const handleQuerySearch = (queryString, callback, optionKey) => {
try {
const options = mergedSelectOptions.value[optionKey] || [];
if (!queryString) {
// 无输入时返回所有选项
callback(options.map(item => ({ value: item.name || item.label, key: item.key || item.value })));
return;
}
// 过滤匹配的选项
const results = queryString
? options
.filter(item => {
const name = (item.name || item.label || "").toLowerCase();
const query = queryString.toLowerCase();
return name.includes(query);
})
.map(item => ({ value: item.name || item.label, key: item.key || item.value }))
: [];
// 如果有匹配结果,返回建议列表
// 如果没有匹配结果,返回空数组(允许用户输入自定义内容)
callback(results);
} catch (e) {
console.error("联想搜索失败:", e);
callback([]);
}
};
// 新增行(适配默认行数据,初始化upload字段为数组) // 新增行(适配默认行数据,初始化upload字段为数组)
const handleAdd = () => { const handleAdd = () => {
try { try {
......
<template> <template>
<div> <div>
<div class="add-project-back"> <div class="add-project-back">
<div class="back" @click="() => router.back()"> <div class="back" @click="handleBack">
<el-icon class="backIcon"><ArrowLeft /></el-icon> <el-icon class="backIcon"><ArrowLeft /></el-icon>
<span class="backText">返回</span> <span class="backText">返回</span>
</div> </div>
<span class="backName">{{ route.meta.title }}</span> <span class="backName">{{ route.meta.title }}</span>
<div class="back-actions" v-if="showSave">
<el-button
type="primary"
:loading="loading"
:disabled="loading || disabled"
@click="handleSave"
>
{{ saveText }}
</el-button>
</div>
</div> </div>
</div> </div>
</template> </template>
<script setup> <script setup>
import { useRouter, useRoute } from "vue-router"; import { useRouter, useRoute } from "vue-router";
const props = defineProps({
// 是否显示保存按钮
showSave: {
type: Boolean,
default: false,
},
// 保存按钮文本
saveText: {
type: String,
default: "保存",
},
// 是否禁用保存按钮
disabled: {
type: Boolean,
default: false,
},
// 是否显示loading状态
loading: {
type: Boolean,
default: false,
},
});
const emit = defineEmits(['save', 'back']);
const route = useRoute(); const route = useRoute();
const router = useRouter(); const router = useRouter();
const handleBack = () => {
emit('back');
router.back();
};
const handleSave = () => {
emit('save');
};
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
.add-project-back { .add-project-back {
...@@ -38,6 +83,13 @@ const router = useRouter(); ...@@ -38,6 +83,13 @@ const router = useRouter();
font-size: 16px; font-size: 16px;
font-weight: 700; font-weight: 700;
color: rgba(51, 51, 51, 1); color: rgba(51, 51, 51, 1);
flex: 1;
}
.back-actions {
margin-left: auto;
display: flex;
gap: 10px;
} }
} }
</style> </style>
<template> <template>
<div class="add-project-container"> <div class="add-project-container">
<div class="add-project-content" v-loading="loading"> <div class="add-project-content" v-loading="loading">
<routerBack /> <routerBack
:show-save="!loading && !isPreview"
:loading="loading"
@save="saveClick"
/>
<div class="tabs-content"> <div class="tabs-content">
<div class="project-tab-content"> <div class="project-tab-content">
<div class="tab-content"> <div class="tab-content">
......
<template> <template>
<div class="add-project-container"> <div class="add-project-container">
<div class="add-project-content" v-loading="loading"> <div class="add-project-content" v-loading="loading">
<routerBack /> <routerBack
:show-save="!loading && !isPreview"
:loading="loading"
@save="saveClick"
/>
<div class="tabs-content"> <div class="tabs-content">
<div class="project-tab-content-wrapper"> <div class="project-tab-content-wrapper">
<div class="tab-content"> <div class="tab-content">
......
<template> <template>
<div class="add-project-container"> <div class="add-project-container">
<div class="add-project-content" v-loading="loading"> <div class="add-project-content" v-loading="loading">
<routerBack /> <routerBack
:show-save="!loading && !isPreview"
:loading="loading"
@save="saveClick"
/>
<div class="tabs-content"> <div class="tabs-content">
<div class="project-tab-content"> <div class="project-tab-content">
<div class="tab-content"> <div class="tab-content">
......
<template> <template>
<div class="add-project-container"> <div class="add-project-container">
<div class="add-project-content" v-loading="loading"> <div class="add-project-content" v-loading="loading">
<routerBack /> <routerBack
:show-save="!loading && !isPreview"
:loading="loading"
@save="saveClick"
/>
<div class="tabs-content"> <div class="tabs-content">
<div class="project-tab-content"> <div class="project-tab-content">
<div class="tab-content"> <div class="tab-content">
......
<template> <template>
<div class="add-project-container"> <div class="add-project-container">
<div class="add-project-content" v-loading="loading"> <div class="add-project-content" v-loading="loading">
<routerBack /> <routerBack
:show-save="!loading && !isPreview"
:loading="loading"
@save="saveClick"
/>
<div class="tabs-content"> <div class="tabs-content">
<div class="project-tab-content"> <div class="project-tab-content">
<div class="tab-content"> <div class="tab-content">
......
<template> <template>
<div class="add-project-container"> <div class="add-project-container">
<div class="add-project-content" v-loading="loading"> <div class="add-project-content" v-loading="loading">
<routerBack /> <routerBack
:show-save="!loading && !isPreview"
:loading="loading"
@save="saveClick"
/>
<div class="tabs-content"> <div class="tabs-content">
<div class="project-tab-content"> <div class="project-tab-content">
......
<template> <template>
<div class="add-project-container"> <div class="add-project-container">
<div class="add-project-content" v-loading="loading"> <div class="add-project-content" v-loading="loading">
<routerBack /> <routerBack
:show-save="!loading && !isPreview"
:loading="loading"
@save="saveClick"
/>
<div class="tabs-content"> <div class="tabs-content">
<div class="project-tab-content-wrapper"> <div class="project-tab-content-wrapper">
<div class="tab-content"> <div class="tab-content">
......
<template> <template>
<div class="add-project-container"> <div class="add-project-container">
<div class="add-project-content" v-loading="loading"> <div class="add-project-content" v-loading="loading">
<routerBack /> <routerBack
:show-save="!loading && !isPreview"
:loading="loading"
@save="saveClick"
/>
<div class="tabs-content"> <div class="tabs-content">
<div class="project-tab-content"> <div class="project-tab-content">
......
<template> <template>
<div class="add-project-container"> <div class="add-project-container">
<div class="add-project-content" v-loading="loading"> <div class="add-project-content" v-loading="loading">
<routerBack /> <routerBack
:show-save="!loading && !isPreview"
:loading="loading"
@save="saveClick"
/>
<div class="tabs-content"> <div class="tabs-content">
<div class="project-tab-content"> <div class="project-tab-content">
<div class="tab-content"> <div class="tab-content">
......
<template> <template>
<div class="add-project-container"> <div class="add-project-container">
<div class="add-project-content" v-loading="loading"> <div class="add-project-content" v-loading="loading">
<routerBack /> <routerBack
:show-save="!loading && !isPreview"
:loading="loading"
@save="saveClick"
/>
<div class="tabs-content"> <div class="tabs-content">
<div class="project-tab-content"> <div class="project-tab-content">
<div class="tab-content"> <div class="tab-content">
......
<template> <template>
<div class="add-project-container"> <div class="add-project-container">
<div class="add-project-content" v-loading="loading"> <div class="add-project-content" v-loading="loading">
<routerBack /> <routerBack
:show-save="!loading && !isPreview"
:loading="loading"
@save="saveClick"
/>
<div class="tabs-content"> <div class="tabs-content">
<div class="project-tab-content"> <div class="project-tab-content">
......
<template> <template>
<div class="add-project-container"> <div class="add-project-container">
<div class="add-project-content" v-loading="loading"> <div class="add-project-content" v-loading="loading">
<routerBack /> <routerBack
:show-save="!loading && !isPreview"
:loading="loading"
@save="saveClick"
/>
<div class="tabs-content"> <div class="tabs-content">
<div class="project-tab-content"> <div class="project-tab-content">
......
<template> <template>
<div class="add-project-container"> <div class="add-project-container">
<div class="add-project-content" v-loading="loading"> <div class="add-project-content" v-loading="loading">
<routerBack /> <routerBack
:show-save="!loading && !isPreview"
:loading="loading"
@save="saveClick"
/>
<div class="tabs-content"> <div class="tabs-content">
<div class="project-tab-content"> <div class="project-tab-content">
<div class="tab-content"> <div class="tab-content">
......
<template> <template>
<div class="add-project-container"> <div class="add-project-container">
<div class="add-project-content" v-loading="loading"> <div class="add-project-content" v-loading="loading">
<routerBack /> <routerBack
:show-save="!loading && !isPreview"
:loading="loading"
@save="saveClick"
/>
<div class="tabs-content"> <div class="tabs-content">
<div class="project-tab-content"> <div class="project-tab-content">
......
<template> <template>
<div class="add-project-container"> <div class="add-project-container">
<div class="add-project-content" v-loading="loading"> <div class="add-project-content" v-loading="loading">
<routerBack /> <routerBack
:show-save="!loading && !isPreview"
:loading="loading"
@save="saveClick"
/>
<div class="tabs-content"> <div class="tabs-content">
<div class="project-tab-content-wrapper"> <div class="project-tab-content-wrapper">
<div class="tab-content"> <div class="tab-content">
......
<template> <template>
<div class="add-project-container"> <div class="add-project-container">
<div class="add-project-content" v-loading="loading"> <div class="add-project-content" v-loading="loading">
<routerBack /> <routerBack
:show-save="!loading && !isPreview"
:loading="loading"
@save="saveClick"
/>
<div class="tabs-content"> <div class="tabs-content">
<div class="project-tab-content"> <div class="project-tab-content">
......
<template> <template>
<div class="add-project-container"> <div class="add-project-container">
<div class="add-project-content" v-loading="loading"> <div class="add-project-content" v-loading="loading">
<routerBack /> <routerBack
:show-save="!loading && !isPreview"
:loading="loading"
@save="saveClick"
/>
<div class="tabs-content"> <div class="tabs-content">
<el-tabs v-model="pageActiveName" type="border-card"> <el-tabs v-model="pageActiveName" type="border-card">
......
<template> <template>
<div class="add-project-container"> <div class="add-project-container">
<div class="add-project-content" v-loading="loading"> <div class="add-project-content" v-loading="loading">
<routerBack /> <routerBack
:show-save="!loading && !isPreview"
:loading="loading"
@save="saveClick"
/>
<div class="tabs-content"> <div class="tabs-content">
<div class="project-tab-content"> <div class="project-tab-content">
<div class="tab-content"> <div class="tab-content">
......
<template> <template>
<div class="add-project-container"> <div class="add-project-container">
<div class="add-project-content" v-loading="loading"> <div class="add-project-content" v-loading="loading">
<routerBack /> <routerBack
:show-save="!loading && !isPreview"
:loading="loading"
@save="saveClick"
/>
<div class="tabs-content"> <div class="tabs-content">
<div class="project-tab-content"> <div class="project-tab-content">
......
<template> <template>
<div class="add-project-container"> <div class="add-project-container">
<div class="add-project-content" v-loading="loading"> <div class="add-project-content" v-loading="loading">
<routerBack /> <routerBack
:show-save="!loading && !isPreview"
:loading="loading"
@save="saveClick"
/>
<div class="tabs-content"> <div class="tabs-content">
<div class="project-tab-content-wrapper"> <div class="project-tab-content-wrapper">
<div class="tab-content"> <div class="tab-content">
......
This diff is collapsed.
<template> <template>
<div class="add-project-container"> <div class="add-project-container">
<div class="add-project-content" v-loading="loading"> <div class="add-project-content" v-loading="loading">
<routerBack /> <routerBack
:show-save="!loading && !isPreview"
:loading="loading"
@save="saveClick"
/>
<div class="tabs-content"> <div class="tabs-content">
<div class="project-tab-content"> <div class="project-tab-content">
<div class="tab-content"> <div class="tab-content">
......
<template> <template>
<div class="add-project-container"> <div class="add-project-container">
<div class="add-project-content" v-loading="loading"> <div class="add-project-content" v-loading="loading">
<routerBack></routerBack> <routerBack
:show-save="!loading && !isPreview && (!formData.projectLzType || ['1', '5', '7'].includes(formData.projectLzType.toString()))"
:loading="loading"
@save="() => saveClick('save')"
></routerBack>
<div class="tabs-content"> <div class="tabs-content">
<el-tabs v-model="pageActiveName" type="border-card"> <el-tabs v-model="pageActiveName" type="border-card">
<el-tab-pane label="立项填报" name="立项填报"> <el-tab-pane label="立项填报" name="立项填报">
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment