building.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413
  1. <template>
  2. <basic-container>
  3. <el-dialog :append-to-body="true" :close-on-click-modal="false" :modal-append-to-body="false" :visible.sync="editVisible" title="楼栋编辑"
  4. width="80%">
  5. <avue-form v-model="editForm" :option="option" @submit="submitBuilding"></avue-form>
  6. </el-dialog>
  7. <el-dialog :modal-append-to-body="false" :visible.sync="deviceDialog" title="设备管理" width="70%">
  8. <devicebuilding :buildingId="buildingId"></devicebuilding>
  9. </el-dialog>
  10. <el-dialog :modal-append-to-body="false" :visible.sync="videoDialog" title="设备管理" width="70%">
  11. <buildingvideo :buildingId="buildingId"></buildingvideo>
  12. </el-dialog>
  13. <avue-crud :option="option"
  14. :table-loading="loading"
  15. :data="data"
  16. :page="page"
  17. :permission="permissionList"
  18. :before-open="beforeOpen"
  19. v-model="form"
  20. ref="crud"
  21. @row-update="rowUpdate"
  22. @row-save="rowSave"
  23. @row-del="rowDel"
  24. @search-change="searchChange"
  25. @search-reset="searchReset"
  26. @selection-change="selectionChange"
  27. @current-change="currentChange"
  28. @size-change="sizeChange"
  29. @refresh-change="refreshChange"
  30. @on-load="onLoad">
  31. <template slot="menuLeft">
  32. <el-button type="danger"
  33. size="small"
  34. icon="el-icon-delete"
  35. plain
  36. v-if="permission.building_delete"
  37. @click="handleDelete">删 除
  38. </el-button>
  39. </template>
  40. <template slot="menu" slot-scope="scope">
  41. <el-button type="text" size="small" icon="el-icon-setting">
  42. <el-dropdown @command="tip">
  43. <span class="el-dropdown-link">
  44. 操作<i class="el-icon-arrow-down el-icon--right"> </i>
  45. </span>
  46. <el-dropdown-menu slot="dropdown">
  47. <el-dropdown-item divided @click.native="edit(scope.row)" icon="el-icon-school">编辑</el-dropdown-item>
  48. <!-- <el-dropdown-item divided @click.native="buildingManage(scope.row.id,1)" icon="el-icon-school">单元管理</el-dropdown-item>-->
  49. <!-- <el-dropdown-item divided @click.native="buildingManage(scope.row.id,2)" icon="el-icon-s-order">楼层管理</el-dropdown-item>-->
  50. <!-- <el-dropdown-item divided @click.native="buildingManage(scope.row.id,3)" icon="el-icon-s-home">房间管理</el-dropdown-item>-->
  51. <el-dropdown-item divided @click.native="buildingManage(scope.row.id,4)" icon="el-icon-user-solid" v-if="permission.permanent_people_view">住户管理</el-dropdown-item>
  52. <el-dropdown-item divided @click.native="manageDevice(scope.row)" icon="el-icon-s-management">设备管理</el-dropdown-item>
  53. <el-dropdown-item divided @click.native="manageVideo(scope.row)" icon="el-icon-s-management">视频监控</el-dropdown-item>
  54. <!-- <el-dropdown-item divided @click.native="tip(2,scope.row)">审核通过</el-dropdown-item> -->
  55. </el-dropdown-menu>
  56. </el-dropdown>
  57. </el-button>
  58. <!-- <el-button type="text" icon="el-icon-setting" size="mini" @click="manageResidential(scope.row.oldId)">管理</el-button> -->
  59. </template>
  60. <template slot="residentialId" slot-scope="scope">
  61. <div>{{scope.row.residentialName}}</div>
  62. </template>
  63. </avue-crud>
  64. </basic-container>
  65. </template>
  66. <script>
  67. import {getList, getDetail, add, update, remove} from "../../api/community/building.js";
  68. import devicebuilding from "@/views/smartapplication/devicebuilding";
  69. import buildingvideo from "@/views/smartapplication/buildingvideo";
  70. import {communityManage} from "@/views/community/util/communityManage";
  71. import {mapGetters} from "vuex";
  72. export default {
  73. components: {
  74. devicebuilding,
  75. buildingvideo
  76. },
  77. data() {
  78. return {
  79. buildingId : '',
  80. deviceDialog: false,
  81. videoDialog: false,
  82. editForm: {},
  83. editVisible: false,
  84. form: {},
  85. query: {},
  86. loading: true,
  87. page: {
  88. pageSize: 10,
  89. currentPage: 1,
  90. total: 0
  91. },
  92. selectionList: [],
  93. option: {
  94. height:'auto',
  95. calcHeight: 60,
  96. tip: false,
  97. searchShow: true,
  98. searchMenuSpan: 6,
  99. border: true,
  100. index: true,
  101. viewBtn: false,
  102. // addBtn: false,
  103. editBtn: false,
  104. delBtn: true,
  105. selection: true,
  106. dialogClickModal: false,
  107. column: [
  108. {
  109. label: "楼栋名称",
  110. prop: "name",
  111. rules: [{
  112. required: true,
  113. message: "请输入楼栋名称",
  114. trigger: "blur"
  115. }]
  116. },
  117. // {
  118. // label: "所属小区",
  119. // prop: "residentialId",
  120. // type:"select",
  121. // remote: true,
  122. // //回显的时候有问题,如果所选不在前十条内,下拉框只会显示id
  123. // dicUrl: "/api/cyzh-community/residential/list?size=200&name={{key}}",
  124. // dicFormatter:(res)=>{
  125. // return res.data.records;//返回字典的层级结构
  126. // },
  127. // props:{
  128. // label: "name",
  129. // value: "id"
  130. // },
  131. // searchFilterable: true,
  132. // search: true,
  133. // slot: true,
  134. // rules: [{
  135. // required: true,
  136. // message: "请输入",
  137. // trigger: "blur"
  138. // }]
  139. // },
  140. {
  141. label: "所属小区",
  142. prop: "residentialId",
  143. slot: true,
  144. type: "select",
  145. search: true,
  146. searchFilterable: true,
  147. // cascaderItem: ['buildingId'],
  148. dicUrl: "/api/cyzh-community/residential/select?size=100",
  149. // dicFormatter:(res)=>{
  150. // return res.data.records;//返回字典的层级结构
  151. // },
  152. // dicFlag: false,
  153. // filterable: true,
  154. props: {
  155. label: "name",
  156. value: "id"
  157. },
  158. rules: [{
  159. required: true,
  160. message: "请选择所属小区",
  161. trigger: "blur"
  162. }]
  163. },
  164. {
  165. label: "图片",
  166. prop: "pic",
  167. type: 'upload',
  168. dataType: 'string',
  169. hide: true,
  170. propsHttp: {
  171. res: "data",
  172. url: 'link'
  173. },
  174. listType: 'picture-img',
  175. span: 24,
  176. row: true,
  177. // value: "/img/default/building.png",
  178. action: "/api/blade-resource/oss/endpoint/put-file",
  179. rules: [{
  180. required: false,
  181. message: "请上传封面图片",
  182. trigger: "blur"
  183. }]
  184. },
  185. {
  186. label: "单元数",
  187. prop: "unitCount",
  188. display: false,
  189. rules: [{
  190. required: false,
  191. message: "请输入",
  192. trigger: "blur"
  193. }]
  194. },
  195. {
  196. label: "楼层数",
  197. prop: "floorCount",
  198. display: false,
  199. rules: [{
  200. required: false,
  201. message: "请输入",
  202. trigger: "blur"
  203. }]
  204. },
  205. {
  206. label: "房间数",
  207. prop: "roomCount",
  208. display: false,
  209. rules: [{
  210. required: false,
  211. message: "请输入",
  212. trigger: "blur"
  213. }]
  214. },
  215. {
  216. label: "总人口数",
  217. prop: "userCount",
  218. display: false,
  219. hide: true,
  220. rules: [{
  221. required: false,
  222. message: "请输入",
  223. trigger: "blur"
  224. }]
  225. },
  226. ]
  227. },
  228. data: []
  229. };
  230. },
  231. computed: {
  232. ...mapGetters(["permission"]),
  233. permissionList() {
  234. return {
  235. addBtn: this.vaildData(this.permission.building_add, false),
  236. viewBtn: this.vaildData(this.permission.building_view, false),
  237. delBtn: this.vaildData(this.permission.building_delete, false),
  238. editBtn: this.vaildData(this.permission.building_edit, false)
  239. };
  240. },
  241. ids() {
  242. let ids = [];
  243. this.selectionList.forEach(ele => {
  244. ids.push(ele.id);
  245. });
  246. return ids.join(",");
  247. }
  248. },
  249. mounted() {
  250. let tenantType = localStorage.getItem("tenantType");
  251. const residentialColumn = this.findObject(this.option.column, "residentialId");
  252. if (tenantType == 1) { //园区
  253. residentialColumn.label = "所属区域"
  254. } else { //社区
  255. residentialColumn.label = "所属小区"
  256. }
  257. },
  258. methods: {
  259. submitBuilding(row,done,loading){
  260. update(this.editForm).then(() => {
  261. this.onLoad(this.page);
  262. this.editVisible = false;
  263. this.$message({
  264. type: "success",
  265. message: "操作成功!"
  266. });
  267. done();
  268. }, error => {
  269. loading();
  270. console.log(error);
  271. });
  272. },
  273. edit(row){
  274. this.editForm = row;
  275. this.editVisible = true;
  276. },
  277. buildingManage(id,type){
  278. let query = {buildingId: id};
  279. communityManage(this,type,query)
  280. },
  281. manageDevice(row){
  282. this.buildingId = row.id;
  283. this.deviceDialog = true
  284. },
  285. manageVideo(row){
  286. this.buildingId = row.id;
  287. this.videoDialog = true
  288. },
  289. rowSave(row, done, loading){
  290. add(row).then(() => {
  291. this.onLoad(this.page);
  292. this.$message({
  293. type: "success",
  294. message: "操作成功!"
  295. });
  296. done();
  297. }, error => {
  298. loading();
  299. window.console.log(error);
  300. });
  301. },
  302. rowUpdate(row, index, done, loading) {
  303. update(row).then(() => {
  304. this.onLoad(this.page);
  305. this.$message({
  306. type: "success",
  307. message: "操作成功!"
  308. });
  309. done();
  310. }, error => {
  311. loading();
  312. console.log(error);
  313. });
  314. },
  315. rowDel(row) {
  316. this.$confirm("确定将选择数据删除?", {
  317. confirmButtonText: "确定",
  318. cancelButtonText: "取消",
  319. type: "warning"
  320. })
  321. .then(() => {
  322. return remove(row.id);
  323. })
  324. .then(() => {
  325. this.onLoad(this.page);
  326. this.$message({
  327. type: "success",
  328. message: "操作成功!"
  329. });
  330. });
  331. },
  332. handleDelete() {
  333. if (this.selectionList.length === 0) {
  334. this.$message.warning("请选择至少一条数据");
  335. return;
  336. }
  337. this.$confirm("确定将选择数据删除?", {
  338. confirmButtonText: "确定",
  339. cancelButtonText: "取消",
  340. type: "warning"
  341. })
  342. .then(() => {
  343. return remove(this.ids);
  344. })
  345. .then(() => {
  346. this.onLoad(this.page);
  347. this.$message({
  348. type: "success",
  349. message: "操作成功!"
  350. });
  351. this.$refs.crud.toggleSelection();
  352. });
  353. },
  354. beforeOpen(done, type) {
  355. if (["edit", "view"].includes(type)) {
  356. getDetail(this.form.id).then(res => {
  357. this.form = res.data.data;
  358. });
  359. }
  360. done();
  361. },
  362. searchReset() {
  363. this.query = {};
  364. this.onLoad(this.page);
  365. },
  366. searchChange(params, done) {
  367. this.query = params;
  368. this.page.currentPage = 1;
  369. this.onLoad(this.page, params);
  370. done();
  371. },
  372. selectionChange(list) {
  373. this.selectionList = list;
  374. },
  375. selectionClear() {
  376. this.selectionList = [];
  377. this.$refs.crud.toggleSelection();
  378. },
  379. currentChange(currentPage){
  380. this.page.currentPage = currentPage;
  381. },
  382. sizeChange(pageSize){
  383. this.page.pageSize = pageSize;
  384. },
  385. refreshChange() {
  386. this.onLoad(this.page, this.query);
  387. },
  388. onLoad(page, params = {}) {
  389. this.loading = true;
  390. console.log("dfdf:"+ this.$route.query.residentialOldId);
  391. if(this.$route.query.residentialOldId != undefined){
  392. params.residentialId = this.$route.query.oldId;
  393. }
  394. getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
  395. const data = res.data.data;
  396. this.page.total = data.total;
  397. this.data = data.records;
  398. this.loading = false;
  399. this.selectionClear();
  400. });
  401. }
  402. }
  403. };
  404. </script>
  405. <style>
  406. </style>