index.vue 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906
  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-button
  35. type="primary"
  36. icon="delete"
  37. class="bt"
  38. @click="handleDelete"
  39. >删除
  40. </el-button>
  41. </el-form-item>
  42. </el-form>
  43. <!-- 弹出框 -->
  44. <div>
  45. <el-dialog
  46. v-model="dialogFormVisible"
  47. :title="type"
  48. destroy-on-close
  49. width="1200px"
  50. >
  51. <el-form
  52. id="detail-form"
  53. :model="detailData"
  54. inline
  55. label-position="left"
  56. @keyup="moveFocus"
  57. >
  58. <el-form-item
  59. label="日期"
  60. >
  61. <el-input
  62. v-model="detailData.sczl_rq"
  63. style="width: 120px;"
  64. />
  65. </el-form-item>
  66. <el-form-item
  67. label="员工编号"
  68. >
  69. <el-input
  70. v-model="detailData.sczl_bh"
  71. style="width: 100px;"
  72. />
  73. <el-input
  74. v-model="detailData.name"
  75. style="width: 100px; padding-left: 5px;"
  76. readonly
  77. />
  78. </el-form-item>
  79. <el-form-item label="组别">
  80. <el-select
  81. v-model="detailData.sczl_bzdh"
  82. placeholder=" "
  83. style="width: 80px"
  84. >
  85. <el-option
  86. label="A班"
  87. value="A班"
  88. />
  89. <el-option
  90. label="B班"
  91. value="B班"
  92. />
  93. </el-select></el-form-item>
  94. <br>
  95. <el-form-item
  96. label="计时时数"
  97. style="padding-left: 195px;"
  98. >
  99. <el-input
  100. v-model="detailData.sczl_jsss"
  101. style="width: 100px;"
  102. />
  103. </el-form-item>
  104. <el-form-item label="冲月定额">
  105. <el-select
  106. v-model="detailData.sczl_冲定额"
  107. placeholder=" "
  108. style="width: 100px"
  109. >
  110. <el-option
  111. label=""
  112. value=""
  113. />
  114. <el-option
  115. label="是"
  116. value="是"
  117. />
  118. </el-select>
  119. </el-form-item>
  120. <el-table
  121. :data="detailData.table"
  122. border
  123. tooltip-effect="dark"
  124. :row-style="{ height: '20px' }"
  125. :cell-style="{ padding: '0px' }"
  126. :header-row-style="{ height: '20px' }"
  127. :header-cell-style="{ padding: '0px' }"
  128. >
  129. <el-table-column
  130. label="工单编号"
  131. width="100"
  132. >
  133. <template #default="{ row, $index }">
  134. <el-input
  135. v-model="row.sczl_gdbh"
  136. @keyup.enter="handleEnter($index, row)"
  137. />
  138. </template>
  139. </el-table-column>
  140. <el-table-column
  141. label="印件工序"
  142. width="100"
  143. >
  144. <template #default="{ row }">
  145. <el-input
  146. v-model="row.sczl_yjGx"
  147. readonly
  148. />
  149. </template>
  150. </el-table-column>
  151. <el-table-column
  152. label="工序名称"
  153. width="100"
  154. >
  155. <template #default="{ row }">
  156. <el-input
  157. v-model="row.sczl_gxmc"
  158. readonly
  159. />
  160. </template>
  161. </el-table-column>
  162. <el-table-column label="印件名称">
  163. <template #default="{ row }">
  164. <el-input
  165. v-model="row.Gd_cpmc"
  166. readonly
  167. />
  168. </template>
  169. </el-table-column>
  170. <el-table-column
  171. label="包装产量"
  172. width="100"
  173. >
  174. <template #default="{ row }">
  175. <el-input v-model="row.sczl_cl" />
  176. </template>
  177. </el-table-column>
  178. <el-table-column
  179. label="返工产量"
  180. width="100"
  181. >
  182. <template #default="{ row }">
  183. <el-input v-model="row.sczl_返工产量" />
  184. </template>
  185. </el-table-column>
  186. <el-table-column
  187. label="每箱数量"
  188. width="100"
  189. >
  190. <template #default="{ row }">
  191. <el-input v-model="row.sczl_PgCl" />
  192. </template>
  193. </el-table-column>
  194. <el-table-column
  195. label="计产系数"
  196. width="100"
  197. >
  198. <template #default="{ row }">
  199. <el-input v-model="row.sczl_计产系数" />
  200. </template>
  201. </el-table-column>
  202. <el-table-column
  203. label="来源"
  204. width="100"
  205. >
  206. <template #default="{ row }">
  207. <el-input v-model="row.sczl_Jtbh1" />
  208. </template>
  209. </el-table-column>
  210. <el-table-column
  211. label="定额代号"
  212. width="100"
  213. >
  214. <template #default="{ row }">
  215. <el-input
  216. v-model="row.sczl_dedh"
  217. @keyup.enter.native="getDedhsubmit"
  218. />
  219. </template>
  220. </el-table-column>
  221. </el-table>
  222. <el-form-item
  223. label="其他备注"
  224. style="margin-top: 10px;"
  225. >
  226. <el-input v-model="detailData.sczl_desc" />
  227. </el-form-item>
  228. </el-form>
  229. <template #footer>
  230. <div class="dialog-footer">
  231. <el-button @click="dialogFormVisible = false">取 消</el-button>
  232. <el-button
  233. type="primary"
  234. @click="enterDialog"
  235. >确 定
  236. </el-button>
  237. </div>
  238. </template>
  239. </el-dialog>
  240. <!-- 弹出选项框 -->
  241. <el-dialog
  242. v-model="dialogSelectVisible"
  243. title="选择"
  244. destroy-on-close
  245. width="600px"
  246. >
  247. <el-table
  248. tooltip-effect="dark"
  249. :data="selectData"
  250. row-key="ID"
  251. highlight-current-row
  252. border
  253. style="width:100%"
  254. @row-dblclick="handleSelectClick"
  255. >
  256. <el-table-column
  257. prop="Gd_cpmc"
  258. label="产品名称"
  259. width="300"
  260. />
  261. <el-table-column
  262. prop="Gy0_gxmc"
  263. label="产品名称"
  264. width="100"
  265. />
  266. <el-table-column
  267. prop="jyGx"
  268. label="产品名称"
  269. width="100"
  270. />
  271. </el-table>
  272. </el-dialog>
  273. </div>
  274. </layout-header>
  275. <layout>
  276. <!-- 左侧树侧形结构-->
  277. <layout-sider
  278. :resize-directions="['right']"
  279. :width="220"
  280. style="margin-right: 10px;"
  281. >
  282. <div
  283. class="JKWTree-tree"
  284. style="height: 70vh;"
  285. >
  286. <h3>包装计件单据维护</h3>
  287. <el-tree
  288. :data="treeData"
  289. highlight-current
  290. @node-click="handleNodeClick"
  291. />
  292. </div>
  293. </layout-sider>
  294. <layout-content>
  295. <!-- 数据展示 -->
  296. <div class="gva-table-box">
  297. <el-table
  298. ref="table"
  299. style="width: 100%"
  300. :data="tableData"
  301. row-key="ID"
  302. highlight-current-row
  303. border
  304. show-overflow-tooltip
  305. :row-style="{ height: '20px' }"
  306. :cell-style="{ padding: '0px' }"
  307. :header-row-style="{ height: '20px' }"
  308. :header-cell-style="{ padding: '0px' }"
  309. @row-dblclick="handleShowDetail"
  310. @current-change="(row, oldRow) => { currentRow = row}"
  311. >
  312. <el-table-column
  313. type="selection"
  314. width="55"
  315. />
  316. <!-- 循环渲染列 -->
  317. <el-table-column
  318. v-for=" column in tableColumns "
  319. :key="column.prop"
  320. :prop="column.prop"
  321. :label="column.label"
  322. :width="column.width"
  323. sortable
  324. />
  325. </el-table>
  326. <!-- 分页 -->
  327. <div class="gva-pagination">
  328. <el-pagination
  329. v-model:current-page="page"
  330. v-model:page-size="limit"
  331. layout="total, sizes, prev, pager, next, jumper"
  332. :page-sizes="[10, 30, 50, 100]"
  333. :total="total"
  334. @current-change="handleCurrentChange"
  335. @size-change="handleSizeChange"
  336. />
  337. </div>
  338. </div>
  339. </layout-content>
  340. </layout>
  341. </layout>
  342. </div>
  343. </template>
  344. <script setup>
  345. import { Layout, LayoutContent, LayoutHeader, LayoutSider } from '@arco-design/web-vue'
  346. import { ElMessage, ElMessageBox, dayjs } from 'element-plus'
  347. // import { Download, Search, Delete } from '@element-plus/icons-vue'
  348. import { reactive, ref } from 'vue'
  349. import { getGxMc, getInfo, getLocate, getPackingSideTable, getPackingTable, updatePackingTable, getYg, DeletePackingTable, addPackingTable, getDedh } from '@/api/mes_api_gty/myapi'
  350. defineOptions({
  351. name: '06PackingDocuments',
  352. })
  353. // 侧边栏功能
  354. const treeData = reactive([])
  355. const getSideData = async() => {
  356. try {
  357. const response = await getPackingSideTable()
  358. if (response.code === 0) {
  359. const transformedData = response.data.map(item => ({
  360. label: `${item.date.replace(/-/g, '.')}【单据数: ${item.counts}张】`,
  361. children: item.sys.map(sysItem => ({
  362. label: `${sysItem.sys_id} 【记录数: ${sysItem.count}张】`,
  363. params: {
  364. date: item.date.replace(/\./g, '-'),
  365. sys_id: sysItem.sys_id,
  366. },
  367. })),
  368. }))
  369. treeData.splice(0, treeData.length, ...transformedData)
  370. }
  371. } catch (e) {
  372. console.log(e)
  373. }
  374. }
  375. getSideData()
  376. // 表格功能
  377. const tableColumns = [
  378. { label: '员工编号', prop: 'sczl_bh', width: '100' },
  379. { label: '员工姓名', prop: 'name', width: '100' },
  380. { label: '生产日期', prop: 'sczl_rq', width: '100' },
  381. { label: '班组', prop: 'sczl_bzdh', width: '100' },
  382. { label: '包装产量', prop: 'sczl_cl', width: '100' },
  383. { label: '返工产量', prop: 'sczl_fgsl', width: '100' },
  384. { label: '计件产量', prop: 'sczl_jjcl', width: '100' },
  385. { label: '相关工单', prop: 'sczl_gdbh1', width: '100' },
  386. { label: '创建用户', prop: 'sys_id', width: '120' },
  387. { label: '创建时间', prop: 'sys_rq', width: '180' },
  388. { label: '修改时间', prop: 'mod_rq', width: '180' },
  389. { label: 'UNIQID', prop: 'UniqId', width: '100' },
  390. ]
  391. const tableData = reactive([])
  392. const params = {
  393. type: '',
  394. date: '',
  395. sys_id: '',
  396. gdbh: '',
  397. }
  398. const total = ref(0)
  399. const page = ref(1)
  400. const limit = ref(10)
  401. const type = ref('')
  402. const searchInfo = ref('')
  403. const currentRow = ref({})
  404. // const multipleSelection = ref([])
  405. // 获取列表数据
  406. const getTableData = async() => {
  407. try {
  408. const response = await getPackingTable({
  409. date: params.date, sys_id: params.sys_id,
  410. page: page.value.toString(), limit: limit.value.toString(),
  411. })
  412. if (response.code === 0) {
  413. total.value = response.data.total
  414. tableData.splice(0, tableData.length, ...response.data.rows)
  415. setCurrent(tableData[0])
  416. }
  417. } catch (e) {
  418. console.log(e)
  419. }
  420. }
  421. // 获取定位数据
  422. const getLocateTable = async() => {
  423. try {
  424. const response = await getLocate({
  425. gdbh: params.gdbh,
  426. page: page.value.toString(), limit: limit.value.toString(),
  427. })
  428. if (response.code === 0) {
  429. total.value = response.data.total
  430. tableData.splice(0, tableData.length, ...response.data.rows)
  431. }
  432. } catch (e) {
  433. console.log(e)
  434. }
  435. }
  436. // 删除数据
  437. const deleteTableData = async(id) => {
  438. try {
  439. const res = await DeletePackingTable({ UniqId: id })
  440. if (res.code === 0) {
  441. return 0
  442. }
  443. } catch (e) {
  444. console.log(e)
  445. }
  446. }
  447. const handleNodeClick = (node, check) => {
  448. if (node.params) {
  449. params.date = node.params.date
  450. params.sys_id = node.params.sys_id
  451. params.type = 'getTableData'
  452. page.value = 1
  453. getTableData()
  454. }
  455. }
  456. // 定位
  457. const handleSearch = () => {
  458. params.gdbh = searchInfo.value
  459. params.type = 'getLocateTable'
  460. page.value = 1
  461. getLocateTable()
  462. }
  463. // 查改
  464. const handleShowDetail = () => {
  465. type.value = '查改'
  466. getTableInfo(currentRow.value?.UniqId)
  467. }
  468. // 删除
  469. const handleDelete = () => {
  470. console.log(currentRow.value)
  471. ElMessageBox.confirm(
  472. `确认删除这条数据么?`,
  473. '警告',
  474. {
  475. confirmButtonText: '确认',
  476. cancelButtonText: '取消',
  477. type: 'warning',
  478. }
  479. )
  480. .then(async() => {
  481. const ret = await deleteTableData(currentRow.value?.UniqId)
  482. console.log(ret)
  483. if (ret === 0) {
  484. ElMessage({
  485. type: 'success',
  486. message: '删除成功',
  487. })
  488. } else {
  489. ElMessage({
  490. type: 'error',
  491. message: '删除失败',
  492. })
  493. }
  494. })
  495. .catch(() => {
  496. ElMessage({
  497. type: 'info',
  498. message: '取消删除',
  499. })
  500. })
  501. }
  502. // 分页
  503. // #region
  504. const handleSizeChange = () => {
  505. switch (params.type) {
  506. case 'getTableData':
  507. getTableData()
  508. break
  509. case 'getLocateTable':
  510. getLocateTable()
  511. break
  512. default:
  513. break
  514. }
  515. }
  516. const handleCurrentChange = () => {
  517. switch (params.type) {
  518. case 'getTableData':
  519. getTableData()
  520. break
  521. case 'getLocateTable':
  522. getLocateTable()
  523. break
  524. default:
  525. break
  526. }
  527. }
  528. // #endregion
  529. // 详情界面
  530. const detailData = reactive({
  531. UniqId: '',
  532. selectIndex: 0,
  533. sczl_rq: '',
  534. sczl_bh: '',
  535. name: '',
  536. sczl_bzdh: '',
  537. sczl_jsss: '',
  538. sczl_冲定额: '',
  539. sczl_desc: '',
  540. table: [],
  541. })
  542. const selectData = reactive([])
  543. const table = ref()
  544. // 弹窗控制标记
  545. const dialogFormVisible = ref(false)
  546. const dialogSelectVisible = ref(false)
  547. const setCurrent = (row) => {
  548. table.value?.setCurrentRow(row)
  549. }
  550. // 获取详细信息
  551. const getTableInfo = async(id) => {
  552. try {
  553. const response = await getInfo({ UniqId: id })
  554. if (response.code === 0) {
  555. const { sczl_rq, sczl_bh, name, sczl_bzdh, sczl_jsss, sczl_冲定额, sczl_desc, ...rest } = response.data
  556. // 直接赋值基础属性
  557. Object.assign(detailData, { sczl_rq, sczl_bh, name, sczl_bzdh, sczl_jsss, sczl_冲定额, sczl_desc })
  558. // 生成表格数据
  559. detailData.table = Array.from({ length: 6 }, (_, i) => i + 1) // 创建一个长度为6的数组 [1, 2, 3, 4, 5, 6]
  560. .map(num => {
  561. return {
  562. sczl_gdbh: rest[`sczl_gdbh${num}`],
  563. sczl_yjGx: rest[`sczl_yjGx${num}`],
  564. sczl_gxmc: rest[`sczl_gxmc${num}`],
  565. Gd_cpmc: rest[`Gd_cpmc${num}`],
  566. sczl_cl: rest[`sczl_cl${num}`],
  567. sczl_返工产量: rest[`sczl_返工产量${num}`],
  568. sczl_PgCl: rest[`sczl_PgCl${num}`],
  569. sczl_计产系数: rest[`sczl_计产系数${num}`],
  570. sczl_Jtbh1: rest[`sczl_Jtbh${num}`],
  571. sczl_dedh: rest[`sczl_dedh${num}`],
  572. }
  573. })
  574. // .filter(item => item.sczl_gdbh !== '') // 过滤掉空的工单编号
  575. detailData.UniqId = id
  576. dialogFormVisible.value = true
  577. // 在 setTimeout 中获取元素,确保在 DOM 渲染完毕后执行
  578. setTimeout(() => {
  579. formElements = document.getElementById('detail-form').elements
  580. formElements[0].focus()
  581. }, 0)
  582. }
  583. } catch (e) {
  584. console.log(e)
  585. }
  586. }
  587. // 获取工序名称
  588. const getTableGxMc = async(index, row) => {
  589. try {
  590. const response = await getGxMc({ gdbh: row.sczl_gdbh })
  591. if (response.code === 0) {
  592. const { Gd_cpmc, Gy0_gxmc, jyGx } = response.data[0]
  593. if (response.data.length === 1) {
  594. detailData.table[index].Gd_cpmc = Gd_cpmc
  595. detailData.table[index].sczl_yjGx = jyGx
  596. detailData.table[index].sczl_gxmc = Gy0_gxmc
  597. } else {
  598. selectData.splice(0, selectData.length, ...response.data)
  599. detailData.selectIndex = index
  600. dialogSelectVisible.value = true
  601. }
  602. }
  603. } catch (e) {
  604. console.log(e)
  605. }
  606. }
  607. // 更新数据
  608. const updateDetailData = async() => {
  609. const restoredData = {
  610. UniqId: detailData.UniqId,
  611. sczl_rq: detailData.sczl_rq,
  612. sczl_bh: detailData.sczl_bh,
  613. name: detailData.name,
  614. sczl_bzdh: detailData.sczl_bzdh,
  615. sczl_jsss: detailData.sczl_jsss,
  616. sczl_冲定额: detailData.sczl_冲定额,
  617. sczl_desc: detailData.sczl_desc,
  618. }
  619. detailData.table.forEach((item, index, array) => {
  620. const num = index + 1
  621. restoredData[`sczl_gdbh${num}`] = item.sczl_gdbh
  622. restoredData[`sczl_yjGx${num}`] = item.sczl_yjGx
  623. restoredData[`sczl_gxmc${num}`] = item.sczl_gxmc
  624. restoredData[`Gd_cpmc${num}`] = item.Gd_cpmc
  625. restoredData[`sczl_cl${num}`] = item.sczl_cl
  626. restoredData[`sczl_返工产量${num}`] = item.sczl_返工产量
  627. restoredData[`sczl_PgCl${num}`] = item.sczl_PgCl
  628. restoredData[`sczl_计产系数${num}`] = item.sczl_计产系数
  629. restoredData[`sczl_Jtbh${num}`] = item.sczl_Jtbh1
  630. restoredData[`sczl_dedh${num}`] = item.sczl_dedh
  631. })
  632. const res = await updatePackingTable(restoredData)
  633. if (res.code === 0) {
  634. ElMessage({
  635. type: 'success',
  636. message: '更新成功',
  637. })
  638. dialogFormVisible.value = false
  639. }
  640. }
  641. // 新增数据
  642. const handleShowAdd = async() => {
  643. type.value = '新增'
  644. await getTableInfo(currentRow.value?.UniqId)
  645. // 默认日期为前一天的日期
  646. const date = dayjs().subtract(1, 'day').format('YYYY-MM-DD')
  647. detailData.sczl_rq = date
  648. }
  649. const addDetailData = async() => {
  650. const restoredData = {
  651. sys_id: params.sys_id,
  652. sczl_rq: detailData.sczl_rq,
  653. sczl_bh: detailData.sczl_bh,
  654. // name: detailData.name,
  655. sczl_bzdh: detailData.sczl_bzdh,
  656. sczl_jsss: detailData.sczl_jsss,
  657. sczl_冲定额: detailData.sczl_冲定额,
  658. sczl_desc: detailData.sczl_desc,
  659. }
  660. detailData.table.forEach((item, index, array) => {
  661. const num = index + 1
  662. restoredData[`sczl_gdbh${num}`] = item.sczl_gdbh
  663. restoredData[`sczl_yjGx${num}`] = item.sczl_yjGx
  664. restoredData[`sczl_gxmc${num}`] = item.sczl_gxmc
  665. // restoredData[`Gd_cpmc${num}`] = item.Gd_cpmc
  666. restoredData[`sczl_cl${num}`] = item.sczl_cl
  667. restoredData[`sczl_返工产量${num}`] = item.sczl_返工产量
  668. restoredData[`sczl_PgCl${num}`] = item.sczl_PgCl
  669. restoredData[`sczl_计产系数${num}`] = item.sczl_计产系数
  670. restoredData[`sczl_Jtbh${num}`] = item.sczl_Jtbh1
  671. restoredData[`sczl_dedh${num}`] = item.sczl_dedh
  672. })
  673. const res = await addPackingTable(restoredData)
  674. console.log(restoredData)
  675. console.log(res)
  676. if (res.code === 0) {
  677. ElMessage({
  678. type: 'success',
  679. message: '新增成功',
  680. })
  681. dialogFormVisible.value = false
  682. getTableData()
  683. getSideData()
  684. }
  685. }
  686. const handleGetYg = async() => {
  687. try {
  688. const res = await getYg({ sczl_bh: detailData.sczl_bh })
  689. if (res.code === 0) {
  690. detailData.name = res.data.ygxm
  691. } else {
  692. detailData.name = ''
  693. }
  694. } catch (e) {
  695. console.log(e)
  696. }
  697. }
  698. // 处理选择框回车操作
  699. const handleEnter = (index, row) => {
  700. if (row.sczl_gdbh === '') {
  701. detailData.table[index].sczl_yjGx = ''
  702. detailData.table[index].sczl_gxmc = ''
  703. detailData.table[index].Gd_cpmc = ''
  704. } else {
  705. getTableGxMc(index, row)
  706. }
  707. }
  708. // 处理选择框
  709. const handleSelectClick = (row, column, event) => {
  710. const { Gd_cpmc, Gy0_gxmc, jyGx } = row
  711. const index = detailData.selectIndex
  712. detailData.table[index].Gd_cpmc = Gd_cpmc
  713. detailData.table[index].sczl_yjGx = jyGx
  714. detailData.table[index].sczl_gxmc = Gy0_gxmc
  715. dialogSelectVisible.value = false
  716. }
  717. // 弹窗确定
  718. const enterDialog = () => {
  719. if (type.value === '查改') {
  720. updateDetailData()
  721. } else if (type.value === '新增') {
  722. addDetailData()
  723. }
  724. }
  725. // 定额代号回车事件
  726. const getDedhsubmit = () => {}
  727. let formElements
  728. const moveFocus = (event) => {
  729. const index = Array.from(formElements).indexOf(event.target)
  730. const key = event.key
  731. event.preventDefault()
  732. switch (index) {
  733. case 0:
  734. if (key === 'ArrowDown') {
  735. formElements[1].focus()
  736. } else if (key === 'ArrowUp') {
  737. formElements[formElements.length - 1].focus()
  738. } else if (key === 'Enter') {
  739. formElements[1].focus()
  740. }
  741. break
  742. case 1:
  743. if (key === 'ArrowDown') {
  744. formElements[3].focus()
  745. handleGetYg()
  746. } else if (key === 'ArrowUp') {
  747. formElements[0].focus()
  748. handleGetYg()
  749. } else if (key === 'Enter') {
  750. formElements[3].focus()
  751. handleGetYg()
  752. }
  753. break
  754. case 3:
  755. if (key === 'ArrowDown') {
  756. formElements[4].focus()
  757. } else if (key === 'ArrowUp') {
  758. formElements[1].focus()
  759. } else if (key === 'Enter') {
  760. formElements[4].focus()
  761. }
  762. break
  763. case formElements.length - 1 :
  764. if (key === 'ArrowDown') {
  765. formElements[0].focus()
  766. } else if (key === 'ArrowUp') {
  767. formElements[index - 1].focus()
  768. } else if (key === 'Enter') {
  769. formElements[0].focus()
  770. }
  771. break
  772. default:
  773. if (key === 'ArrowDown') {
  774. formElements[index + 1].focus()
  775. } else if (key === 'ArrowUp') {
  776. formElements[index - 1].focus()
  777. } else if (key === 'Enter') {
  778. formElements[index + 1].focus()
  779. }
  780. break
  781. }
  782. }
  783. </script>
  784. <style scoped>
  785. :deep(.plan-usage-low div) {
  786. color: red !important;
  787. }
  788. .JKWTree-container {
  789. display: flex;
  790. }
  791. .JKWTree-tree {
  792. width: 100%;
  793. background-color: #fff;
  794. /*background-color: rgba(241, 224, 224, 0.99);*/
  795. padding: 10px;
  796. margin-right: 20px;
  797. }
  798. .JKWTree-tree h3 {
  799. font-size: 15px;
  800. font-weight: 700;
  801. margin: 10px 0;
  802. }
  803. .JKWTree-content {
  804. flex: 1;
  805. }
  806. :deep(.el-table__body .warning-row) {
  807. background: #FFFF80 !important;
  808. }
  809. /* 选中某行时的背景色 */
  810. :deep(.el-table__body tr.current-row) > td {
  811. background: #ff80ff !important;
  812. }
  813. :deep(.el-table .bg-yellow) {
  814. background: yellow;
  815. }
  816. </style>
  817. <style scoped>
  818. :deep(.el-table td .cell) {
  819. line-height: 25px !important;
  820. }
  821. :deep(.el-tabs__header) {
  822. margin-bottom: 0;
  823. }
  824. .search {
  825. margin-left: 0px !important;
  826. margin-right: 10px !important;
  827. }
  828. .bt {
  829. margin-left: 2px !important;
  830. padding: 3px !important;
  831. font-size: 12px;
  832. }
  833. .el-tabs__header {
  834. margin: 0px !important;
  835. }
  836. .gva-table-box {
  837. padding: 0px !important;
  838. }
  839. .mab {
  840. margin-bottom: 5px;
  841. }
  842. </style>