From 39603af69b397c3091206614389f372b9b3fdbd3 Mon Sep 17 00:00:00 2001 From: maven <2163098428@qq.com> Date: 星期四, 10 七月 2025 09:58:47 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/dev' into dev --- src/api/collaborativeApproval/approvalProcess.js | 48 +++++++++ src/views/basicData/supplierManage/index.vue | 20 +++ src/views/inventoryManagement/receiptManagement/index.vue | 2 src/views/inventoryManagement/issueManagement/index.vue | 2 src/views/inventoryManagement/stockManagement/index.vue | 2 src/views/collaborativeApproval/approvalProcess/index.vue | 49 +++------ src/views/salesManagement/salesLedger/index.vue | 2 src/views/collaborativeApproval/approvalProcess/components/infoFormDia.vue | 172 +++++++++++++++++----------------- 8 files changed, 177 insertions(+), 120 deletions(-) diff --git a/src/api/collaborativeApproval/approvalProcess.js b/src/api/collaborativeApproval/approvalProcess.js new file mode 100644 index 0000000..4f8ca33 --- /dev/null +++ b/src/api/collaborativeApproval/approvalProcess.js @@ -0,0 +1,48 @@ +// 鍗忓悓瀹℃壒 +import request from "@/utils/request"; + +export function approveProcessListPage(query) { + return request({ + url: '/approveProcess/list', + method: 'get', + params: query, + }) +} +export function getDept(query) { + return request({ + url: '/approveProcess/getDept', + method: 'get', + params: query, + }) +} +export function approveProcessGetInfo(query) { + return request({ + url: '/approveProcess/get', + method: 'get', + params: query, + }) +} +// 鏂板瀹℃壒娴佺▼ +export function approveProcessAdd(query) { + return request({ + url: '/approveProcess/add', + method: 'post', + data: query, + }) +} +// 淇敼瀹℃壒娴佺▼ +export function approveProcessUpdate(query) { + return request({ + url: '/approveProcess/update', + method: 'post', + data: query, + }) +} +// 鍒犻櫎瀹℃壒娴佺▼ +export function approveProcessDelete(query) { + return request({ + url: '/approveProcess/deleteIds', + method: 'delete', + data: query, + }) +} \ No newline at end of file diff --git a/src/views/basicData/supplierManage/index.vue b/src/views/basicData/supplierManage/index.vue index 1412e8e..22216e3 100644 --- a/src/views/basicData/supplierManage/index.vue +++ b/src/views/basicData/supplierManage/index.vue @@ -199,13 +199,13 @@ <template #tip> <div class="el-upload__tip text-center"> <span>浠呭厑璁稿鍏ls銆亁lsx鏍煎紡鏂囦欢銆�</span> - <el-link + <!-- <el-link type="primary" :underline="false" style="font-size: 12px; vertical-align: baseline" @click="importTemplate" >涓嬭浇妯℃澘</el-link - > + > --> </div> </template> </el-upload> @@ -350,6 +350,7 @@ }; /** 鎻愪氦涓婁紶鏂囦欢 */ function submitFileForm() { + console.log(upload.url + '?updateSupport=' + upload.updateSupport) proxy.$refs["uploadRef"].submit(); } const getList = () => { @@ -367,6 +368,8 @@ title: "", // 鏄惁绂佺敤涓婁紶 isUploading: false, + // 鏄惁鏇存柊宸茬粡瀛樺湪鐨勭敤鎴锋暟鎹� + updateSupport: 1, // 璁剧疆涓婁紶鐨勮姹傚ご閮� headers: { Authorization: "Bearer " + getToken() }, // 涓婁紶鐨勫湴鍧� @@ -377,6 +380,19 @@ upload.title = "渚涘簲鍟嗗鍏�"; upload.open = true; } + +/**鏂囦欢涓婁紶涓鐞� */ +const handleFileUploadProgress = (event, file, fileList) => { + upload.isUploading = true; +}; + +/** 鏂囦欢涓婁紶鎴愬姛澶勭悊 */ +const handleFileSuccess = (response, file, fileList) => { + upload.open = false; + upload.isUploading = false; + proxy.$refs["uploadRef"].handleRemove(file); + getList(); +}; // 琛ㄦ牸閫夋嫨鏁版嵁 const handleSelectionChange = (selection) => { selectedRows.value = selection; diff --git a/src/views/collaborativeApproval/approvalProcess/components/infoFormDia.vue b/src/views/collaborativeApproval/approvalProcess/components/infoFormDia.vue index 94155b6..585bc43 100644 --- a/src/views/collaborativeApproval/approvalProcess/components/infoFormDia.vue +++ b/src/views/collaborativeApproval/approvalProcess/components/infoFormDia.vue @@ -9,31 +9,32 @@ <el-form :model="form" label-width="140px" label-position="top" :rules="rules" ref="formRef"> <el-row> <el-col :span="24"> - <el-form-item label="娴佺▼缂栧彿锛�" prop="supplier"> - <el-input v-model="form.model" placeholder="鑷姩缂栧彿" clearable disabled/> + <el-form-item label="娴佺▼缂栧彿锛�" prop="approveId"> + <el-input v-model="form.approveId" placeholder="鑷姩缂栧彿" clearable disabled/> </el-form-item> </el-col> </el-row> <el-row> <el-col :span="24"> - <el-form-item label="鐢宠閮ㄩ棬锛�" prop="productId"> - <el-tree-select - v-model="form.productId" - placeholder="璇烽�夋嫨" - clearable - check-strictly - @change="getModels" - :data="productOptions" - :render-after-expand="false" - style="width: 100%" - /> + <el-form-item label="鐢宠閮ㄩ棬锛�" prop="approveDeptId"> + <el-select + v-model="form.approveDeptId" + placeholder="閫夋嫨閮ㄩ棬" + > + <el-option + v-for="user in productOptions" + :key="user.deptId" + :label="user.deptName" + :value="user.deptId" + /> + </el-select> </el-form-item> </el-col> </el-row> <el-row> <el-col :span="24"> - <el-form-item label="瀹℃壒浜嬬敱锛�" prop="model"> - <el-input v-model="form.model" placeholder="璇疯緭鍏�" clearable type="textarea" /> + <el-form-item label="瀹℃壒浜嬬敱锛�" prop="approveReason"> + <el-input v-model="form.approveReason" placeholder="璇疯緭鍏�" clearable type="textarea" /> </el-form-item> </el-col> </el-row> @@ -59,9 +60,9 @@ > <el-option v-for="user in userList" - :key="user.id" - :label="user.name" - :value="user.id" + :key="user.userId" + :label="user.nickName" + :value="user.userId" /> </el-select> <div> @@ -79,14 +80,14 @@ </el-row> <el-row :gutter="30"> <el-col :span="12"> - <el-form-item label="鐢宠浜猴細" prop="checkName"> - <el-input v-model="form.checkName" placeholder="璇疯緭鍏�" clearable/> + <el-form-item label="鐢宠浜猴細" prop="approveUser"> + <el-input v-model="form.approveUser" placeholder="璇疯緭鍏�" clearable/> </el-form-item> </el-col> <el-col :span="12"> - <el-form-item label="鐢宠鏃ユ湡锛�" prop="checkTime"> + <el-form-item label="鐢宠鏃ユ湡锛�" prop="approveTime"> <el-date-picker - v-model="form.checkTime" + v-model="form.approveTime" type="date" placeholder="璇烽�夋嫨鏃ユ湡" value-format="YYYY-MM-DD" @@ -110,42 +111,39 @@ <script setup> import {ref, reactive, toRefs, getCurrentInstance} from "vue"; -import {getOptions} from "@/api/procurementManagement/procurementLedger.js"; -import {productTreeList} from "@/api/basicData/product.js"; -import {qualityInspectAdd, qualityInspectUpdate} from "@/api/qualityManagement/rawMaterialInspection.js"; +import { + approveProcessAdd, approveProcessGetInfo, + approveProcessUpdate, + getDept +} from "../../../../api/collaborativeApproval/approvalProcess.js"; +import {userListNoPage} from "../../../../api/system/user.js"; const { proxy } = getCurrentInstance() const emit = defineEmits(['close']) +import useUserStore from "@/store/modules/user"; +const userStore = useUserStore(); const dialogFormVisible = ref(false); const operationType = ref('') const data = reactive({ form: { - checkTime: "", - supplier: "", - checkName: "", - productName: "", - productId: "", - model: "", - unit: "", - quantity: "", - checkCompany: "", + approveTime: "", + approveId: "", + approveUser: "", + approveDeptId: "", + approveReason: "", checkResult: "", approverList: [] // 鏂板瀛楁锛屽瓨鍌ㄦ墍鏈夎妭鐐圭殑瀹℃壒浜篿d }, rules: { - checkTime: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" },], - supplier: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }], - checkName: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" }], - productId: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }], - model: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" }], - unit: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" }], - quantity: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }], - checkCompany: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" }], + approveTime: [{ required: false, message: "璇疯緭鍏�", trigger: "change" },], + approveId: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" }], + approveUser: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" }], + approveDeptId: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }], + approveReason: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }], checkResult: [{ required: false, message: "璇疯緭鍏�", trigger: "blur" }], }, }); const { form, rules } = toRefs(data); -const supplierList = ref([]); const productOptions = ref([]); // 瀹℃壒浜鸿妭鐐圭浉鍏� @@ -153,11 +151,7 @@ { id: 1, userId: null } ]) let nextApproverId = 2 -const userList = ref([ - { id: 1, name: '寮犱笁' }, - { id: 2, name: '鏉庡洓' }, - { id: 3, name: '鐜嬩簲' } -]) +const userList = ref([]) function addApproverNode() { approverNodes.value.push({ id: nextApproverId++, userId: null }) } @@ -169,46 +163,41 @@ const openDialog = (type, row) => { operationType.value = type; dialogFormVisible.value = true; - getOptions().then((res) => { - supplierList.value = res.data; + userListNoPage().then((res) => { + userList.value = res.data; }); getProductOptions(); + form.value = {} + approverNodes.value = [ + { id: 1, userId: null } + ] + form.value.approveUser = userStore.nickName; + form.value.approveTime = getCurrentDate(); if (operationType.value === 'edit') { - form.value = {...row} - // 鍥炴樉瀹℃壒浜鸿妭鐐� - if (row.approverList && Array.isArray(row.approverList) && row.approverList.length > 0) { - approverNodes.value = row.approverList.map((userId, idx) => ({ id: idx + 1, userId })) - nextApproverId = row.approverList.length + 1 - } else { - approverNodes.value = [{ id: 1, userId: null }] - nextApproverId = 2 - } - } else { - approverNodes.value = [{ id: 1, userId: null }] - nextApproverId = 2 + approveProcessGetInfo({id: row.approveId,approveReason: '1'}).then(res => { + form.value = {...res.data} + // 鍙嶆樉瀹℃壒浜� + // if (res.data && res.data.approverIds) { + // const nameArr = res.data.approverIds.split('锛�') + // approverNodes.value = nameArr.map((name, idx) => { + // const user = userList.value.find(u => u.name === name) + // return { id: idx + 1, userId: user ? user.id : null } + // }) + // nextApproverId = nameArr.length + 1 + // } else if (row.approverList && Array.isArray(row.approverList) && row.approverList.length > 0) { + // approverNodes.value = row.approverList.map((userId, idx) => ({ id: idx + 1, userId })) + // nextApproverId = row.approverList.length + 1 + // } else { + // approverNodes.value = [{ id: 1, userId: null }] + // nextApproverId = 2 + // } + }) } } const getProductOptions = () => { - productTreeList().then((res) => { - productOptions.value = convertIdToValue(res); + getDept().then((res) => { + productOptions.value = res.data; }); -}; -const getModels = (value) => { - form.value.productName = findNodeById(productOptions.value, value); -}; -const findNodeById = (nodes, productId) => { - for (let i = 0; i < nodes.length; i++) { - if (nodes[i].value === productId) { - return nodes[i].label; // 鎵惧埌鑺傜偣锛岃繑鍥炶鑺傜偣 - } - if (nodes[i].children && nodes[i].children.length > 0) { - const foundNode = findNodeById(nodes[i].children, productId); - if (foundNode) { - return foundNode; // 鍦ㄥ瓙鑺傜偣涓壘鍒帮紝杩斿洖璇ヨ妭鐐� - } - } - } - return null; // 娌℃湁鎵惧埌鑺傜偣锛岃繑鍥瀗ull }; function convertIdToValue(data) { return data.map((item) => { @@ -227,17 +216,22 @@ // 鎻愪氦浜у搧琛ㄥ崟 const submitForm = () => { // 鏀堕泦鎵�鏈夎妭鐐圭殑瀹℃壒浜篿d - form.value.approverList = approverNodes.value.map(node => node.userId) + form.value.approverIds = approverNodes.value.map(node => node.userId).join(',') + // 瀹℃壒浜哄繀濉牎楠� + const hasEmptyApprover = approverNodes.value.some(node => !node.userId) + if (hasEmptyApprover) { + proxy.$modal.msgError("璇蜂负鎵�鏈夊鎵硅妭鐐归�夋嫨瀹℃壒浜猴紒") + return + } proxy.$refs.formRef.validate(valid => { if (valid) { - form.value.inspectType = 0 if (operationType.value === "add") { - qualityInspectAdd(form.value).then(res => { + approveProcessAdd(form.value).then(res => { proxy.$modal.msgSuccess("鎻愪氦鎴愬姛"); closeDia(); }) } else { - qualityInspectUpdate(form.value).then(res => { + approveProcessUpdate(form.value).then(res => { proxy.$modal.msgSuccess("鎻愪氦鎴愬姛"); closeDia(); }) @@ -251,6 +245,14 @@ dialogFormVisible.value = false; emit('close') }; +// 鑾峰彇褰撳墠鏃ユ湡骞舵牸寮忓寲涓� YYYY-MM-DD +function getCurrentDate() { + const today = new Date(); + const year = today.getFullYear(); + const month = String(today.getMonth() + 1).padStart(2, "0"); // 鏈堜唤浠�0寮�濮� + const day = String(today.getDate()).padStart(2, "0"); + return `${year}-${month}-${day}`; +} defineExpose({ openDialog, }); diff --git a/src/views/collaborativeApproval/approvalProcess/index.vue b/src/views/collaborativeApproval/approvalProcess/index.vue index 4958ecb..ab98ab8 100644 --- a/src/views/collaborativeApproval/approvalProcess/index.vue +++ b/src/views/collaborativeApproval/approvalProcess/index.vue @@ -46,6 +46,7 @@ import {qualityInspectDel, qualityInspectListPage} from "@/api/qualityManagement/rawMaterialInspection.js"; import InfoFormDia from "@/views/collaborativeApproval/approvalProcess/components/infoFormDia.vue"; import ApprovalDia from "@/views/collaborativeApproval/approvalProcess/components/approvalDia.vue"; +import {approveProcessDelete, approveProcessListPage} from "../../../api/collaborativeApproval/approvalProcess.js"; const data = reactive({ searchForm: { @@ -56,53 +57,55 @@ const tableColumn = ref([ { label: "瀹℃壒鐘舵��", - prop: "checkResult", + prop: "approveStatus", dataType: "tag", formatData: (params) => { if (params == 0) { return "寰呭鏍�"; } else if (params == 1) { - return "宸插畬鎴�"; + return "瀹℃牳涓�"; } else if (params == 2) { - return "涓嶉�氳繃"; + return "瀹℃牳瀹屾垚"; } else { - return '瀹℃牳涓�'; + return '涓嶉�氳繃'; } }, formatType: (params) => { - if (params == '涓嶅悎鏍�') { - return "danger"; - } else if (params == '鍚堟牸') { + if (params == 0) { + return "warning"; + } else if (params == 1) { + return "primary"; + } else if (params == 2) { return "success"; } else { - return null; + return 'danger'; } }, }, { label: "娴佺▼缂栧彿", - prop: "supplier", + prop: "approveId", width: 230 }, { label: "鐢宠閮ㄩ棬", - prop: "checkName", + prop: "approveDeptName", }, { label: "瀹℃壒浜嬬敱", - prop: "productName", + prop: "approveReason", }, { label: "鐢宠浜�", - prop: "model", + prop: "approveUser", }, { label: "鐢宠鏃ユ湡", - prop: "unit", + prop: "approveTime", }, { label: "缁撴潫鏃ユ湡", - prop: "quantity", + prop: "approveOverTime", width: 120 }, { @@ -166,7 +169,7 @@ }; const getList = () => { tableLoading.value = true; - qualityInspectListPage({...page, ...searchForm.value, inspectType: 0}).then(res => { + approveProcessListPage({...page, ...searchForm.value,}).then(res => { tableLoading.value = false; tableData.value = res.data.records page.total = res.data.total; @@ -207,24 +210,10 @@ type: "warning", }) .then(() => { - qualityInspectDel(ids).then((res) => { + approveProcessDelete(ids).then((res) => { proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛"); getList(); }); - }) - .catch(() => { - proxy.$modal.msg("宸插彇娑�"); - }); -}; -// 瀵煎嚭 -const handleOut = () => { - ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚鍑猴紝鏄惁纭瀵煎嚭锛�", "瀵煎嚭", { - confirmButtonText: "纭", - cancelButtonText: "鍙栨秷", - type: "warning", - }) - .then(() => { - proxy.download("/quality/qualityInspect/export", {inspectType: 0}, "鍘熸潗鏂欐楠�.xlsx"); }) .catch(() => { proxy.$modal.msg("宸插彇娑�"); diff --git a/src/views/inventoryManagement/issueManagement/index.vue b/src/views/inventoryManagement/issueManagement/index.vue index 9f5f098..2c28e35 100644 --- a/src/views/inventoryManagement/issueManagement/index.vue +++ b/src/views/inventoryManagement/issueManagement/index.vue @@ -26,7 +26,7 @@ <el-table-column label="瑙勬牸鍨嬪彿" prop="specificationModel" width="160" show-overflow-tooltip /> <el-table-column label="鍗曚綅" prop="unit" width="70" show-overflow-tooltip /> <el-table-column label="鍏ュ簱鏁伴噺" prop="inboundNum" width="90" show-overflow-tooltip /> - <el-table-column label="寰呭嚭搴撴暟閲�" prop="inboundNum0" width="90" show-overflow-tooltip /> + <el-table-column label="搴撳瓨鏁伴噺" prop="inboundNum0" width="90" show-overflow-tooltip /> <el-table-column label="鍚◣鍗曚环" prop="taxInclusiveUnitPrice" width="100" show-overflow-tooltip /> <el-table-column label="鍚◣鎬讳环" prop="taxInclusiveTotalPrice" width="100" show-overflow-tooltip /> <el-table-column label="绋庣巼(%)" prop="taxRate" width="80" show-overflow-tooltip /> diff --git a/src/views/inventoryManagement/receiptManagement/index.vue b/src/views/inventoryManagement/receiptManagement/index.vue index 1e7d6d3..6b098b0 100644 --- a/src/views/inventoryManagement/receiptManagement/index.vue +++ b/src/views/inventoryManagement/receiptManagement/index.vue @@ -240,6 +240,7 @@ const openForm = async (type, row) => { operationType.value = type dialogFormVisible.value = true + selectedRows.value = [] if (type === 'add') { // 鏂板鏃跺垵濮嬪寲琛ㄥ崟 @@ -270,6 +271,7 @@ ...item, quantityStock: item.quantityStock || 0 // 濡傛灉宸叉湁鍏ュ簱鏁伴噺鍒欎繚鐣� })) + selectedRows.value = productList.value } catch (error) { console.error('鍔犺浇浜у搧澶辫触:', error) proxy.$modal.msgError('鍔犺浇浜у搧澶辫触') diff --git a/src/views/inventoryManagement/stockManagement/index.vue b/src/views/inventoryManagement/stockManagement/index.vue index 20e5df3..6356d7a 100644 --- a/src/views/inventoryManagement/stockManagement/index.vue +++ b/src/views/inventoryManagement/stockManagement/index.vue @@ -40,7 +40,7 @@ <pagination v-show="total > 0" :total="total" layout="total, sizes, prev, pager, next, jumper" :page="page.current" :limit="page.size" @pagination="paginationChange" /> </div> - <el-dialog v-model="dialogFormVisible" :title="operationType === 'add' ? '鏂板鍑哄簱' : '缂栬緫鍑哄簱'" width="70%" + <el-dialog v-model="dialogFormVisible" :title="operationType === 'add' ? '鏂板搴撳瓨' : '缂栬緫搴撳瓨'" width="70%" @close="closeDia"> <el-form :model="form" label-width="140px" label-position="top" :rules="rules" ref="formRef"> <el-row :gutter="30"> diff --git a/src/views/salesManagement/salesLedger/index.vue b/src/views/salesManagement/salesLedger/index.vue index 893c02b..3ec809b 100644 --- a/src/views/salesManagement/salesLedger/index.vue +++ b/src/views/salesManagement/salesLedger/index.vue @@ -3,7 +3,7 @@ <div class="search_form"> <el-form :model="searchForm" :inline="true"> <el-form-item label="瀹㈡埛鍚嶇О锛�"> - <el-input v-model="searchForm.customerContractNo" placeholder="璇疯緭鍏�" clearable prefix-icon="Search" + <el-input v-model="searchForm.customerName" placeholder="璇疯緭鍏�" clearable prefix-icon="Search" @change="handleQuery" /> </el-form-item> <el-form-item label="瀹㈡埛鍚堝悓鍙凤細"> -- Gitblit v1.9.3