Browse Source

Merge remote-tracking branch 'origin/master'

autumnal_wind@yeah.net 1 month ago
parent
commit
5202e1486e

+ 62 - 0
src/api/cardCenter/report/xfCreditaccount/index.ts

@@ -0,0 +1,62 @@
1
+import request from '@/utils/request';
2
+import { AxiosPromise } from 'axios';
3
+import { XfCreditaccountVO, XfCreditaccountForm, XfCreditaccountQuery } from '@/api/cardCenter/report/xfCreditaccount/types';
4
+
5
+/**
6
+ * 查询资金收支明细列表
7
+ * @param query
8
+ * @returns {*}
9
+ */
10
+export const listXfCreditaccount = (query?: XfCreditaccountQuery): AxiosPromise<XfCreditaccountVO[]> => {
11
+  return request({
12
+    url: '/backstage/consumption/xfCreditaccount/list',
13
+    method: 'get',
14
+    params: query
15
+  });
16
+};
17
+
18
+/**
19
+ * 查询资金收支明细详细
20
+ * @param creditId
21
+ */
22
+export const getXfCreditaccount = (creditId: string | number): AxiosPromise<XfCreditaccountVO> => {
23
+  return request({
24
+    url: '/backstage/consumption/xfCreditaccount/' + creditId,
25
+    method: 'get'
26
+  });
27
+};
28
+
29
+/**
30
+ * 新增资金收支明细
31
+ * @param data
32
+ */
33
+export const addXfCreditaccount = (data: XfCreditaccountForm) => {
34
+  return request({
35
+    url: '/backstage/consumption/xfCreditaccount',
36
+    method: 'post',
37
+    data: data
38
+  });
39
+};
40
+
41
+/**
42
+ * 修改资金收支明细
43
+ * @param data
44
+ */
45
+export const updateXfCreditaccount = (data: XfCreditaccountForm) => {
46
+  return request({
47
+    url: '/backstage/consumption/xfCreditaccount',
48
+    method: 'put',
49
+    data: data
50
+  });
51
+};
52
+
53
+/**
54
+ * 删除资金收支明细
55
+ * @param creditId
56
+ */
57
+export const delXfCreditaccount = (creditId: string | number | Array<string | number>) => {
58
+  return request({
59
+    url: '/backstage/consumption/xfCreditaccount/' + creditId,
60
+    method: 'delete'
61
+  });
62
+};

+ 136 - 0
src/api/cardCenter/report/xfCreditaccount/types.ts

@@ -0,0 +1,136 @@
1
+export interface XfCreditaccountVO {
2
+  /**
3
+   * 收支Id
4
+   */
5
+  creditId: string | number;
6
+
7
+  /**
8
+   * 学/工号
9
+   */
10
+  userNumb: string;
11
+
12
+  /**
13
+   * 用户姓名
14
+   */
15
+  realName: string;
16
+
17
+  /**
18
+   * 部门名称
19
+   */
20
+  deptName: string;
21
+
22
+  /**
23
+   * 设备机号
24
+   */
25
+  termNo: number;
26
+
27
+  /**
28
+   * 设备名称
29
+   */
30
+  termName: string;
31
+
32
+  /**
33
+   * 卡上余额
34
+   */
35
+  cardValue: number;
36
+
37
+  /**
38
+   * 卡片类型名称
39
+   */
40
+  cardTypeName: string;
41
+
42
+  /**
43
+   * 钱包类型
44
+   */
45
+  bagType: string;
46
+
47
+  /**
48
+   * 工作站名称
49
+   */
50
+  stationName: string;
51
+
52
+  /**
53
+   * 营业员名称
54
+   */
55
+  operatorName: string;
56
+
57
+  /**
58
+   * 交易时间
59
+   */
60
+  creditTime: string;
61
+
62
+  /**
63
+   * 交易类型,见CREDITTYPE字典类型
64
+   */
65
+  creditType: string;
66
+
67
+  /**
68
+   * 资金来源,见PAYSTYLE字典类型
69
+   */
70
+  payStyle: string;
71
+
72
+  /**
73
+   * 交易金额
74
+   */
75
+  receiptMoney: number;
76
+
77
+  /**
78
+   * 核对状态,见sys_yes_no字典类型
79
+   */
80
+  auditStatus: string;
81
+
82
+  /**
83
+   * 核对时间
84
+   */
85
+  auditDate: string;
86
+
87
+  /**
88
+   * 消费记录标志位?
89
+   */
90
+  recordStatus: number;
91
+
92
+  /**
93
+   * 备注
94
+   */
95
+  remark: string;
96
+
97
+}
98
+
99
+export interface XfCreditaccountForm extends BaseEntity {
100
+}
101
+
102
+export interface XfCreditaccountQuery extends PageQuery {
103
+
104
+  /**
105
+   * 学/工号
106
+   */
107
+  userNumb?: string;
108
+
109
+  /**
110
+   * 用户姓名
111
+   */
112
+  realName?: string;
113
+
114
+  /**
115
+   * 交易时间
116
+   */
117
+  creditTime?: string;
118
+
119
+  /**
120
+   * 交易类型,见CREDITTYPE字典类型
121
+   */
122
+  creditType?: string;
123
+
124
+  /**
125
+   * 资金来源,见PAYSTYLE字典类型
126
+   */
127
+  payStyle?: string;
128
+
129
+    /**
130
+     * 日期范围参数
131
+     */
132
+    params?: any;
133
+}
134
+
135
+
136
+

