index.vue 5.1 KB

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