From e181f04c642204e79749af93fa921875ff6c21ba Mon Sep 17 00:00:00 2001 From: baoshiwei <baoshiwei@shlanbao.cn> Date: 星期二, 20 五月 2025 10:46:35 +0800 Subject: [PATCH] refactor(qms): 重构趋势图展示逻辑 --- src/views/tool/gen/genInfoForm.vue | 156 ++++++++++++++++++++++++++++----------------------- 1 files changed, 85 insertions(+), 71 deletions(-) diff --git a/src/views/tool/gen/genInfoForm.vue b/src/views/tool/gen/genInfoForm.vue index d48276e..05b728b 100644 --- a/src/views/tool/gen/genInfoForm.vue +++ b/src/views/tool/gen/genInfoForm.vue @@ -1,10 +1,10 @@ <template> - <el-form ref="genInfoForm" :model="info" :rules="rules" label-width="150px"> + <el-form ref="genInfoForm" :model="infoForm" :rules="rules" label-width="150px"> <el-row> <el-col :span="12"> <el-form-item prop="tplCategory"> <template #label>鐢熸垚妯℃澘</template> - <el-select v-model="info.tplCategory" @change="tplSelectChange"> + <el-select v-model="infoForm.tplCategory" @change="tplSelectChange"> <el-option label="鍗曡〃锛堝鍒犳敼鏌ワ級" value="crud" /> <el-option label="鏍戣〃锛堝鍒犳敼鏌ワ級" value="tree" /> </el-select> @@ -19,7 +19,7 @@ <el-icon><question-filled /></el-icon> </el-tooltip> </template> - <el-input v-model="info.packageName" /> + <el-input v-model="infoForm.packageName" /> </el-form-item> </el-col> @@ -31,7 +31,7 @@ <el-icon><question-filled /></el-icon> </el-tooltip> </template> - <el-input v-model="info.moduleName" /> + <el-input v-model="infoForm.moduleName" /> </el-form-item> </el-col> @@ -43,7 +43,7 @@ <el-icon><question-filled /></el-icon> </el-tooltip> </template> - <el-input v-model="info.businessName" /> + <el-input v-model="infoForm.businessName" /> </el-form-item> </el-col> @@ -55,7 +55,7 @@ <el-icon><question-filled /></el-icon> </el-tooltip> </template> - <el-input v-model="info.functionName" /> + <el-input v-model="infoForm.functionName" /> </el-form-item> </el-col> @@ -67,11 +67,17 @@ <el-icon><question-filled /></el-icon> </el-tooltip> </template> - <tree-select - v-model:value="info.parentMenuId" - :options="menuOptions" - :objMap="{ value: 'menuId', label: 'menuName', children: 'children' }" - placeholder="璇烽�夋嫨绯荤粺鑿滃崟" + <el-tree-select + v-model="infoForm.parentMenuId" + :data="menuOptions" + :props="{ value: 'menuId', label: 'menuName', children: 'children' }" + value-key="menuId" + node-key="menuId" + placeholder="閫夋嫨涓婄骇鑿滃崟" + check-strictly + filterable + clearable + highlight-current /> </el-form-item> </el-col> @@ -84,12 +90,12 @@ <el-icon><question-filled /></el-icon> </el-tooltip> </template> - <el-radio v-model="info.genType" label="0">zip鍘嬬缉鍖�</el-radio> - <el-radio v-model="info.genType" label="1">鑷畾涔夎矾寰�</el-radio> + <el-radio v-model="infoForm.genType" value="0">zip鍘嬬缉鍖�</el-radio> + <el-radio v-model="infoForm.genType" value="1">鑷畾涔夎矾寰�</el-radio> </el-form-item> </el-col> - <el-col :span="24" v-if="info.genType == '1'"> + <el-col v-if="infoForm.genType == '1'" :span="24"> <el-form-item prop="genPath"> <template #label> 鑷畾涔夎矾寰� @@ -97,7 +103,7 @@ <el-icon><question-filled /></el-icon> </el-tooltip> </template> - <el-input v-model="info.genPath"> + <el-input v-model="infoForm.genPath"> <template #append> <el-dropdown> <el-button type="primary"> @@ -106,7 +112,7 @@ </el-button> <template #dropdown> <el-dropdown-menu> - <el-dropdown-item @click="info.genPath = '/'">鎭㈠榛樿鐨勭敓鎴愬熀纭�璺緞</el-dropdown-item> + <el-dropdown-item @click="infoForm.genPath = '/'">鎭㈠榛樿鐨勭敓鎴愬熀纭�璺緞</el-dropdown-item> </el-dropdown-menu> </template> </el-dropdown> @@ -115,7 +121,7 @@ </el-form-item> </el-col> </el-row> - + <template v-if="info.tplCategory == 'tree'"> <h4 class="form-header">鍏朵粬淇℃伅</h4> <el-row v-show="info.tplCategory == 'tree'"> @@ -127,7 +133,7 @@ <el-icon><question-filled /></el-icon> </el-tooltip> </template> - <el-select v-model="info.treeCode" placeholder="璇烽�夋嫨"> + <el-select v-model="infoForm.treeCode" placeholder="璇烽�夋嫨"> <el-option v-for="(column, index) in info.columns" :key="index" @@ -145,9 +151,9 @@ <el-icon><question-filled /></el-icon> </el-tooltip> </template> - <el-select v-model="info.treeParentCode" placeholder="璇烽�夋嫨"> + <el-select v-model="infoForm.treeParentCode" placeholder="璇烽�夋嫨"> <el-option - v-for="(column, index) in info.columns" + v-for="(column, index) in infoForm.columns" :key="index" :label="column.columnName + '锛�' + column.columnComment" :value="column.columnName" @@ -163,7 +169,7 @@ <el-icon><question-filled /></el-icon> </el-tooltip> </template> - <el-select v-model="info.treeName" placeholder="璇烽�夋嫨"> + <el-select v-model="infoForm.treeName" placeholder="璇烽�夋嫨"> <el-option v-for="(column, index) in info.columns" :key="index" @@ -187,13 +193,8 @@ <el-icon><question-filled /></el-icon> </el-tooltip> </template> - <el-select v-model="info.subTableName" placeholder="璇烽�夋嫨" @change="subSelectChange"> - <el-option - v-for="(table, index) in tables" - :key="index" - :label="table.tableName + '锛�' + table.tableComment" - :value="table.tableName" - ></el-option> + <el-select v-model="infoForm.subTableName" placeholder="璇烽�夋嫨" @change="subSelectChange"> + <el-option v-for="(t, index) in table" :key="index" :label="t.tableName + '锛�' + t.tableComment" :value="t.tableName"></el-option> </el-select> </el-form-item> </el-col> @@ -205,7 +206,7 @@ <el-icon><question-filled /></el-icon> </el-tooltip> </template> - <el-select v-model="info.subTableFkName" placeholder="璇烽�夋嫨"> + <el-select v-model="infoForm.subTableFkName" placeholder="璇烽�夋嫨"> <el-option v-for="(column, index) in subColumns" :key="index" @@ -217,64 +218,77 @@ </el-col> </el-row> </template> - </el-form> </template> -<script setup> -import { listMenu } from "@/api/system/menu"; +<script setup lang="ts"> +import { listMenu } from '@/api/system/menu'; +import { propTypes } from '@/utils/propTypes'; -const subColumns = ref([]); -const menuOptions = ref([]); +interface MenuOptionsType { + menuId: number | string; + menuName: string; + children?: MenuOptionsType[]; +} const { proxy } = getCurrentInstance(); +const subColumns = ref<any>([]); +const menuOptions = ref<Array<MenuOptionsType>>([]); + const props = defineProps({ - info: { - type: Object, - default: null - }, - tables: { - type: Array, - default: null - } + info: propTypes.any.isRequired, + tables: propTypes.any.isRequired }); + +const infoForm = computed(() => props.info); + +const table = computed(() => props.tables); // 琛ㄥ崟鏍¢獙 const rules = ref({ - tplCategory: [{ required: true, message: "璇烽�夋嫨鐢熸垚妯℃澘", trigger: "blur" }], - packageName: [{ required: true, message: "璇疯緭鍏ョ敓鎴愬寘璺緞", trigger: "blur" }], - moduleName: [{ required: true, message: "璇疯緭鍏ョ敓鎴愭ā鍧楀悕", trigger: "blur" }], - businessName: [{ required: true, message: "璇疯緭鍏ョ敓鎴愪笟鍔″悕", trigger: "blur" }], - functionName: [{ required: true, message: "璇疯緭鍏ョ敓鎴愬姛鑳藉悕", trigger: "blur" }] + tplCategory: [{ required: true, message: '璇烽�夋嫨鐢熸垚妯℃澘', trigger: 'blur' }], + packageName: [{ required: true, message: '璇疯緭鍏ョ敓鎴愬寘璺緞', trigger: 'blur' }], + moduleName: [{ required: true, message: '璇疯緭鍏ョ敓鎴愭ā鍧楀悕', trigger: 'blur' }], + businessName: [{ required: true, message: '璇疯緭鍏ョ敓鎴愪笟鍔″悕', trigger: 'blur' }], + functionName: [{ required: true, message: '璇疯緭鍏ョ敓鎴愬姛鑳藉悕', trigger: 'blur' }] }); -function subSelectChange(value) { - props.info.subTableFkName = ""; -} -function tplSelectChange(value) { - if (value !== "sub") { - props.info.subTableName = ""; - props.info.subTableFkName = ""; +const subSelectChange = () => { + infoForm.value.subTableFkName = ''; +}; +const tplSelectChange = (value: string) => { + if (value !== 'sub') { + infoForm.value.subTableName = ''; + infoForm.value.subTableFkName = ''; } -} -function setSubTableColumns(value) { - for (var item in props.tables) { - const name = props.tables[item].tableName; +}; +const setSubTableColumns = (value: string) => { + table.value.forEach((item: any) => { + const name = item.tableName; if (value === name) { - subColumns.value = props.tables[item].columns; - break; + subColumns.value = item.columns; + return; } - } -} -/** 鏌ヨ鑿滃崟涓嬫媺鏍戠粨鏋� */ -function getMenuTreeselect() { - listMenu().then(response => { - menuOptions.value = proxy.handleTree(response.data, "menuId"); }); -} +}; -watch(() => props.info.subTableName, val => { - setSubTableColumns(val); +/** 鏌ヨ鑿滃崟涓嬫媺鏍戠粨鏋� */ +const getMenuTreeselect = async () => { + const res = await listMenu(); + const data = proxy?.handleTree<MenuOptionsType>(res.data, 'menuId'); + + if (data) { + menuOptions.value = data; + } +}; + +watch( + () => props.info.subTableName, + (val) => { + setSubTableColumns(val); + } +); + +onMounted(() => { + getMenuTreeselect(); }); - -getMenuTreeselect(); </script> -- Gitblit v1.9.3