notice.vue 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. <template>
  2. <basic-container>
  3. <avue-crud :option="option"
  4. :data="data"
  5. :page="page"
  6. @row-del="rowDel"
  7. v-model="form"
  8. :permission="permissionList"
  9. @row-update="rowUpdate"
  10. @row-save="rowSave"
  11. :before-open="beforeOpen"
  12. @search-change="searchChange"
  13. @search-reset="searchReset"
  14. @selection-change="selectionChange"
  15. @on-load="onLoad">
  16. <template slot="menuLeft">
  17. <el-button type="danger"
  18. size="small"
  19. icon="el-icon-delete"
  20. plain
  21. v-if="permission.notice_delete"
  22. @click="handleDelete">删 除
  23. </el-button>
  24. </template>
  25. <template slot-scope="{row}"
  26. slot="category">
  27. <el-tag>{{row.categoryName}}</el-tag>
  28. </template>
  29. </avue-crud>
  30. </basic-container>
  31. </template>
  32. <script>
  33. import {getList, remove, update, add, getNotice} from "@/api/dept/notice";
  34. import {mapGetters} from "vuex";
  35. export default {
  36. data() {
  37. return {
  38. form: {},
  39. page: {
  40. pageSize: 10,
  41. currentPage: 1,
  42. total: 0
  43. },
  44. selectionList: [],
  45. option: {
  46. tip: false,
  47. border: true,
  48. index: true,
  49. viewBtn: true,
  50. selection: true,
  51. column: [
  52. {
  53. label: "通知标题",
  54. prop: "title",
  55. row: true,
  56. search: true,
  57. rules: [{
  58. required: true,
  59. message: "请输入通知标题",
  60. trigger: "blur"
  61. }]
  62. },
  63. {
  64. label: "通知类型",
  65. type: "select",
  66. row: true,
  67. dicUrl: "/api/blade-system/dict/dictionary?code=notice",
  68. props: {
  69. label: "dictValue",
  70. value: "dictKey"
  71. },
  72. slot: true,
  73. prop: "category",
  74. search: true,
  75. rules: [{
  76. required: true,
  77. message: "请输入通知类型",
  78. trigger: "blur"
  79. }]
  80. },
  81. {
  82. label: "通知时间",
  83. prop: "releaseTimeRange",
  84. type: "datetimerange",
  85. format: "yyyy-MM-dd hh:mm:ss",
  86. valueFormat: "yyyy-MM-dd hh:mm:ss",
  87. hide: true,
  88. addDisplay: false,
  89. editDisplay: false,
  90. viewDisplay: false,
  91. search: true,
  92. rules: [{
  93. required: true,
  94. message: "请输入通知时间",
  95. trigger: "blur"
  96. }]
  97. },
  98. {
  99. label: "通知日期",
  100. prop: "releaseTime",
  101. type: "date",
  102. format: "yyyy-MM-dd hh:mm:ss",
  103. valueFormat: "yyyy-MM-dd hh:mm:ss",
  104. rules: [{
  105. required: true,
  106. message: "请输入通知日期",
  107. trigger: "blur"
  108. }]
  109. },
  110. {
  111. label: "通知内容",
  112. prop: "content",
  113. span: 24,
  114. minRows: 6,
  115. type: "textarea"
  116. }
  117. ]
  118. },
  119. data: []
  120. };
  121. },
  122. computed: {
  123. ...mapGetters(["permission"]),
  124. permissionList() {
  125. return {
  126. addBtn: this.vaildData(this.permission.notice_add, false),
  127. viewBtn: this.vaildData(this.permission.notice_view, false),
  128. delBtn: this.vaildData(this.permission.notice_delete, false),
  129. editBtn: this.vaildData(this.permission.notice_edit, false)
  130. };
  131. },
  132. ids() {
  133. let ids = [];
  134. this.selectionList.forEach(ele => {
  135. ids.push(ele.id);
  136. });
  137. return ids.join(",");
  138. }
  139. },
  140. methods: {
  141. rowSave(row, loading, done) {
  142. add(row).then(() => {
  143. loading();
  144. this.onLoad(this.page);
  145. this.$message({
  146. type: "success",
  147. message: "操作成功!"
  148. });
  149. }, error => {
  150. done();
  151. console.log(error);
  152. });
  153. },
  154. rowUpdate(row, index, loading, done) {
  155. update(row).then(() => {
  156. loading();
  157. this.onLoad(this.page);
  158. this.$message({
  159. type: "success",
  160. message: "操作成功!"
  161. });
  162. }, error => {
  163. done();
  164. console.log(error);
  165. });
  166. },
  167. rowDel(row) {
  168. this.$confirm("确定将选择数据删除?", {
  169. confirmButtonText: "确定",
  170. cancelButtonText: "取消",
  171. type: "warning"
  172. })
  173. .then(() => {
  174. return remove(row.id);
  175. })
  176. .then(() => {
  177. this.onLoad(this.page);
  178. this.$message({
  179. type: "success",
  180. message: "操作成功!"
  181. });
  182. });
  183. },
  184. searchReset() {
  185. this.onLoad(this.page);
  186. },
  187. searchChange(params) {
  188. this.onLoad(this.page, params);
  189. },
  190. selectionChange(list) {
  191. this.selectionList = list;
  192. },
  193. handleDelete() {
  194. if (this.selectionList.length === 0) {
  195. this.$message.warning("请选择至少一条数据");
  196. return;
  197. }
  198. this.$confirm("确定将选择数据删除?", {
  199. confirmButtonText: "确定",
  200. cancelButtonText: "取消",
  201. type: "warning"
  202. })
  203. .then(() => {
  204. return remove(this.ids);
  205. })
  206. .then(() => {
  207. this.onLoad(this.page);
  208. this.$message({
  209. type: "success",
  210. message: "操作成功!"
  211. });
  212. this.$refs.crud.toggleSelection();
  213. });
  214. },
  215. beforeOpen(done, type) {
  216. if (["edit", "view"].includes(type)) {
  217. getNotice(this.form.id).then(res => {
  218. this.form = res.data.data;
  219. });
  220. }
  221. done();
  222. },
  223. onLoad(page, params = {}) {
  224. const {releaseTimeRange} = params;
  225. let values = {
  226. ...params,
  227. }
  228. if (releaseTimeRange) {
  229. values = {
  230. ...params,
  231. releaseTime_gt: releaseTimeRange[0],
  232. releaseTime_lt: releaseTimeRange[1],
  233. }
  234. values.releaseTimeRange = null;
  235. }
  236. getList(page.currentPage, page.pageSize, values).then(res => {
  237. const data = res.data.data;
  238. this.page.total = data.total;
  239. this.data = data.records;
  240. });
  241. }
  242. }
  243. };
  244. </script>
  245. <style>
  246. </style>