yxyzPop.vue 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793
  1. <template>
  2. <div class="dialog">
  3. <el-dialog
  4. title="选址因子设置"
  5. :visible.sync="dialogVisible"
  6. width="40%"
  7. :before-close="handleClose"
  8. :modal-append-to-body="false"
  9. :close-on-click-modal="false"
  10. >
  11. <el-row>
  12. <el-col :span="6">
  13. <div>可选因子</div>
  14. <el-scrollbar class="left-tree">
  15. <el-tree
  16. :data="options"
  17. :props="defaultProps"
  18. highlight-current
  19. show-checkbox
  20. node-key="value"
  21. ref="tree"
  22. ></el-tree>
  23. </el-scrollbar>
  24. </el-col>
  25. <el-col :span="2">
  26. <div class="grid-content bg_purple">
  27. <el-button
  28. icon="el-icon-d-arrow-right"
  29. @click="turnLeftToRight"
  30. ></el-button>
  31. <el-button
  32. icon="el-icon-d-arrow-left"
  33. @click="turnRightToLeft"
  34. ></el-button>
  35. </div>
  36. </el-col>
  37. <el-col :span="16">
  38. <div>已选因子</div>
  39. <el-table
  40. :data="dialogData"
  41. border
  42. class="right-table scroll-style"
  43. size="small"
  44. style="width: 100%"
  45. @selection-change="handleSelectionChange"
  46. >
  47. <el-table-column type="selection" width="55" align="center">
  48. </el-table-column>
  49. <el-table-column prop="name" label="因子名称"> </el-table-column>
  50. <el-table-column prop="condition" label="条件" width="150">
  51. <template slot-scope="scope">
  52. <el-select
  53. v-model="scope.row.condition"
  54. placeholder="请选择"
  55. class="input-style"
  56. >
  57. <el-option
  58. v-for="item in conditionList"
  59. :key="item.value"
  60. :label="item.label"
  61. :value="item.value"
  62. >
  63. </el-option>
  64. </el-select>
  65. </template>
  66. </el-table-column>
  67. <el-table-column prop="value" label="约束值(m)" width="120">
  68. <template slot-scope="scope">
  69. <el-input
  70. v-model="scope.row.value"
  71. placeholder="距离"
  72. class="input-style font-14"
  73. type="number"
  74. :disabled="!scope.row.type"
  75. ></el-input>
  76. <!-- :disabled="scope.row.condition == 'F'" -->
  77. </template>
  78. </el-table-column>
  79. </el-table>
  80. </el-col>
  81. </el-row>
  82. <span slot="footer" class="dialog-footer">
  83. <el-button @click="close">取 消</el-button>
  84. <el-button type="primary" @click="submit">确 定</el-button>
  85. </span>
  86. </el-dialog>
  87. </div>
  88. </template>
  89. <script>
  90. import { GetFxyzList } from "../../../api/ghss/ghxz.js";
  91. export default {
  92. components: {},
  93. props: {
  94. tableData: {
  95. type: Array,
  96. },
  97. },
  98. data() {
  99. return {
  100. defaultProps: {
  101. children: "children",
  102. label: "yxyzmc",
  103. },
  104. dialogVisible: false,
  105. options: [
  106. // {
  107. // value: "控制线",
  108. // label: "规划控制线",
  109. // disabled: false,
  110. // children: [],
  111. // },
  112. // {
  113. // value: "专项规划",
  114. // label: "专项规划",
  115. // disabled: false,
  116. // children: [],
  117. // },
  118. // {
  119. // value: "基础设施",
  120. // label: "兴趣点",
  121. // disabled: false,
  122. // children: [],
  123. // },
  124. ],
  125. kxyzList: [
  126. {
  127. bsm: "BWG",
  128. yxyzmc: "博物馆",
  129. level: 1,
  130. parent_bsm: "GGFWSS",
  131. has_yxz: true,
  132. spatial_type: "identity",
  133. },
  134. {
  135. bsm: "CZKFBJ",
  136. yxyzmc: "城镇开发边界",
  137. level: 1,
  138. parent_bsm: "DXGK",
  139. has_yxz: false,
  140. spatial_type: "contain",
  141. },
  142. {
  143. bsm: "DL",
  144. yxyzmc: "电力",
  145. level: 2,
  146. parent_bsm: "GX",
  147. has_yxz: true,
  148. spatial_type: "identity",
  149. },
  150. {
  151. bsm: "DX",
  152. yxyzmc: "电信",
  153. level: 2,
  154. parent_bsm: "GX",
  155. has_yxz: true,
  156. spatial_type: "identity",
  157. },
  158. {
  159. bsm: "DXGK",
  160. yxyzmc: "底线管控",
  161. level: 0,
  162. parent_bsm: null,
  163. has_yxz: null,
  164. spatial_type: null,
  165. },
  166. {
  167. bsm: "GGFWSS",
  168. yxyzmc: "公共服务设施",
  169. level: 0,
  170. parent_bsm: null,
  171. has_yxz: null,
  172. spatial_type: null,
  173. },
  174. {
  175. bsm: "GL",
  176. yxyzmc: "公路",
  177. level: 2,
  178. parent_bsm: "JT",
  179. has_yxz: true,
  180. spatial_type: "identity",
  181. },
  182. {
  183. bsm: "GS",
  184. yxyzmc: "供水",
  185. level: 2,
  186. parent_bsm: "GX",
  187. has_yxz: true,
  188. spatial_type: "identity",
  189. },
  190. {
  191. bsm: "GX",
  192. yxyzmc: "管线",
  193. level: 1,
  194. parent_bsm: "SZSS",
  195. has_yxz: null,
  196. spatial_type: null,
  197. },
  198. {
  199. bsm: "GY",
  200. yxyzmc: "公园",
  201. level: 1,
  202. parent_bsm: "GGFWSS",
  203. has_yxz: true,
  204. spatial_type: "identity",
  205. },
  206. {
  207. bsm: "JT",
  208. yxyzmc: "交通",
  209. level: 1,
  210. parent_bsm: "SZSS",
  211. has_yxz: null,
  212. spatial_type: null,
  213. },
  214. {
  215. bsm: "JYZ",
  216. yxyzmc: "加油站",
  217. level: 2,
  218. parent_bsm: "JT",
  219. has_yxz: true,
  220. spatial_type: "identity",
  221. },
  222. {
  223. bsm: "LD",
  224. yxyzmc: "绿地",
  225. level: 1,
  226. parent_bsm: "GGFWSS",
  227. has_yxz: true,
  228. spatial_type: "identity",
  229. },
  230. {
  231. bsm: "LJCLSS",
  232. yxyzmc: "垃圾处理设施",
  233. level: 2,
  234. parent_bsm: "QT",
  235. has_yxz: true,
  236. spatial_type: "identity",
  237. },
  238. {
  239. bsm: "PS",
  240. yxyzmc: "排水",
  241. level: 2,
  242. parent_bsm: "GX",
  243. has_yxz: true,
  244. spatial_type: "identity",
  245. },
  246. {
  247. bsm: "QT",
  248. yxyzmc: "其他",
  249. level: 1,
  250. parent_bsm: "SZSS",
  251. has_yxz: null,
  252. spatial_type: null,
  253. },
  254. {
  255. bsm: "RQ",
  256. yxyzmc: "燃气",
  257. level: 2,
  258. parent_bsm: "GX",
  259. has_yxz: true,
  260. spatial_type: "identity",
  261. },
  262. {
  263. bsm: "STBHHX",
  264. yxyzmc: "生态保护红线",
  265. level: 1,
  266. parent_bsm: "DXGK",
  267. has_yxz: false,
  268. spatial_type: "contain",
  269. },
  270. {
  271. bsm: "SY",
  272. yxyzmc: "输油",
  273. level: 2,
  274. parent_bsm: "GX",
  275. has_yxz: true,
  276. spatial_type: "identity",
  277. },
  278. {
  279. bsm: "SZSS",
  280. yxyzmc: "市政设施",
  281. level: 0,
  282. parent_bsm: null,
  283. has_yxz: null,
  284. spatial_type: null,
  285. },
  286. {
  287. bsm: "TCC",
  288. yxyzmc: "停车场",
  289. level: 2,
  290. parent_bsm: "JT",
  291. has_yxz: true,
  292. spatial_type: "identity",
  293. },
  294. {
  295. bsm: "TL",
  296. yxyzmc: "铁路",
  297. level: 2,
  298. parent_bsm: "JT",
  299. has_yxz: true,
  300. spatial_type: "identity",
  301. },
  302. {
  303. bsm: "TSG",
  304. yxyzmc: "图书馆",
  305. level: 1,
  306. parent_bsm: "GGFWSS",
  307. has_yxz: true,
  308. spatial_type: "identity",
  309. },
  310. {
  311. bsm: "TYG",
  312. yxyzmc: "体育馆",
  313. level: 1,
  314. parent_bsm: "GGFWSS",
  315. has_yxz: true,
  316. spatial_type: "identity",
  317. },
  318. {
  319. bsm: "WSCLC",
  320. yxyzmc: "污水处理厂",
  321. level: 2,
  322. parent_bsm: "QT",
  323. has_yxz: true,
  324. spatial_type: "identity",
  325. },
  326. {
  327. bsm: "XX",
  328. yxyzmc: "学校",
  329. level: 1,
  330. parent_bsm: "GGFWSS",
  331. has_yxz: true,
  332. spatial_type: "identity",
  333. },
  334. {
  335. bsm: "YJJBNT",
  336. yxyzmc: "永久基本农田",
  337. level: 1,
  338. parent_bsm: "DXGK",
  339. has_yxz: false,
  340. spatial_type: "identity",
  341. },
  342. {
  343. bsm: "YY",
  344. yxyzmc: "医院",
  345. level: 1,
  346. parent_bsm: "GGFWSS",
  347. has_yxz: true,
  348. spatial_type: "identity",
  349. },
  350. {
  351. bsm: "ZRWHBHQ",
  352. yxyzmc: "自然文化保护区",
  353. level: 1,
  354. parent_bsm: "DXGK",
  355. has_yxz: false,
  356. spatial_type: "identity",
  357. },
  358. {
  359. bsm: "ZYCRK",
  360. yxyzmc: "主要出入口",
  361. level: 2,
  362. parent_bsm: "JT",
  363. has_yxz: true,
  364. spatial_type: "identity",
  365. },
  366. ],
  367. tempList: [
  368. {
  369. bsm: "CZKFBJ",
  370. yxyzmc: "城镇开发边界",
  371. yztj: "C",
  372. yxz: null,
  373. lx: "FZXZ01",
  374. sjlx: "SDE",
  375. sjy: "SDE.CZKFBJ_150502_202212",
  376. gltj: null,
  377. fxjg_c: "地块位于城镇开发边界以内",
  378. fxjg_n: "地块位于城镇开发边界以外",
  379. },
  380. {
  381. bsm: "YJJBNT",
  382. yxyzmc: "永久基本农田",
  383. yztj: "N",
  384. yxz: null,
  385. lx: "FZXZ01",
  386. sjlx: "SDE",
  387. sjy: "SDE.YJJBNTBHTB_150502_202212",
  388. gltj: null,
  389. fxjg_c: "地块位于永久基本农田以内",
  390. fxjg_n: "地块未压占永久基本农田",
  391. },
  392. {
  393. bsm: "STBHHX",
  394. yxyzmc: "生态保护红线",
  395. yztj: "N",
  396. yxz: null,
  397. lx: "FZXZ01",
  398. sjlx: "SDE",
  399. sjy: "SDE.STBHHX_150502_202212",
  400. gltj: null,
  401. fxjg_c: "地块位于生态保护红线以内",
  402. fxjg_n: "地块未压占生态保护红线以内",
  403. },
  404. {
  405. bsm: "SCHOOL",
  406. yxyzmc: "学校",
  407. yztj: "N",
  408. yxz: null,
  409. lx: "FZXZ02",
  410. sjlx: "SDE",
  411. sjy: "BASEPORDOS.Ordos_V_BUCP",
  412. gltj: "GB = '340101'",
  413. fxjg_c: "地块{YXZ}米范围内包含{COUNT}座学校,分别是{[YZ.NAME]};",
  414. fxjg_n:
  415. "地块{YXZ}米范围内不包含学校,距离最近的{YZ.NAME}直线距离约{DIST}米;",
  416. },
  417. {
  418. bsm: "HOSPITAL",
  419. yxyzmc: "医院",
  420. yztj: "N",
  421. yxz: null,
  422. lx: "FZXZ02",
  423. sjlx: "SDE",
  424. sjy: "BASEPORDOS.Ordos_V_BUCP",
  425. gltj: "GB = '340102'",
  426. fxjg_c: "地块{YXZ}米范围内包含{COUNT}座医院,分别是{[YZ.NAME]};",
  427. fxjg_n:
  428. "地块{YXZ}米范围内不包含医院,距离最近的{YZ.NAME}直线距离约{DIST}米;",
  429. },
  430. {
  431. bsm: "PARK",
  432. yxyzmc: "公园",
  433. yztj: "N",
  434. yxz: null,
  435. lx: "FZXZ02",
  436. sjlx: "SDE",
  437. sjy: null,
  438. gltj: null,
  439. fxjg_c: null,
  440. fxjg_n: null,
  441. },
  442. {
  443. bsm: "JZXQ",
  444. yxyzmc: "居住小区",
  445. yztj: "N",
  446. yxz: null,
  447. lx: "FZXZ02",
  448. sjlx: "SDE",
  449. sjy: null,
  450. gltj: null,
  451. fxjg_c: null,
  452. fxjg_n: null,
  453. },
  454. {
  455. bsm: "KCZYKZX",
  456. yxyzmc: "矿产资源控制线",
  457. yztj: "N",
  458. yxz: null,
  459. lx: "FZXZ01",
  460. sjlx: "SDE",
  461. sjy: "KJGH_QY.KCZYKZX",
  462. gltj: null,
  463. fxjg_c: null,
  464. fxjg_n: null,
  465. },
  466. {
  467. bsm: "LSWHBHX",
  468. yxyzmc: "历史文化保护线",
  469. yztj: "N",
  470. yxz: null,
  471. lx: "FZXZ01",
  472. sjlx: "SDE",
  473. sjy: "KJGH_QY.LSWHBHX",
  474. gltj: null,
  475. fxjg_c: null,
  476. fxjg_n: null,
  477. },
  478. {
  479. bsm: "JD",
  480. yxyzmc: "景点",
  481. yztj: "N",
  482. yxz: null,
  483. lx: "FZXZ02",
  484. sjlx: "SDE",
  485. sjy: null,
  486. gltj: null,
  487. fxjg_c: null,
  488. fxjg_n: null,
  489. },
  490. {
  491. bsm: "ZXCQCSLX",
  492. yxyzmc: "中心城区城市蓝线",
  493. yztj: "N",
  494. yxz: null,
  495. lx: "FZXZ01",
  496. sjlx: "SDE",
  497. sjy: "KJGH_QY.ZXCQCSLX",
  498. gltj: null,
  499. fxjg_c: null,
  500. fxjg_n: null,
  501. },
  502. {
  503. bsm: "ZXCQCSLVX",
  504. yxyzmc: "中心城区城市绿线",
  505. yztj: "N",
  506. yxz: null,
  507. lx: "FZXZ01",
  508. sjlx: "SDE",
  509. sjy: "KJGH_QY.ZXCQCSLVX",
  510. gltj: null,
  511. fxjg_c: null,
  512. fxjg_n: null,
  513. },
  514. {
  515. bsm: "ZXCQCSZX",
  516. yxyzmc: "中心城区城市紫线",
  517. yztj: "N",
  518. yxz: null,
  519. lx: "FZXZ01",
  520. sjlx: "SDE",
  521. sjy: "KJGH_QY.ZXCQCSZX",
  522. gltj: null,
  523. fxjg_c: null,
  524. fxjg_n: null,
  525. },
  526. {
  527. bsm: "ZXCQCSHX",
  528. yxyzmc: "中心城区城市黄线",
  529. yztj: "N",
  530. yxz: null,
  531. lx: "FZXZ01",
  532. sjlx: "SDE",
  533. sjy: "KJGH_QY.ZXCQCSHX",
  534. gltj: null,
  535. fxjg_c: null,
  536. fxjg_n: null,
  537. },
  538. ],
  539. optionsTemp: [],
  540. selectdialogData: [],
  541. dialogData: [],
  542. conditionList: [
  543. { label: "范围内", value: "identity" },
  544. { label: "范围外", value: "n_identity" },
  545. { label: "距离包含", value: "contain" },
  546. { label: "距离不包含", value: "n_contain" },
  547. // { label: "分析", value: "F" },contain,n_contain,相交/不相交::identity,n_identity
  548. ],
  549. };
  550. },
  551. mounted() {
  552. // this.getList();
  553. this.GetFxyzList();
  554. this.getTreeList();
  555. },
  556. methods: {
  557. close() {
  558. this.dialogVisible = false;
  559. },
  560. GetFxyzList() {
  561. GetFxyzList().then((res) => {
  562. this.kxyzList = res.data;
  563. });
  564. },
  565. getTreeList() {
  566. function arrayToTreeLoop(nodes) {
  567. const map = {};
  568. const tree = [];
  569. for (const node of nodes) {
  570. map[node.bsm] = { ...node, children: [] };
  571. }
  572. for (const node of Object.values(map)) {
  573. if (node.parent_bsm === null) {
  574. tree.push(node);
  575. } else {
  576. map[node.parent_bsm].children.push(node);
  577. }
  578. }
  579. return tree;
  580. }
  581. this.options = arrayToTreeLoop(this.kxyzList);
  582. this.optionsTemp = JSON.parse(JSON.stringify(this.options));
  583. },
  584. getList() {
  585. // yzlist().then((res) => {
  586. // if (res.success) {
  587. this.tempList.forEach((item) => {
  588. var num = item.lx == "FZXZ01" ? 0 : item.lx == "FZXZ02" ? 1 : 2;
  589. this.options[num].children.push({
  590. type: num,
  591. value: item.bsm,
  592. label: item.yxyzmc,
  593. sjlx: item.sjlx,
  594. yztj: item.yztj,
  595. sjy: item.sjy,
  596. });
  597. });
  598. this.optionsTemp = JSON.parse(JSON.stringify(this.options));
  599. // }
  600. // });
  601. },
  602. setTable(selectdata) {
  603. let tableList = [];
  604. selectdata.forEach((item) => {
  605. tableList.push({
  606. // name: item.label,
  607. // condition: item.yztj,
  608. // id: item.value,
  609. // type: item.type,
  610. // value: "",
  611. // sjy: item.sjy,
  612. // sjlx: item.sjlx,
  613. id: item.bsm,
  614. name: item.yxyzmc,
  615. condition: item.spatial_type,
  616. value: "",
  617. sjy: item.has_yxz,
  618. sjlx: item.spatial_type,
  619. });
  620. });
  621. tableList.forEach((item) => {
  622. this.resetTree(this.options, item);
  623. });
  624. this.removeChildrenZero(this.options);
  625. return tableList;
  626. },
  627. resetTree(data, item1) {
  628. data.forEach((item, index) => {
  629. if (item.bsm == item1.id) {
  630. data.splice(index, 1);
  631. }
  632. if (item.children != undefined && item.children.length != 0) {
  633. this.resetTree(item.children, item1);
  634. }
  635. });
  636. },
  637. removeChildrenZero(data) {
  638. data.forEach((item, index) => {
  639. if (item.children != undefined && item.children.length == 0) {
  640. if (item.disabled != undefined) {
  641. item.disabled = true;
  642. }
  643. }
  644. if (item.children != undefined && item.children.length > 0) {
  645. this.removeChildrenZero(item.children);
  646. }
  647. });
  648. },
  649. turnLeftToRight() {
  650. if (this.$refs.tree.getCheckedNodes().length == 0) {
  651. this.$message.warning("请勾选可选因子");
  652. return false;
  653. }
  654. let list = this.$refs.tree.getCheckedNodes().filter((item) => {
  655. return item.children == undefined || item.children.length == 0;
  656. });
  657. list = this.setTable(list);
  658. this.dialogData = [...this.dialogData, ...list];
  659. },
  660. turnRightToLeft() {
  661. if (this.selectdialogData.length == 0) {
  662. this.$message.warning("请勾选已选因子");
  663. return false;
  664. }
  665. let list = this.dialogData;
  666. this.selectdialogData.forEach((item) => {
  667. list = list.filter((item1) => {
  668. return item.id != item1.id;
  669. });
  670. });
  671. this.dialogData = list;
  672. this.options = JSON.parse(JSON.stringify(this.optionsTemp));
  673. list.forEach((item) => {
  674. this.resetTree(this.options, item);
  675. });
  676. },
  677. handleSelectionChange(val) {
  678. this.selectdialogData = val;
  679. },
  680. submit() {
  681. var sign = true;
  682. this.dialogData.forEach((item) => {
  683. item.type && item.value == "" && (sign = false);
  684. });
  685. if (sign) {
  686. // parent.emit("update:tableData", this.dialogData);
  687. // parent.emit("update:dialogVisible", false);
  688. this.$parent.tableData = this.dialogData;
  689. this.dialogVisible = false;
  690. } else {
  691. this.$message.warning("请将信息补充完整!");
  692. }
  693. },
  694. setData(data) {
  695. data.filter((item) => {
  696. this.clearitem(item);
  697. });
  698. },
  699. clearitem(item) {
  700. this.options[0].children = this.options[0].children.filter((item1) => {
  701. return item.id != item1.value;
  702. });
  703. this.options[1].children = this.options[1].children.filter((item1) => {
  704. return item.id != item1.value;
  705. });
  706. this.options[0].children.length == 0
  707. ? (this.options[0].disabled = true)
  708. : (this.options[0].disabled = false);
  709. this.options[1].children.length == 0
  710. ? (this.options[1].disabled = true)
  711. : (this.options[1].disabled = false);
  712. },
  713. },
  714. watch: {
  715. dialogVisible(oldVal, newVal) {
  716. if (this.tableData.length == []) {
  717. // 重置时,树的数据恢复
  718. this.dialogData = [];
  719. this.options = JSON.parse(JSON.stringify(this.optionsTemp));
  720. this.selectdialogData = [];
  721. } else {
  722. // 选择模板时,生成新的树
  723. this.dialogData = JSON.parse(JSON.stringify(this.tableData));
  724. this.setData(this.dialogData);
  725. }
  726. },
  727. },
  728. };
  729. </script>
  730. <style lang="scss" scoped>
  731. .hgxsc {
  732. height: 100%;
  733. }
  734. .dialog {
  735. .left-tree {
  736. height: 400px;
  737. overflow-y: auto;
  738. margin-top: 10px;
  739. border: 1px solid #ddd;
  740. .el-tree {
  741. margin-top: 10px;
  742. .el-tree-node__content {
  743. height: 35px;
  744. line-height: 35px;
  745. }
  746. }
  747. }
  748. /deep/.el-dialog__body {
  749. padding: 10px 30px;
  750. }
  751. .bg_purple {
  752. display: flex;
  753. flex-direction: column;
  754. align-items: center;
  755. justify-content: center;
  756. height: 400px;
  757. .el-button + .el-button {
  758. margin-left: 0;
  759. margin-top: 20px;
  760. }
  761. }
  762. .right-table {
  763. margin-top: 10px;
  764. height: 400px;
  765. /deep/ .el-table__inner-wrapper {
  766. height: 100%;
  767. }
  768. /deep/.el-table__header-wrapper,
  769. .el-table__header {
  770. height: 40px;
  771. }
  772. /deep/.el-table__body-wrapper {
  773. height: calc(100% - 40px);
  774. overflow-y: auto;
  775. }
  776. }
  777. }
  778. </style>