冷凝胶前端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

465 lines
16 KiB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
  1. <script>
  2. import {
  3. printShipmentBox,
  4. removeShipmentBox,
  5. updateShipmentBox,
  6. updateShipmentBoxStatus
  7. } from '../../../../api/shipment/box'
  8. import {
  9. getShipmentRollAllData,
  10. getShipmentRollDataList, printShipmentRoll,
  11. removeShipmentRollData,
  12. saveShipmentRollData
  13. } from '../../../../api/shipment/roll'
  14. import {printShipmentInnerLabel} from '../../label/print_shipment_inner_label'
  15. import {printShipmentBoxLabel} from '../../label/print_shipment_box_label'
  16. import {getWareHouseList} from '../../../../api/material/poReceive'
  17. import {getLocationListForSearch} from '../../../../api/base/normalSearch'
  18. import {endShipment} from '../../../../api/shipment'
  19. import dayjs from 'dayjs'
  20. export default {
  21. name: 'shipmentBox',
  22. props:{
  23. height:{
  24. type:Number,
  25. default:300
  26. },
  27. dataList:{
  28. type:Array,
  29. default:()=>[]
  30. },
  31. shipment:{
  32. type:Object,
  33. default:()=>{}
  34. }
  35. },
  36. data(){
  37. return {
  38. open:false,
  39. endOpen:false,
  40. form:{},
  41. endForm:{
  42. warehouseId:'',
  43. locationId:'',
  44. shipmentDate:'',
  45. },
  46. rollDataList:[],
  47. endDataList:[],
  48. warehouseList:[],
  49. locationList:[],
  50. rules:{
  51. warehouseId:[{required:true,message:'请选择仓库',trigger:'change'}],
  52. locationId:[{required:true,message:'请选择库位',trigger:'change'}],
  53. shipmentDate:[{required:true,message:'请选择出库日期',trigger:'change'}],
  54. },
  55. }
  56. },
  57. methods:{
  58. handleAddBox(){
  59. this.$emit('add',)
  60. },
  61. handleScanRoll(row){
  62. this.form = {...row}
  63. this.$nextTick(()=>{
  64. this.$refs.inputRollNo.focus()
  65. })
  66. this.getDataList();
  67. this.open = true;
  68. },
  69. getDataList(){
  70. let params = {
  71. ...this.form
  72. }
  73. getShipmentRollDataList(params).then(({data})=>{
  74. if (data && data.code === 0){
  75. this.rollDataList = data.rows
  76. }else {
  77. this.$message.warning(data.msg)
  78. }
  79. }).catch((error)=>{
  80. this.$message.error(error)
  81. })
  82. },
  83. handleUpdateBoxStatus(row,status){
  84. let params = {
  85. ...row
  86. }
  87. updateShipmentBoxStatus(params).then(({data})=>{
  88. if (data && data.code === 0){
  89. this.$message.success(data.msg)
  90. if (status === 0){
  91. this.handlePrint(row)
  92. }
  93. this.$emit('refresh')
  94. }else {
  95. this.$message.warning(data.msg)
  96. }
  97. }).catch((error)=>{
  98. this.$message.error(error)
  99. })
  100. },
  101. handleRemoveBox(row){
  102. this.$confirm('确定要删除这条数据?', '提示', {
  103. confirmButtonText: '确定',
  104. cancelButtonText: '取消',
  105. type: 'warning'
  106. }).then(()=>{
  107. removeShipmentBox(row).then(({data})=>{
  108. if (data && data.code === 0){
  109. this.$emit('refresh')
  110. this.$message.success(data.msg)
  111. }else {
  112. this.$message.warning(data.msg)
  113. }
  114. }).catch((error)=>{
  115. this.$message.error(error)
  116. })
  117. })
  118. },
  119. handleRollScan(e){
  120. let val = e.target.value.trim();
  121. if (!val){
  122. this.$message.warning('请输入条码')
  123. this.form.rollNo = ''
  124. return
  125. }
  126. let scanRow = val.split('|')
  127. if (scanRow.length < 4){
  128. this.$message.warning("二维码格式有误!")
  129. return
  130. }
  131. let params = {
  132. ...this.form,
  133. id:null,
  134. rollNo:scanRow[3],
  135. createBy:this.$store.state.user.name,
  136. }
  137. saveShipmentRollData(params).then(({data})=>{
  138. if (data && data.code === 0){
  139. this.$emit('refresh')
  140. this.$message.success(data.msg)
  141. // 查询 roll
  142. this.getDataList();
  143. }else {
  144. this.$message.warning(data.msg)
  145. }
  146. this.form.rollNo = ''
  147. }).catch((error)=>{
  148. this.form.rollNo = ''
  149. this.$message.error(error)
  150. })
  151. },
  152. handleGetRollDataList(row){
  153. this.form = {
  154. ...row,
  155. openDetail:true,
  156. }
  157. this.getDataList();
  158. this.open = true;
  159. },
  160. handleRollRemove(row){
  161. this.$confirm('确定要删除这条数据?', '提示', {
  162. confirmButtonText: '确定',
  163. cancelButtonText: '取消',
  164. type: 'warning'
  165. }).then(()=>{
  166. removeShipmentRollData(row).then(({data})=>{
  167. if (data && data.code === 0){
  168. this.$emit('refresh')
  169. this.getDataList();
  170. this.$message.success(data.msg)
  171. }else {
  172. this.$message.warning(data.msg)
  173. }
  174. }).catch((error)=>{
  175. this.$message.error(error)
  176. })
  177. })
  178. },
  179. handleEndBox(){
  180. this.endForm = {
  181. warehouseId:'',
  182. locationId:'',
  183. shipmentDate:'',
  184. }
  185. this.getRecordData();
  186. this.getWareHouseList();
  187. },
  188. getRecordData(){
  189. if (this.dataList.length === 0){
  190. this.$message.warning('未新增箱子')
  191. return
  192. }
  193. let params = {
  194. ...this.shipment,
  195. }
  196. getShipmentRollAllData(params).then(({data})=>{
  197. if (data && data.code === 0){
  198. this.endDataList = data.rows
  199. this.endOpen = true;
  200. }else {
  201. this.$message.warning(data.msg)
  202. }
  203. }).catch((error)=>{
  204. this.$message.error(error)
  205. })
  206. },
  207. endShipment(){
  208. this.$refs.endForm.validate((valid,obj) => {
  209. if (valid) {
  210. let params = {
  211. ...this.endForm,
  212. site:this.shipment.site,
  213. shipmentId:this.shipment.shipmentId,
  214. }
  215. endShipment(params).then(({data})=>{
  216. if (data && data.code === 0){
  217. this.endOpen = false;
  218. this.$emit('end')
  219. this.$message.success(data.msg)
  220. }else {
  221. this.$message.warning(data.msg)
  222. }
  223. }).catch((error)=>{
  224. this.$message.error(error)
  225. })
  226. }else {
  227. let i = 0;
  228. Object.keys(obj).forEach(key => {
  229. if (i === 0){
  230. this.$message.warning(obj[key][0].message)
  231. return
  232. }
  233. i++;
  234. })
  235. }
  236. })
  237. },
  238. getWareHouseList(){
  239. let params = {
  240. site:this.$store.state.user.site
  241. }
  242. getWareHouseList(params).then(({data})=>{
  243. if (data && data.code === 0){
  244. this.warehouseList = data.rows
  245. if (this.warehouseList.length > 0){
  246. this.endForm.warehouseId = this.warehouseList[0].wareHouseId
  247. }
  248. }else {
  249. this.$message.warning(data.msg)
  250. }
  251. }).catch((error)=>{
  252. this.$message.error(error)
  253. })
  254. },
  255. getLocationListForSearch(){
  256. let params={
  257. site:this.$store.state.user.site,
  258. warehouseId:this.endForm.warehouseId,
  259. active:'Y'
  260. }
  261. this.locationList = []
  262. getLocationListForSearch(params).then(({data})=>{
  263. if (data && data.code === 0){
  264. this.locationList = data.rows
  265. }else {
  266. this.$message.warning(data.msg)
  267. }
  268. }).catch((error)=>{
  269. this.$message.error(error)
  270. })
  271. },
  272. handlePrint(row){
  273. this.printBoxLabel(row);
  274. },
  275. printBoxLabel(row){
  276. printShipmentBox(row).then(({data})=>{
  277. if (data && data.code === 0){
  278. let arr = data.rows.map((item)=>{
  279. item.printType = 'boxLabel'
  280. item.productionDate = `${dayjs(item.productionDate).format("YYYYMMDD")}`
  281. item.shipDate = `${dayjs(item.shipDate).format("YYYY-MM-DD")}`
  282. item.boxNo = `${dayjs(row.createDate).format("YYMMDDHHmmss")}${(row.boxNo+'').padStart(3,'0')}`
  283. return item
  284. })
  285. // printShipmentBoxLabel(arr);
  286. this.printRollLabel(row,arr);
  287. }else {
  288. this.$message.warning(data.msg)
  289. }
  290. }).catch((error)=>{
  291. this.$message.error(error)
  292. })
  293. },
  294. printRollLabel(row,packList){
  295. printShipmentRoll(row).then(({data})=>{
  296. if (data && data.code === 0){
  297. let arr = [...packList];
  298. let arrs = data.rows.map(item=>{
  299. item.printType = 'innerBoxLabel'
  300. item.productionDate = `${dayjs(item.productionDate).format("YYYYMMDD")}`
  301. return item
  302. })
  303. for (let i = 0; i < arrs.length; i++) {
  304. arr.push(arrs[i])
  305. }
  306. printShipmentBoxLabel(arr);
  307. // printShipmentInnerLabel(arr);
  308. }else {
  309. this.$message.warning(data.msg)
  310. }
  311. }).catch((error)=>{
  312. this.$message.error(error)
  313. })
  314. }
  315. },
  316. watch:{
  317. "endForm.warehouseId"(newVal,oldVal){
  318. if (newVal && newVal !== oldVal){
  319. this.endForm.locationId = '';
  320. this.getLocationListForSearch()
  321. }
  322. }
  323. }
  324. }
  325. </script>
  326. <template>
  327. <div>
  328. <div style="display: flex;justify-content: space-between;">
  329. <div><el-button type="primary" @click="handleAddBox">新增箱子</el-button></div>
  330. <div><el-button type="primary" @click="handleEndBox">最终出库</el-button></div>
  331. </div>
  332. <el-table :data="dataList" style="width: 100%" border :height="height">
  333. <el-table-column prop="boxNoStr" label="箱号" width="200" header-align="center" align="left"></el-table-column>
  334. <el-table-column prop="partNo" label="物料编码" width="100" header-align="center" align="left"></el-table-column>
  335. <el-table-column prop="status" label="状态" width="100" header-align="center" align="center"></el-table-column>
  336. <el-table-column prop="createBy" label="录入人" width="100" header-align="center" align="left"></el-table-column>
  337. <el-table-column prop="createDate" label="录入时间" width="200" header-align="center" align="center"></el-table-column>
  338. <el-table-column align="center" label="操作">
  339. <template slot-scope="scope">
  340. <el-link @click="handleScanRoll(scope.row)" v-if="scope.row.status==='未封箱'">扫描</el-link>
  341. <el-link v-if="scope.row.status==='未封箱'" @click="handleUpdateBoxStatus(scope.row,0)">封箱</el-link>
  342. <el-link v-if="scope.row.status==='已封箱'" @click="handleUpdateBoxStatus(scope.row,1)">解封箱</el-link>
  343. <el-link v-if="scope.row.status==='未封箱'" @click="handleRemoveBox(scope.row)">删除</el-link>
  344. <el-link @click="handleGetRollDataList(scope.row)">查看</el-link>
  345. <el-link v-if="scope.row.status==='已封箱'" @click="handlePrint(scope.row)">补打</el-link>
  346. </template>
  347. </el-table-column>
  348. </el-table>
  349. <el-dialog title="扫描" :visible.sync="open" v-drag :close-on-click-modal="false" append-to-body width="1000px">
  350. <el-form :model="form" label-width="100px" label-position="top" >
  351. <el-row :gutter="10">
  352. <el-col :span="4">
  353. <el-form-item label="发货ID">
  354. <el-input v-model="form.shipmentId" disabled></el-input>
  355. </el-form-item>
  356. </el-col>
  357. <el-col :span="4">
  358. <el-form-item label="箱号">
  359. <el-input v-model="form.boxNoStr" disabled></el-input>
  360. </el-form-item>
  361. </el-col>
  362. <el-col :span="4">
  363. <el-form-item label="装箱数量">
  364. <el-input-number :controls="false" style="width: 100%" :value="rollDataList.length" disabled></el-input-number>
  365. </el-form-item>
  366. </el-col>
  367. </el-row>
  368. <el-row :gutter="10">
  369. <el-col :span="12">
  370. <el-form-item label="请扫描">
  371. <el-input v-model="form.rollNo" :disabled="form.openDetail" ref="inputRollNo" @keyup.enter.native="handleRollScan" placeholder="请输入扫描的条码"></el-input>
  372. </el-form-item>
  373. </el-col>
  374. <el-col :span="24">
  375. <el-form-item label="已扫描列表">
  376. <el-table :data="rollDataList" border :height="200">
  377. <el-table-column width="60" label="操作" align="center" v-if="!form.openDetail">
  378. <template slot-scope="scope">
  379. <el-link @click="handleRollRemove(scope.row)">删除</el-link>
  380. </template>
  381. </el-table-column>
  382. <el-table-column prop="partNo" width="100" header-align="center" label="物料编码"></el-table-column>
  383. <el-table-column prop="partDesc" width="200" header-align="center" label="物料名称"></el-table-column>
  384. <el-table-column prop="rollNo" width="100" header-align="center" label="卷号"></el-table-column>
  385. <el-table-column prop="rollQty" width="60" header-align="center" align="right" label="数量"></el-table-column>
  386. <el-table-column prop="batchNo" width="60" header-align="center" label="批号"></el-table-column>
  387. <el-table-column prop="ref" width="60" header-align="center" align="left" label="WD"></el-table-column>
  388. <el-table-column prop="manufacturerTime" width="150" header-align="center" align="center" label="生产日期"></el-table-column>
  389. <el-table-column prop="expirationDate" width="150" header-align="center" align="center" label="失效日期"></el-table-column>
  390. <el-table-column prop="locationId" width="100" header-align="center" align="center" label="库位"></el-table-column>
  391. <el-table-column prop="createBy" width="100" header-align="center" label="Created By"></el-table-column>
  392. <el-table-column prop="createTime" width="150" header-align="center" align="center" label="Created Time"></el-table-column>
  393. </el-table>
  394. </el-form-item>
  395. </el-col>
  396. </el-row>
  397. </el-form>
  398. <el-footer style="height: 20px"></el-footer>
  399. </el-dialog>
  400. <el-dialog title="最终出库" :visible.sync="endOpen" v-drag :close-on-click-modal="false" append-to-body width="800px">
  401. <el-form :model="endForm" :rules="rules" ref="endForm" label-width="100px" label-position="top" >
  402. <el-row :gutter="10">
  403. <el-col :span="4">
  404. <el-form-item label="仓库" prop="warehouseId" :show-message="false">
  405. <el-select v-model="endForm.warehouseId" style="width: 100%;">
  406. <el-option :value="i.wareHouseId" :label="i.wareHouseName" v-for="i in warehouseList" :key="i.menuId"></el-option>
  407. </el-select>
  408. </el-form-item>
  409. </el-col>
  410. <el-col :span="4">
  411. <el-form-item label="库位" prop="locationId" :show-message="false">
  412. <el-select v-model="endForm.locationId" style="width: 100%;">
  413. <el-option :value="i.locationId" :label="i.locationName" v-for="i in locationList" :key="i.locationId"></el-option>
  414. </el-select>
  415. </el-form-item>
  416. </el-col>
  417. <el-col :span="4">
  418. <el-form-item label="出库日期" prop="shipmentDate" :show-message="false">
  419. <el-date-picker
  420. style="width: 100%"
  421. v-model="endForm.shipmentDate"
  422. type="date"
  423. value-format="yyyy-MM-dd"
  424. placeholder="选择日期">
  425. </el-date-picker>
  426. </el-form-item>
  427. </el-col>
  428. <el-col :span="4" :offset="8">
  429. <el-form-item label=" ">
  430. <div style="float: right;"><el-button type="primary" @click="endShipment">最终出库</el-button></div>
  431. </el-form-item>
  432. </el-col>
  433. </el-row>
  434. <el-row :gutter="10">
  435. <el-col :span="24">
  436. <el-form-item label="已扫描信息汇总">
  437. <el-table :data="endDataList" border :height="200">
  438. <el-table-column prop="partNo" min-width="100" header-align="center" label="物料编码"></el-table-column>
  439. <el-table-column prop="partDesc" min-width="200" header-align="center" label="物料描述"></el-table-column>
  440. <el-table-column prop="total" min-width="100" header-align="center" align="right" label="总数量"></el-table-column>
  441. <el-table-column prop="totalBox" min-width="100" header-align="center" align="right" label="总箱数"></el-table-column>
  442. <el-table-column prop="totalRoll" min-width="100" header-align="center" align="right" label="总卷数"></el-table-column>
  443. </el-table>
  444. </el-form-item>
  445. </el-col>
  446. </el-row>
  447. </el-form>
  448. <el-footer style="height: 20px"></el-footer>
  449. </el-dialog>
  450. </div>
  451. </template>
  452. <style scoped>
  453. /deep/ .el-form-item--medium .el-form-item__content{
  454. height: auto;
  455. }
  456. </style>