branch.vue 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426
  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"></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. showActivities: false,
  82. showNews: false,
  83. showMeetings: false,
  84. form: {
  85. resourceType: 1
  86. },
  87. query: {},
  88. loading: true,
  89. page: {
  90. pageSize: 10,
  91. currentPage: 1,
  92. total: 0
  93. },
  94. selectionList: [],
  95. option: {
  96. dialogWidth: 600,
  97. height: 'auto',
  98. align: "center",
  99. calcHeight: 30,
  100. tip: false,
  101. searchShow: true,
  102. searchMenuSpan: 6,
  103. border: true,
  104. index: true,
  105. viewBtn: true,
  106. selection: true,
  107. dialogClickModal: false,
  108. column: [
  109. {
  110. label: "党支部名称",
  111. prop: "branchName",
  112. labelWidth: 100,
  113. span: 24,
  114. row: true,
  115. search: true,
  116. searchLabelWidth: 100,
  117. rules: [{
  118. required: true,
  119. message: "请输入党支部名称",
  120. trigger: "blur"
  121. }]
  122. },
  123. {
  124. label: "党内活动",
  125. prop: "activities",
  126. slot: true,
  127. labelWidth: 100,
  128. display: false
  129. },
  130. {
  131. label: "党内资讯",
  132. prop: "news",
  133. slot: true,
  134. labelWidth: 100,
  135. display: false
  136. },
  137. {
  138. label: "三会一课",
  139. prop: "meetings",
  140. slot: true,
  141. labelWidth: 100,
  142. display: false
  143. },
  144. {
  145. label: "党支部介绍",
  146. prop: "branchIntroduce",
  147. type: "textarea",
  148. labelWidth: 100,
  149. row: true,
  150. hide: true,
  151. rules: [{
  152. required: false,
  153. message: "请输入党支部介绍",
  154. trigger: "blur"
  155. }]
  156. },
  157. {
  158. label: "关联类型",
  159. prop: "resourceType",
  160. hide: true,
  161. type: "radio",
  162. dicData: [
  163. {
  164. label: "社区",
  165. value: 1
  166. },
  167. {
  168. label: "小区",
  169. value: 2
  170. }
  171. ],
  172. span: 24,
  173. row: true,
  174. rules: [{
  175. required: false,
  176. message: "请输入负责人类型方式",
  177. trigger: "blur"
  178. }]
  179. },
  180. {
  181. label:"关联对象",
  182. prop:"resourceName",
  183. addDisplay:false,
  184. editDisplay:false,
  185. },
  186. {
  187. label: "关联对象",
  188. prop: "resourceIds",
  189. type: "select",
  190. hide:true,
  191. viewDisplay:false,
  192. span:24,
  193. // dicUrl: "/api/cyzh-community/residential/list?agencyId={{key}}",
  194. // dicUrl: "/api/cyzh-community/residential/list?size=500",
  195. dicUrl: "/api/cyzh-community/agency/list?size=1000",
  196. dicFormatter:(res)=>{
  197. return res.data.records;//返回字典的层级结构
  198. },
  199. filterable: true,
  200. props: {
  201. label: "name",
  202. value: "id"
  203. },
  204. rules: [{
  205. required: true,
  206. message: "请选择所属小区",
  207. trigger: "blur"
  208. }]
  209. },
  210. ]
  211. },
  212. data: []
  213. };
  214. },
  215. computed: {
  216. ...mapGetters(["permission"]),
  217. permissionList() {
  218. return {
  219. addBtn: this.vaildData(this.permission.branch_add, false),
  220. viewBtn: this.vaildData(this.permission.branch_view, false),
  221. delBtn: this.vaildData(this.permission.branch_delete, false),
  222. editBtn: this.vaildData(this.permission.branch_edit, false)
  223. };
  224. },
  225. ids() {
  226. let ids = [];
  227. this.selectionList.forEach(ele => {
  228. ids.push(ele.id);
  229. });
  230. return ids.join(",");
  231. }
  232. },
  233. mounted() {
  234. let tenantType = localStorage.getItem("tenantType");
  235. let resouceTypeColumn = this.findObject(this.option.column, "resourceType");
  236. if (tenantType == 1) {//园区
  237. this.resourceTypeDefault = 3;
  238. resouceTypeColumn.dicData = [
  239. {
  240. label: "园区",
  241. value: 3
  242. }, {
  243. label: "企业",
  244. value: 4
  245. }
  246. ];
  247. let resourceIds = this.findObject(this.option.column, "resourceIds");
  248. resourceIds.dicUrl = `/api/cyzh-community/agency/list?size=500&name={{key}}`
  249. } else if (tenantType == 2) {//社区
  250. this.resourceTypeDefault = 1;
  251. resouceTypeColumn.dicData = [
  252. {
  253. label: "社区",
  254. value: 1
  255. }, {
  256. label: "小区",
  257. value: 2
  258. }
  259. ];
  260. }
  261. },
  262. watch: {
  263. 'form.resourceType': {
  264. handler(val) {
  265. console.log(val,"val")
  266. let resourceIds = this.findObject(this.option.column, "resourceIds");
  267. if (val == 1) {
  268. this.option.column[7].props.label="name"
  269. resourceIds.dicUrl = `/api/cyzh-community/agency/list?size=500&name={{key}}`
  270. } else if (val==2){
  271. this.option.column[7].props.label="name"
  272. resourceIds.dicUrl = "/api/cyzh-community/residentail/list?size=9999";
  273. }else if(val==3){
  274. this.option.column[7].props.label="name"
  275. resourceIds.dicUrl = `/api/cyzh-community/agency/list?size=500&name={{key}}`
  276. }else{
  277. resourceIds.dicUrl = "/api/cyzh-enterprise/enterprise/list?size=500";
  278. this.option.column[7].props.label="enterpriseName"
  279. }
  280. }
  281. }
  282. },
  283. methods: {
  284. show(row, type) {
  285. this.branchId = row.id;
  286. this.showParty = true;
  287. switch (type) {
  288. case 1:
  289. this.showActivities = true;
  290. break;
  291. case 2:
  292. this.showNews = true;
  293. break;
  294. case 3:
  295. this.showMeetings = true;
  296. break;
  297. default:
  298. break;
  299. }
  300. },
  301. rowSave(row, done, loading) {
  302. row.resourceIds = row.resourceIds.toString()
  303. add(row).then(() => {
  304. this.onLoad(this.page);
  305. this.$message({
  306. type: "success",
  307. message: "操作成功!"
  308. });
  309. done();
  310. }, error => {
  311. loading();
  312. window.console.log(error);
  313. });
  314. },
  315. rowUpdate(row, index, done, loading) {
  316. row.residentialIds = row.residentialIds.toString();
  317. update(row).then(() => {
  318. this.onLoad(this.page);
  319. this.$message({
  320. type: "success",
  321. message: "操作成功!"
  322. });
  323. done();
  324. }, error => {
  325. loading();
  326. console.log(error);
  327. });
  328. },
  329. rowDel(row) {
  330. this.$confirm("确定将选择数据删除?", {
  331. confirmButtonText: "确定",
  332. cancelButtonText: "取消",
  333. type: "warning"
  334. })
  335. .then(() => {
  336. return remove(row.id);
  337. })
  338. .then(() => {
  339. this.onLoad(this.page);
  340. this.$message({
  341. type: "success",
  342. message: "操作成功!"
  343. });
  344. });
  345. },
  346. handleDelete() {
  347. if (this.selectionList.length === 0) {
  348. this.$message.warning("请选择至少一条数据");
  349. return;
  350. }
  351. this.$confirm("确定将选择数据删除?", {
  352. confirmButtonText: "确定",
  353. cancelButtonText: "取消",
  354. type: "warning"
  355. })
  356. .then(() => {
  357. return remove(this.ids);
  358. })
  359. .then(() => {
  360. this.onLoad(this.page);
  361. this.$message({
  362. type: "success",
  363. message: "操作成功!"
  364. });
  365. this.$refs.crud.toggleSelection();
  366. });
  367. },
  368. beforeOpen(done, type) {
  369. if (["edit", "view"].includes(type)) {
  370. getDetail(this.form.id).then(res => {
  371. this.form = res.data.data;
  372. });
  373. }
  374. done();
  375. },
  376. searchReset() {
  377. this.query = {};
  378. this.onLoad(this.page);
  379. },
  380. searchChange(params, done) {
  381. this.query = params;
  382. this.page.currentPage = 1;
  383. this.onLoad(this.page, params);
  384. done();
  385. },
  386. selectionChange(list) {
  387. this.selectionList = list;
  388. },
  389. selectionClear() {
  390. this.selectionList = [];
  391. this.$refs.crud.toggleSelection();
  392. },
  393. currentChange(currentPage) {
  394. this.page.currentPage = currentPage;
  395. },
  396. sizeChange(pageSize) {
  397. this.page.pageSize = pageSize;
  398. },
  399. refreshChange() {
  400. this.onLoad(this.page, this.query);
  401. },
  402. onLoad(page, params = {}) {
  403. this.loading = true;
  404. getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
  405. const data = res.data.data;
  406. this.page.total = data.total;
  407. this.data = data.records;
  408. this.loading = false;
  409. this.selectionClear();
  410. });
  411. }
  412. }
  413. };
  414. </script>
  415. <style>
  416. </style>