index.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745
  1. <template>
  2. <div>
  3. <layout>
  4. <layout-header>
  5. <div class="">
  6. <!--按钮部分-->
  7. <el-form
  8. ref="elSearchFormRef"
  9. inline
  10. class="demo-form-inline"
  11. @submit.native.prevent>
  12. <el-form-item>
  13. <el-input
  14. v-model="searchInfo"
  15. placeholder="搜索产品编号或产品名称"
  16. clearable
  17. style="width: 180px"
  18. />
  19. <el-button
  20. type="primary"
  21. icon="search"
  22. class="search"
  23. @click="handleSearch"
  24. />
  25. <el-button
  26. type="primary"
  27. icon="edit"
  28. class="bt"
  29. @click="
  30. () => {
  31. dialogDetail = true;
  32. }
  33. "
  34. ><i class="el-icon-edit" />查改
  35. </el-button>
  36. <!-- <el-button type="primary" disabled icon="edit" @click="" style="margin-left: 10px">工艺方案复制</el-button>-->
  37. <el-button
  38. type="primary"
  39. icon="edit"
  40. class="bt"
  41. @click="
  42. () => {
  43. dialogGdcjstj = true;
  44. }
  45. "
  46. >工单超节损统计
  47. </el-button>
  48. <el-button
  49. type="primary"
  50. icon="edit"
  51. class="bt"
  52. @click="
  53. () => {
  54. dialogKhsz = true;
  55. }
  56. "
  57. >考核设置
  58. </el-button>
  59. <el-button
  60. type="primary"
  61. icon="edit"
  62. class="bt"
  63. @click="
  64. () => {
  65. dialogXzgdtl = true;
  66. }
  67. "
  68. >修正工单投料
  69. </el-button>
  70. <el-button
  71. type="primary"
  72. icon="edit"
  73. class="bt"
  74. @click="
  75. () => {
  76. dialogGxclhc = true;
  77. }
  78. "
  79. >工序产量核查
  80. </el-button>
  81. <el-button
  82. type="primary"
  83. icon="edit"
  84. class="bt"
  85. @click="
  86. () => {
  87. dialogGdzjfptj = true;
  88. }
  89. "
  90. >工单质检废品统计
  91. </el-button>
  92. <el-button
  93. type="primary"
  94. icon="edit"
  95. class="bt"
  96. @click="
  97. () => {
  98. dialogHjfpfb = true;
  99. }
  100. "
  101. >核检废品分布
  102. </el-button>
  103. <el-button
  104. type="primary"
  105. icon="edit"
  106. class="bt"
  107. @click="handleGddy"
  108. >工单打印
  109. </el-button>
  110. <el-button
  111. type="primary"
  112. icon="edit"
  113. class="bt"
  114. @click="
  115. () => {
  116. pd_lcdlist = true;
  117. pd_lcdProductValue();
  118. }
  119. "
  120. >流程单查询
  121. </el-button>
  122. <el-button
  123. type="primary"
  124. icon="edit"
  125. class="bt"
  126. @click="exportExcel"
  127. >导出Excel
  128. </el-button>
  129. </el-form-item>
  130. </el-form>
  131. <!-- 弹窗 -->
  132. <div>
  133. <!-- 查改 -->
  134. <Detail
  135. v-if="dialogDetail"
  136. :is-show="dialogDetail"
  137. :gdbh="gdbh"
  138. @destroy="
  139. () => {
  140. dialogDetail = false;
  141. }
  142. "
  143. />
  144. <!-- 工单超节损统计 -->
  145. <el-dialog
  146. v-model="dialogGdcjstj"
  147. title="工单超节损统计"
  148. destroy-on-close
  149. >
  150. <Gdcjstj :gdbh="gdbh" />
  151. </el-dialog>
  152. <!-- 修正工单印件质量考核设置 -->
  153. <Khsz
  154. v-if="dialogKhsz"
  155. v-model="dialogKhsz"
  156. :gdbh="gdbh"
  157. />
  158. <!-- 修正工单投料 -->
  159. <Xzgdtl
  160. v-if="dialogXzgdtl"
  161. v-model="dialogXzgdtl"
  162. @update-data = "exitXzgdtl"
  163. :gdbh="gdbh"
  164. :yjno="yjno"
  165. />
  166. <!-- 工序产量核查 -->
  167. <Gxclhc
  168. v-if="dialogGxclhc"
  169. v-model="dialogGxclhc"
  170. :gdbh="gdbh"
  171. />
  172. <!-- 工单质检废品统计 -->
  173. <Gongdanzhijianfeipintongji
  174. v-if="dialogGdzjfptj"
  175. v-model="dialogGdzjfptj"
  176. :val="gdbh"
  177. />
  178. <!-- 核检废品分布 -->
  179. <Hjfpfb
  180. v-if="dialogHjfpfb"
  181. v-model="dialogHjfpfb"
  182. :val="gdbh"
  183. />
  184. <!-- 工单打印 -->
  185. <PrintPage ref="printPageRef" />
  186. <!--流程单查询【弹窗】-->
  187. <el-dialog
  188. v-model="pd_lcdlist"
  189. title="工单工序生产进程"
  190. fullscreen
  191. >
  192. <div style="width: 100%; height: 100%">
  193. <el-button
  194. type=""
  195. @click="
  196. () => {
  197. pd_lcdlist = false;
  198. }
  199. "
  200. >退出</el-button>
  201. </div>
  202. <div
  203. style="
  204. width: 100%;
  205. height: 100%;
  206. display: flex;
  207. align-items: center;
  208. "
  209. >
  210. <el-form-item
  211. label="工单编号"
  212. style="margin-right: 20px; padding: 0"
  213. >
  214. <el-input
  215. v-model="pd_lcdformData['gdbh']"
  216. @keyup.enter="pd_lcdProductValue"
  217. placeholder="Enter回车"
  218. />
  219. </el-form-item>
  220. <el-form-item
  221. label=""
  222. style="margin-right: 5px; padding: 0"
  223. >
  224. <el-input
  225. v-model="pd_lcdformData['code']"
  226. disabled
  227. />
  228. </el-form-item>
  229. <el-form-item
  230. label=""
  231. style="margin-right: 5px; padding: 0"
  232. >
  233. <el-input
  234. v-model="pd_lcdformData['name']"
  235. disabled
  236. style="width: 500px"
  237. />
  238. </el-form-item>
  239. </div>
  240. <div style="width: 100%; height: 70vh; display: flex">
  241. <layout>
  242. <layout-sider
  243. :resize-directions="['right']"
  244. :width="240"
  245. style="margin-right: 10px; height: 70vh"
  246. >
  247. <div class="JKWTree-tree">
  248. <el-tree
  249. :data="pd_lcd_treeData"
  250. default-expand-all
  251. @node-click="pd_lcd_handleNodeClick"
  252. />
  253. </div>
  254. </layout-sider>
  255. <layout-main>
  256. <!-- 这里放右侧的内容 -->
  257. <el-space wrap>
  258. <!-- 右侧内容 -->
  259. <template v-for="item in processList.total_process">
  260. <el-button
  261. disabled
  262. :type="
  263. !processList.process.includes(item)
  264. ? 'danger'
  265. : 'info'
  266. "
  267. plain
  268. style="width: 50px"
  269. >{{ item }}</el-button>
  270. </template>
  271. </el-space>
  272. </layout-main>
  273. </layout>
  274. </div>
  275. </el-dialog>
  276. </div>
  277. </div>
  278. </layout-header>
  279. <layout>
  280. <!-- 左侧树侧形结构-->
  281. <layout-sider
  282. :resize-directions="['right']"
  283. :width="190"
  284. style="margin-right: 10px"
  285. >
  286. <div
  287. class="JKWTree-tree"
  288. style="height: 70vh"
  289. >
  290. <h3>工单超节损核算</h3>
  291. <el-tree
  292. :data="treeData"
  293. highlight-current
  294. @node-click="handleNodeClick"
  295. />
  296. </div>
  297. </layout-sider>
  298. <!-- 右侧内容区域 -->
  299. <layout-content>
  300. <!-- 上方列表 -->
  301. <div class="gva-table-box">
  302. <el-table
  303. style="width: 100%; height: 30vh"
  304. :data="tableData1"
  305. row-key="ID"
  306. highlight-current-row
  307. border
  308. :row-class-name="rowClassName"
  309. :cell-class-name="cellClassName"
  310. :row-style="{ height: '20px' }"
  311. :cell-style="{ padding: '0px' }"
  312. :header-row-style="{ height: '20px' }"
  313. :header-cell-style="{ padding: '0px' }"
  314. @row-click="showOrderSuperLossGy"
  315. @current-change="
  316. (row, oldRow) => {
  317. currentRow = row;
  318. }
  319. "
  320. >
  321. <el-table-column
  322. type="selection"
  323. width="55"
  324. />
  325. <!-- 使用 v-for 循环渲染每一列 -->
  326. <el-table-column
  327. v-for="column in tableCols1"
  328. :key="column.prop"
  329. :prop="column.prop"
  330. :label="column.label"
  331. :width="column.width"
  332. show-overflow-tooltip="true"
  333. sortable
  334. />
  335. </el-table>
  336. </div>
  337. <!-- 下方表格 -->
  338. <el-table
  339. style="width: 100%; height: 40vh"
  340. row-key="ID"
  341. highlight-current-row
  342. border
  343. :data="tableData2"
  344. :row-style="{ height: '20px' }"
  345. :cell-style="{ padding: '0px' }"
  346. :header-row-style="{ height: '20px' }"
  347. :header-cell-style="{ padding: '0px' }"
  348. >
  349. <el-table-column
  350. type="selection"
  351. width="55"
  352. />
  353. <!-- 使用 v-for 循环渲染每一列 -->
  354. <el-table-column
  355. v-for="column in tableCols2"
  356. :key="column.prop"
  357. :prop="column.prop"
  358. :label="column.label"
  359. :width="column.width"
  360. show-overflow-tooltip="true"
  361. sortable
  362. />
  363. </el-table>
  364. </layout-content>
  365. </layout>
  366. </layout>
  367. </div>
  368. </template>
  369. <script>
  370. import service from '@/utils/request'
  371. import { writeXLSX } from 'xlsx'
  372. // 5.1流程单查询-工单工序生产进程菜单栏
  373. export const getOrderProcessLeft = (params) => {
  374. return service({
  375. url: '/mes_server/work_order_verification/getOrderProcessLeft',
  376. method: 'get',
  377. params,
  378. })
  379. }
  380. // 5.2流程单查询-获取工单工序生产进程右侧
  381. export const getOrderProcessRight = (params) => {
  382. return service({
  383. url: '/mes_server/work_order_verification/getOrderProcessRight',
  384. method: 'get',
  385. params,
  386. })
  387. }
  388. </script>
  389. <script setup>
  390. import {
  391. Layout,
  392. LayoutContent,
  393. LayoutHeader,
  394. LayoutSider,
  395. } from '@arco-design/web-vue'
  396. import { ref, watch } from 'vue'
  397. import {
  398. getOrderSuperLossGy,
  399. getSide,
  400. getTable,
  401. } from '@/api/mes_api_gty/orderAccounting'
  402. import Gdcjstj from '@/view/performance/12-orderAccounting/componets/gdcjstj.vue'
  403. import Khsz from '@/view/performance/12-orderAccounting/componets/khsz.vue'
  404. import Xzgdtl from '@/view/performance/12-orderAccounting/componets/xzgdtl.vue'
  405. import Gxclhc from '@/view/performance/12-orderAccounting/componets/gxclhc.vue'
  406. import Gongdanzhijianfeipintongji from '@/view/performance/09-workOrderVerification/componets/gongdanzhijianfeipintongji.vue'
  407. import Detail from '@/view/performance/12-orderAccounting/componets/detail.vue'
  408. import Hjfpfb from './componets/hjfpfb.vue'
  409. import PrintPage from '@/view/yunyin/shengchanguanli/components/print.vue'
  410. import { reactive } from 'vue'
  411. import { exportExcelFile } from '@/utils/excel'
  412. import { useUserStore } from '@/pinia/modules/user'
  413. const userStore = useUserStore()
  414. const sys_id =
  415. '[' + userStore.userInfo.userName + '/' + userStore.userInfo.nickName + ']'
  416. // 弹窗
  417. const dialogGdcjstj = ref(false)
  418. const dialogDetail = ref(false)
  419. const dialogKhsz = ref(false)
  420. const dialogXzgdtl = ref(false)
  421. const dialogGxclhc = ref(false)
  422. const dialogGdzjfptj = ref(false)
  423. const dialogHjfpfb = ref(false)
  424. // 侧边栏数据
  425. const treeData = ref([])
  426. const getSideData = async() => {
  427. const res = await getSide()
  428. if (res.code === 0) {
  429. const { data } = res
  430. const transformedData = []
  431. for (const [key, value] of Object.entries(data)) {
  432. const [date, total] = key.split('-') // 提取日期和数量
  433. const transformedItem = {
  434. label: `${date}(工单数:${total})`,
  435. date: date,
  436. children: value.map((item) => ({
  437. label: `${item['客户编号']}【${item['客户名称']}】(工单数:${item.total})`,
  438. date: date,
  439. code: item?.['客户编号'],
  440. })),
  441. }
  442. transformedData.push(transformedItem)
  443. }
  444. treeData.value = transformedData
  445. }
  446. }
  447. getSideData()
  448. // 表格数据
  449. const tableCols1 = [
  450. { label: '超损工单', prop: 'csgd', width: '120' },
  451. { label: '工单编号', prop: 'Gd_gdbh', width: '120' },
  452. { label: '印件号', prop: 'jjcp_yjno', width: '100' },
  453. { label: '联数', prop: 'yj_ls', width: '80' },
  454. { label: '产品代号', prop: '成品编码', width: '150' },
  455. { label: '产品名称', prop: '成品名称', width: '250' },
  456. { label: '实际投料', prop: '实际投料', width: '120' },
  457. { label: '计量单位', prop: '计量单位', width: '120' },
  458. { label: '入仓日期', prop: 'warehousing_date', width: '120' },
  459. { label: '入仓数量', prop: 'warehousing_num', width: '120' },
  460. { label: '目标合格率', prop: 'target_rate', width: '120' },
  461. { label: '实际合格率', prop: 'real_rate', width: '120' },
  462. { label: '奖惩系数', prop: 'reward_rate', width: '120' },
  463. // { label: '奖罚金额合计', prop: '', width: '140' },
  464. { label: '废品合计', prop: '废品合计', width: '120' },
  465. { label: '工单无形损', prop: '工单无形损', width: '120' },
  466. { label: '材料废', prop: '材料废', width: '120' },
  467. { label: '零头处理', prop: '零头处理', width: '120' },
  468. { label: '处发废', prop: '外发废', width: '120' },
  469. { label: '外摊废', prop: '分摊废', width: '120' },
  470. { label: '工单计划损耗', prop: '工单计划损耗', width: '140' },
  471. { label: '工单制程废', prop: '', width: '120' },
  472. { label: '工单检验废', prop: '工单质检废', width: '120' },
  473. { label: '年月', prop: 'date', width: '120' },
  474. ]
  475. const tableCols2 = [
  476. { label: '工单编号', prop: 'Gy0_gdbh', width: '120' },
  477. { label: '印件及工序', prop: 'Gy0_yjno', width: '120' },
  478. { label: '工序名称', prop: 'Gy0_gxmc', width: '200' },
  479. { label: '联数', prop: 'Gy0_ls', width: '80' },
  480. { label: '基础损耗', prop: 'Gy0_Rate0', width: '120' },
  481. { label: '损耗率', prop: 'Gy0_Rate1', width: '120' },
  482. { label: '损耗系数', prop: '损耗系数', width: '120' },
  483. { label: '计损色数', prop: 'Gy0_ms', width: '120' },
  484. { label: '计划产量', prop: 'Gy0_计划接货数', width: '120' },
  485. { label: '计划损耗', prop: 'Gy0_计划损耗', width: '120' },
  486. { label: '上报产量', prop: 'total_cl', width: '120' },
  487. { label: '制程废', prop: 'total_fp', width: '120' },
  488. ]
  489. const tableData1 = ref([])
  490. const tableData2 = ref([])
  491. const currentRow = ref({})
  492. const gdbh = ref('')
  493. const date = ref('')
  494. const yjno = ref ('')
  495. const searchInfo = ref('')
  496. watch(currentRow, (value, oldValue, onCleanup) => {
  497. gdbh.value = value?.['Gd_gdbh']
  498. date.value = value?.['date']
  499. yjno.value = value?.['yj_Yjno']
  500. pd_lcdformData['gdbh'] = value?.['Gd_gdbh']
  501. })
  502. // 显示上方表格
  503. const handleNodeClick = async(node) => {
  504. console.log(node)
  505. if (!node.children) {
  506. const { date, code } = node
  507. const res = await getTable({ date, code, limit: 9999, page: 1 })
  508. tableData1.value = res.data.data.map((item) => ({
  509. ...item,
  510. csgd:
  511. parseFloat(item['target_rate']) - parseFloat(item['real_rate']) > 0
  512. ? '√'
  513. : '',
  514. date: date,
  515. }))
  516. console.log(tableData1.value )
  517. } else {
  518. // console.log(node.date, node.code)
  519. }
  520. }
  521. // 显示下方表格
  522. const showOrderSuperLossGy = async() => {
  523. const { Gd_gdbh: order } = currentRow.value
  524. const res = await getOrderSuperLossGy({ order })
  525. if (res.code === 0) {
  526. const { data } = res
  527. tableData2.value = data.map((item) => ({
  528. ...item,
  529. Gy0_yjno: `${item.Gy0_yjno}-${item.Gy0_gxh}`,
  530. Gy0_gxmc:
  531. item.Add_gxmc === ''
  532. ? item.Gy0_gxmc
  533. : `${item.Gy0_gxmc}〖${item.Add_gxmc}〗`,
  534. }))
  535. }
  536. }
  537. // 定位
  538. const handleSearch = () => {
  539. if (searchInfo.value) {
  540. tableData1.value = tableData1.value.filter((item) => {
  541. return item['Gd_gdbh'] === searchInfo.value ?? item
  542. })
  543. }
  544. }
  545. /* const rowClassName = ({ row, rowIndex }) => {
  546. if (row['csgd'] === '√') {
  547. return 'yellow-row'
  548. }
  549. return ''
  550. }*/
  551. const cellClassName = ({ row, column, rowIndex, columnIndex }) => {
  552. if ([7, 11, 13, 21].includes(columnIndex)) {
  553. return 'red-cell'
  554. }
  555. return ''
  556. }
  557. const printPageRef = ref()
  558. function handleGddy() {
  559. printPageRef.value.open(gdbh.value)
  560. }
  561. const pd_lcdlist = ref(false)
  562. const processList = ref([])
  563. const pd_lcdformData = reactive({})
  564. const pd_lcdProductValue = async() => {
  565. _getOrderProcessLeft_list()
  566. }
  567. const pd_lcd_treeData = ref([])
  568. const _getOrderProcessLeft_list = async() => {
  569. const order = pd_lcdformData['gdbh']
  570. console.log(order)
  571. try {
  572. // 5.1流程单查询-工单工序生产进程菜单栏
  573. const getOrderProcessLeft_list = await getOrderProcessLeft({
  574. order: order,
  575. })
  576. console.log(getOrderProcessLeft_list)
  577. pd_lcdformData['code'] = getOrderProcessLeft_list.data.Gd_info['code']
  578. pd_lcdformData['name'] = getOrderProcessLeft_list.data.Gd_info['name']
  579. pd_lcd_treeData.value = [
  580. {
  581. label: order + '-' + getOrderProcessLeft_list.data.Gd_info['name'],
  582. // label: order + '-' + getOrderProcessLeft_list.data.Gd_info['code'] + '-' + getOrderProcessLeft_list.data.Gd_info['name'],
  583. value: undefined,
  584. children: [],
  585. },
  586. ]
  587. const newData = []
  588. for (const key in getOrderProcessLeft_list.data.Gy_info) {
  589. const temp = getOrderProcessLeft_list.data.Gy_info[key]
  590. const concatenatedValue = `${temp.Gy0_yjno}-${temp.Gy0_gxh} ---> ${temp.Gy0_gxmc}`
  591. newData.push({ label: concatenatedValue, value: temp.Gy0_gxh })
  592. }
  593. pd_lcd_treeData.value[0].children = newData
  594. // 5.2流程单查询-获取工单工序生产进程右侧【进入页面默认显示第一个】
  595. const getOrderProcessRight_list = await getOrderProcessRight({
  596. order: order,
  597. gxNo: newData[0].value,
  598. })
  599. processList.value = getOrderProcessRight_list.data
  600. } catch (error) {
  601. console.error(error)
  602. }
  603. }
  604. const pd_lcd_handleNodeClick = async(node) => {
  605. if (node.value === undefined) return
  606. const order = pd_lcdformData['gdbh']
  607. // //5.2流程单查询-获取工单工序生产进程右侧
  608. const getOrderProcessRight_list = await getOrderProcessRight({
  609. order: order,
  610. gxNo: node.value,
  611. })
  612. console.log(getOrderProcessRight_list)
  613. processList.value = getOrderProcessRight_list.data
  614. }
  615. // 导出excel
  616. const exportExcel = () => {
  617. const labels = tableCols1.map((item) => item.label)
  618. const props = tableCols1.map((item) => item.prop)
  619. const data = tableData1.value.map((item) => {
  620. const row = {}
  621. props.forEach((prop, index) => {
  622. row[labels[index]] = item?.[prop]
  623. })
  624. return row
  625. })
  626. if (data[0]?.[labels[0]] === undefined) {
  627. return
  628. }
  629. exportExcelFile(data)
  630. }
  631. //关闭窗口
  632. const exitXzgdtl = (data) => {
  633. console.log(data);
  634. dialogXzgdtl.value = data;
  635. };
  636. </script>
  637. <style scoped>
  638. :deep(.plan-usage-low div) {
  639. color: red !important;
  640. }
  641. .JKWTree-container {
  642. display: flex;
  643. }
  644. .JKWTree-tree {
  645. width: 100%;
  646. background-color: #fff;
  647. /*background-color: rgba(241, 224, 224, 0.99);*/
  648. padding: 10px;
  649. margin-right: 20px;
  650. }
  651. .JKWTree-tree h3 {
  652. font-size: 15px;
  653. font-weight: 700;
  654. margin: 10px 0;
  655. }
  656. .JKWTree-content {
  657. flex: 1;
  658. }
  659. :deep(.el-table .yellow-row) {
  660. background: #ffff80;
  661. }
  662. :deep(.red-cell div) {
  663. color: #ff0000 !important;
  664. }
  665. /* 选中某行时的背景色 */
  666. :deep(.el-table__body tr.current-row) > td {
  667. background: #ff80ff !important;
  668. }
  669. </style>
  670. <style scoped>
  671. :deep(.el-table td .cell) {
  672. line-height: 20px !important;
  673. }
  674. :deep(.el-tabs__header) {
  675. margin-bottom: 0;
  676. }
  677. .search {
  678. margin-left: 0px !important;
  679. margin-right: 10px !important;
  680. }
  681. .bt {
  682. margin-left: 2px !important;
  683. padding: 3px !important;
  684. font-size: 12px;
  685. }
  686. .el-tabs__header {
  687. margin: 0px !important;
  688. }
  689. .gva-table-box {
  690. padding: 0px !important;
  691. }
  692. .mab {
  693. margin-bottom: 5px;
  694. }
  695. </style>