huminmin
4 天以前 5952d34811ee82e797ef0070f84ff041381072a5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
<template>
  <div class="app-container">
    <!-- 使用公共搜索组件 -->
    <SearchPanel
      v-model="queryParams"
      :schema="searchSchema"
      @search="handleQuery"
      @reset="resetQuery"
    />
 
    <!-- 表格区域 -->
    <el-card class="table-card">
      <el-table :data="refundList" v-loading="loading" border>
        <el-table-column label="退货单号" prop="returnManagementNo" align="center" />
        <el-table-column label="客户名称" prop="customerName" align="center" />
        <el-table-column label="销售单号" prop="salesContractNo" align="center" />
        <el-table-column label="应退款金额" prop="refundAmount" align="center" />
        <el-table-column label="已退款金额" prop="refundedAmount" align="center" />
        <el-table-column label="未退款金额" prop="notRefundedAmount" align="center" />
        <el-table-column label="状态" prop="status" align="center">
          <template #default="scope">
            <dict-tag :options="dictRef.sales_refund_status.value" :value="scope.row.status" />
          </template>
        </el-table-column>
        <el-table-column label="创建人" prop="createUserName" align="center" />
        <el-table-column label="创建时间" prop="createTime" align="center" />
        <el-table-column label="操作" align="center" width="150">
          <template #default="scope">
            <el-button link type="primary" @click="openDetail(scope.row)">详情</el-button>
            <el-button link type="primary" @click="openConfirm(scope.row)">确认</el-button>
          </template>
        </el-table-column>
      </el-table>
 
      <pagination
        v-show="total > 0"
        :total="total"
        v-model:page="queryParams.pageNum"
        v-model:limit="queryParams.pageSize"
        @pagination="getList"
      />
    </el-card>
<ReceiptandRefundPopupWindow ref="popupRef" @submitted="getList" />
  </div>
</template>
 
<script setup name="SalesRefund">
import { ref, reactive, onMounted, computed, getCurrentInstance } from 'vue';
const { proxy } = getCurrentInstance();
import { listPage, add, update, del } from '@/api/financialManagement/salesRefund';
import SearchPanel from '@/components/SearchPanel/index.vue';
import ReceiptandRefundPopupWindow from './components/ReceiptandRefundPopupWindow.vue';
 
// 查询参数
const queryParams = reactive({
  pageNum: 1,
  pageSize: 10,
  returnManagementNo: undefined,
  customerName: undefined,
  salesContractNo: undefined,
  createUserName: undefined,
  status: undefined
});
 
const dictRef = proxy.useDict('sales_refund_status');
const salesRefundStatusOptions = computed(() => dictRef.sales_refund_status.value || []);
 
// 搜索栏配置
const searchSchema = [
  { type: 'input', prop: 'returnManagementNo', placeholder: '退货单号' },
  { type: 'input', prop: 'customerName', placeholder: '客户名称' },
  { type: 'input', prop: 'salesContractNo', placeholder: '销售单号' },
  { type: 'input', prop: 'createUserName', placeholder: '创建人名称' },
  { type: 'select', prop: 'status', placeholder: '状态', options: salesRefundStatusOptions }
];
 
const loading = ref(false);
const total = ref(0);
const refundList = ref([]);
const popupRef = ref(null);
 
/** 查询列表 */
function getList() {
  loading.value = true;
  const { pageNum, pageSize, ...filters } = queryParams;
  listPlan({
    current: pageNum,
    size: pageSize,
    ...filters
  })
    .then(res => {
      refundList.value = res?.data?.records || res?.rows || [];
      total.value = res?.data?.total || res?.total || 0;
    })
    .finally(() => {
      loading.value = false;
    });
}
 
/** 搜索按钮操作 */
function handleQuery() {
  queryParams.pageNum = 1;
  getList();
}
 
/** 重置按钮操作 */
function resetQuery() {
  handleQuery();
}
 
function openDetail(row) {
  if (popupRef.value) {
    popupRef.value.open({ mode: 'detail', row });
  }
}
function openConfirm(row) {
  if (popupRef.value) {
    popupRef.value.open({ mode: 'confirm', row });
  }
}
 
onMounted(() => {
  getList();
});
</script>
 
<style scoped lang="scss">
.table-card {
  border-radius: 8px;
  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.05);
}
</style>
 
<!-- keep-alive child -->