+ 62 - 0
src/api/consumption/report/xfConsumedetail/index.ts

@@ -0,0 +1,62 @@
1
+import request from '@/utils/request';
2
+import { AxiosPromise } from 'axios';
3
+import { XfConsumedetailVO, XfConsumedetailForm, XfConsumedetailQuery } from '@/api/consumption/report/xfConsumedetail/types';
4
+
5
+/**
6
+ * 查询消费明细列表
7
+ * @param query
8
+ * @returns {*}
9
+ */
10
+export const listXfConsumedetail = (query?: XfConsumedetailQuery): AxiosPromise<XfConsumedetailVO[]> => {
11
+  return request({
12
+    url: '/backstage/consumption/xfConsumeDetail/list',
13
+    method: 'get',
14
+    params: query
15
+  });
16
+};
17
+
18
+/**
19
+ * 查询消费明细详细
20
+ * @param consumeId
21
+ */
22
+export const getXfConsumedetail = (consumeId: string | number): AxiosPromise<XfConsumedetailVO> => {
23
+  return request({
24
+    url: '/backstage/consumption/xfConsumeDetail/' + consumeId,
25
+    method: 'get'
26
+  });
27
+};
28
+
29
+/**
30
+ * 新增消费明细
31
+ * @param data
32
+ */
33
+export const addXfConsumedetail = (data: XfConsumedetailForm) => {
34
+  return request({
35
+    url: '/backstage/consumption/xfConsumeDetail',
36
+    method: 'post',
37
+    data: data
38
+  });
39
+};
40
+
41
+/**
42
+ * 修改消费明细
43
+ * @param data
44
+ */
45
+export const updateXfConsumedetail = (data: XfConsumedetailForm) => {
46
+  return request({
47
+    url: '/backstage/consumption/xfConsumeDetail',
48
+    method: 'put',
49
+    data: data
50
+  });
51
+};
52
+
53
+/**
54
+ * 删除消费明细
55
+ * @param consumeId
56
+ */
57
+export const delXfConsumedetail = (consumeId: string | number | Array<string | number>) => {
58
+  return request({
59
+    url: '/backstage/consumption/xfConsumeDetail/' + consumeId,
60
+    method: 'delete'
61
+  });
62
+};

+ 206 - 0
src/api/consumption/report/xfConsumedetail/types.ts

