index.vue 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500
  1. <!--
  2. * @Title:
  3. * @Description:
  4. * @Author: swp
  5. * @Date: 2022-08-24 10:49:21
  6. * @LastEditors:
  7. * @LastEditTime: 2022-08-24 10:49:21
  8. -->
  9. <template>
  10. <div>
  11. <el-row>
  12. <el-col :span="4">
  13. <div class="box">
  14. <el-scrollbar>
  15. <basic-container>
  16. <avue-tree :option="treeOption" :data="treeData" @node-click="nodeClick">
  17. <span class="el-tree-node__label" slot-scope="{ node, data }">
  18. <span>
  19. <i class="el-icon-office-building"></i>
  20. {{ (node || {}).label }}
  21. </span>
  22. </span>
  23. </avue-tree>
  24. </basic-container>
  25. </el-scrollbar>
  26. </div>
  27. </el-col>
  28. <el-col :span="20">
  29. <basic-container>
  30. <avue-crud :option="option" :table-loading="loading" :data="data" :page.sync="page"
  31. :before-open="beforeOpen" ref="crud" v-model="form" :permission="permissionList" @row-del="rowDel"
  32. @row-update="rowUpdate" @row-save="rowSave" @search-change="searchChange"
  33. @search-reset="searchReset" @selection-change="selectionChange" @current-change="currentChange"
  34. @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad"
  35. @before-open="beforeOpen" @select-change="selectChange">
  36. </avue-crud>
  37. </basic-container>
  38. </el-col>
  39. </el-row>
  40. </div>
  41. </template>
  42. <script>
  43. import { getPage, getDetail, add, update, remove } from "@/api/baseinfo/monitorpoint.js";
  44. import { getTree } from "@/api/baseinfo/org";
  45. import { mapGetters } from "vuex";
  46. export default {
  47. components: {
  48. },
  49. data() {
  50. return {
  51. importLoading: false,
  52. id: "",
  53. post_code: '0',
  54. form: {},
  55. selectionList: [],
  56. query: {},
  57. loading: true,
  58. page: {
  59. pageSize: 10,
  60. currentPage: 1,
  61. total: 0,
  62. },
  63. treeCode: '',
  64. treeParentCode: '',
  65. treeData: [],
  66. treeOption: {
  67. nodeKey: "id",
  68. defaultExpandedKeys: [],
  69. lazy: false,
  70. // treeLoad: function (node, resolve) {
  71. // const parentCode = (node.level === 0) ? "00" : node.data.value;
  72. // getLazyDeptTree(parentCode).then(res => {
  73. // resolve(res.data.data.map(item => {
  74. // return {
  75. // ...item,
  76. // leaf: !item.hasChildren
  77. // }
  78. // }))
  79. // });
  80. // },
  81. addBtn: false,
  82. menu: true,
  83. size: "small",
  84. props: {
  85. labelText: "标题",
  86. label: "title",
  87. value: "value",
  88. children: "children",
  89. },
  90. },
  91. option: {
  92. labelWidth: 140,
  93. viewLabelWidth: 140,
  94. searchLabelWidth: 140,
  95. height: "auto",
  96. calcHeight: 80,
  97. align: "center",
  98. headerAlign: "center",
  99. lazy: false,
  100. tip: false,
  101. simplePage: true,
  102. searchShow: true,
  103. searchMenuSpan: 6,
  104. tree: true,
  105. border: true,
  106. index: true,
  107. selection: false,
  108. viewBtn: true,
  109. viewTitle: "监测点信息",
  110. editBtn: true,
  111. delBtn: true,
  112. addBtn: true,
  113. addBtnText: "添加监测点",
  114. menuWidth: 220,
  115. dialogType: "drawer",
  116. dialogClickModal: false,
  117. columnBtn: false,
  118. column: [
  119. {
  120. label: "监测点代码",
  121. prop: "mpCd",
  122. search: true,
  123. span: 24,
  124. editDisabled: true,
  125. width: 120,
  126. rules: [
  127. {
  128. required: true,
  129. message: "请录入监测点代码",
  130. trigger: "click",
  131. },
  132. ],
  133. },
  134. {
  135. label: "监测点名称",
  136. prop: "mpNm",
  137. search: true,
  138. span: 24,
  139. rules: [
  140. {
  141. required: true,
  142. message: "请录入监测点名称",
  143. trigger: "click",
  144. },
  145. ],
  146. },
  147. {
  148. label: "监测站名称",
  149. prop: "wiustNm",
  150. span: 24,
  151. search: true,
  152. editDisplay: false,
  153. addDisplay: false,
  154. },
  155. {
  156. label: '所属监测站',
  157. prop: 'wiustCd',
  158. type: 'select',
  159. hide: true,
  160. span: 24,
  161. viewDisplay: false,
  162. editDisplay: false,
  163. remote: true,
  164. dicUrl: `api/galaxy-business/base/monitorsite/list?wiustNm={{key}}`,
  165. props: {
  166. label: 'wiustNm',
  167. value: 'wiustCd'
  168. },
  169. rules: [
  170. {
  171. required: true,
  172. message: "请选择监测站",
  173. trigger: "click",
  174. },
  175. ],
  176. },
  177. {
  178. label: "用水户名称",
  179. prop: "wiuNm",
  180. span: 24,
  181. editDisplay: false,
  182. addDisplay: false,
  183. },
  184. {
  185. label: "行政机构",
  186. prop: "orgName",
  187. span: 24,
  188. editDisplay: false,
  189. addDisplay: false,
  190. },
  191. {
  192. label: "监测点地址",
  193. prop: "mpAddr",
  194. span: 24,
  195. overHidden: true,
  196. },
  197. {
  198. label: '监测项目',
  199. prop: 'mpItem',
  200. type: 'select',
  201. hide: true,
  202. props: {
  203. label: 'name',
  204. value: 'code'
  205. },
  206. span: 24,
  207. dicData: [{
  208. name: '水位',
  209. code: '1'
  210. }, {
  211. name: '流量',
  212. code: '2'
  213. }]
  214. },
  215. {
  216. label: "经度",
  217. prop: "lng",
  218. span: 24,
  219. hide: true,
  220. },
  221. {
  222. label: "纬度",
  223. prop: "lat",
  224. span: 24,
  225. hide: true,
  226. },
  227. {
  228. label: '监测类型',
  229. prop: 'isAuto',
  230. type: 'select',
  231. hide: true,
  232. props: {
  233. label: 'name',
  234. value: 'code'
  235. },
  236. span: 24,
  237. dicData: [{
  238. name: '间接推算',
  239. code: '0'
  240. }, {
  241. name: '直接监测',
  242. code: '1'
  243. }]
  244. },
  245. {
  246. label: '水源类型',
  247. prop: 'sourTp',
  248. type: 'select',
  249. hide: true,
  250. props: {
  251. label: 'name',
  252. value: 'code'
  253. },
  254. span: 24,
  255. dicData: [{
  256. name: '江河',
  257. code: "11"
  258. }, {
  259. name: '湖泊',
  260. code: "12"
  261. }, {
  262. name: '水库',
  263. code: "13"
  264. }, {
  265. name: '其他地表水',
  266. code: "19"
  267. }, {
  268. name: '浅层水',
  269. code: "21"
  270. }, {
  271. name: '承压水',
  272. code: "22"
  273. }, {
  274. name: '地热水',
  275. code: "23"
  276. }, {
  277. name: '矿泉水',
  278. code: "24"
  279. }, {
  280. name: '岩溶水',
  281. code: "25"
  282. }, {
  283. name: '其他地下水',
  284. code: "29"
  285. }, {
  286. name: '外调水',
  287. code: "31"
  288. }, {
  289. name: '矿坑水',
  290. code: "32"
  291. }, {
  292. name: '海水',
  293. code: "33"
  294. }, {
  295. name: '雨水',
  296. code: "34"
  297. }, {
  298. name: '其他非常规水源',
  299. code: "39"
  300. }],
  301. },
  302. {
  303. label: "备注",
  304. prop: "nt",
  305. span: 24,
  306. hide: true,
  307. },
  308. ],
  309. },
  310. data: [],
  311. };
  312. },
  313. computed: {
  314. ...mapGetters(["userInfo", "permission"]),
  315. permissionList() {
  316. return {
  317. addBtn: this.vaildData(this.permission.site_point_add, false),
  318. viewBtn: this.vaildData(this.permission.site_point_view, false),
  319. delBtn: this.vaildData(this.permission.site_point_del, false),
  320. editBtn: this.vaildData(this.permission.site_point_edit, false),
  321. };
  322. },
  323. },
  324. created() {
  325. this.initTree();
  326. },
  327. methods: {
  328. initTree() {
  329. this.treeData = [];
  330. getTree().then(res => {
  331. this.treeData = res.data.data.map(item => {
  332. return {
  333. ...item,
  334. leaf: !item.hasChildren
  335. }
  336. })
  337. this.treeOption.defaultExpandedKeys.push(this.treeData[0].id);
  338. this.treeCode = this.treeData[0].id;
  339. this.query = {};
  340. this.query['orgId'] = this.treeCode;
  341. var params = {};
  342. this.onLoad(this.page, params);
  343. });
  344. },
  345. nodeClick(data) {
  346. this.treeCode = data.id;
  347. this.excludeCode = data.exclude;
  348. this.treeParentCode = data.parentId;
  349. this.query = {};
  350. this.query['orgId'] = this.treeCode;
  351. this.page.currentPage = 1;
  352. var params = {};
  353. this.onLoad(this.page, params);
  354. },
  355. searchReset() {
  356. this.query = {};
  357. this.query['orgId'] = this.treeCode;
  358. this.page.currentPage = 1;
  359. this.onLoad(this.page);
  360. },
  361. searchChange(params, done) {
  362. this.query = params;
  363. this.query['orgId'] = this.treeCode;
  364. this.page.currentPage = 1;
  365. this.onLoad(this.page, params);
  366. done();
  367. },
  368. currentChange(currentPage) {
  369. console.log("currentPage " + currentPage);
  370. this.page.currentPage = currentPage;
  371. },
  372. sizeChange(pageSize) {
  373. this.page.pageSize = pageSize;
  374. },
  375. refreshChange() {
  376. var params = {};
  377. this.onLoad(this.page, params);
  378. },
  379. selectionChange(list) {
  380. this.selectionList = list;
  381. },
  382. selectChange(item) {
  383. console.log(JSON.stringify(item));
  384. },
  385. selectionClear() {
  386. this.selectionList = [];
  387. this.$refs.crud.toggleSelection();
  388. },
  389. rowSave(row, done, loading) {
  390. console.log(JSON.stringify(row))
  391. add(row).then(
  392. () => {
  393. this.onLoad(this.page);
  394. this.$message({
  395. type: "success",
  396. message: "操作成功!",
  397. });
  398. done();
  399. },
  400. (error) => {
  401. window.console.log(error);
  402. loading();
  403. }
  404. );
  405. },
  406. rowUpdate(row, index, done, loading) {
  407. update(row).then(
  408. () => {
  409. this.onLoad(this.page);
  410. this.$message({
  411. type: "success",
  412. message: "操作成功!",
  413. });
  414. done();
  415. },
  416. (error) => {
  417. window.console.log(error);
  418. loading();
  419. }
  420. );
  421. },
  422. rowDel(row) {
  423. this.$confirm("确定将选择数据删除?", {
  424. confirmButtonText: "确定",
  425. cancelButtonText: "取消",
  426. type: "warning",
  427. })
  428. .then(() => {
  429. return remove(row.id);
  430. })
  431. .then(() => {
  432. this.onLoad(this.page);
  433. this.$message({
  434. type: "success",
  435. message: "操作成功!",
  436. });
  437. });
  438. },
  439. handleDelete() {
  440. if (this.selectionList.length === 0) {
  441. this.$message.warning("请选择至少一条数据");
  442. return;
  443. }
  444. this.$confirm("确定将选择数据删除?", {
  445. confirmButtonText: "确定",
  446. cancelButtonText: "取消",
  447. type: "warning",
  448. })
  449. .then(() => {
  450. return remove(this.ids);
  451. })
  452. .then(() => {
  453. this.onLoad(this.page);
  454. this.$message({
  455. type: "success",
  456. message: "操作成功!",
  457. });
  458. this.$refs.crud.toggleSelection();
  459. });
  460. },
  461. beforeOpen(done, type) {
  462. if (["edit", "view"].includes(type)) {
  463. getDetail(this.form.id).then((res) => {
  464. this.form = res.data.data;
  465. });
  466. }
  467. done();
  468. },
  469. onLoad(page, params = {}) {
  470. this.loading = true;
  471. getPage(
  472. page.currentPage,
  473. page.pageSize,
  474. Object.assign(params, this.query)
  475. ).then((res) => {
  476. const data = res.data.data;
  477. this.page.total = data.total;
  478. this.data = data.records;
  479. this.loading = false;
  480. this.selectionClear();
  481. });
  482. },
  483. },
  484. };
  485. </script>
  486. <style>
  487. .box {
  488. height: 800px;
  489. }
  490. .el-scrollbar {
  491. height: 100%;
  492. }
  493. .box .el-scrollbar__wrap {
  494. overflow: scroll;
  495. }
  496. </style>