From f624d2f62d1e2e6c61dffd79eb728d41a0128c72 Mon Sep 17 00:00:00 2001
From: 张诺 <zhang_12370@163.com>
Date: 星期二, 28 四月 2026 17:40:24 +0800
Subject: [PATCH] 生产工单 生产派拆 报工优化
---
src/views/productionManagement/productionProcess/Edit.vue | 111 ++++++++++++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 100 insertions(+), 11 deletions(-)
diff --git a/src/views/productionManagement/productionProcess/Edit.vue b/src/views/productionManagement/productionProcess/Edit.vue
index a7903f2..35b05a3 100644
--- a/src/views/productionManagement/productionProcess/Edit.vue
+++ b/src/views/productionManagement/productionProcess/Edit.vue
@@ -8,6 +8,21 @@
>
<el-form label-width="140px" :model="formState" label-position="top" ref="formRef">
<el-form-item
+ label="宸ュ簭缂栧彿锛�"
+ prop="no"
+ :rules="[
+ {
+ required: true,
+ message: '璇疯緭鍏ュ伐搴忕紪鍙�',
+ },
+ {
+ max: 100,
+ message: '鏈�澶�100涓瓧绗�',
+ }
+ ]">
+ <el-input v-model="formState.no" placeholder="璇疯緭鍏ュ伐搴忓悕绉�" />
+ </el-form-item>
+ <el-form-item
label="宸ュ簭鍚嶇О锛�"
prop="name"
:rules="[
@@ -60,23 +75,52 @@
</el-select>
</el-form-item>
<el-form-item
- label="宸ュ簭绫诲瀷"
- prop="type"
+ label="鎶ュ伐浜�"
+ prop="ids"
:rules="[
- {
+ {
required: true,
- message: '璇烽�夋嫨宸ュ簭绫诲瀷',
+ message: '璇烽�夋嫨鎶ュ伐浜�',
+ trigger: 'change',
}
]"
>
- <el-select v-model="formState.type" placeholder="璇烽�夋嫨宸ュ簭绫诲瀷">
- <el-option label="璁℃椂" :value="0" />
- <el-option label="璁′欢" :value="1" />
+ <el-select
+ v-model="formState.ids"
+ multiple
+ filterable
+ clearable
+ collapse-tags
+ collapse-tags-tooltip
+ placeholder="璇烽�夋嫨鎶ュ伐浜�"
+ @change="handleReportUsersChange"
+ >
+ <el-option
+ v-for="item in userOptions"
+ :key="item.userId"
+ :label="item.nickName"
+ :value="item.userId"
+ />
</el-select>
</el-form-item>
- <el-form-item label="宸ヨ祫瀹氶" prop="salaryQuota">
- <el-input v-model="formState.salaryQuota" type="number" :step="0.001" />
- </el-form-item>
+<!-- <el-form-item-->
+<!-- label="宸ュ簭绫诲瀷"-->
+<!-- prop="type"-->
+<!-- :rules="[-->
+<!-- {-->
+<!-- required: true,-->
+<!-- message: '璇烽�夋嫨宸ュ簭绫诲瀷',-->
+<!-- }-->
+<!-- ]"-->
+<!-- >-->
+<!-- <el-select v-model="formState.type" placeholder="璇烽�夋嫨宸ュ簭绫诲瀷">-->
+<!-- <el-option label="璁℃椂" :value="0" />-->
+<!-- <el-option label="璁′欢" :value="1" />-->
+<!-- </el-select>-->
+<!-- </el-form-item>-->
+<!-- <el-form-item label="宸ヨ祫瀹氶" prop="salaryQuota">-->
+<!-- <el-input v-model="formState.salaryQuota" type="number" :step="0.001" />-->
+<!-- </el-form-item>-->
<el-form-item label="鏄惁璐ㄦ" prop="isQuality">
<el-switch v-model="formState.isQuality" :active-value="true" inactive-value="false"/>
</el-form-item>
@@ -95,9 +139,10 @@
</template>
<script setup>
-import { ref, computed, getCurrentInstance, watch, reactive, nextTick, onBeforeUnmount } from "vue";
+import { ref, computed, getCurrentInstance, watch, reactive, nextTick, onBeforeUnmount, onMounted } from "vue";
import { update } from "@/api/productionManagement/productionProcess.js";
import { getLedgerPage } from "@/api/equipmentManagement/ledger.js";
+import { userListNoPageByTenantId } from "@/api/system/user.js";
const props = defineProps({
visible: {
@@ -121,6 +166,8 @@
no: props.record.no,
deviceId: props.record.deviceId,
deviceName: props.record.deviceName,
+ ids: [],
+ reportWorkerList: [],
remark: props.record.remark,
salaryQuota: props.record.salaryQuota,
isQuality: props.record.isQuality,
@@ -137,6 +184,7 @@
const deviceQuery = ref("");
const deviceScrollWrap = ref(null);
const __deviceLoadMoreSentinel = "__deviceLoadMoreSentinel";
+const userOptions = ref([]);
const deviceHasMore = computed(() => {
const total = Number(page.total ?? 0);
@@ -148,6 +196,36 @@
const handleDeviceChange = (val) => {
formState.value.deviceName = equipmentList.value.find(item => item.id === val)?.deviceName || "";
+};
+
+const normalizeReportUserIds = (record) => {
+ const raw = record?.ids;
+ if (Array.isArray(raw)) {
+ return raw.map(item => item?.userId ?? item).filter(Boolean);
+ }
+ if (typeof raw === "string") {
+ return raw.split(/[,锛�;锛沑s]+/g).map(item => item.trim()).filter(Boolean);
+ }
+ if (Array.isArray(record?.reportWorkerList)) {
+ return record.reportWorkerList.map(item => item?.userId).filter(Boolean);
+ }
+ return [];
+};
+
+const handleReportUsersChange = (val) => {
+ const userMap = new Map(userOptions.value.map(item => [item.userId, item.nickName]));
+ formState.value.reportWorkerList = (val || []).map(userId => ({
+ userId,
+ userName: userMap.get(userId) || "",
+ }));
+};
+
+const getUserOptions = async () => {
+ const res = await userListNoPageByTenantId();
+ userOptions.value = Array.isArray(res?.data) ? res.data : [];
+ if (formState.value.ids?.length) {
+ handleReportUsersChange(formState.value.ids);
+ }
};
const isShow = computed({
@@ -263,6 +341,7 @@
};
const applyRecordToForm = (record) => {
+ const ids = normalizeReportUserIds(record);
formState.value = {
id: record.id,
name: record.name || "",
@@ -270,10 +349,15 @@
type: record.type,
deviceId: record.deviceId,
deviceName: record.deviceName || "",
+ ids,
+ reportWorkerList: Array.isArray(record.reportWorkerList) ? record.reportWorkerList : [],
remark: record.remark || "",
salaryQuota: record.salaryQuota || "",
isQuality: record.isQuality,
};
+ if (!formState.value.reportWorkerList.length && ids.length) {
+ handleReportUsersChange(ids);
+ }
ensureSelectedDeviceOption();
};
@@ -291,6 +375,10 @@
let { proxy } = getCurrentInstance()
+onMounted(() => {
+ getUserOptions();
+});
+
const closeModal = () => {
isShow.value = false;
};
@@ -298,6 +386,7 @@
const handleSubmit = () => {
proxy.$refs["formRef"].validate(valid => {
if (valid) {
+ handleReportUsersChange(formState.value.ids);
update(formState.value).then(() => {
// 鍏抽棴妯℃�佹
isShow.value = false;
--
Gitblit v1.9.3