index.vue 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. <template>
  2. <div class="layout-padding">
  3. <div class="layout-padding-auto layout-padding-view">
  4. <el-row class="ml10" v-show="showSearch">
  5. <el-form :inline="true" :model="state.queryForm" @keyup.enter="getDataList" ref="queryRef">
  6. <el-form-item :label="$t('agentUser.agentName')" prop="query">
  7. <el-input :placeholder="$t('agentUser.searchAgentAccount')" style="max-width: 180px" v-model="state.queryForm.query" />
  8. </el-form-item>
  9. <el-form-item>
  10. <el-button @click="getDataList" icon="search" type="primary">
  11. {{ $t('common.queryBtn') }}
  12. </el-button>
  13. <el-button @click="resetQuery" icon="Refresh">{{ $t('common.resetBtn') }} </el-button>
  14. </el-form-item>
  15. </el-form>
  16. </el-row>
  17. <el-row>
  18. <div class="mb8" style="width: 100%">
  19. <el-button @click="formDialogRef.openDialog()" class="ml10" icon="folder-add" type="primary" v-auth="'agent_admin'">
  20. {{ $t('common.addBtn') }}
  21. </el-button>
  22. <right-toolbar
  23. @queryTable="getDataList"
  24. class="ml10"
  25. style="float: right; margin-right: 20px"
  26. v-model:showSearch="showSearch"
  27. ></right-toolbar>
  28. </div>
  29. </el-row>
  30. <el-table
  31. :data="state.dataList"
  32. @selection-change="handleSelectionChange"
  33. @sort-change="sortChangeHandle"
  34. style="width: 100%"
  35. v-loading="state.loading"
  36. border
  37. :cell-style="tableStyle.cellStyle"
  38. :header-cell-style="tableStyle.headerCellStyle"
  39. >
  40. <el-table-column align="center" type="selection" width="40" />
  41. <el-table-column :label="$t('agentUser.agentId')" prop="userId" show-overflow-tooltip />
  42. <el-table-column :label="$t('agentUser.agentName')" prop="agentName" show-overflow-tooltip />
  43. <el-table-column label="可用余额" prop="totalAmount" show-overflow-tooltip>
  44. <template #default="scope">
  45. {{ scope.row.availableAmount ? `¥${scope.row.availableAmount.toFixed(2)}` : '¥0.00' }}
  46. </template>
  47. </el-table-column>
  48. <el-table-column label="冻结金额" prop="freezeAmount" show-overflow-tooltip>
  49. <template #default="scope">
  50. {{ scope.row.freezeAmount ? `¥${scope.row.freezeAmount.toFixed(2)}` : '¥0.00' }}
  51. </template>
  52. </el-table-column>
  53. <el-table-column label="总提现金额" prop="withdrawnAmount" show-overflow-tooltip>
  54. <template #default="scope">
  55. {{ scope.row.withdrawnAmount ? `¥${scope.row.withdrawnAmount.toFixed(2)}` : '¥0.00' }}
  56. </template>
  57. </el-table-column>
  58. <el-table-column label="结算周期" prop="settlementDays" show-overflow-tooltip>
  59. <template #default="scope">
  60. <el-tag type="info" size="small">T+{{ scope.row.settlementDays || 0 }}</el-tag>
  61. </template>
  62. </el-table-column>
  63. <el-table-column :label="$t('agentUser.status')" prop="status" show-overflow-tooltip>
  64. <template #default="scope">
  65. <el-switch
  66. v-model="scope.row.status"
  67. :active-value="true"
  68. :inactive-value="false"
  69. @change="handleStatusChange(scope.row)"
  70. v-auth="'agent_admin'"
  71. />
  72. </template>
  73. </el-table-column>
  74. <el-table-column :label="$t('agentUser.operation')" width="360">
  75. <template #default="scope">
  76. <el-button icon="View" @click="handleView(scope.row)" text type="primary" v-auth="'agent_admin'">{{ $t('agentUser.viewBtn') }}</el-button>
  77. <el-button icon="edit-pen" @click="formDialogRef.openDialog(scope.row.userId)" text type="primary" v-auth="'agent_admin'"
  78. >{{ $t('common.editBtn') }}
  79. </el-button>
  80. <el-button icon="Key" @click="handleChangePwd(scope.row)" text type="warning" v-auth="'agent_admin'">{{
  81. $t('agentUser.changePwdBtn')
  82. }}</el-button>
  83. <el-button icon="Setting" @click="handleAgentPayment(scope.row, 'HARVEST')" text type="success" v-auth="'agent_payment_type_query'"
  84. >代收
  85. </el-button>
  86. <el-button icon="Setting" @click="handleAgentPayment(scope.row, 'PAY')" text type="warning" v-auth="'agent_payment_type_query'"
  87. >代付
  88. </el-button>
  89. </template>
  90. </el-table-column>
  91. </el-table>
  92. <pagination @current-change="currentChangeHandle" @size-change="sizeChangeHandle" v-bind="state.pagination" />
  93. </div>
  94. <!-- 编辑、新增 -->
  95. <form-dialog @refresh="getDataList(false)" ref="formDialogRef" />
  96. <!-- 修改密码 -->
  97. <change-pwd-dialog @refresh="getDataList(false)" ref="changePwdDialogRef" />
  98. <!-- 代理商支付通道配置 -->
  99. <agent-payment-dialog ref="agentPaymentDialogRef" />
  100. </div>
  101. </template>
  102. <script lang="ts" name="systemAgentUser" setup>
  103. import { BasicTableProps, useTable } from '/@/hooks/table';
  104. import { fetchList, changeStatus } from '/@/api/agent';
  105. import { useMessage, useMessageBox } from '/@/hooks/message';
  106. import { useI18n } from 'vue-i18n';
  107. const { t } = useI18n();
  108. // 引入组件
  109. const FormDialog = defineAsyncComponent(() => import('./form.vue'));
  110. const ChangePwdDialog = defineAsyncComponent(() => import('./changePwd.vue'));
  111. const AgentPaymentDialog = defineAsyncComponent(() => import('./agentPaymentDialog.vue'));
  112. // 定义变量内容
  113. const formDialogRef = ref();
  114. const changePwdDialogRef = ref();
  115. const agentPaymentDialogRef = ref();
  116. // 搜索变量
  117. const queryRef = ref();
  118. const showSearch = ref(true);
  119. // 多选变量
  120. const selectObjs = ref([]) as any;
  121. const multiple = ref(true);
  122. const state: BasicTableProps = reactive<BasicTableProps>({
  123. queryForm: {},
  124. pageList: fetchList,
  125. descs: ['create_time'],
  126. });
  127. // table hook
  128. const { getDataList, currentChangeHandle, sizeChangeHandle, sortChangeHandle, tableStyle } = useTable(state);
  129. // 清空搜索条件
  130. const resetQuery = () => {
  131. // 清空搜索条件
  132. queryRef.value.resetFields();
  133. // 清空多选
  134. selectObjs.value = [];
  135. getDataList();
  136. };
  137. // 多选事件
  138. const handleSelectionChange = (objs: { userId: string }[]) => {
  139. selectObjs.value = objs.map(({ userId }) => userId);
  140. multiple.value = !objs.length;
  141. };
  142. // 状态切换
  143. const handleStatusChange = async (row: any) => {
  144. try {
  145. await changeStatus(row.userId);
  146. useMessage().success(t('agentUser.statusChangeSuccess'));
  147. getDataList(false);
  148. } catch (err: any) {
  149. useMessage().error(err.msg);
  150. // 恢复原状态
  151. row.status = !row.status;
  152. }
  153. };
  154. // 批量启用/禁用
  155. const handleBatchChangeStatus = async () => {
  156. if (selectObjs.value.length === 0) {
  157. useMessage().warning('请选择要操作的数据');
  158. return;
  159. }
  160. try {
  161. await useMessageBox().confirm('确认要批量修改状态吗?');
  162. for (const id of selectObjs.value) {
  163. await changeStatus(id);
  164. }
  165. useMessage().success('批量操作成功');
  166. getDataList(false);
  167. } catch (err: any) {
  168. if (err !== 'cancel') {
  169. useMessage().error(err.msg || '操作失败');
  170. }
  171. }
  172. };
  173. // 查看详情
  174. const handleView = (row: any) => {
  175. formDialogRef.value.openDialog(row.userId, true);
  176. };
  177. // 修改密码
  178. const handleChangePwd = (row: any) => {
  179. changePwdDialogRef.value.openDialog(row.userId);
  180. };
  181. // 打开代理商支付通道配置
  182. const handleAgentPayment = (row: any, type: 'PAY' | 'HARVEST') => {
  183. agentPaymentDialogRef.value.openDialog(row.userId, type);
  184. };
  185. </script>