branch.vue 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438
  1. <template>
  2. <basic-container>
  3. <avue-crud :option="option"
  4. :table-loading="loading"
  5. :data="data"
  6. :page="page"
  7. :permission="permissionList"
  8. :before-open="beforeOpen"
  9. v-model="form"
  10. ref="crud"
  11. @row-update="rowUpdate"
  12. @row-save="rowSave"
  13. @row-del="rowDel"
  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.branch_delete"
  27. @click="handleDelete">删 除
  28. </el-button>
  29. </template>
  30. <!-- <template slot="menu" slot-scope="scope">-->
  31. <!-- <el-button type="text" size="small" icon="el-icon-setting">-->
  32. <!-- <el-dropdown @command="tip">-->
  33. <!-- <span class="el-dropdown-link">-->
  34. <!-- 操作<i class="el-icon-arrow-down el-icon&#45;&#45;right"> </i>-->
  35. <!-- </span>-->
  36. <!-- <el-dropdown-menu slot="dropdown">-->
  37. <!-- <el-dropdown-item divided @click.native="detail(scope.row)" icon="el-icon-office-building">详情-->
  38. <!-- </el-dropdown-item>-->
  39. <!-- <el-dropdown-item divided @click.native="edit(scope.row)" icon="el-icon-school">编辑</el-dropdown-item>-->
  40. <!-- <el-dropdown-item divided @click.native="manage(scope.row)" icon="el-icon-s-order">管理</el-dropdown-item>-->
  41. <!-- </el-dropdown-menu>-->
  42. <!-- </el-dropdown>-->
  43. <!-- </el-button>-->
  44. <!-- </template>-->
  45. <template slot="activities" slot-scope="{row}">
  46. <el-button size="mini" @click="show(row,1)">查看党内活动</el-button>
  47. </template>
  48. <template slot="news" slot-scope="{row}">
  49. <el-button size="mini" @click="show(row,2)">查看党内资讯</el-button>
  50. </template>
  51. <template slot="meetings" slot-scope="{row}">
  52. <el-button size="mini" @click="show(row,3)">查看三会一课</el-button>
  53. </template>
  54. </avue-crud>
  55. <el-drawer :visible.sync="showActivities" size="85%" direction="rtl" :modal-append-to-body="false" destroy-on-close append-to-body center >
  56. <activity ref="activity" :branch-id="branchId" :branch-name="branchName"></activity>
  57. </el-drawer>
  58. <el-drawer :visible.sync="showNews" size="85%" direction="rtl" :modal-append-to-body="false" destroy-on-close append-to-body center >
  59. <newslist ref="newslist" :branch-id="branchId" ></newslist>
  60. </el-drawer>
  61. <el-drawer :visible.sync="showMeetings" size="85%" direction="rtl" :modal-append-to-body="false" destroy-on-close append-to-body center >
  62. <meetinglist ref="meetinglist" :branch-id="branchId"></meetinglist>
  63. </el-drawer>
  64. </basic-container>
  65. </template>
  66. <script>
  67. import {getList, getDetail, add, update, remove} from "@/api/party/branch";
  68. import {mapGetters} from "vuex";
  69. import activity from "@/views/party/activity";
  70. import newslist from "@/views/party/news";
  71. import meetinglist from "@/views/party/meeting";
  72. export default {
  73. components: {
  74. activity,
  75. newslist,
  76. meetinglist
  77. },
  78. data() {
  79. return {
  80. branchId: '',
  81. branchName: '',
  82. showActivities: false,
  83. showNews: false,
  84. showMeetings: false,
  85. form: {
  86. resourceType: '1'
  87. },
  88. query: {},
  89. loading: true,
  90. page: {
  91. pageSize: 10,
  92. currentPage: 1,
  93. total: 0
  94. },
  95. selectionList: [],
  96. option: {
  97. dialogWidth: 600,
  98. height: 'auto',
  99. align: "center",
  100. calcHeight: 30,
  101. tip: false,
  102. searchShow: true,
  103. searchMenuSpan: 6,
  104. border: true,
  105. index: true,
  106. viewBtn: true,
  107. selection: true,
  108. dialogClickModal: false,
  109. column: [
  110. {
  111. label: "党支部名称",
  112. prop: "branchName",
  113. labelWidth: 100,
  114. span: 24,
  115. row: true,
  116. search: true,
  117. searchLabelWidth: 100,
  118. rules: [{
  119. required: true,
  120. message: "请输入党支部名称",
  121. trigger: "blur"
  122. }]
  123. },
  124. {
  125. label: "党内活动",
  126. prop: "activities",
  127. slot: true,
  128. labelWidth: 100,
  129. display: false
  130. },
  131. {
  132. label: "党内资讯",
  133. prop: "news",
  134. slot: true,
  135. labelWidth: 100,
  136. display: false
  137. },
  138. {
  139. label: "三会一课",
  140. prop: "meetings",
  141. slot: true,
  142. labelWidth: 100,
  143. display: false
  144. },
  145. {
  146. label: "党支部介绍",
  147. prop: "branchIntroduce",
  148. type: "textarea",
  149. labelWidth: 100,
  150. row: true,
  151. hide: true,
  152. rules: [{
  153. required: false,
  154. message: "请输入党支部介绍",
  155. trigger: "blur"
  156. }]
  157. },
  158. {
  159. label: "关联类型",
  160. prop: "resourceType",
  161. hide: true,
  162. type: "radio",
  163. dicData: [
  164. {
  165. label: "社区",
  166. value: 1
  167. },
  168. {
  169. label: "小区",
  170. value: 2
  171. }
  172. ],
  173. span: 24,
  174. row: true,
  175. rules: [{
  176. required: true,
  177. message: "请输入负责人类型方式",
  178. trigger: "blur"
  179. }]
  180. },
  181. {
  182. label:"关联对象",
  183. prop:"resourceNames",
  184. type: "textarea",
  185. addDisplay:false,
  186. editDisplay:false,
  187. // row: true,
  188. span: 24
  189. },
  190. {
  191. label: "关联对象",
  192. prop: "resourceIds",
  193. type: "select",
  194. multiple: true,
  195. hide:true,
  196. viewDisplay:false,
  197. remote: true,
  198. span: 24,
  199. dicUrl: "/api/cyzh-community/agency/list?size=100",
  200. dicFormatter:(res)=>{
  201. return res.data.records;//返回字典的层级结构
  202. },
  203. filterable: true,
  204. props: {
  205. label: "name",
  206. value: "id"
  207. },
  208. rules: [{
  209. required: true,
  210. message: "请选择所属小区",
  211. trigger: "blur"
  212. }]
  213. },
  214. ]
  215. },
  216. data: []
  217. };
  218. },
  219. computed: {
  220. ...mapGetters(["permission"]),
  221. permissionList() {
  222. return {
  223. addBtn: this.vaildData(this.permission.branch_add, false),
  224. viewBtn: this.vaildData(this.permission.branch_view, false),
  225. delBtn: this.vaildData(this.permission.branch_delete, false),
  226. editBtn: this.vaildData(this.permission.branch_edit, false)
  227. };
  228. },
  229. ids() {
  230. let ids = [];
  231. this.selectionList.forEach(ele => {
  232. ids.push(ele.id);
  233. });
  234. return ids.join(",");
  235. }
  236. },
  237. mounted() {
  238. let tenantType = localStorage.getItem("tenantType");
  239. let resouceTypeColumn = this.findObject(this.option.column, "resourceType");
  240. if (tenantType == 1) {//园区
  241. this.resourceTypeDefault = 3;
  242. resouceTypeColumn.dicData = [
  243. {
  244. label: "园区",
  245. value: 3
  246. }, {
  247. label: "企业",
  248. value: 4
  249. }
  250. ];
  251. let resourceIds = this.findObject(this.option.column, "resourceIds");
  252. resourceIds.dicUrl = `/api/cyzh-community/agency/list?size=500&name={{key}}`
  253. } else if (tenantType == 2) {//社区
  254. this.resourceTypeDefault = 1;
  255. resouceTypeColumn.dicData = [
  256. {
  257. label: "社区",
  258. value: 1
  259. }, {
  260. label: "小区",
  261. value: 2
  262. }
  263. ];
  264. }
  265. },
  266. watch: {
  267. 'form.resourceType': {
  268. handler(val) {
  269. let resourceIds = this.findObject(this.option.column, "resourceIds");
  270. this.form.resourceIds = null
  271. resourceIds.props.label="name"
  272. if (val == 1) {
  273. resourceIds.dicUrl = `/api/cyzh-community/agency/list?size=100&name={{key}}`
  274. } else if (val==2){
  275. resourceIds.dicUrl = "/api/cyzh-community/residential/list?size=100&name={{key}}";
  276. }else if(val==3){
  277. resourceIds.dicUrl = `/api/cyzh-community/agency/list?size=100&name={{key}}`
  278. }else{
  279. resourceIds.dicUrl = "/api/cyzh-enterprise/enterprise/list?size=100&enterpriseName={{key}}";
  280. resourceIds.props.label="enterpriseName"
  281. }
  282. }
  283. }
  284. },
  285. methods: {
  286. show(row, type) {
  287. debugger
  288. this.branchId = row.id;
  289. this.branchName = row.branchName;
  290. this.showParty = true;
  291. switch (type) {
  292. case 1:
  293. this.showActivities = true;
  294. break;
  295. case 2:
  296. this.showNews = true;
  297. break;
  298. case 3:
  299. this.showMeetings = true;
  300. break;
  301. default:
  302. break;
  303. }
  304. },
  305. rowSave(row, done, loading) {
  306. row.resourceIds = row.resourceIds.toString()
  307. add(row).then(() => {
  308. this.onLoad(this.page);
  309. this.$message({
  310. type: "success",
  311. message: "操作成功!"
  312. });
  313. done();
  314. }, error => {
  315. loading();
  316. window.console.log(error);
  317. });
  318. },
  319. rowUpdate(row, index, done, loading) {
  320. row.resourceIds = row.resourceIds.toString();
  321. update(row).then(() => {
  322. this.onLoad(this.page);
  323. this.$message({
  324. type: "success",
  325. message: "操作成功!"
  326. });
  327. done();
  328. }, error => {
  329. loading();
  330. console.log(error);
  331. });
  332. },
  333. rowDel(row) {
  334. this.$confirm("确定将选择数据删除?", {
  335. confirmButtonText: "确定",
  336. cancelButtonText: "取消",
  337. type: "warning"
  338. })
  339. .then(() => {
  340. return remove(row.id);
  341. })
  342. .then(() => {
  343. this.onLoad(this.page);
  344. this.$message({
  345. type: "success",
  346. message: "操作成功!"
  347. });
  348. });
  349. },
  350. handleDelete() {
  351. if (this.selectionList.length === 0) {
  352. this.$message.warning("请选择至少一条数据");
  353. return;
  354. }
  355. this.$confirm("确定将选择数据删除?", {
  356. confirmButtonText: "确定",
  357. cancelButtonText: "取消",
  358. type: "warning"
  359. })
  360. .then(() => {
  361. return remove(this.ids);
  362. })
  363. .then(() => {
  364. this.onLoad(this.page);
  365. this.$message({
  366. type: "success",
  367. message: "操作成功!"
  368. });
  369. this.$refs.crud.toggleSelection();
  370. });
  371. },
  372. beforeOpen(done, type) {
  373. if (type == 'add'){
  374. let tenantType = localStorage.getItem("tenantType");
  375. if (tenantType == 1){
  376. this.form.resourceType = 3;
  377. }else{
  378. this.form.resourceType = 1;
  379. }
  380. }
  381. if (["edit", "view"].includes(type)) {
  382. getDetail(this.form.id).then(res => {
  383. this.form = res.data.data;
  384. });
  385. }
  386. done();
  387. },
  388. searchReset() {
  389. this.query = {};
  390. this.onLoad(this.page);
  391. },
  392. searchChange(params, done) {
  393. this.query = params;
  394. this.page.currentPage = 1;
  395. this.onLoad(this.page, params);
  396. done();
  397. },
  398. selectionChange(list) {
  399. this.selectionList = list;
  400. },
  401. selectionClear() {
  402. this.selectionList = [];
  403. this.$refs.crud.toggleSelection();
  404. },
  405. currentChange(currentPage) {
  406. this.page.currentPage = currentPage;
  407. },
  408. sizeChange(pageSize) {
  409. this.page.pageSize = pageSize;
  410. },
  411. refreshChange() {
  412. this.onLoad(this.page, this.query);
  413. },
  414. onLoad(page, params = {}) {
  415. this.loading = true;
  416. getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
  417. const data = res.data.data;
  418. this.page.total = data.total;
  419. this.data = data.records;
  420. this.loading = false;
  421. this.selectionClear();
  422. });
  423. }
  424. }
  425. };
  426. </script>
  427. <style>
  428. </style>