purchaseHistory.vue 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. <!-- 模板区域 -->
  2. <template>
  3. <div>
  4. <PageMain class="vh100 flex-1 overflow-hidden flex flex-col">
  5. <SearchForm :fields="fields" :formInline="formInline" :onSearch="findpage" :onReset="resetForm" />
  6. <div class="flex-1 overflow-auto">
  7. <ComplexTable :tableData="tableData" :columns="columns" :showIndex="false" :columnwidth="250"
  8. :showOperation="false" :showSelect="false" :pageInfo="pageInfo" @getList="getList">
  9. <template #customSlot="{ bodyCell: { scope, column } }">
  10. <template v-if="column.prop == 'apperId'">
  11. <el-button link type="primary" @click="purchaseVoucher(scope.row.apperId)">查看凭证</el-button>
  12. </template>
  13. </template>
  14. <template v-slot:search="scope">
  15. {{ scope.slotData.label }}
  16. </template>
  17. </ComplexTable>
  18. </div>
  19. </PageMain>
  20. </div>
  21. </template>
  22. <!-- 行为区域 -->
  23. <script lang='ts' setup>
  24. import { ref, reactive, onBeforeMount } from 'vue'
  25. import { ElMessage, ElMessageBox } from 'element-plus'
  26. import api from '@/api'
  27. // 页面加载时获取机构列表
  28. onBeforeMount(() => {
  29. getGradeOptions();
  30. findpage();
  31. });
  32. interface PageInfo {
  33. pageNum: number;
  34. pageSize: number;
  35. sizes: number[];
  36. total: number;
  37. }
  38. // 机构树相关变量
  39. const tableData = ref([
  40. {
  41. "id": "2008711122119659522",
  42. "name": "杨密",
  43. "mobile": "15513920005",
  44. "userId": "99140602006",
  45. "deptId": null,
  46. "deptName": "朔州朔城区营业部",
  47. "grade": "3",
  48. "gradeAfter": "4",
  49. "lockCommission": 0,
  50. "purchasingTime": "2026-01-07 09:23:46",
  51. "apperId": "2008711122077716482",
  52. "pageNum": 1,
  53. "pageSize": 10,
  54. "startTime": null
  55. }
  56. ]);//表格数据
  57. const showViewer = ref(false);//是否显示查看凭证弹窗
  58. const formInline = reactive({
  59. name: "",//姓名
  60. mobile: "",//手机号
  61. userId: "",//工号
  62. signingTime: [],
  63. })
  64. const pageInfo = ref({
  65. pageNum: 1,
  66. pageSize: 20,
  67. sizes: [10, 20, 30, 40, 50],
  68. total: 0,
  69. });
  70. // 获取人员等级列表
  71. const userGradeList = ref()
  72. const getGradeOptions = () => {
  73. api.partnerApi.queryGradeName().then((res: any) => {
  74. if (res.code === 200) {
  75. userGradeList.value = res.data;
  76. }
  77. })
  78. }
  79. //表格字段数据
  80. const fields = ref([
  81. { label: "姓名", model: "name", type: "input", placeholder: "请输入姓名" },
  82. {
  83. label: "手机号", model: "mobile", type: "input", placeholder: "请输入手机号"
  84. },
  85. {
  86. label: "工号", model: "userId", type: "input", placeholder: "请输入工号"
  87. },
  88. {
  89. label: "购买时间", model: "signingTime", type: "date", dateType: "daterange", startplaceholder: "开始时间", endplaceholder: "结束时间",
  90. format: "YYYY-MM-DD", valueFormat: "YYYY-MM-DD",
  91. },
  92. ]);
  93. const columns = [
  94. { prop: "name", label: "姓名", },
  95. { prop: "mobile", label: "手机号", width: '200' },
  96. { prop: "userId", label: "工号", width: '200' },
  97. { prop: "deptName", label: "所属机构", width: '200' },
  98. {
  99. prop: "grade", label: "降级前", width: '200',
  100. formatter: (row: any) => {
  101. return userGradeList.value?.find((item: any) => item.grade === row.grade)?.gradeName || '未知等级';
  102. }
  103. },
  104. {
  105. prop: "gradeAfter", label: "降级后", width: '200',
  106. formatter: (row: any) => {
  107. return userGradeList.value?.find((item: any) => item.grade === row.gradeAfter)?.gradeName || '未知等级';
  108. }
  109. },
  110. { prop: "lockCommission", label: "锁定佣金", width: '200' },
  111. { prop: "purchasingTime", label: "购买时间", width: '200' },
  112. { prop: "apperId", label: "购买凭证", width: '200', component: "customSlot" },
  113. ];
  114. //分页事件
  115. function getList(item: PageInfo) {
  116. pageInfo.value.pageNum = item.pageNum;
  117. pageInfo.value.pageSize = item.pageSize;
  118. findpage();
  119. };
  120. const resetForm = () => {
  121. Object.assign(formInline, {
  122. name: "",//姓名
  123. mobile: "",//手机号
  124. userId: "",//工号
  125. signingTime: [],
  126. })
  127. findpage();
  128. }
  129. //数据查询
  130. function findpage() {
  131. let query = { ...formInline }
  132. api.partnerApi.kickbackChangeQueryPage({ pages: pageInfo.value.pageNum, size: pageInfo.value.pageSize, ...query }).then((res: any) => {
  133. if (res.code == '200') {
  134. // tableData.value = res.data.records;
  135. pageInfo.value.pageNum = res.data.current;
  136. pageInfo.value.pageSize = res.data.size;
  137. pageInfo.value.total = res.data.total;
  138. } else {
  139. }
  140. });
  141. }
  142. const purchaseVoucher = (id: any) => {
  143. api.partnerApi.purchaseviewVouchers(id).then((res: any) => {
  144. if (res.code == '200') {
  145. ElMessage({
  146. type: 'success',
  147. message: res.msg,
  148. });
  149. showViewer.value = true;
  150. } else {
  151. ElMessage({
  152. type: 'error',
  153. message: res.msg,
  154. });
  155. }
  156. });
  157. }
  158. </script>
  159. <!-- 样式区域 -->
  160. <style lang='scss' scoped>
  161. .custom-tree-node {
  162. flex: 1;
  163. display: flex;
  164. align-items: center;
  165. justify-content: space-between;
  166. font-size: 14px;
  167. padding-right: 8px;
  168. }
  169. :deep(.el-dropdown-link) {
  170. cursor: pointer;
  171. color: var(--el-color-primary);
  172. display: flex;
  173. align-items: center;
  174. margin-left: 15px;
  175. }
  176. </style>