index.vue 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. <template>
  2. <div class="page">
  3. <el-card shadow="nover">
  4. <div class="system-user-search mb15">
  5. <!-- <el-input placeholder="请输入用户名称" style="max-width: 180px"> </el-input>
  6. <el-button type="success" class="ml10">
  7. <el-icon>
  8. <ele-Search />
  9. </el-icon>
  10. 查询
  11. </el-button> -->
  12. <el-button type="primary" class="ml10" @click="onOpenAddItem" v-auth="'add'">
  13. <el-icon>
  14. <ele-FolderAdd />
  15. </el-icon>
  16. 新建
  17. </el-button>
  18. </div>
  19. <el-table v-loading="tableData.loading" :data="tableData.data" style="width: 100%">
  20. <el-table-column align="left" prop="title" v-col="'title'" label="名称" width="260" show-overflow-tooltip></el-table-column>
  21. <el-table-column align="left" prop="explain" v-col="'explain'" label="描述" show-overflow-tooltip></el-table-column>
  22. <el-table-column align="center" label="操作" width="180" v-col="'handle'">
  23. <template #default="scope">
  24. <el-button size="small" type="text" @click="onOpenEditItem(scope.row)" v-auth="'edit'">编辑</el-button>
  25. <el-button size="small" type="text" @click="onRowDel(scope.row)" v-auth="'del'">删除</el-button>
  26. <el-button size="small" type="text" @click="onOpenDetailItem(scope.row)" v-auth="'detail'">详细信息</el-button>
  27. </template>
  28. </el-table-column>
  29. </el-table>
  30. </el-card>
  31. <EditOrAddItem ref="EditOrAddItem" @fetchList="fetchList" />
  32. <DetailItem ref="detailItemRef" />
  33. </div>
  34. </template>
  35. <script lang="ts">
  36. import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue';
  37. import { ElMessageBox, ElMessage } from 'element-plus';
  38. // import AddUer from '/@/views/system/user/component/addUser.vue';
  39. import EditOrAddItem from './component/editItem.vue';
  40. // import AddItem from './component/addItem.vue';
  41. import DetailItem from './component/detailItem.vue';
  42. import api from '/@/api/assess';
  43. // 定义接口来定义对象的类型
  44. interface TableDataRow {
  45. title: string;
  46. explain: string;
  47. config: string;
  48. item_code: string;
  49. targets: Array<any>
  50. // department: string[];
  51. // phone: string;
  52. // email: string;
  53. // sex: string;
  54. // password: string;
  55. // overdueTime: Date;
  56. // status: boolean;
  57. // describe: string;
  58. // createTime: string;
  59. }
  60. interface TableDataState {
  61. tableData: {
  62. data: Array<TableDataRow>;
  63. total: number;
  64. loading: boolean;
  65. param: {
  66. page: number;
  67. pageSize: number;
  68. };
  69. };
  70. }
  71. export default defineComponent({
  72. name: 'systemUser',
  73. components: { EditOrAddItem, DetailItem },
  74. setup() {
  75. // const addItemRef = ref();
  76. const EditOrAddItem = ref();
  77. const detailItemRef = ref();
  78. const state = reactive<TableDataState>({
  79. tableData: {
  80. data: [],
  81. total: 0,
  82. loading: false,
  83. param: {
  84. page: 1,
  85. pageSize: 20,
  86. },
  87. },
  88. });
  89. // 初始化表格数据
  90. const initTableData = () => {
  91. fetchList()
  92. // const data: Array<TableDataRow> = [];
  93. // for (let i = 0; i < 9; i++) {
  94. // data.push({
  95. // userName: '这里是名称',
  96. // description: '这里是描述这里是描述这里是描述这里是描述',
  97. // createTime: new Date().toLocaleString(),
  98. // });
  99. // }
  100. // state.tableData.data = data;
  101. // state.tableData.total = state.tableData.data.length;
  102. // console.log(data)
  103. };
  104. const fetchList = () => {
  105. state.tableData.loading = true
  106. api.getList().then((res: any) => {
  107. state.tableData.data = res;
  108. // state.tableData.total = res.total;
  109. }).finally(() => state.tableData.loading = false)
  110. };
  111. // 打开新增用户弹窗
  112. const onOpenAddItem = () => {
  113. EditOrAddItem.value.openDialog();
  114. };
  115. // 打开修改用户弹窗
  116. const onOpenEditItem = (row: TableDataRow) => {
  117. EditOrAddItem.value.openDialog(row);
  118. };
  119. // 打开详细信息弹窗
  120. const onOpenDetailItem = (row: TableDataRow) => {
  121. detailItemRef.value.openDialog(row);
  122. };
  123. // 删除
  124. const onRowDel = (row: TableDataRow) => {
  125. ElMessageBox.confirm(`此操作将永久删除指数:“${row.title}”,是否继续?`, '提示', {
  126. confirmButtonText: '确认',
  127. cancelButtonText: '取消',
  128. type: 'warning',
  129. })
  130. .then(() => {
  131. api.deleteItem({ itemcode: row.item_code }).then(() => {
  132. fetchList()
  133. ElMessage.success('删除成功');
  134. });
  135. })
  136. .catch(() => { });
  137. };
  138. // 分页改变
  139. const onHandleSizeChange = (val: number) => {
  140. state.tableData.param.pageSize = val;
  141. };
  142. // 分页改变
  143. const onHandleCurrentChange = (val: number) => {
  144. state.tableData.param.page = val;
  145. };
  146. // 页面加载时
  147. onMounted(() => {
  148. initTableData();
  149. });
  150. return {
  151. // addItemRef,
  152. EditOrAddItem,
  153. detailItemRef,
  154. onOpenAddItem,
  155. onOpenEditItem,
  156. onOpenDetailItem,
  157. onRowDel,
  158. onHandleSizeChange,
  159. onHandleCurrentChange,
  160. fetchList,
  161. ...toRefs(state),
  162. };
  163. },
  164. });
  165. </script>
  166. <style lang="scss" scoped>
  167. :deep(.el-dialog__body) {
  168. border-top: 1px var(--el-border-color) var(--el-border-style);
  169. }
  170. </style>