notice.vue 7.1 KB

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