Home.vue 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. <template>
  2. <div class="code-home">
  3. <el-card class="box-card-left">
  4. <div slot="header">
  5. <span>字典类别</span>
  6. <el-tooltip effect="dark" content="添加类型" placement="top-start">
  7. <el-button style="float: right; padding: 3px 0" icon="el-icon-plus" type="text" @click="treeTypeAdd"></el-button>
  8. </el-tooltip>
  9. </div>
  10. <deepTree :operation="true" @edit="treeEdit" @remove="treeRemove" @nodeClick="treeClick" class="deepTree" :data="treeList"></deepTree>
  11. </el-card>
  12. <el-card class="box-card">
  13. <div slot="header" class="clearfix">
  14. <span>数据字典</span>
  15. <el-button style="float: right; padding: 3px 0" type="text" @click="filterAdd">添加字典</el-button>
  16. </div>
  17. <filterList ref="filterList" :tableData="tableData" :filed="filed" @edit="filtereEdit" @delete="filterDelete" @query="filterQuery" :total="codeTotal"></filterList>
  18. </el-card>
  19. <dialogAndDrawer :title="title" :visibleSync="visibleSync" v-if="visibleSync" @close="visibleSync = false">
  20. <template v-slot:windowMain>
  21. <formData :filed="formfiled" :data="formdata" :rules="formrules" @save="formSave"></formData>
  22. </template>
  23. </dialogAndDrawer>
  24. </div>
  25. </template>
  26. <script>
  27. import filterList from '@components/filterList/index.vue';
  28. import deepTree from '@components/deepTree.vue';
  29. import dialogAndDrawer from '@components/dialogAndDrawer.vue';
  30. import formData from '@components/formData/index.vue';
  31. import { mapState, mapActions } from 'vuex';
  32. export default {
  33. name: 'Home',
  34. components: {
  35. filterList,
  36. deepTree,
  37. dialogAndDrawer,
  38. formData
  39. },
  40. computed: {
  41. ...mapState({ tableData: 'codeList', treeList: 'typeList', codeTotal: 'codeTotal', typeTotal: 'typeTotal' })
  42. },
  43. data() {
  44. return {
  45. type: null,
  46. title: '',
  47. visibleSync: false,
  48. formdata: {},
  49. formrules: {},
  50. formfiled: [
  51. { label: '名称', name: 'name' },
  52. { label: '编码', name: 'code' }
  53. ],
  54. filed: [
  55. { label: '类型', name: 'parentCode' },
  56. { label: '名称', name: 'name', filter: true },
  57. { label: '编码', name: 'code', filter: true }
  58. ]
  59. };
  60. },
  61. mounted() {
  62. this.treeQuery();
  63. },
  64. methods: {
  65. ...mapActions(['typeQuery', 'typeCreate', 'typeUpdate', 'typeDelete', 'codeQuery', 'codeCreate', 'codeUpdate', 'codeDelete']),
  66. // filter
  67. // 添加
  68. filterAdd() {
  69. if (this.type == null) {
  70. this.$message.warning('请先选择类别');
  71. return;
  72. }
  73. this.formdata = {};
  74. this.title = '添加字典';
  75. this.visibleSync = true;
  76. },
  77. // 修改
  78. filtereEdit(e) {
  79. this.formdata = e;
  80. this.title = '修改字典';
  81. this.visibleSync = true;
  82. },
  83. // 删除
  84. async filterDelete(e) {
  85. const res = await this.codeDelete({ id: e?._id });
  86. this.$resChange(res, '删除成功');
  87. this.filterQuery();
  88. },
  89. // 查询
  90. async filterQuery({ filter = {}, paging = { page: 0, size: 10 } } = {}) {
  91. if (this.type == null) {
  92. this.$message.error('请先选择类别');
  93. return;
  94. }
  95. filter.parentCode = this.type;
  96. await this.codeQuery({ filter, paging });
  97. },
  98. // tree
  99. // 查询
  100. async treeQuery(e) {
  101. await this.typeQuery({ filter: {} });
  102. },
  103. // 添加
  104. treeTypeAdd() {
  105. this.type = null;
  106. this.formdata = {};
  107. this.title = '添加类别';
  108. this.visibleSync = true;
  109. },
  110. // 修改
  111. treeEdit(e) {
  112. this.type = null;
  113. this.formdata = e;
  114. this.title = '修改类别';
  115. this.visibleSync = true;
  116. },
  117. // 删除
  118. async treeRemove(e) {
  119. this.type = null;
  120. const res = await this.typeDelete({ id: e?._id });
  121. this.$resChange(res, '删除成功');
  122. this.treeQuery();
  123. },
  124. // 选择
  125. treeClick(e) {
  126. this.type = e.data.code;
  127. this.filterQuery();
  128. },
  129. // 表单保存
  130. async formSave(e) {
  131. if (e.isRevise && e?.isRevise == false) {
  132. this.$message.warning('未作修改');
  133. return;
  134. }
  135. this.$delete(e, 'isRevise');
  136. let res, msg;
  137. if (this.type !== null) {
  138. // 字典
  139. this.$set(e, 'parentCode', this.type);
  140. if (e._id) {
  141. // 字典修改
  142. res = await this.codeUpdate(e);
  143. msg = '字典修改成功';
  144. } else {
  145. // 字典添加
  146. res = await this.codeCreate(e);
  147. msg = '字典添加成功';
  148. }
  149. } else {
  150. // 字典类别
  151. if (e._id) {
  152. // 类别修改
  153. res = await this.typeUpdate(e);
  154. msg = '类别修改成功';
  155. } else {
  156. // 类别添加
  157. res = await this.typeCreate(e);
  158. msg = '类别添加成功';
  159. }
  160. }
  161. this.$resChange(res, msg);
  162. this.treeQuery();
  163. this.filterQuery();
  164. this.visibleSync = false;
  165. }
  166. }
  167. };
  168. </script>
  169. <style lang="scss">
  170. .code-home {
  171. width: 100%;
  172. height: 100%;
  173. display: flex;
  174. .box-card {
  175. width: 84%;
  176. height: 100%;
  177. }
  178. .box-card-left {
  179. width: 15%;
  180. height: 100%;
  181. .el-card__body {
  182. height: 88%;
  183. .deepTree {
  184. width: 100%;
  185. height: 100%;
  186. overflow-y: auto;
  187. }
  188. }
  189. }
  190. }
  191. </style>