@@ -0,0 +1,206 @@
1
+export interface XfConsumedetailVO {
2
+  /**
3
+   * 消费记录Id,主键
4
+   */
5
+  consumeId: string | number;
6
+
7
+  /**
8
+   * 人员Id
9
+   */
10
+  userId: string | number;
11
+
12
+  /**
13
+   * 学/工号
14
+   */
15
+  userNumb: string;
16
+
17
+  /**
18
+   * 用户姓名
19
+   */
20
+  realName: string;
21
+
22
+  /**
23
+   * 部门名称
24
+   */
25
+  deptName: string;
26
+
27
+  /**
28
+   * 消费日期
29
+   */
30
+  consumeDate: string;
31
+
32
+  /**
33
+   * 消费金额
34
+   */
35
+  consumeMoney: number;
36
+
37
+  /**
38
+   * 卡流水号
39
+   */
40
+  cardNo: number;
41
+
42
+  /**
43
+   * 物理卡号
44
+   */
45
+  factoryId: string | number;
46
+
47
+  /**
48
+   * 余额
49
+   */
50
+  cardValue: number;
51
+
52
+  /**
53
+   * 消费金额
54
+   */
55
+  consumeBalance: number;
56
+
57
+  /**
58
+   * 设备机号
59
+   */
60
+  termNo: number;
61
+
62
+  /**
63
+   * 设备名称
64
+   */
65
+  termName: string;
66
+
67
+  /**
68
+   * 状态标识(记录消费类型?)
69
+   */
70
+  statusFlag: number;
71
+
72
+  /**
73
+   * 房间名称
74
+   */
75
+  roomName: string;
76
+
77
+  /**
78
+   * 钱包类型
79
+   */
80
+  bagType: string;
81
+
82
+  /**
83
+   * 餐类Id
84
+   */
85
+  mealType: number;
86
+
87
+}
88
+
89
+export interface XfConsumedetailForm extends BaseEntity {
90
+  /**
91
+   * 消费记录Id,主键
92
+   */
93
+  consumeId?: string | number;
94
+
95
+  /**
96
+   * 人员Id
97
+   */
98
+  userId?: string | number;
99
+
100
+  /**
101
+   * 学/工号
102
+   */
103
+  userNumb?: string;
104
+
105
+  /**
106
+   * 用户姓名
107
+   */
108
+  realName?: string;
109
+
110
+  /**
111
+   * 部门名称
112
+   */
113
+  deptName?: string;
114
+
115
+  /**
116
+   * 消费日期
117
+   */
118
+  consumeDate?: string;
119
+
120
+  /**
121
+   * 消费金额
122
+   */
123
+  consumeMoney?: number;
124
+
125
+  /**
126
+   * 卡流水号
127
+   */
128
+  cardNo?: number;
129
+
130
+  /**
131
+   * 物理卡号
132
+   */
133
+  factoryId?: string | number;
134
+
135
+  /**
136
+   * 余额
137
+   */
138
+  cardValue?: number;
139
+
140
+  /**
141
+   * 消费金额
142
+   */
143
+  consumeBalance?: number;
144
+
145
+  /**
146
+   * 设备机号
147
+   */
148
+  termNo?: number;
149
+
150
+  /**
151
+   * 设备名称
152
+   */
153
+  termName?: string;
154
+
155
+  /**
156
+   * 状态标识(记录消费类型?)
157
+   */
158
+  statusFlag?: number;
159
+
160
+  /**
161
+   * 房间名称
162
+   */
163
+  roomName?: string;
164
+
165
+  /**
166
+   * 钱包类型
167
+   */
168
+  bagType?: string;
169
+
170
+}
171
+
172
+export interface XfConsumedetailQuery extends PageQuery {
173
+
174
+  /**
175
+   * 人员Id
176
+   */
177
+  userId?: string | number;
178
+
179
+  /**
180
+   * 学/工号
181
+   */
182
+  userNumb?: string;
183
+
184
+  /**
185
+   * 用户姓名
186
+   */
187
+  realName?: string;
188
+
189
+  /**
190
+   * 消费日期
191
+   */
192
+  consumeDate?: string;
193
+
194
+  /**
195
+   * 餐类Id
196
+   */
197
+  mealType?: number;
198
+
199
+    /**
200
+     * 日期范围参数
201
+     */
202
+    params?: any;
203
+}
204
+
205
+
206
+

+ 225 - 0
src/views/cardCenter/report/xfCreditaccount/index.vue

