From 4471ef257abf88eda6e84623fef5f3aa2b77be38 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期三, 09 七月 2025 17:47:37 +0800
Subject: [PATCH] 协同审批页面联调
---
src/api/collaborativeApproval/approvalProcess.js | 48 +++++++++
src/views/collaborativeApproval/approvalProcess/index.vue | 49 +++------
src/views/collaborativeApproval/approvalProcess/components/infoFormDia.vue | 172 +++++++++++++++++-----------------
3 files changed, 154 insertions(+), 115 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/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("宸插彇娑�");
--
Gitblit v1.9.3