| <template> | 
|   <LoadingLayout :loading="state.loading"> | 
|     <AppContainer> | 
|       <ProTableQueryFilterBar @on-reset="reset"> | 
|         <template #query> | 
|           <QueryFilterItem> | 
|             <SearchInput | 
|               v-model="extraParamState.keywords" | 
|               style="width: 260px" | 
|               placeholder="姓名/用户名/手机号" | 
|               @on-click-search="getList" | 
|             > | 
|             </SearchInput> | 
|           </QueryFilterItem> | 
|         </template> | 
|         <template #btn> | 
|           <el-button @click="openDialog()" icon="Plus" type="primary">新增</el-button> | 
|         </template> | 
|       </ProTableQueryFilterBar> | 
|       <ProTableV2 | 
|         v-bind="proTableProps" | 
|         :columns="UserManageColumns" | 
|         :operationBtns="operationBtns" | 
|       > | 
|         <template #status="{ row }"> | 
|           <FieldSwitch | 
|             v-model="row.status" | 
|             active-text="启用" | 
|             :active-value="EnumUserStatus.Normal" | 
|             inactive-text="禁用" | 
|             :inactive-value="EnumUserStatus.Disabled" | 
|             :before-change="() => setUserInfoStatus(row)" | 
|           /> | 
|         </template> | 
|       </ProTableV2> | 
|     </AppContainer> | 
|     <AddOrEditUserDialog v-bind="dialogProps" /> | 
|     <ResetPasswordDialog v-bind="resetPasswordDialogProps"></ResetPasswordDialog> | 
|     <ResetOperatorPasswordDialog | 
|       v-bind="resetOperatorPasswordDialogProps" | 
|     ></ResetOperatorPasswordDialog> | 
|   </LoadingLayout> | 
| </template> | 
|   | 
| <script setup lang="ts"> | 
| import { | 
|   ProTableQueryFilterBar, | 
|   ProTableV2, | 
|   SearchInput, | 
|   LoadingLayout, | 
|   AppContainer, | 
|   QueryFilterItem, | 
|   useTable, | 
|   useFormDialog, | 
|   defineOperationBtns, | 
|   FieldSwitch, | 
| } from '@bole-core/components'; | 
| import * as userServices from '@/services/api/user'; | 
| import { UserManageColumns } from './constants'; | 
| import { EnumUserStatus, EnumUserStatusText } from '@/constants'; | 
| import { ModelValueType } from 'element-plus'; | 
| import { Message } from '@bole-core/core'; | 
| import AddOrEditUserDialog from './components/AddOrEditUserDialog.vue'; | 
| import ResetPasswordDialog from './components/ResetPasswordDialog.vue'; | 
| import ResetOperatorPasswordDialog from './components/ResetOperatorPasswordDialog.vue'; | 
|   | 
| defineOptions({ | 
|   name: 'UserManageList', | 
| }); | 
|   | 
| const operationBtns = defineOperationBtns([ | 
|   { | 
|     data: { | 
|       enCode: 'editBtn', | 
|       name: '编辑', | 
|     }, | 
|     emits: { | 
|       onClick: (role) => openDialog(role), | 
|     }, | 
|   }, | 
|   { | 
|     data: { | 
|       enCode: 'resetPasswordBtn', | 
|       name: '重置密码', | 
|     }, | 
|     props: { | 
|       type: 'danger', | 
|     }, | 
|     emits: { | 
|       onClick: (role) => openResetPasswordDialog(role), | 
|     }, | 
|   }, | 
|   { | 
|     data: { | 
|       enCode: 'resetOperatorPasswordBtn', | 
|       name: '重置操作密码', | 
|     }, | 
|     props: { | 
|       type: 'danger', | 
|     }, | 
|     emits: { | 
|       onClick: (role) => openResetOperatorPasswordDialog(role), | 
|     }, | 
|   }, | 
| ]); | 
|   | 
| const router = useRouter(); | 
| const BaseState = { | 
|   loading: true, | 
| }; | 
|   | 
| const state = reactive({ ...BaseState }); | 
|   | 
| onMounted(async () => { | 
|   await getList(); | 
|   state.loading = false; | 
| }); | 
|   | 
| const { | 
|   getDataSource: getList, | 
|   proTableProps, | 
|   paginationState, | 
|   extraParamState, | 
|   reset, | 
| } = useTable( | 
|   async ({ pageIndex, pageSize }, extraParamState) => { | 
|     try { | 
|       let params: API.GetUsersQuery = { | 
|         pageModel: { | 
|           rows: pageSize, | 
|           page: pageIndex, | 
|           orderInput: extraParamState.orderInput, | 
|         }, | 
|         keywords: extraParamState.keywords, | 
|       }; | 
|   | 
|       let res = await userServices.getUsers(params, { | 
|         showLoading: !state.loading, | 
|       }); | 
|       return res; | 
|     } catch (error) {} | 
|   }, | 
|   { | 
|     defaultExtraParams: { | 
|       keywords: '', | 
|       status: '', | 
|       time: [] as unknown as ModelValueType, | 
|       orderInput: [{ property: 'id', order: EnumPagedListOrder.Desc }], | 
|     }, | 
|     columnsRenderProps: { | 
|       roles: { | 
|         formatter: (role: API.GetOperationUserInfosQueryResultItem) => | 
|           role.roles?.length > 0 ? role.roles.map((x) => x.name).join(',') : '', | 
|       }, | 
|       // status: { type: 'enum', valueEnum: EnumUserStatusText }, | 
|     }, | 
|   } | 
| ); | 
|   | 
| const { dialogProps, handleEdit, handleAdd, editForm, dialogState } = useFormDialog({ | 
|   onConfirm: handleAddOrEdit, | 
|   defaultFormParams: { | 
|     id: '', | 
|     name: '', | 
|     userName: '', | 
|     phoneNumber: '', | 
|     remark: '', | 
|     status: '' as any as EnumUserStatus, | 
|     roleIds: [] as string[], | 
|     password: '', | 
|     operatorPassword: '', | 
|   }, | 
| }); | 
|   | 
| function openDialog(row?: API.GetOperationUserInfosQueryResultItem) { | 
|   if (row) { | 
|     handleEdit({ | 
|       id: row.id, | 
|       name: row.name, | 
|       userName: row.userName, | 
|       phoneNumber: row.phoneNumber, | 
|       remark: row.remark, | 
|       roleIds: row.roles?.map((x) => x.id) ?? [], | 
|       status: row.status, | 
|       password: '', | 
|       operatorPassword: '', | 
|     }); | 
|   } else { | 
|     handleAdd(); | 
|   } | 
| } | 
|   | 
| async function handleAddOrEdit() { | 
|   const isEdit = editForm.id; | 
|   try { | 
|     let params: API.SaveUserCommand = { | 
|       name: editForm.name, | 
|       userName: editForm.userName, | 
|       phoneNumber: editForm.phoneNumber, | 
|       roleIds: editForm.roleIds, | 
|       remark: editForm.remark, | 
|       status: editForm.status ? editForm.status : EnumUserStatus.Normal, | 
|     }; | 
|     if (!editForm.id) { | 
|       params.password = editForm.password; | 
|       params.operatorPassword = editForm.operatorPassword; | 
|     } | 
|     if (editForm.id) { | 
|       params.id = editForm.id; | 
|     } | 
|     let res = await userServices.saveUser(params); | 
|     if (res) { | 
|       Message.successMessage('操作成功'); | 
|       getList(isEdit ? paginationState.pageIndex : 1); | 
|       dialogState.dialogVisible = false; | 
|     } | 
|   } catch (error) {} | 
| } | 
|   | 
| const { | 
|   dialogProps: resetOperatorPasswordDialogProps, | 
|   handleAdd: handleResetOperatorPasswordAdd, | 
|   editForm: resetOperatorPasswordEditForm, | 
| } = useFormDialog({ | 
|   onConfirm: resetOperatorPassword, | 
|   defaultFormParams: { | 
|     ids: '', | 
|     operatorPassword: '', | 
|   }, | 
| }); | 
|   | 
| function openResetOperatorPasswordDialog(row: API.GetOperationUserInfosQueryResultItem) { | 
|   handleResetOperatorPasswordAdd({ | 
|     ids: row.id, | 
|     operatorPassword: '', | 
|   }); | 
| } | 
|   | 
| async function resetOperatorPassword() { | 
|   try { | 
|     let params: API.ResetUserOperatorPasswordsCommand = { | 
|       ids: [resetOperatorPasswordEditForm.ids], | 
|       operatorPassword: resetOperatorPasswordEditForm.operatorPassword, | 
|     }; | 
|     let res = await userServices.resetUserOperatorPasswords(params); | 
|     if (res) { | 
|       Message.successMessage('操作成功'); | 
|       getList(paginationState.pageIndex); | 
|     } | 
|   } catch (error) {} | 
| } | 
| const { | 
|   dialogProps: resetPasswordDialogProps, | 
|   handleAdd: handleResetPasswordAdd, | 
|   editForm: resetPasswordEditForm, | 
| } = useFormDialog({ | 
|   onConfirm: resetPassword, | 
|   defaultFormParams: { | 
|     ids: '', | 
|     password: '', | 
|   }, | 
| }); | 
|   | 
| function openResetPasswordDialog(row: API.GetOperationUserInfosQueryResultItem) { | 
|   handleResetPasswordAdd({ | 
|     ids: row.id, | 
|     password: '', | 
|   }); | 
| } | 
|   | 
| async function setUserInfoStatus(row: API.GetOperationUserInfosQueryResultItem) { | 
|   try { | 
|     await Message.tipMessage( | 
|       `确认要${row.status === EnumUserStatus.Normal ? '禁用' : '启用'}该用户吗?` | 
|     ); | 
|     const res = await userServices.setUserInfoStatus({ | 
|       ids: [row.id], | 
|       status: | 
|         row.status === EnumUserStatus.Normal ? EnumUserStatus.Disabled : EnumUserStatus.Normal, | 
|     }); | 
|     if (res) { | 
|       getList(paginationState.pageIndex); | 
|       Message.successMessage(`操作成功`); | 
|       return !!res; | 
|     } | 
|   } catch (error) {} | 
| } | 
|   | 
| async function resetPassword() { | 
|   try { | 
|     let params: API.ResetUserPasswordsCommand = { | 
|       ids: [resetPasswordEditForm.ids], | 
|       password: resetPasswordEditForm.password, | 
|     }; | 
|     let res = await userServices.resetUserPasswords(params); | 
|     if (res) { | 
|       Message.successMessage('操作成功'); | 
|       getList(paginationState.pageIndex); | 
|     } | 
|   } catch (error) {} | 
| } | 
| </script> |