excelmodel.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796
  1. <template>
  2. <div>
  3. <el-row class="box">
  4. <!-- 左侧树结构 -->
  5. <el-col :span="5">
  6. <div class="box">
  7. <el-scrollbar>
  8. <basic-container>
  9. <!-- 树结构 -->
  10. <avue-tree
  11. :permission="getPermission"
  12. :loading="loading"
  13. :option="option"
  14. :data="data"
  15. @node-click="nodeClick"
  16. >
  17. <span
  18. class="el-tree-node__label"
  19. slot-scope="{ node, data }"
  20. >
  21. <div>
  22. <span> {{ data.name }} </span>
  23. <!-- <span> {{ node}} </span> -->
  24. <!-- 添加 -->
  25. <i
  26. class="el-icon-circle-plus-outline marleft10"
  27. @click.stop="addExcel(data)"
  28. v-if="data.fileType!=3"
  29. ></i>
  30. <!-- 编辑 -->
  31. <i
  32. class="el-icon-edit marleft10"
  33. @click.stop="editExcel(data)"
  34. v-if="data.fileType!=3"
  35. ></i>
  36. <!-- 删除 -->
  37. <i
  38. class="el-icon-delete marleft10"
  39. @click.stop="deleteExcelM(data)"
  40. v-if="!data.hasChildren&&data.fileType!=1"
  41. ></i>
  42. </div>
  43. </span>
  44. </avue-tree>
  45. </basic-container>
  46. </el-scrollbar>
  47. </div>
  48. </el-col>
  49. <!-- 右侧 -->
  50. <el-col
  51. :span="19"
  52. class="box"
  53. >
  54. <el-scrollbar>
  55. <basic-container>
  56. <!-- 上传、删除、下载操作栏 -->
  57. <div
  58. class="rightHeader"
  59. v-show="from.checkd&&from.fileUrl"
  60. >
  61. <div class="excelname">
  62. <div>{{from.extension}}</div>
  63. <i
  64. class="el-icon-success marleft10"
  65. style="color: rgb(0, 168, 112);"
  66. ></i>
  67. </div>
  68. <el-upload
  69. class="marleft10"
  70. :auto-upload="false"
  71. :show-file-list="false"
  72. action="#"
  73. :limit="1"
  74. :file-list='fileList'
  75. accept=".xls,.xlsx"
  76. :on-change="uploadChange"
  77. >
  78. <el-button
  79. type="primary"
  80. size="mini"
  81. >重新上传</el-button>
  82. </el-upload>
  83. <el-link
  84. class="marleft10 colorblue"
  85. @click="delectExcelMS"
  86. >删除</el-link>
  87. <el-link
  88. underline
  89. class="marleft10 colorblue"
  90. style="text-decoration:underline;"
  91. @click="downloadExcel()"
  92. >下载EXCEL</el-link>
  93. </div>
  94. <div
  95. class="rightHeader"
  96. v-show="from.checkd&&!from.fileUrl"
  97. >
  98. <el-upload
  99. :auto-upload="false"
  100. :show-file-list="false"
  101. action="#"
  102. :limit="1"
  103. :file-list='fileList'
  104. accept=".xls,.xlsx"
  105. :on-change="uploadChange"
  106. >
  107. <el-button
  108. type="primary"
  109. size="mini"
  110. >上传 excel</el-button>
  111. </el-upload>
  112. </div>
  113. <el-empty
  114. v-show="!from.checkd"
  115. description="该目录为根目录没有EXCEL文件"
  116. ></el-empty>
  117. <div
  118. style="height:700px;margin-top:20px;"
  119. v-if="from.fileUrl"
  120. >
  121. <iframe
  122. :src="excelSrc"
  123. width="100%"
  124. height="100%"
  125. ></iframe>
  126. </div>
  127. </basic-container>
  128. </el-scrollbar>
  129. </el-col>
  130. </el-row>
  131. <!-- 弹出框 -->
  132. <el-dialog
  133. title="新增编辑"
  134. class="dialogModel"
  135. :visible.sync="dialogTap"
  136. width="800px"
  137. modal-append-to-body
  138. append-to-body
  139. :before-close="handleClose"
  140. >
  141. <div class="dialogBox">
  142. <el-form
  143. ref="excelForm"
  144. :model="excelForm"
  145. label-width="80px"
  146. rules="rules"
  147. >
  148. <div style="display: flex;justify-content: space-between;">
  149. <el-form-item
  150. label="清表名称"
  151. style="width: 370px;"
  152. size="small"
  153. prop="nodeName"
  154. >
  155. <el-input v-model="excelForm.nodeName"></el-input>
  156. </el-form-item>
  157. <el-form-item
  158. label="清表类型"
  159. style="width: 370px;"
  160. size="small"
  161. prop="tabType"
  162. >
  163. <el-select
  164. v-model="excelForm.tabType"
  165. style="width:100%;"
  166. placeholder="请选择清表类型"
  167. >
  168. <el-option
  169. v-for="(val,index) in exceltypeData"
  170. :key="index"
  171. :label="val.dictValue"
  172. :value="val.id"
  173. ></el-option>
  174. </el-select>
  175. </el-form-item>
  176. </div>
  177. </el-form>
  178. <div
  179. class="middle"
  180. v-if="wbsmiddle"
  181. >
  182. <div class="left">
  183. <div class="select">
  184. <el-select
  185. placeholder="请选择WBS模板"
  186. style="width: 96%;"
  187. size="small"
  188. @change="wbsmodelchange"
  189. v-model="excelForm.wbsId"
  190. >
  191. <el-option
  192. v-for="(val,index) in wbsmodel"
  193. :key="index"
  194. :label="val.wbsName"
  195. :value="val.id"
  196. ></el-option>
  197. </el-select>
  198. </div>
  199. <div class="leftscroll">
  200. <avue-tree
  201. :permission="getPermission"
  202. :loading="loading"
  203. :option="option2"
  204. :data="wbsdata"
  205. @node-click="nodeClickExcel"
  206. >
  207. <span
  208. class="el-tree-node__label"
  209. slot-scope="{ node, data }"
  210. >
  211. <div>
  212. <span> {{ data.deptName }} </span>
  213. </div>
  214. </span>
  215. </avue-tree>
  216. </div>
  217. </div>
  218. <!-- 右侧关联 -->
  219. <template>
  220. <table
  221. class="right"
  222. width="49%"
  223. bordercolor="#DCDCDC"
  224. border="1px"
  225. >
  226. <thead>
  227. <tr>
  228. <td>表名</td>
  229. <td>操作</td>
  230. </tr>
  231. </thead>
  232. <tbody>
  233. <tr
  234. v-for="(val,index) in tableData"
  235. :key="index"
  236. >
  237. <td style="width:50%;">{{val.tableName}}</td>
  238. <td style="text-align: center;height:30px;">
  239. <el-button
  240. v-if="val.isLinkTable==1"
  241. type="info"
  242. size="small"
  243. @click="relation(index)"
  244. >关联</el-button>
  245. <el-button
  246. v-if="val.isLinkTable==2"
  247. type="warning"
  248. size="small"
  249. @click="Disassociate(index)"
  250. >取消关联</el-button>
  251. </td>
  252. </tr>
  253. </tbody>
  254. </table>
  255. </template>
  256. </div>
  257. </div>
  258. <div class="btbox">
  259. <el-button
  260. size="mini"
  261. @click="handleClose()"
  262. >取消</el-button>
  263. <el-button
  264. type="info"
  265. style="margin-left: 50px;"
  266. size="mini"
  267. @click="saveExcel()"
  268. >确定</el-button>
  269. </div>
  270. </el-dialog>
  271. </div>
  272. </template>
  273. <script>
  274. import { detailExcel, excelType, tabLazytree, getWbsTypeList, wbstree, selectByNodeTable, Excelmodify, uploadExcel, deleteExcelshu, deleteExcel } from '@/api/exctab/excelmodel'
  275. export default {
  276. data () {
  277. return {
  278. loading: false,//懒加载
  279. option: {
  280. filter: false,
  281. lazy: true,
  282. treeLoad: (async (node, resolve) => {
  283. console.log(node);
  284. if (node.data.hasChildren) {
  285. const { data: res } = await tabLazytree({ modeId: node.data.id })
  286. console.log(res);
  287. if (res.code === 200) {
  288. if (Array.isArray(res.data)) {
  289. res.data.forEach((val) => {
  290. if (!val.hasChildren) {
  291. val.leaf = true
  292. }
  293. })
  294. }
  295. return resolve(res.data)
  296. }
  297. } else {
  298. return resolve([])
  299. }
  300. }),
  301. },
  302. data: [],//清表模板
  303. wbsdata: [],//wbs模板
  304. //#region 右侧数据
  305. from: {
  306. checkd: false,//判断是否可以进行上传、重新上传excel
  307. id: '',//清表树ID
  308. extension: '', //文件名称
  309. fileUrl: '',//文件路径
  310. },
  311. fileList: [],//选中的文件
  312. excelSrc: '',//
  313. //#endregion
  314. //#region 弹框
  315. dialogTap: false,
  316. option2: {
  317. filter: false,
  318. lazy: true,
  319. treeLoad: (async (node, resolve) => {
  320. if (node.data.hasChildren) {
  321. const { data: res } = await wbstree({ parentId: node.data.id, wbsId: this.excelForm.wbsId, wbsType: this.excelForm.wbsType })
  322. console.log(res);
  323. if (res.code === 200) {
  324. if (Array.isArray(res.data)) {
  325. res.data.forEach((val) => {
  326. if (!val.hasChildren) {
  327. val.leaf = true
  328. }
  329. })
  330. }
  331. return resolve(res.data)
  332. }
  333. } else {
  334. return resolve([])
  335. }
  336. }),
  337. },//弹框里面的wbs树
  338. excelForm: {
  339. nodeName: '',//清表名称
  340. tabType: '',//清表类型
  341. id: '',//清表Id,编辑时用
  342. parentId: '',//清表Id,添加时用
  343. wbsId: '',//WBS模板Id
  344. wbsType: '',//WBS模板类型
  345. },
  346. rules: {
  347. nodeName: [
  348. { required: true, message: '请输入清表名称', trigger: 'blur' },
  349. ],
  350. tabType: [
  351. { required: true, message: '请选择清表类型', trigger: 'blur' },
  352. ],
  353. },
  354. wbsform: {
  355. id: '',
  356. wbsType: '',
  357. wbsName: '',
  358. },//wbs树选中的值
  359. tableData: [],//右侧表数据
  360. wbsmiddle: false,//选择wbs模板那块是否有
  361. tableList: [],//进行处理的wbs关联表
  362. exceltypeData: [],//清表类型枚举
  363. wbsmodel: [],//wbs模板名称枚举
  364. //#endregion
  365. }
  366. },
  367. methods: {
  368. //#region 接口
  369. async tabLazytree (modeId) {//清表树
  370. const { data: res } = await tabLazytree({ modeId })
  371. console.log(res);
  372. if (res.code === 200) {
  373. if (Array.isArray(res.data)) {
  374. res.data.forEach((val) => {
  375. if (!val.hasChildren) {
  376. val.leaf = true
  377. }
  378. })
  379. }
  380. this.data = res.data
  381. }
  382. },
  383. async detailExcel (id) {//获取列表信息
  384. const { data: res } = await detailExcel({ id })
  385. console.log(res);
  386. if (res.code === 200) {
  387. this.from.id = res.data.id
  388. this.from.extension = res.data.extension //文件名称
  389. this.from.fileUrl = res.data.fileUrl //文件路径
  390. let routeUrl = res.data.fileUrl
  391. let pSrc = routeUrl + '?r=' + new Date()
  392. this.excelSrc = 'http://view.officeapps.live.com/op/view.aspx?src=' + encodeURIComponent(pSrc)
  393. }
  394. },
  395. async getWbsTypeList () {//清表编辑 wbs 下拉框选择
  396. const { data: res } = await getWbsTypeList()
  397. console.log(res);
  398. if (res.code === 200) {
  399. this.wbsmodel = res.data
  400. }
  401. },
  402. async excelType () {//清表类型
  403. const { data: res } = await excelType({ code: 'sys_excltab_type' })
  404. console.log(res);
  405. if (res.code === 200) {
  406. this.exceltypeData = res.data
  407. }
  408. },
  409. async wbstree () {//wbs树懒加载
  410. const { data: res } = await wbstree({ parentId: 0, wbsId: this.excelForm.wbsId, wbsType: this.excelForm.wbsType })
  411. console.log(res);
  412. if (res.code === 200) {
  413. res.data.forEach((val) => {
  414. if (!val.hasChildren) {
  415. val.leaf = true
  416. }
  417. })
  418. this.wbsdata = res.data
  419. }
  420. },
  421. async selectByNodeTable (id, wbsType) {//wbs树获取表
  422. const { data: res } = await selectByNodeTable({ id, wbsType })
  423. console.log(res);
  424. if (res.code === 200) {
  425. console.log(Array.isArray(res.data));
  426. if (Array.isArray(res.data)) {
  427. this.tableData = res.data
  428. this.tableData.forEach(val => {
  429. val.changeTable = val.isLinkTable
  430. })
  431. } else {
  432. this.tableData = []
  433. }
  434. }
  435. },
  436. async deleteExcelshu (ids) {//删除清表
  437. const { data: res } = await deleteExcelshu(ids)
  438. console.log(res);
  439. if (res.code === 200) {
  440. this.$message({
  441. message: '删除清表树成功',
  442. type: 'success'
  443. });
  444. // this.tabLazytree(0)
  445. this.tabLazytree(this.$route.params.id)//获取清表树
  446. this.from = {
  447. checkd: false,//判断是否可以进行上传、重新上传excel
  448. id: '',//清表树ID
  449. extension: '', //文件名称
  450. fileUrl: '',//文件路径
  451. }
  452. }
  453. },
  454. async Excelmodify (wbsExclTabParmVO) {//编辑添加清表
  455. console.log(wbsExclTabParmVO);
  456. const { data: res } = await Excelmodify(wbsExclTabParmVO)
  457. console.log(res);
  458. if (res.code === 200) {
  459. // await this.tabLazytree(0)
  460. await this.tabLazytree(this.$route.params.id)//获取清表树
  461. this.dialogTap = false
  462. }
  463. },
  464. async uploadExcel (data) {//上传清表
  465. const { data: res } = await uploadExcel(data)
  466. console.log(res);
  467. if (res.code === 200) {
  468. this.$message({
  469. message: '上传文件成功',
  470. type: 'success'
  471. })
  472. this.detailExcel(this.from.id)
  473. }
  474. this.fileList = []
  475. },
  476. async deleteExcel (data) {//删除excel表
  477. const { data: res } = await deleteExcel(data)
  478. if (res.code === 200) {
  479. this.$message({
  480. message: '删除excel表成功',
  481. type: 'success'
  482. })
  483. this.detailExcel(this.from.id)
  484. }
  485. },
  486. //#endregion
  487. //#region 右侧
  488. uploadChange (file, fileList) {//选中表后触发
  489. console.log(file, fileList);
  490. this.fileList = [file.raw]
  491. let formData = new FormData()
  492. formData.append('file', ...this.fileList)
  493. formData.append('nodeId', this.from.id)
  494. this.uploadExcel(formData)
  495. },
  496. delectExcelMS () {//删除excel表点击事件、
  497. let _that = this
  498. this.$confirm('确认删除该文件?', '', {
  499. confirmButtonText: '确定',
  500. cancelButtonText: '取消',
  501. type: 'warning'
  502. }).then(() => {
  503. _that.deleteExcel({ id: _that.from.id, fileUrl: '' })
  504. }).catch(() => {
  505. })
  506. },
  507. downloadExcel () {//下载excel表
  508. window.open(this.from.fileUrl)
  509. },
  510. //#endregion
  511. //#region 外层左侧事件
  512. nodeClick (data) {//外层树结构
  513. console.log(data);
  514. if (data.hasChildren == false || data.fileType == 3) {
  515. this.from.checkd = true
  516. } else {
  517. this.from.checkd = false
  518. }
  519. if (this.from.checkd) {
  520. this.detailExcel(data.id)
  521. } else {
  522. this.from = {
  523. checkd: false,//判断是否可以进行上传、重新上传excel
  524. id: '',//清表树ID
  525. extension: '', //文件名称
  526. fileUrl: '',//文件路径
  527. }
  528. }
  529. },
  530. async editExcel (data) {//编辑
  531. console.log(data);
  532. if (data.fileType != 3 && data.hasChildren) {
  533. this.wbsmiddle = false
  534. } else {
  535. this.wbsmiddle = true
  536. this.getWbsTypeList()//wbs模板名称
  537. }
  538. const { data: res } = await detailExcel({ id: data.id })
  539. console.log(res);
  540. if (res.code === 200) {
  541. this.excelForm.id = res.data.id
  542. this.excelForm.nodeName = res.data.name //清表名称
  543. this.excelForm.tabType = res.data.tabType //清表类型
  544. this.dialogTap = true
  545. }
  546. },
  547. async addExcel (data) {//添加
  548. console.log(data);
  549. if (data.fileType != 3 && data.hasChildren) {
  550. this.wbsmiddle = false
  551. } else {
  552. this.wbsmiddle = true
  553. this.getWbsTypeList()//wbs模板名称
  554. }
  555. this.excelForm.parentId = data.id
  556. this.dialogTap = true
  557. },
  558. deleteExcelM (data) {//删除
  559. const _that = this
  560. this.$confirm('确定将选择数据删除?', '', {
  561. confirmButtonText: '确定',
  562. cancelButtonText: '取消',
  563. type: 'error'
  564. }).then(() => {
  565. _that.deleteExcelshu(data.id)
  566. }).catch(() => {
  567. });
  568. },
  569. //#endregion
  570. //#region 弹框属性
  571. handleClose () {//关闭弹框触发事件
  572. this.excelForm = {
  573. nodeName: '',//清表名称
  574. tabType: '',//清表类型
  575. id: '',//清表Id,编辑时用
  576. parentId: '',//清表Id,添加时用
  577. wbsId: '',//WBS模板Id
  578. wbsType: '',//WBS模板类型
  579. }
  580. this.wbsform = {
  581. id: '',
  582. wbsType: '',
  583. wbsName: '',
  584. }//wbs树选中的值
  585. this.wbsdata = [] //wbs树数据
  586. this.tableData = []//弹框table数据
  587. this.tableList = []//关联取消关联的数据
  588. this.dialogTap = false
  589. },
  590. wbsmodelchange (val) {//wbs模板change事件
  591. if (val) {
  592. this.wbsmodel.forEach((da) => {
  593. if (da.id == val) {
  594. this.excelForm.wbsType = da.wbsType
  595. }
  596. })
  597. }
  598. this.wbstree()
  599. },
  600. nodeClickExcel (data) {//wbs树点击事件
  601. console.log(data);
  602. this.wbsform.id = data.id
  603. this.wbsform.wbsType = data.type
  604. this.wbsform.wbsName = data.deptName
  605. if (this.tableList == '') {
  606. this.selectByNodeTable(data.id, data.type)
  607. } else {
  608. let tag = true
  609. this.tableList.forEach((val) => {
  610. if (val.id == data.id) {
  611. this.tableData = val.arrs
  612. tag = false
  613. }
  614. })
  615. if (tag) {
  616. this.selectByNodeTable(data.id, data.type)
  617. }
  618. }
  619. },
  620. relation (key) {//关联
  621. this.tableData[key].isLinkTable = 2
  622. let tap = this.tableList.find((val) => {
  623. return val.id == this.wbsform.id
  624. })
  625. if (!tap) {
  626. this.tableList.push({
  627. id: this.wbsform.id,
  628. wbsType: this.wbsform.wbsType,
  629. wbsName: this.wbsform.wbsName,
  630. arrs: this.tableData
  631. })
  632. }
  633. },
  634. Disassociate (key) {//取消关联
  635. this.tableData[key].isLinkTable = 1
  636. const tap = this.tableList.find((val) => {
  637. return val.id == this.wbsform.id
  638. })
  639. if (!tap) {
  640. this.tableList.push({
  641. id: this.wbsform.id,
  642. wbsType: this.wbsform.wbsType,
  643. wbsName: this.wbsform.wbsName,
  644. arrs: this.tableData
  645. })
  646. }
  647. },
  648. saveExcel () {//保存按钮
  649. this.$refs.excelForm.validate(async (valid) => {
  650. if (valid) {
  651. let linkDataInfo = []
  652. if (this.tableList.length > 0) {
  653. this.tableList.forEach((val, index) => {
  654. let linkIds = ''
  655. val.arrs.forEach((da, key) => {
  656. if (da.isLinkTable != da.changeTable) {
  657. linkIds = `${linkIds}${linkIds != '' ? ',' : ''}${da.id}`
  658. }
  659. })
  660. if (linkIds != '') {
  661. linkDataInfo.push({
  662. id: val.id,
  663. linkIds: linkIds,
  664. wbsName: val.wbsName,
  665. wbsType: val.wbsType
  666. })
  667. }
  668. })
  669. }
  670. if (this.excelForm.parentId && !this.excelForm.id) {
  671. await this.Excelmodify({
  672. nodeName: this.excelForm.nodeName,
  673. tabType: this.excelForm.tabType,
  674. parentId: this.excelForm.parentId,
  675. linkDataInfo: linkDataInfo
  676. })
  677. } else {
  678. await this.Excelmodify({
  679. nodeName: this.excelForm.nodeName,
  680. tabType: this.excelForm.tabType,
  681. id: this.excelForm.id,
  682. linkDataInfo: linkDataInfo
  683. })
  684. }
  685. this.handleClose()
  686. }
  687. });
  688. },
  689. //#endregion
  690. },
  691. created () {
  692. this.excelType()//清表类型
  693. // this.tabLazytree(0)
  694. this.tabLazytree(this.$route.params.id)//获取清表树
  695. }
  696. }
  697. </script>
  698. <style scoped lang="scss">
  699. .marleft10 {
  700. margin-left: 10px;
  701. }
  702. /deep/.el-tree-node__expand-icon {
  703. font-size: 16px;
  704. }
  705. .colorblue {
  706. color: rgb(0, 82, 217);
  707. }
  708. .box {
  709. height: 800px;
  710. }
  711. .el-scrollbar {
  712. height: 100%;
  713. }
  714. .box .el-scrollbar__wrap {
  715. overflow: scroll;
  716. }
  717. .rightHeader {
  718. display: flex;
  719. justify-content: flex-start;
  720. align-items: center;
  721. font-size: 14px;
  722. background-color: #fff;
  723. .excelname {
  724. box-sizing: border-box;
  725. min-width: 200px;
  726. height: 28px;
  727. border: 1px solid rgb(220, 220, 220);
  728. padding: 0 10px;
  729. border-radius: 3px;
  730. display: flex;
  731. justify-content: space-between;
  732. align-items: center;
  733. }
  734. }
  735. .dialogModel {
  736. .dialogBox {
  737. .middle {
  738. display: flex;
  739. .left {
  740. border: 1px solid rgb(220, 220, 220);
  741. border-radius: 3px;
  742. height: 500px;
  743. width: 49%;
  744. .select {
  745. box-sizing: border-box;
  746. display: flex;
  747. justify-content: center;
  748. padding: 5px 0;
  749. border-bottom: 1px solid #e0e0e0;
  750. }
  751. .leftscroll {
  752. height: 450px;
  753. overflow-y: scroll;
  754. }
  755. }
  756. .right {
  757. height: auto;
  758. height: 60px;
  759. max-height: 500px;
  760. margin-left: 2%;
  761. // height: 500px;
  762. border-radius: 3px;
  763. td {
  764. box-sizing: border-box;
  765. padding: 5px 10px;
  766. height: 30px;
  767. line-height: 30px;
  768. }
  769. }
  770. }
  771. }
  772. .btbox {
  773. margin-top: 20px;
  774. display: flex;
  775. justify-content: center;
  776. }
  777. }
  778. </style>