From c092650aed2da130ef302d2d4ce9095cae61a2bd Mon Sep 17 00:00:00 2001 From: taoge1020 Date: Thu, 21 Aug 2025 12:03:34 +0800 Subject: [PATCH 1/2] =?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 +- src/api/design/Professional/index.ts | 8 + .../biddingManagemen/biddingLimit/index.vue | 39 +- .../listOfWinningBids/index copy.vue | 344 ++++++++++++ .../listOfWinningBids/index.vue | 491 ++++++++---------- src/views/design/Professional/indexEdit.vue | 18 +- src/views/design/appointment/index.vue | 10 +- 7 files changed, 619 insertions(+), 293 deletions(-) create mode 100644 src/views/biddingManagemen/listOfWinningBids/index copy.vue diff --git a/.env.development b/.env.development index 8849f99..b59befd 100644 --- a/.env.development +++ b/.env.development @@ -5,7 +5,7 @@ VITE_APP_TITLE = 煤科建管平台 VITE_APP_ENV = 'development' # 开发环境 -VITE_APP_BASE_API = 'http://192.168.110.213:8899' +VITE_APP_BASE_API = 'http://192.168.110.180:8899' # 无人机接口地址 diff --git a/src/api/design/Professional/index.ts b/src/api/design/Professional/index.ts index 7f13895..977300e 100644 --- a/src/api/design/Professional/index.ts +++ b/src/api/design/Professional/index.ts @@ -31,3 +31,11 @@ export const getFileList = (id) => { method: 'get' }); }; +// 获取专业 +export const extractUserMajor = (params) => { + return request({ + url: '/design/extract/userMajor', + method: 'get', + params + }); +}; diff --git a/src/views/biddingManagemen/biddingLimit/index.vue b/src/views/biddingManagemen/biddingLimit/index.vue index d272e71..9f0fe93 100644 --- a/src/views/biddingManagemen/biddingLimit/index.vue +++ b/src/views/biddingManagemen/biddingLimit/index.vue @@ -27,6 +27,9 @@ 导出excel + + 审核 + @@ -123,28 +126,24 @@ const changeSheet = () => { //获取表名 const getSheetName = async () => { - try { - const params = { - projectId: currentProject.value?.id - // versions: queryForm.value.versions - }; - const res = await sheetList(params); - if (res.code == 200) { - sheets.value = res.data; - if (res.data.length > 0) { - queryForm.value.sheet = res.data[0]; - } else { - queryForm.value.sheet = ''; - } - getTableData(); + const params = { + projectId: currentProject.value?.id + // versions: queryForm.value.versions + }; + const res = await sheetList(params); + if (res.code == 200) { + sheets.value = res.data; + if (res.data.length > 0) { + queryForm.value.sheet = res.data[0]; + } else { + queryForm.value.sheet = ''; } - } catch (error) {} + getTableData(); + } }; //获取表格 const getTableData = async () => { loading.value = true; - console.log(212121); - const params = { projectId: currentProject.value?.id, sheet: queryForm.value.sheet @@ -154,7 +153,6 @@ const getTableData = async () => { if (res.code == 200) { tableData.value = [res.data[0]]; } - console.log(loading.value); }; //修改单价 const handleSave = (row: any) => { @@ -228,6 +226,11 @@ const handleExport = () => { `限价一览表${queryForm.value.sheet}.xlsx` ); }; +// 审核 +const handleAudit = (row: any) => { + // +}; + onUnmounted(() => { listeningProject(); }); diff --git a/src/views/biddingManagemen/listOfWinningBids/index copy.vue b/src/views/biddingManagemen/listOfWinningBids/index copy.vue new file mode 100644 index 0000000..cd2f39a --- /dev/null +++ b/src/views/biddingManagemen/listOfWinningBids/index copy.vue @@ -0,0 +1,344 @@ + + + diff --git a/src/views/biddingManagemen/listOfWinningBids/index.vue b/src/views/biddingManagemen/listOfWinningBids/index.vue index cd2f39a..2eabee4 100644 --- a/src/views/biddingManagemen/listOfWinningBids/index.vue +++ b/src/views/biddingManagemen/listOfWinningBids/index.vue @@ -1,94 +1,50 @@ - + + diff --git a/src/views/design/Professional/indexEdit.vue b/src/views/design/Professional/indexEdit.vue index 7334669..fae1a5e 100644 --- a/src/views/design/Professional/indexEdit.vue +++ b/src/views/design/Professional/indexEdit.vue @@ -31,7 +31,7 @@ - + @@ -42,7 +42,6 @@ -
@@ -152,7 +151,7 @@ import { StartProcessBo } from '@/api/workflow/workflowCommon/types'; import { ComponentInternalInstance, nextTick, ref, reactive, computed, toRefs, onMounted } from 'vue'; import { useUserStoreHook } from '@/store/modules/user'; import { systemUserList } from '@/api/design/appointment'; -import { extractBatch, extractDetail } from '@/api/design/Professional'; +import { extractBatch, extractDetail, extractUserMajor } from '@/api/design/Professional'; import { listVolumeCatalog } from '@/api/design/volumeCatalog'; import { catalogList } from '@/api/design/designChange'; import { getUser } from '@/api/system/user'; @@ -197,7 +196,8 @@ const userInfo = ref({ phonenumber: '', userId: '' }); -const { des_user_major } = toRefs(proxy?.useDict('des_user_major')); +// const { des_user_major } = toRefs(proxy?.useDict('des_user_major')); +const des_user_major = ref([]); const buttonLoading = ref(false); const loading = ref(true); const disableAll = ref(false); @@ -440,7 +440,14 @@ const getDeptAllUser = async (deptId: any) => { ElMessage.error('获取用户列表失败'); } }; - +// 获取专业 +const getMajor = async () => { + let res = await extractUserMajor({ userId: userId.value, projectId: currentProject.value?.id }); + if (res.code == 200) { + des_user_major.value = res.data; + console.log(des_user_major.value); + } +}; /** 回显表单数据(编辑/查看/审批场景) */ const byProjectIdAll = async () => { loading.value = true; @@ -532,6 +539,7 @@ onMounted(() => { // 编辑/查看/审批场景:加载已有数据 const { type } = routeParams.value; + await getMajor(); if (type === 'update' || type === 'view' || type === 'approval') { await getDeptAllUser(userStore.deptId); await byProjectIdAll(); diff --git a/src/views/design/appointment/index.vue b/src/views/design/appointment/index.vue index e3dbba0..7e58d1f 100644 --- a/src/views/design/appointment/index.vue +++ b/src/views/design/appointment/index.vue @@ -220,23 +220,17 @@
-
+
确认提交 - + 重置
From 5454018914188f04dcce299ded3f0def46c0448d Mon Sep 17 00:00:00 2001 From: taoge1020 Date: Thu, 21 Aug 2025 15:46:30 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=88=90=E6=9C=AC=E6=A0=B8=E7=AE=97?= =?UTF-8?q?=E6=B8=85=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../biddingManagemen/biddingLimit/index.vue | 11 +- .../biddingLimit/indexEdit.vue | 371 ++++++++++++++++++ .../listOfWinningBids/index.vue | 120 +++--- 3 files changed, 452 insertions(+), 50 deletions(-) create mode 100644 src/views/biddingManagemen/biddingLimit/indexEdit.vue diff --git a/src/views/biddingManagemen/biddingLimit/index.vue b/src/views/biddingManagemen/biddingLimit/index.vue index 9f0fe93..bb6f934 100644 --- a/src/views/biddingManagemen/biddingLimit/index.vue +++ b/src/views/biddingManagemen/biddingLimit/index.vue @@ -228,7 +228,16 @@ const handleExport = () => { }; // 审核 const handleAudit = (row: any) => { - // + console.log(11111); + + // proxy.$tab.closePage(proxy.$route); + // proxy.$router.push({ + // path: `/approval/biddingLimit/indexEdit`, + // query: { + // id: row.id, + // type: 'add' + // } + // }); }; onUnmounted(() => { diff --git a/src/views/biddingManagemen/biddingLimit/indexEdit.vue b/src/views/biddingManagemen/biddingLimit/indexEdit.vue new file mode 100644 index 0000000..0f16882 --- /dev/null +++ b/src/views/biddingManagemen/biddingLimit/indexEdit.vue @@ -0,0 +1,371 @@ + + + + diff --git a/src/views/biddingManagemen/listOfWinningBids/index.vue b/src/views/biddingManagemen/listOfWinningBids/index.vue index 2eabee4..b972a03 100644 --- a/src/views/biddingManagemen/listOfWinningBids/index.vue +++ b/src/views/biddingManagemen/listOfWinningBids/index.vue @@ -5,44 +5,34 @@ - - - + - - - - - - - - + + - + - + - - - - - - - + + + + - - + + - + + + + + + + + + - + - + - + - + @@ -95,28 +92,21 @@ format="YYYY-MM-DD" value-format="YYYY-MM-DD" placeholder="请选择立项申请日期" - size="medium" /> - + - - - - - - + - - + 确认提交 - 重置 + 重置 @@ -142,7 +132,7 @@ import { ref, reactive, toRefs, watch, onMounted, onUnmounted, getCurrentInstanc import { addListOfWinningBids, updateListOfWinningBids, getListOfWinningBids } from '@/api/bidding/listOfWinningBids'; import { ListOfWinningBidsVO, ListOfWinningBidsForm } from '@/api/bidding/listOfWinningBids/types'; import { useUserStoreHook } from '@/store/modules/user'; -import { ElFormInstance } from 'element-plus'; +import { ElFormInstance, ElMessage } from 'element-plus'; // 获取组件实例 const { proxy } = getCurrentInstance() as ComponentInternalInstance; @@ -185,6 +175,10 @@ const data = reactive({ projectId: [{ required: true, message: '项目ID不能为空', trigger: 'blur' }], projectName: [{ required: true, message: '请输入项目名称', trigger: 'blur' }], winningBidOriginal: [{ required: true, message: '请输入原始中标价', trigger: 'blur' }], + exchangeRate: [ + { required: true, message: '请输入汇率', trigger: 'blur' }, + { type: 'number', min: 0.001, message: '汇率需大于0', trigger: 'blur' } + ], currency: [{ required: true, message: '请输入币种', trigger: 'blur' }], subject: [{ required: true, message: '请输入所属主体', trigger: 'blur' }], winningBid: [{ required: true, message: '请输入中标价', trigger: 'blur' }], @@ -196,6 +190,26 @@ const data = reactive({ // 解构响应式数据 const { form, rules } = toRefs(data); +/** + * 计算人民币中标价 + * 显式触发的计算函数,确保执行时机可靠 + */ +const calculateWinningBid = () => { + // 确保数据类型正确 + const dollarAmount = Number(form.value.winningBidOriginal); + const rate = Number(form.value.exchangeRate); + + // 验证输入有效性 + if (isNaN(dollarAmount) || isNaN(rate) || dollarAmount <= 0 || rate <= 0) { + form.value.winningBid = undefined; + return; + } + + // 计算并保留2位小数 + const result = dollarAmount * rate; + form.value.winningBid = Number(result.toFixed(2)); +}; + /** * 页面初始化 - 获取已有数据(如存在) */ @@ -203,14 +217,15 @@ const initData = async () => { try { if (currentProject.value?.id) { const res = await getListOfWinningBids(currentProject.value.id); - // 若存在数据则赋值到表单 - console.log(res); if (res.data && res.data.id) { Object.assign(form.value, res.data); + // 初始化时手动触发一次计算 + setTimeout(calculateWinningBid, 0); } } } catch (error) { console.error('初始化数据失败:', error); + ElMessage.error('初始化数据失败'); } }; @@ -222,19 +237,20 @@ const submitForm = () => { if (valid) { buttonLoading.value = true; try { - // 补充项目ID(从store获取) + // 提交前确保计算正确 + calculateWinningBid(); + form.value.projectId = currentProject.value?.id; - // 区分新增/修改(根据ID是否存在) if (form.value.id) { await updateListOfWinningBids(form.value); } else { await addListOfWinningBids(form.value); } - // 提示成功并重置表单 - proxy?.$modal.msgSuccess('提交成功'); + + ElMessage.success('提交成功'); resetForm(); } catch (error) { - proxy?.$modal.msgError('提交失败,请重试'); + ElMessage.error('提交失败,请重试'); console.error('提交表单失败:', error); } finally { buttonLoading.value = false; @@ -310,4 +326,10 @@ onUnmounted(() => { .el-button:hover { transform: translateY(-1px); } + +/* 只读输入框样式优化(区分可编辑状态) */ +.el-input--readonly .el-input__wrapper { + background-color: #f9fafb; + cursor: not-allowed; +}