@@ -0,0 +1,225 @@
1
+<template>
2
+  <div class="p-2 auto-overflow-y">
3
+    <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
4
+      <div v-show="showSearch" class="search">
5
+        <el-form ref="queryFormRef" :model="queryParams" :inline="true" label-width="68px" class="-mb-15px">
6
+          <el-form-item label="学/工号" prop="userNumb">
7
+            <el-input v-model="queryParams.userNumb" placeholder="请输入学/工号" clearable style="width: 240px" @keyup.enter="handleQuery" />
8
+          </el-form-item>
9
+          <el-form-item label="用户姓名" prop="realName">
10
+            <el-input v-model="queryParams.realName" placeholder="请输入用户姓名" clearable style="width: 240px" @keyup.enter="handleQuery" />
11
+          </el-form-item>
12
+          <el-form-item label="交易时间" style="width: 308px">
13
+            <el-date-picker
14
+                v-model="dateRangeCreditTime"
15
+                value-format="YYYY-MM-DD HH:mm:ss"
16
+                type="daterange"
17
+                range-separator="-"
18
+                start-placeholder="开始日期"
19
+                end-placeholder="结束日期"
20
+                :default-time="[new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 1, 1, 23, 59, 59)]"
21
+            />
22
+          </el-form-item>
23
+          <el-form-item label="交易类型" prop="creditType">
24
+            <el-select v-model="queryParams.creditType" placeholder="请选择交易类型" clearable>
25
+              <el-option v-for="dict in CREDITTYPE" :key="dict.value" :label="dict.label" :value="dict.value" />
26
+            </el-select>
27
+          </el-form-item>
28
+          <el-form-item>
29
+            <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
30
+            <el-button icon="Refresh" @click="resetQuery">重置</el-button>
31
+          </el-form-item>
32
+        </el-form>
33
+      </div>
34
+    </transition>
35
+
36
+    <el-card shadow="never">
37
+      <template #header>
38
+        <el-row :gutter="10" class="mb8">
39
+          <el-col :span="1.5">
40
+            <el-button v-hasPermi="['consumption:xfCreditaccount:export']" type="warning" plain icon="Download" @click="handleExport">导出</el-button>
41
+          </el-col>
42
+          <right-toolbar v-model:showSearch="showSearch" :columns="columns"  @query-table="getList"></right-toolbar>
43
+        </el-row>
44
+      </template>
45
+
46
+      <el-table v-loading="loading" :data="xfCreditaccountList" max-height="400" @selection-change="handleSelectionChange">
47
+        <!-- <el-table-column type="selection" width="55" align="center" /> -->
48
+        <el-table-column v-if="false" label="收支Id" align="center" prop="creditId" />
49
+        <el-table-column v-if="columns[1].visible" label="学/工号" align="center" prop="userNumb" />
50
+        <el-table-column v-if="columns[2].visible" label="用户姓名" align="center" prop="realName" />
51
+        <el-table-column v-if="columns[3].visible" label="部门名称" align="center" prop="deptName" />
52
+        <el-table-column v-if="columns[11].visible" label="交易时间" align="center" prop="creditTime" width="180">
53
+          <template #default="scope">
54
+            <span>{{ parseTime(scope.row.creditTime, '{y}-{m}-{d} {h}:{m}') }}</span>
55
+          </template>
56
+        </el-table-column>
57
+        <el-table-column v-if="columns[12].visible" label="交易类型" align="center" prop="creditType">
58
+          <template #default="scope">
59
+            <dict-tag :options="CREDITTYPE" :value="scope.row.creditType"/>
60
+          </template>
61
+        </el-table-column>
62
+        <el-table-column v-if="columns[14].visible" label="交易金额" align="center" prop="receiptMoney" />
63
+        <el-table-column v-if="columns[13].visible" label="支付方式" align="center" prop="payStyle">
64
+          <template #default="scope">
65
+            <dict-tag :options="PAYSTYLE" :value="scope.row.payStyle"/>
66
+          </template>
67
+        </el-table-column>
68
+        <el-table-column v-if="columns[6].visible" label="卡上余额" align="center" prop="cardValue" />
69
+        <el-table-column v-if="columns[8].visible" label="钱包类型" align="center" prop="bagType">
70
+          <template #default="scope">
71
+            <dict-tag :options="CARDBAGTYPE" :value="scope.row.bagType"/>
72
+          </template>
73
+        </el-table-column>
74
+        <el-table-column v-if="columns[7].visible" label="卡片类型名称" align="center" prop="cardTypeName" />
75
+        <el-table-column v-if="columns[4].visible" label="设备机号" align="center" prop="termNo" />
76
+        <el-table-column v-if="columns[5].visible" label="设备名称" align="center" prop="termName" />
77
+        <!-- <el-table-column v-if="columns[9].visible" label="工作站名称" align="center" prop="stationName" /> -->
78
+        <el-table-column v-if="columns[10].visible" label="营业员名称" align="center" prop="operatorName" />
79
+       
80
+        <!-- <el-table-column v-if="columns[15].visible" label="核对状态" align="center" prop="auditStatus">
81
+          <template #default="scope">
82
+            <dict-tag :options="sys_yes_no" :value="scope.row.auditStatus"/>
83
+          </template>
84
+        </el-table-column>
85
+        <el-table-column v-if="columns[16].visible" label="核对时间" align="center" prop="auditDate" width="180">
86
+          <template #default="scope">
87
+            <span>{{ parseTime(scope.row.auditDate, '{y}-{m}-{d}') }}</span>
88
+          </template>
89
+        </el-table-column>
90
+        <el-table-column v-if="columns[17].visible" label="消费记录标志位?" align="center" prop="recordStatus" />
91
+        <el-table-column v-if="columns[18].visible" label="备注" align="center" prop="remark" /> -->
92
+       
93
+      </el-table>
94
+      <!-- 翻页组件 -->
95
+      <pagination v-show="total > 0" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" :total="total" @pagination="getList" />
96
+    </el-card>
97
+    <!-- 添加或修改资金收支明细对话框 -->
98
+    <detail-form ref="detailFormRef" apped-to-body @success="getList" />
99
+  </div>
100
+</template>
101
+
102
+<script setup name="XfCreditaccount" lang="ts">
103
+/** 模块导入 */
104
+import { listXfCreditaccount, delXfCreditaccount } from '@/api/cardCenter/report/xfCreditaccount';
105
+import { XfCreditaccountVO } from '@/api/cardCenter/report/xfCreditaccount/types';
106
+
107
+
108
+defineOptions({ name: 'XfCreditaccount' });
109
+
110
+const { proxy } = getCurrentInstance() as ComponentInternalInstance;
111
+/** 当前页面引用的数据字典 */
112
+const { PAYSTYLE, CARDBAGTYPE, CREDITTYPE, sys_yes_no } = toRefs<any>(proxy?.useDict('PAYSTYLE', 'CARDBAGTYPE', 'CREDITTYPE', 'sys_yes_no'));
113
+// 是否加载遮罩层
114
+const loading = ref(true);
115
+// 是否显示查询项
116
+const showSearch = ref(true);
117
+const xfCreditaccountList = ref<XfCreditaccountVO[]>([]);
118
+// 列表选中的记录Id
119
+const ids = ref<Array<number | string>>([]);
120
+// 单选
121
+const single = ref(true);
122
+// 多选
123
+const multiple = ref(true);
124
+// 总记录数
125
+const total = ref(0);
126
+
127
+// 日期范围
128
+const dateRangeCreditTime = ref<[DateModelType, DateModelType]>(['', '']);
129
+// 查询窗体Ref
130
+const queryFormRef = ref<ElFormInstance>();
131
+
132
+const columns = ref<FieldOption[]>([
133
+      { key: 0, label: `收支Id`, visible: true, children: [] },
134
+      { key: 1, label: `学/工号`, visible: true, children: [] },
135
+      { key: 2, label: `用户姓名`, visible: true, children: [] },
136
+      { key: 3, label: `部门名称`, visible: true, children: [] },
137
+      { key: 4, label: `设备机号`, visible: true, children: [] },
138
+      { key: 5, label: `设备名称`, visible: true, children: [] },
139
+      { key: 6, label: `卡上余额`, visible: true, children: [] },
140
+      { key: 7, label: `卡片类型名称`, visible: true, children: [] },
141
+      { key: 8, label: `钱包类型`, visible: true, children: [] },
142
+      { key: 9, label: `工作站名称`, visible: true, children: [] },
143
+      { key: 10, label: `营业员名称`, visible: true, children: [] },
144
+      { key: 11, label: `交易时间`, visible: true, children: [] },
145
+      { key: 12, label: `交易类型`, visible: true, children: [] },
146
+      { key: 13, label: `支付方式`, visible: true, children: [] },
147
+      { key: 14, label: `交易金额`, visible: true, children: [] },
148
+      { key: 15, label: `核对状态`, visible: true, children: [] },
149
+      { key: 16, label: `核对时间`, visible: true, children: [] },
150
+      { key: 17, label: `消费记录标志位?`, visible: true, children: [] },
151
+      { key: 18, label: `备注`, visible: true, children: [] },
152
+]);
153
+
154
+// 查询参数
155
+const queryParams = reactive({
156
+  pageNum: 1,
157
+  pageSize: 10,
158
+  userNumb: '',
159
+  realName: '',
160
+  creditTime: undefined,
161
+  creditType: '',
162
+  payStyle: '',
163
+  params: {}
164
+});
165
+
166
+/** 查询资金收支明细列表 */
167
+const getList = async () => {
168
+  loading.value = true;
169
+  // queryParams.value.params = {};
170
+  proxy?.addDateRange(queryParams, dateRangeCreditTime.value, 'CreditTime');
171
+  const res = await listXfCreditaccount(queryParams);
172
+  xfCreditaccountList.value = res.rows;
173
+  total.value = res.total;
174
+  loading.value = false;
175
+};
176
+
177
+
178
+/** 搜索按钮操作 */
179
+const handleQuery = () => {
180
+  queryParams.pageNum = 1;
181
+  getList();
182
+};
183
+
184
+/** 重置按钮操作 */
185
+const resetQuery = () => {
186
+  dateRangeCreditTime.value = ['', ''];
187
+  queryFormRef.value?.resetFields();
188
+  handleQuery();
189
+};
190
+
191
+/** 多选框选中数据 */
192
+const handleSelectionChange = (selection: XfCreditaccountVO[]) => {
193
+  ids.value = selection.map((item) => item.creditId);
194
+  single.value = selection.length != 1;
195
+  multiple.value = !selection.length;
196
+};
197
+
198
+/** 删除按钮操作 */
199
+const handleDelete = async (row?: XfCreditaccountVO) => {
200
+  const _creditIds = row?.creditId || ids.value;
201
+  await proxy?.$modal.confirm('是否确认删除资金收支明细编号为"' + _creditIds + '"的数据项?').finally(() => (loading.value = false));
202
+  await delXfCreditaccount(_creditIds);
203
+  await getList();
204
+  proxy?.$modal.msgSuccess('删除成功');
205
+};
206
+
207
+/** 导出按钮操作 */
208
+const handleExport = () => {
209
+  proxy?.download(
210
+    'backstage/consumption/xfCreditaccount/export',
211
+    {
212
+      ...queryParams
213
+    },
214
+    `xfCreditaccount_${new Date().getTime()}.xlsx`);
215
+};
216
+/** 弹出框(增加、修改) */
217
+const detailFormRef = ref();
218
+const openForm = (type: string, row?: XfCreditaccountVO) => {
219
+  const id = row?.creditId || ids.value[0];
220
+  detailFormRef?.value.open(type, id);
221
+};
222
+onMounted(() => {
223
+  getList();
224
+});
225
+</script>

