From 253e395aceda190e7ff3abffe1520e511a7d6204 Mon Sep 17 00:00:00 2001 From: taoge1020 Date: Tue, 2 Sep 2025 09:52:36 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.development | 2 +- public/catalog.xlsx | Bin 10398 -> 10257 bytes src/api/design/volumeCatalog/index.ts | 11 ++ src/utils/projectTeam.ts | 2 - src/views/design/billofQuantities/index.vue | 19 +-- src/views/design/volumeCatalog/index.vue | 21 ++- src/views/out/monthPlan/index.vue | 1 - src/views/out/monthPlan/indexEdit.vue | 6 +- .../BasicData/landBlock/index.vue | 145 +++++++++++------- 9 files changed, 127 insertions(+), 80 deletions(-) diff --git a/.env.development b/.env.development index eb8185a..9ab76bb 100644 --- a/.env.development +++ b/.env.development @@ -6,7 +6,7 @@ VITE_APP_ENV = 'development' # 开发环境 # 李陈杰 209 -VITE_APP_BASE_API = 'http://192.168.110.188:8899' +VITE_APP_BASE_API = 'http://192.168.110.180:8899' # 曾涛 # VITE_APP_BASE_API = 'http://192.168.110.180:8899' # 罗成 diff --git a/public/catalog.xlsx b/public/catalog.xlsx index 7ebf378fe38d1c080fa8619f4f5892002c54a5a0..eb9e383a0b6a2d5a886f571eb1e3db1de012e424 100644 GIT binary patch delta 2561 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 Qz`p_ua0RAq>F=Wd1%#u_TmS$7 diff --git a/src/api/design/volumeCatalog/index.ts b/src/api/design/volumeCatalog/index.ts index be533ae..aff48d6 100644 --- a/src/api/design/volumeCatalog/index.ts +++ b/src/api/design/volumeCatalog/index.ts @@ -127,6 +127,17 @@ export const majorList = (params) => { params: params }); }; +/** + * 获取人员列表 + * @param query + */ +export const copyUserList = (params) => { + return request({ + url: '/design/volumeCatalog/copyUserList', + method: 'get', + params: params + }); +}; /** * 获取二维码信息 * @param query diff --git a/src/utils/projectTeam.ts b/src/utils/projectTeam.ts index 23f482d..c0c8d23 100644 --- a/src/utils/projectTeam.ts +++ b/src/utils/projectTeam.ts @@ -5,8 +5,6 @@ import { ProjectTeamVO } from '@/api/project/projectTeam/types'; import useUserStore from '@/store/modules/user'; export const getProjectTeam = async () => { const isPermission = useUserStore().permissions.some((item) => item == 'project:team:list'); - console.log(useUserStore().permissions); - if (!isPermission && useUserStore().permissions[0] != '*:*:*') return; const { id } = $cache.local.getJSON('selectedProject'); diff --git a/src/views/design/billofQuantities/index.vue b/src/views/design/billofQuantities/index.vue index fe4e7e2..7a45fe1 100644 --- a/src/views/design/billofQuantities/index.vue +++ b/src/views/design/billofQuantities/index.vue @@ -16,7 +16,7 @@ - {{ isExpandAll ? '一键收起' : '一键展开' }} + {{ isExpandAll ? '一键收起' : '一键展开' }} 下载模板 @@ -62,15 +62,10 @@ - 审核 + 审核 - 查看流程 + 查看流程 @@ -313,7 +308,7 @@ function handleChangeVersion(versions) { handleQueryList(); } // 在 openTable 方法中通过索引获取对应的表格实例 -function openTable( index) { +function openTable(index) { isExpandAll.value = !isExpandAll.value; nextTick(() => { // 通过索引获取当前标签页的表格实例 @@ -358,12 +353,12 @@ function lookApprovalFlow(row) { const downloadTemplate = (type) => { // 导出模版文件 try { - let linkurl = ''; + let linkurl = ''; let name = ''; - if (type==1) { + if (type == 1) { linkurl = '/billOfQuantities.xlsx'; name = '工程量清单模板.xlsx'; - }else{ + } else { linkurl = '/materialsEquipment.xlsx'; name = '物资设备清单模板.xlsx'; } diff --git a/src/views/design/volumeCatalog/index.vue b/src/views/design/volumeCatalog/index.vue index f7d77df..e0fb5f0 100644 --- a/src/views/design/volumeCatalog/index.vue +++ b/src/views/design/volumeCatalog/index.vue @@ -153,6 +153,11 @@ + + + + + @@ -255,7 +260,8 @@ import { uploadVolumeFile, majorList, getVolumeCatafileList, - volumeFileList + volumeFileList, + copyUserList } from '@/api/design/volumeCatalog'; import { VolumeCatalogVO } from '@/api/design/volumeCatalog/types'; import { useUserStoreHook } from '@/store/modules/user'; @@ -281,6 +287,7 @@ const uploadOpinionVisible = ref(false); const design = ref(''); const total = ref(0); const dialogHistory = ref(false); +const userCoryList = ref([]); const opinion = ref(''); const updateRow = ref({ opinion: [] @@ -416,7 +423,13 @@ const cancel = () => { reset(); dialog.visible = false; }; - +// 获取人员列表 +const getDesignUserList = async () => { + const res = await copyUserList({}); + if (res.code === 200) { + userCoryList.value = res.data; + } +}; /** 表单重置 */ const reset = () => { form.value = { ...initFormData }; @@ -546,7 +559,7 @@ const onSubmit = async () => { type: uploadForm.type }; try { - await uploadVolumeFile(obj); + await uploadVolumeFile({ ...obj, userIds: form.value.userIds }); proxy?.$modal.msgSuccess('文件上传成功'); uploadVisible.value = false; await getList(); @@ -656,6 +669,7 @@ const handleAuditInfo = (row) => { // 审核图纸 }; onMounted(() => { + getDesignUserList(); getSpecialtyList(); getList(); }); @@ -666,6 +680,7 @@ const listeningProject = watch( (nid, oid) => { queryParams.value.projectId = nid; form.value.projectId = nid; + getDesignUserList(); getSpecialtyList(); getList(); } diff --git a/src/views/out/monthPlan/index.vue b/src/views/out/monthPlan/index.vue index c426eca..d9aab38 100644 --- a/src/views/out/monthPlan/index.vue +++ b/src/views/out/monthPlan/index.vue @@ -36,7 +36,6 @@ - diff --git a/src/views/out/monthPlan/indexEdit.vue b/src/views/out/monthPlan/indexEdit.vue index 708f793..01cd497 100644 --- a/src/views/out/monthPlan/indexEdit.vue +++ b/src/views/out/monthPlan/indexEdit.vue @@ -175,7 +175,7 @@ const getInfo = () => { form.value = res.data as any; console.log('🚀 ~ getInfo ~ form.value:', form.value[0].projectId); - + form.value[0].mid = form.value[0].id; form.value[0].id = form.value[0].projectId + '_' + form.value[0].planMonth; loading.value = false; buttonLoading.value = false; @@ -231,13 +231,15 @@ const approvalVerifyOpen = async () => { // 图纸上传成功之后 开始提交 const submit = async (status, data) => { form.value = data; + console.log(form.value); + if (status === 'draft') { buttonLoading.value = false; proxy?.$modal.msgSuccess('暂存成功'); proxy.$tab.closePage(proxy.$route); proxy.$router.go(-1); } else { - const res = await isSubmit(data[1]?.id); + const res = await isSubmit(data[0]?.mid); if (!res.data) { proxy?.$modal.msgError('三种计划产值必须填写'); diff --git a/src/views/project/landTransfer/BasicData/landBlock/index.vue b/src/views/project/landTransfer/BasicData/landBlock/index.vue index 8c215a0..8aca093 100644 --- a/src/views/project/landTransfer/BasicData/landBlock/index.vue +++ b/src/views/project/landTransfer/BasicData/landBlock/index.vue @@ -78,6 +78,7 @@ + @@ -107,20 +108,22 @@ - + + 添加 - + - - + + + - + - + + - + @@ -181,21 +191,35 @@ import { } from '@/api/system/landTransfer/landBlock'; import { LandBlockVO, LandBlockQuery, LandBlockForm } from '@/api/system/landTransfer/landBlock/types'; import { useUserStoreHook } from '@/store/modules/user'; -import { getCurrentInstance, ComponentInternalInstance, onMounted, onUnmounted, watch } from 'vue'; -import { ElFormInstance, ElMessage } from 'element-plus'; +import { getCurrentInstance, ComponentInternalInstance, onMounted, onUnmounted, watch, reactive, ref, toRefs, computed } from 'vue'; +import { ElFormInstance } from 'element-plus'; -// 类型定义补充(避免any) +// 类型定义补充 interface DialogOption { visible: boolean; title: string; } +// 方阵级联选择器选项类型 +interface FangzhenOption { + matrixId: string | number; + name: string; + children?: FangzhenOption[]; +} + +// 方阵表单项类型 interface UnitBoItem { unitProjectArea: string; unitProjectStatus: string; unitProjectId: (string | number)[]; // 级联选择值(数组) } +// 方阵表单根模型类型(关键:显式声明unitBoList) +interface MatrixForm { + landId?: string | number; // 关联的地块ID + unitBoList: UnitBoItem[]; // 方阵列表 +} + // 基础实例与Store const { proxy } = getCurrentInstance() as ComponentInternalInstance; const userStore = useUserStoreHook(); @@ -203,14 +227,17 @@ const currentProject = computed(() => userStore.selectedProject); // 响应式数据 const landBlockList = ref([]); -const fangzhenList = ref([]); // 方阵列表(实际项目建议定义具体类型) +const fangzhenList = ref([]); const buttonLoading = ref(false); const loading = ref(true); const showSearch = ref(true); -const uploadRef = ref(null); // upload组件ref +const uploadRef = ref(null); -// 方阵表单数据(核心修改:初始值为空,避免默认填充无效数据) -const unitBoList = ref([{ unitProjectArea: '', unitProjectStatus: '', unitProjectId: [] }]); +// 方阵表单模型(核心修复:使用reactive并显式声明结构) +const formM = reactive({ + landId: undefined, + unitBoList: [{ unitProjectArea: '', unitProjectStatus: '', unitProjectId: [] }] +}); // 表格选择相关 const ids = ref>([]); @@ -243,7 +270,6 @@ const initFormData: LandBlockForm = { // 核心数据(含表单规则) const data = reactive({ form: { ...initFormData }, - formM: { landId: undefined }, // 方阵关联表单(仅存地块ID) queryParams: { pageNum: 1, pageSize: 10, @@ -256,7 +282,7 @@ const data = reactive({ farmerCount: undefined, params: {} }, - // 地块表单规则(原有规则保留) + // 地块表单规则 rules: { id: [{ required: true, message: '主键ID不能为空', trigger: 'blur' }], projectId: [{ required: true, message: '项目ID不能为空', trigger: 'blur' }], @@ -265,7 +291,7 @@ const data = reactive({ } }); -const { queryParams, form, rules, formM } = toRefs(data); +const { queryParams, form, rules } = toRefs(data); /** 查询地块列表 */ const getList = async () => { @@ -381,10 +407,10 @@ const getfangzhenList = async () => { loading.value = true; try { const res = await subMatrix(currentProject.value.id); - // 处理方阵数据(级联选择需父子结构,此处保留原有逻辑) + // 处理方阵数据(级联选择需父子结构) res.data.forEach((item: any) => { item.children?.forEach((item2: any) => { - item2.matrixId = `${item2.name}_${item2.matrixId}`; // 拼接名称+ID,便于后续拆分 + item2.matrixId = `${item2.name}_${item2.matrixId}`; }); }); fangzhenList.value = res.data; @@ -395,68 +421,74 @@ const getfangzhenList = async () => { } }; -/** 关联方阵(核心修改:打开弹窗前强制重置表单) */ +/** 关联方阵 */ const handleView = async (row: LandBlockVO) => { if (!row?.id) return proxy?.$modal.msgWarning('请选择有效的地块'); - // 1. 重置方阵表单(清空历史数据) + // 重置方阵表单 resetMatrix(); - // 2. 绑定当前地块ID - formM.value.landId = row.id; - // 3. 打开弹窗 + // 绑定当前地块ID + formM.landId = row.id; + // 打开弹窗 dialogMatrix.visible = true; dialogMatrix.title = `关联方阵(地块:${row.landName || row.landCode})`; }; /** 新增方阵表单项 */ const addUnitBoItem = () => { - unitBoList.value.push({ + formM.unitBoList.push({ unitProjectArea: '', unitProjectStatus: '', - unitProjectId: [] // 级联选择初始为空数组 + unitProjectId: [] }); + // 重置校验状态 + landBlockFormMatrixRef.value?.clearValidate(); }; /** 删除方阵表单项 */ const removeUnitBoItem = (index: number) => { - if (unitBoList.value.length <= 1) { + if (formM.unitBoList.length <= 1) { return proxy?.$modal.msgWarning('至少保留一项方阵配置'); } - unitBoList.value.splice(index, 1); - // 重置表单校验状态(避免删除后残留校验提示) + formM.unitBoList.splice(index, 1); landBlockFormMatrixRef.value?.clearValidate(); }; -/** 提交方阵关联表单 */ +/** 提交方阵关联表单(核心修复:数据处理逻辑) */ const submitFormMatrix = () => { landBlockFormMatrixRef.value?.validate(async (valid: boolean) => { if (!valid) return; - if (!formM.value.landId) return proxy?.$modal.msgWarning('地块ID异常,请重新选择地块'); + if (!formM.landId) return proxy?.$modal.msgWarning('地块ID异常,请重新选择地块'); try { - // 处理方阵数据(拆分名称+ID) - const unitBoListParams = unitBoList.value.map((item) => { - const [unitProjectName, unitProjectId] = item.unitProjectId[1]?.split('_') || []; - if (!unitProjectId) throw new Error('方阵ID解析失败,请重新选择方阵'); + // 处理方阵数据(修复ID拆分逻辑) + const unitBoListParams = formM.unitBoList.map((item) => { + // 取级联选择的最后一层值 + const lastLevelValue = item.unitProjectId[item.unitProjectId.length - 1]; + if (!lastLevelValue) throw new Error('请选择完整的方阵'); + + // 拆分名称和ID + const [unitProjectName, unitProjectId] = String(lastLevelValue).split('_'); + if (!unitProjectId) throw new Error('方阵ID解析失败,请重新选择'); return { unitProjectArea: item.unitProjectArea.trim(), unitProjectStatus: item.unitProjectStatus.trim(), - unitProjectId: unitProjectId, // 纯ID(后端需要) - unitProjectName: unitProjectName // 名称(可选,用于显示) + unitProjectId: unitProjectId, + unitProjectName: unitProjectName }; }); // 调用关联接口 const res = await LandUnit({ - landId: formM.value.landId, + landId: formM.landId, unitBoList: unitBoListParams }); if (res.code === 200) { proxy?.$modal.msgSuccess('关联方阵成功'); dialogMatrix.visible = false; - await getList(); // 刷新地块列表 + await getList(); } else { proxy?.$modal.msgError(res.msg || '关联失败'); } @@ -472,13 +504,10 @@ const cancelMatrix = () => { dialogMatrix.visible = false; }; -/** 方阵表单重置(核心修改:清空所有数据+重置校验) */ +/** 方阵表单重置 */ const resetMatrix = () => { - // 1. 清空地块ID - formM.value.landId = undefined; - // 2. 重置方阵列表(仅保留一个空项) - unitBoList.value = [{ unitProjectArea: '', unitProjectStatus: '', unitProjectId: [] }]; - // 3. 重置表单校验状态 + formM.landId = undefined; + formM.unitBoList = [{ unitProjectArea: '', unitProjectStatus: '', unitProjectId: [] }]; if (landBlockFormMatrixRef.value) { landBlockFormMatrixRef.value.resetFields(); landBlockFormMatrixRef.value.clearValidate(); @@ -491,11 +520,11 @@ const listeningProject = watch( (newId) => { if (newId) { queryParams.value.projectId = newId; - getfangzhenList(); // 刷新方阵列表 - getList(); // 刷新地块列表 + getfangzhenList(); + getList(); } }, - { immediate: true } // 初始加载时执行一次 + { immediate: true } ); /** 导入Excel */ @@ -524,36 +553,34 @@ const handleImport = (options: { file: File }) => { loading.value = false; }); }; + +/** 导出模板 */ const exportFile = () => { - // 导出模版文件 try { - // 创建a标签 const link = document.createElement('a'); - // 设置PDF文件路径 - 相对于public目录 link.href = '/dikuai.xlsx'; - // 设置下载后的文件名 link.download = '地块信息导入模版.xlsx'; - // 触发点击 document.body.appendChild(link); link.click(); - // 清理 document.body.removeChild(link); } catch (error) { alert('下载失败,请重试'); } }; + /** 下载导入模板 */ const downloadTemplate = () => { try { const link = document.createElement('a'); - link.href = '/landBlock.xlsx'; // 模板路径(需确保public目录下存在该文件) - link.download = '地块信息导入模板.xlsx'; // 下载后文件名 + link.href = '/landBlock.xlsx'; + link.download = '地块信息导入模板.xlsx'; document.body.appendChild(link); - link.click(); // 触发下载 + link.click(); } catch (err) { proxy?.$modal.msgError('模板下载失败,请重试'); } finally { - document.body.removeChild(link); // 清理DOM + const link = document.querySelector('a[download="地块信息导入模板.xlsx"]'); + if (link) document.body.removeChild(link); } };