index.vue 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. <template>
  2. <div id="index">
  3. <el-row>
  4. <el-col :span="24" class="info">
  5. <el-col :span="24" class="top">
  6. <topInfo :topTitle="pageTitle"></topInfo>
  7. <el-col :span="24" class="topAdd">
  8. <el-button type="primary" size="mini" @click="toAdd()"><i class="el-icon-plus"></i></el-button>
  9. </el-col>
  10. </el-col>
  11. <el-col :span="24" class="main">
  12. <data-table :fields="fields" @delete="toDelete" :data="list" :opera="opera" @edit="toEdit" :usePage="false"></data-table>
  13. </el-col>
  14. </el-col>
  15. </el-row>
  16. <el-drawer title="子管理员" :visible.sync="drawer" direction="rtl" @closed="handleClose" :destroy-on-close="true">
  17. <data-form :fields="formFields" :data="form" :rules="{}" @save="drawerSave" :isNew="drawerIsNew"> </data-form>
  18. </el-drawer>
  19. </div>
  20. </template>
  21. <script>
  22. import dataTable from '@/components/data-table.vue';
  23. import topInfo from '@/layout/public/top.vue';
  24. import dataForm from '@/components/form.vue';
  25. import { mapState, createNamespacedHelpers } from 'vuex';
  26. const { mapActions: authUser } = createNamespacedHelpers('authUser');
  27. export default {
  28. name: 'index',
  29. props: {},
  30. components: {
  31. topInfo, //头部标题
  32. dataTable,
  33. dataForm,
  34. },
  35. data: () => {
  36. return {
  37. drawer: false,
  38. form: {},
  39. drawerIsNew: true,
  40. opera: [
  41. {
  42. label: '编辑',
  43. icon: 'el-icon-edit',
  44. method: 'edit',
  45. },
  46. {
  47. label: '删除',
  48. icon: 'el-icon-delete',
  49. method: 'delete',
  50. confirm: true,
  51. },
  52. ],
  53. fields: [
  54. { label: '用户名', prop: 'name', model: 'name' },
  55. { label: '手机号', prop: 'phone', model: 'phone' },
  56. { label: '备注', prop: 'remark', model: 'phone' },
  57. ],
  58. formFields: [
  59. { label: '用户名', model: 'name' },
  60. { label: '手机号', model: 'phone' },
  61. { label: '密码', model: 'passwd', type: 'password' },
  62. { label: '备注', model: 'remark' },
  63. ],
  64. list: [],
  65. total: 0,
  66. };
  67. },
  68. created() {
  69. this.search();
  70. },
  71. methods: {
  72. ...authUser(['query', 'update', 'create']),
  73. async search({ skip = 0, limit = 10, ...info } = {}) {
  74. const res = await this.query({ skip, limit, ...info, role: '4' });
  75. if (this.$checkRes(res)) {
  76. this.$set(this, `list`, res.data);
  77. this.$set(this, `total`, res.total);
  78. }
  79. },
  80. toAdd() {
  81. this.drawer = true;
  82. },
  83. async drawerSave({ data, isNew }) {
  84. let res;
  85. let msg;
  86. if (isNew) {
  87. data.role = '4';
  88. res = await this.create(data);
  89. msg = '创建成功';
  90. } else {
  91. res = await this.update(data);
  92. msg = '修改成功';
  93. }
  94. if (this.$checkRes(res, msg, res.errmsg)) {
  95. this.handleClose();
  96. this.search();
  97. }
  98. },
  99. toEdit({ data }) {
  100. this.$set(this, 'form', data);
  101. this.drawer = true;
  102. this.drawerIsNew = false;
  103. },
  104. async toDelete({ data }) {
  105. const res = await this.delete(data.id);
  106. if (this.$checkRes(res, '删除成功', res.errmsg || '删除失败')) this.search();
  107. },
  108. handleClose() {
  109. this.drawer = false;
  110. this.form = {};
  111. this.drawerIsNew = true;
  112. },
  113. },
  114. computed: {
  115. ...mapState(['user']),
  116. pageTitle() {
  117. return `${this.$route.meta.title}`;
  118. },
  119. },
  120. metaInfo() {
  121. return { title: this.$route.meta.title };
  122. },
  123. };
  124. </script>
  125. <style lang="less" scoped>
  126. .main {
  127. padding: 20px;
  128. margin: 10px 20px;
  129. border: 1px solid #ccc;
  130. width: 96%;
  131. }
  132. .column {
  133. width: 258px;
  134. min-height: 500px;
  135. border: 1px solid #ccc;
  136. margin: 0 20px 0 0;
  137. }
  138. .top .topAdd {
  139. padding: 0 10px 0 0;
  140. text-align: right;
  141. }
  142. .message {
  143. border: 1px solid #ccc;
  144. min-height: 500px;
  145. // min-width: 715px;
  146. }
  147. </style>