From 352fbcfaa09e261918f5a7b50bcd9ba15583b1aa Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期五, 13 三月 2026 13:55:16 +0800
Subject: [PATCH] 军泰伟业 1.销售退货逻辑完善与联调
---
src/views/salesManagement/returnOrder/index.vue | 165 +++++++++++++++++-------------------------------------
1 files changed, 52 insertions(+), 113 deletions(-)
diff --git a/src/views/salesManagement/returnOrder/index.vue b/src/views/salesManagement/returnOrder/index.vue
index a83dd24..5a5aa05 100644
--- a/src/views/salesManagement/returnOrder/index.vue
+++ b/src/views/salesManagement/returnOrder/index.vue
@@ -4,22 +4,22 @@
<el-form :model="searchForm" class="demo-form-inline">
<el-row :gutter="20">
<el-col :span="4">
- <el-form-item>
+ <el-form-item label="閫�璐у崟鍙�">
<el-input v-model="searchForm.returnNo" placeholder="璇疯緭鍏ラ��璐у崟鍙�" clearable />
</el-form-item>
</el-col>
<el-col :span="4">
- <el-form-item>
+ <el-form-item label="瀹㈡埛鍚嶇О">
<el-input v-model="searchForm.customerName" placeholder="瀹㈡埛鍚嶇О" clearable />
</el-form-item>
</el-col>
<el-col :span="4">
- <el-form-item>
+ <el-form-item label="閿�鍞崟鍙�">
<el-input v-model="searchForm.salesContractNo" placeholder="閿�鍞崟鍙�" clearable />
</el-form-item>
</el-col>
<el-col :span="4">
- <el-form-item>
+ <el-form-item label="鍏宠仈鍑哄簱鍗曞彿">
<el-input v-model="searchForm.shippingNo" placeholder="鍏宠仈鍑哄簱鍗曞彿" clearable />
</el-form-item>
</el-col>
@@ -33,46 +33,27 @@
</el-form>
</div>
<div class="table_list">
- <div class="table_header" style="display:flex;justify-content:space-between;align-items:center;">
- <div>
- <el-button type="primary" @click="openForm('add')">鏂板缓閿�鍞��璐�</el-button>
- </div>
- <div>
- <el-button type="danger" plain @click="handleDelete">鍒犻櫎</el-button>
- <el-button @click="columnsDialogVisible = true">鍒楄〃瀛楁</el-button>
- </div>
+ <div class="table_header" style="display: flex;justify-content: flex-end;margin-bottom: 10px;">
+ <el-button type="primary" @click="openForm('add')">鏂板缓閿�鍞��璐�</el-button>
+ <el-button type="danger" plain @click="handleDelete">鍒犻櫎</el-button>
</div>
<PIMTable
rowKey="id"
- :column="visibleColumns"
+ :column="tableColumn"
:tableData="tableData"
:page="page"
:isSelection="true"
@selection-change="handleSelectionChange"
:tableLoading="tableLoading"
@pagination="pagination"
- />
+ >
+ <template #status="{ row }">
+ <el-tag :type="getStatusType(row.status)">{{ getStatusText(row.status) }}</el-tag>
+ </template>
+ </PIMTable>
</div>
<form-dia ref="formDia" @close="handleQuery" />
-
- <el-dialog v-model="columnsDialogVisible" title="鑷畾涔夋樉绀哄垪椤�" width="600px">
- <div class="columns-tip">娉細鍒楄〃椤规樉绀轰笉寰楀皯浜�5椤癸紱鎷栧姩鍙充晶鎶婃墜鍙皟鏁存樉绀洪『搴�</div>
- <ul class="columns-list">
- <li v-for="(col, idx) in allColumns" :key="col.prop"
- class="columns-item"
- draggable="true"
- @dragstart="onDragStart(idx)"
- @dragover.prevent
- @drop="onDrop(idx)">
- <el-checkbox v-model="col.selected">{{ col.label }}</el-checkbox>
- <span class="drag-handle">鈮�</span>
- </li>
- </ul>
- <template #footer>
- <el-button @click="resetColumns">鎭㈠榛樿</el-button>
- <el-button type="primary" @click="saveColumns">淇濆瓨</el-button>
- </template>
- </el-dialog>
+ <detail-dia ref="detailDia" />
</div>
</template>
@@ -80,12 +61,18 @@
import { reactive, ref, toRefs, computed, getCurrentInstance, nextTick, onMounted } from "vue";
import { ElMessageBox } from "element-plus";
import FormDia from "./components/formDia.vue";
+import DetailDia from "./components/detailDia.vue";
import { returnManagementList, returnManagementDel, returnManagementHandle } from "@/api/salesManagement/returnOrder.js";
const { proxy } = getCurrentInstance();
const formDia = ref();
+const detailDia = ref();
const openForm = (type, row) => {
nextTick(() => formDia.value?.openDialog(type, row));
+};
+
+const openDetail = (row) => {
+ nextTick(() => detailDia.value?.openDialog(row));
};
const handleRowDelete = (row) => {
@@ -132,86 +119,36 @@
const { searchForm } = toRefs(data);
const documentStatusOptions = ref([
- { label: "寰呭鏍�", value: 0 },
- { label: "瀹℃牳涓�", value: 1 },
- { label: "宸插鏍�", value: 2 }
+ { label: "寰呭鐞�", value: 0 },
+ { label: "宸插鐞�", value: 1 }
]);
const defaultColumns = [
- { label: "閫�璐у崟鍙�", prop: "returnNo", minWidth: 160 },
- { label: "鍗曟嵁鐘舵��", prop: "status", minWidth: 120, formatData: (v) => ({ "0": "寰呭鏍�", "1": "瀹℃牳涓�", "2": "宸插鏍�" }[String(v)] ?? v) },
- { label: "鍒跺崟鏃堕棿", prop: "makeTime", minWidth: 170 },
- { label: "瀹㈡埛鍚嶇О", prop: "customerName", minWidth: 220 },
- { label: "閿�鍞崟鍙�", prop: "salesContractNo", minWidth: 160 },
- { label: "涓氬姟鍛�", prop: "salesman", minWidth: 120 },
- { label: "鍏宠仈鍑哄簱鍗曞彿", prop: "shippingNo", minWidth: 170 },
- { label: "椤圭洰鍚嶇О", prop: "projectName", minWidth: 180 },
- { label: "椤圭洰闃舵", prop: "projectStage", minWidth: 120 },
- { label: "鍒跺崟浜�", prop: "maker", minWidth: 120 },
- { label: "缁撶畻浜�", prop: "settler", minWidth: 120 },
+ { label: "閫�璐у崟鍙�", prop: "returnNo", width: 160 },
+ { label: "鍗曟嵁鐘舵��", prop: "status", width: 90, dataType: "slot", slot: "status" },
+ { label: "鍒跺崟鏃堕棿", prop: "makeTime", width: 170 },
+ { label: "瀹㈡埛鍚嶇О", prop: "customerName", width: 220 },
+ { label: "閿�鍞崟鍙�", prop: "salesContractNo", width: 160 },
+ { label: "涓氬姟鍛�", prop: "salesman", width: 120 },
+ { label: "鍏宠仈鍑哄簱鍗曞彿", prop: "shippingNo", width: 170 },
+ { label: "椤圭洰鍚嶇О", prop: "projectName", width: 180 },
+ { label: "鍒跺崟浜�", prop: "maker", width: 120 },
{
label: "鎿嶄綔",
prop: "operation",
dataType: "action",
align: "center",
fixed: "right",
- width: 160,
+ width: 240,
operation: [
{ name: "缂栬緫", disabled: (row) => row.status !== 0, type: "text", clickFun: (row) => openForm("edit", row) },
- { name: "澶勭悊", disabled: (row) => row.status !== 0, type: "text", clickFun: (row) => handleRowHandle(row) },
+ { name: "閫�娆惧鐞�", disabled: (row) => row.status !== 0, type: "text", clickFun: (row) => handleRowHandle(row) },
+ { name: "璇︽儏", type: "text", clickFun: (row) => openDetail(row) },
{ name: "鍒犻櫎", disabled: (row) => row.status !== 0, type: "text", clickFun: (row) => handleRowDelete(row) },
],
},
];
-const COLUMNS_KEY = "return_order_columns_v2";
-const columnsDialogVisible = ref(false);
-const allColumns = ref([]);
-
-const initColumns = () => {
- const saved = localStorage.getItem(COLUMNS_KEY);
- if (saved) {
- try {
- const parsed = JSON.parse(saved);
- // 鍚堝苟榛樿鍒椾笌宸蹭繚瀛橀厤缃紝閬垮厤鍚庣画鏂板鍒椾涪澶�
- const map = new Map(parsed.map(c => [c.prop, c]));
- allColumns.value = defaultColumns.map(d => {
- const found = map.get(d.prop);
- return { ...d, selected: found ? !!found.selected : true };
- });
- // 浠ヤ繚瀛樼殑椤哄簭涓哄噯
- const order = parsed.map(p => p.prop);
- allColumns.value.sort((a, b) => order.indexOf(a.prop) - order.indexOf(b.prop));
- return;
- } catch {}
- }
- allColumns.value = defaultColumns.map(c => ({ ...c, selected: true }));
-};
-initColumns();
-
-const visibleColumns = computed(() => allColumns.value.filter(c => c.selected));
-
-let dragFrom = -1;
-const onDragStart = (idx) => {
- dragFrom = idx;
-};
-const onDrop = (to) => {
- if (dragFrom < 0 || dragFrom === to) return;
- const arr = [...allColumns.value];
- const [moved] = arr.splice(dragFrom, 1);
- arr.splice(to, 0, moved);
- allColumns.value = arr;
- dragFrom = -1;
-};
-
-const resetColumns = () => {
- allColumns.value = defaultColumns.map(c => ({ ...c, selected: true }));
- localStorage.removeItem(COLUMNS_KEY);
-};
-const saveColumns = () => {
- const toSave = allColumns.value.map(({ label, prop, width, selected }) => ({ label, prop, width, selected }));
- localStorage.setItem(COLUMNS_KEY, JSON.stringify(toSave));
- columnsDialogVisible.value = false;
-};
+const tableColumn = defaultColumns;
const tableData = ref([]);
const tableLoading = ref(false);
@@ -221,6 +158,7 @@
const handleReset = () => {
Object.keys(searchForm.value).forEach(k => searchForm.value[k] = "");
+ handleQuery();
};
const handleSelectionChange = (selection) => {
selectedRows.value = selection;
@@ -265,6 +203,22 @@
});
};
+const getStatusType = (status) => {
+ const statusMap = {
+ 0: "warning",
+ 1: "success"
+ };
+ return statusMap[status] || "info";
+};
+
+const getStatusText = (status) => {
+ const statusMap = {
+ 0: "寰呭鐞�",
+ 1: "宸插鐞�"
+ };
+ return statusMap[status] || "鏈煡";
+};
+
onMounted(() => {
getList();
});
@@ -276,20 +230,5 @@
padding: 1rem 1rem 0 1rem;
border: 8px;
border-radius: 16px;
-}
-.table_list {
- height: calc(100vh - 230px);
- min-height: 360px;
- background: #fff;
- margin-top: 20px;
- display: flex;
- flex-direction: column;
-}
-.columns-tip{color:#909399;margin-bottom:10px;font-size:12px;}
-.columns-list{list-style:none;padding:0;margin:0;max-height:360px;overflow:auto;}
-.columns-item{display:flex;justify-content:space-between;align-items:center;padding:8px 10px;border:1px solid #f0f0f0;border-radius:6px;margin-bottom:8px;cursor:move;background:#fff;}
-.columns-item .drag-handle{color:#909399;padding-left:12px;user-select:none;}
-.table_header {
- margin-bottom: 15px;
}
</style>
--
Gitblit v1.9.3