index.vue 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838
  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. sortable
  409. />
  410. </el-table>
  411. <!-- 分页 -->
  412. <div class="gva-pagination">
  413. <el-pagination
  414. v-model:current-page="page"
  415. v-model:page-size="limit"
  416. layout="total, sizes, prev, pager, next, jumper"
  417. :page-sizes="[10, 30, 50, 100]"
  418. :total="total"
  419. @current-change="handleCurrentChange"
  420. @size-change="handleSizeChange"
  421. />
  422. </div>
  423. </layout-content>
  424. </layout>
  425. </layout>
  426. </div>
  427. </template>
  428. <script setup>
  429. // 全量引入格式化工具 请按需保留
  430. import { Layout, LayoutContent, LayoutHeader, LayoutSider } from '@arco-design/web-vue'
  431. import { ElMessage, dayjs } from 'element-plus'
  432. import { ref, reactive } from 'vue'
  433. import { getSide, getTable, getDetail, updateData, getLocate, createData, getYg } from '@/api/mes_api_gty/timesheet'
  434. import { useUserStore } from '@/pinia/modules/user'
  435. const userStore = useUserStore()
  436. const sys_id='['+userStore.userInfo.userName+'/'+userStore.userInfo.nickName+']'
  437. defineOptions({
  438. name: '08Timesheet'
  439. })
  440. // 侧边栏数据请求
  441. const treeData = reactive([])
  442. const getSideData = async() => {
  443. const response = await getSide()
  444. if (response.code === 0) {
  445. const transformedData = response.data.map(item => ({
  446. label: item.date,
  447. params: {
  448. date: item.date.substring(0, 4) + '-' + item.date.substring(4),
  449. },
  450. }))
  451. treeData.splice(0, treeData.length, ...transformedData)
  452. }
  453. }
  454. getSideData()
  455. const elFormRef = ref()
  456. // const elSearchFormRef = ref()
  457. // ============== 表格页面 ==============
  458. const tableColumns = [
  459. { prop: 'wgjs_rq', label: '日期', width: 100 },
  460. { prop: 'wgjs_bh1', label: '员工编号1', width: 100 },
  461. { prop: 'name1', label: '姓名1', width: 100 },
  462. { prop: 'department', label: '所在部门', width: 100 },
  463. { prop: 'wgjs_js1', label: '计时1', width: 100 },
  464. { prop: 'wgjs_yy1', label: '原因1', width: 100 },
  465. { prop: 'wgjs_bh2', label: '员工编号2', width: 100 },
  466. { prop: 'name2', label: '姓名2', width: 100 },
  467. { prop: 'wgjs_js2', label: '计时2', width: 100 },
  468. { prop: 'wgjs_yy2', label: '原因2', width: 100 },
  469. { prop: 'wgjs_bh3', label: '员工编号3', width: 100 },
  470. { prop: 'name3', label: '姓名3', width: 100 },
  471. { prop: 'wgjs_js3', label: '计时3', width: 100 },
  472. { prop: 'wgjs_yy3', label: '原因3', width: 100 },
  473. { prop: 'wgjs_bh4', label: '员工编号4', width: 100 },
  474. { prop: 'name4', label: '姓名4', width: 100 },
  475. { prop: 'wgjs_js4', label: '计时4', width: 100 },
  476. { prop: 'wgjs_yy4', label: '原因4', width: 100 },
  477. { prop: 'wgjs_bh5', label: '员工编号5', width: 100 },
  478. { prop: 'name5', label: '姓名5', width: 100 },
  479. { prop: 'wgjs_js5', label: '计时5', width: 100 },
  480. { prop: 'wgjs_yy5', label: '原因5', width: 100 },
  481. { prop: 'wgjs_bh6', label: '员工编号6', width: 100 },
  482. { prop: 'name6', label: '姓名6', width: 100 },
  483. { prop: 'wgjs_js6', label: '计时6', width: 100 },
  484. { prop: 'wgjs_yy6', label: '原因6', width: 100 },
  485. ]
  486. const table = ref(null)
  487. const tableData = reactive([])
  488. const page = ref(1)
  489. const total = ref(0)
  490. const limit = ref(10)
  491. const searchInfo = ref('')
  492. const params = {
  493. date: '',
  494. search: '',
  495. type: '',
  496. }
  497. const getTableData = async(params) => {
  498. const response = await getTable(params)
  499. if (response.code === 0) {
  500. total.value = response.data.total
  501. tableData.splice(0, tableData.length, ...response.data.rows)
  502. table.value?.setCurrentRow(tableData[0])
  503. }
  504. }
  505. // 搜索
  506. const getLocateData = async(params) => {
  507. const res = await getLocate(params)
  508. if (res.code === 0) {
  509. total.value = res.data.total
  510. tableData.splice(0, tableData.length, ...res.data.rows)
  511. table.value?.setCurrentRow(tableData[0])
  512. }
  513. }
  514. // 分页设置
  515. const handleSizeChange = () => {
  516. switch (params.type) {
  517. case 'getTableData':
  518. getTableData({ date: params.date, page: page.value.toString(), limit: limit.value.toString() })
  519. break
  520. case 'getLocateData':
  521. getLocateData({ date: params.date.replace('-', ''),
  522. search: params.search,
  523. page: page.value.toString(),
  524. limit: limit.value.toString() })
  525. break
  526. default:
  527. break
  528. }
  529. }
  530. // 页面跳转
  531. const handleCurrentChange = () => {
  532. switch (params.type) {
  533. case 'getTableData':
  534. getTableData({ date: params.date, page: page.value.toString(), limit: limit.value.toString() })
  535. break
  536. case 'getLocateData':
  537. getLocateData({ date: params.date.replace('-', ''),
  538. search: params.search,
  539. page: page.value.toString(),
  540. limit: limit.value.toString() })
  541. break
  542. default:
  543. break
  544. }
  545. }
  546. const handleNodeClick = (node, check) => {
  547. if (node.params) {
  548. params.date = node.params.date
  549. params.type = 'getTableData'
  550. page.value = 1
  551. handleCurrentChange()
  552. }
  553. }
  554. // 搜索
  555. function handleSearch() {
  556. params.search = searchInfo.value
  557. params.type = 'getLocateData'
  558. page.value = 1
  559. handleCurrentChange()
  560. }
  561. // ============== 详情页面 ==============
  562. const detailData = reactive({})
  563. const currentRow = ref()
  564. // 行为控制标记(弹窗内部需要增还是改)
  565. const type = ref('')
  566. // 弹窗控制标记
  567. const dialogFormVisible = ref(false)
  568. // 查改
  569. const handleShowDetail = async() => {
  570. type.value = 'update'
  571. const { wgjs_rq, wgjs_bh1 } = currentRow.value
  572. const res = await getDetail({ wgjs_rq, wgjs_bh1 })
  573. if (res.code === 0) {
  574. Object.assign(detailData, res.data)
  575. // dialogFormVisible.value = true
  576. showDialog()
  577. }
  578. }
  579. // 新增数据
  580. const handleShowAdd = async() => {
  581. const { wgjs_rq, wgjs_bh1 } = currentRow.value
  582. const res = await getDetail({ wgjs_rq, wgjs_bh1 })
  583. if (res.code === 0) {
  584. type.value = 'add'
  585. Object.assign(detailData, res.data)
  586. detailData['wgjs_rq'] = dayjs().format('YYYY-MM-DD')
  587. // dialogFormVisible.value = true
  588. showDialog()
  589. }
  590. }
  591. // 更新数据
  592. const enterDialog = async() => {
  593. if (type.value === 'update') {
  594. updateDetailData()
  595. } else if (type.value === 'add') {
  596. addDetailData()
  597. }
  598. }
  599. // 新增
  600. const addDetailData = async() => {
  601. const restoredData = {
  602. wgjs_rq: detailData.wgjs_rq,
  603. wgjs_bh1: detailData.wgjs_bh1,
  604. wgjs_js1: detailData.wgjs_js1,
  605. wgjs_yy1: detailData.wgjs_yy1,
  606. wgjs_冲定额1: detailData.wgjs_冲定额1,
  607. wgjs_bh2: detailData.wgjs_bh2,
  608. wgjs_js2: detailData.wgjs_js2,
  609. wgjs_yy2: detailData.wgjs_yy2,
  610. wgjs_冲定额2: detailData.wgjs_冲定额2,
  611. wgjs_bh3: detailData.wgjs_bh3,
  612. wgjs_js3: detailData.wgjs_js3,
  613. wgjs_yy3: detailData.wgjs_yy3,
  614. wgjs_冲定额3: detailData.wgjs_冲定额3,
  615. wgjs_bh4: detailData.wgjs_bh4,
  616. wgjs_js4: detailData.wgjs_js4,
  617. wgjs_yy4: detailData.wgjs_yy4,
  618. wgjs_冲定额4: detailData.wgjs_冲定额4,
  619. wgjs_bh5: detailData.wgjs_bh5,
  620. wgjs_js5: detailData.wgjs_js5,
  621. wgjs_yy5: detailData.wgjs_yy5,
  622. wgjs_冲定额5: detailData.wgjs_冲定额5,
  623. wgjs_bh6: detailData.wgjs_bh6,
  624. wgjs_js6: detailData.wgjs_js6,
  625. wgjs_yy6: detailData.wgjs_yy6,
  626. wgjs_冲定额6: detailData.wgjs_冲定额6,
  627. }
  628. console.log(restoredData)
  629. const res = await createData(restoredData)
  630. console.log(res)
  631. if (res.code === 0) {
  632. ElMessage({
  633. type: 'success',
  634. message: '新增成功',
  635. })
  636. dialogFormVisible.value = false
  637. }
  638. }
  639. // 修改
  640. const updateDetailData = async() => {
  641. const obj = detailData
  642. for (let i = 1; i <= 6; i++) {
  643. delete obj[`name${i}`]
  644. }
  645. const res = await updateData(obj)
  646. if (res.code === 0) {
  647. ElMessage({
  648. type: 'success',
  649. message: '更新成功'
  650. })
  651. params.type = 'getTableData'
  652. // page.value = 1
  653. handleCurrentChange()
  654. // if(response.code==0){
  655. // ElMessage({
  656. // type: 'success',
  657. // message: '更新成功',
  658. // })
  659. // }
  660. dialogFormVisible.value = false
  661. }
  662. }
  663. // 开启弹窗
  664. const showDialog = () => {
  665. dialogFormVisible.value = true
  666. // 在 setTimeout 中获取元素,确保在 DOM 渲染完毕后执行
  667. setTimeout(() => {
  668. formElements = document.getElementById('detail-form').elements
  669. formElements[0].focus()
  670. }, 0)
  671. }
  672. // 关闭弹窗
  673. const closeDialog = () => {
  674. dialogFormVisible.value = false
  675. }
  676. let formElements
  677. const moveFocus = async(event) => {
  678. console.log(event)
  679. const index = Array.from(formElements).indexOf(event.target)
  680. const key = event.key
  681. event.preventDefault()
  682. // 切换焦点
  683. const focusNext = (step) => {
  684. const nextIndex = (index + step + formElements.length) % formElements.length
  685. formElements[nextIndex].focus()
  686. formElements[nextIndex].select()
  687. }
  688. switch (index) {
  689. case 1:
  690. case 6:
  691. case 11:
  692. case 16:
  693. case 21:
  694. case 26:
  695. if (key === 'ArrowDown') {
  696. formElements[index + 1].focus()
  697. } else if (key === 'ArrowUp') {
  698. formElements[index - 1].focus()
  699. } else if (key === 'Enter') {
  700. formElements[index + 1].focus()
  701. const sczl_bh = formElements[index]?.value
  702. if (sczl_bh === '') {
  703. detailData[`name${(index - 1) / 5 + 1}`] = ''
  704. break
  705. }
  706. const res = await getYg({ sczl_bh })
  707. if (res.code === 0) {
  708. const { data: { ygxm }} = res
  709. detailData[`name${(index - 1) / 5 + 1}`] = ygxm
  710. }
  711. }
  712. break
  713. default:
  714. if (key === 'ArrowDown') {
  715. focusNext(1)
  716. } else if (key === 'ArrowUp') {
  717. focusNext(-1)
  718. } else if (key === 'Enter') {
  719. focusNext(1)
  720. }
  721. break
  722. }
  723. }
  724. </script>
  725. <style scoped>
  726. .JKWTree-container {
  727. display: flex;
  728. }
  729. .JKWTree-tree {
  730. width: 100%;
  731. background-color: #fff;
  732. padding: 10px;
  733. margin-right: 20px;
  734. }
  735. .JKWTree-tree h3 {
  736. font-size: 15px;
  737. font-weight: 700;
  738. margin: 10px 0;
  739. }
  740. .JKWTree-content {
  741. flex: 1;
  742. }
  743. /* 选中某行时的背景色 */
  744. :deep(.el-table__body tr.current-row) > td {
  745. background: #ff80ff !important;
  746. }
  747. </style>
  748. <style scoped>
  749. :deep(.el-table td .cell) {
  750. line-height: 25px !important;
  751. }
  752. :deep(.el-tabs__header) {
  753. margin-bottom: 0;
  754. }
  755. .search {
  756. margin-left: 0px !important;
  757. margin-right: 10px !important;
  758. }
  759. .bt {
  760. margin-left: 2px !important;
  761. padding: 3px !important;
  762. font-size: 12px;
  763. }
  764. .el-tabs__header {
  765. margin: 0px !important;
  766. }
  767. .gva-table-box {
  768. padding: 0px !important;
  769. }
  770. .mab {
  771. margin-bottom: 5px;
  772. }
  773. </style>