From 90f68df4d0657a900565593bc2c4e0e3ef8cabe0 Mon Sep 17 00:00:00 2001 From: 曹睿 <360930172@qq.com> Date: 星期四, 10 七月 2025 10:08:02 +0800 Subject: [PATCH] Merge branch 'dev' of http://114.132.189.42:9002/r/product-inventory-management into dev --- src/views/basicData/supplierManage/index.vue | 20 + src/views/inventoryManagement/issueManagement/index.vue | 36 + src/views/collaborativeApproval/approvalProcess/index.vue | 227 +++++++++++++ src/api/inventoryManagement/stockIn.js | 15 src/views/salesManagement/salesLedger/index.vue | 2 src/views/collaborativeApproval/approvalProcess/components/infoFormDia.vue | 263 +++++++++++++++ src/api/inventoryManagement/stockManage.js | 6 src/views/collaborativeApproval/approvalProcess/components/approvalDia.vue | 106 ++++++ src/api/collaborativeApproval/approvalProcess.js | 48 ++ src/views/basicData/customerFile/index.vue | 62 ++ src/api/inventoryManagement/stockOut.js | 8 src/views/inventoryManagement/receiptManagement/index.vue | 51 ++ src/views/inventoryManagement/stockManagement/index.vue | 107 +++-- vite.config.js | 2 src/views/inventoryManagement/dispatchLog/index.vue | 20 15 files changed, 866 insertions(+), 107 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/api/inventoryManagement/stockIn.js b/src/api/inventoryManagement/stockIn.js index b03b60b..5e104f7 100644 --- a/src/api/inventoryManagement/stockIn.js +++ b/src/api/inventoryManagement/stockIn.js @@ -9,11 +9,20 @@ }); }; -// 淇敼搴撳瓨淇℃伅 +// 淇敼鍏ュ簱瀛樹俊鎭� export const updateStockIn = (data) => { return request({ url: "/stockin/update", - method: "put", + method: "post", + data, + }); +}; + +// 淇敼搴撳瓨淇℃伅 +export const updateManagement = (data) => { + return request({ + url: "/stockin/updateManagement", + method: "post", data, }); }; @@ -31,7 +40,7 @@ export function delStockIn(ids) { return request({ url: '/stockin/del', - method: 'delete', + method: 'post', data: ids }) } diff --git a/src/api/inventoryManagement/stockManage.js b/src/api/inventoryManagement/stockManage.js index e309241..bb2081b 100644 --- a/src/api/inventoryManagement/stockManage.js +++ b/src/api/inventoryManagement/stockManage.js @@ -3,7 +3,7 @@ // 鏌ヨ搴撳瓨淇℃伅鍒楄〃 export const getStockManagePage = (params) => { return request({ - url: "/stockmanagement/page", + url: "/stockin/listPageCopy", method: "get", params, }); @@ -22,8 +22,8 @@ // 鍒犻櫎搴撳瓨淇℃伅 export function delStockManage(ids) { return request({ - url: '/stockmanagement/del', - method: 'delete', + url: '/stockin/del', + method: 'post', data: ids }) } diff --git a/src/api/inventoryManagement/stockOut.js b/src/api/inventoryManagement/stockOut.js index 51ad1a8..5d410d9 100644 --- a/src/api/inventoryManagement/stockOut.js +++ b/src/api/inventoryManagement/stockOut.js @@ -3,7 +3,7 @@ //鏌ヨ鍑哄簱鍒楄〃 export const getStockOutPage = (params) => { return request({ - url: "/stockout/page", + url: "/stockmanagement/listPage", method: "get", params, }); @@ -30,8 +30,8 @@ //鍒犻櫎鍑哄簱淇℃伅 export const delStockOut = (ids) => { return request({ - url: '/stockout/del', - method: 'delete', + url: '/stockmanagement/del', + method: 'post', data: ids }) } @@ -39,7 +39,7 @@ //瀵煎嚭鍑哄簱淇℃伅 export const exportStockOut = (query) => { return request({ - url: '/stockout/export', + url: '/stockmanagement/export', method: 'get', params: query, responseType: 'blob' diff --git a/src/views/basicData/customerFile/index.vue b/src/views/basicData/customerFile/index.vue index 89330c6..f0c1186 100644 --- a/src/views/basicData/customerFile/index.vue +++ b/src/views/basicData/customerFile/index.vue @@ -92,26 +92,25 @@ </el-form-item> </el-col> </el-row> - <el-row :gutter="30"> + <el-row :gutter="30" v-for="(contact, index) in formYYs.contactList" :key="index"> <el-col :span="12"> <el-form-item label="鑱旂郴浜猴細" prop="contactPerson"> - <el-input - v-model="form.contactPerson" - placeholder="璇疯緭鍏�" - clearable - /> + <el-input v-model="contact.contactPerson" placeholder="璇疯緭鍏�" clearable /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="鑱旂郴鐢佃瘽锛�" prop="contactPhone"> - <el-input - v-model="form.contactPhone" - placeholder="璇疯緭鍏�" - clearable - /> + <div style="display: flex; align-items: center;width: 100%;"> + <el-input v-model="contact.contactPhone" placeholder="璇疯緭鍏�" clearable /> + <el-button @click="removeContact(index)" type="danger" circle style="margin-left: 5px;"> + <el-icon><Close /></el-icon> + </el-button> + </div> </el-form-item> </el-col> </el-row> + <el-button @click="addNewContact" style="margin-bottom: 10px;">+ 鏂板鑱旂郴浜�</el-button> + <el-row :gutter="30"> <el-col :span="12"> <el-form-item label="閾惰鍩烘湰鎴凤細" prop="basicBankAccount"> @@ -318,6 +317,14 @@ // 鐢ㄦ埛淇℃伅琛ㄥ崟寮规鏁版嵁 const operationType = ref(""); const dialogFormVisible = ref(false); +const formYYs = ref({ // 鍏朵粬瀛楁... + contactList: [ + { + contactPerson: "", + contactPhone: "" + } + ] +}); const data = reactive({ searchForm: { customerName: "", @@ -342,8 +349,8 @@ ], companyAddress: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }], companyPhone: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }], - contactPerson: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }], - contactPhone: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }], + // contactPerson: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }], + // contactPhone: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }], maintainer: [{ required: false, message: "璇烽�夋嫨", trigger: "change" }], maintenanceTime: [ { required: false, message: "璇烽�夋嫨", trigger: "change" }, @@ -366,7 +373,18 @@ url: import.meta.env.VITE_APP_BASE_API + "/basic/customer/importData", }); const { searchForm, form, rules } = toRefs(data); +const addNewContact = () => { + formYYs.value.contactList.push({ + contactPerson: "", + contactPhone: "" + }); +}; +const removeContact = (index) => { + if (formYYs.value.contactList.length > 1) { + formYYs.value.contactList.splice(index, 1); + } +}; // 鏌ヨ鍒楄〃 /** 鎼滅储鎸夐挳鎿嶄綔 */ const handleQuery = () => { @@ -404,6 +422,12 @@ operationType.value = type; form.value = {}; form.value.maintainer = userStore.nickName; + formYYs.value.contactList = [ + { + contactPerson: "", + contactPhone: "" + } + ]; form.value.maintenanceTime = getCurrentDate(); userListNoPage().then((res) => { userList.value = res.data; @@ -411,6 +435,13 @@ if (type === "edit") { getCustomer(row.id).then((res) => { form.value = { ...res.data }; + formYYs.value.contactList = res.data.contactPerson.split(",").map((item, index) => { + return { + contactPerson: item, + contactPhone: res.data.contactPhone.split(",")[index] + } + }); + }); } dialogFormVisible.value = true; @@ -429,6 +460,11 @@ }; // 鎻愪氦鏂板 const submitAdd = () => { + if(formYYs.value.contactList.length < 1){ + return proxy.$modal.msgWarning("璇疯嚦灏戞坊鍔犱竴涓仈绯讳汉"); + } + form.value.contactPerson = formYYs.value.contactList.map(item => item.contactPerson).join(","); + form.value.contactPhone = formYYs.value.contactList.map(item => item.contactPhone).join(","); addCustomer(form.value).then((res) => { proxy.$modal.msgSuccess("鎻愪氦鎴愬姛"); closeDia(); 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/approvalDia.vue b/src/views/collaborativeApproval/approvalProcess/components/approvalDia.vue new file mode 100644 index 0000000..57b5e38 --- /dev/null +++ b/src/views/collaborativeApproval/approvalProcess/components/approvalDia.vue @@ -0,0 +1,106 @@ +<template> + <div> + <el-dialog + v-model="dialogFormVisible" + :title="operationType === 'add' ? '鏂板瀹℃壒娴佺▼' : '缂栬緫瀹℃壒娴佺▼'" + width="700px" + @close="closeDia" + > + <el-form :model="{ activities }" ref="formRef" label-position="top"> + <el-timeline style="max-width: 600px"> + <el-timeline-item + v-for="(activity, index) in activities" + :key="index" + :type="activity.current ? 'primary' : ''" + :hollow="activity.current" + :timestamp="activity.timestamp" + > + <el-card> + <span style="font-size: 18px;font-weight: 700">{{activity.content}}</span> + <div style="margin: 10px 0"> + <span style="font-size: 16px;font-weight: 600">瀹℃壒浜猴細{{activity.people}}</span> + </div> + <div> + <span style="margin-bottom: 8px;display: inline-block;font-size: 16px;font-weight: 600">瀹℃壒鎰忚锛�</span> + <el-form-item + v-if="activity.current" + :prop="'activities.' + index + '.value'" + :rules="[{ required: true, message: '瀹℃壒鎰忚涓嶈兘涓虹┖', trigger: 'blur' }]" + > + <el-input v-model="activity.value" clearable type="textarea" :disabled="operationType === 'view'"></el-input> + </el-form-item> + <el-form-item v-else> + <el-input v-model="activity.value" clearable type="textarea" disabled></el-input> + </el-form-item> + </div> + </el-card> + </el-timeline-item> + </el-timeline> + </el-form> + <template #footer v-if="operationType === 'approval'"> + <div class="dialog-footer"> + <el-button type="primary" @click="submitForm">纭</el-button> + <el-button @click="closeDia">鍙栨秷</el-button> + </div> + </template> + </el-dialog> + </div> +</template> + +<script setup> +import {getCurrentInstance, ref} from "vue"; +const emit = defineEmits(['close']) +const { proxy } = getCurrentInstance() + +const dialogFormVisible = ref(false); +const operationType = ref('') +const activities = ref([ + { + content: '鑺傜偣1', + timestamp: '', + type: 'primary', + hollow: true, + people: 'admin', + value: '' + }, + { + content: '鑺傜偣2', + timestamp: '', + type: '', + hollow: false, + current: true, + people: 'admin', + value: '' + }, +]) +const formRef = ref(null); + +// 鎵撳紑寮规 +const openDialog = (type, row) => { + operationType.value = type; + dialogFormVisible.value = true; +} +// 鎻愪氦瀹℃壒 +const submitForm = () => { + formRef.value.validate(valid => { + if (valid) { + // 鏍¢獙閫氳繃鍚庣殑閫昏緫 + } + }) +} +// 鍏抽棴寮规 +const closeDia = () => { + proxy.resetForm("formRef"); + dialogFormVisible.value = false; + emit('close') +}; +defineExpose({ + openDialog, +}); +</script> + +<style scoped> +.el-timeline { + padding-left: 10px; +} +</style> \ No newline at end of file diff --git a/src/views/collaborativeApproval/approvalProcess/components/infoFormDia.vue b/src/views/collaborativeApproval/approvalProcess/components/infoFormDia.vue new file mode 100644 index 0000000..585bc43 --- /dev/null +++ b/src/views/collaborativeApproval/approvalProcess/components/infoFormDia.vue @@ -0,0 +1,263 @@ +<template> + <div> + <el-dialog + v-model="dialogFormVisible" + :title="operationType === 'add' ? '鏂板瀹℃壒娴佺▼' : '缂栬緫瀹℃壒娴佺▼'" + width="50%" + @close="closeDia" + > + <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="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="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="approveReason"> + <el-input v-model="form.approveReason" placeholder="璇疯緭鍏�" clearable type="textarea" /> + </el-form-item> + </el-col> + </el-row> + <!-- 瀹℃壒浜洪�夋嫨锛堝姩鎬佽妭鐐癸級 --> + <el-row> + <el-col :span="24"> + <el-form-item> + <template #label> + <span>瀹℃壒浜洪�夋嫨锛�</span> + <el-button type="primary" @click="addApproverNode" style="margin-left: 8px;">鏂板鑺傜偣</el-button> + </template> + <div style="display: flex; align-items: flex-end; flex-wrap: wrap;"> + <div + v-for="(node, index) in approverNodes" + :key="node.id" + style="margin-right: 30px; text-align: center; margin-bottom: 10px;" + > + <div>鑺傜偣{{ index + 1 }} 鈫�</div> + <el-select + v-model="node.userId" + placeholder="閫夋嫨浜哄憳" + style="width: 120px; margin-bottom: 8px;" + > + <el-option + v-for="user in userList" + :key="user.userId" + :label="user.nickName" + :value="user.userId" + /> + </el-select> + <div> + <el-button + type="danger" + size="small" + @click="removeApproverNode(index)" + v-if="approverNodes.length > 1" + >鍒犻櫎</el-button> + </div> + </div> + </div> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="30"> + <el-col :span="12"> + <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="approveTime"> + <el-date-picker + v-model="form.approveTime" + type="date" + placeholder="璇烽�夋嫨鏃ユ湡" + value-format="YYYY-MM-DD" + format="YYYY-MM-DD" + clearable + style="width: 100%" + /> + </el-form-item> + </el-col> + </el-row> + </el-form> + <template #footer> + <div class="dialog-footer"> + <el-button type="primary" @click="submitForm">纭</el-button> + <el-button @click="closeDia">鍙栨秷</el-button> + </div> + </template> + </el-dialog> + </div> +</template> + +<script setup> +import {ref, reactive, toRefs, getCurrentInstance} from "vue"; +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: { + approveTime: "", + approveId: "", + approveUser: "", + approveDeptId: "", + approveReason: "", + checkResult: "", + approverList: [] // 鏂板瀛楁锛屽瓨鍌ㄦ墍鏈夎妭鐐圭殑瀹℃壒浜篿d + }, + rules: { + 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 productOptions = ref([]); + +// 瀹℃壒浜鸿妭鐐圭浉鍏� +const approverNodes = ref([ + { id: 1, userId: null } +]) +let nextApproverId = 2 +const userList = ref([]) +function addApproverNode() { + approverNodes.value.push({ id: nextApproverId++, userId: null }) +} +function removeApproverNode(index) { + approverNodes.value.splice(index, 1) +} + +// 鎵撳紑寮规 +const openDialog = (type, row) => { + operationType.value = type; + dialogFormVisible.value = true; + 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') { + 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 = () => { + getDept().then((res) => { + productOptions.value = res.data; + }); +}; +function convertIdToValue(data) { + return data.map((item) => { + const { id, children, ...rest } = item; + const newItem = { + ...rest, + value: id, // 灏� id 鏀逛负 value + }; + if (children && children.length > 0) { + newItem.children = convertIdToValue(children); + } + + return newItem; + }); +} +// 鎻愪氦浜у搧琛ㄥ崟 +const submitForm = () => { + // 鏀堕泦鎵�鏈夎妭鐐圭殑瀹℃壒浜篿d + 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) { + if (operationType.value === "add") { + approveProcessAdd(form.value).then(res => { + proxy.$modal.msgSuccess("鎻愪氦鎴愬姛"); + closeDia(); + }) + } else { + approveProcessUpdate(form.value).then(res => { + proxy.$modal.msgSuccess("鎻愪氦鎴愬姛"); + closeDia(); + }) + } + } + }) +} +// 鍏抽棴寮规 +const closeDia = () => { + proxy.resetForm("formRef"); + 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, +}); +</script> + +<style scoped> + +</style> \ No newline at end of file diff --git a/src/views/collaborativeApproval/approvalProcess/index.vue b/src/views/collaborativeApproval/approvalProcess/index.vue new file mode 100644 index 0000000..ab98ab8 --- /dev/null +++ b/src/views/collaborativeApproval/approvalProcess/index.vue @@ -0,0 +1,227 @@ +<template> + <div class="app-container"> + <div class="search_form"> + <div> + <span class="search_title">渚涘簲鍟嗭細</span> + <el-input + v-model="searchForm.supplier" + style="width: 240px" + placeholder="璇疯緭鍏ヤ緵搴斿晢鎼滅储" + @change="handleQuery" + clearable + :prefix-icon="Search" + /> + <el-button type="primary" @click="handleQuery" style="margin-left: 10px" + >鎼滅储</el-button + > + </div> + <div> + <el-button type="primary" @click="openForm('add')">鏂板</el-button> +<!-- <el-button @click="handleOut">瀵煎嚭</el-button>--> + <el-button type="danger" plain @click="handleDelete">鍒犻櫎</el-button> + </div> + </div> + <div class="table_list"> + <PIMTable + rowKey="id" + :column="tableColumn" + :tableData="tableData" + :page="page" + :isSelection="true" + @selection-change="handleSelectionChange" + :tableLoading="tableLoading" + @pagination="pagination" + :total="page.total" + ></PIMTable> + </div> + <info-form-dia ref="infoFormDia" @close="handleQuery"></info-form-dia> + <approval-dia ref="approvalDia" @close="handleQuery"></approval-dia> + </div> +</template> + +<script setup> +import { Search } from "@element-plus/icons-vue"; +import {onMounted, ref} from "vue"; +import {ElMessageBox} from "element-plus"; +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: { + supplier: "", + }, +}); +const { searchForm } = toRefs(data); +const tableColumn = ref([ + { + label: "瀹℃壒鐘舵��", + prop: "approveStatus", + dataType: "tag", + formatData: (params) => { + if (params == 0) { + return "寰呭鏍�"; + } else if (params == 1) { + return "瀹℃牳涓�"; + } else if (params == 2) { + return "瀹℃牳瀹屾垚"; + } else { + return '涓嶉�氳繃'; + } + }, + formatType: (params) => { + if (params == 0) { + return "warning"; + } else if (params == 1) { + return "primary"; + } else if (params == 2) { + return "success"; + } else { + return 'danger'; + } + }, + }, + { + label: "娴佺▼缂栧彿", + prop: "approveId", + width: 230 + }, + { + label: "鐢宠閮ㄩ棬", + prop: "approveDeptName", + }, + { + label: "瀹℃壒浜嬬敱", + prop: "approveReason", + }, + { + label: "鐢宠浜�", + prop: "approveUser", + }, + { + label: "鐢宠鏃ユ湡", + prop: "approveTime", + }, + { + label: "缁撴潫鏃ユ湡", + prop: "approveOverTime", + width: 120 + }, + { + label: "褰撳墠瀹℃壒浜�", + prop: "checkCompany", + width: 120 + }, + { + dataType: "action", + label: "鎿嶄綔", + align: "center", + fixed: "right", + width: 150, + operation: [ + { + name: "缂栬緫", + type: "text", + clickFun: (row) => { + openForm("edit", row); + }, + }, + { + name: "瀹℃牳", + type: "text", + clickFun: (row) => { + openApprovalDia("approval", row); + }, + }, + { + name: "璇︽儏", + type: "text", + clickFun: (row) => { + openApprovalDia('view', row); + }, + }, + ], + }, +]); +const tableData = ref([]); +const selectedRows = ref([]); +const tableLoading = ref(false); +const page = reactive({ + current: 1, + size: 100, + total: 0 +}); +const infoFormDia = ref() +const approvalDia = ref() +const { proxy } = getCurrentInstance() + +// 鏌ヨ鍒楄〃 +/** 鎼滅储鎸夐挳鎿嶄綔 */ +const handleQuery = () => { + page.current = 1; + getList(); +}; +const pagination = (obj) => { + page.current = obj.page; + page.size = obj.limit; + getList(); +}; +const getList = () => { + tableLoading.value = true; + approveProcessListPage({...page, ...searchForm.value,}).then(res => { + tableLoading.value = false; + tableData.value = res.data.records + page.total = res.data.total; + }).catch(err => { + tableLoading.value = false; + }) +}; +// 琛ㄦ牸閫夋嫨鏁版嵁 +const handleSelectionChange = (selection) => { + selectedRows.value = selection; +}; + +// 鎵撳紑鏂板銆佺紪杈戝脊妗� +const openForm = (type, row) => { + nextTick(() => { + infoFormDia.value?.openDialog(type, row) + }) +}; +// 鎵撳紑鏂板妫�楠屽脊妗� +const openApprovalDia = (type, row) => { + nextTick(() => { + approvalDia.value?.openDialog(type, row) + }) +}; + +// 鍒犻櫎 +const handleDelete = () => { + let ids = []; + if (selectedRows.value.length > 0) { + ids = selectedRows.value.map((item) => item.id); + } else { + proxy.$modal.msgWarning("璇烽�夋嫨鏁版嵁"); + return; + } + ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚垹闄わ紝鏄惁纭鍒犻櫎锛�", "瀵煎嚭", { + confirmButtonText: "纭", + cancelButtonText: "鍙栨秷", + type: "warning", + }) + .then(() => { + approveProcessDelete(ids).then((res) => { + proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛"); + getList(); + }); + }) + .catch(() => { + proxy.$modal.msg("宸插彇娑�"); + }); +}; +onMounted(() => { + getList(); +}); +</script> + +<style scoped></style> diff --git a/src/views/inventoryManagement/dispatchLog/index.vue b/src/views/inventoryManagement/dispatchLog/index.vue index 81eff0b..e523430 100644 --- a/src/views/inventoryManagement/dispatchLog/index.vue +++ b/src/views/inventoryManagement/dispatchLog/index.vue @@ -38,14 +38,14 @@ <el-table-column align="center" label="搴忓彿" type="index" width="60" /> <el-table-column label="鍑哄簱鏃ユ湡" - prop="inboundTime" - width="100" + prop="createTime" + min-width="250" show-overflow-tooltip /> <el-table-column label="渚涘簲鍟嗗悕绉�" prop="supplierName" - width="160" + width="250" show-overflow-tooltip /> <el-table-column @@ -68,37 +68,37 @@ /> <el-table-column label="鍑哄簱鏁伴噺" - prop="inboundQuantity" + prop="inboundNum" width="100" show-overflow-tooltip /> <el-table-column label="鍚◣鍗曚环(鍏�)" - prop="entryDate" + prop="taxInclusiveUnitPrice" width="100" show-overflow-tooltip /> <el-table-column label="鍚◣鎬讳环(鍏�)" - prop="executionDate" + prop="taxInclusiveTotalPrice" width="100" show-overflow-tooltip /> <el-table-column label="绋庣巼(%)" - prop="executionDate" + prop="taxRate" width="100" show-overflow-tooltip /> <el-table-column label="涓嶅惈绋庢�讳环(鍏�)" - prop="executionDate" + prop="taxExclusiveTotalPrice" width="180" show-overflow-tooltip /> <el-table-column label="鍑哄簱浜�" - prop="nickname" + prop="createBy" width="80" show-overflow-tooltip /> @@ -259,7 +259,7 @@ type: "warning", }) .then(() => { - delStockOut(ids).then((res) => { + delStockOut({ids:ids}).then((res) => { proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛"); getList(); }); diff --git a/src/views/inventoryManagement/issueManagement/index.vue b/src/views/inventoryManagement/issueManagement/index.vue index 7ed1f68..2c28e35 100644 --- a/src/views/inventoryManagement/issueManagement/index.vue +++ b/src/views/inventoryManagement/issueManagement/index.vue @@ -19,18 +19,19 @@ :summary-method="summarizeMainTable" height="calc(100vh - 18.5em)"> <el-table-column align="center" type="selection" width="55" /> <el-table-column align="center" label="搴忓彿" type="index" width="60" /> - <el-table-column label="鍏ュ簱鏃堕棿" prop="inboundTime" width="100" show-overflow-tooltip /> - <el-table-column label="鍏ュ簱鎵规" prop="inboundBatch" width="160" show-overflow-tooltip /> + <el-table-column label="鍏ュ簱鏃堕棿" prop="createTime" width="100" show-overflow-tooltip /> + <el-table-column label="鍏ュ簱鎵规" prop="inboundBatches" width="160" show-overflow-tooltip /> <el-table-column label="渚涘簲鍟嗗悕绉�" prop="supplierName" width="160" show-overflow-tooltip /> - <el-table-column label="浜у搧澶х被" prop="productName" width="100" show-overflow-tooltip /> - <el-table-column label="瑙勬牸鍨嬪彿" prop="model" width="160" show-overflow-tooltip /> + <el-table-column label="浜у搧澶х被" prop="productCategory" width="100" show-overflow-tooltip /> + <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="stockQuantity" width="90" 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="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 /> <el-table-column label="涓嶅惈绋庢�讳环" prop="taxExclusiveTotalPrice" width="100" show-overflow-tooltip /> - <el-table-column label="鍏ュ簱浜�" prop="nickName" width="80" show-overflow-tooltip /> + <el-table-column label="鍏ュ簱浜�" prop="createBy" width="80" show-overflow-tooltip /> <el-table-column fixed="right" label="鎿嶄綔" min-width="60" align="center"> <template #default="scope"> <el-button link type="primary" size="small" @click="openForm(scope.row);">棰嗙敤</el-button> @@ -71,6 +72,9 @@ import { ElMessageBox } from "element-plus"; import useUserStore from '@/store/modules/user' import { userListNoPage } from "@/api/system/user.js"; +import { + getStockInPage +} from "@/api/inventoryManagement/stockIn.js"; import { getStockManagePage, delStockManage, @@ -124,7 +128,7 @@ } const getList = () => { tableLoading.value = true - getStockManagePage({ ...searchForm.value, ...page }).then(res => { + getStockInPage({ ...searchForm.value, ...page }).then(res => { tableLoading.value = false tableData.value = res.data.records console.log('res', res.data.records) @@ -161,10 +165,15 @@ }; const currentRowId = ref(null) // 鏂板锛氬瓨鍌ㄥ綋鍓嶆搷浣滅殑琛孖D +const currentRowNum = ref(0) +const salesLedgerProductId = ref(null); + // 鎵撳紑寮规 const openForm = async (row) => { dialogFormVisible.value = true currentRowId.value = row.id + currentRowNum.value = row.inboundNum0 + salesLedgerProductId.value = row.salesLedgerProductId form.value = {} // 鍒濆鍖栬〃鍗曟暟鎹� form.value = { @@ -185,13 +194,18 @@ // 鎻愪氦琛ㄥ崟 const submitForm = () => { + let num = Number(form.value.inboundQuantity) + if(num < 1 || num > currentRowNum.value){ + return proxy.$modal.msgWarning("璇峰~鍏ユ湁鏁堟暟瀛�") + } proxy.$refs["formRef"].validate(valid => { if (valid && currentRowId.value) { const outData = { id: currentRowId.value, // 鍘熷璁板綍ID - Quantity: form.value.inboundQuantity, // 鍑哄簱鏁伴噺 - Time: form.value.inboundTime, // 鍑哄簱鏃堕棿 - userId: form.value.userId // 鎿嶄綔浜� + salesLedgerProductId: salesLedgerProductId.value, + quantity: form.value.inboundQuantity, // 鍑哄簱鏁伴噺 + time: form.value.inboundTime, // 鍑哄簱鏃堕棿 + userId: form.value.nickName // 鎿嶄綔浜� } console.log(outData) @@ -221,7 +235,7 @@ type: 'warning', } ).then(() => { - proxy.download("/stockmanagement/export", {}, '鍏ュ簱鍙拌处.xlsx') + proxy.download("/stockin/export", {}, '鍏ュ簱鍙拌处.xlsx') }).catch(() => { proxy.$modal.msg("宸插彇娑�") }) diff --git a/src/views/inventoryManagement/receiptManagement/index.vue b/src/views/inventoryManagement/receiptManagement/index.vue index 734d9e7..6b098b0 100644 --- a/src/views/inventoryManagement/receiptManagement/index.vue +++ b/src/views/inventoryManagement/receiptManagement/index.vue @@ -19,18 +19,18 @@ :summary-method="summarizeMainTable" height="calc(100vh - 18.5em)"> <el-table-column align="center" type="selection" width="55" /> <el-table-column align="center" label="搴忓彿" type="index" width="60" /> - <el-table-column label="鍏ュ簱鏃堕棿" prop="inboundTime" width="100" show-overflow-tooltip /> - <el-table-column label="鍏ュ簱鎵规" prop="inboundBatch" width="160" show-overflow-tooltip /> + <el-table-column label="鍏ュ簱鏃堕棿" prop="createTime" width="100" show-overflow-tooltip /> + <el-table-column label="鍏ュ簱鎵规" prop="inboundBatches" width="160" show-overflow-tooltip /> <el-table-column label="渚涘簲鍟嗗悕绉�" prop="supplierName" width="160" show-overflow-tooltip /> - <el-table-column label="浜у搧澶х被" prop="productName" width="100" show-overflow-tooltip /> - <el-table-column label="瑙勬牸鍨嬪彿" prop="model" width="160" show-overflow-tooltip /> + <el-table-column label="浜у搧澶х被" prop="productCategory" width="100" show-overflow-tooltip /> + <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="inboundQuantity" width="90" show-overflow-tooltip /> + <el-table-column label="鍏ュ簱鏁伴噺" prop="inboundNum" 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 /> <el-table-column label="涓嶅惈绋庢�讳环" prop="taxExclusiveTotalPrice" width="100" show-overflow-tooltip /> - <el-table-column label="鍏ュ簱浜�" prop="nickName" width="80" show-overflow-tooltip /> + <el-table-column label="鍏ュ簱浜�" prop="createBy" width="80" show-overflow-tooltip /> <el-table-column fixed="right" label="鎿嶄綔" min-width="60" align="center"> <template #default="scope"> <el-button link type="primary" size="small" @click="openForm('edit', scope.row);">缂栬緫</el-button> @@ -240,6 +240,7 @@ const openForm = async (type, row) => { operationType.value = type dialogFormVisible.value = true + selectedRows.value = [] if (type === 'add') { // 鏂板鏃跺垵濮嬪寲琛ㄥ崟 @@ -257,16 +258,22 @@ } productList.value = [] // 娓呯┖浜у搧鍒楄〃 } else { + form.value = JSON.parse(JSON.stringify(row)) try { loadingProducts.value = true // 鏍规嵁鍚堝悓鍙峰姞杞藉搴旂殑浜у搧鍒楄〃锛堝亣璁� getProductByContract 鏄彲鐢ㄦ帴鍙o級 - const res = await getProductRecordByhetong(form.value.purchaseContractNumber) + const res = await selectProductRecordListByPuechaserId({ + purchaseContractNumber: form.value.purchaseContractNumber, + id: row.id + }); productList.value = res.data.map(item => ({ ...item, quantityStock: item.quantityStock || 0 // 濡傛灉宸叉湁鍏ュ簱鏁伴噺鍒欎繚鐣� })) + selectedRows.value = productList.value } catch (error) { + console.error('鍔犺浇浜у搧澶辫触:', error) proxy.$modal.msgError('鍔犺浇浜у搧澶辫触') productList.value = [] } finally { @@ -275,18 +282,32 @@ } } + const updatePro = async () => { + // 鍑嗗鎻愪氦鏁版嵁 + // 鍑嗗鎻愪氦鏁版嵁 - 淇敼涓哄悗绔渶瑕佺殑鏍煎紡 + const stockInData = { + id: selectedRows.value[0].recordId, + quantityStock: Number(selectedRows.value[0].quantityStock),// 浣跨敤鏂版牸寮忓寲鍑芥暟 + }; + await updateStockIn(stockInData) + proxy.$modal.msgSuccess('淇敼鍏ュ簱鎴愬姛') + closeDia() + getList() // 鍒锋柊鍒楄〃 + } // 鎻愪氦琛ㄥ崟 const submitForm = async () => { + // 楠岃瘉鑷冲皯閫夋嫨浜嗕竴涓骇鍝� + if (selectedRows.value.length === 0) { + proxy.$modal.msgError('璇峰厛鏌ヨ骞堕�夋嫨浜у搧') + return + } + if(operationType.value !== 'add'){ + await updatePro() + return + } try { await proxy.$refs.formRef.validate() - - // 楠岃瘉鑷冲皯閫夋嫨浜嗕竴涓骇鍝� - if (selectedRows.value.length === 0) { - proxy.$modal.msgError('璇峰厛鏌ヨ骞堕�夋嫨浜у搧') - return - } - // 楠岃瘉鍏ュ簱鏁伴噺 const invalidProducts = selectedRows.value.filter( product => product.quantityStock <= 0 || product.quantityStock > product.quantity0 @@ -380,7 +401,7 @@ type: 'warning', } ).then(() => { - delStockIn(ids).then(res => { + delStockIn({ids:ids}).then(res => { proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛") getList() }) diff --git a/src/views/inventoryManagement/stockManagement/index.vue b/src/views/inventoryManagement/stockManagement/index.vue index b5181d2..6356d7a 100644 --- a/src/views/inventoryManagement/stockManagement/index.vue +++ b/src/views/inventoryManagement/stockManagement/index.vue @@ -19,18 +19,18 @@ :summary-method="summarizeMainTable" height="calc(100vh - 18.5em)"> <el-table-column align="center" type="selection" width="55" /> <el-table-column align="center" label="搴忓彿" type="index" width="60" /> - <el-table-column label="搴撳瓨鏃ユ湡" prop="boundTime" width="100" show-overflow-tooltip /> - <el-table-column label="鍏ュ簱鏃ユ湡" prop="inboundTime" width="100" show-overflow-tooltip /> + <el-table-column label="搴撳瓨鏃ユ湡" prop="createTime" width="100" show-overflow-tooltip /> + <el-table-column label="鍏ュ簱鏃ユ湡" prop="createTime" width="100" show-overflow-tooltip /> <el-table-column label="渚涘簲鍟嗗悕绉�" prop="supplierName" width="160" show-overflow-tooltip /> - <el-table-column label="浜у搧澶х被" prop="productName" width="100" show-overflow-tooltip /> - <el-table-column label="瑙勬牸鍨嬪彿" prop="model" width="100" show-overflow-tooltip /> + <el-table-column label="浜у搧澶х被" prop="productCategory" width="100" show-overflow-tooltip /> + <el-table-column label="瑙勬牸鍨嬪彿" prop="specificationModel" width="100" show-overflow-tooltip /> <el-table-column label="鍗曚綅" prop="unit" width="80" show-overflow-tooltip /> - <el-table-column label="鍑哄簱鏁伴噺" prop="stockQuantity" width="100" show-overflow-tooltip /> + <el-table-column label="搴撳瓨鏁伴噺" prop="inboundNum0" width="100" 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="100" show-overflow-tooltip /> <el-table-column label="涓嶅惈绋庢�讳环" prop="taxExclusiveTotalPrice" width="100" show-overflow-tooltip /> - <el-table-column label="鍏ュ簱浜�" prop="nickName" width="80" show-overflow-tooltip /> + <el-table-column label="鍏ュ簱浜�" prop="createBy" width="80" show-overflow-tooltip /> <el-table-column fixed="right" label="鎿嶄綔" min-width="60" align="center"> <template #default="scope"> <el-button link type="primary" size="small" @click="openForm('edit', scope.row);">缂栬緫</el-button> @@ -40,20 +40,20 @@ <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"> <el-col :span="12"> <el-form-item label="渚涘簲鍟嗗悕绉帮細" prop="supplierName"> - <el-input v-model="form.supplierName" placeholder="璇疯緭鍏�" clearable /> + <el-input disabled v-model="form.supplierName" placeholder="璇疯緭鍏�" clearable /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="浜у搧澶х被锛�" prop="productId"> - <el-select v-model="form.productId" placeholder="璇烽�夋嫨" clearable filterable @change="handleProductChange"> + <el-select disabled v-model="form.productCategory" placeholder="璇烽�夋嫨" clearable filterable @change="handleProductChange"> <el-option v-for="item in productList" :key="item.id" :label="item.productName" - :value="item.id" /> + :value="item.productName" /> </el-select> </el-form-item> </el-col> @@ -61,7 +61,7 @@ <el-row :gutter="30"> <el-col :span="12"> <el-form-item label="瑙勬牸鍨嬪彿锛�" prop="productManageId"> - <el-select v-model="form.productModelId" placeholder="璇峰厛閫夋嫨浜у搧澶х被" clearable filterable :disabled="!form.productId" + <el-select disabled v-model="form.specificationModel" placeholder="璇峰厛閫夋嫨浜у搧澶х被" clearable filterable :disabled="!form.productCategory" @change="handleModelChange"> <el-option v-for="item in productModelList" :key="item.id" :label="item.model" :value="item.id" /> @@ -69,21 +69,21 @@ </el-form-item> </el-col> <el-col :span="12"> - <el-form-item label="鍗曚綅锛�" prop="customerId"> - <el-input v-model="form.unit" placeholder="璇疯緭鍏�" clearable /> + <el-form-item label="鍗曚綅锛�" prop="customerId"> + <el-input disabled v-model="form.unit" placeholder="璇疯緭鍏�" clearable /> </el-form-item> </el-col> </el-row> <el-row :gutter="30"> <el-col :span="12"> <el-form-item label="搴撳瓨鏃堕棿锛�" prop="projectName"> - <el-date-picker style="width: 100%" v-model="form.boundTime" value-format="YYYY-MM-DD" format="YYYY-MM-DD" + <el-date-picker style="width: 100%" v-model="form.updateTime" value-format="YYYY-MM-DD" format="YYYY-MM-DD" type="date" placeholder="璇烽�夋嫨" clearable /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="鍏ュ簱鏃堕棿锛�" prop="projectName"> - <el-date-picker style="width: 100%" v-model="form.inboundTime" value-format="YYYY-MM-DD" format="YYYY-MM-DD" + <el-date-picker style="width: 100%" v-model="form.createTime" value-format="YYYY-MM-DD" format="YYYY-MM-DD" type="date" placeholder="璇烽�夋嫨" clearable /> </el-form-item> </el-col> @@ -91,26 +91,26 @@ <el-row :gutter="30"> <el-col :span="12"> - <el-form-item label="鍚◣鍗曚环锛�" prop="customerId"> - <el-input v-model="form.taxInclusiveUnitPrice" placeholder="璇疯緭鍏�" clearable /> + <el-form-item label="鍚◣鍗曚环锛�" prop="customerId"> + <el-input disabled v-model="form.taxInclusiveUnitPrice" placeholder="璇疯緭鍏�" clearable /> </el-form-item> </el-col> <el-col :span="12"> - <el-form-item label="鍚◣鎬讳环锛�" prop="customerContractNo"> - <el-input v-model="form.taxInclusiveTotalPrice" placeholder="璇疯緭鍏�" clearable /> + <el-form-item label="鍚◣鎬讳环锛�" prop="customerContractNo"> + <el-input disabled v-model="form.taxInclusiveTotalPrice" placeholder="璇疯緭鍏�" clearable /> </el-form-item> </el-col> </el-row> <el-row :gutter="30"> <el-col :span="12"> - <el-form-item label="绋庣巼锛�" prop="customerId"> - <el-input v-model="form.taxRate" placeholder="璇疯緭鍏�" clearable /> + <el-form-item label="绋庣巼锛�" prop="customerId"> + <el-input disabled v-model="form.taxRate" placeholder="璇疯緭鍏�" clearable /> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="涓嶅惈绋庢�讳环锛�" prop="entryDate"> - <el-input v-model="form.taxExclusiveTotalPrice" placeholder="璇疯緭鍏�" clearable /> + <el-input disabled v-model="form.taxExclusiveTotalPrice" placeholder="璇疯緭鍏�" clearable /> </el-form-item> </el-col> </el-row> @@ -118,7 +118,7 @@ <el-col :span="12"> <el-form-item label="鍑哄簱浜猴細" prop="entryPerson"> - <el-select v-model="form.nickName" placeholder="璇烽�夋嫨" clearable> + <el-select v-model="form.createUser" placeholder="璇烽�夋嫨" clearable> <el-option v-for="item in userList" :key="item.userId" :label="item.nickName" :value="item.userId" /> </el-select> </el-form-item> @@ -141,18 +141,24 @@ import { ElMessageBox } from "element-plus"; import useUserStore from '@/store/modules/user' import { userListNoPage } from "@/api/system/user.js"; +import { productTreeList,modelList } from "@/api/basicData/product.js" import { getStockManagePage , updateStockManage, delStockManage, exportStockManage } from "@/api/inventoryManagement/stockManage.js"; +import { + updateManagement +} from "@/api/inventoryManagement/stockIn.js"; const userStore = useUserStore() const { proxy } = getCurrentInstance() const tableData = ref([]) const productData = ref([]) const selectedRows = ref([]) const userList = ref([]) +const productList = ref([]) +const productModelList = ref([]) // const customerOption = ref([]) const tableLoading = ref(false) const page = reactive({ @@ -259,13 +265,25 @@ // console.log('userStore.id', userStore.id) // form.value.entryPerson = userStore.id if (type === 'edit') { - currentId.value = row.id; - getSalesLedgerWithProducts({ id: row.id, type: 1 }).then(res => { - form.value = { ...res } - form.value.entryPerson = Number(res.entryPerson) - productData.value = form.value.productData - fileList.value = form.value.salesLedgerFiles + form.value = { ...row } + productTreeList().then(res =>{ + productList.value = res + productList.value.forEach(i =>{ + if (i.label === row.productCategory) { + modelList({ id: i.id }).then((res) => { + productModelList.value = res; + }); + } + }) }) + + + // getSalesLedgerWithProducts({ id: row.id, type: 1 }).then(res => { + + // form.value.entryPerson = Number(res.entryPerson) + // productData.value = form.value.productData + // fileList.value = form.value.salesLedgerFiles + // }) } form.value.entryDate = getCurrentDate() // 璁剧疆榛樿褰曞叆鏃ユ湡涓哄綋鍓嶆棩鏈� dialogFormVisible.value = true @@ -273,21 +291,22 @@ // 鎻愪氦琛ㄥ崟 const submitForm = () => { + console.log(form.value) proxy.$refs["formRef"].validate(valid => { if (valid) { - if (productData.value.length > 0) { - form.value.productData = proxy.HaveJson(productData.value) - } else { - proxy.$modal.msgWarning('璇锋坊鍔犱骇鍝佷俊鎭�') - return - } - let tempFileIds = [] - if (fileList.value.length > 0) { - tempFileIds = fileList.value.map(item => item.tempId) - } - form.value.tempFileIds = tempFileIds - form.value.type = 1 - addOrUpdateSalesLedger(form.value).then(res => { + // if (productData.value.length > 0) { + // form.value.productData = proxy.HaveJson(productData.value) + // } else { + // proxy.$modal.msgWarning('璇锋坊鍔犱骇鍝佷俊鎭�') + // return + // } + // let tempFileIds = [] + // if (fileList.value.length > 0) { + // tempFileIds = fileList.value.map(item => item.tempId) + // } + // form.value.tempFileIds = tempFileIds + // form.value.type = 1 + updateManagement(form.value).then(res => { proxy.$modal.msgSuccess("鎻愪氦鎴愬姛") closeDia() getList() @@ -311,7 +330,7 @@ type: 'warning', } ).then(() => { - proxy.download("/stockmanagement/export", {}, '搴撳瓨淇℃伅.xlsx') + proxy.download("/stockin/exportCopy", {}, '搴撳瓨淇℃伅.xlsx') }).catch(() => { proxy.$modal.msg("宸插彇娑�") }) @@ -333,7 +352,7 @@ type: 'warning', } ).then(() => { - delStockManage(ids).then(res => { + delStockManage({ids:ids}).then(res => { proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛") getList() }) 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="瀹㈡埛鍚堝悓鍙凤細"> diff --git a/vite.config.js b/vite.config.js index 2f9c048..8d2eccb 100644 --- a/vite.config.js +++ b/vite.config.js @@ -8,7 +8,7 @@ const { VITE_APP_ENV } = env; const baseUrl = VITE_APP_ENV == "development" - ? "http://127.0.0.1:7005" // 寮�鍙戠幆澧冨悗绔帴鍙� + ? "http://127.0.0.1:7003" // 寮�鍙戠幆澧冨悗绔帴鍙� : "http://114.132.189.42:7003"; // 鐢熶骇鐜鍚庣鎺ュ彛 return { -- Gitblit v1.9.3