chengpinrucang.vue 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218
  1. <template>
  2. <div>
  3. <!-- 左侧树形结构 -->
  4. <el-container>
  5. <el-aside width="250px">
  6. <div class="JKWTree-tree">
  7. <h3>成品入仓管理</h3>
  8. <el-tree :data="treeData" :props="defaultProps" highlight-current="true"
  9. @node-click="handleNodeClick"></el-tree>
  10. </div>
  11. </el-aside>
  12. <el-container>
  13. <el-main>
  14. <!-- 按钮区域 -->
  15. <div class="gva-table-box">
  16. <el-form-item>
  17. <el-input v-model="positionvalue" placeholder="输入工单编号或产品名称" style="width: 180px;"/>
  18. <el-button type="primary" class="search" icon="search" @click="onSearch"></el-button>
  19. <el-button type="primary" class="bt" @click="onDel">删除</el-button>
  20. <el-button type="primary" class="bt" @click="onSMB">入仓末板数据统计</el-button>
  21. <el-button type="primary" class="bt" @click="onDay">各日统计</el-button>
  22. <el-button type="primary" class="bt" @click="onAdd">新增</el-button>
  23. <div style="margin-left: auto;">
  24. <el-button type="primary" class="bt" icon="Download" @click="exportExcel">导出到Excel</el-button>
  25. </div>
  26. </el-form-item>
  27. <!-- 数据展示 -->
  28. <el-table ref="multipleTable" style="width: 100%" tooltip-effect="dark" :data="tableData" row-key="ID" @row-click="Click"
  29. highlight-current-row="true" border @selection-change="handleSelectionChange" :show-overflow-tooltip="true" @row-dblclick="doubleClick">
  30. <el-table-column type="selection" width="55" />
  31. <el-table-column align="left" sortable label="入仓类型" prop="入仓类型" width="120"/>
  32. <el-table-column align="left" sortable label="仓库编号" prop="仓库编号" width="120"/>
  33. <el-table-column align="left" sortable label="仓库名称" prop="仓库名称" width="120"/>
  34. <el-table-column align="left" sortable label="入仓单号" prop="jjcp_num" width="120"/>
  35. <el-table-column align="left" sortable label="工单编号" prop="jjcp_gdbh" width="160"/>
  36. <el-table-column align="left" sortable label="印件号" prop="jjcp_yjno" width="160"/>
  37. <el-table-column align="left" sortable label="入仓数量" prop="jjcp_sl" width="120"/>
  38. <el-table-column align="left" sortable label="累计入仓数量" prop="jjcp_sls" width="140"/>
  39. <el-table-column align="left" sortable label="订单数量" prop="订单数量" width="120"/>
  40. <el-table-column align="left" sortable label="完成率" prop="完成率" width="120"/>
  41. <el-table-column align="left" sortable label="单位" prop="jjcp_dw" width="120"/>
  42. <el-table-column align="left" sortable label="入仓日期" prop="jjcp_sj" width="160"/>
  43. <el-table-column align="left" sortable label="首末版" prop="jjcp_smb" width="160"/>
  44. <el-table-column align="left" sortable label="印件代号" prop="jjcp_cpdh" width="120"/>
  45. <el-table-column align="left" sortable label="印件名称" prop="jjcp_cpmc" width="120"/>
  46. <el-table-column align="left" sortable label="产品编号" prop="成品编码" width="120"/>
  47. <el-table-column align="left" sortable label="产品名称" prop="成品名称" width="120"/>
  48. <el-table-column align="left" sortable label="客户料号" prop="客户料号" width="120"/>
  49. <el-table-column align="left" sortable label="备注" prop="jjcp_desc" width="160"/>
  50. <el-table-column align="left" sortable label="客户编号" prop="客户编号" width="160"/>
  51. <el-table-column align="left" sortable label="客户名称" prop="Gd_客户名称" width="120"/>
  52. <el-table-column align="left" sortable label="最近入仓日期" prop="最近入仓日期" width="140"/>
  53. <el-table-column align="left" sortable label="机型备注" prop="机型备注" width="120"/>
  54. <el-table-column align="left" sortable label="创建用户" prop="Sys_id" width="120"/>
  55. <el-table-column align="left" sortable label="创建时间" prop="sys_rq" width="160"/>
  56. <el-table-column align="left" sortable label="修改时间" prop="mod_rq" width="160"/>
  57. <el-table-column align="left" sortable label="UNIQID" prop="UniqId" width="120"/>
  58. </el-table>
  59. <!-- 分页 -->
  60. <div class="gva-pagination">
  61. <el-pagination layout="total, sizes, prev, pager, next, jumper" v-model:current-page="page"
  62. v-model:page-size="limit"
  63. :page-sizes="[10, 30, 50, 100]" :total="total" @current-change="handleCurrentChange"
  64. @size-change="handleSizeChange" />
  65. </div>
  66. </div>
  67. <!-- 弹出框 -->
  68. <el-dialog v-model="dialogFormVisible" :before-close="closeDialog" :title="type === 'create' ? '添加' : '详情'"
  69. destroy-on-close width="800px">
  70. <!-- <el-scrollbar height="500px"> -->
  71. <el-form :model="formData" label-position="right" label-width="75px" ref="elFormRef" :rules="rule">
  72. <el-row :gutter="24">
  73. <el-col :span="7">
  74. <el-form-item label="入仓类型" prop="id">
  75. <el-input v-model="formData.入仓类型" id="入仓类型" @keydown="ent($event, '入仓备注', '入仓类型', '仓库编号')" :clearable="true" style="width: 120px;" />
  76. </el-form-item>
  77. </el-col>
  78. <el-col :span="17">
  79. <el-form-item label="仓库" prop="name" label-width="40px">
  80. <el-input v-model="formData.仓库编号" id="仓库编号" @keydown="ent($event, '入仓类型', '仓库编号', '仓库名称')" :clearable="true" style="width: 120px;" />
  81. <el-input v-model="formData.仓库名称" id="仓库名称" @keydown="ent($event, '仓库编号', '仓库名称', '单据编号')" :clearable="true" style="width: 120px;" />
  82. </el-form-item>
  83. </el-col>
  84. </el-row>
  85. <el-row :gutter="24">
  86. <el-col :span="7">
  87. <el-form-item label="单据编号" prop="id">
  88. <el-input v-model="formData.jjcp_num" id="单据编号" @keydown="ent($event, '仓库名称', '单据编号', '工单编号')" :clearable="true" style="width: 120px;" />
  89. </el-form-item>
  90. </el-col>
  91. </el-row>
  92. <el-row :gutter="24">
  93. <el-col :span="7">
  94. <el-form-item label="工单编号" prop="id">
  95. <el-input v-model="formData.jjcp_gdbh" id="工单编号" @keydown="ent($event, '单据编号', '工单编号', '客户料号')" :clearable="true" style="width: 120px;" />
  96. </el-form-item>
  97. </el-col>
  98. <el-col :span="5">
  99. <el-form-item label="印件号" prop="name" label-width="55px">
  100. <el-input v-model="formData.jjcp_yjno" id="印件号" disabled :clearable="true" style="width: 50px;" />
  101. </el-form-item>
  102. </el-col>
  103. <el-col :span="12">
  104. <el-form-item label="订单编号" prop="name">
  105. <el-input v-model="formData.订单编号" id="订单编号" disabled :clearable="true" style="width: 120px;" />
  106. </el-form-item>
  107. </el-col>
  108. </el-row>
  109. <el-row :gutter="24">
  110. <el-col :span="24">
  111. <el-form-item label="印件编号" prop="id">
  112. <el-input v-model="formData.jjcp_cpdh" id="印件编号" disabled :clearable="true" style="width: 120px;" />
  113. <el-input v-model="formData.jjcp_cpmc" id="jjcp_cpmc" disabled :clearable="true" style="width: 500px; margin-left: 10px;" />
  114. </el-form-item>
  115. </el-col>
  116. </el-row>
  117. <el-row :gutter="24">
  118. <el-col :span="24">
  119. <el-form-item label="产品编号" prop="id">
  120. <el-input v-model="formData.成品编码" id="产品编号" disabled :clearable="true" style="width: 120px;" />
  121. <el-input v-model="formData.成品名称" id="成品名称" disabled :clearable="true" style="width: 500px; margin-left: 10px;" />
  122. </el-form-item>
  123. </el-col>
  124. </el-row>
  125. <el-row :gutter="24">
  126. <el-col :span="7">
  127. <el-form-item label="客户料号" prop="id">
  128. <el-input v-model="formData.客户料号" id="客户料号" @keydown="ent($event, '工单编号', '客户料号', '首末板')" :clearable="true" style="width: 120px;" />
  129. </el-form-item>
  130. </el-col>
  131. </el-row>
  132. <el-row :gutter="24">
  133. <el-col :span="7">
  134. <el-form-item label="首末板" prop="id">
  135. <el-input v-model="formData.jjcp_smb" id="首末板" @keydown="ent($event, '客户料号', '首末板', '入仓时间')" :clearable="true" style="width: 120px;" />
  136. </el-form-item>
  137. </el-col>
  138. <el-col :span="17">
  139. <el-form-item label="入仓时间" prop="id">
  140. <el-date-picker v-model="formData.jjcp_sj" type="datetime" format="YYYY/MM/DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss"id="入仓时间" @keydown="ent($event, '首末板', '入仓时间', '入仓数量')" style="width: 200px;"/>
  141. <!-- <el-input type="datetime" v-model="formData.jjcp_sj" id="入仓时间" @keydown="ent($event, '首末板', '入仓时间', '入仓数量')" :clearable="true" style="width: 120px;" /> -->
  142. </el-form-item>
  143. </el-col>
  144. </el-row>
  145. <el-row :gutter="24">
  146. <el-col :span="7">
  147. <el-form-item label="入仓数量" prop="id">
  148. <el-input v-model="formData.jjcp_sl" id="入仓数量" @keydown="ent($event, '入仓时间', '入仓数量', '入仓单位')" :clearable="true" style="width: 120px;" />
  149. </el-form-item>
  150. </el-col>
  151. <el-col :span="17">
  152. <el-form-item label="入仓单位" prop="id">
  153. <el-input v-model="formData.jjcp_dw" id="入仓单位" @keydown="ent($event, '入仓数量', '入仓单位', '订单数量')" :clearable="true" style="width: 120px;" />
  154. </el-form-item>
  155. </el-col>
  156. </el-row>
  157. <el-row :gutter="24">
  158. <el-col :span="7">
  159. <el-form-item label="订单数量" prop="id">
  160. <el-input v-model="formData.订单数量" id="订单数量" @blur="" @keydown="ent($event, '入仓单位', '订单数量', '已完工')" :clearable="true" style="width: 120px;" />
  161. </el-form-item>
  162. </el-col>
  163. <el-col :span="7">
  164. <el-form-item label="已完工" prop="id">
  165. <el-input v-model="formData.jjcp_sls" id="已完工" @keydown="ent($event, '订单数量', '已完工', '机型备注')" :clearable="true" style="width: 120px;" />
  166. </el-form-item>
  167. </el-col>
  168. <el-col :span="8">
  169. <el-form-item label="机型备注" prop="id">
  170. <el-input v-model="formData.机型备注" id="机型备注" @keydown="ent($event, '已完工', '机型备注', '入仓备注')" :clearable="true" style="width: 300px;"/>
  171. </el-form-item>
  172. </el-col>
  173. </el-row>
  174. <el-row :gutter="24">
  175. <el-col :span="22">
  176. <el-form-item label="入仓备注" prop="id">
  177. <el-input v-model="formData.jjcp_desc" id="入仓备注" @keydown="ent($event, '机型备注', '入仓备注', '入仓类型')":clearable="true" />
  178. </el-form-item>
  179. </el-col>
  180. </el-row>
  181. </el-form>
  182. <!-- </el-scrollbar> -->
  183. <template #footer>
  184. <div class="dialog-footer">
  185. <el-button @click="closeDialog">取 消</el-button>
  186. <el-button type="primary" @click="enterDialog">确 定</el-button>
  187. </div>
  188. </template>
  189. </el-dialog>
  190. <!-- 仓库编号选择 -->
  191. <el-dialog v-model="CKVisible" title="选择"
  192. destroy-on-close width="600px" @keydown="selectCK($event)" >
  193. <el-table tooltip-effect="dark"
  194. :data="CKselectData" row-key="ID"
  195. highlight-current-row="true" border style="width:100%"
  196. @row-dblclick="CKSelectClick"
  197. ref="table2"
  198. >
  199. <el-table-column prop="编号" label="编号" width="200" />
  200. <el-table-column prop="名称" label="名称" width="200" />
  201. </el-table>
  202. </el-dialog>
  203. <!-- 入仓类型选择 -->
  204. <el-dialog v-model="RCVisible" title="选择"
  205. destroy-on-close width="400px" @keydown="selectRC($event)" >
  206. <el-table tooltip-effect="dark"
  207. :data="RCselectData" row-key="ID"
  208. highlight-current-row="true" border style="width:100%"
  209. @row-dblclick="RCSelectClick"
  210. ref="tableRC"
  211. >
  212. <el-table-column prop="入仓类型" label="入仓类型" width="360" />
  213. </el-table>
  214. </el-dialog>
  215. <!-- 首末板选择 -->
  216. <el-dialog v-model="SMBVisible" title="选择"
  217. destroy-on-close width="200px" @keydown="selectSMB($event)" >
  218. <el-table tooltip-effect="dark" :data="SMBselectData" row-key="ID"
  219. highlight-current-row="true" border style="width:100%"
  220. :row-style="{ height: '30px' }"
  221. @row-dblclick="SMBSelectClick"
  222. ref="tableSMB"
  223. >
  224. <el-table-column prop="jjcp_smb" label="" width="160" />
  225. </el-table>
  226. </el-dialog>
  227. <el-dialog v-model="GDVisible" title="选择" destroy-on-close width="600px" @keydown="selectGD($event)" >
  228. <el-table tooltip-effect="dark" :data="GDselectData"
  229. row-key="ID" highlight-current-row="true" border
  230. style="width:100%" @row-dblclick="GDSelectClick"
  231. ref="table3"
  232. >
  233. <el-table-column prop="gdyj" label="工单印件" width="560" />
  234. </el-table>
  235. </el-dialog>
  236. <el-dialog
  237. v-model="TJVisible"
  238. title="各日统计"
  239. destroy-on-close
  240. width="80%px;"
  241. style="height: 80%;"
  242. >
  243. <el-row :gutter="20">
  244. <el-col :span="41">
  245. <el-form-item label="关键字" prop="id">
  246. <el-input v-model="keywords" :clearable="true" placeholder="2023.12.14" />
  247. </el-form-item>
  248. </el-col>
  249. </el-row>
  250. <el-table
  251. tooltip-effect="dark"
  252. :data="TJselectData"
  253. row-key="ID"
  254. highlight-current-row="true"
  255. border
  256. style="width:100%"
  257. height="300px"
  258. @row-dblclick="TJSelectClick"
  259. >
  260. <el-table-column
  261. prop="jjcp_sj"
  262. label="完工日期"
  263. width="200"
  264. />
  265. <el-table-column
  266. prop="jjcp_gdbh"
  267. label="工单编号"
  268. width="200"
  269. />
  270. <el-table-column
  271. prop="jjcp_cpmc"
  272. label="印件(产品名称)"
  273. width="200"
  274. />
  275. <el-table-column
  276. prop="实际投料"
  277. label="实际投料"
  278. width="200"
  279. />
  280. <el-table-column
  281. prop="入仓数量"
  282. label="入仓数量"
  283. width="200"
  284. />
  285. <el-table-column
  286. prop="投入产出率"
  287. label="投入产出率"
  288. width="200"
  289. />
  290. </el-table>
  291. </el-dialog>
  292. <el-dialog
  293. v-model="SMVisible"
  294. title="选择"
  295. destroy-on-close
  296. width="1200px"
  297. >
  298. <el-table
  299. tooltip-effect="dark"
  300. :data="SMselectData"
  301. row-key="ID"
  302. highlight-current-row="true"
  303. border
  304. style="width:180%"
  305. height="500px"
  306. @row-dblclick="SMSelectClick"
  307. >
  308. <el-table-column
  309. prop="Yj_Gdbh"
  310. label="工单编号"
  311. width="180"
  312. />
  313. <el-table-column
  314. prop="yj_Yjno"
  315. label="印件号"
  316. width="200"
  317. />
  318. <el-table-column
  319. prop="yj_yjmc"
  320. label="印件名称"
  321. width="200"
  322. />
  323. <el-table-column
  324. prop="yj_成品数量"
  325. label="计划交货数量"
  326. width="200"
  327. />
  328. <el-table-column
  329. prop="yj_实际投料"
  330. label="印件投料"
  331. width="200"
  332. />
  333. <el-table-column
  334. prop="jjcp_sls"
  335. label="包装产量"
  336. width="200"
  337. />
  338. <el-table-column
  339. prop="sczl_cls"
  340. label="入仓数量"
  341. width="200"
  342. />
  343. <el-table-column
  344. prop="jjcp_smb"
  345. label="缺数"
  346. width="200"
  347. />
  348. <el-table-column
  349. prop="客户料号"
  350. label="完工"
  351. width="200"
  352. />
  353. <el-table-column
  354. prop="jjcp_sj"
  355. label="最近入仓时间"
  356. width="200"
  357. />
  358. </el-table>
  359. </el-dialog>
  360. </el-main>
  361. </el-container>
  362. </el-container>
  363. </div>
  364. </template>
  365. <script setup>
  366. import {
  367. finishedTab,
  368. finishedTabByGdbh,
  369. finishedList,
  370. finishedlocate,
  371. finishedInfo,
  372. finishedgetCk,
  373. finishedgetGd,
  374. finishedgetGdsl,
  375. finisheddel,
  376. getDayList,
  377. mbList,
  378. finishedadd,
  379. finishedEdit
  380. } from '@/api/jixiaoguanli/jitairibaobiao'
  381. // 全量引入格式化工具 请按需保留
  382. import { getDictFunc, formatDate, formatBoolean, filterDict, ReturnArrImg, onDownloadFile } from '@/utils/format'
  383. import { ElMessage, ElMessageBox } from 'element-plus'
  384. import { Search, Refresh, Download } from '@element-plus/icons-vue'
  385. import { ref, reactive, onMounted, onBeforeMount } from 'vue'
  386. import { getPackingSideTable, getPackingTable } from '@/api/mes_api_gty/myapi'
  387. import { TRUE } from 'sass'
  388. import { useUserStore } from '@/pinia/modules/user'
  389. const userStore = useUserStore()
  390. const sys_id='['+userStore.userInfo.userName+'/'+userStore.userInfo.nickName+']'
  391. defineOptions({
  392. name: '06-packingDocuments'
  393. })
  394. // 侧边栏数据请求
  395. const treeData = reactive([]);
  396. const getTabdata = async () => {
  397. //接口调用函数
  398. const response = await finishedTab();
  399. console.log(response)
  400. const transformedData = response.data.map(item => ({
  401. label: `${item.date.replace(/-/g, '.')}【单据数: ${item.counts}张】`,
  402. children: item.sys.map(sysItem => ({
  403. label: `${sysItem.sys_id} 【记录数: ${sysItem.count}张】`,
  404. params: {
  405. date: item.date.replace(/\./g, '-'),
  406. sys_id: sysItem.sys_id,
  407. total: sysItem.count,
  408. },
  409. })),
  410. }));
  411. treeData.splice(0, treeData.length, ...transformedData);
  412. }
  413. const rqHandleFocus = () =>{
  414. if(formData.value.jjcp_sj==''){
  415. formData.value.jjcp_sj = new Date(new Date().getTime() + 8 * 60 * 60 * 1000).toISOString().slice(0, 19).replace('T', ' ');
  416. }
  417. }
  418. getTabdata();
  419. // 自动化生成的字典(可能为空)以及字段
  420. const formData = ref({
  421. 入仓类型: "",
  422. 仓库编号: "",
  423. 仓库名称: "",
  424. jjcp_num: "",
  425. jjcp_gdbh: "",
  426. jjcp_yjno: "",
  427. 订单编号: "",
  428. jjcp_cpdh: "",
  429. jjcp_cpmc: "",
  430. 成品编码: "",
  431. 成品名称: "",
  432. 客户料号: "",
  433. jjcp_smb: "",
  434. jjcp_sj: "",
  435. jjcp_sl: "",
  436. jjcp_dw: "",
  437. 订单数量: "",
  438. jjcp_sls: "",
  439. 机型备注: "",
  440. jjcp_desc: "",
  441. })
  442. const initFormData = () => {
  443. formData.value = {
  444. 入仓类型: "",
  445. 仓库编号: "",
  446. 仓库名称: "",
  447. jjcp_num: "",
  448. jjcp_gdbh: "",
  449. jjcp_yjno: "",
  450. 订单编号: "",
  451. jjcp_cpdh: "",
  452. jjcp_cpmc: "",
  453. 成品编码: "",
  454. 成品名称: "",
  455. 客户料号: "",
  456. jjcp_smb: "",
  457. jjcp_sj: "",
  458. jjcp_sl: "",
  459. jjcp_dw: "",
  460. 订单数量: "",
  461. jjcp_sls: "",
  462. 机型备注: "",
  463. jjcp_desc: "",
  464. }
  465. }
  466. // 验证规则
  467. const rule = reactive({
  468. })
  469. const elFormRef = ref()
  470. const elSearchFormRef = ref()
  471. // =========== 表格控制部分 ===========
  472. const tableData = reactive([])
  473. const detailData = reactive([
  474. ])
  475. const total = ref(0)
  476. const page = ref(1)
  477. const limit = ref(10)
  478. const searchInfo = ref('')
  479. const params = {
  480. type: '',
  481. date: '',
  482. sys_id: '',
  483. gdbh: '',
  484. }
  485. // 分页设置
  486. const handleSizeChange = (val) => {
  487. switch (params.type) {
  488. case 'getTableData':
  489. getTableData()
  490. break
  491. case 'getLocateTable':
  492. GetmachineLocate()
  493. break
  494. default:
  495. break
  496. }
  497. }
  498. // 页面跳转
  499. const handleCurrentChange = (val) => {
  500. switch (params.type) {
  501. case 'getTableData':
  502. getTableData()
  503. break
  504. case 'getLocateTable':
  505. GetmachineLocate()
  506. break
  507. default:
  508. break
  509. }
  510. }
  511. // 查询
  512. const getTableData = async () => {
  513. const response = await finishedList(params);
  514. console.log(response)
  515. if (response.code === 0) {
  516. tableData.splice(0, tableData.length, ...response.data.rows);
  517. }
  518. }
  519. const handleNodeClick = (node, check) => {
  520. //存放当前节点的nodeId
  521. if (node.params) {
  522. params.date = node.params.date;
  523. params.sys_id = node.params.sys_id;
  524. total.value = node.params.total;
  525. getTableData();
  526. }
  527. }
  528. let positionvalue=ref()
  529. let keywords=ref()
  530. // 搜索
  531. function onSearch() {
  532. params.gdbh = positionvalue.value
  533. params.type = 'getLocateTable'
  534. page.value = 1
  535. GetmachineLocate()
  536. }
  537. const ADD=ref('0')
  538. //新增
  539. function onAdd() {
  540. // GetInfo(lastCellValue)
  541. initFormData()
  542. formData.value.jjcp_sj = new Date(new Date().getTime() + 8 * 60 * 60 * 1000).toISOString().slice(0, 19).replace('T', ' ');
  543. type.value='create'
  544. dialogFormVisible.value = true
  545. }
  546. //删除
  547. function onDel() {
  548. Del()
  549. }
  550. //删除
  551. const Del = async () => {
  552. const response = await finisheddel({UniqId:lastCellValue});
  553. if (response.code === 0) {
  554. ElMessage({
  555. type: 'success',
  556. message: '删除成功',
  557. })
  558. }
  559. getTableData()
  560. }
  561. const TJVisible = ref(false)
  562. const TJselectData = ref([]);
  563. //每日统计
  564. function onDay() {
  565. GetDayList()
  566. TJVisible.value=true
  567. }
  568. const GetDayList = async (value) => {
  569. const response = await getDayList({key_word:'',page:page.value,limit:limit.value});
  570. console.log(response.data)
  571. if (response.code === 0) {
  572. TJselectData.value=response.data.rows
  573. console.log(TJselectData)
  574. }
  575. }
  576. const SMVisible = ref(false)
  577. const SMselectData = ref([]);
  578. //首末版统计
  579. function onSMB() {
  580. MbList()
  581. SMVisible.value=true
  582. }
  583. const MbList = async (value) => {
  584. const response = await mbList();
  585. console.log(response.data)
  586. if (response.code === 0) {
  587. SMselectData.value=response.data.rows
  588. console.log(TJselectData)
  589. }
  590. }
  591. //定位
  592. const GetmachineLocate = async () => {
  593. const response = await finishedlocate({
  594. gdbh: params.gdbh,
  595. page: page.value.toString(), limit: limit.value.toString(),
  596. })
  597. console.log(response)
  598. if (response.code === 0) {
  599. const processedData = response.data.rows.map(item => {
  600. return {
  601. ...item,
  602. combinedProp: item.sczl_gdbh + '--'+item.yj_yjmc,
  603. combinedProp2: item.sczl_yjgx + '-'+item.sczl_gxmc
  604. };
  605. });
  606. total.value = response.data.total
  607. tableData.splice(0, tableData.length, ...processedData);
  608. }
  609. }
  610. //入仓类型回车事件
  611. const getRCsubmit = (event) => {
  612. GetRC()
  613. }
  614. const RCVisible = ref(false)
  615. const RCselectData = reactive([])
  616. //获取仓库信息
  617. const GetRC = async () => {
  618. const data = [{'入仓类型':'产品入库'},{'入仓类型':'委外入库'},{'入仓类型':'采购入库'}]
  619. RCselectData.splice(0, RCselectData.length, ...data)
  620. setRCCurrent(RCselectData[0])
  621. RCVisible.value=true
  622. }
  623. //选择
  624. const RCSelectClick = (row, column, event) => {
  625. const { 入仓类型 } = row
  626. formData.value.入仓类型=入仓类型
  627. RCVisible.value = false
  628. }
  629. const tableRC=ref()
  630. const setRCCurrent = (row) => {
  631. setTimeout(()=>{
  632. tableRC.value?.setCurrentRow(row)
  633. const { 入仓类型 } = row
  634. formData.value.入仓类型=入仓类型
  635. })
  636. }
  637. const RCIndex = ref(0);
  638. const RCCurrent = ref(0);
  639. const selectRC = (event) => {
  640. if (event.keyCode === 40) { // 向下箭头
  641. if (RCIndex.value < RCselectData.length - 1) {
  642. RCIndex.value++;
  643. setRCCurrent(RCselectData[RCIndex.value]);
  644. } else {
  645. RCIndex.value = 0;
  646. setRCCurrent(RCselectData[RCIndex.value]); // 到达最后一行时回到第一行
  647. }
  648. } else if (event.keyCode === 38) { // 向上箭头
  649. if (RCIndex.value > 0) {
  650. RCIndex.value--;
  651. setRCCurrent(RCselectData[RCIndex.value]);
  652. } else {
  653. RCIndex.value = RCselectData.length - 1;
  654. setRCCurrent(RCselectData[RCIndex.value]); // 到达第一行时回到最后一行
  655. }
  656. } else if (event.keyCode === 13) { // 回车键
  657. RCVisible.value = false
  658. }
  659. }
  660. //仓库编号回车事件
  661. const getCKsubmit = (event) => {
  662. GetCK()
  663. }
  664. const CKVisible = ref(false)
  665. const CKselectData = reactive([])
  666. //获取仓库信息
  667. const GetCK = async () => {
  668. const response = await finishedgetCk();
  669. if (response.code === 0) {
  670. CKselectData.splice(0, CKselectData.length, ...response.data)
  671. setCKCurrent(CKselectData[0])
  672. CKVisible.value=true
  673. }
  674. }
  675. //选择
  676. const CKSelectClick = (row, column, event) => {
  677. const { 编号,名称 } = row
  678. formData.value.仓库编号=编号
  679. formData.value.仓库名称=名称
  680. CKVisible.value = false
  681. }
  682. const table2=ref()
  683. const setCKCurrent = (row) => {
  684. setTimeout(()=>{
  685. table2.value?.setCurrentRow(row)
  686. const { 编号,名称 } = row
  687. formData.value.仓库编号=编号
  688. formData.value.仓库名称=名称
  689. })
  690. }
  691. const CKIndex = ref(0);
  692. const JYCurrent = ref(0);
  693. const selectCK = (event) => {
  694. if (event.keyCode === 40) { // 向下箭头
  695. if (CKIndex.value < CKselectData.length - 1) {
  696. CKIndex.value++;
  697. setCKCurrent(CKselectData[CKIndex.value]);
  698. } else {
  699. CKIndex.value = 0;
  700. setCKCurrent(CKselectData[CKIndex.value]); // 到达最后一行时回到第一行
  701. }
  702. } else if (event.keyCode === 38) { // 向上箭头
  703. if (CKIndex.value > 0) {
  704. CKIndex.value--;
  705. setCKCurrent(CKselectData[CKIndex.value]);
  706. } else {
  707. CKIndex.value = CKselectData.length - 1;
  708. setCKCurrent(CKselectData[CKIndex.value]); // 到达第一行时回到最后一行
  709. }
  710. } else if (event.keyCode === 13) { // 回车键
  711. CKVisible.value = false
  712. }
  713. }
  714. //工单编号回车事件
  715. const getGDsubmit = (event) => {
  716. if(formData.value.jjcp_gdbh==''){
  717. ElMessage({type: 'warning',message: '请填写工单编号'});
  718. return
  719. }
  720. GetGD()
  721. }
  722. const GDVisible = ref(false)
  723. const GDselectData = reactive([])
  724. //获取工单信息
  725. const GetGD = async () => {
  726. const response = await finishedgetGd({gdbh:formData.value.jjcp_gdbh});
  727. if (response.code === 0) {
  728. GDselectData.splice(0, GDselectData.length, ...response.data)
  729. setGDCurrent(GDselectData[0])
  730. GDVisible.value=true
  731. }
  732. }
  733. //选择
  734. const GDSelectClick = (row, column, event) => {
  735. console.log(111)
  736. const { Gd_gdbh,yj_yjno,销售订单号,yj_Yjdh,yj_yjmc,成品代号,成品名称,客户料号,gdyj } = row
  737. formData.value.jjcp_gdbh=Gd_gdbh
  738. formData.value.jjcp_yjno=yj_yjno
  739. formData.value.订单编号=销售订单号
  740. formData.value.jjcp_cpdh=yj_Yjdh
  741. formData.value.jjcp_cpmc=yj_yjmc
  742. formData.value.成品编码=成品代号
  743. formData.value.成品名称=成品名称
  744. formData.value.客户料号=客户料号
  745. finishedgetGdsl({gdbh:formData.value.jjcp_gdbh,cpdh:formData.value.jjcp_cpdh}).then(res =>{
  746. if (res.code === 0) {
  747. formData.value.订单数量 = res.data.订单数量
  748. formData.value.jjcp_sls = res.data.jjcp_sls
  749. }
  750. });
  751. GDVisible.value = false
  752. }
  753. const table3=ref()
  754. const setGDCurrent = (row) => {
  755. setTimeout(()=>{
  756. table3.value?.setCurrentRow(row)
  757. console.log(222)
  758. const { Gd_gdbh,yj_yjno,销售订单号,yj_Yjdh,yj_yjmc,成品代号,成品名称,客户料号,gdyj } = row
  759. formData.value.jjcp_gdbh=Gd_gdbh
  760. formData.value.jjcp_yjno=yj_yjno
  761. formData.value.订单编号=销售订单号
  762. formData.value.jjcp_cpdh=yj_Yjdh
  763. formData.value.jjcp_cpmc=yj_yjmc
  764. formData.value.成品编码=成品代号
  765. formData.value.成品名称=成品名称
  766. formData.value.客户料号=客户料号
  767. finishedgetGdsl({gdbh:formData.value.jjcp_gdbh,cpdh:formData.value.jjcp_cpdh}).then(res =>{
  768. if (res.code === 0) {
  769. formData.value.订单数量 = res.data.订单数量
  770. formData.value.jjcp_sls = res.data.jjcp_sls
  771. }
  772. });
  773. })
  774. }
  775. const GDIndex = ref(0);
  776. const selectGD = (event) => {
  777. if (event.keyCode === 40) { // 向下箭头
  778. if (GDIndex.value < GDselectData.length - 1) {
  779. GDIndex.value++;
  780. setGDCurrent(GDselectData[GDIndex.value]);
  781. } else {
  782. GDIndex.value = 0;
  783. setGDCurrent(GDselectData[GDIndex.value]); // 到达最后一行时回到第一行
  784. }
  785. } else if (event.keyCode === 38) { // 向上箭头
  786. if (GDIndex.value > 0) {
  787. GDIndex.value--;
  788. setGDCurrent(GDselectData[GDIndex.value]);
  789. } else {
  790. GDIndex.value = GDselectData.length - 1;
  791. setGDCurrent(GDselectData[GDIndex.value]); // 到达第一行时回到最后一行
  792. }
  793. } else if (event.keyCode === 13) { // 回车键
  794. GDVisible.value = false
  795. }
  796. }
  797. //获取订单资料
  798. const getSLsubmit = (event) => {
  799. GetSL()
  800. }
  801. //获取工单数量信息
  802. const GetSL = async () => {
  803. if(formData.value.jjcp_cpdh){
  804. }
  805. const response = await finishedgetGdsl({gdbh:formData.value.jjcp_gdbh,cpdh:formData.value.jjcp_cpdh});
  806. console.log(response)
  807. if (response.code === 0) {
  808. formData.value.订单数量=response.data.订单数量
  809. formData.value.jjcp_sls=response.data.jjcp_sls
  810. }
  811. }
  812. //入仓类型回车事件
  813. const getSMBsubmit = (event) => {
  814. GetSMB()
  815. }
  816. const SMBVisible = ref(false)
  817. const SMBselectData = reactive([])
  818. //获取仓库信息
  819. const GetSMB = async () => {
  820. const data = [{'jjcp_smb':''},{'jjcp_smb':'首 板'},{'jjcp_smb':'末 板'},{'jjcp_smb':'首末板'}]
  821. SMBselectData.splice(0, SMBselectData.length, ...data)
  822. setSMBCurrent(SMBselectData[0])
  823. SMBVisible.value=true
  824. }
  825. //选择
  826. const SMBSelectClick = (row, column, event) => {
  827. const { jjcp_smb } = row
  828. formData.value.jjcp_smb=jjcp_smb
  829. SMBVisible.value = false
  830. }
  831. const tableSMB=ref()
  832. const setSMBCurrent = (row) => {
  833. setTimeout(()=>{
  834. tableSMB.value?.setCurrentRow(row)
  835. const { jjcp_smb } = row
  836. formData.value.jjcp_smb=jjcp_smb
  837. })
  838. }
  839. const SMBIndex = ref(0);
  840. const SMBCurrent = ref(0);
  841. const selectSMB = (event) => {
  842. if (event.keyCode === 40) { // 向下箭头
  843. if (SMBIndex.value < SMBselectData.length - 1) {
  844. SMBIndex.value++;
  845. setSMBCurrent(SMBselectData[SMBIndex.value]);
  846. } else {
  847. SMBIndex.value = 0;
  848. setSMBCurrent(SMBselectData[SMBIndex.value]); // 到达最后一行时回到第一行
  849. }
  850. } else if (event.keyCode === 38) { // 向上箭头
  851. if (SMBIndex.value > 0) {
  852. SMBIndex.value--;
  853. setSMBCurrent(SMBselectData[SMBIndex.value]);
  854. } else {
  855. SMBIndex.value = SMBselectData.length - 1;
  856. setSMBCurrent(SMBselectData[SMBIndex.value]); // 到达第一行时回到最后一行
  857. }
  858. } else if (event.keyCode === 13) { // 回车键
  859. SMBVisible.value = false
  860. }
  861. }
  862. // ============== 表格控制部分结束 ===============
  863. // 获取需要的字典 可能为空 按需保留
  864. const setOptions = async () => {}
  865. // 获取需要的字典 可能为空 按需保留
  866. setOptions()
  867. // 多选数据
  868. const multipleSelection = ref([])
  869. // 多选
  870. const handleSelectionChange = (val) => {
  871. if(val.length>0){
  872. // multipleSelection.value = val
  873. const lenth=val.length
  874. // ScrapFactor.gdbh=val[lenth-1].combinedProp.split('-')[0];
  875. // const parts = val[lenth-1].combinedProp2.split('-')
  876. // ScrapFactor.yjno=parts[0];
  877. // ScrapFactor.gxh=parts[1];
  878. // ScrapFactor.type=val[lenth-1].sczl_检验类别
  879. // console.log(ScrapFactor)
  880. lastCellValue=val[lenth-1].UniqId
  881. console.log(val)
  882. val.splice(0, val.length); // 清空 val 数组
  883. console.log(lastCellValue)
  884. }
  885. }
  886. // 批量删除控制标记
  887. const deleteVisible = ref(false)
  888. // 多选删除
  889. const onDelete = async () => {
  890. const ids = []
  891. if (multipleSelection.value.length === 0) {
  892. ElMessage({
  893. type: 'warning',
  894. message: '请选择要删除的数据'
  895. })
  896. return
  897. }
  898. multipleSelection.value &&
  899. multipleSelection.value.map(item => {
  900. ids.push(item.ID)
  901. })
  902. const res = await deleteCompanyByIds({ ids })
  903. if (res.code === 0) {
  904. ElMessage({
  905. type: 'success',
  906. message: '删除成功'
  907. })
  908. if (tableData.value.length === ids.length && page.value > 1) {
  909. page.value--
  910. }
  911. deleteVisible.value = false
  912. getTableData()
  913. }
  914. }
  915. // 行为控制标记(弹窗内部需要增还是改)
  916. const type = ref('')
  917. // 更新行
  918. const updateCompanyFunc = async (row) => {
  919. const res = await findCompany({ ID: row.ID })
  920. type.value = 'update'
  921. if (res.code === 0) {
  922. formData.value = res.data.recompany
  923. dialogFormVisible.value = true
  924. }
  925. }
  926. // 弹窗控制标记
  927. const dialogFormVisible = ref(false)
  928. // 打开弹窗
  929. const openDialog = () => {
  930. type.value = 'create'
  931. dialogFormVisible.value = true
  932. }
  933. // 关闭弹窗
  934. const closeDialog = () => {
  935. dialogFormVisible.value = false
  936. formData.value = {
  937. address: '',
  938. image: '',
  939. name: '',
  940. }
  941. }
  942. // 弹窗确定
  943. const enterDialog = async () => {
  944. if(formData.value.入仓类型==''){
  945. ElMessage({type: 'warning',message: '请选择入仓类型'});
  946. return;
  947. }
  948. if(formData.value.仓库编号==''){
  949. ElMessage({type: 'warning',message: '请选择仓库'});
  950. return;
  951. }
  952. if(formData.value.jjcp_gdbh==''){
  953. ElMessage({type: 'warning',message: '请填写工单编号'});
  954. return;
  955. }
  956. if(formData.value.jjcp_cpdh==''){
  957. ElMessage({type: 'warning',message: '请选择印件'});
  958. return;
  959. }
  960. if(formData.value.jjcp_sl==''){
  961. ElMessage({type: 'warning',message: '请填写入仓数量'});
  962. return;
  963. }
  964. const restoredData = {
  965. Sys_id:sys_id,
  966. 入仓类型:formData.value.入仓类型,
  967. 仓库编号:formData.value.仓库编号,
  968. 仓库名称:formData.value.仓库名称,
  969. jjcp_num:formData.value.jjcp_num,
  970. jjcp_gdbh:formData.value.jjcp_gdbh,
  971. jjcp_yjno:formData.value.jjcp_yjno,
  972. 订单编号:formData.value.订单编号,
  973. jjcp_cpdh:formData.value.jjcp_cpdh,
  974. jjcp_cpmc:formData.value.jjcp_cpmc,
  975. 成品编码:formData.value.成品编码,
  976. 成品名称:formData.value.成品名称,
  977. 客户料号:formData.value.客户料号,
  978. jjcp_smb:formData.value.jjcp_smb,
  979. jjcp_sj:formData.value.jjcp_sj,
  980. jjcp_sl:formData.value.jjcp_sl,
  981. jjcp_dw:formData.value.jjcp_dw,
  982. 机型备注:formData.value.机型备注,
  983. jjcp_desc:formData.value.jjcp_desc,
  984. }
  985. console.log(lastCellValue)
  986. let res
  987. switch (type.value) {
  988. case 'create':
  989. res = await finishedadd(restoredData)
  990. break
  991. case 'update':
  992. restoredData.UniqId = lastCellValue;
  993. res = await finishedEdit(restoredData)
  994. break
  995. default:
  996. // res = await createCompany(formData.value)
  997. break
  998. }
  999. if (res.code === 0) {
  1000. ElMessage({
  1001. type: 'success',
  1002. message: '创建/更改成功'
  1003. })
  1004. closeDialog()
  1005. getTableData()
  1006. }
  1007. dialogFormVisible.value=false
  1008. }
  1009. //键盘 input框跳转
  1010. const ent = (event,id1,id2,id3) => {
  1011. if (event.keyCode === 13 || event.keyCode === 40) { // Enter 或向下箭头
  1012. if(id2=='入仓类型'){
  1013. getRCsubmit()
  1014. }
  1015. if(id2=='仓库编号'){
  1016. getCKsubmit()
  1017. }
  1018. if(id2=='工单编号'){
  1019. getGDsubmit()
  1020. }
  1021. if(id2=='首末板'){
  1022. console.log(1111)
  1023. getSMBsubmit()
  1024. }
  1025. if(id3!=''){
  1026. document.getElementById(id3).focus()
  1027. }
  1028. } else if (event.keyCode === 38) { // 向上箭头
  1029. if(id1!=''){
  1030. document.getElementById(id1).focus()
  1031. }
  1032. }else if (event.keyCode === 8) { // 删除箭头
  1033. if(id1!='' && document.getElementById(id2).value==''){
  1034. document.getElementById(id1).focus()
  1035. }
  1036. console.log(document.getElementById(id2).value)
  1037. }else if (event.keyCode === 37) { // 向左箭头
  1038. if(id1!='' && document.getElementById(id2).selectionStart==0){
  1039. document.getElementById(id1).focus()
  1040. }
  1041. }else if (event.keyCode === 39) { // 向右箭头
  1042. if(id3!='' && document.getElementById(id2).selectionStart == document.getElementById(id2).value.length){
  1043. document.getElementById(id3).focus()
  1044. }
  1045. }
  1046. }
  1047. let table=ref(5);
  1048. let lastCellValue=ref()
  1049. // 双击表格操作
  1050. function doubleClick(row, column, event) {
  1051. type.value = 'update';
  1052. lastCellValue= row['UniqId'];
  1053. table.value=lastCellValue
  1054. dialogFormVisible.value = true
  1055. GetInfo(table.value)
  1056. }
  1057. // 单击表格操作
  1058. function Click(row, column, event) {
  1059. lastCellValue= row['UniqId'];
  1060. console.log(lastCellValue)
  1061. }
  1062. //获取详细信息
  1063. const GetInfo = async (value) => {
  1064. const response = await finishedInfo({UniqId:value});
  1065. if (response.code === 0) {
  1066. formData.value=response.data;
  1067. }
  1068. }
  1069. // 导出excel
  1070. function exportExcel() {
  1071. console.log('导出到excel');
  1072. }
  1073. function openFolderDialog() {
  1074. console.log('导出到excel');
  1075. }
  1076. // 生命周期钩子
  1077. onMounted(async () => {
  1078. });
  1079. </script>
  1080. <style>
  1081. .JKWTree-container {
  1082. display: flex;
  1083. }
  1084. .JKWTree-tree {
  1085. width: 300px;
  1086. background-color: #fff;
  1087. padding: 10px;
  1088. margin-right: 20px;
  1089. }
  1090. .JKWTree-tree h3 {
  1091. font-size: 15px;
  1092. font-weight: 700;
  1093. margin: 10px 0;
  1094. }
  1095. .JKWTree-content {
  1096. flex: 1;
  1097. }
  1098. /* 选中某行时的背景色*/
  1099. .el-table__body tr.current-row>td {
  1100. background: #ff80ff !important;
  1101. /* 背景颜色 */
  1102. }
  1103. </style>
  1104. <style scoped>
  1105. :deep(.el-table td .cell) {
  1106. line-height: 20px !important;
  1107. }
  1108. :deep(.el-tabs__header){
  1109. margin-bottom: 0;
  1110. }
  1111. .search{
  1112. margin-left: 0px !important;
  1113. margin-right: 10px !important;
  1114. }
  1115. .bt{
  1116. margin-left: 5px !important;
  1117. padding: 5px !important;
  1118. font-size: 15px;
  1119. }
  1120. .el-tabs__header{
  1121. margin: 0px !important;
  1122. }
  1123. .gva-table-box{
  1124. padding: 0px !important;
  1125. }
  1126. .mab{
  1127. margin-bottom: 5px;
  1128. }
  1129. </style>