notice.vue 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327
  1. <template>
  2. <basic-container>
  3. <avue-crud :option="option"
  4. :table-loading="loading"
  5. :data="data"
  6. :page.sync="page"
  7. ref="crud"
  8. @row-del="rowDel"
  9. v-model="form"
  10. :permission="permissionList"
  11. @row-update="rowUpdate"
  12. @row-save="rowSave"
  13. :before-open="beforeOpen"
  14. @search-change="searchChange"
  15. @search-reset="searchReset"
  16. @selection-change="selectionChange"
  17. @current-change="currentChange"
  18. @size-change="sizeChange"
  19. @refresh-change="refreshChange"
  20. @on-load="onLoad">
  21. <template slot="menuLeft">
  22. <el-button type="danger"
  23. size="small"
  24. icon="el-icon-delete"
  25. plain
  26. v-if="permission.notice_delete"
  27. @click="handleDelete">删 除
  28. </el-button>
  29. </template>
  30. <template slot="fileListForm">
  31. <c-upload :basic="true"
  32. :data="fileList"
  33. deleteUrl="/api/blade-client/common-file/remove"
  34. :enumerationValue="35.1"></c-upload>
  35. </template>
  36. <template slot-scope="{row}"
  37. slot="category">
  38. <el-tag>{{ row.categoryName }}</el-tag>
  39. </template>
  40. </avue-crud>
  41. </basic-container>
  42. </template>
  43. <script>
  44. import {getList, remove, update, add, getNotice} from "@/api/desk/notice";
  45. import {mapGetters} from "vuex";
  46. export default {
  47. data() {
  48. return {
  49. form: {},
  50. fileList:[],
  51. query: {},
  52. loading: true,
  53. page: {
  54. pageSize: 10,
  55. currentPage: 1,
  56. total: 0
  57. },
  58. selectionList: [],
  59. option: {
  60. height: 'auto',
  61. calcHeight: 30,
  62. dialogWidth: 950,
  63. tip: false,
  64. searchShow: true,
  65. searchMenuSpan: 6,
  66. border: true,
  67. index: true,
  68. viewBtn: true,
  69. selection: true,
  70. excelBtn: true,
  71. dialogClickModal: false,
  72. column: [
  73. {
  74. label: "通知标题",
  75. prop: "title",
  76. span: 12,
  77. // row: true,
  78. search: true,
  79. overHidden: true,
  80. rules: [{
  81. required: true,
  82. message: "请输入通知标题",
  83. trigger: "blur"
  84. }]
  85. }, {
  86. label: "发送范围",
  87. prop: "sendRange",
  88. overHidden: true,
  89. dicUrl: "/api/blade-system/dept/treeUser",
  90. type: 'tree',
  91. span: 12,
  92. props: {
  93. label: "title",
  94. value: "value",
  95. },
  96. multiple:true,
  97. tags:true,
  98. },
  99. {
  100. label: "通知类型",
  101. type: "select",
  102. dicUrl: "/api/blade-system/dict/dictionary?code=notice",
  103. props: {
  104. label: "dictValue",
  105. value: "dictKey"
  106. },
  107. dataType: "number",
  108. slot: true,
  109. overHidden: true,
  110. prop: "category",
  111. search: true,
  112. rules: [{
  113. required: true,
  114. message: "请输入通知类型",
  115. trigger: "blur"
  116. }]
  117. },
  118. // {
  119. // label: "通知时间",
  120. // prop: "releaseTimeRange",
  121. // type: "datetime",
  122. // format: "yyyy-MM-dd hh:mm:ss",
  123. // valueFormat: "yyyy-MM-dd hh:mm:ss",
  124. // searchRange: true,
  125. // hide: true,
  126. // rules: [{
  127. // required: true,
  128. // message: "请输入通知时间",
  129. // trigger: "blur"
  130. // }]
  131. // },
  132. {
  133. label: "通知日期",
  134. prop: "releaseTime",
  135. type: "datetime",
  136. format: "yyyy-MM-dd hh:mm:ss",
  137. overHidden: true,
  138. valueFormat: "yyyy-MM-dd hh:mm:ss",
  139. search: true,
  140. rules: [{
  141. required: true,
  142. message: "请输入通知日期",
  143. trigger: "click"
  144. }]
  145. },
  146. {
  147. label: "通知内容",
  148. prop: "content",
  149. component: 'AvueUeditor',
  150. options: {
  151. action: '/api/blade-resource/oss/endpoint/put-file',
  152. props: {
  153. res: "data",
  154. url: "link",
  155. }
  156. },
  157. showColumn: false,
  158. hide: true,
  159. minRows: 6,
  160. span: 24,
  161. }, {
  162. hide: true,
  163. showColumn: false,
  164. label: "附件明细",
  165. prop: "fileList",
  166. span: 24,
  167. },
  168. ]
  169. },
  170. data: []
  171. };
  172. },
  173. computed: {
  174. ...mapGetters(["permission"]),
  175. permissionList() {
  176. return {
  177. addBtn: this.vaildData(this.permission.notice_add, false),
  178. viewBtn: this.vaildData(this.permission.notice_view, false),
  179. delBtn: this.vaildData(this.permission.notice_delete, false),
  180. editBtn: this.vaildData(this.permission.notice_edit, false)
  181. };
  182. },
  183. ids() {
  184. let ids = [];
  185. this.selectionList.forEach(ele => {
  186. ids.push(ele.id);
  187. });
  188. return ids.join(",");
  189. }
  190. },
  191. methods: {
  192. rowSave(row, done, loading) {
  193. let data = row
  194. data.sendRange = data.sendRange.join(',')
  195. data.fileList = this.fileList
  196. add(data).then(() => {
  197. this.onLoad(this.page);
  198. this.$message({
  199. type: "success",
  200. message: "操作成功!"
  201. });
  202. done();
  203. }, error => {
  204. window.console.log(error);
  205. loading();
  206. });
  207. },
  208. rowUpdate(row, index, done, loading) {
  209. let data = row
  210. data.sendRange = data.sendRange.join(',')
  211. data.fileList = this.fileList
  212. update(data).then(() => {
  213. this.onLoad(this.page);
  214. this.$message({
  215. type: "success",
  216. message: "操作成功!"
  217. });
  218. done();
  219. }, error => {
  220. window.console.log(error);
  221. loading();
  222. });
  223. },
  224. rowDel(row) {
  225. this.$confirm("确定将选择数据删除?", {
  226. confirmButtonText: "确定",
  227. cancelButtonText: "取消",
  228. type: "warning"
  229. })
  230. .then(() => {
  231. return remove(row.id);
  232. })
  233. .then(() => {
  234. this.onLoad(this.page);
  235. this.$message({
  236. type: "success",
  237. message: "操作成功!"
  238. });
  239. });
  240. },
  241. searchReset() {
  242. this.query = {};
  243. this.onLoad(this.page);
  244. },
  245. searchChange(params, done) {
  246. this.query = params;
  247. this.page.currentPage = 1;
  248. this.onLoad(this.page, params);
  249. done();
  250. },
  251. selectionChange(list) {
  252. this.selectionList = list;
  253. },
  254. selectionClear() {
  255. this.selectionList = [];
  256. this.$refs.crud.toggleSelection();
  257. },
  258. handleDelete() {
  259. if (this.selectionList.length === 0) {
  260. this.$message.warning("请选择至少一条数据");
  261. return;
  262. }
  263. this.$confirm("确定将选择数据删除?", {
  264. confirmButtonText: "确定",
  265. cancelButtonText: "取消",
  266. type: "warning"
  267. })
  268. .then(() => {
  269. return remove(this.ids);
  270. })
  271. .then(() => {
  272. this.onLoad(this.page);
  273. this.$message({
  274. type: "success",
  275. message: "操作成功!"
  276. });
  277. this.$refs.crud.toggleSelection();
  278. });
  279. },
  280. beforeOpen(done, type) {
  281. if (["edit", "view"].includes(type)) {
  282. getNotice(this.form.id).then(res => {
  283. this.form = res.data.data;
  284. this.fileList = res.data.data.fileList
  285. delete this.form.fileList
  286. if (this.form.sendRange) this.form.sendRange = this.form.sendRange.split(',')
  287. });
  288. }
  289. done();
  290. },
  291. currentChange(currentPage) {
  292. this.page.currentPage = currentPage;
  293. },
  294. sizeChange(pageSize) {
  295. this.page.pageSize = pageSize;
  296. },
  297. refreshChange() {
  298. this.onLoad(this.page, this.query);
  299. },
  300. onLoad(page, params = {}) {
  301. const {releaseTime} = this.query;
  302. let values = {
  303. ...params,
  304. };
  305. if (releaseTime) {
  306. values = {
  307. ...params,
  308. releaseTimeStart: releaseTime[0],
  309. releaseTimeEnd: releaseTime[1],
  310. ...this.query
  311. };
  312. values.releaseTime = null;
  313. }
  314. this.loading = true;
  315. getList(page.currentPage, page.pageSize, values).then(res => {
  316. const data = res.data.data;
  317. this.page.total = data.total;
  318. this.data = data.records;
  319. this.loading = false;
  320. this.selectionClear();
  321. });
  322. }
  323. }
  324. };
  325. </script>