+ 208 - 0
src/views/consumption/report/xfConsumedetail/index.vue

@@ -0,0 +1,208 @@
1
+<template>
2
+  <div class="p-2 auto-overflow-y">
3
+    <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
4
+      <div v-show="showSearch" class="search">
5
+        <el-form ref="queryFormRef" :model="queryParams" :inline="true" label-width="68px" class="-mb-15px">
6
+          <el-form-item label="学/工号" prop="userNumb">
7
+            <el-input v-model="queryParams.userNumb" placeholder="请输入学/工号" clearable style="width: 240px" @keyup.enter="handleQuery" />
8
+          </el-form-item>
9
+          <el-form-item label="用户姓名" prop="realName">
10
+            <el-input v-model="queryParams.realName" placeholder="请输入用户姓名" clearable style="width: 240px" @keyup.enter="handleQuery" />
11
+          </el-form-item>
12
+          <el-form-item label="消费日期" style="width: 308px">
13
+            <el-date-picker
14
+                v-model="dateRangeConsumeDate"
15
+                value-format="YYYY-MM-DD HH:mm:ss"
16
+                type="daterange"
17
+                range-separator="-"
18
+                start-placeholder="开始日期"
19
+                end-placeholder="结束日期"
20
+                :default-time="[new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 1, 1, 23, 59, 59)]"
21
+            />
22
+          </el-form-item>
23
+          <el-form-item label="餐类" prop="mealType">
24
+            <el-select v-model="queryParams.mealType" placeholder="请选择餐类" clearable>
25
+              <el-option v-for="dict in meal_type" :key="dict.value" :label="dict.label" :value="dict.value" />
26
+            </el-select>
27
+          </el-form-item>
28
+          <el-form-item>
29
+            <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
30
+            <el-button icon="Refresh" @click="resetQuery">重置</el-button>
31
+          </el-form-item>
32
+        </el-form>
33
+      </div>
34
+    </transition>
35
+
36
+    <el-card shadow="never">
37
+      <template #header>
38
+        <el-row :gutter="10" class="mb8">
39
+          <el-col :span="1.5">
40
+            <el-button v-hasPermi="['consumption:xfConsumedetail:export']" type="warning" plain icon="Download" @click="handleExport">导出</el-button>
41
+          </el-col>
42
+          <right-toolbar v-model:showSearch="showSearch" :columns="columns"  @query-table="getList"></right-toolbar>
43
+        </el-row>
44
+      </template>
45
+
46
+      <el-table v-loading="loading" :data="xfConsumedetailList" max-height="calc(100vh - 27rem)" @selection-change="handleSelectionChange">
47
+        <!-- <el-table-column type="selection" width="55" align="center" /> -->
48
+        <el-table-column v-if="false" label="消费记录Id,主键" align="center" prop="consumeId" />
49
+        <!-- <el-table-column v-if="columns[1].visible" label="人员Id" align="center" prop="userId" /> -->
50
+        <el-table-column v-if="columns[2].visible" label="学/工号" align="center" prop="userNumb" />
51
+        <el-table-column v-if="columns[3].visible" label="用户姓名" align="center" prop="realName" />
52
+        <el-table-column v-if="columns[4].visible" label="部门名称" align="center" prop="deptName" />
53
+        <el-table-column v-if="columns[5].visible" label="消费日期" align="center" prop="consumeDate" width="180">
54
+          <template #default="scope">
55
+            <span>{{ parseTime(scope.row.consumeDate, '{y}-{m}-{d} {h}:{m}:{s}') }}</span>
56
+          </template>
57
+        </el-table-column>
58
+        <el-table-column v-if="columns[16].visible" label="餐类" align="center" prop="mealType">
59
+          <template #default="scope">
60
+            <dict-tag :options="meal_type" :value="scope.row.mealType"/>
61
+          </template>
62
+        </el-table-column>
63
+        <el-table-column v-if="columns[15].visible" label="钱包" align="center" prop="bagType">
64
+          <template #default="scope">
65
+            <dict-tag :options="CARDBAGTYPE" :value="scope.row.bagType"/>
66
+          </template>
67
+        </el-table-column>
68
+        <el-table-column v-if="columns[6].visible" label="消费金额" align="center" prop="consumeMoney" />
69
+        <el-table-column v-if="columns[9].visible" label="余额" align="center" prop="cardValue" />
70
+        <!-- <el-table-column v-if="columns[7].visible" label="卡流水号" align="center" prop="cardNo" /> -->
71
+        <el-table-column v-if="columns[8].visible" label="物理卡号" align="center" prop="factoryId" />
72
+        <!-- <el-table-column v-if="columns[10].visible" label="消费金额" align="center" prop="consumeBalance" /> -->
73
+        <!-- <el-table-column v-if="columns[11].visible" label="设备机号" align="center" prop="termNo" /> -->
74
+        <el-table-column v-if="columns[14].visible" label="房间名称" align="center" prop="roomName" />
75
+        <el-table-column v-if="columns[12].visible" label="设备名称" align="center" prop="termName" />
76
+        <!-- <el-table-column v-if="columns[13].visible" label="状态标识" align="center" prop="statusFlag" /> -->
77
+        <!-- <el-table-column v-if="columns[15].visible" label="钱包类型" align="center" prop="bagType" /> -->
78
+        
79
+      </el-table>
80
+      <!-- 翻页组件 -->
81
+      <pagination v-show="total > 0" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" :total="total" @pagination="getList" />
82
+    </el-card>
83
+    <!-- 添加或修改消费明细对话框 -->
84
+    <detail-form ref="detailFormRef" apped-to-body @success="getList" />
85
+  </div>
86
+</template>
87
+
88
+<script setup name="XfConsumedetail" lang="ts">
89
+/** 模块导入 */
90
+import { listXfConsumedetail, delXfConsumedetail } from '@/api/consumption/report/xfConsumedetail';
91
+import { XfConsumedetailVO } from '@/api/consumption/report/xfConsumedetail/types';
92
+
93
+defineOptions({ name: 'XfConsumedetail' });
94
+
95
+const { proxy } = getCurrentInstance() as ComponentInternalInstance;
96
+/** 当前页面引用的数据字典 */
97
+const { meal_type, CARDBAGTYPE } = toRefs<any>(proxy?.useDict('meal_type', 'CARDBAGTYPE'));
98
+// 是否加载遮罩层
99
+const loading = ref(true);
100
+// 是否显示查询项
101
+const showSearch = ref(true);
102
+const xfConsumedetailList = ref<XfConsumedetailVO[]>([]);
103
+// 列表选中的记录Id
104
+const ids = ref<Array<number | string>>([]);
105
+// 单选
106
+const single = ref(true);
107
+// 多选
108
+const multiple = ref(true);
109
+// 总记录数
110
+const total = ref(0);
111
+
112
+// 日期范围
113
+const dateRangeConsumeDate = ref<[DateModelType, DateModelType]>(['', '']);
114
+// 查询窗体Ref
115
+const queryFormRef = ref<ElFormInstance>();
116
+
117
+const columns = ref<FieldOption[]>([
118
+      { key: 0, label: `消费记录Id,主键`, visible: true, children: [] },
119
+      { key: 1, label: `人员Id`, visible: true, children: [] },
120
+      { key: 2, label: `学/工号`, visible: true, children: [] },
121
+      { key: 3, label: `用户姓名`, visible: true, children: [] },
122
+      { key: 4, label: `部门名称`, visible: true, children: [] },
123
+      { key: 5, label: `消费日期`, visible: true, children: [] },
124
+      { key: 6, label: `消费金额`, visible: true, children: [] },
125
+      { key: 7, label: `卡流水号`, visible: true, children: [] },
126
+      { key: 8, label: `物理卡号`, visible: true, children: [] },
127
+      { key: 9, label: `余额`, visible: true, children: [] },
128
+      { key: 10, label: `消费金额`, visible: true, children: [] },
129
+      { key: 11, label: `设备机号`, visible: true, children: [] },
130
+      { key: 12, label: `设备名称`, visible: true, children: [] },
131
+      { key: 13, label: `状态标识`, visible: true, children: [] },
132
+      { key: 14, label: `房间名称`, visible: true, children: [] },
133
+      { key: 15, label: `钱包类型`, visible: true, children: [] },
134
+      { key: 16, label: `餐类Id`, visible: true, children: [] },
135
+]);
136
+
137
+// 查询参数
138
+const queryParams = reactive({
139
+  pageNum: 1,
140
+  pageSize: 10,
141
+  userId: undefined,
142
+  userNumb: '',
143
+  realName: '',
144
+  consumeDate: undefined,
145
+  mealType: undefined,
146
+  params: {}
147
+});
148
+
149
+/** 查询消费明细列表 */
150
+const getList = async () => {
151
+  loading.value = true;
152
+  // queryParams.value.params = {};
153
+  proxy?.addDateRange(queryParams, dateRangeConsumeDate.value, 'ConsumeDate');
154
+  const res = await listXfConsumedetail(queryParams);
155
+  xfConsumedetailList.value = res.rows;
156
+  total.value = res.total;
157
+  loading.value = false;
158
+};
159
+
160
+
161
+/** 搜索按钮操作 */
162
+const handleQuery = () => {
163
+  queryParams.pageNum = 1;
164
+  getList();
165
+};
166
+
167
+/** 重置按钮操作 */
168
+const resetQuery = () => {
169
+  dateRangeConsumeDate.value = ['', ''];
170
+  queryFormRef.value?.resetFields();
171
+  handleQuery();
172
+};
173
+
174
+/** 多选框选中数据 */
175
+const handleSelectionChange = (selection: XfConsumedetailVO[]) => {
176
+  ids.value = selection.map((item) => item.consumeId);
177
+  single.value = selection.length != 1;
178
+  multiple.value = !selection.length;
179
+};
180
+
181
+/** 删除按钮操作 */
182
+const handleDelete = async (row?: XfConsumedetailVO) => {
183
+  const _consumeIds = row?.consumeId || ids.value;
184
+  await proxy?.$modal.confirm('是否确认删除消费明细编号为"' + _consumeIds + '"的数据项?').finally(() => (loading.value = false));
185
+  await delXfConsumedetail(_consumeIds);
186
+  await getList();
187
+  proxy?.$modal.msgSuccess('删除成功');
188
+};
189
+
190
+/** 导出按钮操作 */
191
+const handleExport = () => {
192
+  proxy?.download(
193
+    'backstage/consumption/xfConsumedetail/export',
194
+    {
195
+      ...queryParams
196
+    },
197
+    `xfConsumedetail_${new Date().getTime()}.xlsx`);
198
+};
199
+/** 弹出框(增加、修改) */
200
+const detailFormRef = ref();
201
+const openForm = (type: string, row?: XfConsumedetailVO) => {
202
+  const id = row?.consumeId || ids.value[0];
203
+  detailFormRef?.value.open(type, id);
204
+};
205
+onMounted(() => {
206
+  getList();
207
+});
208
+</script>