userList.vue 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. <template>
  2. <div class="system-user-list-container" style="min-height: 600px;">
  3. <el-table :data="tableData.data" style="width: 100%" @selection-change="handleSelectionChange">
  4. <el-table-column v-if="multiple" type="selection" width="55" align="center" />
  5. <el-table-column type="index" label="序号" width="60" />
  6. <el-table-column prop="userNickname" label="姓名" show-overflow-tooltip></el-table-column>
  7. <el-table-column label="操作" width="100" >
  8. <template #default="scope">
  9. <el-button size="small" text type="primary" @click="onOpenSelectUser(scope.row)">选择</el-button>
  10. </template>
  11. </el-table-column>
  12. </el-table>
  13. <pagination
  14. v-show="tableData.total>0"
  15. :total="tableData.total"
  16. v-model:page="tableData.param.pageNum"
  17. v-model:limit="tableData.param.pageSize"
  18. @pagination="setUserList"
  19. />
  20. </div>
  21. </template>
  22. <script lang="ts">
  23. import {toRefs, reactive, defineComponent, getCurrentInstance} from 'vue';
  24. import system from '/@/api/system';
  25. interface TableDataState {
  26. ids:number[];
  27. userItem:any[];
  28. deptProps:{};
  29. tableData: {
  30. data: any[];
  31. total: number;
  32. loading: boolean;
  33. param: TableParam;
  34. };
  35. }
  36. interface TableParam {
  37. pageNum: number;
  38. pageSize: number;
  39. deptId:string;
  40. roleId:number | undefined;
  41. mobile:string;
  42. status:string;
  43. keyWords:string;
  44. dateRange: string[];
  45. }
  46. export default defineComponent({
  47. name: 'systemUserList',
  48. props:{
  49. deptData:{
  50. type:Array,
  51. default:()=>[]
  52. },
  53. param:{
  54. type:Object,
  55. default:()=>{}
  56. },
  57. genderData:{
  58. type:Array,
  59. default:()=>[]
  60. },
  61. multiple:{
  62. type:Boolean,
  63. default:true
  64. }
  65. },
  66. emits:['ok','okBatch'],
  67. components: { },
  68. setup(prop,{emit}) {
  69. const {proxy,props} = <any>getCurrentInstance();
  70. const {sys_user_sex} = proxy.useDict('sys_user_sex')
  71. const state = reactive<TableDataState>({
  72. ids:[],
  73. userItem:[],
  74. deptProps:{
  75. id:"deptId",
  76. children: "children",
  77. label: "deptName"
  78. },
  79. tableData: {
  80. data: [],
  81. total: 0,
  82. loading: false,
  83. param: {
  84. pageNum: 1,
  85. pageSize: 10,
  86. roleId:undefined,
  87. deptId:'',
  88. mobile:'',
  89. status:'',
  90. keyWords:'',
  91. dateRange:[]
  92. },
  93. },
  94. });
  95. const setUserList = ()=>{
  96. const param = {...state.tableData.param, ...props.param, status: -1};
  97. //FIXME 没有对应的api映射,需要fix。
  98. system.user.getList(param).then((res:any)=>{
  99. state.tableData.data = res.list ?? [];
  100. state.tableData.total = res.total;
  101. });
  102. };
  103. const onOpenSelectUser = (row:any) => {
  104. emit("ok",row);
  105. }
  106. // 多选框选中数据
  107. const handleSelectionChange = (selection:any[])=> {
  108. emit("okBatch",selection)
  109. };
  110. return {
  111. sys_user_sex,
  112. setUserList,
  113. onOpenSelectUser,
  114. handleSelectionChange,
  115. ...toRefs(state),
  116. };
  117. },
  118. });
  119. </script>