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