tenantpackage.vue 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. <template>
  2. <avue-crud :option="option"
  3. :table-loading="loading"
  4. :data="data"
  5. :page.sync="page"
  6. :permission="permissionList"
  7. :before-open="beforeOpen"
  8. v-model="form"
  9. ref="crud"
  10. @row-update="rowUpdate"
  11. @row-save="rowSave"
  12. @row-del="rowDel"
  13. @search-change="searchChange"
  14. @search-reset="searchReset"
  15. @selection-change="selectionChange"
  16. @current-change="currentChange"
  17. @size-change="sizeChange"
  18. @refresh-change="refreshChange"
  19. @on-load="onLoad">
  20. <template slot="menuLeft">
  21. <el-button type="danger"
  22. size="small"
  23. icon="el-icon-delete"
  24. plain
  25. @click="handleDelete">删 除
  26. </el-button>
  27. </template>
  28. </avue-crud>
  29. </template>
  30. <script>
  31. import {getList, getDetail, add, update, remove} from "@/api/system/tenantpackage";
  32. import {mapGetters} from "vuex";
  33. import {getMenuTree} from "@/api/system/menu";
  34. export default {
  35. name: "tenantPackage",
  36. data() {
  37. return {
  38. form: {},
  39. query: {},
  40. loading: true,
  41. page: {
  42. pageSize: 10,
  43. currentPage: 1,
  44. total: 0
  45. },
  46. selectionList: [],
  47. option: {
  48. height: 'auto',
  49. calcHeight: 30,
  50. tip: false,
  51. searchShow: true,
  52. searchMenuSpan: 6,
  53. border: true,
  54. index: true,
  55. viewBtn: true,
  56. selection: true,
  57. dialogClickModal: false,
  58. dialogWidth: 600,
  59. column: [
  60. {
  61. label: "产品包名",
  62. prop: "packageName",
  63. search: true,
  64. span: 24,
  65. rules: [{
  66. required: true,
  67. message: "请输入产品包名称",
  68. trigger: "blur"
  69. }]
  70. },
  71. {
  72. label: "菜单列表",
  73. prop: "menuId",
  74. span: 24,
  75. type: "tree",
  76. dicData: [],
  77. hide: true,
  78. multiple: true,
  79. props: {
  80. label: "title"
  81. },
  82. rules: [{
  83. required: true,
  84. message: "请选择菜单",
  85. trigger: "blur"
  86. }]
  87. },
  88. {
  89. label: "备注",
  90. prop: "remark",
  91. span: 24
  92. },
  93. ]
  94. },
  95. data: []
  96. };
  97. },
  98. computed: {
  99. ...mapGetters(["permission"]),
  100. permissionList() {
  101. return {
  102. addBtn: true,
  103. viewBtn: false,
  104. delBtn: true,
  105. editBtn: true
  106. };
  107. },
  108. ids() {
  109. let ids = [];
  110. this.selectionList.forEach(ele => {
  111. ids.push(ele.id);
  112. });
  113. return ids.join(",");
  114. }
  115. },
  116. methods: {
  117. initData() {
  118. getMenuTree().then(res => {
  119. const column = this.findObject(this.option.column, "menuId");
  120. column.dicData = res.data.data;
  121. });
  122. },
  123. rowSave(row, done, loading) {
  124. row.menuId = row.menuId.join(",");
  125. add(row).then(() => {
  126. this.onLoad(this.page);
  127. this.$message({
  128. type: "success",
  129. message: "操作成功!"
  130. });
  131. done();
  132. }, error => {
  133. loading();
  134. window.console.log(error);
  135. });
  136. },
  137. rowUpdate(row, index, done, loading) {
  138. update(row).then(() => {
  139. this.onLoad(this.page);
  140. this.$message({
  141. type: "success",
  142. message: "操作成功!"
  143. });
  144. done();
  145. }, error => {
  146. loading();
  147. console.log(error);
  148. });
  149. },
  150. rowDel(row) {
  151. this.$confirm("确定将选择数据删除?", {
  152. confirmButtonText: "确定",
  153. cancelButtonText: "取消",
  154. type: "warning"
  155. })
  156. .then(() => {
  157. return remove(row.id);
  158. })
  159. .then(() => {
  160. this.onLoad(this.page);
  161. this.$message({
  162. type: "success",
  163. message: "操作成功!"
  164. });
  165. });
  166. },
  167. handleDelete() {
  168. if (this.selectionList.length === 0) {
  169. this.$message.warning("请选择至少一条数据");
  170. return;
  171. }
  172. this.$confirm("确定将选择数据删除?", {
  173. confirmButtonText: "确定",
  174. cancelButtonText: "取消",
  175. type: "warning"
  176. })
  177. .then(() => {
  178. return remove(this.ids);
  179. })
  180. .then(() => {
  181. this.onLoad(this.page);
  182. this.$message({
  183. type: "success",
  184. message: "操作成功!"
  185. });
  186. this.$refs.crud.toggleSelection();
  187. });
  188. },
  189. beforeOpen(done, type) {
  190. if (["add", "edit"].includes(type)) {
  191. this.initData();
  192. }
  193. if (["edit", "view"].includes(type)) {
  194. getDetail(this.form.id).then(res => {
  195. this.form = res.data.data;
  196. });
  197. }
  198. done();
  199. },
  200. searchReset() {
  201. this.query = {};
  202. this.onLoad(this.page);
  203. },
  204. searchChange(params, done) {
  205. this.query = params;
  206. this.page.currentPage = 1;
  207. this.onLoad(this.page, params);
  208. done();
  209. },
  210. selectionChange(list) {
  211. this.selectionList = list;
  212. },
  213. selectionClear() {
  214. this.selectionList = [];
  215. this.$refs.crud.toggleSelection();
  216. },
  217. currentChange(currentPage) {
  218. this.page.currentPage = currentPage;
  219. },
  220. sizeChange(pageSize) {
  221. this.page.pageSize = pageSize;
  222. },
  223. refreshChange() {
  224. this.onLoad(this.page, this.query);
  225. },
  226. onLoad(page, params = {}) {
  227. this.loading = true;
  228. getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
  229. const data = res.data.data;
  230. this.page.total = data.total;
  231. this.data = data.records;
  232. this.loading = false;
  233. this.selectionClear();
  234. });
  235. }
  236. }
  237. };
  238. </script>
  239. <style>
  240. </style>