floor.vue 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515
  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.floor_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--right"> </i>
  35. </span>
  36. <el-dropdown-menu slot="dropdown">
  37. <el-dropdown-item divided @click.native="floorManage(scope.row.id,3)" icon="el-icon-s-home">房间管理</el-dropdown-item>
  38. <!-- <el-dropdown-item divided @click.native="floorManage(scope.row.id,4)" icon="el-icon-user-solid">住户管理</el-dropdown-item>-->
  39. <!-- <el-dropdown-item divided @click.native="tip(2,scope.row)">审核通过</el-dropdown-item> -->
  40. </el-dropdown-menu>
  41. </el-dropdown>
  42. </el-button>
  43. <!-- <el-button type="text" icon="el-icon-setting" size="mini" @click="manageResidential(scope.row.oldId)">管理</el-button> -->
  44. </template>
  45. <template slot="residentialId" slot-scope="scope">{{scope.row.residentialName}}</template>
  46. <template slot="buildingId" slot-scope="scope">{{scope.row.buildingName}}</template>
  47. <template slot="unitId" slot-scope="scope">{{scope.row.unitName}}</template>
  48. </avue-crud>
  49. </basic-container>
  50. </template>
  51. <script>
  52. import {getList, getDetail, add, update, remove} from "../../api/community/floor.js";
  53. import {mapGetters} from "vuex";
  54. import {communityManage} from "@/views/community/util/communityManage";
  55. import {validatePhone} from "../../util/validator";
  56. export default {
  57. data() {
  58. return {
  59. form: {},
  60. query: {},
  61. loading: true,
  62. page: {
  63. pageSize: 10,
  64. currentPage: 1,
  65. total: 0
  66. },
  67. selectionList: [],
  68. option: {
  69. height:'auto',
  70. calcHeight: 60,
  71. tip: false,
  72. searchShow: true,
  73. searchMenuSpan: 6,
  74. border: true,
  75. index: true,
  76. viewBtn: false,
  77. selection: true,
  78. menuWidth: 350,
  79. dialogClickModal: false,
  80. column: [
  81. {
  82. label: "楼层名称",
  83. width: 100,
  84. prop: "name",
  85. rules: [{
  86. required: true,
  87. message: "请输入楼层名称",
  88. trigger: "blur"
  89. }]
  90. },
  91. // {
  92. // label: "所属园区",
  93. // prop: "agencyId",
  94. // hide: true,
  95. // display: false,
  96. // slot: true,
  97. // cascaderItem: ['residentialId'],
  98. // type: "select",
  99. // // remote: true,
  100. // dicUrl: "/api/cyzh-community/agency/list?size=9999",
  101. // dicFormatter:(res)=>{
  102. // return res.data.records;//返回字典的层级结构
  103. // },
  104. // props: {
  105. // label: "name",
  106. // value: "id"
  107. // },
  108. // rules: [{
  109. // required: true,
  110. // message: "请选择所属园区",
  111. // trigger: "blur"
  112. // }]
  113. // },
  114. // {
  115. // label: "所属区域",
  116. // prop: "residentialId",
  117. // search: true,
  118. // slot: true,
  119. // cascaderItem: ['buildingId','unitId'],
  120. // type: "select",
  121. // remote: true,
  122. // //回显的时候有问题,如果所选不在前十条内,下拉框只会显示id
  123. // dicUrl: "/api/cyzh-community/residential/list?name={{key}}",
  124. // dicFormatter:(res)=>{
  125. // return res.data.records;//返回字典的层级结构
  126. // },
  127. // props: {
  128. // label: "name",
  129. // value: "id"
  130. // },
  131. // rules: [{
  132. // required: true,
  133. // message: "请选择所属区域",
  134. // trigger: "blur"
  135. // }]
  136. // },
  137. {
  138. label: "所属区域",
  139. prop: "residentialId",
  140. type:"select",
  141. cascaderItem: ['buildingId'],
  142. remote: true,
  143. //回显的时候有问题,如果所选不在前十条内,下拉框只会显示id
  144. dicUrl: "/api/cyzh-community/residential/list?size=900",
  145. dicFormatter:(res)=>{
  146. return res.data.records;//返回字典的层级结构
  147. },
  148. props:{
  149. label: "name",
  150. value: "id"
  151. },
  152. searchFilterable: true,
  153. search: true,
  154. slot: true,
  155. rules: [{
  156. required: true,
  157. message: "请选择所属区域",
  158. trigger: "blur"
  159. }]
  160. },
  161. {
  162. label: "所属楼栋",
  163. prop: "buildingId",
  164. // width: 100,
  165. slot: true,
  166. search: true,
  167. type: "select",
  168. // cascaderIndex:0,
  169. cascaderItem: ['unitId'],
  170. dicUrl: "/api/cyzh-community/building/list?size=100&residentialId={{key}}",
  171. dicFormatter:(res)=>{
  172. return res.data.records;//返回字典的层级结构
  173. },
  174. filterable: true,
  175. dicFlag: false,
  176. props: {
  177. label: "name",
  178. value: "id"
  179. },
  180. rules: [{
  181. required: true,
  182. message: "请选择所属楼栋",
  183. trigger: "blur"
  184. }]
  185. },
  186. {
  187. label: "所属单元",
  188. prop: "unitId",
  189. // width: 100,
  190. search: true,
  191. slot: true,
  192. type: "select",
  193. dicFlag: false,
  194. // cascaderIndex: 1,
  195. dicUrl: "/api/cyzh-community/unit/list?buildingId={{key}}",
  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. label: "负责人姓名",
  212. prop: "personName",
  213. hide: true,
  214. labelWidth: 100,
  215. rules: [{
  216. required: false,
  217. message: "请输入负责人姓名",
  218. trigger: "blur"
  219. }]
  220. },
  221. {
  222. label: "负责人电话",
  223. prop: "personTel",
  224. labelWidth: 100,
  225. hide: true,
  226. rules: [{
  227. required: false,
  228. message: "请输入负责人电话",
  229. },{
  230. validator: validatePhone,
  231. trigger: "blur"
  232. }]
  233. },
  234. {
  235. label: "建筑年代",
  236. prop: "builtYear",
  237. hide: true,
  238. rules: [{
  239. required: false,
  240. message: "请输入建筑年代",
  241. trigger: "blur"
  242. }]
  243. },
  244. {
  245. label: "产权性质",
  246. prop: "propertyNature",
  247. hide: true,
  248. rules: [{
  249. required: false,
  250. message: "请输入产权性质",
  251. trigger: "blur"
  252. }]
  253. },
  254. {
  255. label: "有无电梯",
  256. prop: "includingElevator",
  257. type: "select",
  258. dicUrl: "/api/blade-system/dict-biz/dictionary?code=including_elevator",
  259. props:{
  260. label: "dictValue",
  261. value: "dictKey",
  262. },
  263. dataType: "number",
  264. hide: true,
  265. rules: [{
  266. required: false,
  267. message: "请选择有无电梯",
  268. trigger: "blur"
  269. }]
  270. },
  271. {
  272. label: "房间数量",
  273. prop: "roomCount",
  274. // width: 100,
  275. display: false,
  276. rules: [{
  277. required: false,
  278. message: "请输入房间数量",
  279. trigger: "blur"
  280. }]
  281. },
  282. {
  283. label: "住户数量",
  284. prop: "userNumber",
  285. hide: true,
  286. display: false,
  287. rules: [{
  288. required: false,
  289. message: "请输入住户数量",
  290. trigger: "blur"
  291. }]
  292. },
  293. {
  294. label: "序号",
  295. prop: "serial",
  296. hide: true,
  297. display: false,
  298. rules: [{
  299. required: true,
  300. message: "请输入序号",
  301. trigger: "blur"
  302. }]
  303. },
  304. {
  305. label: "备注",
  306. prop: "remark",
  307. hide: true,
  308. rules: [{
  309. required: false,
  310. message: "请输入备注",
  311. trigger: "blur"
  312. }]
  313. },
  314. {
  315. label: "所属机构id(属于园区机构,则存园区机构ID;无园区机构,则存小区ID)",
  316. prop: "orgPid",
  317. hide: true,
  318. display: false,
  319. rules: [{
  320. required: true,
  321. message: "请输入所属机构id(属于园区机构,则存园区机构ID;无园区机构,则存小区ID)",
  322. trigger: "blur"
  323. }]
  324. },
  325. {
  326. label: "所属机构名称(属于园区机构,则存园区机构名称;无园区机构,则存小区名称)",
  327. prop: "orgPidName",
  328. hide: true,
  329. display: false,
  330. rules: [{
  331. required: true,
  332. message: "请输入所属机构名称(属于园区机构,则存园区机构名称;无园区机构,则存小区名称)",
  333. trigger: "blur"
  334. }]
  335. },
  336. {
  337. label: "根机构Id",
  338. prop: "rootOrgId",
  339. hide: true,
  340. display: false,
  341. rules: [{
  342. required: true,
  343. message: "请输入根机构Id",
  344. trigger: "blur"
  345. }]
  346. },
  347. {
  348. label: "原数据的Id",
  349. prop: "oldId",
  350. hide: true,
  351. display: false,
  352. rules: [{
  353. required: true,
  354. message: "请输入原数据的Id",
  355. trigger: "blur"
  356. }]
  357. },
  358. ]
  359. },
  360. data: []
  361. };
  362. },
  363. computed: {
  364. ...mapGetters(["permission"]),
  365. permissionList() {
  366. return {
  367. addBtn: this.vaildData(this.permission.floor_add, false),
  368. viewBtn: this.vaildData(this.permission.floor_view, false),
  369. delBtn: this.vaildData(this.permission.floor_delete, false),
  370. editBtn: this.vaildData(this.permission.floor_edit, false)
  371. };
  372. },
  373. ids() {
  374. let ids = [];
  375. this.selectionList.forEach(ele => {
  376. ids.push(ele.id);
  377. });
  378. return ids.join(",");
  379. }
  380. },
  381. mounted() {
  382. let tenantType = localStorage.getItem("tenantType");
  383. const residentialColumn = this.findObject(this.option.column, "residentialId");
  384. if (tenantType == 1) { //园区
  385. residentialColumn.label = "所属区域";
  386. } else { //园区
  387. residentialColumn.label = "所属区域";
  388. }
  389. },
  390. methods: {
  391. floorManage(id,type){
  392. let query = {floorId: id};
  393. communityManage(this,type,query)
  394. },
  395. rowSave(row, done, loading) {
  396. add(row).then(() => {
  397. this.onLoad(this.page);
  398. this.$message({
  399. type: "success",
  400. message: "操作成功!"
  401. });
  402. done();
  403. }, error => {
  404. loading();
  405. window.console.log(error);
  406. });
  407. },
  408. rowUpdate(row, index, done, loading) {
  409. update(row).then(() => {
  410. this.onLoad(this.page);
  411. this.$message({
  412. type: "success",
  413. message: "操作成功!"
  414. });
  415. done();
  416. }, error => {
  417. loading();
  418. console.log(error);
  419. });
  420. },
  421. rowDel(row) {
  422. this.$confirm("确定将选择数据删除?", {
  423. confirmButtonText: "确定",
  424. cancelButtonText: "取消",
  425. type: "warning"
  426. })
  427. .then(() => {
  428. return remove(row.id);
  429. })
  430. .then(() => {
  431. this.onLoad(this.page);
  432. this.$message({
  433. type: "success",
  434. message: "操作成功!"
  435. });
  436. });
  437. },
  438. handleDelete() {
  439. if (this.selectionList.length === 0) {
  440. this.$message.warning("请选择至少一条数据");
  441. return;
  442. }
  443. this.$confirm("确定将选择数据删除?", {
  444. confirmButtonText: "确定",
  445. cancelButtonText: "取消",
  446. type: "warning"
  447. })
  448. .then(() => {
  449. return remove(this.ids);
  450. })
  451. .then(() => {
  452. this.onLoad(this.page);
  453. this.$message({
  454. type: "success",
  455. message: "操作成功!"
  456. });
  457. this.$refs.crud.toggleSelection();
  458. });
  459. },
  460. beforeOpen(done, type) {
  461. if (["edit", "view"].includes(type)) {
  462. getDetail(this.form.id).then(res => {
  463. this.form = res.data.data;
  464. });
  465. }
  466. done();
  467. },
  468. searchReset() {
  469. this.query = {};
  470. this.onLoad(this.page);
  471. },
  472. searchChange(params, done) {
  473. this.query = params;
  474. this.page.currentPage = 1;
  475. this.onLoad(this.page, params);
  476. done();
  477. },
  478. selectionChange(list) {
  479. this.selectionList = list;
  480. },
  481. selectionClear() {
  482. this.selectionList = [];
  483. this.$refs.crud.toggleSelection();
  484. },
  485. currentChange(currentPage){
  486. this.page.currentPage = currentPage;
  487. },
  488. sizeChange(pageSize){
  489. this.page.pageSize = pageSize;
  490. },
  491. refreshChange() {
  492. this.onLoad(this.page, this.query);
  493. },
  494. onLoad(page, params = {}) {
  495. this.loading = true;
  496. if (this.$route.query){
  497. Object.assign(this.query,this.$route.query)
  498. }
  499. getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
  500. const data = res.data.data;
  501. this.page.total = data.total;
  502. this.data = data.records;
  503. this.loading = false;
  504. this.selectionClear();
  505. });
  506. }
  507. }
  508. };
  509. </script>
  510. <style>
  511. </style>