From ac09706b8eb2315b444f4ee8837de47747a6ea43 Mon Sep 17 00:00:00 2001
From: zhangwencui <1064582902@qq.com>
Date: 星期六, 23 五月 2026 14:15:38 +0800
Subject: [PATCH] 合并河南鹤壁问题 1、客户往来没有合同金额 2、销售台账需要详情按钮查看 3、主生产计划,统一居左展示。把销售合同号移到前面展示而不是往后拉才可以看到 4、设备报修-只需要展示关键数据。新增一个详情按钮,其他数据在详情里查看 5、计量器台账-应该是叫编辑而不是查看 6、设备巡检tab页更名、表格无法拖拉问题 7、任务管理不需要巡检结果 8、 反馈登记-问题描述修改为客户诉求
---
src/views/customerService/feedbackRegistration/components/formDia.vue | 4
src/views/equipmentManagement/measurementEquipment/index.vue | 630 ++++++-----
src/views/customerService/feedbackRegistration/index.vue | 825 ++++++++--------
src/views/equipmentManagement/repair/Modal/RepairModal.vue | 332 +++--
src/views/equipmentManagement/repair/index.vue | 506 ++++-----
src/views/productionPlan/productionPlan/index.vue | 16
src/views/salesManagement/receiptPaymentLedger/index.vue | 6
src/views/salesManagement/salesLedger/index.vue | 565 +++++-----
src/views/equipmentManagement/inspectionManagement/index.vue | 67
src/components/Dialog/FormDialog.vue | 2
10 files changed, 1,502 insertions(+), 1,451 deletions(-)
diff --git a/src/components/Dialog/FormDialog.vue b/src/components/Dialog/FormDialog.vue
index 8b657de..b60bfb4 100644
--- a/src/components/Dialog/FormDialog.vue
+++ b/src/components/Dialog/FormDialog.vue
@@ -55,7 +55,7 @@
})
// 璇︽儏妯″紡涓嶅睍绀衡�滅‘璁も�濇寜閽紝鍏跺畠绫诲瀷姝e父鏄剧ず
-const showConfirm = computed(() => props.operationType !== 'detail')
+const showConfirm = computed(() => props.operationType !== 'detail' && props.operationType !== 'view')
const computedTitle = computed(() => {
if (typeof props.title === 'function') {
diff --git a/src/views/customerService/feedbackRegistration/components/formDia.vue b/src/views/customerService/feedbackRegistration/components/formDia.vue
index 790ddbe..fd3091e 100644
--- a/src/views/customerService/feedbackRegistration/components/formDia.vue
+++ b/src/views/customerService/feedbackRegistration/components/formDia.vue
@@ -63,10 +63,10 @@
</el-form-item>
</el-col>
<el-col :span="4">
- <el-form-item label="闂鎻忚堪锛�"
+ <el-form-item label="瀹㈡埛璇夋眰锛�"
prop="proDesc">
<el-input v-model="form.proDesc"
- placeholder="璇疯緭鍏ラ棶棰樻弿杩�" />
+ placeholder="璇疯緭鍏ュ鎴疯瘔姹�" />
</el-form-item>
</el-col>
</el-row>
diff --git a/src/views/customerService/feedbackRegistration/index.vue b/src/views/customerService/feedbackRegistration/index.vue
index 40d99be..1e57bdb 100644
--- a/src/views/customerService/feedbackRegistration/index.vue
+++ b/src/views/customerService/feedbackRegistration/index.vue
@@ -1,13 +1,13 @@
<template>
<div class="app-container">
<div class="workorder-stats">
- <div
- v-for="(item, index) in statsList"
- :key="index"
- class="stat-card"
- >
- <div class="stat-icon" :style="{ backgroundColor: item.bgColor }">
- <el-icon :color="item.color" :size="20">
+ <div v-for="(item, index) in statsList"
+ :key="index"
+ class="stat-card">
+ <div class="stat-icon"
+ :style="{ backgroundColor: item.bgColor }">
+ <el-icon :color="item.color"
+ :size="20">
<component :is="item.icon" />
</el-icon>
</div>
@@ -18,84 +18,64 @@
</div>
</div>
<div class="search-wrapper">
- <el-form
- :model="searchForm"
- class="demo-form-inline"
- >
+ <el-form :model="searchForm"
+ class="demo-form-inline">
<el-row :gutter="20">
<el-col :span="4">
<el-form-item>
- <el-input
- v-model="searchForm.afterSalesServiceNo"
- placeholder="璇疯緭鍏ュ伐鍗曠紪鍙�"
- clearable
- />
+ <el-input v-model="searchForm.afterSalesServiceNo"
+ placeholder="璇疯緭鍏ュ伐鍗曠紪鍙�"
+ clearable />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item>
- <el-select
- v-model="searchForm.status"
- placeholder="璇烽�夋嫨宸ュ崟鐘舵��"
- clearable
- >
- <el-option
- v-for="dict in workOrderStatusOptions"
- :key="dict.value"
- :label="dict.label"
- :value="dict.value"
- />
+ <el-select v-model="searchForm.status"
+ placeholder="璇烽�夋嫨宸ュ崟鐘舵��"
+ clearable>
+ <el-option v-for="dict in workOrderStatusOptions"
+ :key="dict.value"
+ :label="dict.label"
+ :value="dict.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item>
- <el-select
- v-model="searchForm.urgency"
- placeholder="璇烽�夋嫨绱ф�ョ▼搴�"
- clearable
- >
- <el-option
- v-for="dict in degreeOfUrgencyOptions"
- :key="dict.value"
- :label="dict.label"
- :value="dict.value"
- />
+ <el-select v-model="searchForm.urgency"
+ placeholder="璇烽�夋嫨绱ф�ョ▼搴�"
+ clearable>
+ <el-option v-for="dict in degreeOfUrgencyOptions"
+ :key="dict.value"
+ :label="dict.label"
+ :value="dict.value" />
</el-select>
</el-form-item>
</el-col>
- <el-col :span="4">
+ <el-col :span="4">
<el-form-item>
- <el-select
- v-model="searchForm.serviceType"
- placeholder="璇烽�夋嫨鍞悗绫诲瀷"
- clearable
- >
- <el-option
- v-for="dict in classificationOptions"
- :key="dict.value"
- :label="dict.label"
- :value="dict.value"
- />
+ <el-select v-model="searchForm.serviceType"
+ placeholder="璇烽�夋嫨鍞悗绫诲瀷"
+ clearable>
+ <el-option v-for="dict in classificationOptions"
+ :key="dict.value"
+ :label="dict.label"
+ :value="dict.value" />
</el-select>
</el-form-item>
</el-col>
- <el-col :span="4">
- <el-form-item>
- <el-input
- v-model="searchForm.orderNo"
- placeholder="璇疯緭鍏ラ攢鍞崟鍙�"
- clearable
- />
- </el-form-item>
- </el-col>
-
-
-
+ <el-col :span="4">
+ <el-form-item>
+ <el-input v-model="searchForm.orderNo"
+ placeholder="璇疯緭鍏ラ攢鍞崟鍙�"
+ clearable />
+ </el-form-item>
+ </el-col>
<!-- 鎸夐挳 -->
<el-col :span="4">
<el-form-item>
- <el-button type="primary" @click="handleQuery">
+ <el-button type="primary"
+ @click="handleQuery">
鎼滅储
</el-button>
<el-button @click="handleReset">
@@ -107,310 +87,340 @@
</el-form>
</div>
<div class="table_list">
- <div class="table_header" style="display: flex; justify-content: space-between; align-items: center;">
+ <div class="table_header"
+ style="display: flex; justify-content: space-between; align-items: center;">
<div>
- <el-button type="primary" @click="openForm('add')">鏂板鍞悗鍗�</el-button>
+ <el-button type="primary"
+ @click="openForm('add')">鏂板鍞悗鍗�</el-button>
</div>
<div>
<el-button @click="handleOut">瀵煎嚭</el-button>
- <el-button type="danger" plain @click="handleDelete">鍒犻櫎</el-button>
+ <el-button type="danger"
+ plain
+ @click="handleDelete">鍒犻櫎</el-button>
</div>
</div>
- <PIMTable
- rowKey="id"
- :column="tableColumn"
- :tableData="tableData"
- :page="page"
- :height="tableHeight"
- :isSelection="true"
- @selection-change="handleSelectionChange"
- :tableLoading="tableLoading"
- @pagination="pagination"
- ></PIMTable>
+ <PIMTable rowKey="id"
+ :column="tableColumn"
+ :tableData="tableData"
+ :page="page"
+ :height="tableHeight"
+ :isSelection="true"
+ @selection-change="handleSelectionChange"
+ :tableLoading="tableLoading"
+ @pagination="pagination"></PIMTable>
</div>
- <form-dia ref="formDia" @close="handleQuery"></form-dia>
+ <form-dia ref="formDia"
+ @close="handleQuery"></form-dia>
</div>
</template>
<script setup>
-import {onMounted, reactive, ref, toRefs, computed, getCurrentInstance, nextTick} from "vue";
-import FormDia from "@/views/customerService/feedbackRegistration/components/formDia.vue";
-import {ElMessageBox} from "element-plus";
-import {afterSalesServiceDelete, afterSalesServiceListPage, getSalesLedgerDetail} from "@/api/customerService/index.js";
-import useUserStore from "@/store/modules/user.js";
-const { proxy } = getCurrentInstance();
-const userStore = useUserStore()
-import { Document, FolderOpened, UserFilled } from "@element-plus/icons-vue"
-import { markRaw } from 'vue'
+ import {
+ onMounted,
+ reactive,
+ ref,
+ toRefs,
+ computed,
+ getCurrentInstance,
+ nextTick,
+ } from "vue";
+ import FormDia from "@/views/customerService/feedbackRegistration/components/formDia.vue";
+ import { ElMessageBox } from "element-plus";
+ import {
+ afterSalesServiceDelete,
+ afterSalesServiceListPage,
+ getSalesLedgerDetail,
+ } from "@/api/customerService/index.js";
+ import useUserStore from "@/store/modules/user.js";
+ const { proxy } = getCurrentInstance();
+ const userStore = useUserStore();
+ import { Document, FolderOpened, UserFilled } from "@element-plus/icons-vue";
+ import { markRaw } from "vue";
-const statsList = ref([
- {
- icon: markRaw(Document),
- count: 0,
- label: '鍏ㄩ儴宸ュ崟',
- color: '#4080ff',
- bgColor: '#eaf2ff'
- },
- {
- icon: markRaw(FolderOpened),
- count: 0,
- label: '宸插鐞�',
- color: '#ff9a2e',
- bgColor: '#fff5e6'
- },
- {
- icon: markRaw(UserFilled),
- count: 0,
- label: '宸插畬鎴�',
- color: '#00b42a',
- bgColor: '#e6f7ed'
- },
-])
-
-const data = reactive({
- searchForm : {
- customerName: "",
- status: "",
- urgency: "",
- serviceType: "",
- reviewStatus: "",
- orderNo: "",
- }
-});
-const { searchForm } = toRefs(data);
-
-const tableColumn = ref([
- {
- label: "宸ュ崟缂栧彿",
- prop:"afterSalesServiceNo",
- width: 150,
- align: "center"
- },
- {
- label: "閿�鍞崟鍙�",
- prop:"salesContractNo",
- width: 150,
- align: "center"
- },
- {
- label: "澶勭悊鐘舵��",
- prop: "status",
- dataType: "tag",
-
- formatData: (params) => {
- if (params) {
- let part = String(params)
- const item = workOrderStatusOptions.value.find(item => item.value === part);
- return item?.label || params;
- }
- return null;
+ const statsList = ref([
+ {
+ icon: markRaw(Document),
+ count: 0,
+ label: "鍏ㄩ儴宸ュ崟",
+ color: "#4080ff",
+ bgColor: "#eaf2ff",
},
- formatType: (params) => {
- if (params === 1) {
- return "danger";
- } else if (params === 2) {
- return "success";
- } else {
+ {
+ icon: markRaw(FolderOpened),
+ count: 0,
+ label: "宸插鐞�",
+ color: "#ff9a2e",
+ bgColor: "#fff5e6",
+ },
+ {
+ icon: markRaw(UserFilled),
+ count: 0,
+ label: "宸插畬鎴�",
+ color: "#00b42a",
+ bgColor: "#e6f7ed",
+ },
+ ]);
+
+ const data = reactive({
+ searchForm: {
+ customerName: "",
+ status: "",
+ urgency: "",
+ serviceType: "",
+ reviewStatus: "",
+ orderNo: "",
+ },
+ });
+ const { searchForm } = toRefs(data);
+
+ const tableColumn = ref([
+ {
+ label: "宸ュ崟缂栧彿",
+ prop: "afterSalesServiceNo",
+ width: 150,
+ align: "center",
+ },
+ {
+ label: "閿�鍞崟鍙�",
+ prop: "salesContractNo",
+ width: 150,
+ align: "center",
+ },
+ {
+ label: "澶勭悊鐘舵��",
+ prop: "status",
+ dataType: "tag",
+
+ formatData: params => {
+ if (params) {
+ let part = String(params);
+ const item = workOrderStatusOptions.value.find(
+ item => item.value === part
+ );
+ return item?.label || params;
+ }
return null;
- }
- },
- align: "center"
- },
- {
- label: "鍙嶉鏃ユ湡",
- prop: "feedbackDate",
- width: 150,
- align: "center"
- },
- {
- label: "鐧昏浜�",
- prop: "checkNickName",
- align: "center"
- },
- {
- label: "绱ф�ョ▼搴�",
- prop: "urgency",
- // 鏍规嵁degreeOfUrgencyOptions瀛楀吀鍘昏嚜鍔ㄥ尮閰�
- formatData: (params) => {
- if (params) {
- const item = degreeOfUrgencyOptions.value.find(item => item.value === params);
- return item?.label || params;
- }
- return null;
- },
- align: "center"
- },
- {
- label: "鍞悗绫诲瀷",
- prop: "serviceType",
- // 鏍规嵁classificationOptions瀛楀吀鍘昏嚜鍔ㄥ尮閰�
- formatData: (params) => {
- if (params) {
- const item = classificationOptions.value.find(item => item.value === params);
- return item?.label || params;
- }
- return null;
- },
- align: "center"
- },
- {
- label: "闂鎻忚堪",
- prop: "proDesc",
- width:300,
- },
- {
- label: "鍏宠仈閮ㄩ棬",
- prop: "deptName",
- width: 200,
- align: "center"
- },
- {
- dataType: "action",
- label: "鎿嶄綔",
- fixed: 'right',
- operation: [
- {
- name: "缂栬緫",
- type: "text",
- clickFun: (row) => {
- console.log(row)
- openForm("edit", row);
- },
- disabled: (row) => {
- return row.status !== 1
+ },
+ formatType: params => {
+ if (params === 1) {
+ return "danger";
+ } else if (params === 2) {
+ return "success";
+ } else {
+ return null;
}
},
- ],
- align: "center"
- },
-]);
-const tableData = ref([]);
-const tableLoading = ref(false);
-const page = reactive({
- current: 1,
- size: 100,
- total: 0,
-});
-const selectedRows = ref([]);
-const tableHeight = computed(() => "calc(100% -80px)");
-
-const handleReset = () => {
- Object.keys(searchForm.value).forEach(key => {
- searchForm.value[key] = ""
- })
- page.current = 1;
- getList();
-}
-// 琛ㄦ牸閫夋嫨鏁版嵁
-const handleSelectionChange = (selection) => {
- selectedRows.value = selection;
-};
-const formDia = ref()
-
-// 瀛楀吀鑾峰彇
-/*
-post_sale_waiting_list 鏂板鐨勫敭鍚庡垎绫�
-degree_of_urgency 鏂板鐨勭揣鎬ョ▼搴�
-work_order_status 涓婚〉鐨勫伐鍗曠姸鎬�
-review_status 棣栭〉鐨勫鏍哥姸鎬�
-*/
-const { post_sale_waiting_list, degree_of_urgency, work_order_status, review_status } = proxy.useDict(
- "post_sale_waiting_list",
- "degree_of_urgency",
- "work_order_status",
- "review_status"
-);
-
-const classificationOptions = computed(() => post_sale_waiting_list?.value || []);
-const degreeOfUrgencyOptions = computed(() => degree_of_urgency?.value || []);
-const workOrderStatusOptions = computed(() => work_order_status?.value || []);
-
-// 鏌ヨ鍒楄〃
-/** 鎼滅储鎸夐挳鎿嶄綔 */
-const handleQuery = () => {
- page.current = 1;
- getList();
-};
-const pagination = (obj) => {
- page.current = obj.page;
- page.size = obj.limit;
- getList();
-};
-const getList = () => {
- tableLoading.value = true;
- getSalesLedgerDetails()
- afterSalesServiceListPage({ ...searchForm.value, ...page }).then((res) => {
- tableLoading.value = false;
- tableData.value = res.data.records;
- page.total = res.data.total;
+ align: "center",
+ },
+ {
+ label: "鍙嶉鏃ユ湡",
+ prop: "feedbackDate",
+ width: 150,
+ align: "center",
+ },
+ {
+ label: "鐧昏浜�",
+ prop: "checkNickName",
+ align: "center",
+ },
+ {
+ label: "绱ф�ョ▼搴�",
+ prop: "urgency",
+ // 鏍规嵁degreeOfUrgencyOptions瀛楀吀鍘昏嚜鍔ㄥ尮閰�
+ formatData: params => {
+ if (params) {
+ const item = degreeOfUrgencyOptions.value.find(
+ item => item.value === params
+ );
+ return item?.label || params;
+ }
+ return null;
+ },
+ align: "center",
+ },
+ {
+ label: "鍞悗绫诲瀷",
+ prop: "serviceType",
+ // 鏍规嵁classificationOptions瀛楀吀鍘昏嚜鍔ㄥ尮閰�
+ formatData: params => {
+ if (params) {
+ const item = classificationOptions.value.find(
+ item => item.value === params
+ );
+ return item?.label || params;
+ }
+ return null;
+ },
+ align: "center",
+ },
+ {
+ label: "瀹㈡埛璇夋眰",
+ prop: "proDesc",
+ width: 300,
+ },
+ {
+ label: "鍏宠仈閮ㄩ棬",
+ prop: "deptName",
+ width: 200,
+ align: "center",
+ },
+ {
+ dataType: "action",
+ label: "鎿嶄綔",
+ fixed: "right",
+ operation: [
+ {
+ name: "缂栬緫",
+ type: "text",
+ clickFun: row => {
+ console.log(row);
+ openForm("edit", row);
+ },
+ disabled: row => {
+ return row.status !== 1;
+ },
+ },
+ ],
+ align: "center",
+ },
+ ]);
+ const tableData = ref([]);
+ const tableLoading = ref(false);
+ const page = reactive({
+ current: 1,
+ size: 100,
+ total: 0,
});
-};
+ const selectedRows = ref([]);
+ const tableHeight = computed(() => "calc(100% -80px)");
-// 鎵撳紑寮规
-const openForm = (type, row) => {
- nextTick(() => {
- formDia.value?.openDialog(type, row)
- })
-};
+ const handleReset = () => {
+ Object.keys(searchForm.value).forEach(key => {
+ searchForm.value[key] = "";
+ });
+ page.current = 1;
+ getList();
+ };
+ // 琛ㄦ牸閫夋嫨鏁版嵁
+ const handleSelectionChange = selection => {
+ selectedRows.value = selection;
+ };
+ const formDia = ref();
-function handleDelete() {
- let ids = [];
- if (selectedRows.value.length > 0) {
- // 妫�鏌ユ槸鍚︽湁浠栦汉缁存姢鐨勬暟鎹�
- const unauthorizedData = selectedRows.value.filter(item => item.checkUserId !== userStore.id);
- if (unauthorizedData.length > 0) {
- proxy.$modal.msgWarning("涓嶅彲鍒犻櫎浠栦汉缁存姢鐨勬暟鎹�");
+ // 瀛楀吀鑾峰彇
+ /*
+ post_sale_waiting_list 鏂板鐨勫敭鍚庡垎绫�
+ degree_of_urgency 鏂板鐨勭揣鎬ョ▼搴�
+ work_order_status 涓婚〉鐨勫伐鍗曠姸鎬�
+ review_status 棣栭〉鐨勫鏍哥姸鎬�
+ */
+ const {
+ post_sale_waiting_list,
+ degree_of_urgency,
+ work_order_status,
+ review_status,
+ } = proxy.useDict(
+ "post_sale_waiting_list",
+ "degree_of_urgency",
+ "work_order_status",
+ "review_status"
+ );
+
+ const classificationOptions = computed(
+ () => post_sale_waiting_list?.value || []
+ );
+ const degreeOfUrgencyOptions = computed(() => degree_of_urgency?.value || []);
+ const workOrderStatusOptions = computed(() => work_order_status?.value || []);
+
+ // 鏌ヨ鍒楄〃
+ /** 鎼滅储鎸夐挳鎿嶄綔 */
+ const handleQuery = () => {
+ page.current = 1;
+ getList();
+ };
+ const pagination = obj => {
+ page.current = obj.page;
+ page.size = obj.limit;
+ getList();
+ };
+ const getList = () => {
+ tableLoading.value = true;
+ getSalesLedgerDetails();
+ afterSalesServiceListPage({ ...searchForm.value, ...page }).then(res => {
+ tableLoading.value = false;
+ tableData.value = res.data.records;
+ page.total = res.data.total;
+ });
+ };
+
+ // 鎵撳紑寮规
+ const openForm = (type, row) => {
+ nextTick(() => {
+ formDia.value?.openDialog(type, row);
+ });
+ };
+
+ function handleDelete() {
+ let ids = [];
+ if (selectedRows.value.length > 0) {
+ // 妫�鏌ユ槸鍚︽湁浠栦汉缁存姢鐨勬暟鎹�
+ const unauthorizedData = selectedRows.value.filter(
+ item => item.checkUserId !== userStore.id
+ );
+ if (unauthorizedData.length > 0) {
+ proxy.$modal.msgWarning("涓嶅彲鍒犻櫎浠栦汉缁存姢鐨勬暟鎹�");
+ return;
+ }
+ ids = selectedRows.value.map(item => item.id);
+ } else {
+ proxy.$modal.msgWarning("璇烽�夋嫨鏁版嵁");
return;
}
- ids = selectedRows.value.map((item) => item.id);
- } else {
- proxy.$modal.msgWarning("璇烽�夋嫨鏁版嵁");
- return;
- }
- ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚垹闄わ紝鏄惁纭鍒犻櫎锛�", "鍒犻櫎鎻愮ず", {
- confirmButtonText: "纭",
- cancelButtonText: "鍙栨秷",
- type: "warning",
- })
+ ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚垹闄わ紝鏄惁纭鍒犻櫎锛�", "鍒犻櫎鎻愮ず", {
+ confirmButtonText: "纭",
+ cancelButtonText: "鍙栨秷",
+ type: "warning",
+ })
.then(() => {
tableLoading.value = true;
afterSalesServiceDelete(ids)
- .then(() => {
- proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
- getList();
- })
- .finally(() => {
- tableLoading.value = false;
- });
+ .then(() => {
+ proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+ getList();
+ })
+ .finally(() => {
+ tableLoading.value = false;
+ });
})
.catch(() => {
proxy.$modal.msg("宸插彇娑�");
});
-};
+ }
-// 瀵煎嚭
-const handleOut = () => {
- ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚鍑猴紝鏄惁纭瀵煎嚭锛�", "瀵煎嚭", {
- confirmButtonText: "纭",
- cancelButtonText: "鍙栨秷",
- type: "warning",
- })
+ // 瀵煎嚭
+ const handleOut = () => {
+ ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚鍑猴紝鏄惁纭瀵煎嚭锛�", "瀵煎嚭", {
+ confirmButtonText: "纭",
+ cancelButtonText: "鍙栨秷",
+ type: "warning",
+ })
.then(() => {
proxy.download("/afterSalesService/export", {}, "鍙嶉鐧昏.xlsx");
})
.catch(() => {
proxy.$modal.msg("宸插彇娑�");
});
-};
+ };
-const getStatsCountByStatus = (list, status) => {
- if (!Array.isArray(list)) return 0;
- return list.find((item) => item?.status === status)?.count || 0;
-};
+ const getStatsCountByStatus = (list, status) => {
+ if (!Array.isArray(list)) return 0;
+ return list.find(item => item?.status === status)?.count || 0;
+ };
// 鑾峰彇缁熻鏁版嵁骞跺埛鏂伴《閮ㄥ崱鐗�
const getSalesLedgerDetails = () => {
- getSalesLedgerDetail({}).then((res) => {
+ getSalesLedgerDetail({}).then(res => {
if (res.code === 200) {
const statsData = Array.isArray(res.data) ? res.data : [];
statsList.value[0].count = getStatsCountByStatus(statsData, 3);
@@ -418,99 +428,96 @@
statsList.value[2].count = getStatsCountByStatus(statsData, 1);
}
});
- }
+ };
-
-
-onMounted(() => {
- getList();
-
-});
+ onMounted(() => {
+ getList();
+ });
</script>
<style scoped lang="scss">
-.search-wrapper {
- background: white;
- padding: 1rem 1rem 0 1rem;
- border: 8px;
- border-radius: 16px;
-}
+ .search-wrapper {
+ background: white;
+ padding: 1rem 1rem 0 1rem;
+ border: 8px;
+ border-radius: 16px;
+ }
-.expand-btn {
- width: 100%;
- padding: 20px; /* 涓婁笅宸﹀彸鍚�20px锛岀偣鍑昏繖涓寖鍥撮兘鑳借Е鍙戜簨浠� */
- cursor: pointer; /* 榧犳爣鎮诞鏄剧ず鎵嬪瀷锛屾彁鍗囦綋楠� */
- text-align: center;
-}
+ .expand-btn {
+ width: 100%;
+ padding: 20px; /* 涓婁笅宸﹀彸鍚�20px锛岀偣鍑昏繖涓寖鍥撮兘鑳借Е鍙戜簨浠� */
+ cursor: pointer; /* 榧犳爣鎮诞鏄剧ず鎵嬪瀷锛屾彁鍗囦綋楠� */
+ text-align: center;
+ }
-.workorder-stats {
- display: flex;
- gap: 16px;
- padding-bottom:1rem;
- border-radius: 8px;
-}
+ .workorder-stats {
+ display: flex;
+ gap: 16px;
+ padding-bottom: 1rem;
+ border-radius: 8px;
+ }
-.stat-card {
- flex: 1;
- display: flex;
- align-items: center;
- gap: 12px;
- padding: 20px;
- background-color: #fff;
- border-radius: 8px;
- box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.06);
-}
+ .stat-card {
+ flex: 1;
+ display: flex;
+ align-items: center;
+ gap: 12px;
+ padding: 20px;
+ background-color: #fff;
+ border-radius: 8px;
+ box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.06);
+ }
-.stat-icon {
- display: flex;
- align-items: center;
- justify-content: center;
- width: 48px;
- height: 48px;
- border-radius: 8px;
-}
+ .stat-icon {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 48px;
+ height: 48px;
+ border-radius: 8px;
+ }
-.stat-info {
- display: flex;
- flex-direction: column;
- gap: 4px;
-}
+ .stat-info {
+ display: flex;
+ flex-direction: column;
+ gap: 4px;
+ }
-.stat-number {
- font-size: 24px;
- font-weight: 600;
- color: #303133;
- line-height: 1;
-}
+ .stat-number {
+ font-size: 24px;
+ font-weight: 600;
+ color: #303133;
+ line-height: 1;
+ }
-.stat-label {
- font-size: 14px;
- color: #909399;
- line-height: 1;
-}
-.table_header{
- padding-bottom: 10px;
-}
+ .stat-label {
+ font-size: 14px;
+ color: #909399;
+ line-height: 1;
+ }
+ .table_header {
+ padding-bottom: 10px;
+ }
-.table_list {
- height: calc(100vh - 380px);
- background: #fff;
- margin-top: 20px;
- display: flex;
- flex-direction: column;
-}
+ .table_list {
+ height: calc(100vh - 380px);
+ background: #fff;
+ margin-top: 20px;
+ display: flex;
+ flex-direction: column;
+ }
-:deep(.table_list .pagination-container) {
- display: flex;
- justify-content: flex-end;
- align-items: center;
- margin-top: auto;
- padding: 12px 0 0;
-}
+ :deep(.table_list .pagination-container) {
+ display: flex;
+ justify-content: flex-end;
+ align-items: center;
+ margin-top: auto;
+ padding: 12px 0 0;
+ }
-:deep(.table_list .el-pagination) {
- flex-wrap: nowrap;
- justify-content: flex-end;
- width: 100%;
-}
+ :deep(.table_list .el-pagination) {
+ flex-wrap: nowrap;
+ justify-content: flex-end;
+ width: 100%;
+ }
</style>
diff --git a/src/views/equipmentManagement/inspectionManagement/index.vue b/src/views/equipmentManagement/inspectionManagement/index.vue
index c863719..8c0d52c 100644
--- a/src/views/equipmentManagement/inspectionManagement/index.vue
+++ b/src/views/equipmentManagement/inspectionManagement/index.vue
@@ -52,7 +52,8 @@
total: total,
layout: 'total, sizes, prev, pager, next, jumper'
}"
- :table-style="{ width: '100%', height: 'calc(100vh - 23em)' }">
+ height="calc(100vh - 23em)"
+ :table-style="{ width: '100%' }">
<template #inspector="{ row }">
<div class="person-tags">
<!-- 璋冭瘯淇℃伅锛屼笂绾挎椂鍒犻櫎 -->
@@ -121,8 +122,8 @@
// 鍗曢�夋閰嶇疆
const activeRadio = ref("taskManage");
const radios = reactive([
- { name: "taskManage", label: "瀹氭椂浠诲姟绠$悊" },
- { name: "task", label: "瀹氭椂浠诲姟璁板綍" },
+ { name: "taskManage", label: "宸℃浠诲姟" },
+ { name: "task", label: "宸℃璁板綍" },
]);
// 琛ㄦ牸鏁版嵁
@@ -137,10 +138,10 @@
// 鍒楅厤缃�
const columns = ref([
- { prop: "taskName", label: "宸℃浠诲姟鍚嶇О", minWidth: 160 },
- { prop: "inspectionProject", label: "宸℃椤圭洰", minWidth: 150 },
- { prop: "remarks", label: "澶囨敞", minWidth: 150 },
- { prop: "inspector", label: "鎵ц宸℃浜�", minWidth: 150, slot: "inspector" },
+ { prop: "taskName", label: "宸℃浠诲姟鍚嶇О", minWidth: 200 },
+ { prop: "inspectionProject", label: "宸℃椤圭洰", minWidth: 180 },
+ { prop: "remarks", label: "澶囨敞", minWidth: 180 },
+ { prop: "inspector", label: "鎵ц宸℃浜�", minWidth: 180, slot: "inspector" },
{
prop: "isEnabled",
label: "鏄惁鍚敤",
@@ -151,13 +152,7 @@
{
prop: "frequencyType",
label: "棰戞",
- minWidth: 150,
- // formatter: (_, __, val) => ({
- // DAILY: "姣忔棩",
- // WEEKLY: "姣忓懆",
- // MONTHLY: "姣忔湀",
- // QUARTERLY: "瀛e害"
- // }[val] || "")
+ minWidth: 120,
formatData: params => {
return params === "DAILY"
? "姣忔棩"
@@ -173,7 +168,7 @@
{
prop: "frequencyDetail",
label: "寮�濮嬫棩鏈熶笌鏃堕棿",
- minWidth: 150,
+ minWidth: 200,
formatter: (row, column, cellValue) => {
// 鍏堝垽鏂槸鍚︽槸瀛楃涓�
if (typeof cellValue !== "string") return "";
@@ -194,11 +189,11 @@
);
},
},
- { prop: "registrant", label: "鐧昏浜�", minWidth: 100 },
+ { prop: "registrant", label: "鐧昏浜�", minWidth: 120 },
{
prop: "createTime",
label: "鐧昏鏃ユ湡",
- minWidth: 100,
+ minWidth: 180,
formatData: cell => {
if (!cell) return "-";
try {
@@ -208,19 +203,19 @@
}
},
},
- {
- prop: "inspectionResult",
- label: "宸℃缁撴灉",
- minWidth: 100,
- dataType: "tag",
- formatData: val => {
- return val == 1 ? "姝e父" : "寮傚父";
- },
- formatType: val => {
- return val == 1 ? "success" : "danger";
- },
- },
- { prop: "abnormalDescription", label: "寮傚父鎻忚堪", minWidth: 100 },
+ // {
+ // prop: "inspectionResult",
+ // label: "宸℃缁撴灉",
+ // minWidth: 100,
+ // dataType: "tag",
+ // formatData: val => {
+ // return val == 1 ? "姝e父" : "寮傚父";
+ // },
+ // formatType: val => {
+ // return val == 1 ? "success" : "danger";
+ // },
+ // },
+ { prop: "abnormalDescription", label: "寮傚父鎻忚堪", minWidth: 150 },
]);
// 鎿嶄綔鍒楅厤缃�
@@ -231,7 +226,7 @@
label: "鎿嶄綔",
width: operations.length > 1 ? 180 : 130,
fixed: "right",
- align: 'center',
+ align: "center",
dataType: "action",
operation: operations
.map(op => {
@@ -279,7 +274,7 @@
operationsArr.value = ["edit"];
} else if (value === "task") {
const operationColumn = getOperationColumn(["upload", "viewFile"]);
- // 瀹氭椂浠诲姟璁板綍涓嶅睍绀�"鏄惁鍚敤"鍒�
+ // 宸℃璁板綍涓嶅睍绀�"鏄惁鍚敤"鍒�
const taskColumns = columns.value.filter(col => col.prop !== "isEnabled");
tableColumns.value = [
...taskColumns,
@@ -422,11 +417,11 @@
.then(() => {
// 鏍规嵁褰撳墠閫変腑鐨勬爣绛鹃〉璋冪敤涓嶅悓鐨勫鍑烘帴鍙�
if (activeRadio.value === "taskManage") {
- // 瀹氭椂浠诲姟绠$悊
- proxy.download("/timingTask/export", {}, "瀹氭椂浠诲姟绠$悊.xlsx");
+ // 宸℃浠诲姟
+ proxy.download("/timingTask/export", {}, "宸℃浠诲姟.xlsx");
} else if (activeRadio.value === "task") {
- // 瀹氭椂浠诲姟璁板綍
- proxy.download("/inspectionTask/export", {}, "瀹氭椂浠诲姟璁板綍.xlsx");
+ // 宸℃璁板綍
+ proxy.download("/inspectionTask/export", {}, "宸℃璁板綍.xlsx");
}
})
.catch(() => {
diff --git a/src/views/equipmentManagement/measurementEquipment/index.vue b/src/views/equipmentManagement/measurementEquipment/index.vue
index c8789d8..007eef6 100644
--- a/src/views/equipmentManagement/measurementEquipment/index.vue
+++ b/src/views/equipmentManagement/measurementEquipment/index.vue
@@ -1,320 +1,354 @@
<template>
- <div class="app-container">
- <div class="search_form mb20">
- <div>
- <span class="search_title">褰曞叆鏃ユ湡锛�</span>
- <el-date-picker
- v-model="searchForm.recordDate"
- value-format="YYYY-MM-DD"
- format="YYYY-MM-DD"
- type="date"
- placeholder="璇烽�夋嫨"
- clearable
- style="width: 160px"
- @change="handleQuery"
- />
- <span class="search_title ml10">璁¢噺鍣ㄥ叿缂栧彿锛�</span>
- <el-input v-model="searchForm.code" placeholder="璇疯緭鍏ョ紪鍙�" clearable style="width: 240px" @change="handleQuery"/>
- <span class="search_title ml10">鐘舵�侊細</span>
- <el-select v-model="searchForm.status" placeholder="璇烽�夋嫨鐘舵��" @change="handleQuery" style="width: 160px" clearable>
- <el-option label="鏈夋晥" :value="1"></el-option>
- <el-option label="閫炬湡" :value="2"></el-option>
- </el-select>
- <el-button type="primary" @click="handleQuery" style="margin-left: 10px"
- >鎼滅储</el-button
- >
- <el-button @click="handleReset" style="margin-left: 10px">閲嶇疆</el-button>
- </div>
- <div>
- <el-button type="primary" @click="openForm('add')">鏂板璁¢噺鍣ㄥ叿</el-button>
- <el-button type="danger" plain @click="handleDelete">鍒犻櫎</el-button>
- <el-button @click="handleOut">瀵煎嚭</el-button>
- </div>
- </div>
- <div class="table_list">
- <PIMTable
- rowKey="id"
- :column="tableColumn"
- :tableData="tableData"
- :page="page"
- :isSelection="true"
- @selection-change="handleSelectionChange"
- :tableLoading="tableLoading"
- @pagination="pagination"
- :dbRowClick="dbRowClick"
- :rowClassName="rowClassName"
- ></PIMTable>
- </div>
- <form-dia ref="formDia" @close="handleQuery"></form-dia>
- <calibration-dia ref="calibrationDia" @close="handleQuery"></calibration-dia>
+ <div class="app-container">
+ <div class="search_form mb20">
+ <div>
+ <span class="search_title">褰曞叆鏃ユ湡锛�</span>
+ <el-date-picker v-model="searchForm.recordDate"
+ value-format="YYYY-MM-DD"
+ format="YYYY-MM-DD"
+ type="date"
+ placeholder="璇烽�夋嫨"
+ clearable
+ style="width: 160px"
+ @change="handleQuery" />
+ <span class="search_title ml10">璁¢噺鍣ㄥ叿缂栧彿锛�</span>
+ <el-input v-model="searchForm.code"
+ placeholder="璇疯緭鍏ョ紪鍙�"
+ clearable
+ style="width: 240px"
+ @change="handleQuery" />
+ <span class="search_title ml10">鐘舵�侊細</span>
+ <el-select v-model="searchForm.status"
+ placeholder="璇烽�夋嫨鐘舵��"
+ @change="handleQuery"
+ style="width: 160px"
+ clearable>
+ <el-option label="鏈夋晥"
+ :value="1"></el-option>
+ <el-option label="閫炬湡"
+ :value="2"></el-option>
+ </el-select>
+ <el-button type="primary"
+ @click="handleQuery"
+ style="margin-left: 10px">鎼滅储</el-button>
+ <el-button @click="handleReset"
+ style="margin-left: 10px">閲嶇疆</el-button>
+ </div>
+ <div>
+ <el-button type="primary"
+ @click="openForm('add')">鏂板璁¢噺鍣ㄥ叿</el-button>
+ <el-button type="danger"
+ plain
+ @click="handleDelete">鍒犻櫎</el-button>
+ <el-button @click="handleOut">瀵煎嚭</el-button>
+ </div>
+ </div>
+ <div class="table_list">
+ <PIMTable rowKey="id"
+ :column="tableColumn"
+ :tableData="tableData"
+ :page="page"
+ :isSelection="true"
+ @selection-change="handleSelectionChange"
+ :tableLoading="tableLoading"
+ @pagination="pagination"
+ :dbRowClick="dbRowClick"
+ :rowClassName="rowClassName"></PIMTable>
+ </div>
+ <form-dia ref="formDia"
+ @close="handleQuery"></form-dia>
+ <calibration-dia ref="calibrationDia"
+ @close="handleQuery"></calibration-dia>
<files-dia ref="filesDia"></files-dia>
<rowClickDataForm ref="rowClickData"></rowClickDataForm>
- </div>
+ </div>
</template>
<script setup>
-import {onMounted, ref, reactive, toRefs, getCurrentInstance, nextTick} from "vue";
-import FormDia from "@/views/equipmentManagement/measurementEquipment/components/formDia.vue";
-import {ElMessageBox} from "element-plus";
-import useUserStore from "@/store/modules/user.js";
-import CalibrationDia from "@/views/equipmentManagement/measurementEquipment/components/calibrationDia.vue";
-import {
- measuringInstrumentDelete,
- measuringInstrumentListPage,
-} from "@/api/equipmentManagement/measurementEquipment.js";
-import FilesDia from "./filesDia.vue";
-import rowClickDataForm from "./components/rowClickData.vue"
-const { proxy } = getCurrentInstance();
-const userStore = useUserStore()
+ import {
+ onMounted,
+ ref,
+ reactive,
+ toRefs,
+ getCurrentInstance,
+ nextTick,
+ } from "vue";
+ import FormDia from "@/views/equipmentManagement/measurementEquipment/components/formDia.vue";
+ import { ElMessageBox } from "element-plus";
+ import useUserStore from "@/store/modules/user.js";
+ import CalibrationDia from "@/views/equipmentManagement/measurementEquipment/components/calibrationDia.vue";
+ import {
+ measuringInstrumentDelete,
+ measuringInstrumentListPage,
+ } from "@/api/equipmentManagement/measurementEquipment.js";
+ import FilesDia from "./filesDia.vue";
+ import rowClickDataForm from "./components/rowClickData.vue";
+ const { proxy } = getCurrentInstance();
+ const userStore = useUserStore();
-const data = reactive({
- searchForm: {
- recordDate: "",
- code: "",
- status: "",
- },
-});
-const { searchForm } = toRefs(data);
+ const data = reactive({
+ searchForm: {
+ recordDate: "",
+ code: "",
+ status: "",
+ },
+ });
+ const { searchForm } = toRefs(data);
-const tableColumn = ref([
- {
- label: "鍑哄巶缂栧彿",
- prop: "code",
- minWidth:150,
- align:"center"
- },
- {
- label: "璁¢噺鍣ㄥ叿鍚嶇О",
- prop: "name",
- width: '160px',
- align: "center",
- },
- {
- label: "妫�瀹氬崟浣�",
- prop: "unit",
- width: 200,
- align:"center"
- },
- {
- label: "璇佷功缂栧彿",
- prop: "model",
- width:200,
- align:"center"
- },
- {
- label: "鏈�鏂伴壌瀹氭棩鏈�",
- prop: "mostDate",
- width: 130,
- align:"center"
- },
- {
- label: "褰曞叆浜�",
- prop: "userName",
- width: 130,
- align:"center"
- },
- {
- label: "褰曞叆鏃ユ湡",
- prop: "recordDate",
- align:"center",
- minWidth: 130
- },
- {
- label: "鏈夋晥鏃ユ湡",
- prop: "valid",
- width: 130,
- align:"center"
- },
- {
- label: "鐘舵��",
- prop: "status",
- width: 130,
- align: "center",
- formatData: (params) => {
- if (params === 1) {
- return "鏈夋晥";
- } else if (params === 2) {
- return "閫炬湡";
- } else {
- return null;
- }
- }
- },
- {
- dataType: "action",
- label: "鎿嶄綔",
- align: "center",
- width: '130',
- fixed: 'right',
- operation: [
- {
- name: "闄勪欢",
- type: "text",
- clickFun: (row) => {
- openFilesFormDia(row);
- },
+ const tableColumn = ref([
+ {
+ label: "鍑哄巶缂栧彿",
+ prop: "code",
+ minWidth: 150,
+ align: "center",
+ },
+ {
+ label: "璁¢噺鍣ㄥ叿鍚嶇О",
+ prop: "name",
+ width: "160px",
+ align: "center",
+ },
+ {
+ label: "妫�瀹氬崟浣�",
+ prop: "unit",
+ width: 200,
+ align: "center",
+ },
+ {
+ label: "璇佷功缂栧彿",
+ prop: "model",
+ width: 200,
+ align: "center",
+ },
+ {
+ label: "鏈�鏂伴壌瀹氭棩鏈�",
+ prop: "mostDate",
+ width: 130,
+ align: "center",
+ },
+ {
+ label: "褰曞叆浜�",
+ prop: "userName",
+ width: 130,
+ align: "center",
+ },
+ {
+ label: "褰曞叆鏃ユ湡",
+ prop: "recordDate",
+ align: "center",
+ minWidth: 130,
+ },
+ {
+ label: "鏈夋晥鏃ユ湡",
+ prop: "valid",
+ width: 130,
+ align: "center",
+ },
+ {
+ label: "鐘舵��",
+ prop: "status",
+ width: 130,
+ align: "center",
+ formatData: params => {
+ if (params === 1) {
+ return "鏈夋晥";
+ } else if (params === 2) {
+ return "閫炬湡";
+ } else {
+ return null;
+ }
},
- {
- name: "鏌ョ湅",
- type: "text",
- clickFun: (row) => {
- openCalibrationDia("verifying", row);
- },
- },
- ],
- },
-]);
-const tableData = ref([]);
-const tableLoading = ref(false);
-const rowClickData = ref([])
-const filesDia = ref()
-const page = reactive({
- current: 1,
- size: 100,
- total: 0,
-});
-const selectedRows = ref([]);
+ },
+ {
+ dataType: "action",
+ label: "鎿嶄綔",
+ align: "center",
+ width: "130",
+ fixed: "right",
+ operation: [
+ {
+ name: "闄勪欢",
+ type: "text",
+ clickFun: row => {
+ openFilesFormDia(row);
+ },
+ },
+ {
+ name: "缂栬緫",
+ type: "text",
+ clickFun: row => {
+ openCalibrationDia("verifying", row);
+ },
+ },
+ ],
+ },
+ ]);
+ const tableData = ref([]);
+ const tableLoading = ref(false);
+ const rowClickData = ref([]);
+ const filesDia = ref();
+ const page = reactive({
+ current: 1,
+ size: 100,
+ total: 0,
+ });
+ const selectedRows = ref([]);
-// 鎵撳紑闄勪欢寮规
-const openFilesFormDia = (row) => {
- filesDia.value?.openDialog(row,'measuring_instrument_ledger')
-};
+ // 鎵撳紑闄勪欢寮规
+ const openFilesFormDia = row => {
+ filesDia.value?.openDialog(row, "measuring_instrument_ledger");
+ };
-const dbRowClick = (row)=>{
- rowClickData.value?.openDialog(row)
-}
+ const dbRowClick = row => {
+ rowClickData.value?.openDialog(row);
+ };
-// 琛屾牱寮忥細蹇埌鏈燂紙7澶╁唴锛夋垨閫炬湡鏍囩孩
-const rowClassName = ({ row }) => {
- console.log('rowClassName called:', row);
- // valid 鏄湁鏁堝ぉ鏁帮紝mostDate 鏄渶鏂版瀹氭棩鏈�
- if (row.valid && row.mostDate) {
- const mostDate = new Date(row.mostDate);
- // 璁$畻鍒版湡鏃ユ湡 = 妫�瀹氭棩鏈� + 鏈夋晥澶╂暟
- const validDays = parseInt(row.valid) || 0;
- const expireDate = new Date(mostDate);
- expireDate.setDate(expireDate.getDate() + validDays);
-
- const now = new Date();
- const diffDays = Math.ceil((expireDate - now) / (1000 * 60 * 60 * 24));
- console.log('row:', row.code, 'validDays:', validDays, 'expireDate:', expireDate, 'diffDays:', diffDays);
- // 7澶╁唴鍒版湡鎴栧凡閫炬湡閮芥爣绾�
- if (diffDays <= 7) {
- console.log('return warning-row');
- return 'warning-row';
+ // 琛屾牱寮忥細蹇埌鏈燂紙7澶╁唴锛夋垨閫炬湡鏍囩孩
+ const rowClassName = ({ row }) => {
+ console.log("rowClassName called:", row);
+ // valid 鏄湁鏁堝ぉ鏁帮紝mostDate 鏄渶鏂版瀹氭棩鏈�
+ if (row.valid && row.mostDate) {
+ const mostDate = new Date(row.mostDate);
+ // 璁$畻鍒版湡鏃ユ湡 = 妫�瀹氭棩鏈� + 鏈夋晥澶╂暟
+ const validDays = parseInt(row.valid) || 0;
+ const expireDate = new Date(mostDate);
+ expireDate.setDate(expireDate.getDate() + validDays);
+
+ const now = new Date();
+ const diffDays = Math.ceil((expireDate - now) / (1000 * 60 * 60 * 24));
+ console.log(
+ "row:",
+ row.code,
+ "validDays:",
+ validDays,
+ "expireDate:",
+ expireDate,
+ "diffDays:",
+ diffDays
+ );
+ // 7澶╁唴鍒版湡鎴栧凡閫炬湡閮芥爣绾�
+ if (diffDays <= 7) {
+ console.log("return warning-row");
+ return "warning-row";
+ }
+ } else {
+ console.log("row missing valid or mostDate:", row.valid, row.mostDate);
}
- } else {
- console.log('row missing valid or mostDate:', row.valid, row.mostDate);
- }
- return '';
-}
+ return "";
+ };
-// 琛ㄦ牸閫夋嫨鏁版嵁
-const handleSelectionChange = (selection) => {
- selectedRows.value = selection;
-};
-const formDia = ref()
-const calibrationDia = ref()
+ // 琛ㄦ牸閫夋嫨鏁版嵁
+ const handleSelectionChange = selection => {
+ selectedRows.value = selection;
+ };
+ const formDia = ref();
+ const calibrationDia = ref();
-// 鏌ヨ鍒楄〃
-/** 鎼滅储鎸夐挳鎿嶄綔 */
-const handleQuery = () => {
- page.current = 1;
- getList();
-};
+ // 鏌ヨ鍒楄〃
+ /** 鎼滅储鎸夐挳鎿嶄綔 */
+ const handleQuery = () => {
+ page.current = 1;
+ getList();
+ };
-// 閲嶇疆鎼滅储鏉′欢
-const handleReset = () => {
- searchForm.value.recordDate = "";
- searchForm.value.code = "";
- searchForm.value.status = "";
- page.current = 1;
- getList();
-};
-const pagination = (obj) => {
- page.current = obj.page;
- page.size = obj.limit;
- getList();
-};
-const getList = () => {
- tableLoading.value = true;
- measuringInstrumentListPage({ ...searchForm.value, ...page }).then((res) => {
- tableLoading.value = false;
- tableData.value = res.data.records;
- page.total = res.data.total;
- }).catch((err) => {
- tableLoading.value = false;
- })
-};
+ // 閲嶇疆鎼滅储鏉′欢
+ const handleReset = () => {
+ searchForm.value.recordDate = "";
+ searchForm.value.code = "";
+ searchForm.value.status = "";
+ page.current = 1;
+ getList();
+ };
+ const pagination = obj => {
+ page.current = obj.page;
+ page.size = obj.limit;
+ getList();
+ };
+ const getList = () => {
+ tableLoading.value = true;
+ measuringInstrumentListPage({ ...searchForm.value, ...page })
+ .then(res => {
+ tableLoading.value = false;
+ tableData.value = res.data.records;
+ page.total = res.data.total;
+ })
+ .catch(err => {
+ tableLoading.value = false;
+ });
+ };
-// 鎵撳紑寮规
-const openForm = (type, row) => {
- nextTick(() => {
- formDia.value?.openDialog(type, row)
- })
-};
-// 鎵撳紑妫�瀹氭牎鍑嗗脊妗�
-const openCalibrationDia = (type, row) => {
- nextTick(() => {
- calibrationDia.value?.openDialog(type, row)
- })
-}
+ // 鎵撳紑寮规
+ const openForm = (type, row) => {
+ nextTick(() => {
+ formDia.value?.openDialog(type, row);
+ });
+ };
+ // 鎵撳紑妫�瀹氭牎鍑嗗脊妗�
+ const openCalibrationDia = (type, row) => {
+ nextTick(() => {
+ calibrationDia.value?.openDialog(type, row);
+ });
+ };
-const handleDelete = () => {
- let ids = [];
- if (selectedRows.value.length > 0) {
- ids = selectedRows.value.map((item) => item.id);
- } else {
- proxy.$modal.msgWarning("璇烽�夋嫨鏁版嵁");
- return;
- }
- ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚垹闄わ紝鏄惁纭鍒犻櫎锛�", "鍒犻櫎鎻愮ず", {
- confirmButtonText: "纭",
- cancelButtonText: "鍙栨秷",
- type: "warning",
- })
- .then(() => {
- tableLoading.value = true;
- measuringInstrumentDelete(ids)
- .then((res) => {
- proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
- getList();
- })
- .finally(() => {
- tableLoading.value = false;
- });
- })
- .catch(() => {
- proxy.$modal.msg("宸插彇娑�");
- });
-};
-// 瀵煎嚭
-const handleOut = () => {
- ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚鍑猴紝鏄惁纭瀵煎嚭锛�", "瀵煎嚭", {
- confirmButtonText: "纭",
- cancelButtonText: "鍙栨秷",
- type: "warning",
- })
- .then(() => {
- proxy.download("/measuringInstrumentLedger/export", {}, "璁¢噺鍣ㄥ叿鍙拌处.xlsx");
- })
- .catch(() => {
- proxy.$modal.msg("宸插彇娑�");
- });
-};
-onMounted(() => {
- getList();
-});
+ const handleDelete = () => {
+ let ids = [];
+ if (selectedRows.value.length > 0) {
+ ids = selectedRows.value.map(item => item.id);
+ } else {
+ proxy.$modal.msgWarning("璇烽�夋嫨鏁版嵁");
+ return;
+ }
+ ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚垹闄わ紝鏄惁纭鍒犻櫎锛�", "鍒犻櫎鎻愮ず", {
+ confirmButtonText: "纭",
+ cancelButtonText: "鍙栨秷",
+ type: "warning",
+ })
+ .then(() => {
+ tableLoading.value = true;
+ measuringInstrumentDelete(ids)
+ .then(res => {
+ proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+ getList();
+ })
+ .finally(() => {
+ tableLoading.value = false;
+ });
+ })
+ .catch(() => {
+ proxy.$modal.msg("宸插彇娑�");
+ });
+ };
+ // 瀵煎嚭
+ const handleOut = () => {
+ ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚鍑猴紝鏄惁纭瀵煎嚭锛�", "瀵煎嚭", {
+ confirmButtonText: "纭",
+ cancelButtonText: "鍙栨秷",
+ type: "warning",
+ })
+ .then(() => {
+ proxy.download(
+ "/measuringInstrumentLedger/export",
+ {},
+ "璁¢噺鍣ㄥ叿鍙拌处.xlsx"
+ );
+ })
+ .catch(() => {
+ proxy.$modal.msg("宸插彇娑�");
+ });
+ };
+ onMounted(() => {
+ getList();
+ });
</script>
<style scoped>
-:deep(.el-table .warning-row) {
- background-color: #fef0f0 !important;
-}
-:deep(.el-table .warning-row:hover > td) {
- background-color: #f9d5d5 !important;
-}
-:deep(.el-table .el-table__body tr.warning-row td) {
- background-color: #fef0f0 !important;
-}
+ :deep(.el-table .warning-row) {
+ background-color: #fef0f0 !important;
+ }
+ :deep(.el-table .warning-row:hover > td) {
+ background-color: #f9d5d5 !important;
+ }
+ :deep(.el-table .el-table__body tr.warning-row td) {
+ background-color: #fef0f0 !important;
+ }
</style>
\ No newline at end of file
diff --git a/src/views/equipmentManagement/repair/Modal/RepairModal.vue b/src/views/equipmentManagement/repair/Modal/RepairModal.vue
index 4e73833..4a10071 100644
--- a/src/views/equipmentManagement/repair/Modal/RepairModal.vue
+++ b/src/views/equipmentManagement/repair/Modal/RepairModal.vue
@@ -1,111 +1,126 @@
<template>
- <FormDialog
- v-model="visible"
- :title="id ? '缂栬緫璁惧鎶ヤ慨' : '鏂板璁惧鎶ヤ慨'"
- width="800px"
- @confirm="sendForm"
- @cancel="handleCancel"
- @close="handleClose"
- >
- <el-form :model="form" label-width="100px">
+ <FormDialog v-model="visible"
+ :title="computedTitle"
+ :operation-type="operationType"
+ width="800px"
+ @confirm="sendForm"
+ @cancel="handleCancel"
+ @close="handleClose">
+ <el-form :model="form"
+ label-width="100px">
<el-row>
<el-col :span="12">
<el-form-item label="璁惧鍚嶇О">
- <el-select v-model="form.deviceLedgerId" @change="setDeviceModel" filterable>
- <el-option
- v-for="(item, index) in deviceOptions"
- :key="index"
- :label="item.deviceName"
- :value="item.id"
- ></el-option>
+ <el-select v-model="form.deviceLedgerId"
+ @change="setDeviceModel"
+ filterable
+ :disabled="operationType === 'view'">
+ <el-option v-for="(item, index) in deviceOptions"
+ :key="index"
+ :label="item.deviceName"
+ :value="item.id"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="瑙勬牸鍨嬪彿">
- <el-input
- v-model="form.deviceModel"
- placeholder="璇疯緭鍏ヨ鏍煎瀷鍙�"
- disabled
- />
+ <el-input v-model="form.deviceModel"
+ placeholder="璇疯緭鍏ヨ鏍煎瀷鍙�"
+ disabled />
</el-form-item>
</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="璇疯緭鍏ユ姤淇姤淇」鐩�" />
+ <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="璇疯緭鍏ョ淮淇汉濮撳悕" />
+ <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" disabled>
- <el-option label="寰呯淮淇�" :value="0"></el-option>
- <el-option label="宸查獙鏀�" :value="1"></el-option>
- <el-option label="澶辫触" :value="2"></el-option>
+ <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">
+ <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-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-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-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 :gutter="30">
+ <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" />
+ <el-form-item label="闄勪欢"
+ prop="attachmentIds">
+ <FileUpload v-model:file-list="form.storageBlobDTOs"
+ :disabled="operationType === 'view'" />
</el-form-item>
</el-col>
</el-row>
@@ -114,119 +129,140 @@
</template>
<script setup>
-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";
+ 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: "璁惧鎶ヤ慨寮圭獥",
-});
+ defineOptions({
+ name: "璁惧鎶ヤ慨寮圭獥",
+ });
-const emits = defineEmits(["ok"]);
+ const emits = defineEmits(["ok"]);
-const id = ref();
-const visible = ref(false);
-const loading = ref(false);
+ const id = ref();
+ const visible = ref(false);
+ const loading = ref(false);
+ const operationType = ref(""); // add, edit, view
-const userStore = useUserStore();
-const deviceOptions = ref([]);
-const fileList = ref([]);
+ const computedTitle = computed(() => {
+ if (operationType.value === "add") return "鏂板璁惧鎶ヤ慨";
+ if (operationType.value === "edit") return "缂栬緫璁惧鎶ヤ慨";
+ if (operationType.value === "view") return "璁惧鎶ヤ慨璇︽儏";
+ return "";
+ });
-const loadDeviceName = async () => {
- const { data } = await getDeviceLedger();
- deviceOptions.value = data;
-};
+ const userStore = useUserStore();
+ const deviceOptions = ref([]);
+ const fileList = ref([]);
-const { form, resetForm } = useFormData({
- deviceLedgerId: undefined, // 璁惧Id
- deviceName: undefined, // 璁惧鍚嶇О
- deviceModel: undefined, // 瑙勬牸鍨嬪彿
- repairTime: dayjs().format("YYYY-MM-DD"), // 鎶ヤ慨鏃ユ湡锛岄粯璁ゅ綋澶�
- repairName: userStore.nickName, // 鎶ヤ慨浜�
- remark: undefined, // 鏁呴殰鐜拌薄
- status: 0, // 鎶ヤ慨鐘舵��
- machineryCategory: undefined,
- storageBlobDTOs: [],
- maintenanceName: undefined, // 缁翠慨浜�
-});
+ const loadDeviceName = async () => {
+ const { data } = await getDeviceLedger();
+ deviceOptions.value = data;
+ };
-const setDeviceModel = (deviceId) => {
- const option = deviceOptions.value.find((item) => item.id === deviceId);
- form.deviceModel = option.deviceModel;
-};
+ const { form, resetForm } = useFormData({
+ deviceLedgerId: undefined, // 璁惧Id
+ deviceName: undefined, // 璁惧鍚嶇О
+ deviceModel: undefined, // 瑙勬牸鍨嬪彿
+ repairTime: dayjs().format("YYYY-MM-DD"), // 鎶ヤ慨鏃ユ湡锛岄粯璁ゅ綋澶�
+ repairName: userStore.nickName, // 鎶ヤ慨浜�
+ remark: undefined, // 鏁呴殰鐜拌薄
+ status: 0, // 鎶ヤ慨鐘舵��
+ machineryCategory: undefined,
+ storageBlobDTOs: [],
+ maintenanceName: undefined, // 缁翠慨浜�
+ });
-const setForm = (data) => {
- form.deviceLedgerId = data.deviceLedgerId;
- form.deviceName = data.deviceName;
- form.deviceModel = data.deviceModel;
- form.repairTime = data.repairTime;
- form.repairName = data.repairName;
- form.remark = data.remark;
- form.status = data.status;
- form.machineryCategory = data.machineryCategory;
- form.storageBlobDTOs = data.storageBlobVOs || [];
- form.maintenanceName = data.maintenanceName;
- form.acceptanceName = data.acceptanceName;
- form.acceptanceTime = data.acceptanceTime;
- form.acceptanceRemark = data.acceptanceRemark;
-};
+ const setDeviceModel = deviceId => {
+ const option = deviceOptions.value.find(item => item.id === deviceId);
+ form.deviceModel = option.deviceModel;
+ };
-const sendForm = async () => {
- loading.value = true;
- try {
- const { code } = id.value
- ? await editRepair({ id: unref(id), ...form })
- : await addRepair(form);
- if (code == 200) {
- ElMessage.success(`${id.value ? "缂栬緫" : "鏂板"}鎶ヤ慨鎴愬姛`);
- visible.value = false;
- emits("ok");
+ const setForm = data => {
+ form.deviceLedgerId = data.deviceLedgerId;
+ form.deviceName = data.deviceName;
+ form.deviceModel = data.deviceModel;
+ form.repairTime = data.repairTime;
+ form.repairName = data.repairName;
+ form.remark = data.remark;
+ form.status = data.status;
+ form.machineryCategory = data.machineryCategory;
+ form.storageBlobDTOs = data.storageBlobVOs || [];
+ form.maintenanceName = data.maintenanceName;
+ form.acceptanceName = data.acceptanceName;
+ form.acceptanceTime = data.acceptanceTime;
+ form.acceptanceRemark = data.acceptanceRemark;
+ };
+
+ const sendForm = async () => {
+ loading.value = true;
+ try {
+ const { code } = id.value
+ ? await editRepair({ id: unref(id), ...form })
+ : await addRepair(form);
+ if (code == 200) {
+ ElMessage.success(`${id.value ? "缂栬緫" : "鏂板"}鎶ヤ慨鎴愬姛`);
+ visible.value = false;
+ emits("ok");
+ }
+ } finally {
+ loading.value = false;
}
- } finally {
- loading.value = false;
- }
-};
+ };
-const handleCancel = () => {
- resetForm();
- visible.value = false;
-};
+ const handleCancel = () => {
+ resetForm();
+ visible.value = false;
+ };
-const handleClose = () => {
- resetForm();
- visible.value = false;
-};
+ const handleClose = () => {
+ resetForm();
+ visible.value = false;
+ };
-const openAdd = async () => {
- id.value = undefined;
- visible.value = true;
- fileList.value = [];
- await nextTick();
- await loadDeviceName();
-};
+ 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 loadDeviceName();
- setForm(data);
-};
+ 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 2835356..f1573cb 100644
--- a/src/views/equipmentManagement/repair/index.vue
+++ b/src/views/equipmentManagement/repair/index.vue
@@ -1,193 +1,195 @@
<template>
<div class="app-container">
- <el-form :model="filters" :inline="true">
+ <el-form :model="filters"
+ :inline="true">
<el-form-item label="璁惧鍚嶇О">
- <el-input
- v-model="filters.deviceName"
- style="width: 240px"
- placeholder="璇疯緭鍏ヨ澶囧悕绉�"
- clearable
- :prefix-icon="Search"
- @change="getTableData"
- />
+ <el-input v-model="filters.deviceName"
+ style="width: 240px"
+ placeholder="璇疯緭鍏ヨ澶囧悕绉�"
+ clearable
+ :prefix-icon="Search"
+ @change="getTableData" />
</el-form-item>
<el-form-item label="瑙勬牸鍨嬪彿">
- <el-input
- v-model="filters.deviceModel"
- style="width: 240px"
- placeholder="璇烽�夋嫨瑙勬牸鍨嬪彿"
- clearable
- :prefix-icon="Search"
- @change="getTableData"
- />
+ <el-input v-model="filters.deviceModel"
+ style="width: 240px"
+ placeholder="璇烽�夋嫨瑙勬牸鍨嬪彿"
+ clearable
+ :prefix-icon="Search"
+ @change="getTableData" />
</el-form-item>
<el-form-item label="鏁呴殰鐜拌薄">
- <el-input
- v-model="filters.remark"
- style="width: 240px"
- placeholder="璇疯緭鍏ユ晠闅滅幇璞�"
- clearable
- :prefix-icon="Search"
- @change="getTableData"
- />
+ <el-input v-model="filters.remark"
+ style="width: 240px"
+ placeholder="璇疯緭鍏ユ晠闅滅幇璞�"
+ clearable
+ :prefix-icon="Search"
+ @change="getTableData" />
</el-form-item>
<el-form-item label="缁翠慨浜�">
- <el-input
- v-model="filters.maintenanceName"
- style="width: 240px"
- placeholder="璇疯緭鍏ョ淮淇汉"
- clearable
- :prefix-icon="Search"
- @change="getTableData"
- />
+ <el-input v-model="filters.maintenanceName"
+ style="width: 240px"
+ placeholder="璇疯緭鍏ョ淮淇汉"
+ clearable
+ :prefix-icon="Search"
+ @change="getTableData" />
</el-form-item>
<el-form-item label="鎶ヤ慨鏃ユ湡">
- <el-date-picker
- v-model="filters.repairTimeStr"
- type="date"
- placeholder="璇烽�夋嫨鎶ヤ慨鏃ユ湡"
- size="default"
- @change="(date) => handleDateChange(date,2)"
- />
+ <el-date-picker v-model="filters.repairTimeStr"
+ type="date"
+ placeholder="璇烽�夋嫨鎶ヤ慨鏃ユ湡"
+ size="default"
+ @change="(date) => handleDateChange(date,2)" />
</el-form-item>
<el-form-item label="缁翠慨鏃ユ湡">
- <el-date-picker
- v-model="filters.maintenanceTimeStr"
- type="date"
- placeholder="璇烽�夋嫨缁翠慨鏃ユ湡"
- size="default"
- @change="(date) => handleDateChange(date,1)"
- />
+ <el-date-picker v-model="filters.maintenanceTimeStr"
+ type="date"
+ placeholder="璇烽�夋嫨缁翠慨鏃ユ湡"
+ size="default"
+ @change="(date) => handleDateChange(date,1)" />
</el-form-item>
<el-form-item>
- <el-button type="primary" @click="getTableData">鎼滅储</el-button>
+ <el-button type="primary"
+ @click="getTableData">鎼滅储</el-button>
<el-button @click="resetFilters">閲嶇疆</el-button>
</el-form-item>
</el-form>
<div class="table_list">
<div class="actions">
- <el-text class="mx-1" size="large">璁惧鎶ヤ慨</el-text>
+ <el-text class="mx-1"
+ size="large">璁惧鎶ヤ慨</el-text>
<div>
- <el-button type="success" icon="Van" @click="addRepair">
+ <el-button type="success"
+ icon="Van"
+ @click="addRepair">
鏂板鎶ヤ慨
</el-button>
<el-button @click="handleOut">
瀵煎嚭
</el-button>
- <el-button
- type="danger"
- icon="Delete"
- :disabled="multipleList.length <= 0 || hasFinishedStatus"
- @click="delRepairByIds(multipleList.map((item) => item.id))"
- >
+ <el-button type="danger"
+ icon="Delete"
+ :disabled="multipleList.length <= 0 || hasFinishedStatus"
+ @click="delRepairByIds(multipleList.map((item) => item.id))">
鎵归噺鍒犻櫎
</el-button>
</div>
</div>
- <PIMTable
- rowKey="id"
- isSelection
- :column="columns"
- :tableData="dataList"
- :page="{
+ <PIMTable rowKey="id"
+ isSelection
+ :column="columns"
+ :tableData="dataList"
+ :page="{
current: pagination.currentPage,
size: pagination.pageSize,
total: pagination.total,
}"
- @selection-change="handleSelectionChange"
- @pagination="changePage"
- >
+ @selection-change="handleSelectionChange"
+ @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 === 3" type="info">寰呴獙鏀�</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 || row.status === 3"
- @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 !== 0"
- @click="addMaintain(row)"
- >
+ <el-button type="success"
+ link
+ :disabled="row.status !== 0"
+ @click="addMaintain(row)">
缁翠慨
</el-button>
- <el-button
- type="warning"
- link
- :disabled="row.status !== 3"
- @click="openAcceptance(row)"
- >
+ <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 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 type="primary"
+ link
+ @click="openFileDialog(row)">
闄勪欢
</el-button>
</template>
</PIMTable>
</div>
- <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" />
+ <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, 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"));
+ 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: "璁惧鎶ヤ慨",
-});
+ defineOptions({
+ name: "璁惧鎶ヤ慨",
+ });
-const {proxy} = getCurrentInstance();
+ const { proxy } = getCurrentInstance();
-// 妯℃�佹瀹炰緥
-const repairModalRef = ref();
-const maintainModalRef = ref();
-const acceptanceModalRef = ref();
+ // 妯℃�佹瀹炰緥
+ const repairModalRef = ref();
+ const maintainModalRef = ref();
+ const acceptanceModalRef = ref();
-// 琛ㄦ牸澶氶�夋閫変腑椤�
-const multipleList = ref([]);
+ // 琛ㄦ牸澶氶�夋閫変腑椤�
+ const multipleList = ref([]);
-// 琛ㄦ牸閽╁瓙
-const {
- filters,
- columns,
- dataList,
- pagination,
- getTableData,
- resetFilters,
- onCurrentChange,
-} = usePaginationApi(
+ // 琛ㄦ牸閽╁瓙
+ const {
+ filters,
+ columns,
+ dataList,
+ pagination,
+ getTableData,
+ resetFilters,
+ onCurrentChange,
+ } = usePaginationApi(
getRepairPage,
{
deviceName: undefined,
@@ -209,52 +211,15 @@
prop: "deviceModel",
},
{
- label: "鎶ヤ慨椤圭洰",
- align: "center",
- prop: "machineryCategory",
- },
- {
label: "鎶ヤ慨鏃ユ湡",
align: "center",
prop: "repairTime",
- formatData: (cell) => dayjs(cell).format("YYYY-MM-DD"),
+ formatData: cell => dayjs(cell).format("YYYY-MM-DD"),
},
{
label: "鎶ヤ慨浜�",
align: "center",
prop: "repairName",
- },
- {
- label: "鏁呴殰鐜拌薄",
- align: "center",
- prop: "remark",
- },
- {
- label: "缁翠慨浜�",
- align: "center",
- prop: "maintenanceName",
- },
- {
- label: "缁翠慨缁撴灉",
- align: "center",
- prop: "maintenanceResult",
- },
- {
- label: "缁翠慨鏃ユ湡",
- align: "center",
- prop: "maintenanceTime",
- formatData: (cell) => (cell ? dayjs(cell).format("YYYY-MM-DD") : ""),
- },
- {
- label: "楠屾敹浜�",
- align: "center",
- prop: "acceptanceName",
- },
- {
- label: "楠屾敹鏃堕棿",
- align: "center",
- prop: "acceptanceTime",
- formatData: (cell) => (cell ? dayjs(cell).format("YYYY-MM-DD HH:mm:ss") : ""),
},
{
label: "鐘舵��",
@@ -269,127 +234,132 @@
dataType: "slot",
slot: "operation",
align: "center",
- width: "300px",
+ width: "320px",
},
]
-);
+ );
-// type === 1 缁翠慨 2鎶ヤ慨闂�
-const handleDateChange = (value, type) => {
- filters.maintenanceTimeStr = null
- filters.c = null
- if (type === 1) {
- if (value) {
- filters.maintenanceTimeStr = dayjs(value).format("YYYY-MM-DD");
+ // type === 1 缁翠慨 2鎶ヤ慨闂�
+ const handleDateChange = (value, type) => {
+ filters.maintenanceTimeStr = null;
+ filters.c = null;
+ if (type === 1) {
+ if (value) {
+ filters.maintenanceTimeStr = dayjs(value).format("YYYY-MM-DD");
+ }
+ } else {
+ if (value) {
+ filters.repairTimeStr = dayjs(value).format("YYYY-MM-DD");
+ }
}
- } else {
- if (value) {
- filters.repairTimeStr = dayjs(value).format("YYYY-MM-DD");
- }
- }
- getTableData();
-};
+ getTableData();
+ };
-// 鎵撳紑闄勪欢寮圭獥
-const recordId =ref(0)
-const fileDialogVisible = ref(false)
+ // 鎵撳紑闄勪欢寮圭獥
+ const recordId = ref(0);
+ const fileDialogVisible = ref(false);
-const openFileDialog = async (row) => {
- recordId.value = row.id
- fileDialogVisible.value = true
-}
+ const openFileDialog = async row => {
+ recordId.value = row.id;
+ fileDialogVisible.value = true;
+ };
-// 澶氶�夊悗鍋氫粈涔�
-const handleSelectionChange = (selectionList) => {
- multipleList.value = selectionList;
-};
+ // 澶氶�夊悗鍋氫粈涔�
+ const handleSelectionChange = selectionList => {
+ multipleList.value = selectionList;
+ };
-// 妫�鏌ラ�変腑鐨勮褰曚腑鏄惁鏈夊畬缁撶姸鎬佺殑
-const hasFinishedStatus = computed(() => {
- return multipleList.value.some(item => item.status === 1)
-})
-
-// 鏂板鎶ヤ慨
-const addRepair = () => {
- repairModalRef.value.openAdd();
-};
-
-// 缂栬緫鎶ヤ慨
-const editRepair = (id) => {
- repairModalRef.value.openEdit(id);
-};
-
-// 鏂板缁翠慨
-const addMaintain = (row) => {
- maintainModalRef.value.open(row.id, row);
-};
-
-// 鎵撳紑楠屾敹寮圭獥
-const openAcceptance = (row) => {
- acceptanceModalRef.value.open(row);
-};
-
-const changePage = ({page, limit}) => {
- pagination.currentPage = page;
- pagination.pageSize = limit;
- onCurrentChange(page);
-};
-
-// 鍗曡鍒犻櫎
-const delRepairByIds = async (ids) => {
- // 妫�鏌ユ槸鍚︽湁瀹岀粨鐘舵�佺殑璁板綍
- const idsArray = Array.isArray(ids) ? ids : [ids];
- const hasFinished = idsArray.some(id => {
- const record = dataList.value.find(item => item.id === id);
- return record && record.status === 1;
+ // 妫�鏌ラ�変腑鐨勮褰曚腑鏄惁鏈夊畬缁撶姸鎬佺殑
+ const hasFinishedStatus = computed(() => {
+ return multipleList.value.some(item => item.status === 1);
});
- if (hasFinished) {
- ElMessage.warning('涓嶈兘鍒犻櫎鐘舵�佷负瀹岀粨鐨勮褰�');
- return;
- }
+ // 鏂板鎶ヤ慨
+ const addRepair = () => {
+ repairModalRef.value.openAdd();
+ };
- ElMessageBox.confirm("纭鍒犻櫎鎶ヤ慨鏁版嵁, 姝ゆ搷浣滀笉鍙��?", "璀﹀憡", {
- confirmButtonText: "纭畾",
- cancelButtonText: "鍙栨秷",
- type: "warning",
- }).then(async () => {
- const {code} = await delRepair(ids);
- if (code === 200) {
- ElMessage.success("鍒犻櫎鎴愬姛");
- getTableData();
+ // 璇︽儏鏌ョ湅
+ const viewRepair = id => {
+ repairModalRef.value.openView(id);
+ };
+
+ // 缂栬緫鎶ヤ慨
+ const editRepair = id => {
+ repairModalRef.value.openEdit(id);
+ };
+
+ // 鏂板缁翠慨
+ const addMaintain = row => {
+ maintainModalRef.value.open(row.id, row);
+ };
+
+ // 鎵撳紑楠屾敹寮圭獥
+ const openAcceptance = row => {
+ acceptanceModalRef.value.open(row);
+ };
+
+ const changePage = ({ page, limit }) => {
+ pagination.currentPage = page;
+ pagination.pageSize = limit;
+ onCurrentChange(page);
+ };
+
+ // 鍗曡鍒犻櫎
+ const delRepairByIds = async ids => {
+ // 妫�鏌ユ槸鍚︽湁瀹岀粨鐘舵�佺殑璁板綍
+ const idsArray = Array.isArray(ids) ? ids : [ids];
+ const hasFinished = idsArray.some(id => {
+ const record = dataList.value.find(item => item.id === id);
+ return record && record.status === 1;
+ });
+
+ if (hasFinished) {
+ ElMessage.warning("涓嶈兘鍒犻櫎鐘舵�佷负瀹岀粨鐨勮褰�");
+ return;
}
- });
-};
-// 瀵煎嚭
-const handleOut = () => {
- ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚鍑猴紝鏄惁纭瀵煎嚭锛�", "瀵煎嚭", {
- confirmButtonText: "纭",
- cancelButtonText: "鍙栨秷",
- type: "warning",
- })
+ ElMessageBox.confirm("纭鍒犻櫎鎶ヤ慨鏁版嵁, 姝ゆ搷浣滀笉鍙��?", "璀﹀憡", {
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ type: "warning",
+ }).then(async () => {
+ const { code } = await delRepair(ids);
+ if (code === 200) {
+ ElMessage.success("鍒犻櫎鎴愬姛");
+ getTableData();
+ }
+ });
+ };
+
+ // 瀵煎嚭
+ const handleOut = () => {
+ ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚鍑猴紝鏄惁纭瀵煎嚭锛�", "瀵煎嚭", {
+ confirmButtonText: "纭",
+ cancelButtonText: "鍙栨秷",
+ type: "warning",
+ })
.then(() => {
proxy.download("/device/repair/export", {}, "璁惧鎶ヤ慨.xlsx");
})
.catch(() => {
ElMessage.info("宸插彇娑�");
});
-};
+ };
-onMounted(() => {
- getTableData();
-});
+ onMounted(() => {
+ getTableData();
+ });
</script>
<style lang="scss" scoped>
-.table_list {
- margin-top: unset;
-}
+ .table_list {
+ margin-top: unset;
+ }
-.actions {
- display: flex;
- justify-content: space-between;
- margin-bottom: 10px;
-}
+ .actions {
+ display: flex;
+ justify-content: space-between;
+ margin-bottom: 10px;
+ }
</style>
diff --git a/src/views/productionPlan/productionPlan/index.vue b/src/views/productionPlan/productionPlan/index.vue
index 01a513b..4251daa 100644
--- a/src/views/productionPlan/productionPlan/index.vue
+++ b/src/views/productionPlan/productionPlan/index.vue
@@ -303,6 +303,13 @@
return params == "閿�鍞�" ? "閿�鍞�" : "鍐呴儴";
},
},
+ {
+ label: "閿�鍞悎鍚屽彿",
+ prop: "salesContractNo",
+ width: "200px",
+ dataType: "slot",
+ slot: "salesContractNo",
+ },
{
label: "浜у搧鍚嶇О",
@@ -328,7 +335,6 @@
label: "鎵�闇�鏁伴噺",
prop: "qtyRequired",
width: "150px",
- align: "right",
dataType: "slot",
slot: "qtyRequired",
className: "volume-cell",
@@ -377,13 +383,7 @@
className: "date-cell",
formatData: cell => (cell ? dayjs(cell).format("YYYY-MM-DD") : ""),
},
- {
- label: "閿�鍞悎鍚屽彿",
- prop: "salesContractNo",
- width: "200px",
- dataType: "slot",
- slot: "salesContractNo",
- },
+
{
label: "瀹㈡埛鍚嶇О",
prop: "customerName",
diff --git a/src/views/salesManagement/receiptPaymentLedger/index.vue b/src/views/salesManagement/receiptPaymentLedger/index.vue
index d92843d..f5a9d8f 100644
--- a/src/views/salesManagement/receiptPaymentLedger/index.vue
+++ b/src/views/salesManagement/receiptPaymentLedger/index.vue
@@ -37,7 +37,7 @@
show-overflow-tooltip
width="200" />
<el-table-column label="鍚堝悓閲戦(鍏�)"
- prop="invoiceTotal"
+ prop="contractAmounts"
show-overflow-tooltip
:formatter="formattedNumber"
width="200" />
@@ -47,12 +47,12 @@
:formatter="formattedNumber"
width="200" />
<el-table-column label="搴旀敹閲戦(鍏�)"
- prop="unReceiptPaymentAmount"
+ prop="receiptableAmount"
show-overflow-tooltip
width="200">
<template #default="{ row, column }">
<el-text type="danger">
- {{ formattedNumber(row, column, row.unReceiptPaymentAmount) }}
+ {{ formattedNumber(row, column, row.receiptableAmount) }}
</el-text>
</template>
</el-table-column>
diff --git a/src/views/salesManagement/salesLedger/index.vue b/src/views/salesManagement/salesLedger/index.vue
index a757edc..2e58391 100644
--- a/src/views/salesManagement/salesLedger/index.vue
+++ b/src/views/salesManagement/salesLedger/index.vue
@@ -234,9 +234,13 @@
show-overflow-tooltip />
<el-table-column fixed="right"
label="鎿嶄綔"
- width="130"
+ width="220"
align="center">
<template #default="scope">
+ <el-button link
+ type="primary"
+ @click="openForm('view', scope.row)">璇︽儏
+ </el-button>
<el-button link
type="primary"
@click="openForm('edit', scope.row)"
@@ -257,7 +261,7 @@
@pagination="paginationChange" />
</div>
<FormDialog v-model="dialogFormVisible"
- :title="operationType === 'add' ? '鏂板閿�鍞彴璐﹂〉闈�' : '缂栬緫閿�鍞彴璐﹂〉闈�'"
+ :title="operationType === 'add' ? '鏂板閿�鍞彴璐﹂〉闈�' : (operationType === 'edit' ? '缂栬緫閿�鍞彴璐﹂〉闈�' : '閿�鍞彴璐﹁鎯�')"
:width="'70%'"
:operation-type="operationType"
@close="closeDia"
@@ -291,7 +295,7 @@
<el-input v-model="form.salesContractNo"
:placeholder="form.autoGenerateContractNo ? '鑷姩鐢熸垚' : '璇疯緭鍏�'"
clearable
- :disabled="form.autoGenerateContractNo" />
+ :disabled="form.autoGenerateContractNo || operationType === 'view'" />
</div>
</el-form-item>
</el-col>
@@ -374,6 +378,7 @@
:reserve-keyword="false"
placeholder="璇烽�夋嫨"
clearable
+ :disabled="operationType === 'view'"
@change="changs">
<el-option v-for="item in userList"
:key="item.userId"
@@ -391,7 +396,8 @@
format="YYYY-MM-DD"
type="date"
placeholder="璇烽�夋嫨"
- clearable />
+ clearable
+ :disabled="operationType === 'view'" />
</el-form-item>
</el-col>
</el-row>
@@ -405,7 +411,8 @@
format="YYYY-MM-DD"
type="date"
placeholder="璇烽�夋嫨"
- clearable />
+ clearable
+ :disabled="operationType === 'view'" />
</el-form-item>
</el-col>
</el-row>
@@ -493,11 +500,13 @@
</el-form-item>
</el-col>
</el-row>
- <el-row :gutter="30">
+ <el-row v-if="operationType !== 'view'"
+ :gutter="30">
<el-col :span="24">
<el-form-item label="闄勪欢鏉愭枡锛�"
prop="salesLedgerFiles">
- <FileUpload v-model:file-list="fileList" />
+ <FileUpload v-model:file-list="fileList"
+ :disabled="operationType === 'view'" />
</el-form-item>
</el-col>
</el-row>
@@ -2071,286 +2080,286 @@
// 鏋勫缓鎵撳嵃鍐呭
let printContent = `
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="UTF-8">
- <title>鎵撳嵃棰勮</title>
- <style>
- body {
- margin: 0;
- padding: 0;
- font-family: "SimSun", serif;
- background: white;
- }
- .print-page {
- width: 200mm;
- height: 75mm;
- padding: 10mm;
- padding-left: 20mm;
- background: white;
- box-sizing: border-box;
- page-break-after: always;
- page-break-inside: avoid;
- }
- .print-page:last-child {
- page-break-after: avoid;
- }
- .delivery-note {
- width: 100%;
- height: 100%;
- font-size: 12px;
- line-height: 1.2;
- display: flex;
- flex-direction: column;
- color: #000;
- }
- .header {
- text-align: center;
- margin-bottom: 8px;
- }
- .company-name {
- font-size: 18px;
- font-weight: bold;
- margin-bottom: 4px;
- }
- .document-title {
- font-size: 16px;
- font-weight: bold;
- }
- .info-section {
- margin-bottom: 8px;
- display: flex;
- justify-content: space-between;
- align-items: center;
- }
- .info-row {
- line-height: 20px;
- }
- .label {
- font-weight: bold;
- width: 60px;
- font-size: 12px;
- }
- .value {
- margin-right: 20px;
- min-width: 80px;
- font-size: 12px;
- }
- .table-section {
- margin-bottom: 40px;
- // flex: 0.6;
- }
- .product-table {
- width: 100%;
- border-collapse: collapse;
- border: 1px solid #000;
- }
- .product-table th, .product-table td {
- border: 1px solid #000;
- padding: 6px;
- text-align: center;
- font-size: 12px;
- line-height: 1.4;
- }
- .product-table th {
- font-weight: bold;
- }
- .total-value {
- font-weight: bold;
- }
- .footer-section {
- margin-top: auto;
- }
- .footer-row {
- display: flex;
- margin-bottom: 3px;
- line-height: 22px;
- justify-content: space-between;
- }
- .footer-item {
- display: flex;
- margin-right: 20px;
- }
- .footer-item .label {
- font-weight: bold;
- width: 80px;
- font-size: 12px;
- }
- .footer-item .value {
- min-width: 80px;
- font-size: 12px;
- }
- .address-item .address-value {
- min-width: 200px;
- }
- @media print {
- body {
- margin: 0;
- padding: 0;
- }
- .print-page {
- margin: 0;
- padding: 10mm;
- /* padding-left: 20mm; */
- page-break-inside: avoid;
- page-break-after: always;
- }
- .print-page:last-child {
- page-break-after: avoid;
- }
- }
- </style>
- </head>
- <body>
- `;
+ <!DOCTYPE html>
+ <html>
+ <head>
+ <meta charset="UTF-8">
+ <title>鎵撳嵃棰勮</title>
+ <style>
+ body {
+ margin: 0;
+ padding: 0;
+ font-family: "SimSun", serif;
+ background: white;
+ }
+ .print-page {
+ width: 200mm;
+ height: 75mm;
+ padding: 10mm;
+ padding-left: 20mm;
+ background: white;
+ box-sizing: border-box;
+ page-break-after: always;
+ page-break-inside: avoid;
+ }
+ .print-page:last-child {
+ page-break-after: avoid;
+ }
+ .delivery-note {
+ width: 100%;
+ height: 100%;
+ font-size: 12px;
+ line-height: 1.2;
+ display: flex;
+ flex-direction: column;
+ color: #000;
+ }
+ .header {
+ text-align: center;
+ margin-bottom: 8px;
+ }
+ .company-name {
+ font-size: 18px;
+ font-weight: bold;
+ margin-bottom: 4px;
+ }
+ .document-title {
+ font-size: 16px;
+ font-weight: bold;
+ }
+ .info-section {
+ margin-bottom: 8px;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ }
+ .info-row {
+ line-height: 20px;
+ }
+ .label {
+ font-weight: bold;
+ width: 60px;
+ font-size: 12px;
+ }
+ .value {
+ margin-right: 20px;
+ min-width: 80px;
+ font-size: 12px;
+ }
+ .table-section {
+ margin-bottom: 40px;
+ // flex: 0.6;
+ }
+ .product-table {
+ width: 100%;
+ border-collapse: collapse;
+ border: 1px solid #000;
+ }
+ .product-table th, .product-table td {
+ border: 1px solid #000;
+ padding: 6px;
+ text-align: center;
+ font-size: 12px;
+ line-height: 1.4;
+ }
+ .product-table th {
+ font-weight: bold;
+ }
+ .total-value {
+ font-weight: bold;
+ }
+ .footer-section {
+ margin-top: auto;
+ }
+ .footer-row {
+ display: flex;
+ margin-bottom: 3px;
+ line-height: 22px;
+ justify-content: space-between;
+ }
+ .footer-item {
+ display: flex;
+ margin-right: 20px;
+ }
+ .footer-item .label {
+ font-weight: bold;
+ width: 80px;
+ font-size: 12px;
+ }
+ .footer-item .value {
+ min-width: 80px;
+ font-size: 12px;
+ }
+ .address-item .address-value {
+ min-width: 200px;
+ }
+ @media print {
+ body {
+ margin: 0;
+ padding: 0;
+ }
+ .print-page {
+ margin: 0;
+ padding: 10mm;
+ /* padding-left: 20mm; */
+ page-break-inside: avoid;
+ page-break-after: always;
+ }
+ .print-page:last-child {
+ page-break-after: avoid;
+ }
+ }
+ </style>
+ </head>
+ <body>
+ `;
// 涓烘瘡鏉℃暟鎹敓鎴愭墦鍗伴〉闈�
printData.value.forEach((item, index) => {
printContent += `
- <div class="print-page">
- <div class="delivery-note">
- <div class="header">
- <div class="document-title">闆跺敭鍙戣揣鍗�</div>
- </div>
-
- <div class="info-section">
- <div class="info-row">
- <div>
- <span class="label">鍙戣揣鏃ユ湡锛�</span>
- <span class="value">${formatDate(
- item.createTime
- )}</span>
- </div>
- <div>
- <span class="label">瀹㈡埛鍚嶇О锛�</span>
- <span class="value">${
- item.customerName
- }</span>
- </div>
- </div>
- <div class="info-row">
- <span class="label">鍗曞彿锛�</span>
- <span class="value">${
- item.salesContractNo ||
- ""
- }</span>
- </div>
- </div>
+ <div class="print-page">
+ <div class="delivery-note">
+ <div class="header">
+ <div class="document-title">闆跺敭鍙戣揣鍗�</div>
+ </div>
- <div class="table-section">
- <table class="product-table">
- <thead>
- <tr>
- <th>浜у搧鍚嶇О</th>
- <th>瑙勬牸鍨嬪彿</th>
- <th>鍗曚綅</th>
- <th>鍗曚环</th>
- <th>闆跺敭鏁伴噺</th>
- <th>闆跺敭閲戦</th>
- </tr>
- </thead>
- <tbody>
- ${
- item.products &&
- item
- .products
- .length >
- 0
- ? item.products
- .map(
- product => `
- <tr>
- <td>${
- product.productCategory ||
- ""
- }</td>
- <td>${
- product.specificationModel ||
- ""
- }</td>
- <td>${
- product.unit ||
- ""
- }</td>
- <td>${
- product.taxInclusiveUnitPrice ||
- "0"
- }</td>
- <td>${
- product.quantity ||
- "0"
- }</td>
- <td>${
- product.taxInclusiveTotalPrice ||
- "0"
- }</td>
- </tr>
- `
- )
- .join(
- ""
- )
- : '<tr><td colspan="6" style="text-align: center; color: #999;">鏆傛棤浜у搧鏁版嵁</td></tr>'
- }
- </tbody>
- <tfoot>
- <tr>
- <td class="label">鍚堣</td>
- <td class="total-value"></td>
- <td class="total-value"></td>
- <td class="total-value"></td>
- <td class="total-value">${getTotalQuantityForPrint(
- item.products
- )}</td>
- <td class="total-value">${getTotalAmountForPrint(
- item.products
- )}</td>
- </tr>
- </tfoot>
- </table>
- </div>
+ <div class="info-section">
+ <div class="info-row">
+ <div>
+ <span class="label">鍙戣揣鏃ユ湡锛�</span>
+ <span class="value">${formatDate(
+ item.createTime
+ )}</span>
+ </div>
+ <div>
+ <span class="label">瀹㈡埛鍚嶇О锛�</span>
+ <span class="value">${
+ item.customerName
+ }</span>
+ </div>
+ </div>
+ <div class="info-row">
+ <span class="label">鍗曞彿锛�</span>
+ <span class="value">${
+ item.salesContractNo ||
+ ""
+ }</span>
+ </div>
+ </div>
- <div class="footer-section">
- <div class="footer-row">
- <div class="footer-item">
- <span class="label">鏀惰揣鐢佃瘽锛�</span>
- <span class="value"></span>
- </div>
- <div class="footer-item">
- <span class="label">鏀惰揣浜猴細</span>
- <span class="value"></span>
- </div>
- <div class="footer-item address-item">
- <span class="label">鏀惰揣鍦板潃锛�</span>
- <span class="value address-value"></span>
- </div>
- </div>
- <div class="footer-row">
- <div class="footer-item">
- <span class="label">鎿嶄綔鍛橈細</span>
- <span class="value">${
- userStore.nickName ||
- "鎾曞紑鍓�"
- }</span>
- </div>
- <div class="footer-item">
- <span class="label">鎵撳嵃鏃ユ湡锛�</span>
- <span class="value">${formatDateTime(
- new Date()
- )}</span>
- </div>
- </div>
- </div>
- </div>
- </div>
- `;
+ <div class="table-section">
+ <table class="product-table">
+ <thead>
+ <tr>
+ <th>浜у搧鍚嶇О</th>
+ <th>瑙勬牸鍨嬪彿</th>
+ <th>鍗曚綅</th>
+ <th>鍗曚环</th>
+ <th>闆跺敭鏁伴噺</th>
+ <th>闆跺敭閲戦</th>
+ </tr>
+ </thead>
+ <tbody>
+ ${
+ item.products &&
+ item
+ .products
+ .length >
+ 0
+ ? item.products
+ .map(
+ product => `
+ <tr>
+ <td>${
+ product.productCategory ||
+ ""
+ }</td>
+ <td>${
+ product.specificationModel ||
+ ""
+ }</td>
+ <td>${
+ product.unit ||
+ ""
+ }</td>
+ <td>${
+ product.taxInclusiveUnitPrice ||
+ "0"
+ }</td>
+ <td>${
+ product.quantity ||
+ "0"
+ }</td>
+ <td>${
+ product.taxInclusiveTotalPrice ||
+ "0"
+ }</td>
+ </tr>
+ `
+ )
+ .join(
+ ""
+ )
+ : '<tr><td colspan="6" style="text-align: center; color: #999;">鏆傛棤浜у搧鏁版嵁</td></tr>'
+ }
+ </tbody>
+ <tfoot>
+ <tr>
+ <td class="label">鍚堣</td>
+ <td class="total-value"></td>
+ <td class="total-value"></td>
+ <td class="total-value"></td>
+ <td class="total-value">${getTotalQuantityForPrint(
+ item.products
+ )}</td>
+ <td class="total-value">${getTotalAmountForPrint(
+ item.products
+ )}</td>
+ </tr>
+ </tfoot>
+ </table>
+ </div>
+
+ <div class="footer-section">
+ <div class="footer-row">
+ <div class="footer-item">
+ <span class="label">鏀惰揣鐢佃瘽锛�</span>
+ <span class="value"></span>
+ </div>
+ <div class="footer-item">
+ <span class="label">鏀惰揣浜猴細</span>
+ <span class="value"></span>
+ </div>
+ <div class="footer-item address-item">
+ <span class="label">鏀惰揣鍦板潃锛�</span>
+ <span class="value address-value"></span>
+ </div>
+ </div>
+ <div class="footer-row">
+ <div class="footer-item">
+ <span class="label">鎿嶄綔鍛橈細</span>
+ <span class="value">${
+ userStore.nickName ||
+ "鎾曞紑鍓�"
+ }</span>
+ </div>
+ <div class="footer-item">
+ <span class="label">鎵撳嵃鏃ユ湡锛�</span>
+ <span class="value">${formatDateTime(
+ new Date()
+ )}</span>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ `;
});
printContent += `
- </body>
- </html>
- `;
+ </body>
+ </html>
+ `;
// 鍐欏叆鍐呭鍒版柊绐楀彛
printWindow.document.write(printContent);
--
Gitblit v1.9.3