notice.vue 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354
  1. <template>
  2. <basic-container>
  3. <el-dialog @close="dialogShow=false" append-to-body :close-on-click-modal="false" :visible.sync="dialogShow"
  4. :destroy-on-close="true"
  5. :title="dialogTitle" width="60%">
  6. <notice-receiver v-if="dialogTitle==='接收列表'&& dialogShow" ref="refName" :operateId="operateId"
  7. :isResubmit="isResubmit" @finish="dialogShow=false"></notice-receiver>
  8. </el-dialog>
  9. <avue-crud :option="option"
  10. :table-loading="loading"
  11. :data="data"
  12. :page.sync="page"
  13. :permission="permissionList"
  14. :before-open="beforeOpen"
  15. v-model="form"
  16. ref="crud"
  17. @row-update="rowUpdate"
  18. @row-save="rowSave"
  19. @row-del="rowDel"
  20. @search-change="searchChange"
  21. @search-reset="searchReset"
  22. @selection-change="selectionChange"
  23. @current-change="currentChange"
  24. @size-change="sizeChange"
  25. @refresh-change="refreshChange"
  26. @on-load="onLoad">
  27. <template slot-scope="scope" slot="menu">
  28. <el-button class="el-button el-button--text el-button--small" icon="el-icon-edit"
  29. v-if="(userInfo.tenant_id === '000000' && scope.row.senderType === 'PLATFORM')||(userInfo.tenant_id !== '000000' && scope.row.senderType === 'MALL')"
  30. @click="rowEdit(scope.row,scope.index)">编辑
  31. </el-button>
  32. <el-button class="el-button el-button--text el-button--small" icon="el-icon-delete"
  33. v-if="(userInfo.tenant_id === '000000' && scope.row.senderType === 'PLATFORM')||(userInfo.tenant_id !== '000000' && scope.row.senderType === 'MALL')"
  34. @click="rowDel(scope.row)">删除
  35. </el-button>
  36. <el-button type="text" size="small" icon="icon-navicon-xxjsr" plain class="none-border"
  37. @click.stop="openDialog(scope.row.id,'接收列表')">接收列表
  38. </el-button>
  39. </template>
  40. </avue-crud>
  41. </basic-container>
  42. </template>
  43. <script>
  44. import {add, getDetail, getList, remove, update} from "@/api/ldt_notice/notice";
  45. import {mapGetters} from "vuex";
  46. import NoticeReceiver from "./notice-receiver";
  47. export default {
  48. components: {NoticeReceiver},
  49. data() {
  50. return {
  51. dialogShow: false,
  52. operateId: '',
  53. dialogTitle: '',
  54. form: {},
  55. query: {},
  56. loading: true,
  57. page: {
  58. pageSize: 10,
  59. currentPage: 1,
  60. total: 0
  61. },
  62. selectionList: [],
  63. option: {
  64. height: 'auto',
  65. calcHeight: 30,
  66. tip: false,
  67. searchShow: true,
  68. searchMenuSpan: 6,
  69. border: true,
  70. index: true,
  71. viewBtn: true,
  72. selection: true,
  73. delBtn: false,
  74. editBtn: false,
  75. dialogClickModal: false,
  76. column: [
  77. {
  78. label: "标题",
  79. prop: "title",
  80. rules: [{
  81. required: true,
  82. message: "请输入标题",
  83. trigger: "blur"
  84. }]
  85. },
  86. {
  87. label: "发送人",
  88. prop: "sender",
  89. display: false,
  90. rules: [{
  91. required: true,
  92. message: "请输入发送人",
  93. trigger: "blur"
  94. }]
  95. },
  96. {
  97. label: "发送者类型",
  98. labelWidth: 100,
  99. prop: "senderType",
  100. type: "select",
  101. search: true,
  102. searchLabelWidth: 90,
  103. display: false,
  104. dicData: [],
  105. rules: [{
  106. required: true,
  107. message: "请输入发送者类型",
  108. trigger: "blur"
  109. }]
  110. },
  111. {
  112. label: "接收者类型",
  113. labelWidth: 100,
  114. prop: "receiverTypes",
  115. type: "checkbox",
  116. searchLabelWidth: 90,
  117. hide: true,
  118. editDisplay: false,
  119. viewDisplay: false,
  120. span: 24,
  121. dicData: [],
  122. rules: [{
  123. required: true,
  124. message: "接收者类型",
  125. trigger: "blur"
  126. }]
  127. },
  128. {
  129. label: "内容",
  130. prop: "content",
  131. component: 'AvueUeditor',
  132. options: {
  133. action: '/api/blade-resource/oss/endpoint/put-file',
  134. props: {
  135. res: "data",
  136. url: "link",
  137. }
  138. },
  139. hide: true,
  140. minRows: 6,
  141. span: 24,
  142. rules: [{
  143. required: true,
  144. message: "请输入内容",
  145. trigger: "blur"
  146. }]
  147. },
  148. {
  149. label: "创建时间",
  150. prop: "createTime",
  151. addDisplay: false,
  152. editDisplay: false,
  153. },
  154. ]
  155. },
  156. data: []
  157. };
  158. },
  159. computed: {
  160. ...mapGetters(["permission", "userInfo"]),
  161. permissionList() {
  162. return {
  163. addBtn: this.vaildData(this.permission.notice_add, false),
  164. viewBtn: this.vaildData(this.permission.notice_view, false),
  165. delBtn: this.vaildData(this.permission.notice_delete, false),
  166. editBtn: this.vaildData(this.permission.notice_edit, false)
  167. };
  168. },
  169. ids() {
  170. let ids = [];
  171. this.selectionList.forEach(ele => {
  172. ids.push(ele.id);
  173. });
  174. return ids.join(",");
  175. }
  176. },
  177. created() {
  178. const senderType = this.option.column.find(ele => {
  179. return ele.prop === "senderType";
  180. });
  181. senderType.dicData = this.senderTypeDicDataFun();
  182. const receiverTypes = this.option.column.find(ele => {
  183. return ele.prop === "receiverTypes";
  184. });
  185. receiverTypes.dicData = this.receiverTypesDicDataFun();
  186. },
  187. methods: {
  188. rowEdit(row, index) {
  189. this.$refs.crud.rowEdit(row, index);
  190. },
  191. rowSave(row, done, loading) {
  192. const content = encodeURIComponent(row.content);
  193. row.content = content;
  194. add(row).then(() => {
  195. this.onLoad(this.page);
  196. this.$message({
  197. type: "success",
  198. message: "操作成功!"
  199. });
  200. done();
  201. }, error => {
  202. loading();
  203. window.console.log(error);
  204. });
  205. },
  206. rowUpdate(row, index, done, loading) {
  207. const content = encodeURIComponent(row.content);
  208. row.content = content;
  209. update(row).then(() => {
  210. this.onLoad(this.page);
  211. this.$message({
  212. type: "success",
  213. message: "操作成功!"
  214. });
  215. done();
  216. }, error => {
  217. loading();
  218. console.log(error);
  219. });
  220. },
  221. rowDel(row) {
  222. this.$confirm("确定将选择数据删除?", {
  223. confirmButtonText: "确定",
  224. cancelButtonText: "取消",
  225. type: "warning"
  226. })
  227. .then(() => {
  228. return remove(row.id);
  229. })
  230. .then(() => {
  231. this.onLoad(this.page);
  232. this.$message({
  233. type: "success",
  234. message: "操作成功!"
  235. });
  236. });
  237. },
  238. handleDelete() {
  239. if (this.selectionList.length === 0) {
  240. this.$message.warning("请选择至少一条数据");
  241. return;
  242. }
  243. this.$confirm("确定将选择数据删除?", {
  244. confirmButtonText: "确定",
  245. cancelButtonText: "取消",
  246. type: "warning"
  247. })
  248. .then(() => {
  249. return remove(this.ids);
  250. })
  251. .then(() => {
  252. this.onLoad(this.page);
  253. this.$message({
  254. type: "success",
  255. message: "操作成功!"
  256. });
  257. this.$refs.crud.toggleSelection();
  258. });
  259. },
  260. beforeOpen(done, type) {
  261. if (["edit", "view"].includes(type)) {
  262. getDetail(this.form.id).then(res => {
  263. const content = res.data.data.content;
  264. res.data.data.content = decodeURIComponent(content);
  265. this.form = res.data.data;
  266. });
  267. }
  268. done();
  269. },
  270. searchReset() {
  271. this.query = {};
  272. this.onLoad(this.page);
  273. },
  274. searchChange(params, done) {
  275. this.query = params;
  276. this.page.currentPage = 1;
  277. this.onLoad(this.page, params);
  278. done();
  279. },
  280. selectionChange(list) {
  281. this.selectionList = list;
  282. },
  283. selectionClear() {
  284. this.selectionList = [];
  285. this.$refs.crud.toggleSelection();
  286. },
  287. currentChange(currentPage) {
  288. this.page.currentPage = currentPage;
  289. },
  290. sizeChange(pageSize) {
  291. this.page.pageSize = pageSize;
  292. },
  293. refreshChange() {
  294. this.onLoad(this.page, this.query);
  295. },
  296. senderTypeDicDataFun() {
  297. const data =
  298. [
  299. {label: "商场", value: "MALL"},
  300. {label: "商家", value: "SHOP"}
  301. ];
  302. if (this.userInfo.tenant_id === '000000') {
  303. data.push({label: "平台", value: "PLATFORM"});
  304. }
  305. return data;
  306. },
  307. receiverTypesDicDataFun() {
  308. const data =
  309. [
  310. {label: "商家", value: "SHOP"}
  311. ];
  312. if (this.userInfo.tenant_id === '000000') {
  313. data.push({label: "商场", value: "MALL"});
  314. data.push({label: "用户", value: "CONSUMER"});
  315. } else {
  316. data.push({label: "会员", value: "MEMBER"});
  317. }
  318. return data;
  319. },
  320. openDialog(id, name) {
  321. this.dialogTitle = name
  322. this.operateId = id
  323. this.dialogShow = true
  324. this.canReset = true
  325. },
  326. handleSenderType() {
  327. if (this.userInfo.tenant_id === '000000') {
  328. this.form.senderType = 'PLATFORM';
  329. } else {
  330. this.form.senderType = 'MALL';
  331. }
  332. },
  333. onLoad(page, params = {}) {
  334. this.loading = true;
  335. getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
  336. const data = res.data.data;
  337. this.page.total = data.total;
  338. this.data = data.records;
  339. this.loading = false;
  340. this.selectionClear();
  341. this.handleSenderType();
  342. });
  343. }
  344. }
  345. };
  346. </script>
  347. <style>
  348. </style>