sampling.vue 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987
  1. <template>
  2. <div>
  3. <el-container>
  4. <!-- <el-scrollbar max-height="75vh">
  5. <el-aside>
  6. <div class="JKWTree-tree">
  7. <h3> 工单抽检记录维护</h3>
  8. <el-tree
  9. :data="treeData"
  10. :props="defaultProps"
  11. @node-click="handleNodeClick"
  12. />
  13. </div>
  14. </el-aside>
  15. </el-scrollbar> -->
  16. <layout-sider
  17. :resize-directions="['right']"
  18. :width="220"
  19. style="margin-right: 10px;"
  20. >
  21. <div
  22. class="JKWTree-tree"
  23. style="height: 70vh;"
  24. >
  25. <h3>工单抽检记录维护</h3>
  26. <el-tree
  27. :data="treeData"
  28. highlight-current
  29. @node-click="handleNodeClick"
  30. />
  31. </div>
  32. </layout-sider>
  33. <el-container>
  34. <!-- <el-header>dd</el-header>-->
  35. <el-main>
  36. <div class="gva-search-box">
  37. <el-form
  38. ref="elSearchFormRef"
  39. :inline="true"
  40. :model="searchInfo"
  41. class="demo-form-inline"
  42. :rules="searchRule"
  43. >
  44. <el-form-item>
  45. <el-input
  46. v-model="searchInfo"
  47. :clearable="true"
  48. placeholder="输入工单编号"
  49. />
  50. </el-form-item>
  51. <el-form-item>
  52. <el-button
  53. type="primary"
  54. icon="search"
  55. class="bt"
  56. @click="handlerSearch"
  57. >查询</el-button>
  58. <el-button
  59. type="primary"
  60. class="bt" icon="plus"
  61. @click="handleShowAdd"
  62. >新增
  63. </el-button>
  64. </el-form-item>
  65. </el-form>
  66. </div>
  67. <div class="gva-table-box">
  68. <!-- <div class="gva-btn-list">
  69. <el-button type="primary" icon="plus" @click="openDialog">新增</el-button>
  70. <el-popover v-model:visible="deleteVisible" :disabled="!multipleSelection.length" placement="top" width="160">
  71. <p>确定要删除吗?</p>
  72. <div style="text-align: right; margin-top: 8px;">
  73. <el-button type="primary" link @click="deleteVisible = false">取消</el-button>
  74. <el-button type="primary" @click="onDelete">确定</el-button>
  75. </div>
  76. <template #reference>
  77. <el-button icon="delete" style="margin-left: 10px;" :disabled="!multipleSelection.length" @click="deleteVisible = true">删除</el-button>
  78. </template>
  79. </el-popover>
  80. </div> -->
  81. <el-table
  82. ref="multipleTable"
  83. border
  84. style="width: 100%"
  85. tooltip-effect="dark"
  86. :data="tableData"
  87. row-key="ID"
  88. highlight-current-row
  89. :show-overflow-tooltip="true"
  90. :row-style="{ height: '20px' }"
  91. :cell-style="{ padding: '0px' }"
  92. :header-row-style="{ height: '20px' }"
  93. :header-cell-style="{ padding: '0px' }"
  94. @selection-change="handleSelectionChange"
  95. @row-dblclick="getDetailData"
  96. @row-click="handleSelectChange"
  97. >
  98. <el-table-column
  99. type="selection"
  100. width="55"
  101. />
  102. <el-table-column
  103. align="center"
  104. label="日期"
  105. prop="Sczl_rq"
  106. width="100"
  107. sortable
  108. />
  109. <el-table-column
  110. align="left"
  111. label="员工编号"
  112. prop="Sczl_bh"
  113. width="120"
  114. sortable
  115. />
  116. <el-table-column
  117. align="left"
  118. label="员工姓名"
  119. prop="name"
  120. width="120"
  121. sortable
  122. />
  123. <el-table-column
  124. align="left"
  125. label="工单编号"
  126. prop="Sczl_gdbh"
  127. width="120"
  128. sortable
  129. />
  130. <el-table-column
  131. align="left"
  132. label="产品名称"
  133. prop="Gd_cpmc"
  134. width="130"
  135. sortable
  136. />
  137. <el-table-column
  138. align="left"
  139. label="工序名称"
  140. prop="Sczl_gxmc"
  141. width="120"
  142. sortable
  143. />
  144. <el-table-column
  145. align="left"
  146. label="印件号"
  147. prop="sczl_yjno"
  148. width="120"
  149. sortable
  150. />
  151. <el-table-column
  152. align="left"
  153. label="工序号"
  154. prop="sczl_gxh"
  155. width="120"
  156. sortable
  157. />
  158. <el-table-column
  159. align="left"
  160. label="流程单号"
  161. prop="Sczl_num"
  162. width="120"
  163. sortable
  164. />
  165. <el-table-column
  166. align="left"
  167. label="抽检数"
  168. prop="Sczl_抽检数"
  169. width="120"
  170. sortable
  171. />
  172. <el-table-column
  173. align="left"
  174. label="A类废"
  175. prop="sczl_A类废"
  176. width="120" sortable
  177. />
  178. <el-table-column
  179. align="left"
  180. label="B类废"
  181. prop="sczl_B类废"
  182. width="120" sortable
  183. />
  184. <el-table-column
  185. align="left"
  186. label="C类废"
  187. prop="sczl_C类废"
  188. width="120" sortable
  189. />
  190. <el-table-column
  191. align="left"
  192. label="备注"
  193. prop="Sczl_desc"
  194. width="80" sortable
  195. />
  196. <el-table-column
  197. align="left"
  198. label="创建用户"
  199. prop="Sys_id"
  200. width="120" sortable
  201. />
  202. <el-table-column
  203. align="left"
  204. label="创建时间"
  205. prop="Sys_rq"
  206. width="160" sortable
  207. />
  208. <el-table-column
  209. align="left"
  210. label="修改时间"
  211. prop="Mod_rq"
  212. width="120" sortable
  213. />
  214. <el-table-column
  215. align="left"
  216. label="UNIQID"
  217. prop="UniqId"
  218. width="120" sortable
  219. />
  220. </el-table>
  221. <div class="gva-pagination">
  222. <el-pagination
  223. v-model:current-page="page"
  224. v-model:page-size="pageSize"
  225. layout="total, sizes, prev, pager, next, jumper"
  226. :page-sizes="[10, 30, 50, 100]"
  227. :total="total"
  228. @current-change="handleCurrentChange"
  229. @size-change="handleSizeChange"
  230. />
  231. </div>
  232. </div>
  233. <el-dialog
  234. v-model="dialogFormVisible"
  235. :before-close="closeDialog"
  236. :title="type"
  237. destroy-on-close
  238. width="800"
  239. >
  240. <!-- <el-scrollbar height="340px">-->
  241. <el-form
  242. ref="elFormRef"
  243. :model="detailData"
  244. :inline="true"
  245. label-position="right"
  246. :rules="rule"
  247. label-width="75px"
  248. id="detail-form"
  249. @keyup="moveFocus"
  250. >
  251. <el-form-item
  252. label="员工编号:"
  253. prop="address"
  254. >
  255. <el-input
  256. v-model="detailData.Sczl_bh"
  257. :clearable="true"
  258. @blur="handleGetYg()"
  259. @keydown="ent1($event)"
  260. />
  261. </el-form-item>
  262. <el-form-item prop="image">
  263. <el-input
  264. v-model="detailData.name"
  265. :clearable="true"
  266. placeholder="请输入员工姓名"
  267. @keydown="ent1($event)"
  268. />
  269. </el-form-item>
  270. </el-form>
  271. <el-form
  272. ref="elFormRef"
  273. :model="detailData"
  274. :inline="true"
  275. label-position="right"
  276. :rules="rule"
  277. label-width="75px"
  278. >
  279. <el-form-item
  280. label="班组:"
  281. prop="address"
  282. >
  283. <!-- <el-input
  284. v-model="detailData.sczl_bzdh"
  285. :clearable="true"
  286. placeholder="请输入班组"
  287. /> -->
  288. <el-select v-model="detailData.sczl_bzdh" placeholder="" style="width: 70px"
  289. >
  290. <el-option label="A班" value="A班"></el-option>
  291. <el-option label="B班" value="B班"></el-option>
  292. </el-select>
  293. </el-form-item>
  294. <el-form-item
  295. label="日期:"
  296. prop="image"
  297. >
  298. <el-input
  299. v-model="detailData.Sczl_rq"
  300. :clearable="true"
  301. placeholder="请输入日期"
  302. @keydown="ent1($event)"
  303. />
  304. </el-form-item>
  305. </el-form>
  306. <el-form
  307. ref="elFormRef"
  308. :model="detailData"
  309. :inline="true"
  310. label-position="right"
  311. :rules="rule"
  312. label-width="75px"
  313. >
  314. <el-form-item
  315. label="工单编号:"
  316. prop="address"
  317. >
  318. <el-input
  319. v-model="detailData.Sczl_gdbh"
  320. :clearable="true"
  321. placeholder="请输入工单编号"
  322. @keydown="ent1($event)"
  323. />
  324. </el-form-item>
  325. <el-form-item prop="image">
  326. <el-input
  327. v-model="detailData.Gd_cpmc"
  328. :clearable="true"
  329. placeholder="请输入产品名称"
  330. @keydown="ent1($event)"
  331. />
  332. </el-form-item>
  333. </el-form>
  334. <el-form
  335. ref="elFormRef"
  336. :model="detailData"
  337. :inline="true"
  338. label-position="right"
  339. :rules="rule"
  340. label-width="75px"
  341. >
  342. <el-form-item
  343. label="工序名称:"
  344. prop="address"
  345. >
  346. <el-input
  347. v-model="detailData.Sczl_gxmc"
  348. :clearable="true"
  349. placeholder="请输入工序名称"
  350. style="width: 140px;"
  351. @keydown="ent1($event)"
  352. />
  353. </el-form-item>
  354. <el-form-item prop="image">
  355. <el-input
  356. v-model="detailData.sczl_gxh"
  357. :clearable="true"
  358. placeholder="请输入工序号"
  359. style="width: 140px;"
  360. @keydown="ent1($event)"
  361. />
  362. </el-form-item>
  363. <el-form-item
  364. label="流程单号:"
  365. prop="address"
  366. >
  367. <el-input
  368. v-model="detailData.Sczl_num"
  369. :clearable="true"
  370. placeholder="请输入流程单号"
  371. style="width: 140px;"
  372. @keydown="ent1($event)"
  373. />
  374. </el-form-item>
  375. </el-form>
  376. <el-form
  377. ref="elFormRef"
  378. :model="detailData"
  379. :inline="true"
  380. label-position="right"
  381. :rules="rule"
  382. label-width="75px"
  383. >
  384. <el-form-item
  385. label="抽检数量:"
  386. prop="address"
  387. >
  388. <el-input
  389. v-model="detailData.Sczl_抽检数"
  390. :clearable="true"
  391. placeholder="请输入抽检数量"
  392. style="width: 123px;"
  393. @keydown="ent1($event)"
  394. />
  395. </el-form-item>
  396. </el-form>
  397. <el-form
  398. ref="elFormRef"
  399. :model="detailData"
  400. :inline="true"
  401. label-position="right"
  402. :rules="rule"
  403. label-width="75px"
  404. >
  405. <el-form-item
  406. label="A类废品:"
  407. prop="address"
  408. >
  409. <el-input
  410. v-model="detailData.Sczl_A类废"
  411. :clearable="true"
  412. placeholder="请输入A类废品"
  413. style="width: 123px;"
  414. @keydown="ent1($event)"
  415. />
  416. </el-form-item>
  417. <el-form-item
  418. label="B类废品:"
  419. prop="image"
  420. >
  421. <el-input
  422. v-model="detailData.Sczl_B类废"
  423. :clearable="true"
  424. placeholder="请输入B类废品"
  425. style="width: 123px;"
  426. @keydown="ent1($event)"
  427. />
  428. </el-form-item>
  429. <el-form-item
  430. label="C类废品:"
  431. prop="address"
  432. >
  433. <el-input
  434. v-model="detailData.Sczl_C类废"
  435. :clearable="true"
  436. placeholder="请输入C类废品"
  437. style="width: 123px;"
  438. @keydown="ent1($event)"
  439. />
  440. </el-form-item>
  441. </el-form>
  442. <el-form
  443. ref="elFormRef"
  444. :model="detailData"
  445. label-position="right"
  446. :rules="rule"
  447. label-width="80px"
  448. >
  449. <el-form-item
  450. label="其他备注:"
  451. prop="address"
  452. >
  453. <el-input
  454. v-model="detailData.Sczl_desc"
  455. :clearable="true"
  456. placeholder="请输入其他备注"
  457. @keydown="ent1($event)"
  458. />
  459. </el-form-item>
  460. </el-form>
  461. <!-- </el-scrollbar>-->
  462. <template #footer>
  463. <div class="dialog-footer">
  464. <el-button @click="closeDialog">取 消</el-button>
  465. <el-button
  466. type="primary"
  467. @click="enterDialog"
  468. >确 定</el-button>
  469. </div>
  470. </template>
  471. </el-dialog>
  472. <!-- <el-dialog
  473. v-model="detailShow"
  474. style="width: 800px"
  475. lock-scroll
  476. :before-close="closeDetailShow"
  477. title="查看详情"
  478. destroy-on-close
  479. >
  480. <el-scrollbar height="550px">
  481. <el-descriptions
  482. column="1"
  483. border
  484. >
  485. <el-descriptions-item label="address字段">
  486. {{ formData.address }}
  487. </el-descriptions-item>
  488. <el-descriptions-item label="image字段">
  489. {{ formData.image }}
  490. </el-descriptions-item>
  491. <el-descriptions-item label="name字段">
  492. {{ formData.name }}
  493. </el-descriptions-item>
  494. </el-descriptions>
  495. </el-scrollbar>
  496. </el-dialog>-->
  497. </el-main>
  498. </el-container>
  499. </el-container>
  500. </div>
  501. </template>
  502. <script setup>
  503. import { Layout, LayoutContent, LayoutHeader, LayoutSider } from '@arco-design/web-vue'
  504. import { getSpotList, getSpotTab, getSpotLocal, getSpotInfo, updateSpotData,add } from '@/api/mes/job'
  505. import { createCompany, deleteCompany, deleteCompanyByIds, findCompany, updateCompany } from '@/api/company'
  506. import{getYg}from '@/api/mes_api_gty/myapi'
  507. // 全量引入格式化工具 请按需保留
  508. import { ElMessage, ElMessageBox } from 'element-plus'
  509. import { reactive, ref,nextTick ,onMounted, onBeforeMount} from 'vue'
  510. import { useUserStore } from '@/pinia/modules/user'
  511. const userStore = useUserStore()
  512. const sys_id='['+userStore.userInfo.userName+'/'+userStore.userInfo.nickName+']'
  513. defineOptions({
  514. name: 'Sampling'
  515. })
  516. const treeData = ref([])
  517. const SpotTab = async() => {
  518. const getSpotTabs = await getSpotTab()
  519. if (getSpotTabs.code === 0) {
  520. treeData.value = getSpotTabs.data.map(item => ({
  521. label: `${item.date.replace(/-/g, '.')}【单据数: ${item.counts}张】`,
  522. children: item.sys.map(sysItem => ({
  523. label: `${sysItem.Sys_id} 【记录数: ${sysItem.count}张】`,
  524. params: {
  525. date: item.date.replace(/\./g, '-'),
  526. sys_id: sysItem.sys_id,
  527. total: sysItem.count,
  528. },
  529. })),
  530. }))
  531. }
  532. }
  533. SpotTab()
  534. const handleNodeClick = (node, check) => {
  535. // 存放当前节点的nodeId
  536. if (node.params) {
  537. params.date = node.params.date
  538. params.sys_id = node.params.sys_id
  539. params.type = 'getTableData'
  540. page.value = 1
  541. handleCurrentChange()
  542. }
  543. }
  544. // 自动化生成的字典(可能为空)以及字段
  545. const formData = ref({
  546. address: '',
  547. image: '',
  548. name: '',
  549. })
  550. const handleGetYg = async() => {
  551. try {
  552. const res = await getYg({ sczl_bh: detailData.Sczl_bh })
  553. if (res.code === 0) {
  554. detailData.name = res.data.ygxm
  555. }
  556. } catch (e) {
  557. console.log(e)
  558. }
  559. }
  560. // 验证规则
  561. const rule = reactive({
  562. })
  563. /* const searchRule = reactive({
  564. createdAt: [
  565. { validator: (rule, value, callback) => {
  566. if (searchInfo.value.startCreatedAt && !searchInfo.value.endCreatedAt) {
  567. callback(new Error('请填写结束日期'))
  568. } else if (!searchInfo.value.startCreatedAt && searchInfo.value.endCreatedAt) {
  569. callback(new Error('请填写开始日期'))
  570. } else if (searchInfo.value.startCreatedAt && searchInfo.value.endCreatedAt && (searchInfo.value.startCreatedAt.getTime() === searchInfo.value.endCreatedAt.getTime() || searchInfo.value.startCreatedAt.getTime() > searchInfo.value.endCreatedAt.getTime())) {
  571. callback(new Error('开始日期应当早于结束日期'))
  572. } else {
  573. callback()
  574. }
  575. }, trigger: 'change' }
  576. ],
  577. }) */
  578. const elFormRef = ref()
  579. const elSearchFormRef = ref()
  580. // =========== 表格控制部分 ===========
  581. const page = ref(1)
  582. const total = ref(0)
  583. const pageSize = ref(10)
  584. const tableData = reactive([])
  585. const searchInfo = ref('')
  586. const params = {
  587. date: '',
  588. sys_id: '',
  589. search: '',
  590. type: '',
  591. }
  592. const minUniqId = ref('')
  593. // 获取表格数据
  594. const getTableData = async() => {
  595. const { date, sys_id } = params
  596. const res = await getSpotList({ date, sys_id,
  597. page: page.value.toString(), limit: pageSize.value.toString() })
  598. if (res.code === 0) {
  599. tableData.splice(0, tableData.length, ...res.data.rows)
  600. total.value = res.data.total
  601. minUniqId.value= Math.min(...tableData.map(row => row.UniqId));
  602. }
  603. }
  604. const getLocal = async() => {
  605. const res = await getSpotLocal({
  606. search: params.search,
  607. page: page.value.toString(),
  608. limit: pageSize.value.toString()
  609. })
  610. if (res.code === 0) {
  611. tableData.splice(0, tableData.length, ...res.data.rows)
  612. total.value = res.data.total
  613. }
  614. }
  615. // 分页
  616. const handleSizeChange = () => {
  617. switch (params.type) {
  618. case 'getTableData':
  619. getTableData()
  620. break
  621. case 'getLocal':
  622. getLocal()
  623. break
  624. default:
  625. break
  626. }
  627. }
  628. // 修改页面容量
  629. const handleCurrentChange = () => {
  630. switch (params.type) {
  631. case 'getTableData':
  632. getTableData()
  633. break
  634. case 'getLocal':
  635. getLocal()
  636. break
  637. default:
  638. break
  639. }
  640. }
  641. // 搜索
  642. const handlerSearch = () => {
  643. params.search = searchInfo.value
  644. params.type = 'getLocal'
  645. page.value = 1
  646. handleCurrentChange()
  647. }
  648. // 新增数据
  649. const handleShowAdd = async () => {
  650. type.value = '新增';
  651. console.log(currentRow.value);
  652. const res = await getSpotInfo({ UniqId: minUniqId.value });
  653. if (res.code === 0) {
  654. let sczl_rq = new Date();
  655. sczl_rq.setDate(sczl_rq.getDate() - 0); // 今天的前N天的日期,N自定义
  656. res.data[0].Sczl_rq = `${sczl_rq.getFullYear()}-${sczl_rq.getMonth() + 1}-${sczl_rq.getDate()}`;
  657. Object.assign(detailData, res.data[0]);
  658. detailData.UniqId = currentRow.value;
  659. // dialogFormVisible.value = true
  660. showDialog()
  661. }
  662. };
  663. // type.value='add'
  664. // Object.assign(detailData);
  665. // dialogFormVisible.value = true
  666. // };
  667. // ============== 详情展示 ===============
  668. const detailData = reactive({})
  669. // 展示详情
  670. const getDetailData = async(row) => {
  671. console.log(row.UniqId)
  672. const { UniqId } = row
  673. type.value='查改'
  674. const res = await getSpotInfo({ UniqId })
  675. if (res.code === 0) {
  676. Object.assign(detailData, res.data[0])
  677. detailData.UniqId = UniqId
  678. // dialogFormVisible.value = true
  679. showDialog()
  680. }
  681. }
  682. const currentRow = ref()
  683. const handleSelectChange = (row, column, event) => {
  684. currentRow.value = row.UniqId
  685. }
  686. // 弹窗确定更新数据
  687. const enterDialog = async() => {
  688. // const obj = { ...detailData }
  689. console.log(type.value)
  690. if (type.value === '查改') {
  691. updateDetailData()
  692. } else if (type.value === '新增') {
  693. addDetailData()
  694. }else {
  695. console.log(type)
  696. }
  697. }
  698. const addDetailData = async() => {
  699. const obj = {}
  700. Object.assign(obj, detailData)
  701. delete obj.name
  702. delete obj.Gd_cpmc
  703. delete obj.sczl_gxh
  704. const res = await add(obj)
  705. if (res.code === 0) {
  706. ElMessage({
  707. type: 'success',
  708. message: '新增成功'
  709. })
  710. dialogFormVisible.value = false
  711. }
  712. }
  713. const updateDetailData = async() => {
  714. const obj = {}
  715. Object.assign(obj, detailData)
  716. delete obj.name
  717. delete obj.Gd_cpmc
  718. delete obj.sczl_gxh
  719. const res = await updateSpotData(obj)
  720. if (res.code === 0) {
  721. ElMessage({
  722. type: 'success',
  723. message: '更新成功'
  724. })
  725. dialogFormVisible.value = false
  726. }
  727. }
  728. // 获取需要的字典 可能为空 按需保留
  729. const setOptions = async() => {
  730. }
  731. // 获取需要的字典 可能为空 按需保留
  732. setOptions()
  733. // 多选数据
  734. const multipleSelection = ref([])
  735. // 多选
  736. const handleSelectionChange = (val) => {
  737. multipleSelection.value = val
  738. }
  739. // 删除行
  740. const deleteRow = (row) => {
  741. ElMessageBox.confirm('确定要删除吗?', '提示', {
  742. confirmButtonText: '确定',
  743. cancelButtonText: '取消',
  744. type: 'warning'
  745. }).then(() => {
  746. deleteCompanyFunc(row)
  747. })
  748. }
  749. // 批量删除控制标记
  750. const deleteVisible = ref(false)
  751. // 多选删除
  752. const onDelete = async() => {
  753. const ids = []
  754. if (multipleSelection.value.length === 0) {
  755. ElMessage({
  756. type: 'warning',
  757. message: '请选择要删除的数据'
  758. })
  759. return
  760. }
  761. multipleSelection.value &&
  762. multipleSelection.value.map(item => {
  763. ids.push(item.ID)
  764. })
  765. const res = await deleteCompanyByIds({ ids })
  766. if (res.code === 0) {
  767. ElMessage({
  768. type: 'success',
  769. message: '删除成功'
  770. })
  771. if (tableData.value.length === ids.length && page.value > 1) {
  772. page.value--
  773. }
  774. deleteVisible.value = false
  775. getTableData()
  776. }
  777. }
  778. // 行为控制标记(弹窗内部需要增还是改)
  779. const type = ref('')
  780. // 更新行
  781. // 删除行
  782. const deleteCompanyFunc = async(row) => {
  783. const res = await deleteCompany({ ID: row.ID })
  784. if (res.code === 0) {
  785. ElMessage({
  786. type: 'success',
  787. message: '删除成功'
  788. })
  789. if (tableData.value.length === 1 && page.value > 1) {
  790. page.value--
  791. }
  792. getTableData()
  793. }
  794. }
  795. // 弹窗控制标记
  796. const dialogFormVisible = ref(false)
  797. // 查看详情控制标记
  798. const detailShow = ref(false)
  799. // 打开详情弹窗
  800. const openDetailShow = () => {
  801. detailShow.value = true
  802. }
  803. // 打开详情
  804. const getDetails = async(row) => {
  805. // 打开弹窗
  806. const res = await findCompany({ ID: row.ID })
  807. if (res.code === 0) {
  808. formData.value = res.data.recompany
  809. openDetailShow()
  810. }
  811. }
  812. // 关闭详情弹窗
  813. const closeDetailShow = () => {
  814. detailShow.value = false
  815. formData.value = {
  816. address: '',
  817. image: '',
  818. name: '',
  819. }
  820. }
  821. // 打开弹窗
  822. const openDialog = () => {
  823. type.value = 'create'
  824. // dialogFormVisible.value = true
  825. showDialog()
  826. }
  827. // 关闭弹窗
  828. const closeDialog = () => {
  829. dialogFormVisible.value = false
  830. formData.value = {
  831. address: '',
  832. image: '',
  833. name: '',
  834. }
  835. }
  836. // 开启弹窗
  837. const showDialog = () => {
  838. dialogFormVisible.value = true
  839. // 在 setTimeout 中获取元素,确保在 DOM 渲染完毕后执行
  840. // setTimeout(() => {
  841. // formElements = document.getElementById('detail-form').elements
  842. // formElements[0].focus()
  843. // }, 0)
  844. }
  845. const ent1 = (event) => {
  846. const inputs = document.getElementsByTagName('input');
  847. const currentIndex = Array.from(inputs).indexOf(event.target);
  848. if (event.keyCode === 13 || event.keyCode === 40) { // Enter 或向下箭头
  849. for (let i = currentIndex + 1; i < inputs.length; i++) {
  850. if (!inputs[i].readOnly) {
  851. nextTick(()=>{
  852. inputs[i].focus();
  853. inputs[i].select();
  854. })
  855. break;
  856. }
  857. }
  858. } else if (event.keyCode === 38) { // 向上箭头
  859. for (let i = currentIndex - 1; i >= 0; i--) {
  860. if (!inputs[i].readOnly) {
  861. nextTick(()=>{
  862. inputs[i].focus();
  863. inputs[i].select();
  864. })
  865. break;
  866. }
  867. }
  868. } else if (event.keyCode === 8) { // 删除箭头
  869. if (event.target.selectionStart === 0) {
  870. for (let i = currentIndex - 1; i >= 0; i--) {
  871. if (!inputs[i].readOnly) {
  872. nextTick(()=>{
  873. inputs[i].focus();
  874. inputs[i].setSelectionRange(0, 0);
  875. })
  876. break;
  877. }
  878. }
  879. }
  880. } else if (event.keyCode === 37) { // 向左箭头
  881. if (event.target.selectionStart === 0) {
  882. for (let i = currentIndex - 1; i >= 0; i--) {
  883. if (!inputs[i].readOnly) {
  884. nextTick(()=>{
  885. inputs[i].focus();
  886. inputs[i].select();
  887. })
  888. break;
  889. }
  890. }
  891. }
  892. } else if (event.keyCode === 39) { // 向右箭头
  893. if (event.target.selectionStart === event.target.value.length) {
  894. for (let i = currentIndex + 1; i < inputs.length; i++) {
  895. if (!inputs[i].readOnly) {
  896. nextTick(()=>{
  897. inputs[i].focus();
  898. inputs[i].select();
  899. })
  900. break;
  901. }
  902. }
  903. }
  904. }
  905. }
  906. </script>
  907. <style scoped>
  908. .JKWTree-container {
  909. display: flex;
  910. }
  911. .JKWTree-tree {
  912. width: 300px;
  913. background-color: #fff;
  914. padding: 10px;
  915. margin-right: 20px;
  916. }
  917. .JKWTree-tree h3 {
  918. font-size: 15px;
  919. font-weight: 700;
  920. margin: 10px 0;
  921. }
  922. .JKWTree-content {
  923. flex: 1;
  924. }
  925. /* 选中某行时的背景色 */
  926. :deep(.el-table__body tr.current-row) > td {
  927. background: #ff80ff !important;
  928. }
  929. .bt{
  930. margin-left: 2px !important;
  931. padding: 3px !important;
  932. font-size: 12px;
  933. }
  934. :deep(.el-table td .cell) {
  935. line-height: 30px !important;
  936. }
  937. </style>