index.vue 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. <template>
  2. <div id="index">
  3. <el-row>
  4. <el-col :span="24" class="main animate__animated animate__backInRight">
  5. <el-col class="one">
  6. <data-table @query="search" :fields="fields" :opera="opera" :data="list" :total="total" @view="toView" @edit="toEdit" @reset="toReset" @del="toDel">
  7. <template #selfbtn>
  8. <el-button type="primary" size="mini" @click="toAdd()">添加用户</el-button>
  9. </template>
  10. </data-table>
  11. </el-col>
  12. </el-col>
  13. </el-row>
  14. <e-dialog :dialog="dialog" @toClose="toClose">
  15. <template slot="info">
  16. <detail-1 v-if="dialog.type == '1'" :form="form" :typeList="typeList" @toSave="onSubmit"></detail-1>
  17. <info-1 v-else-if="dialog.type == '2'" :form="form" :typeList="typeList"></info-1>
  18. </template>
  19. </e-dialog>
  20. </div>
  21. </template>
  22. <script>
  23. const { type } = require('@common/src/layout/deploy/dict');
  24. import { mapState, createNamespacedHelpers } from 'vuex';
  25. export default {
  26. name: 'index',
  27. props: {},
  28. components: {
  29. detail1: () => import('./parts/detail-1.vue'),
  30. info1: () => import('./parts/info-1.vue'),
  31. },
  32. data: function () {
  33. return {
  34. // 数据项
  35. fields: [
  36. {
  37. label: '用户类别',
  38. prop: 'type',
  39. format: (item) => {
  40. let data = this.typeList.find((i) => i.value == item);
  41. if (data) return data.label;
  42. },
  43. },
  44. { label: '姓名', prop: 'name', filter: true },
  45. { label: '电话', prop: 'phone', filter: true },
  46. { label: '电子邮箱', prop: 'email' },
  47. { label: '联系地址', prop: 'address' },
  48. { label: '部门', prop: 'dept' },
  49. { label: '职务', prop: 'zw' },
  50. { label: '工作单位', prop: 'company' },
  51. ],
  52. total: 0,
  53. opera: [
  54. { label: '详情', method: 'view' },
  55. { label: '修改', method: 'edit' },
  56. { label: '密码重置', method: 'reset', confirm: true },
  57. { label: '删除', method: 'del', type: 'danger', confirm: true },
  58. ],
  59. // 列表
  60. list: [
  61. {
  62. type: '0',
  63. id: '1111',
  64. name: '法外狂徒张三',
  65. phone: '12345678901',
  66. email: '123@qq.com',
  67. address: '翻斗花园',
  68. dept: '采购部门',
  69. zw: '采购人员',
  70. company: '翻斗花园',
  71. },
  72. ],
  73. // 弹框
  74. dialog: { title: '信息管理', show: false, type: '1' },
  75. // 表单
  76. form: {},
  77. // 用户类别
  78. typeList: type,
  79. };
  80. },
  81. created() {},
  82. methods: {
  83. search({ skip = 0, limit = 10, ...info } = {}) {},
  84. // 详细信息
  85. toView({ data }) {
  86. this.$set(this, `form`, data);
  87. this.dialog = { title: '详细信息', show: true, type: '2', widths: '40%' };
  88. },
  89. // 添加
  90. toAdd() {
  91. this.dialog = { title: '信息管理', show: true, type: '1', widths: '40%' };
  92. },
  93. // 修改
  94. toEdit({ data }) {
  95. this.$set(this, `form`, data);
  96. this.dialog = { title: '信息管理', show: true, type: '1', widths: '40%' };
  97. },
  98. // 提交保存
  99. onSubmit({ data }) {
  100. console.log(data);
  101. // this.toClose();
  102. },
  103. // 密码重置
  104. toReset({ data }) {
  105. console.log(data);
  106. },
  107. // 删除信息
  108. toDel({ data }) {
  109. console.log(data);
  110. },
  111. // 关闭弹框
  112. toClose() {
  113. this.form = {};
  114. this.dialog = { show: false };
  115. this.search();
  116. },
  117. },
  118. computed: {
  119. ...mapState(['user']),
  120. },
  121. metaInfo() {
  122. return { title: this.$route.meta.title };
  123. },
  124. watch: {
  125. test: {
  126. deep: true,
  127. immediate: true,
  128. handler(val) {},
  129. },
  130. },
  131. };
  132. </script>
  133. <style lang="less" scoped></style>