From 10a440fac0dd665bf4af78e1e3c913dcf893bf10 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期二, 02 六月 2026 10:00:28 +0800
Subject: [PATCH] 新疆马铃薯 1.设备保养、设备验收添加验收人
---
src/views/equipmentManagement/upkeep/index.vue | 50 +++
src/api/equipmentManagement/repair.js | 13 +
src/views/equipmentManagement/repair/Modal/RepairModal.vue | 203 ++++++++++-----
src/views/equipmentManagement/repair/index.vue | 147 +++++++---
src/views/equipmentManagement/repair/Modal/AcceptanceModal.vue | 140 ++++++++++
src/api/equipmentManagement/upkeep.js | 13 +
src/views/equipmentManagement/upkeep/Form/AcceptanceModal.vue | 141 ++++++++++
src/views/equipmentManagement/upkeep/Form/MaintenanceModal.vue | 29 -
src/views/procurementManagement/paymentLedger/index.vue | 18
9 files changed, 603 insertions(+), 151 deletions(-)
diff --git a/src/api/equipmentManagement/repair.js b/src/api/equipmentManagement/repair.js
index 0233ae6..16bfd28 100644
--- a/src/api/equipmentManagement/repair.js
+++ b/src/api/equipmentManagement/repair.js
@@ -70,3 +70,16 @@
data,
});
};
+
+/**
+ * @desc 楠屾敹瀹℃壒
+ * @param {楠屾敹鍙傛暟} data
+ * @returns
+ */
+export const repairAcceptance = (data) => {
+ return request({
+ url: `/device/repair/acceptance`,
+ method: "post",
+ data,
+ });
+};
diff --git a/src/api/equipmentManagement/upkeep.js b/src/api/equipmentManagement/upkeep.js
index 5774654..4236afc 100644
--- a/src/api/equipmentManagement/upkeep.js
+++ b/src/api/equipmentManagement/upkeep.js
@@ -111,3 +111,16 @@
data: params,
});
};
+
+/**
+ * @desc 璁惧淇濆吇楠屾敹瀹℃壒
+ * @param {楠屾敹瀹℃壒琛ㄥ崟} data
+ * @returns
+ */
+export const maintenanceAcceptance = (data) => {
+ return request({
+ url: "/device/maintenance/acceptance",
+ method: "post",
+ data,
+ });
+};
diff --git a/src/views/equipmentManagement/repair/Modal/AcceptanceModal.vue b/src/views/equipmentManagement/repair/Modal/AcceptanceModal.vue
new file mode 100644
index 0000000..8698945
--- /dev/null
+++ b/src/views/equipmentManagement/repair/Modal/AcceptanceModal.vue
@@ -0,0 +1,140 @@
+<template>
+ <FormDialog
+ v-model="visible"
+ title="楠屾敹瀹℃壒"
+ width="500px"
+ @confirm="submitForm"
+ @cancel="handleCancel"
+ @close="handleCancel"
+ >
+ <el-form :model="form" :rules="rules" label-width="100px">
+ <el-form-item label="楠屾敹浜�" prop="acceptanceName">
+ <el-select
+ v-model="form.acceptanceName"
+ placeholder="璇烽�夋嫨楠屾敹浜�"
+ filterable
+ style="width: 100%"
+ >
+ <el-option
+ v-for="item in userList"
+ :key="item.userId"
+ :label="item.nickName"
+ :value="item.nickName"
+ />
+ </el-select>
+ </el-form-item>
+ <el-form-item label="楠屾敹鏃堕棿" prop="acceptanceTime">
+ <el-date-picker
+ v-model="form.acceptanceTime"
+ type="datetime"
+ placeholder="璇烽�夋嫨楠屾敹鏃堕棿"
+ format="YYYY-MM-DD HH:mm:ss"
+ value-format="YYYY-MM-DD HH:mm:ss"
+ style="width: 100%"
+ />
+ </el-form-item>
+ <el-form-item label="楠屾敹澶囨敞" prop="acceptanceRemark">
+ <el-input
+ v-model="form.acceptanceRemark"
+ type="textarea"
+ :rows="3"
+ placeholder="璇疯緭鍏ラ獙鏀跺娉�"
+ />
+ </el-form-item>
+ </el-form>
+ </FormDialog>
+</template>
+
+<script setup>
+import FormDialog from "@/components/Dialog/FormDialog.vue";
+import { ref, reactive } from "vue";
+import { ElMessage } from "element-plus";
+import { userListNoPageByTenantId } from "@/api/system/user.js";
+import { repairAcceptance } from "@/api/equipmentManagement/repair";
+import dayjs from "dayjs";
+
+defineOptions({
+ name: "楠屾敹瀹℃壒寮圭獥",
+});
+
+const emits = defineEmits(["ok"]);
+
+const visible = ref(false);
+const loading = ref(false);
+const repairId = ref(null);
+const userList = ref([]);
+
+const form = reactive({
+ acceptanceName: undefined,
+ acceptanceTime: dayjs().format("YYYY-MM-DD HH:mm:ss"),
+ acceptanceRemark: undefined,
+});
+
+const rules = {
+ acceptanceName: [
+ { required: true, message: "璇烽�夋嫨楠屾敹浜�", trigger: "change" },
+ ],
+ acceptanceTime: [
+ { required: true, message: "璇烽�夋嫨楠屾敹鏃堕棿", trigger: "change" },
+ ],
+ acceptanceRemark: [
+ { required: false, message: "璇疯緭鍏ラ獙鏀跺娉�", trigger: "blur" },
+ ],
+};
+
+// 鍔犺浇鐢ㄦ埛鍒楄〃
+const loadUserList = async () => {
+ const { data } = await userListNoPageByTenantId();
+ userList.value = data;
+};
+
+// 鎵撳紑寮圭獥
+const open = async (row) => {
+ repairId.value = row.id;
+ visible.value = true;
+ // 閲嶇疆琛ㄥ崟
+ form.acceptanceName = undefined;
+ form.acceptanceTime = dayjs().format("YYYY-MM-DD HH:mm:ss");
+ form.acceptanceRemark = undefined;
+ await loadUserList();
+};
+
+// 鎻愪氦琛ㄥ崟
+const submitForm = async () => {
+ if (!form.acceptanceName) {
+ ElMessage.warning("璇烽�夋嫨楠屾敹浜�");
+ return;
+ }
+ if (!form.acceptanceTime) {
+ ElMessage.warning("璇烽�夋嫨楠屾敹鏃堕棿");
+ return;
+ }
+
+ loading.value = true;
+ try {
+ const { code } = await repairAcceptance({
+ id: repairId.value,
+ acceptanceName: form.acceptanceName,
+ acceptanceTime: form.acceptanceTime,
+ acceptanceRemark: form.acceptanceRemark,
+ });
+ if (code === 200) {
+ ElMessage.success("楠屾敹閫氳繃");
+ visible.value = false;
+ emits("ok");
+ }
+ } finally {
+ loading.value = false;
+ }
+};
+
+const handleCancel = () => {
+ visible.value = false;
+};
+
+defineExpose({
+ open,
+});
+</script>
+
+<style lang="scss" scoped></style>
diff --git a/src/views/equipmentManagement/repair/Modal/RepairModal.vue b/src/views/equipmentManagement/repair/Modal/RepairModal.vue
index 022ae6f..b7c3d35 100644
--- a/src/views/equipmentManagement/repair/Modal/RepairModal.vue
+++ b/src/views/equipmentManagement/repair/Modal/RepairModal.vue
@@ -59,43 +59,96 @@
</el-col>
<el-col :span="12">
<el-form-item label="鎶ヤ慨鏃ユ湡">
- <el-date-picker
- v-model="form.repairTime"
- placeholder="璇烽�夋嫨鎶ヤ慨鏃ユ湡"
- format="YYYY-MM-DD"
- value-format="YYYY-MM-DD"
- type="date"
- clearable
- style="width: 100%"
- />
+ <el-date-picker v-model="form.repairTime"
+ placeholder="璇烽�夋嫨鎶ヤ慨鏃ユ湡"
+ format="YYYY-MM-DD"
+ value-format="YYYY-MM-DD"
+ type="date"
+ clearable
+ style="width: 100%"
+ :disabled="operationType === 'view'" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="鎶ヤ慨浜�">
- <el-input v-model="form.repairName" placeholder="璇疯緭鍏ユ姤淇汉" />
+ <el-input v-model="form.repairName"
+ placeholder="璇疯緭鍏ユ姤淇汉"
+ :disabled="operationType === 'view'" />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鎶ヤ慨鎶ヤ慨椤圭洰">
+ <el-input v-model="form.machineryCategory"
+ placeholder="璇疯緭鍏ユ姤淇姤淇」鐩�"
+ :disabled="operationType === 'view'" />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="12">
+ <el-form-item label="缁翠慨浜�">
+ <el-input v-model="form.maintenanceName"
+ placeholder="璇疯緭鍏ョ淮淇汉濮撳悕"
+ :disabled="operationType === 'view'" />
</el-form-item>
</el-col>
</el-row>
<el-row v-if="id">
<el-col :span="12">
<el-form-item label="鎶ヤ慨鐘舵��">
- <el-select v-model="form.status">
- <el-option label="寰呯淮淇�" :value="0" />
- <el-option label="瀹岀粨" :value="1" />
- <el-option label="澶辫触" :value="2" />
+ <el-select v-model="form.status"
+ disabled>
+ <el-option label="寰呯淮淇�"
+ :value="0"></el-option>
+ <el-option label="宸查獙鏀�"
+ :value="1"></el-option>
+ <el-option label="澶辫触"
+ :value="2"></el-option>
</el-select>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <!-- 楠屾敹淇℃伅灞曠ず -->
+ <el-row v-if="id && (form.status === 1 || form.status === 3)">
+ <el-col :span="12">
+ <el-form-item label="楠屾敹浜�">
+ <el-input v-model="form.acceptanceName"
+ disabled />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="楠屾敹鏃堕棿">
+ <el-input v-model="form.acceptanceTime"
+ disabled />
+ </el-form-item>
+ </el-col>
+ <el-col :span="24">
+ <el-form-item label="楠屾敹澶囨敞">
+ <el-input v-model="form.acceptanceRemark"
+ type="textarea"
+ :rows="2"
+ disabled />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="鏁呴殰鐜拌薄">
- <el-input
- v-model="form.remark"
- :rows="2"
- type="textarea"
- placeholder="璇疯緭鍏ユ晠闅滅幇璞�"
- />
+ <el-input v-model="form.remark"
+ :rows="2"
+ type="textarea"
+ placeholder="璇疯緭鍏ユ晠闅滅幇璞�"
+ :disabled="operationType === 'view'" />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row v-if="operationType !== 'view'"
+ :gutter="30">
+ <el-col :span="24">
+ <el-form-item label="闄勪欢"
+ prop="attachmentIds">
+ <FileUpload v-model:file-list="form.storageBlobDTOs"
+ :disabled="operationType === 'view'" />
</el-form-item>
</el-col>
</el-row>
@@ -104,21 +157,18 @@
</template>
<script setup>
-import { nextTick, ref, unref } from "vue";
-import dayjs from "dayjs";
-import { ElMessage } from "element-plus";
-import FormDialog from "@/components/Dialog/FormDialog.vue";
-import useFormData from "@/hooks/useFormData";
-import useUserStore from "@/store/modules/user";
-import {
- addRepair,
- editRepair,
- getRepairById,
-} from "@/api/equipmentManagement/repair";
-import {
- getDeviceAreaTree,
- getDeviceAreaTreeWithDevices,
-} from "@/api/equipmentManagement/deviceArea";
+ import FormDialog from "@/components/Dialog/FormDialog.vue";
+ import FileUpload from "@/components/AttachmentUpload/file/index.vue";
+ import {
+ addRepair,
+ editRepair,
+ getRepairById,
+ } from "@/api/equipmentManagement/repair";
+ import { ElMessage } from "element-plus";
+ import dayjs from "dayjs";
+ import useFormData from "@/hooks/useFormData";
+ import { getDeviceLedger } from "@/api/equipmentManagement/ledger";
+ import useUserStore from "@/store/modules/user";
defineOptions({
name: "璁惧鎶ヤ慨寮圭獥",
@@ -126,16 +176,26 @@
const emits = defineEmits(["ok"]);
-const id = ref();
-const visible = ref(false);
-const loading = ref(false);
-const userStore = useUserStore();
-const areaOptions = ref([]);
-const deviceOptions = ref([]);
-const areaTreeProps = {
- label: "areaName",
- children: "children",
-};
+ const id = ref();
+ const visible = ref(false);
+ const loading = ref(false);
+ const operationType = ref(""); // add, edit, view
+
+ const computedTitle = computed(() => {
+ if (operationType.value === "add") return "鏂板璁惧鎶ヤ慨";
+ if (operationType.value === "edit") return "缂栬緫璁惧鎶ヤ慨";
+ if (operationType.value === "view") return "璁惧鎶ヤ慨璇︽儏";
+ return "";
+ });
+
+ const userStore = useUserStore();
+ const deviceOptions = ref([]);
+ const fileList = ref([]);
+
+ const loadDeviceName = async () => {
+ const { data } = await getDeviceLedger();
+ deviceOptions.value = data;
+ };
const { form, resetForm } = useFormData({
areaId: undefined,
@@ -314,29 +374,40 @@
visible.value = false;
};
-const openAdd = async () => {
- id.value = undefined;
- visible.value = true;
- await nextTick();
- await loadAreaTree();
- deviceOptions.value = [];
-};
+ const openAdd = async () => {
+ id.value = undefined;
+ operationType.value = "add";
+ visible.value = true;
+ fileList.value = [];
+ await nextTick();
+ await loadDeviceName();
+ };
-const openEdit = async (editId) => {
- const { data } = await getRepairById(editId);
- id.value = editId;
- visible.value = true;
- await nextTick();
- await loadAreaTree();
- setForm(data);
- await loadDevicesByArea(form.areaId);
- syncDeviceFields(form.deviceLedgerIds);
-};
+ const openEdit = async editId => {
+ const { data } = await getRepairById(editId);
+ id.value = editId;
+ operationType.value = "edit";
+ visible.value = true;
+ await nextTick();
+ await loadDeviceName();
+ setForm(data);
+ };
-defineExpose({
- openAdd,
- openEdit,
-});
+ const openView = async viewId => {
+ const { data } = await getRepairById(viewId);
+ id.value = viewId;
+ operationType.value = "view";
+ visible.value = true;
+ await nextTick();
+ await loadDeviceName();
+ setForm(data);
+ };
+
+ defineExpose({
+ openAdd,
+ openEdit,
+ openView,
+ });
</script>
<style lang="scss" scoped></style>
diff --git a/src/views/equipmentManagement/repair/index.vue b/src/views/equipmentManagement/repair/index.vue
index 1699cff..edf459f 100644
--- a/src/views/equipmentManagement/repair/index.vue
+++ b/src/views/equipmentManagement/repair/index.vue
@@ -94,51 +94,84 @@
@pagination="changePage"
>
<template #statusRef="{ row }">
- <el-tag v-if="row.status === 2" type="danger">澶辫触</el-tag>
- <el-tag v-if="row.status === 1" type="success">瀹岀粨</el-tag>
- <el-tag v-if="row.status === 0" type="warning">寰呯淮淇�</el-tag>
+ <el-tag v-if="row.status === 2"
+ type="danger">澶辫触</el-tag>
+ <el-tag v-if="row.status === 1"
+ type="success">瀹岀粨</el-tag>
+ <el-tag v-if="row.status === 3"
+ type="info">寰呴獙鏀�</el-tag>
+ <el-tag v-if="row.status === 0"
+ type="warning">寰呯淮淇�</el-tag>
</template>
<template #operation="{ row }">
- <el-button
- type="primary"
- link
- :disabled="row.status === 1"
- @click="editRepair(row.id)"
- >
+ <el-button type="primary"
+ link
+ @click="viewRepair(row.id)">
+ 璇︽儏
+ </el-button>
+ <el-button type="primary"
+ link
+ :disabled="row.status === 1 || row.status === 3"
+ @click="editRepair(row.id)">
缂栬緫
</el-button>
- <el-button
- type="success"
- link
- :disabled="row.status === 1"
- @click="addMaintain(row)"
- >
+ <el-button type="success"
+ link
+ :disabled="row.status !== 0"
+ @click="addMaintain(row)">
缁翠慨
</el-button>
- <el-button
- type="danger"
- link
- :disabled="row.status === 1"
- @click="delRepairByIds(row.id)"
- >
+ <el-button type="warning"
+ link
+ :disabled="row.status !== 3"
+ @click="openAcceptance(row)">
+ 楠屾敹
+ </el-button>
+ <el-button type="danger"
+ link
+ :disabled="row.status === 1 || row.status === 3"
+ @click="delRepairByIds(row.id)">
鍒犻櫎
+ </el-button>
+ <el-button type="primary"
+ link
+ @click="openFileDialog(row)">
+ 闄勪欢
</el-button>
</template>
</PIMTable>
</div>
- <RepairModal ref="repairModalRef" @ok="getTableData"/>
- <MaintainModal ref="maintainModalRef" @ok="getTableData"/>
+ <RepairModal ref="repairModalRef"
+ @ok="getTableData" />
+ <MaintainModal ref="maintainModalRef"
+ @ok="getTableData" />
+ <AcceptanceModal ref="acceptanceModalRef"
+ @ok="getTableData" />
+ <FileList v-if="fileDialogVisible"
+ v-model:visible="fileDialogVisible"
+ :record-type="'device_repair'"
+ :record-id="recordId" />
</div>
</template>
<script setup>
-import { onMounted, getCurrentInstance, computed } from "vue";
-import {usePaginationApi} from "@/hooks/usePaginationApi";
-import {getRepairPage, delRepair} from "@/api/equipmentManagement/repair";
-import RepairModal from "./Modal/RepairModal.vue";
-import {ElMessageBox, ElMessage} from "element-plus";
-import dayjs from "dayjs";
-import MaintainModal from "./Modal/MaintainModal.vue";
+ import {
+ onMounted,
+ getCurrentInstance,
+ computed,
+ ref,
+ defineAsyncComponent,
+ } from "vue";
+ import { usePaginationApi } from "@/hooks/usePaginationApi";
+ import { getRepairPage, delRepair } from "@/api/equipmentManagement/repair";
+ import RepairModal from "./Modal/RepairModal.vue";
+ import { ElMessageBox, ElMessage } from "element-plus";
+ import dayjs from "dayjs";
+ import MaintainModal from "./Modal/MaintainModal.vue";
+ import AcceptanceModal from "./Modal/AcceptanceModal.vue";
+ const FileList = defineAsyncComponent(() =>
+ import("@/components/Dialog/FileList.vue")
+ );
defineOptions({
name: "璁惧鎶ヤ慨",
@@ -146,9 +179,10 @@
const {proxy} = getCurrentInstance();
-// 妯℃�佹瀹炰緥
-const repairModalRef = ref();
-const maintainModalRef = ref();
+ // 妯℃�佹瀹炰緥
+ const repairModalRef = ref();
+ const maintainModalRef = ref();
+ const acceptanceModalRef = ref();
// 琛ㄦ牸澶氶�夋閫変腑椤�
const multipleList = ref([]);
@@ -232,7 +266,7 @@
dataType: "slot",
slot: "operation",
align: "center",
- width: "300px",
+ width: "320px",
},
]
);
@@ -253,10 +287,19 @@
getTableData();
};
-// 澶氶�夊悗鍋氫粈涔�
-const handleSelectionChange = (selectionList) => {
- multipleList.value = selectionList;
-};
+ // 鎵撳紑闄勪欢寮圭獥
+ const recordId = ref(0);
+ const fileDialogVisible = ref(false);
+
+ const openFileDialog = async row => {
+ recordId.value = row.id;
+ fileDialogVisible.value = true;
+ };
+
+ // 澶氶�夊悗鍋氫粈涔�
+ const handleSelectionChange = selectionList => {
+ multipleList.value = selectionList;
+ };
// 妫�鏌ラ�変腑鐨勮褰曚腑鏄惁鏈夊畬缁撶姸鎬佺殑
const hasFinishedStatus = computed(() => {
@@ -268,21 +311,31 @@
repairModalRef.value.openAdd();
};
-// 缂栬緫鎶ヤ慨
-const editRepair = (id) => {
- repairModalRef.value.openEdit(id);
-};
+ // 璇︽儏鏌ョ湅
+ const viewRepair = id => {
+ repairModalRef.value.openView(id);
+ };
+
+ // 缂栬緫鎶ヤ慨
+ const editRepair = id => {
+ repairModalRef.value.openEdit(id);
+ };
// 鏂板缁翠慨
const addMaintain = (row) => {
maintainModalRef.value.open(row.id, row);
};
-const changePage = ({page, limit}) => {
- pagination.currentPage = page;
- pagination.pageSize = limit;
- onCurrentChange(page);
-};
+ // 鎵撳紑楠屾敹寮圭獥
+ const openAcceptance = row => {
+ acceptanceModalRef.value.open(row);
+ };
+
+ const changePage = ({ page, limit }) => {
+ pagination.currentPage = page;
+ pagination.pageSize = limit;
+ onCurrentChange(page);
+ };
// 鍗曡鍒犻櫎
const delRepairByIds = async (ids) => {
diff --git a/src/views/equipmentManagement/upkeep/Form/AcceptanceModal.vue b/src/views/equipmentManagement/upkeep/Form/AcceptanceModal.vue
new file mode 100644
index 0000000..bc22bd6
--- /dev/null
+++ b/src/views/equipmentManagement/upkeep/Form/AcceptanceModal.vue
@@ -0,0 +1,141 @@
+<template>
+ <FormDialog
+ v-model="visible"
+ title="楠屾敹瀹℃壒"
+ width="500px"
+ @confirm="sendForm"
+ @cancel="handleCancel"
+ @close="handleClose"
+ >
+ <el-form :model="form" label-width="100px">
+ <el-form-item label="楠屾敹浜�" required>
+ <el-select
+ v-model="form.acceptanceName"
+ filterable
+ placeholder="璇烽�夋嫨楠屾敹浜�"
+ style="width: 100%"
+ >
+ <el-option
+ v-for="item in userList"
+ :key="item.userId"
+ :label="item.nickName"
+ :value="item.userId"
+ />
+ </el-select>
+ </el-form-item>
+ <el-form-item label="楠屾敹鏃堕棿" required>
+ <el-date-picker
+ v-model="form.acceptanceTime"
+ placeholder="璇烽�夋嫨楠屾敹鏃堕棿"
+ format="YYYY-MM-DD HH:mm:ss"
+ value-format="YYYY-MM-DD HH:mm:ss"
+ type="datetime"
+ clearable
+ style="width: 100%"
+ />
+ </el-form-item>
+ <el-form-item label="楠屾敹澶囨敞">
+ <el-input
+ v-model="form.acceptanceRemark"
+ placeholder="璇疯緭鍏ラ獙鏀跺娉�"
+ type="textarea"
+ :rows="3"
+ />
+ </el-form-item>
+ </el-form>
+ </FormDialog>
+</template>
+
+<script setup>
+import FormDialog from "@/components/Dialog/FormDialog.vue";
+import { maintenanceAcceptance } from "@/api/equipmentManagement/upkeep";
+import { userListNoPage } from "@/api/system/user.js";
+import { ElMessage } from "element-plus";
+import { ref, reactive } from "vue";
+import dayjs from "dayjs";
+
+defineOptions({
+ name: "楠屾敹瀹℃壒寮圭獥",
+});
+
+const emits = defineEmits(["ok"]);
+
+const maintenanceId = ref();
+const visible = ref(false);
+const loading = ref(false);
+const userList = ref([]);
+
+const form = reactive({
+ acceptanceName: undefined,
+ acceptanceTime: undefined,
+ acceptanceRemark: undefined,
+});
+
+const loadUserList = () => {
+ userListNoPage().then((res) => {
+ userList.value = res.data || [];
+ });
+};
+
+const resetForm = () => {
+ form.acceptanceName = undefined;
+ form.acceptanceTime = undefined;
+ form.acceptanceRemark = undefined;
+};
+
+const sendForm = async () => {
+ if (!form.acceptanceName) {
+ ElMessage.error("楠屾敹浜轰笉鑳戒负绌�");
+ return;
+ }
+ if (!form.acceptanceTime) {
+ ElMessage.error("楠屾敹鏃堕棿涓嶈兘涓虹┖");
+ return;
+ }
+
+ loading.value = true;
+ try {
+ const selectedUser = userList.value.find(
+ (item) => item.userId === form.acceptanceName
+ );
+ const data = {
+ id: maintenanceId.value,
+ acceptanceName: selectedUser ? selectedUser.nickName : form.acceptanceName,
+ acceptanceTime: dayjs(form.acceptanceTime).format("YYYY-MM-DD HH:mm:ss"),
+ acceptanceRemark: form.acceptanceRemark,
+ };
+ const { code } = await maintenanceAcceptance(data);
+ if (code == 200) {
+ ElMessage.success("楠屾敹瀹℃壒鎴愬姛");
+ emits("ok");
+ resetForm();
+ visible.value = false;
+ }
+ } finally {
+ loading.value = false;
+ }
+};
+
+const handleCancel = () => {
+ resetForm();
+ visible.value = false;
+};
+
+const handleClose = () => {
+ resetForm();
+ visible.value = false;
+};
+
+const open = (id, row) => {
+ maintenanceId.value = id;
+ visible.value = true;
+ resetForm();
+ loadUserList();
+};
+
+defineExpose({
+ open,
+});
+</script>
+
+<style lang="scss" scoped></style>
diff --git a/src/views/equipmentManagement/upkeep/Form/MaintenanceModal.vue b/src/views/equipmentManagement/upkeep/Form/MaintenanceModal.vue
index e86b64a..b27d1e1 100644
--- a/src/views/equipmentManagement/upkeep/Form/MaintenanceModal.vue
+++ b/src/views/equipmentManagement/upkeep/Form/MaintenanceModal.vue
@@ -25,18 +25,11 @@
style="width: 100%"
/>
</el-form-item>
- <el-form-item label="淇濆吇鐘舵��">
- <el-select v-model="form.status">
- <el-option label="寰呬繚鍏�" :value="0"></el-option>
- <el-option label="瀹岀粨" :value="1"></el-option>
- <el-option label="澶辫触" :value="2"></el-option>
- </el-select>
- </el-form-item>
<el-form-item label="淇濆吇缁撴灉">
- <el-input
- v-model="form.maintenanceResult"
- placeholder="璇疯緭鍏ヤ繚鍏荤粨鏋�"
- type="text" />
+ <el-select v-model="form.maintenanceResult" placeholder="璇烽�夋嫨淇濆吇缁撴灉">
+ <el-option label="缁翠慨" value="0" />
+ <el-option label="瀹屽ソ" value="1" />
+ </el-select>
</el-form-item>
<el-form-item label="璁惧澶囦欢">
<el-select v-model="form.sparePartsIds" :loading="loadingSparePartOptions" placeholder="璇烽�夋嫨璁惧澶囦欢" multiple filterable>
@@ -84,7 +77,7 @@
import dayjs from "dayjs";
import useUserStore from "@/store/modules/user";
import { ElMessage } from "element-plus";
-import {computed, ref} from "vue";
+import {computed, getCurrentInstance, ref} from "vue";
import {getSparePartsList} from "@/api/equipmentManagement/spareParts.js";
defineOptions({
@@ -92,6 +85,7 @@
});
const emits = defineEmits(["ok"]);
+const { proxy } = getCurrentInstance();
// 淇濆瓨璁″垝淇濆吇璁板綍鐨刬d
const planId = ref();
@@ -100,10 +94,9 @@
const userStore = useUserStore();
const { form, resetForm } = useFormData({
- maintenanceActuallyName: undefined, // 瀹為檯淇濆吇浜�
- maintenanceActuallyTime: undefined, // 瀹為檯淇濆吇鏃ユ湡
- maintenanceResult: undefined, // 淇濆吇缁撴灉
- status: 0, // 淇濆吇鐘舵��
+ maintenanceActuallyName: undefined,
+ maintenanceActuallyTime: undefined,
+ maintenanceResult: undefined,
sparePartsIds: [],
});
@@ -121,12 +114,10 @@
form.maintenanceActuallyName =
data.maintenanceActuallyName ?? userStore.nickName;
form.maintenanceActuallyTime =
- data.maintenanceActuallyTime
+ data.maintenanceActuallyTime
? dayjs(data.maintenanceActuallyTime).format("YYYY-MM-DD HH:mm:ss")
: dayjs().format("YYYY-MM-DD HH:mm:ss");
form.maintenanceResult = data.maintenanceResult;
- form.status = 1; // 榛樿鐘舵�佷负瀹岀粨
- // multiple 閫夋嫨鍣ㄨ姹傛暟缁勶紱鍚庣甯歌繑鍥� "1,2,3"
if (Array.isArray(data?.sparePartsIds)) {
form.sparePartsIds = data.sparePartsIds.map((v) => Number(v)).filter((v) => Number.isFinite(v));
} else if (typeof data?.sparePartsIds === "string") {
diff --git a/src/views/equipmentManagement/upkeep/index.vue b/src/views/equipmentManagement/upkeep/index.vue
index 419e9aa..b2756d1 100644
--- a/src/views/equipmentManagement/upkeep/index.vue
+++ b/src/views/equipmentManagement/upkeep/index.vue
@@ -173,32 +173,33 @@
<template #statusRef="{ row }">
<el-tag v-if="row.status === 2" type="danger">澶辫触</el-tag>
<el-tag v-if="row.status === 1" type="success">瀹岀粨</el-tag>
+ <el-tag v-if="row.status === 3" type="warning">寰呴獙鏀�</el-tag>
<el-tag v-if="row.status === 0" type="warning">寰呬繚鍏�</el-tag>
</template>
<template #operation="{ row }">
- <!-- 杩欎釜鍔熻兘璺熸柊澧炰繚鍏诲姛鑳戒竴妯′竴鏍凤紝鏈夊暐鎰忎箟锛� -->
- <!-- <el-button
- type="primary"
- text
- @click="addMaintain(row)"
- >
- 鏂板淇濆吇
- </el-button> -->
<el-button
type="primary"
link
- :disabled="row.status === 1"
+ :disabled="row.status === 1 || row.status === 3"
@click="editPlan(row.id)"
>
缂栬緫
</el-button>
<el-button
+ v-if="row.status === 0"
type="success"
link
- :disabled="row.status === 1"
@click="addMaintain(row)"
>
淇濆吇
+ </el-button>
+ <el-button
+ v-if="row.status === 3"
+ type="success"
+ link
+ @click="openAcceptanceDialog(row)"
+ >
+ 楠屾敹瀹℃壒
</el-button>
<el-button
type="danger"
@@ -222,6 +223,7 @@
</el-tabs>
<PlanModal ref="planModalRef" @ok="getTableData" />
<MaintenanceModal ref="maintainModalRef" @ok="getTableData" />
+ <AcceptanceModal ref="acceptanceModalRef" @ok="getTableData" />
<FormDia ref="formDiaRef" @closeDia="getScheduledTableData" />
<FileListDialog
ref="fileListDialogRef"
@@ -242,6 +244,7 @@
import PlanModal from './Form/PlanModal.vue'
import MaintenanceModal from './Form/MaintenanceModal.vue'
import FormDia from './Form/formDia.vue'
+import AcceptanceModal from './Form/AcceptanceModal.vue'
import FileListDialog from '@/components/Dialog/FileListDialog.vue'
import {
getUpkeepPage,
@@ -249,6 +252,7 @@
deviceMaintenanceTaskList,
deviceMaintenanceTaskDel,
deviceMaintenanceTaskChangeEnable,
+ maintenanceAcceptance,
} from '@/api/equipmentManagement/upkeep'
import {
listMaintenanceTaskFiles,
@@ -266,6 +270,8 @@
const planModalRef = ref()
// 淇濆吇寮圭獥鎺у埗鍣�
const maintainModalRef = ref()
+// 楠屾敹瀹℃壒寮圭獥鎺у埗鍣�
+const acceptanceModalRef = ref()
// 瀹氭椂浠诲姟寮圭獥鎺у埗鍣�
const formDiaRef = ref()
// 闄勪欢寮圭獥
@@ -427,6 +433,25 @@
prop: "status",
dataType: "slot",
slot: "statusRef",
+ },
+ {
+ label: "楠屾敹浜�",
+ align: "center",
+ prop: "acceptanceName",
+ formatData: (cell) => cell || "-",
+ },
+ {
+ label: "楠屾敹鏃堕棿",
+ align: "center",
+ prop: "acceptanceTime",
+ formatData: (cell) =>
+ cell ? dayjs(cell).format("YYYY-MM-DD HH:mm:ss") : "-",
+ },
+ {
+ label: "楠屾敹澶囨敞",
+ align: "center",
+ prop: "acceptanceRemark",
+ formatData: (cell) => cell || "-",
},
{
fixed: "right",
@@ -680,6 +705,11 @@
await fetchMaintenanceTaskFiles(row.id)
}
+// 鎵撳紑楠屾敹瀹℃壒寮圭獥
+const openAcceptanceDialog = (row) => {
+ acceptanceModalRef.value.open(row.id, row)
+}
+
// 鍒锋柊闄勪欢鍒楄〃
const refreshFileList = async () => {
if (!currentMaintenanceTaskId.value) return
diff --git a/src/views/procurementManagement/paymentLedger/index.vue b/src/views/procurementManagement/paymentLedger/index.vue
index ba84a4c..8ec0dd9 100644
--- a/src/views/procurementManagement/paymentLedger/index.vue
+++ b/src/views/procurementManagement/paymentLedger/index.vue
@@ -42,15 +42,15 @@
prop="contractAmounts"
show-overflow-tooltip
:formatter="formattedNumber" />
- <el-table-column label="搴斾粯閲戦(鍏�)"
- prop="payableAmount"
- show-overflow-tooltip>
- <template #default="{ row, column }">
- <el-text type="danger">
- {{ formattedNumber(row, column, row.payableAmount) }}
- </el-text>
- </template>
- </el-table-column>
+<!-- <el-table-column label="搴斾粯閲戦(鍏�)"-->
+<!-- prop="payableAmount"-->
+<!-- show-overflow-tooltip>-->
+<!-- <template #default="{ row, column }">-->
+<!-- <el-text type="danger">-->
+<!-- {{ formattedNumber(row, column, row.payableAmount) }}-->
+<!-- </el-text>-->
+<!-- </template>-->
+<!-- </el-table-column>-->
</el-table>
<pagination v-show="total > 0"
@pagination="paginationSearch"
--
Gitblit v1.9.3