index.vue 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  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="$t('agentUser.status')" prop="status" show-overflow-tooltip>
  44. <template #default="scope">
  45. <el-switch
  46. v-model="scope.row.status"
  47. :active-value="true"
  48. :inactive-value="false"
  49. @change="handleStatusChange(scope.row)"
  50. v-auth="'agent_admin'"
  51. />
  52. </template>
  53. </el-table-column>
  54. <el-table-column :label="$t('agentUser.operation')" width="360">
  55. <template #default="scope">
  56. <el-button icon="View" @click="handleView(scope.row)" text type="primary" v-auth="'agent_admin'">{{ $t('agentUser.viewBtn') }}</el-button>
  57. <el-button icon="edit-pen" @click="formDialogRef.openDialog(scope.row.userId)" text type="primary" v-auth="'agent_admin'"
  58. >{{ $t('common.editBtn') }}
  59. </el-button>
  60. <el-button icon="Key" @click="handleChangePwd(scope.row)" text type="warning" v-auth="'agent_admin'">{{
  61. $t('agentUser.changePwdBtn')
  62. }}</el-button>
  63. <el-button icon="Setting" @click="handleAgentPayment(scope.row, 'HARVEST')" text type="success" v-auth="'agent_payment_type_query'"
  64. >代收
  65. </el-button>
  66. <el-button icon="Setting" @click="handleAgentPayment(scope.row, 'PAY')" text type="warning" v-auth="'agent_payment_type_query'"
  67. >代付
  68. </el-button>
  69. </template>
  70. </el-table-column>
  71. </el-table>
  72. <pagination @current-change="currentChangeHandle" @size-change="sizeChangeHandle" v-bind="state.pagination" />
  73. </div>
  74. <!-- 编辑、新增 -->
  75. <form-dialog @refresh="getDataList(false)" ref="formDialogRef" />
  76. <!-- 修改密码 -->
  77. <change-pwd-dialog @refresh="getDataList(false)" ref="changePwdDialogRef" />
  78. <!-- 代理商支付通道配置 -->
  79. <agent-payment-dialog ref="agentPaymentDialogRef" />
  80. </div>
  81. </template>
  82. <script lang="ts" name="systemAgentUser" setup>
  83. import { BasicTableProps, useTable } from '/@/hooks/table';
  84. import { fetchList, changeStatus } from '/@/api/agent';
  85. import { useMessage, useMessageBox } from '/@/hooks/message';
  86. import { useI18n } from 'vue-i18n';
  87. const { t } = useI18n();
  88. // 引入组件
  89. const FormDialog = defineAsyncComponent(() => import('./form.vue'));
  90. const ChangePwdDialog = defineAsyncComponent(() => import('./changePwd.vue'));
  91. const AgentPaymentDialog = defineAsyncComponent(() => import('./agentPaymentDialog.vue'));
  92. // 定义变量内容
  93. const formDialogRef = ref();
  94. const changePwdDialogRef = ref();
  95. const agentPaymentDialogRef = ref();
  96. // 搜索变量
  97. const queryRef = ref();
  98. const showSearch = ref(true);
  99. // 多选变量
  100. const selectObjs = ref([]) as any;
  101. const multiple = ref(true);
  102. const state: BasicTableProps = reactive<BasicTableProps>({
  103. queryForm: {},
  104. pageList: fetchList,
  105. descs: ['create_time'],
  106. });
  107. // table hook
  108. const { getDataList, currentChangeHandle, sizeChangeHandle, sortChangeHandle, tableStyle } = useTable(state);
  109. // 清空搜索条件
  110. const resetQuery = () => {
  111. // 清空搜索条件
  112. queryRef.value.resetFields();
  113. // 清空多选
  114. selectObjs.value = [];
  115. getDataList();
  116. };
  117. // 多选事件
  118. const handleSelectionChange = (objs: { userId: string }[]) => {
  119. selectObjs.value = objs.map(({ userId }) => userId);
  120. multiple.value = !objs.length;
  121. };
  122. // 状态切换
  123. const handleStatusChange = async (row: any) => {
  124. try {
  125. await changeStatus(row.userId);
  126. useMessage().success(t('agentUser.statusChangeSuccess'));
  127. getDataList(false);
  128. } catch (err: any) {
  129. useMessage().error(err.msg);
  130. // 恢复原状态
  131. row.status = !row.status;
  132. }
  133. };
  134. // 批量启用/禁用
  135. const handleBatchChangeStatus = async () => {
  136. if (selectObjs.value.length === 0) {
  137. useMessage().warning('请选择要操作的数据');
  138. return;
  139. }
  140. try {
  141. await useMessageBox().confirm('确认要批量修改状态吗?');
  142. for (const id of selectObjs.value) {
  143. await changeStatus(id);
  144. }
  145. useMessage().success('批量操作成功');
  146. getDataList(false);
  147. } catch (err: any) {
  148. if (err !== 'cancel') {
  149. useMessage().error(err.msg || '操作失败');
  150. }
  151. }
  152. };
  153. // 查看详情
  154. const handleView = (row: any) => {
  155. formDialogRef.value.openDialog(row.userId, true);
  156. };
  157. // 修改密码
  158. const handleChangePwd = (row: any) => {
  159. changePwdDialogRef.value.openDialog(row.userId);
  160. };
  161. // 打开代理商支付通道配置
  162. const handleAgentPayment = (row: any, type: 'PAY' | 'HARVEST') => {
  163. agentPaymentDialogRef.value.openDialog(row.userId, type);
  164. };
  165. </script>