home.vue 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. <template>
  2. <div class="menushome">
  3. <el-card class="box-card">
  4. <div slot="header" class="clearfix">
  5. <span>菜单管理</span>
  6. <el-button style="float: right; padding: 3px 0" type="text" @click="addmenus">添加菜单</el-button>
  7. </div>
  8. <div class="main">
  9. <filterList ref="filterList" :tableData="menusList" :filed="filed" @edit="filtereEdit" @delete="filterDelete" @query="filterQuery" :total="Total"></filterList>
  10. </div>
  11. </el-card>
  12. <dialogAndDrawer :width="'35%'" :title="title" :visibleSync="visibleSync" v-if="visibleSync" @close="visibleSync = false">
  13. <template v-slot:windowMain>
  14. <formData ref="formData" :filed="formfiled" :data="formdata" :rules="formrules" @save="formSave">
  15. <template v-slot:ext="{ formdata }">
  16. <!-- 地址 -->
  17. <el-form-item prop="url" v-if="formdata && formdata.type == '0'" label="地址">
  18. <el-input v-model="formdata['url']" placeholder="请输入地址"></el-input>
  19. </el-form-item>
  20. <!-- 栏目 -->
  21. <el-form-item prop="column" v-if="formdata && formdata.type == '1'" label="栏目">
  22. <el-select multiple v-model="formdata['column']" placeholder="请选择栏目">
  23. <el-option v-for="i in columnList" :key="i.code" :label="i.name" :value="i.code">
  24. </el-option>
  25. </el-select>
  26. </el-form-item>
  27. <!-- 单页 -->
  28. <el-form-item prop="pages" v-if="formdata && formdata.type == '2'" label="单页">
  29. <el-select v-model="formdata['pages']" placeholder="请选择单页">
  30. <el-option v-for="i in pagesList" :key="i._id" :label="i.title" :value="i._id">
  31. </el-option>
  32. </el-select>
  33. </el-form-item>
  34. </template>
  35. </formData>
  36. </template>
  37. </dialogAndDrawer>
  38. </div>
  39. </template>
  40. <script>
  41. import filterList from '@components/filterList/index.vue';
  42. import dialogAndDrawer from '@components/dialogAndDrawer.vue';
  43. import formData from '@components/formData/index.vue';
  44. import { mapState, mapActions } from 'vuex';
  45. export default {
  46. components: {
  47. filterList,
  48. dialogAndDrawer,
  49. formData
  50. },
  51. data() {
  52. return {
  53. title: '',
  54. visibleSync: false,
  55. filed: [
  56. { name: 'name', label: '名称', filter: true },
  57. { name: 'code', label: '编码', filter: true }
  58. ],
  59. formdata: {},
  60. formfiled: [
  61. { name: 'name', label: '名称' },
  62. { name: 'code', label: '编码' },
  63. { name: 'date', label: '时间', formater: 'date:datetime' },
  64. { name: 'type', label: '类型', formater: 'dict:imgNewsType' }
  65. ],
  66. formrules: {
  67. name: [
  68. { required: true, message: '请输入名称', trigger: 'blur' }
  69. ],
  70. code: [
  71. { required: true, message: '请输入编码', trigger: 'blur' }
  72. ],
  73. date: [
  74. { required: true, message: '请输入时间', trigger: 'blur' }
  75. ],
  76. type: [
  77. { required: true, message: '请输入类型', trigger: 'blur' }
  78. ],
  79. url: [
  80. { required: true, message: '请输入类型', trigger: 'blur' }
  81. ],
  82. column: [
  83. { required: true, message: '请输入类型', trigger: 'chage' }
  84. ],
  85. pages: [
  86. { required: true, message: '请输入类型', trigger: 'chage' }
  87. ]
  88. }
  89. };
  90. },
  91. computed: {
  92. ...mapState(['menusList', 'Total', 'typeList', 'columnList', 'pagesList'])
  93. },
  94. async mounted() {
  95. await this.filterQuery();
  96. await this.codeQuery();
  97. await this.columnQuery();
  98. await this.pagesQuery();
  99. },
  100. methods: {
  101. ...mapActions(['menusQuery', 'menusCreate', 'menusUpdate', 'menusDelete', 'menusQuery', 'codeQuery', 'columnQuery', 'pagesQuery']),
  102. // 添加
  103. addmenus () {
  104. this.formdata = {};
  105. this.title = '添加菜单';
  106. this.visibleSync = true;
  107. },
  108. // 修改
  109. async filtereEdit (e) {
  110. this.formdata = e;
  111. this.title = '修改菜单';
  112. this.visibleSync = true;
  113. },
  114. // 删除
  115. async filterDelete (e) {
  116. const res = await this.menusDelete({ id: e?._id });
  117. this.$resChange(res, '删除成功');
  118. this.filterQuery();
  119. },
  120. // 查询
  121. async filterQuery ({ filter = {}, paging = { page: 0, size: 10 } } = {}) {
  122. await this.menusQuery({ filter, paging });
  123. },
  124. // 表单保存
  125. async formSave (e) {
  126. if (e.isRevise && e?.isRevise == false) {
  127. this.$message.warning('未作修改');
  128. return;
  129. }
  130. this.$delete(e, 'isRevise');
  131. let res, msg;
  132. // 修改
  133. if (e._id) {
  134. res = await this.menusUpdate(e);
  135. msg = '菜单修改成功';
  136. } else {
  137. res = await this.menusCreate(e);
  138. msg = '菜单添加成功';
  139. }
  140. this.filterQuery();
  141. this.$resChange(res, msg);
  142. this.visibleSync = false;
  143. }
  144. }
  145. };
  146. </script>
  147. <style lang="scss">
  148. .menushome {
  149. width: 100%;
  150. height: 100%;
  151. display: flex;
  152. .box-card {
  153. width: 100%;
  154. height: 100%;
  155. .el-card__body {
  156. height: 100%;
  157. }
  158. }
  159. }
  160. </style>