From 1a18bfbeeeb42c118cef061ff8dd383c708826aa Mon Sep 17 00:00:00 2001
From: spring <2396852758@qq.com>
Date: 星期五, 13 三月 2026 16:31:14 +0800
Subject: [PATCH] fix: 设备保养:可以在app上面进行设备保养计划新增,可多选设备(不需要设备编号),计划新增后,需定时生成多条任务(根据选择的多个设备生成多个任务)
---
src/views/equipmentManagement/upkeep/index.vue | 11 +
src/views/inventoryManagement/stockManagement/New.vue | 82 +++++++++++--
src/views/equipmentManagement/upkeep/Form/formDia.vue | 85 +++++++++----
src/views/inventoryManagement/stockManagement/Qualified.vue | 2
src/views/inventoryManagement/stockManagement/Subtract.vue | 108 ++++++++++++++---
src/views/inventoryManagement/receiptManagement/Record.vue | 16 ++
6 files changed, 232 insertions(+), 72 deletions(-)
diff --git a/src/views/equipmentManagement/upkeep/Form/formDia.vue b/src/views/equipmentManagement/upkeep/Form/formDia.vue
index 66bf067..8b30fb7 100644
--- a/src/views/equipmentManagement/upkeep/Form/formDia.vue
+++ b/src/views/equipmentManagement/upkeep/Form/formDia.vue
@@ -11,8 +11,19 @@
<el-form ref="formRef" :model="form" :rules="rules" label-width="120px">
<el-row>
<el-col :span="12">
- <el-form-item label="璁惧鍚嶇О" prop="taskId">
- <el-select v-model="form.taskId" @change="setDeviceModel" filterable>
+ <el-form-item label="浠诲姟鍚嶇О" prop="taskName">
+ <el-input v-model="form.taskName" placeholder="璇疯緭鍏ヤ换鍔″悕绉�" clearable />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="璁惧鍚嶇О" prop="deviceIds">
+ <el-select
+ v-model="form.deviceIds"
+ multiple
+ filterable
+ placeholder="璇烽�夋嫨璁惧"
+ @change="handleDeviceChange"
+ >
<el-option
v-for="(item, index) in deviceOptions"
:key="index"
@@ -22,17 +33,7 @@
</el-select>
</el-form-item>
</el-col>
- <el-col :span="12">
- <el-form-item label="瑙勬牸鍨嬪彿">
- <el-input
- v-model="form.deviceModel"
- placeholder="璇疯緭鍏ヨ鏍煎瀷鍙�"
- disabled
- />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
+
<el-col :span="12">
<el-form-item label="褰曞叆浜�" prop="inspector">
<el-select
@@ -151,7 +152,8 @@
const data = reactive({
form: {
taskId: undefined,
- taskName: undefined,
+ deviceIds: [],
+ taskName: "",
// 褰曞叆浜猴細鍗曢�変竴涓敤鎴� id
inspector: undefined,
remarks: '',
@@ -163,7 +165,8 @@
registrationDate: ''
},
rules: {
- taskId: [{ required: true, message: "璇烽�夋嫨璁惧", trigger: "change" },],
+ deviceIds: [{ required: true, message: "璇烽�夋嫨璁惧", trigger: "change" }],
+ taskName: [{ required: true, message: "璇疯緭鍏ヤ换鍔″悕绉�", trigger: "blur" }],
inspector: [{ required: true, message: "璇烽�夋嫨褰曞叆浜�", trigger: "blur" },],
registrationDate: [{ required: true, message: "璇烽�夋嫨鐧昏鏃堕棿", trigger: "change" }]
}
@@ -176,14 +179,32 @@
deviceOptions.value = data;
};
-// 閫夋嫨璁惧鏃讹紝鍥炲~璁惧鍚嶇О(taskName)鍜岃鏍煎瀷鍙�(deviceModel)
-const setDeviceModel = (id) => {
- const option = deviceOptions.value.find((item) => item.id === id);
- if (option) {
- form.value.taskId = option.id;
- form.value.taskName = option.deviceName;
- form.value.deviceModel = option.deviceModel;
+const normalizeIdList = (val) => {
+ if (!val) return []
+ if (Array.isArray(val)) return val
+ if (typeof val === 'string') {
+ const s = val.trim()
+ // JSON 瀛楃涓诧細"[1,2,3]"
+ if (s.startsWith('[') && s.endsWith(']')) {
+ try {
+ const arr = JSON.parse(s)
+ return Array.isArray(arr) ? arr : []
+ } catch {
+ return []
+ }
+ }
+ // 閫楀彿鍒嗛殧锛�"1,2,3"
+ return s.split(',').map(v => v.trim()).filter(Boolean)
}
+ return []
+}
+
+// 閫夋嫨璁惧鏃讹紝椤哄甫鍥炲~瑙勬牸鍨嬪彿锛堝閫夋椂鍙栫涓�涓澶囩殑瑙勬牸鍨嬪彿锛�
+const handleDeviceChange = () => {
+ const selectedIds = form.value.deviceIds || []
+ const firstId = Array.isArray(selectedIds) ? selectedIds[0] : undefined
+ const firstDevice = deviceOptions.value.find(d => String(d.id) === String(firstId))
+ form.value.deviceModel = firstDevice?.deviceModel || firstDevice?.model || form.value.deviceModel
}
// 鎵撳紑寮规
@@ -203,16 +224,19 @@
await loadDeviceName();
if (type === 'edit' && row) {
- form.value = { ...row }
+ form.value = { ...form.value, ...row }
// 缂栬緫鏃剁敤鎺ュ彛杩斿洖鐨� registrantId 鍥炴樉褰曞叆浜�
if (row.registrantId) {
form.value.inspector = row.registrantId
}
- // 濡傛灉鏈夎澶嘔D锛岃嚜鍔ㄨ缃澶囦俊鎭�
- if (form.value.taskId) {
- setDeviceModel(form.value.taskId);
- }
+ // 缂栬緫鍥炴樉锛歞eviceIds 鍙兘鏄� JSON 瀛楃涓� / 閫楀彿鍒嗛殧 / 鏁扮粍
+ const ids = normalizeIdList(row.deviceIds ?? row.taskIds)
+ form.value.deviceIds = ids.map(v => {
+ const n = Number(v)
+ return Number.isNaN(n) ? v : n
+ })
+ handleDeviceChange()
} else if (type === 'add') {
// 鏂板鏃惰缃櫥璁版棩鏈熶负褰撳ぉ
form.value.registrationDate = getCurrentDate();
@@ -236,8 +260,8 @@
// 閲嶇疆琛ㄥ崟鏁版嵁纭繚璁惧淇℃伅姝g‘閲嶇疆
form.value = {
taskId: undefined,
- taskName: undefined,
- inspector: undefined,
+ deviceIds: [],
+ taskName: "",
inspector: undefined,
remarks: '',
frequencyType: '',
@@ -255,6 +279,8 @@
if (valid) {
try {
const payload = { ...form.value }
+ // 鍚庣瑕佹眰锛歞eviceIds 浠� JSON.stringify([1,2,3]) 褰㈠紡浼犲弬
+ payload.deviceIds = JSON.stringify(form.value.deviceIds || [])
// 涓嶅啀鍚戝悗绔紶淇濆吇浜哄瓧娈碉紝浠呬娇鐢ㄦ帴鍙h姹傜殑 registrant / registrantId
// 鏍规嵁閫夋嫨鐨�"褰曞叆浜�"璁剧疆 registrant / registrantId
if (payload.inspector) {
@@ -268,6 +294,7 @@
}
delete payload.inspector
delete payload.inspectorIds
+ delete payload.taskIds
if (payload.frequencyType === 'WEEKLY') {
let frequencyDetail = ''
diff --git a/src/views/equipmentManagement/upkeep/index.vue b/src/views/equipmentManagement/upkeep/index.vue
index a016819..8370ba8 100644
--- a/src/views/equipmentManagement/upkeep/index.vue
+++ b/src/views/equipmentManagement/upkeep/index.vue
@@ -16,7 +16,7 @@
:prefix-icon="Search"
@change="getScheduledTableData" />
</el-form-item>
- <el-form-item label="浠诲姟鐘舵��">
+ <!-- <el-form-item label="浠诲姟鐘舵��">
<el-select v-model="scheduledFilters.status"
placeholder="璇烽�夋嫨浠诲姟鐘舵��"
clearable
@@ -26,7 +26,7 @@
<el-option label="鍋滅敤"
value="0" />
</el-select>
- </el-form-item>
+ </el-form-item> -->
<el-form-item>
<el-button type="primary"
@click="getScheduledTableData">鎼滅储</el-button>
@@ -313,10 +313,11 @@
// 瀹氭椂浠诲姟绠$悊琛ㄦ牸鍒楅厤缃�
const scheduledColumns = ref([
- { prop: "taskName", label: "璁惧鍚嶇О" },
+ { prop: "taskName", label: "浠诲姟鍚嶇О" },
{
- label: "瑙勬牸鍨嬪彿",
- prop: "deviceModel",
+ prop: "deviceName",
+ label: "璁惧",
+ minWidth: 180
},
{
prop: "frequencyType",
diff --git a/src/views/inventoryManagement/receiptManagement/Record.vue b/src/views/inventoryManagement/receiptManagement/Record.vue
index b738581..d8866b9 100644
--- a/src/views/inventoryManagement/receiptManagement/Record.vue
+++ b/src/views/inventoryManagement/receiptManagement/Record.vue
@@ -73,6 +73,18 @@
<el-table-column label="鍏ュ簱鏁伴噺"
prop="stockInNum"
show-overflow-tooltip/>
+ <el-table-column label="杞︾墝鍙�"
+ prop="licensePlateNo"
+ v-if="type === '0'"
+ show-overflow-tooltip/>
+ <el-table-column label="姣涢噸(鍚�)"
+ prop="grossWeight"
+ v-if="type === '0'"
+ show-overflow-tooltip/>
+ <el-table-column label="鐨噸(鍚�)"
+ prop="tareWeight"
+ v-if="type === '0'"
+ show-overflow-tooltip/>
<el-table-column label="鍑�閲�(鍚�)"
prop="netWeight"
v-if="type === '0'"
@@ -91,6 +103,10 @@
prop="weighingDate"
v-if="type === '0'"
show-overflow-tooltip/>
+ <el-table-column label="杩囩鍛�"
+ prop="weighingOperator"
+ v-if="type === '0'"
+ show-overflow-tooltip/>
</el-table>
<pagination v-show="total > 0"
:total="total"
diff --git a/src/views/inventoryManagement/stockManagement/New.vue b/src/views/inventoryManagement/stockManagement/New.vue
index 5d3ac53..001e897 100644
--- a/src/views/inventoryManagement/stockManagement/New.vue
+++ b/src/views/inventoryManagement/stockManagement/New.vue
@@ -37,21 +37,57 @@
<el-input v-model="formState.unit" disabled />
</el-form-item>
+ <!-- productType === 0锛氬師鏉愭枡 -->
<el-form-item
- label="搴撳瓨鏁伴噺"
- prop="qualitity"
+ v-if="type === 'qualified' && formState.productType === 0"
+ label="杞︾墝鍙�"
+ prop="licensePlateNo"
>
- <el-input-number v-model="formState.qualitity" :step="1" :min="1" style="width: 100%" />
+ <el-input v-model="formState.licensePlateNo" />
</el-form-item>
<el-form-item
- v-if="type === 'qualified'"
- label="搴撳瓨棰勮鏁伴噺"
- prop="warnNum"
+ v-if="type === 'qualified' && formState.productType === 0"
+ label="姣涢噸(鍚�)"
+ prop="grossWeight"
>
- <el-input-number v-model="formState.warnNum" :step="1" :min="0" :max="formState.qualitity" style="width: 100%" />
+ <el-input-number
+ v-model="formState.grossWeight"
+ :step="0.01"
+ :min="0"
+ style="width: 100%"
+ @change="computeNetWeight"
+ />
</el-form-item>
- <!-- productType === 0锛氬師鏉愭枡 -->
+
+ <el-form-item
+ v-if="type === 'qualified' && formState.productType === 0"
+ label="鐨噸(鍚�)"
+ prop="tareWeight"
+ >
+ <el-input-number
+ v-model="formState.tareWeight"
+ :step="0.01"
+ :min="0"
+ style="width: 100%"
+ @change="computeNetWeight"
+ />
+ </el-form-item>
+
+ <el-form-item
+ v-if="type === 'qualified' && formState.productType === 0"
+ label="鍑�閲�(鍚�)"
+ prop="netWeight"
+ >
+ <el-input-number
+ v-model="formState.netWeight"
+ :step="0.01"
+ :min="0"
+ style="width: 100%"
+ disabled
+ />
+ </el-form-item>
+
<el-form-item
v-if="type === 'qualified' && formState.productType === 0"
label="杩囩鏃ユ湡"
@@ -70,10 +106,10 @@
<el-form-item
v-if="type === 'qualified' && formState.productType === 0"
- label="鍑�閲�(鍚�)"
- prop="netWeight"
+ label="杩囩鍛�"
+ prop="weighingOperator"
>
- <el-input-number v-model="formState.netWeight" :step="0.01" :min="0" style="width: 100%" />
+ <el-input v-model="formState.weighingOperator" />
</el-form-item>
<el-form-item label="澶囨敞" prop="remark">
@@ -125,11 +161,14 @@
productName: "",
productModelName: "",
unit: "",
- weighingDate: undefined,
productType: undefined,
- qualitity: 0,
- warnNum: 0,
+ // 杩囩鐩稿叧瀛楁锛堜粎鍘熸潗鏂欏悎鏍煎搧浣跨敤锛�
+ licensePlateNo: "",
+ grossWeight: undefined,
+ tareWeight: undefined,
netWeight: undefined,
+ weighingDate: undefined,
+ weighingOperator: "",
remark: '',
});
@@ -161,6 +200,8 @@
// 浜у搧閫夋嫨澶勭悊
const handleProductSelect = async (products) => {
formState.value.weighingDate = undefined;
+ formState.value.grossWeight = undefined;
+ formState.value.tareWeight = undefined;
formState.value.netWeight = undefined;
if (products && products.length > 0) {
const product = products[0];
@@ -176,6 +217,19 @@
}
};
+// 鍑�閲� = 姣涢噸 - 鐨噸
+const computeNetWeight = () => {
+ const { grossWeight, tareWeight } = formState.value;
+ if (grossWeight != null && tareWeight != null) {
+ const net = Number(grossWeight) - Number(tareWeight);
+ // 淇濈暀涓や綅灏忔暟锛屼笖涓嶄负璐�
+ const safeNet = Number(net.toFixed(2));
+ formState.value.netWeight = safeNet > 0 ? safeNet : 0;
+ } else {
+ formState.value.netWeight = undefined;
+ }
+};
+
const handleSubmit = () => {
proxy.$refs["formRef"].validate(valid => {
if (valid) {
diff --git a/src/views/inventoryManagement/stockManagement/Qualified.vue b/src/views/inventoryManagement/stockManagement/Qualified.vue
index 0b79b00..6c5be2a 100644
--- a/src/views/inventoryManagement/stockManagement/Qualified.vue
+++ b/src/views/inventoryManagement/stockManagement/Qualified.vue
@@ -29,7 +29,7 @@
<el-table-column label="鍗曚綅" prop="unit" show-overflow-tooltip />
<el-table-column label="搴撳瓨鏁伴噺" prop="qualitity" show-overflow-tooltip />
<el-table-column label="鍐荤粨鏁伴噺" prop="lockedQuantity" show-overflow-tooltip />
- <el-table-column label="搴撳瓨棰勮鏁伴噺" prop="warnNum" show-overflow-tooltip />
+ <!-- <el-table-column label="搴撳瓨棰勮鏁伴噺" prop="warnNum" show-overflow-tooltip /> -->
<el-table-column label="鍑�閲�(鍚�)" prop="netWeight" show-overflow-tooltip />
<el-table-column label="澶囨敞" prop="remark" show-overflow-tooltip />
<el-table-column label="鏈�杩戞洿鏂版椂闂�" prop="updateTime" show-overflow-tooltip />
diff --git a/src/views/inventoryManagement/stockManagement/Subtract.vue b/src/views/inventoryManagement/stockManagement/Subtract.vue
index 1cd9b06..d23c974 100644
--- a/src/views/inventoryManagement/stockManagement/Subtract.vue
+++ b/src/views/inventoryManagement/stockManagement/Subtract.vue
@@ -38,25 +38,71 @@
</el-form-item>
<el-form-item
- label="鏁伴噺"
- prop="qualitity"
- >
- <el-input-number v-model="formState.qualitity" :step="1" :min="1" :max="maxQuality" style="width: 100%" />
- </el-form-item>
-
- <el-form-item
- v-if="isRawMaterial"
- label="鍑�閲�"
- prop="netWeight"
- >
- <el-input-number v-model="formState.netWeight" :precision="2" :step="0.01" :min="0" style="width: 100%" />
- </el-form-item>
-
- <el-form-item
label="杞︾墝鍙�"
prop="licensePlateNo"
>
<el-input v-model="formState.licensePlateNo" />
+ </el-form-item>
+
+ <el-form-item
+ label="姣涢噸(鍚�)"
+ prop="grossWeight"
+ >
+ <el-input-number
+ v-model="formState.grossWeight"
+ :step="0.01"
+ :min="0"
+ style="width: 100%"
+ @change="computeNetWeight"
+ />
+ </el-form-item>
+
+ <el-form-item
+ label="鐨噸(鍚�)"
+ prop="tareWeight"
+ >
+ <el-input-number
+ v-model="formState.tareWeight"
+ :step="0.01"
+ :min="0"
+ style="width: 100%"
+ @change="computeNetWeight"
+ />
+ </el-form-item>
+
+ <el-form-item
+ label="鍑�閲�(鍚�)"
+ prop="netWeight"
+ >
+ <el-input-number
+ v-model="formState.netWeight"
+ :step="0.01"
+ :min="0"
+ style="width: 100%"
+ disabled
+ />
+ </el-form-item>
+
+ <el-form-item
+ label="杩囩鏃ユ湡"
+ prop="weighingDate"
+ >
+ <el-date-picker
+ style="width: 100%"
+ v-model="formState.weighingDate"
+ value-format="YYYY-MM-DD HH:mm:ss"
+ format="YYYY-MM-DD HH:mm:ss"
+ type="datetime"
+ placeholder="璇烽�夋嫨杩囩鏃ユ湡"
+ clearable
+ />
+ </el-form-item>
+
+ <el-form-item
+ label="杩囩鍛�"
+ prop="weighingOperator"
+ >
+ <el-input v-model="formState.weighingOperator" />
</el-form-item>
<el-form-item label="澶囨敞" prop="remark">
@@ -81,7 +127,7 @@
</template>
<script setup>
-import {ref, computed, getCurrentInstance} from "vue";
+import {ref, computed, getCurrentInstance, onMounted} from "vue";
import ProductSelectDialog from "@/views/basicData/product/ProductSelectDialog.vue";
import {subtractStockInventory} from "@/api/inventoryManagement/stockInventory.js";
import {subtractStockUnInventory} from "@/api/inventoryManagement/stockUninventory.js";
@@ -108,10 +154,6 @@
initFormData()
})
-const maxQuality = computed(() => {
- return props.record.unLockedQuantity ? props.record.unLockedQuantity : 0;
-})
-
const isRawMaterial = computed(() => {
return props.record.parentName === '鍘熸潗鏂�';
})
@@ -131,9 +173,13 @@
productName: "",
model: "",
unit: "",
- qualitity: 0,
+ // 杩囩鐩稿叧瀛楁
+ licensePlateNo: "",
+ grossWeight: undefined,
+ tareWeight: undefined,
netWeight: undefined,
- licensePlateNo: undefined,
+ weighingDate: undefined,
+ weighingOperator: "",
remark: '',
});
@@ -158,13 +204,29 @@
productName: "",
model: "",
unit: "",
- qualitity: 0,
+ licensePlateNo: "",
+ grossWeight: undefined,
+ tareWeight: undefined,
netWeight: undefined,
+ weighingDate: undefined,
+ weighingOperator: "",
remark: '',
};
isShow.value = false;
};
+// 鍑�閲� = 姣涢噸 - 鐨噸
+const computeNetWeight = () => {
+ const { grossWeight, tareWeight } = formState.value;
+ if (grossWeight != null && tareWeight != null) {
+ const net = Number(grossWeight) - Number(tareWeight);
+ const safeNet = Number(net.toFixed(2));
+ formState.value.netWeight = safeNet > 0 ? safeNet : 0;
+ } else {
+ formState.value.netWeight = undefined;
+ }
+};
+
// 浜у搧閫夋嫨澶勭悊
const handleProductSelect = async (products) => {
if (products && products.length > 0) {
--
Gitblit v1.9.3