index.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834
  1. <template>
  2. <div>
  3. <layout>
  4. <layout-header>
  5. <!-- 按钮 -->
  6. <el-form inline>
  7. <el-form-item>
  8. <el-input
  9. v-model="searchInfo"
  10. placeholder="搜索产品编号或产品名称"
  11. clearable
  12. style="width: 180px;"
  13. />
  14. <el-button
  15. type="primary"
  16. icon="Search"
  17. class="search"
  18. @click="handleSearch"
  19. />
  20. <el-button
  21. type="primary"
  22. icon="edit"
  23. class="bt"
  24. @click="handleShowDetail"
  25. ><i class="el-icon-edit" />查改
  26. </el-button>
  27. <el-button
  28. type="primary"
  29. icon="edit"
  30. class="bt"
  31. @click="handleShowAdd"
  32. >新增
  33. </el-button>
  34. </el-form-item>
  35. </el-form>
  36. <!-- 弹出框 -->
  37. <div>
  38. <!-- 弹出框 -->
  39. <el-dialog
  40. v-model="dialogFormVisible"
  41. :before-close="closeDialog"
  42. :title="type === 'add' ? '新增' : '修改'"
  43. destroy-on-close
  44. width="800px"
  45. >
  46. <!-- <el-scrollbar height="500px"> -->
  47. <el-form
  48. id="detail-form"
  49. ref="elFormRef"
  50. :model="detailData"
  51. label-position="left"
  52. @keyup="moveFocus"
  53. >
  54. <!-- 日期 -->
  55. <el-row>
  56. <el-form-item
  57. label="日期"
  58. prop="name"
  59. >
  60. <el-input
  61. v-model="detailData.wgjs_rq"
  62. style="width: 100px;"
  63. />
  64. </el-form-item>
  65. </el-row>
  66. <!-- 标题栏 -->
  67. <el-row :gutter="10">
  68. <el-col :span="3">
  69. <span>员工编号</span>
  70. </el-col>
  71. <el-col :span="3">
  72. <span>员工姓名</span>
  73. </el-col>
  74. <el-col :span="3">
  75. <span>计时</span>
  76. </el-col>
  77. <el-col :span="12">
  78. <span>原因备注</span>
  79. </el-col>
  80. <el-col :span="3">
  81. <span>冲月定额</span>
  82. </el-col>
  83. </el-row>
  84. <!-- 员工1 -->
  85. <el-row
  86. :gutter="5"
  87. style="margin-top: 10px;"
  88. >
  89. <el-col :span="3">
  90. <el-input
  91. v-model="detailData.wgjs_bh1"
  92. :formatter="val => val.toUpperCase()"
  93. />
  94. </el-col>
  95. <el-col :span="3">
  96. <el-input
  97. v-model="detailData.name1"
  98. readonly
  99. />
  100. </el-col>
  101. <el-col :span="3">
  102. <el-input
  103. v-model="detailData.wgjs_js1"
  104. />
  105. </el-col>
  106. <el-col :span="12">
  107. <el-input
  108. v-model="detailData.wgjs_yy1"
  109. />
  110. </el-col>
  111. <el-col :span="3">
  112. <!-- <el-input
  113. v-model="detailData.wgjs_冲定额1"
  114. /> -->
  115. <el-select
  116. v-model="detailData.wgjs_冲定额1"
  117. placeholder=" "
  118. >
  119. <el-option
  120. label=""
  121. value=""
  122. />
  123. <el-option
  124. label="是"
  125. value="是"
  126. />
  127. </el-select>
  128. </el-col>
  129. </el-row>
  130. <!-- 员工2 -->
  131. <el-row
  132. :gutter="5"
  133. style="margin-top: 10px;"
  134. >
  135. <el-col :span="3">
  136. <el-input
  137. v-model="detailData.wgjs_bh2"
  138. :formatter="val => val.toUpperCase()"
  139. />
  140. </el-col>
  141. <el-col :span="3">
  142. <el-input
  143. v-model="detailData.name2"
  144. readonly
  145. />
  146. </el-col>
  147. <el-col :span="3">
  148. <el-input
  149. v-model="detailData.wgjs_js2"
  150. />
  151. </el-col>
  152. <el-col :span="12">
  153. <el-input
  154. v-model="detailData.wgjs_yy2"
  155. />
  156. </el-col>
  157. <el-col :span="3">
  158. <el-select
  159. v-model="detailData.wgjs_冲定额2"
  160. placeholder=" "
  161. >
  162. <el-option
  163. label=""
  164. value=""
  165. />
  166. <el-option
  167. label="是"
  168. value="是"
  169. />
  170. </el-select>
  171. </el-col>
  172. </el-row>
  173. <!-- 员工3 -->
  174. <el-row
  175. :gutter="5"
  176. style="margin-top: 10px;"
  177. >
  178. <el-col :span="3">
  179. <el-input
  180. v-model="detailData.wgjs_bh3"
  181. :formatter="val => val.toUpperCase()"
  182. />
  183. </el-col>
  184. <el-col :span="3">
  185. <el-input
  186. v-model="detailData.name3"
  187. readonly
  188. />
  189. </el-col>
  190. <el-col :span="3">
  191. <el-input
  192. v-model="detailData.wgjs_js3"
  193. />
  194. </el-col>
  195. <el-col :span="12">
  196. <el-input
  197. v-model="detailData.wgjs_yy3"
  198. />
  199. </el-col>
  200. <el-col :span="3">
  201. <el-select
  202. v-model="detailData.wgjs_冲定额3"
  203. placeholder=" "
  204. >
  205. <el-option
  206. label=""
  207. value=""
  208. />
  209. <el-option
  210. label="是"
  211. value="是"
  212. />
  213. </el-select>
  214. </el-col>
  215. </el-row>
  216. <!-- 员工4 -->
  217. <el-row
  218. :gutter="5"
  219. style="margin-top: 10px;"
  220. >
  221. <el-col :span="3">
  222. <el-input
  223. v-model="detailData.wgjs_bh4"
  224. :formatter="val => val.toUpperCase()"
  225. />
  226. </el-col>
  227. <el-col :span="3">
  228. <el-input
  229. v-model="detailData.name4"
  230. readonly
  231. />
  232. </el-col>
  233. <el-col :span="3">
  234. <el-input
  235. v-model="detailData.wgjs_js4"
  236. />
  237. </el-col>
  238. <el-col :span="12">
  239. <el-input
  240. v-model="detailData.wgjs_yy4"
  241. />
  242. </el-col>
  243. <el-col :span="3">
  244. <el-select
  245. v-model="detailData.wgjs_冲定额4"
  246. placeholder=" "
  247. >
  248. <el-option
  249. label=""
  250. value=""
  251. />
  252. <el-option
  253. label="是"
  254. value="是"
  255. />
  256. </el-select>
  257. </el-col>
  258. </el-row>
  259. <!-- 员工5 -->
  260. <el-row
  261. :gutter="5"
  262. style="margin-top: 10px;"
  263. >
  264. <el-col :span="3">
  265. <el-input
  266. v-model="detailData.wgjs_bh5"
  267. :formatter="val => val.toUpperCase()"
  268. />
  269. </el-col>
  270. <el-col :span="3">
  271. <el-input
  272. v-model="detailData.name5"
  273. readonly
  274. />
  275. </el-col>
  276. <el-col :span="3">
  277. <el-input
  278. v-model="detailData.wgjs_js5"
  279. />
  280. </el-col>
  281. <el-col :span="12">
  282. <el-input
  283. v-model="detailData.wgjs_yy5"
  284. />
  285. </el-col>
  286. <el-col :span="3">
  287. <el-select
  288. v-model="detailData.wgjs_冲定额5"
  289. placeholder=" "
  290. >
  291. <el-option
  292. label=""
  293. value=""
  294. />
  295. <el-option
  296. label="是"
  297. value="是"
  298. />
  299. </el-select>
  300. </el-col>
  301. </el-row>
  302. <!-- 员工6 -->
  303. <el-row
  304. :gutter="5"
  305. style="margin-top: 10px;"
  306. >
  307. <el-col :span="3">
  308. <el-input
  309. v-model="detailData.wgjs_bh6"
  310. :formatter="val => val.toUpperCase()"
  311. />
  312. </el-col>
  313. <el-col :span="3">
  314. <el-input
  315. v-model="detailData.name6"
  316. readonly
  317. />
  318. </el-col>
  319. <el-col :span="3">
  320. <el-input
  321. v-model="detailData.wgjs_js6"
  322. />
  323. </el-col>
  324. <el-col :span="12">
  325. <el-input
  326. v-model="detailData.wgjs_yy6"
  327. />
  328. </el-col>
  329. <el-col :span="3">
  330. <el-select
  331. v-model="detailData.wgjs_冲定额6"
  332. placeholder=" "
  333. >
  334. <el-option
  335. label=""
  336. value=""
  337. />
  338. <el-option
  339. label="是"
  340. value="是"
  341. />
  342. </el-select>
  343. </el-col>
  344. </el-row>
  345. </el-form>
  346. <template #footer>
  347. <div class="dialog-footer">
  348. <el-button @click="closeDialog">取 消</el-button>
  349. <el-button
  350. type="primary"
  351. @click="enterDialog"
  352. >确 定</el-button>
  353. </div>
  354. </template>
  355. </el-dialog>
  356. </div>
  357. </layout-header>
  358. <layout>
  359. <!-- 左侧树侧形结构-->
  360. <layout-sider
  361. :resize-directions="['right']"
  362. :width="220"
  363. style="margin-right: 10px;"
  364. >
  365. <div
  366. class="JKWTree-tree"
  367. style="height: 70vh;"
  368. >
  369. <h3>计件工计时单维护</h3>
  370. <el-tree
  371. :data="treeData"
  372. highlight-current="true"
  373. @node-click="handleNodeClick"
  374. />
  375. </div>
  376. </layout-sider>
  377. <layout-content>
  378. <!-- 数据展示 -->
  379. <el-table
  380. ref="table"
  381. style="width: 100%"
  382. tooltip-effect="dark"
  383. :data="tableData"
  384. row-key="ID"
  385. highlight-current-row
  386. border
  387. show-overflow-tooltip="true"
  388. :row-style="{ height: '20px' }"
  389. :cell-style="{ padding: '0px' }"
  390. :header-row-style="{ height: '20px' }"
  391. :header-cell-style="{ padding: '0px' }"
  392. @selection-change="handleSelectionChange"
  393. @row-dblclick="handleShowDetail"
  394. @row-click="Click"
  395. @current-change="(row, oldRow) => { currentRow = row}"
  396. >
  397. <el-table-column
  398. type="selection"
  399. width="55"
  400. />
  401. <!-- 循环渲染列 -->
  402. <el-table-column
  403. v-for=" column in tableColumns "
  404. :key="column.prop"
  405. :prop="column.prop"
  406. :label="column.label"
  407. :width="column.width"
  408. />
  409. </el-table>
  410. <!-- 分页 -->
  411. <div class="gva-pagination">
  412. <el-pagination
  413. v-model:current-page="page"
  414. v-model:page-size="limit"
  415. layout="total, sizes, prev, pager, next, jumper"
  416. :page-sizes="[10, 30, 50, 100]"
  417. :total="total"
  418. @current-change="handleCurrentChange"
  419. @size-change="handleSizeChange"
  420. />
  421. </div>
  422. </layout-content>
  423. </layout>
  424. </layout>
  425. </div>
  426. </template>
  427. <script setup>
  428. // 全量引入格式化工具 请按需保留
  429. import { Layout, LayoutContent, LayoutHeader, LayoutSider } from '@arco-design/web-vue'
  430. import { ElMessage, dayjs } from 'element-plus'
  431. import { ref, reactive } from 'vue'
  432. import { getSide, getTable, getDetail, updateData, getLocate, createData, getYg } from '@/api/mes_api_gty/timesheet'
  433. defineOptions({
  434. name: '08Timesheet'
  435. })
  436. // 侧边栏数据请求
  437. const treeData = reactive([])
  438. const getSideData = async() => {
  439. const response = await getSide()
  440. if (response.code === 0) {
  441. const transformedData = response.data.map(item => ({
  442. label: item.date,
  443. params: {
  444. date: item.date.substring(0, 4) + '-' + item.date.substring(4),
  445. },
  446. }))
  447. treeData.splice(0, treeData.length, ...transformedData)
  448. }
  449. }
  450. getSideData()
  451. const elFormRef = ref()
  452. // const elSearchFormRef = ref()
  453. // ============== 表格页面 ==============
  454. const tableColumns = [
  455. { prop: 'wgjs_rq', label: '日期', width: 100 },
  456. { prop: 'wgjs_bh1', label: '员工编号1', width: 100 },
  457. { prop: 'name1', label: '姓名1', width: 100 },
  458. { prop: 'department', label: '所在部门', width: 100 },
  459. { prop: 'wgjs_js1', label: '计时1', width: 100 },
  460. { prop: 'wgjs_yy1', label: '原因1', width: 100 },
  461. { prop: 'wgjs_bh2', label: '员工编号2', width: 100 },
  462. { prop: 'name2', label: '姓名2', width: 100 },
  463. { prop: 'wgjs_js2', label: '计时2', width: 100 },
  464. { prop: 'wgjs_yy2', label: '原因2', width: 100 },
  465. { prop: 'wgjs_bh3', label: '员工编号3', width: 100 },
  466. { prop: 'name3', label: '姓名3', width: 100 },
  467. { prop: 'wgjs_js3', label: '计时3', width: 100 },
  468. { prop: 'wgjs_yy3', label: '原因3', width: 100 },
  469. { prop: 'wgjs_bh4', label: '员工编号4', width: 100 },
  470. { prop: 'name4', label: '姓名4', width: 100 },
  471. { prop: 'wgjs_js4', label: '计时4', width: 100 },
  472. { prop: 'wgjs_yy4', label: '原因4', width: 100 },
  473. { prop: 'wgjs_bh5', label: '员工编号5', width: 100 },
  474. { prop: 'name5', label: '姓名5', width: 100 },
  475. { prop: 'wgjs_js5', label: '计时5', width: 100 },
  476. { prop: 'wgjs_yy5', label: '原因5', width: 100 },
  477. { prop: 'wgjs_bh6', label: '员工编号6', width: 100 },
  478. { prop: 'name6', label: '姓名6', width: 100 },
  479. { prop: 'wgjs_js6', label: '计时6', width: 100 },
  480. { prop: 'wgjs_yy6', label: '原因6', width: 100 },
  481. ]
  482. const table = ref(null)
  483. const tableData = reactive([])
  484. const page = ref(1)
  485. const total = ref(0)
  486. const limit = ref(10)
  487. const searchInfo = ref('')
  488. const params = {
  489. date: '',
  490. search: '',
  491. type: '',
  492. }
  493. const getTableData = async(params) => {
  494. const response = await getTable(params)
  495. if (response.code === 0) {
  496. total.value = response.data.total
  497. tableData.splice(0, tableData.length, ...response.data.rows)
  498. table.value?.setCurrentRow(tableData[0])
  499. }
  500. }
  501. // 搜索
  502. const getLocateData = async(params) => {
  503. const res = await getLocate(params)
  504. if (res.code === 0) {
  505. total.value = res.data.total
  506. tableData.splice(0, tableData.length, ...res.data.rows)
  507. table.value?.setCurrentRow(tableData[0])
  508. }
  509. }
  510. // 分页设置
  511. const handleSizeChange = () => {
  512. switch (params.type) {
  513. case 'getTableData':
  514. getTableData({ date: params.date, page: page.value.toString(), limit: limit.value.toString() })
  515. break
  516. case 'getLocateData':
  517. getLocateData({ date: params.date.replace('-', ''),
  518. search: params.search,
  519. page: page.value.toString(),
  520. limit: limit.value.toString() })
  521. break
  522. default:
  523. break
  524. }
  525. }
  526. // 页面跳转
  527. const handleCurrentChange = () => {
  528. switch (params.type) {
  529. case 'getTableData':
  530. getTableData({ date: params.date, page: page.value.toString(), limit: limit.value.toString() })
  531. break
  532. case 'getLocateData':
  533. getLocateData({ date: params.date.replace('-', ''),
  534. search: params.search,
  535. page: page.value.toString(),
  536. limit: limit.value.toString() })
  537. break
  538. default:
  539. break
  540. }
  541. }
  542. const handleNodeClick = (node, check) => {
  543. if (node.params) {
  544. params.date = node.params.date
  545. params.type = 'getTableData'
  546. page.value = 1
  547. handleCurrentChange()
  548. }
  549. }
  550. // 搜索
  551. function handleSearch() {
  552. params.search = searchInfo.value
  553. params.type = 'getLocateData'
  554. page.value = 1
  555. handleCurrentChange()
  556. }
  557. // ============== 详情页面 ==============
  558. const detailData = reactive({})
  559. const currentRow = ref()
  560. // 行为控制标记(弹窗内部需要增还是改)
  561. const type = ref('')
  562. // 弹窗控制标记
  563. const dialogFormVisible = ref(false)
  564. // 查改
  565. const handleShowDetail = async() => {
  566. type.value = 'update'
  567. const { wgjs_rq, wgjs_bh1 } = currentRow.value
  568. const res = await getDetail({ wgjs_rq, wgjs_bh1 })
  569. if (res.code === 0) {
  570. Object.assign(detailData, res.data)
  571. // dialogFormVisible.value = true
  572. showDialog()
  573. }
  574. }
  575. // 新增数据
  576. const handleShowAdd = async() => {
  577. const { wgjs_rq, wgjs_bh1 } = currentRow.value
  578. const res = await getDetail({ wgjs_rq, wgjs_bh1 })
  579. if (res.code === 0) {
  580. type.value = 'add'
  581. Object.assign(detailData, res.data)
  582. detailData['wgjs_rq'] = dayjs().format('YYYY-MM-DD')
  583. // dialogFormVisible.value = true
  584. showDialog()
  585. }
  586. }
  587. // 更新数据
  588. const enterDialog = async() => {
  589. if (type.value === 'update') {
  590. updateDetailData()
  591. } else if (type.value === 'add') {
  592. addDetailData()
  593. }
  594. }
  595. // 新增
  596. const addDetailData = async() => {
  597. const restoredData = {
  598. wgjs_rq: detailData.wgjs_rq,
  599. wgjs_bh1: detailData.wgjs_bh1,
  600. wgjs_js1: detailData.wgjs_js1,
  601. wgjs_yy1: detailData.wgjs_yy1,
  602. wgjs_冲定额1: detailData.wgjs_冲定额1,
  603. wgjs_bh2: detailData.wgjs_bh2,
  604. wgjs_js2: detailData.wgjs_js2,
  605. wgjs_yy2: detailData.wgjs_yy2,
  606. wgjs_冲定额2: detailData.wgjs_冲定额2,
  607. wgjs_bh3: detailData.wgjs_bh3,
  608. wgjs_js3: detailData.wgjs_js3,
  609. wgjs_yy3: detailData.wgjs_yy3,
  610. wgjs_冲定额3: detailData.wgjs_冲定额3,
  611. wgjs_bh4: detailData.wgjs_bh4,
  612. wgjs_js4: detailData.wgjs_js4,
  613. wgjs_yy4: detailData.wgjs_yy4,
  614. wgjs_冲定额4: detailData.wgjs_冲定额4,
  615. wgjs_bh5: detailData.wgjs_bh5,
  616. wgjs_js5: detailData.wgjs_js5,
  617. wgjs_yy5: detailData.wgjs_yy5,
  618. wgjs_冲定额5: detailData.wgjs_冲定额5,
  619. wgjs_bh6: detailData.wgjs_bh6,
  620. wgjs_js6: detailData.wgjs_js6,
  621. wgjs_yy6: detailData.wgjs_yy6,
  622. wgjs_冲定额6: detailData.wgjs_冲定额6,
  623. }
  624. console.log(restoredData)
  625. const res = await createData(restoredData)
  626. console.log(res)
  627. if (res.code === 0) {
  628. ElMessage({
  629. type: 'success',
  630. message: '新增成功',
  631. })
  632. dialogFormVisible.value = false
  633. }
  634. }
  635. // 修改
  636. const updateDetailData = async() => {
  637. const obj = detailData
  638. for (let i = 1; i <= 6; i++) {
  639. delete obj[`name${i}`]
  640. }
  641. const res = await updateData(obj)
  642. if (res.code === 0) {
  643. ElMessage({
  644. type: 'success',
  645. message: '更新成功'
  646. })
  647. params.type = 'getTableData'
  648. // page.value = 1
  649. handleCurrentChange()
  650. // if(response.code==0){
  651. // ElMessage({
  652. // type: 'success',
  653. // message: '更新成功',
  654. // })
  655. // }
  656. dialogFormVisible.value = false
  657. }
  658. }
  659. // 开启弹窗
  660. const showDialog = () => {
  661. dialogFormVisible.value = true
  662. // 在 setTimeout 中获取元素,确保在 DOM 渲染完毕后执行
  663. setTimeout(() => {
  664. formElements = document.getElementById('detail-form').elements
  665. formElements[0].focus()
  666. }, 0)
  667. }
  668. // 关闭弹窗
  669. const closeDialog = () => {
  670. dialogFormVisible.value = false
  671. }
  672. let formElements
  673. const moveFocus = async(event) => {
  674. console.log(event)
  675. const index = Array.from(formElements).indexOf(event.target)
  676. const key = event.key
  677. event.preventDefault()
  678. // 切换焦点
  679. const focusNext = (step) => {
  680. const nextIndex = (index + step + formElements.length) % formElements.length
  681. formElements[nextIndex].focus()
  682. }
  683. switch (index) {
  684. case 1:
  685. case 6:
  686. case 11:
  687. case 16:
  688. case 21:
  689. case 26:
  690. if (key === 'ArrowDown') {
  691. formElements[index + 1].focus()
  692. } else if (key === 'ArrowUp') {
  693. formElements[index - 1].focus()
  694. } else if (key === 'Enter') {
  695. formElements[index + 1].focus()
  696. const sczl_bh = formElements[index]?.value
  697. if (sczl_bh === '') {
  698. detailData[`name${(index - 1) / 5 + 1}`] = ''
  699. break
  700. }
  701. const res = await getYg({ sczl_bh })
  702. if (res.code === 0) {
  703. const { data: { ygxm }} = res
  704. detailData[`name${(index - 1) / 5 + 1}`] = ygxm
  705. }
  706. }
  707. break
  708. default:
  709. if (key === 'ArrowDown') {
  710. focusNext(1)
  711. } else if (key === 'ArrowUp') {
  712. focusNext(-1)
  713. } else if (key === 'Enter') {
  714. focusNext(1)
  715. }
  716. break
  717. }
  718. }
  719. </script>
  720. <style scoped>
  721. .JKWTree-container {
  722. display: flex;
  723. }
  724. .JKWTree-tree {
  725. width: 100%;
  726. background-color: #fff;
  727. padding: 10px;
  728. margin-right: 20px;
  729. }
  730. .JKWTree-tree h3 {
  731. font-size: 15px;
  732. font-weight: 700;
  733. margin: 10px 0;
  734. }
  735. .JKWTree-content {
  736. flex: 1;
  737. }
  738. /* 选中某行时的背景色 */
  739. :deep(.el-table__body tr.current-row) > td {
  740. background: #ff80ff !important;
  741. }
  742. </style>
  743. <style scoped>
  744. :deep(.el-table td .cell) {
  745. line-height: 25px !important;
  746. }
  747. :deep(.el-tabs__header) {
  748. margin-bottom: 0;
  749. }
  750. .search {
  751. margin-left: 0px !important;
  752. margin-right: 10px !important;
  753. }
  754. .bt {
  755. margin-left: 2px !important;
  756. padding: 3px !important;
  757. font-size: 12px;
  758. }
  759. .el-tabs__header {
  760. margin: 0px !important;
  761. }
  762. .gva-table-box {
  763. padding: 0px !important;
  764. }
  765. .mab {
  766. margin-bottom: 5px;
  767. }
  768. </style>