From 2362a3399f333aec47afc83caf0bfb1887af24a5 Mon Sep 17 00:00:00 2001
From: 曹睿 <360930172@qq.com>
Date: 星期四, 10 七月 2025 14:16:15 +0800
Subject: [PATCH] Merge branch 'dev' of http://114.132.189.42:9002/r/product-inventory-management into dev
---
src/views/collaborativeApproval/approvalProcess/components/approvalDia.vue | 55 +++++--------
src/api/collaborativeApproval/approvalProcess.js | 15 +++
src/api/system/user.js | 8 ++
src/views/basicData/supplierManage/index.vue | 3
src/store/modules/user.js | 1
src/views/basicData/customerFile/index.vue | 2
src/views/basicData/product/index.vue | 65 ++++++++++++---
src/views/inventoryManagement/issueManagement/index.vue | 4
src/views/inventoryManagement/stockManagement/index.vue | 4
src/views/collaborativeApproval/approvalProcess/index.vue | 19 ++--
src/views/salesManagement/salesLedger/index.vue | 8 +
src/views/collaborativeApproval/approvalProcess/components/infoFormDia.vue | 48 +++++++----
12 files changed, 149 insertions(+), 83 deletions(-)
diff --git a/src/api/collaborativeApproval/approvalProcess.js b/src/api/collaborativeApproval/approvalProcess.js
index 4f8ca33..415bed8 100644
--- a/src/api/collaborativeApproval/approvalProcess.js
+++ b/src/api/collaborativeApproval/approvalProcess.js
@@ -38,6 +38,14 @@
data: query,
})
}
+// 鎻愪氦瀹℃壒
+export function updateApproveNode(query) {
+ return request({
+ url: '/approveNode/updateApproveNode',
+ method: 'post',
+ data: query,
+ })
+}
// 鍒犻櫎瀹℃壒娴佺▼
export function approveProcessDelete(query) {
return request({
@@ -45,4 +53,11 @@
method: 'delete',
data: query,
})
+}
+// 鏌ヨ瀹℃壒娴佺▼
+export function approveProcessDetails(query) {
+ return request({
+ url: '/approveNode/details/' + query,
+ method: 'get',
+ })
}
\ No newline at end of file
diff --git a/src/api/system/user.js b/src/api/system/user.js
index 7192d9b..431f6b0 100644
--- a/src/api/system/user.js
+++ b/src/api/system/user.js
@@ -135,6 +135,14 @@
})
}
// 鏌ヨ鐢ㄦ埛鍒楄〃
+export function userListNoPageByTenantId() {
+ return request({
+ url: '/system/user/userListNoPageByTenantId',
+ method: 'get'
+ })
+}
+
+// 鏌ヨ鐢ㄦ埛鍒楄〃
export function userListNoPage() {
return request({
url: '/system/user/userListNoPage',
diff --git a/src/store/modules/user.js b/src/store/modules/user.js
index 5623661..2dd2797 100644
--- a/src/store/modules/user.js
+++ b/src/store/modules/user.js
@@ -52,6 +52,7 @@
this.avatar = avatar
this.currentFactoryName = user.currentFactoryName
this.nickName = user.nickName
+ this.currentDeptId = user.currentDeptId
resolve(res)
}).catch(error => {
reject(error)
diff --git a/src/views/basicData/customerFile/index.vue b/src/views/basicData/customerFile/index.vue
index f0c1186..2294dd7 100644
--- a/src/views/basicData/customerFile/index.vue
+++ b/src/views/basicData/customerFile/index.vue
@@ -309,7 +309,7 @@
const tableLoading = ref(false);
const page = reactive({
current: 1,
- size: 10,
+ size: 100,
total: 0,
});
const total = ref(0);
diff --git a/src/views/basicData/product/index.vue b/src/views/basicData/product/index.vue
index b17be1f..3aa263e 100644
--- a/src/views/basicData/product/index.vue
+++ b/src/views/basicData/product/index.vue
@@ -55,7 +55,7 @@
>
缂栬緫
</el-button>
- <el-button type="primary" link @click="openProDia('add', data)">
+ <el-button type="primary" link @click="openProDia('add', data)" :disabled="node.level >= 3">
娣诲姞浜у搧
</el-button>
<el-button
@@ -99,7 +99,7 @@
@pagination="pagination"
></PIMTable>
</div>
- <el-dialog v-model="productDia" title="浜у搧" width="400px">
+ <el-dialog v-model="productDia" title="浜у搧" width="400px" @keydown.enter.prevent>
<el-form
:model="form"
label-width="140px"
@@ -114,6 +114,7 @@
v-model="form.productName"
placeholder="璇疯緭鍏ヤ骇鍝佸悕绉�"
clearable
+ @keydown.enter.prevent
/>
</el-form-item>
</el-col>
@@ -131,6 +132,7 @@
title="瑙勬牸鍨嬪彿"
width="400px"
@close="closeModelDia"
+ @keydown.enter.prevent
>
<el-form
:model="modelForm"
@@ -146,6 +148,7 @@
v-model="modelForm.model"
placeholder="璇疯緭鍏ヨ鏍煎瀷鍙�"
clearable
+ @keydown.enter.prevent
/>
</el-form-item>
</el-col>
@@ -157,6 +160,7 @@
v-model="modelForm.unit"
placeholder="璇疯緭鍏ュ崟浣�"
clearable
+ @keydown.enter.prevent
/>
</el-form-item>
</el-col>
@@ -315,16 +319,53 @@
proxy.$refs.formRef.resetFields();
productDia.value = false;
};
+// 灏佽涓�涓畨鍏ㄧ殑纭妗嗭紝褰诲簳闃绘Enter閿Е鍙�
+const safeConfirm = (message, title) => {
+ // 鏍囪鏄惁鏄紶鏍囩偣鍑伙紙鐐瑰嚮鎸夐挳浼氳Е鍙慺ocus浜嬩欢锛�
+ let isMouseClick = false;
+
+ return new Promise((resolve, reject) => {
+ const box = ElMessageBox.confirm(message, title, {
+ confirmButtonText: "纭",
+ cancelButtonText: "鍙栨秷",
+ type: "warning",
+ beforeClose: (action, instance, done) => {
+ if (action === "confirm") {
+ // 鍙湁榧犳爣鐐瑰嚮鏃舵墠鍏佽纭
+ if (isMouseClick) {
+ done();
+ resolve();
+ } else {
+ // Enter閿Е鍙戞椂闃绘
+ done(false);
+ }
+ } else {
+ // 鍙栨秷鎿嶄綔鐩存帴鍏佽
+ done();
+ reject();
+ }
+ }
+ });
+
+ // 鐩戝惉纭鎸夐挳鐨刦ocus浜嬩欢锛堥紶鏍囩偣鍑讳細瑙﹀彂锛孍nter閿笉浼氾級
+ setTimeout(() => {
+ const confirmBtn = document.querySelector('.el-message-box__btns .el-button--primary');
+ if (confirmBtn) {
+ confirmBtn.addEventListener('focus', () => {
+ isMouseClick = true;
+ });
+ }
+ }, 0); // 寤惰繜鑾峰彇锛岀‘淇滵OM宸叉覆鏌�
+ });
+};
+// 鍒犻櫎浜у搧
// 鍒犻櫎浜у搧
const remove = (node, data) => {
- let ids = [];
- ids.push(data.id);
- ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚垹闄わ紝鏄惁纭鍒犻櫎锛�", "鍒犻櫎鎻愮ず", {
- confirmButtonText: "纭",
- cancelButtonText: "鍙栨秷",
- type: "warning",
- })
+ let ids = [data.id];
+ // 浣跨敤灏佽鐨剆afeConfirm
+ safeConfirm("閫変腑鐨勫唴瀹瑰皢琚垹闄わ紝鏄惁纭鍒犻櫎锛�", "鍒犻櫎鎻愮ず")
.then(() => {
+ // 纭鍒犻櫎閫昏緫
tableLoading.value = true;
delProduct(ids)
.then((res) => {
@@ -400,11 +441,7 @@
proxy.$modal.msgWarning("璇烽�夋嫨鏁版嵁");
return;
}
- ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚垹闄わ紝鏄惁纭鍒犻櫎锛�", "鍒犻櫎鎻愮ず", {
- confirmButtonText: "纭",
- cancelButtonText: "鍙栨秷",
- type: "warning",
- })
+ safeConfirm("閫変腑鐨勫唴瀹瑰皢琚垹闄わ紝鏄惁纭鍒犻櫎锛�", "鍒犻櫎鎻愮ず")
.then(() => {
tableLoading.value = true;
delProductModel(ids)
diff --git a/src/views/basicData/supplierManage/index.vue b/src/views/basicData/supplierManage/index.vue
index 22216e3..f5eb792 100644
--- a/src/views/basicData/supplierManage/index.vue
+++ b/src/views/basicData/supplierManage/index.vue
@@ -35,6 +35,7 @@
:isSelection="true"
@selection-change="handleSelectionChange"
:tableLoading="tableLoading"
+ @pagination="pagination"
></PIMTable>
</div>
<el-dialog
@@ -297,7 +298,7 @@
const tableLoading = ref(false);
const page = reactive({
current: 1,
- size: 10,
+ size: 100,
total: 0,
});
diff --git a/src/views/collaborativeApproval/approvalProcess/components/approvalDia.vue b/src/views/collaborativeApproval/approvalProcess/components/approvalDia.vue
index 57b5e38..7e9488a 100644
--- a/src/views/collaborativeApproval/approvalProcess/components/approvalDia.vue
+++ b/src/views/collaborativeApproval/approvalProcess/components/approvalDia.vue
@@ -13,24 +13,24 @@
:key="index"
:type="activity.current ? 'primary' : ''"
:hollow="activity.current"
- :timestamp="activity.timestamp"
+ :timestamp="activity.approveNodeTime"
>
<el-card>
- <span style="font-size: 18px;font-weight: 700">{{activity.content}}</span>
+ <span style="font-size: 18px;font-weight: 700">鑺傜偣{{activity.approveNodeOrder}}</span>
<div style="margin: 10px 0">
- <span style="font-size: 16px;font-weight: 600">瀹℃壒浜猴細{{activity.people}}</span>
+ <span style="font-size: 16px;font-weight: 600">瀹℃壒浜猴細{{activity.approveNodeUser}}</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'"
+ v-if="activity.approveNodeRemark == 1"
+ :prop="'activities.' + index + '.approveNodeReason'"
:rules="[{ required: true, message: '瀹℃壒鎰忚涓嶈兘涓虹┖', trigger: 'blur' }]"
>
- <el-input v-model="activity.value" clearable type="textarea" :disabled="operationType === 'view'"></el-input>
+ <el-input v-model="activity.approveNodeReason" 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-input v-model="activity.approveNodeReason" clearable type="textarea" disabled></el-input>
</el-form-item>
</div>
</el-card>
@@ -39,7 +39,8 @@
</el-form>
<template #footer v-if="operationType === 'approval'">
<div class="dialog-footer">
- <el-button type="primary" @click="submitForm">纭</el-button>
+ <el-button type="primary" @click="submitForm(2)">涓嶉�氳繃</el-button>
+ <el-button type="primary" @click="submitForm(1)">閫氳繃</el-button>
<el-button @click="closeDia">鍙栨秷</el-button>
</div>
</template>
@@ -49,44 +50,32 @@
<script setup>
import {getCurrentInstance, ref} from "vue";
+import {approveProcessDetails, updateApproveNode} from "../../../../api/collaborativeApproval/approvalProcess.js";
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 activities = ref([])
const formRef = ref(null);
// 鎵撳紑寮规
const openDialog = (type, row) => {
operationType.value = type;
dialogFormVisible.value = true;
+ approveProcessDetails(row.approveId).then((res) => {
+ console.log(res)
+ activities.value = res.data
+ })
}
// 鎻愪氦瀹℃壒
-const submitForm = () => {
- formRef.value.validate(valid => {
- if (valid) {
- // 鏍¢獙閫氳繃鍚庣殑閫昏緫
- }
- })
+const submitForm = (status) => {
+ const filteredActivities = activities.value.filter(activity => activity.approveNodeRemark == 1);
+ filteredActivities[0].approveNodeStatus = status
+ updateApproveNode(filteredActivities[0]).then(() => {
+ proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
+ closeDia();
+ })
}
// 鍏抽棴寮规
const closeDia = () => {
diff --git a/src/views/collaborativeApproval/approvalProcess/components/infoFormDia.vue b/src/views/collaborativeApproval/approvalProcess/components/infoFormDia.vue
index 585bc43..e02d3ee 100644
--- a/src/views/collaborativeApproval/approvalProcess/components/infoFormDia.vue
+++ b/src/views/collaborativeApproval/approvalProcess/components/infoFormDia.vue
@@ -18,6 +18,7 @@
<el-col :span="24">
<el-form-item label="鐢宠閮ㄩ棬锛�" prop="approveDeptId">
<el-select
+ disabled
v-model="form.approveDeptId"
placeholder="閫夋嫨閮ㄩ棬"
>
@@ -81,7 +82,17 @@
<el-row :gutter="30">
<el-col :span="12">
<el-form-item label="鐢宠浜猴細" prop="approveUser">
- <el-input v-model="form.approveUser" placeholder="璇疯緭鍏�" clearable/>
+ <el-select
+ v-model="form.approveUser"
+ placeholder="閫夋嫨浜哄憳"
+ >
+ <el-option
+ v-for="user in userList"
+ :key="user.userId"
+ :label="user.nickName"
+ :value="user.userId"
+ />
+ </el-select>
</el-form-item>
</el-col>
<el-col :span="12">
@@ -116,7 +127,7 @@
approveProcessUpdate,
getDept
} from "../../../../api/collaborativeApproval/approvalProcess.js";
-import {userListNoPage} from "../../../../api/system/user.js";
+import {userListNoPage, getUserProfile} from "../../../../api/system/user.js";
const { proxy } = getCurrentInstance()
const emit = defineEmits(['close'])
import useUserStore from "@/store/modules/user";
@@ -171,26 +182,27 @@
approverNodes.value = [
{ id: 1, userId: null }
]
- form.value.approveUser = userStore.nickName;
+ console.log(userStore)
+ form.value.approveUser = userStore.id;
form.value.approveTime = getCurrentDate();
+
+ // 鑾峰彇褰撳墠鐢ㄦ埛淇℃伅骞惰缃儴闂↖D
+ form.value.approveDeptId = userStore.currentDeptId
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
- // }
+ if (res.data && res.data.approveUserIds) {
+ const userIds = res.data.approveUserIds.split(',')
+ approverNodes.value = userIds.map((userId, idx) => ({
+ id: idx + 1,
+ userId: parseInt(userId.trim())
+ }))
+ nextApproverId = userIds.length + 1
+ } else {
+ approverNodes.value = [{ id: 1, userId: null }]
+ nextApproverId = 2
+ }
})
}
}
@@ -216,7 +228,7 @@
// 鎻愪氦浜у搧琛ㄥ崟
const submitForm = () => {
// 鏀堕泦鎵�鏈夎妭鐐圭殑瀹℃壒浜篿d
- form.value.approverIds = approverNodes.value.map(node => node.userId).join(',')
+ form.value.approveUserIds = approverNodes.value.map(node => node.userId).join(',')
// 瀹℃壒浜哄繀濉牎楠�
const hasEmptyApprover = approverNodes.value.some(node => !node.userId)
if (hasEmptyApprover) {
diff --git a/src/views/collaborativeApproval/approvalProcess/index.vue b/src/views/collaborativeApproval/approvalProcess/index.vue
index ab98ab8..10fbf29 100644
--- a/src/views/collaborativeApproval/approvalProcess/index.vue
+++ b/src/views/collaborativeApproval/approvalProcess/index.vue
@@ -2,11 +2,11 @@
<div class="app-container">
<div class="search_form">
<div>
- <span class="search_title">渚涘簲鍟嗭細</span>
+ <span class="search_title">娴佺▼缂栧彿锛�</span>
<el-input
- v-model="searchForm.supplier"
+ v-model="searchForm.approveId"
style="width: 240px"
- placeholder="璇疯緭鍏ヤ緵搴斿晢鎼滅储"
+ placeholder="璇疯緭鍏ユ祦绋嬬紪鍙锋悳绱�"
@change="handleQuery"
clearable
:prefix-icon="Search"
@@ -43,14 +43,13 @@
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: "",
+ approveId: "",
},
});
const { searchForm } = toRefs(data);
@@ -85,19 +84,21 @@
{
label: "娴佺▼缂栧彿",
prop: "approveId",
- width: 230
+ width: 170
},
{
label: "鐢宠閮ㄩ棬",
prop: "approveDeptName",
+ width: 220
},
{
label: "瀹℃壒浜嬬敱",
prop: "approveReason",
+ width: 200
},
{
label: "鐢宠浜�",
- prop: "approveUser",
+ prop: "approveUserName",
},
{
label: "鐢宠鏃ユ湡",
@@ -110,7 +111,7 @@
},
{
label: "褰撳墠瀹℃壒浜�",
- prop: "checkCompany",
+ prop: "approveUserCurrentName",
width: 120
},
{
@@ -199,7 +200,7 @@
const handleDelete = () => {
let ids = [];
if (selectedRows.value.length > 0) {
- ids = selectedRows.value.map((item) => item.id);
+ ids = selectedRows.value.map((item) => item.approveId);
} else {
proxy.$modal.msgWarning("璇烽�夋嫨鏁版嵁");
return;
diff --git a/src/views/inventoryManagement/issueManagement/index.vue b/src/views/inventoryManagement/issueManagement/index.vue
index 2c28e35..859dc94 100644
--- a/src/views/inventoryManagement/issueManagement/index.vue
+++ b/src/views/inventoryManagement/issueManagement/index.vue
@@ -71,7 +71,7 @@
import { ref } from 'vue'
import { ElMessageBox } from "element-plus";
import useUserStore from '@/store/modules/user'
-import { userListNoPage } from "@/api/system/user.js";
+import { userListNoPageByTenantId } from "@/api/system/user.js";
import {
getStockInPage
} from "@/api/inventoryManagement/stockIn.js";
@@ -185,7 +185,7 @@
console.log('form',form.value)
// 鍔犺浇鐢ㄦ埛鍒楄〃
try {
- const userLists = await userListNoPage()
+ const userLists = await userListNoPageByTenantId()
userList.value = userLists.data
} catch (error) {
console.error('鍔犺浇鐢ㄦ埛鍒楄〃澶辫触:', error)
diff --git a/src/views/inventoryManagement/stockManagement/index.vue b/src/views/inventoryManagement/stockManagement/index.vue
index 6356d7a..86f1a76 100644
--- a/src/views/inventoryManagement/stockManagement/index.vue
+++ b/src/views/inventoryManagement/stockManagement/index.vue
@@ -140,7 +140,7 @@
import { ref } from 'vue'
import { ElMessageBox } from "element-plus";
import useUserStore from '@/store/modules/user'
-import { userListNoPage } from "@/api/system/user.js";
+import { userListNoPageByTenantId } from "@/api/system/user.js";
import { productTreeList,modelList } from "@/api/basicData/product.js"
import {
getStockManagePage ,
@@ -257,7 +257,7 @@
operationType.value = type
form.value = {}
productData.value = []
- let userLists = await userListNoPage()
+ let userLists = await userListNoPageByTenantId()
userList.value = userLists.data
// customerList().then(res => {
// customerOption.value = res
diff --git a/src/views/salesManagement/salesLedger/index.vue b/src/views/salesManagement/salesLedger/index.vue
index 3ec809b..5a269d6 100644
--- a/src/views/salesManagement/salesLedger/index.vue
+++ b/src/views/salesManagement/salesLedger/index.vue
@@ -153,7 +153,7 @@
<el-row>
<el-form-item label="浜у搧淇℃伅锛�" prop="entryDate">
<el-button type="primary" @click="openProductForm('add')">娣诲姞</el-button>
- <el-button plain type="danger" @click="deleteProduct">鍒犻櫎</el-button>
+ <el-button plain type="danger" @click="deleteProduct" >鍒犻櫎</el-button>
</el-form-item>
</el-row>
<el-table :data="productData" border @selection-change="productSelected" show-summary
@@ -631,14 +631,15 @@
const submitForm = () => {
proxy.$refs["formRef"].validate((valid) => {
if (valid) {
- if (productData.value.length > 0) {
+ console.log('productData.value--', productData.value)
+ if (productData.value !== null && productData.value.length > 0) {
form.value.productData = proxy.HaveJson(productData.value);
} else {
proxy.$modal.msgWarning("璇锋坊鍔犱骇鍝佷俊鎭�");
return;
}
let tempFileIds = [];
- if (fileList.value.length > 0) {
+ if (fileList.value !== null && fileList.value.length > 0) {
tempFileIds = fileList.value.map((item) => item.tempId);
}
form.value.tempFileIds = tempFileIds;
@@ -682,6 +683,7 @@
};
const submitProductEdit = () => {
productForm.value.salesLedgerId = currentId.value;
+ productForm.value.type = 1
addOrUpdateSalesLedgerProduct(productForm.value).then((res) => {
proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
closeProductDia();
--
Gitblit v1.9.3