index.vue 21 KB

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