From e61eb3be4fc933c67cbe3a1a9d08d41ac2d26a1b Mon Sep 17 00:00:00 2001
From: chenhj <1263187585@qq.com>
Date: 星期三, 18 三月 2026 11:48:13 +0800
Subject: [PATCH] Merge branch 'dev_衡阳_鹏创电子' of http://114.132.189.42:9002/r/product-inventory-management into dev_衡阳_鹏创电子
---
src/views/productionManagement/productionReporting/index.vue | 583 +++++++++++++++++++++++++++++++--------------------------
1 files changed, 315 insertions(+), 268 deletions(-)
diff --git a/src/views/productionManagement/productionReporting/index.vue b/src/views/productionManagement/productionReporting/index.vue
index 0b42dae..0904dee 100644
--- a/src/views/productionManagement/productionReporting/index.vue
+++ b/src/views/productionManagement/productionReporting/index.vue
@@ -9,7 +9,7 @@
clearable
prefix-icon="Search"
style="width: 200px;"
- @change="handleQuery" />
+ @change="handleQuery"/>
</el-form-item>
<el-form-item label="宸ュ崟鍙�:">
<el-input v-model="searchForm.workOrderNo"
@@ -17,11 +17,12 @@
clearable
prefix-icon="Search"
style="width: 200px;"
- @change="handleQuery" />
+ @change="handleQuery"/>
</el-form-item>
<el-form-item>
<el-button type="primary"
- @click="handleQuery">鎼滅储</el-button>
+ @click="handleQuery">鎼滅储
+ </el-button>
</el-form-item>
</el-form>
</div>
@@ -43,6 +44,27 @@
:tableLoading="tableLoading"
@pagination="pagination"
:total="page.total">
+ <template #productNoSlot="{ row }">
+ <el-button
+ v-if="row.process ==='鍗伴摐' || row.process ==='鍗伴摱'"
+ type="primary"
+ link
+ @click="openDetail(row)"
+ >
+ {{ row.productNo }}
+ </el-button>
+ <el-button
+ v-else
+ type="primary"
+ link
+ @click="(row) => {
+ currentReportRowData = row
+ showDetail = true
+ }"
+ >
+ {{ row.productNo }}
+ </el-button>
+ </template>
<template #expand="{ row }">
<el-table :data="expandData"
border
@@ -52,7 +74,7 @@
<el-table-column align="center"
label="搴忓彿"
type="index"
- width="60" />
+ width="60"/>
<el-table-column label="鏈鐢熶骇鏁伴噺"
prop="finishedNum"
align="center"
@@ -66,7 +88,7 @@
:precision="2"
placeholder="璇疯緭鍏�"
clearable
- @change="changeNum(scope.row)" />
+ @change="changeNum(scope.row)"/>
</template>
</el-table-column>
<!-- <el-table-column label="寰呯敓浜ф暟閲�" prop="pendingNum" width="240" align="center"></el-table-column>-->
@@ -81,7 +103,7 @@
<el-option v-for="user in userList"
:key="user.userId"
:label="user.nickName"
- :value="user.userId" />
+ :value="user.userId"/>
</el-select>
</template>
</el-table-column>
@@ -96,23 +118,25 @@
value-format="YYYY-MM-DD"
format="YYYY-MM-DD"
clearable
- style="width: 100%" />
+ style="width: 100%"/>
</template>
</el-table-column>
<el-table-column label="鎿嶄綔"
- >
+ >
<template #default="scope">
<el-button link
type="primary"
size="small"
@click="changeEditType(scope.row)"
v-if="!scope.row.editType"
- :disabled="scope.row.parentStatus === 3">缂栬緫</el-button>
+ :disabled="scope.row.parentStatus === 3">缂栬緫
+ </el-button>
<el-button link
type="primary"
size="small"
@click="saveReceiptPayment(scope.row)"
- v-if="scope.row.editType">淇濆瓨</el-button>
+ v-if="scope.row.editType">淇濆瓨
+ </el-button>
</template>
</el-table-column>
</el-table>
@@ -123,298 +147,321 @@
@close="handleQuery"></form-dia>
<input-modal v-if="isShowInput"
v-model:visible="isShowInput"
- :production-product-main-id="isShowingId" />
+ :production-product-main-id="isShowingId"/>
+ <CopperPrintingForm
+ v-if="copperPrintingFormVisible"
+ v-model:isShow="copperPrintingFormVisible"
+ :isEdit="false"
+ :row="currentReportRowData"
+ @refreshData="getList"/>
+ <Detail
+ v-if="showDetail"
+ v-model:isShow="showDetail"
+ :row="currentReportRowData"/>
</div>
</template>
<script setup>
- import { onMounted, ref } from "vue";
- import FormDia from "@/views/productionManagement/productionReporting/components/formDia.vue";
- import { ElMessageBox } from "element-plus";
- import {
- productionReportUpdate,
- workListPageById,
- productionReportDelete,
- } from "@/api/productionManagement/productionReporting.js";
- import { productionProductMainListPage } from "@/api/productionManagement/productionProductMain.js";
- import { userListNoPageByTenantId } from "@/api/system/user.js";
- import InputModal from "@/views/productionManagement/productionReporting/Input.vue";
+import {onMounted, ref} from "vue";
+import FormDia from "@/views/productionManagement/productionReporting/components/formDia.vue";
+import {ElMessageBox} from "element-plus";
+import {
+ productionReportUpdate,
+ workListPageById,
+ productionReportDelete,
+} from "@/api/productionManagement/productionReporting.js";
+import {productionProductMainListPage} from "@/api/productionManagement/productionProductMain.js";
+import {userListNoPageByTenantId} from "@/api/system/user.js";
+import InputModal from "@/views/productionManagement/productionReporting/Input.vue";
- const data = reactive({
- searchForm: {
- nickName: "",
- workOrderNo: "",
- workOrderStatus: "",
- },
- });
- const { searchForm } = toRefs(data);
- const expandedRowKeys = ref([]);
- const expandData = ref([]);
- const userList = ref([]);
- const tableColumn = ref([
- {
- label: "鎶ュ伐鍗曞彿",
- prop: "productNo",
- width: 120,
- },
- {
- label: "鎶ュ伐浜哄憳",
- prop: "nickName",
- width: 120,
- },
- {
- label: "宸ュ簭",
- prop: "process",
- width: 120,
- },
- {
- label: "宸ュ崟缂栧彿",
- prop: "workOrderNo",
- width: 120,
- },
- {
- label: "閿�鍞悎鍚屽彿",
- prop: "salesContractNo",
- width: 120,
- },
- {
- label: "浜у搧鍚嶇О",
- prop: "productName",
- width: 120,
- },
- {
- label: "浜у搧瑙勬牸鍨嬪彿",
- prop: "productModelName",
- width: 120,
- },
- {
- label: "浜у嚭鏁伴噺",
- prop: "quantity",
- width: 120,
- },
- {
- label: "鎶ュ簾鏁伴噺",
- prop: "scrapQty",
- width: 120,
- },
- {
- label: "鍗曚綅",
- prop: "unit",
- width: 120,
- },
-
- {
- label: "鍒涘缓鏃堕棿",
- prop: "createTime",
- width: 120,
- },
- {
- dataType: "action",
- label: "鎿嶄綔",
- align: "center",
- fixed: "right",
- operation: [
- {
- name: "鏌ョ湅鎶曞叆",
- type: "text",
- clickFun: row => {
- showInput(row);
- },
- },
- {
- name: "鍒犻櫎",
- type: "danger",
- clickFun: row => {
- deleteReport(row);
- },
- },
- ],
- },
- ]);
- const tableData = ref([]);
- const selectedRows = ref([]);
- const tableLoading = ref(false);
- const childrenLoading = ref(false);
- const page = reactive({
- current: 1,
- size: 100,
- total: 0,
- });
- const formDia = ref();
- const { proxy } = getCurrentInstance();
+const CopperPrintingForm = defineAsyncComponent(() => import("@/views/productionManagement/workOrder/components/CopperPrintingForm.vue"));
+const Detail = defineAsyncComponent(() => import("@/views/productionManagement/productionReporting/components/Detail.vue"));
- // 鏌ヨ鍒楄〃
- /** 鎼滅储鎸夐挳鎿嶄綔 */
- const handleQuery = () => {
- page.current = 1;
- getList();
- };
- const changeDaterange = value => {
- if (value) {
- searchForm.value.entryDateStart = value[0];
- searchForm.value.entryDateEnd = value[1];
- } else {
- searchForm.value.entryDateStart = undefined;
- searchForm.value.entryDateEnd = undefined;
- }
- handleQuery();
- };
- const deleteReport = row => {
- ElMessageBox.confirm("纭畾鍒犻櫎璇ユ姤宸ュ悧锛�", "鎻愮ず", {
- confirmButtonText: "纭畾",
- cancelButtonText: "鍙栨秷",
- type: "warning",
- }).then(() => {
- productionReportDelete({ id: row.id }).then(res => {
- if (res.code === 200) {
- proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
- getList();
- } else {
- ElMessageBox.alert(res.msg || "鍒犻櫎澶辫触", "鎻愮ず", {
- confirmButtonText: "纭畾",
- });
- }
- });
+
+const data = reactive({
+ searchForm: {
+ nickName: "",
+ workOrderNo: "",
+ workOrderStatus: "",
+ },
+});
+const {searchForm} = toRefs(data);
+const expandedRowKeys = ref([]);
+const expandData = ref([]);
+const userList = ref([]);
+const tableColumn = ref([
+ {
+ label: "鎶ュ伐鍗曞彿",
+ prop: "productNo",
+ width: 120,
+ dataType: 'slot',
+ slot: 'productNoSlot',
+ },
+ {
+ label: "鎶ュ伐浜哄憳",
+ prop: "nickName",
+ width: 120,
+ },
+ {
+ label: "宸ュ簭",
+ prop: "process",
+ width: 120,
+ },
+ {
+ label: "宸ュ崟缂栧彿",
+ prop: "workOrderNo",
+ width: 120,
+ },
+ {
+ label: "閿�鍞悎鍚屽彿",
+ prop: "salesContractNo",
+ width: 120,
+ },
+ {
+ label: "浜у搧鍚嶇О",
+ prop: "productName",
+ width: 120,
+ },
+ {
+ label: "浜у搧瑙勬牸鍨嬪彿",
+ prop: "productModelName",
+ width: 120,
+ },
+ {
+ label: "浜у嚭鏁伴噺",
+ prop: "quantity",
+ width: 120,
+ },
+ {
+ label: "鎶ュ簾鏁伴噺",
+ prop: "scrapQty",
+ width: 120,
+ },
+ {
+ label: "鍗曚綅",
+ prop: "unit",
+ width: 120,
+ },
+
+ {
+ label: "鍒涘缓鏃堕棿",
+ prop: "createTime",
+ width: 120,
+ },
+ {
+ dataType: "action",
+ label: "鎿嶄綔",
+ align: "center",
+ fixed: "right",
+ operation: [
+ {
+ name: "鏌ョ湅鎶曞叆",
+ type: "text",
+ clickFun: row => {
+ showInput(row);
+ },
+ },
+ {
+ name: "鍒犻櫎",
+ type: "danger",
+ clickFun: row => {
+ deleteReport(row);
+ },
+ },
+ ],
+ },
+]);
+const currentReportRowData = ref({});
+const tableData = ref([]);
+const selectedRows = ref([]);
+const tableLoading = ref(false);
+const childrenLoading = ref(false);
+const page = reactive({
+ current: 1,
+ size: 100,
+ total: 0,
+});
+const formDia = ref();
+const {proxy} = getCurrentInstance();
+
+// 鏌ヨ鍒楄〃
+/** 鎼滅储鎸夐挳鎿嶄綔 */
+const handleQuery = () => {
+ page.current = 1;
+ getList();
+};
+const changeDaterange = value => {
+ if (value) {
+ searchForm.value.entryDateStart = value[0];
+ searchForm.value.entryDateEnd = value[1];
+ } else {
+ searchForm.value.entryDateStart = undefined;
+ searchForm.value.entryDateEnd = undefined;
+ }
+ handleQuery();
+};
+const deleteReport = row => {
+ ElMessageBox.confirm("纭畾鍒犻櫎璇ユ姤宸ュ悧锛�", "鎻愮ず", {
+ confirmButtonText: "纭畾",
+ cancelButtonText: "鍙栨秷",
+ type: "warning",
+ }).then(() => {
+ productionReportDelete({id: row.id}).then(res => {
+ if (res.code === 200) {
+ proxy.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+ getList();
+ } else {
+ ElMessageBox.alert(res.msg || "鍒犻櫎澶辫触", "鎻愮ず", {
+ confirmButtonText: "纭畾",
+ });
+ }
});
- };
- const pagination = obj => {
- page.current = obj.page;
- page.size = obj.limit;
- getList();
- };
- const getList = () => {
- tableLoading.value = true;
- const params = { ...searchForm.value, ...page };
- params.entryDate = undefined;
- expandedRowKeys.value = [];
- productionProductMainListPage(params)
+ });
+};
+const pagination = obj => {
+ page.current = obj.page;
+ page.size = obj.limit;
+ getList();
+};
+const getList = () => {
+ tableLoading.value = true;
+ const params = {...searchForm.value, ...page};
+ params.entryDate = undefined;
+ expandedRowKeys.value = [];
+ productionProductMainListPage(params)
.then(res => {
tableLoading.value = false;
tableData.value = res.data.records.map(item => ({
...item,
pendingFinishNum:
- (Number(item.schedulingNum) || 0) - (Number(item.finishedNum) || 0),
+ (Number(item.schedulingNum) || 0) - (Number(item.finishedNum) || 0),
}));
page.total = res.data.total;
})
.catch(err => {
tableLoading.value = false;
});
- };
- // 灞曞紑琛�
- const expandChange = (row, expandedRows) => {
- userListNoPageByTenantId().then(res => {
- userList.value = res.data;
- });
- if (expandedRows.length > 0) {
- nextTick(() => {
- expandedRowKeys.value = [];
- try {
- childrenLoading.value = true;
- workListPageById({ id: row.id }).then(res => {
- childrenLoading.value = false;
- const index = tableData.value.findIndex(item => item.id === row.id);
- if (index > -1) {
- expandData.value = res.data.map(item => ({
- ...item,
- pendingNum:
+};
+// 灞曞紑琛�
+const expandChange = (row, expandedRows) => {
+ userListNoPageByTenantId().then(res => {
+ userList.value = res.data;
+ });
+ if (expandedRows.length > 0) {
+ nextTick(() => {
+ expandedRowKeys.value = [];
+ try {
+ childrenLoading.value = true;
+ workListPageById({id: row.id}).then(res => {
+ childrenLoading.value = false;
+ const index = tableData.value.findIndex(item => item.id === row.id);
+ if (index > -1) {
+ expandData.value = res.data.map(item => ({
+ ...item,
+ pendingNum:
(Number(item.schedulingNum) || 0) -
(Number(item.finishedNum) || 0),
- parentStatus: row.status, // 鏂板鐖惰〃鐘舵��
- }));
- }
- expandedRowKeys.value.push(row.id);
- });
- } catch (error) {
- childrenLoading.value = false;
- console.log(error);
- }
- });
- } else {
- expandedRowKeys.value = [];
- }
- };
- const changeNum = row => {
- // 鎵惧埌鐖惰〃鏍兼暟鎹�
- const parentRow = tableData.value.find(
+ parentStatus: row.status, // 鏂板鐖惰〃鐘舵��
+ }));
+ }
+ expandedRowKeys.value.push(row.id);
+ });
+ } catch (error) {
+ childrenLoading.value = false;
+ console.log(error);
+ }
+ });
+ } else {
+ expandedRowKeys.value = [];
+ }
+};
+const changeNum = row => {
+ // 鎵惧埌鐖惰〃鏍兼暟鎹�
+ const parentRow = tableData.value.find(
item => item.id === expandedRowKeys.value[0]
- );
- // 璁$畻鎵�鏈夊瓙琛ㄦ牸 finishedNum 鐨勬�诲拰
- const totalFinishedNum = expandData.value.reduce(
+ );
+ // 璁$畻鎵�鏈夊瓙琛ㄦ牸 finishedNum 鐨勬�诲拰
+ const totalFinishedNum = expandData.value.reduce(
(sum, item) => sum + (Number(item.finishedNum) || 0),
0
- );
- // 鐖惰〃鏍肩殑鎺掍骇鏁伴噺
- const schedulingNum = parentRow ? Number(parentRow.schedulingNum) : 0;
+ );
+ // 鐖惰〃鏍肩殑鎺掍骇鏁伴噺
+ const schedulingNum = parentRow ? Number(parentRow.schedulingNum) : 0;
- if (totalFinishedNum > schedulingNum) {
- // 鍥為��鏈杈撳叆
- row.finishedNum =
+ if (totalFinishedNum > schedulingNum) {
+ // 鍥為��鏈杈撳叆
+ row.finishedNum =
schedulingNum - (totalFinishedNum - Number(row.finishedNum));
- proxy.$modal.msgWarning("鎵�鏈夋湰娆$敓浜ф暟閲忎箣鍜屼笉鍙ぇ浜庢帓浜ф暟閲�");
- }
- row.pendingNum = row.schedulingNum - row.finishedNum;
- };
- // 缂栬緫淇敼鐘舵��
- const changeEditType = row => {
+ proxy.$modal.msgWarning("鎵�鏈夋湰娆$敓浜ф暟閲忎箣鍜屼笉鍙ぇ浜庢帓浜ф暟閲�");
+ }
+ row.pendingNum = row.schedulingNum - row.finishedNum;
+};
+// 缂栬緫淇敼鐘舵��
+const changeEditType = row => {
+ row.editType = !row.editType;
+};
+// 淇濆瓨璁板綍
+const saveReceiptPayment = row => {
+ productionReportUpdate(row).then(res => {
row.editType = !row.editType;
- };
- // 淇濆瓨璁板綍
- const saveReceiptPayment = row => {
- productionReportUpdate(row).then(res => {
- row.editType = !row.editType;
- getList();
- proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
- });
- };
- // 琛ㄦ牸閫夋嫨鏁版嵁
- const handleSelectionChange = selection => {
- selectedRows.value = selection;
- };
- const summarizeMainTable = param => {
- return proxy.summarizeTable(param, ["finishedNum"]);
- };
- // 鎵撳紑寮规
- const openForm = (type, row) => {
- if (selectedRows.value.length !== 1) {
- proxy.$message.error("璇烽�夋嫨涓�鏉℃暟鎹�");
- return;
- }
- if (selectedRows.value[0].pendingFinishNum == 0) {
- proxy.$message.warning("鏃犻渶鍐嶆姤宸�");
- return;
- }
- nextTick(() => {
- const rowInfo = type === "add" ? selectedRows.value[0] : row;
- formDia.value?.openDialog(type, rowInfo);
- });
- };
+ getList();
+ proxy.$modal.msgSuccess("鎻愪氦鎴愬姛");
+ });
+};
+// 琛ㄦ牸閫夋嫨鏁版嵁
+const handleSelectionChange = selection => {
+ selectedRows.value = selection;
+};
+const summarizeMainTable = param => {
+ return proxy.summarizeTable(param, ["finishedNum"]);
+};
+// 鎵撳紑寮规
+const openForm = (type, row) => {
+ if (selectedRows.value.length !== 1) {
+ proxy.$message.error("璇烽�夋嫨涓�鏉℃暟鎹�");
+ return;
+ }
+ if (selectedRows.value[0].pendingFinishNum == 0) {
+ proxy.$message.warning("鏃犻渶鍐嶆姤宸�");
+ return;
+ }
+ nextTick(() => {
+ const rowInfo = type === "add" ? selectedRows.value[0] : row;
+ formDia.value?.openDialog(type, rowInfo);
+ });
+};
- // 鎵撳紑鎶曞叆妯℃�佹
- const isShowInput = ref(false);
- const isShowingId = ref(0);
- const showInput = row => {
- isShowInput.value = true;
- isShowingId.value = row.id;
- };
+// 鎵撳紑鎶曞叆妯℃�佹
+const isShowInput = ref(false);
+const copperPrintingFormVisible = ref(false);
+const showDetail = ref(false);
+const isShowingId = ref(0);
+const showInput = row => {
+ isShowInput.value = true;
+ isShowingId.value = row.id;
+};
- // 瀵煎嚭
- const handleOut = () => {
- ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚鍑猴紝鏄惁纭瀵煎嚭锛�", "瀵煎嚭", {
- confirmButtonText: "纭",
- cancelButtonText: "鍙栨秷",
- type: "warning",
- })
+// 瀵煎嚭
+const handleOut = () => {
+ ElMessageBox.confirm("閫変腑鐨勫唴瀹瑰皢琚鍑猴紝鏄惁纭瀵煎嚭锛�", "瀵煎嚭", {
+ confirmButtonText: "纭",
+ cancelButtonText: "鍙栨秷",
+ type: "warning",
+ })
.then(() => {
proxy.download("/productionProductMain/export", {}, "鐢熶骇鎶ュ伐.xlsx");
})
.catch(() => {
proxy.$modal.msg("宸插彇娑�");
});
- };
- onMounted(() => {
- getList();
- });
+};
+const openDetail = row => {
+ currentReportRowData.value = row;
+ copperPrintingFormVisible.value = true;
+};
+onMounted(() => {
+ getList();
+});
</script>
<style scoped></style>
--
Gitblit v1.9.3