-
admin
2024-05-28 2377332554103dcbc54fff45777ef1c67cf0fb0e
提交 | 用户 | 时间
e57a89 1 <template>
2   <div class="app-container">
3     <el-card class="box-card">
4     <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
5       <el-form-item label-width="80" label="生产工单号" prop="workOrderNo">
6         <el-input
7           v-model="queryParams.workOrderNo"
8           placeholder="请输入生产工单号"
9           clearable
10           @keyup.enter.native="handleQuery"
11         />
12       </el-form-item>
13       <el-form-item label="产品名称" prop="productName">
14         <el-input
15           v-model="queryParams.productName"
16           placeholder="请输入产品名称"
17           clearable
18           @keyup.enter.native="handleQuery"
19         />
20       </el-form-item>
21       <el-form-item label="工单状态" prop="orderStatus">
22         <el-select v-model="queryParams.orderStatus" placeholder="请选择工单状态" clearable>
23           <el-option
24             v-for="dict in dict.type.order_state"
25             :key="dict.value"
26             :label="dict.label"
27             :value="dict.value"
28           />
29         </el-select>
30       </el-form-item>
288790 31       <div style="display: none">
A 32         <div id="printMe" style="width: 500px;">
33           <div ref="canvasWrapper" id="canvasWrapper" style="display: flex;justify-content: center;"></div>
34           <p style="font-size: 10px;word-break: break-all;display: flex;justify-content: center;">{{packCode}}</p>
35         </div>
36         <el-button @click="print">打印</el-button>
37         <el-button @click="test1">生成二维码</el-button>
38       </div>
e57a89 39       <el-form-item style="float: right">
40         <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
41         <el-button type="warning" icon="el-icon-copy-document" size="mini" @click="advancedQuery">高级查询</el-button>
42         <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
43       </el-form-item>
44     </el-form>
45     <el-form :model="queryParams" ref="queryParams" size="small" :inline="true" v-show="advancedShowSearch" label-width="68px">
46       <el-form-item style="margin-left: 14px" label="产品编号" prop="productCode">
47         <el-input
48           v-model="queryParams.productCode"
648160 49           placeholder="请输入产品序列号"
e57a89 50           clearable
51           @keyup.enter.native="handleQuery"
52         />
53       </el-form-item>
54       <el-form-item label="订单编号" prop="salesOrderCode">
55         <el-input
56           v-model="queryParams.salesOrderCode"
57           placeholder="请输入订单编号"
58           clearable
59           @keyup.enter.native="handleQuery"
60         />
61       </el-form-item>
648160 62       <el-form-item label="工厂编号" prop="siteCode">
e57a89 63         <el-input
648160 64           v-model="queryParams.siteCode"
H 65           placeholder="请输入工厂编号"
e57a89 66           clearable
67           @keyup.enter.native="handleQuery"
68         />
69       </el-form-item>
648160 70       <el-form-item label="工站编号" prop="stationCode">
e57a89 71         <el-input
648160 72           v-model="queryParams.stationCode"
H 73           placeholder="请输入工站编号"
e57a89 74           clearable
75           @keyup.enter.native="handleQuery"
76         />
77       </el-form-item>
78     </el-form>
79     </el-card>
80
81     <el-card style="margin-top: 10px" class="box-card">
82     <el-row :gutter="10" class="mb8">
83       <el-col :span="1.5">
84         <el-button
85           type="primary"
86           plain
87           icon="el-icon-plus"
88           size="mini"
89           @click="handleAdd"
90           v-hasPermi="['om:productionOrde:add']"
91         >新增</el-button>
92       </el-col>
93       <el-col :span="1.5">
94         <el-button
95           type="success"
96           plain
97           icon="el-icon-edit"
98           size="mini"
99           :disabled="single"
100           @click="handleUpdate"
101           v-hasPermi="['om:productionOrde:edit']"
102         >修改</el-button>
103       </el-col>
104       <el-col :span="1.5">
237733 105 <!--        <el-button-->
A 106 <!--          type="danger"-->
107 <!--          plain-->
108 <!--          icon="el-icon-delete"-->
109 <!--          size="mini"-->
110 <!--          :disabled="multiple"-->
111 <!--          @click="handleDelete"-->
112 <!--          v-hasPermi="['om:productionOrde:remove']"-->
113 <!--        >删除</el-button>-->
42cfe3 114         <el-button
115           type="info"
116           icon="el-icon-upload2"
117           size="mini"
118           @click="handleImport"
119         >导入</el-button>
e57a89 120       </el-col>
42cfe3 121       <el-col :span="1.5">
122         <el-button
123           type="warning"
124           plain
125           icon="el-icon-download"
126           size="mini"
127           @click="handleExport"
128           v-hasPermi="['om:productionOrde:export']"
129         >导出</el-button>
130       </el-col>
e70fb4 131       <el-col :span="1.5">
A 132         <el-button
133           type="warning"
134           plain
135           icon="el-icon-download"
136           size="mini"
c860ca 137           @click="getWorkOrders"
e70fb4 138         >接收</el-button>
A 139       </el-col>
237733 140       <el-col :span="1.5">
A 141         <el-button
142           type="warning"
143           plain
144           icon="el-icon-download"
145           size="mini"
146           :disabled="single"
147           @click="patchwork"
148         >补打</el-button>
149       </el-col>
e57a89 150       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
151     </el-row>
152
153       <el-table border v-loading="loading" :data="productionOrdeList" @selection-change="handleSelectionChange">
154         <el-table-column type="selection" width="55" align="center" />
155         <el-table-column label="生产工单号" width="160" align="center">
156           <template slot-scope="scope">
157             <router-link :to="{path: '/main/workReport-data/index/', query: {workOrderNo: scope.row.workOrderNo} }" class="link-type">
158               <span>{{ scope.row.workOrderNo }}</span>
159             </router-link>
160           </template>
161         </el-table-column>
42cfe3 162 <!--        <el-table-column label="订单编号" width="140" align="center" prop="salesOrderCode">-->
163 <!--        </el-table-column>-->
237733 164         <el-table-column :show-overflow-tooltip='true' label="pack码" width="220" align="center" prop="productNum">
a75d86 165         </el-table-column>
A 166         <el-table-column :show-overflow-tooltip='true' label="小车码" width="160" align="center" prop="trolleyYard">
167         </el-table-column>
49c784 168         <el-table-column label="产品编号" width="110" align="center" prop="productCode">
e57a89 169         </el-table-column>
648160 170         <el-table-column label="产品名称" width="120" align="center" prop="productName">
e57a89 171         </el-table-column>
b64ed2 172         <el-table-column label="产品型号" align="center" prop="productModel">
173         </el-table-column>
237733 174 <!--        <el-table-column label="工单状态" width="100" align="center" prop="orderStatus">-->
A 175 <!--          <template slot-scope="scope">-->
176 <!--            <dict-tag :options="dict.type.order_state" :value="scope.row.orderStatus"/>-->
177 <!--          </template>-->
178 <!--        </el-table-column>-->
42cfe3 179 <!--        <el-table-column label="工厂编号" align="center" prop="siteCode">-->
180 <!--        </el-table-column>-->
648160 181         <el-table-column label="工站编号" align="center" prop="stationCode">
e57a89 182         </el-table-column>
237733 183 <!--        <el-table-column label="报工信息结果" width="110" align="center" prop="resultText">-->
A 184 <!--        </el-table-column>-->
185 <!--        <el-table-column label="报工结果代码" width="110" align="center" prop="resultCode">-->
186 <!--        </el-table-column>-->
187 <!--        <el-table-column label="是否报工" width="80" align="center" prop="sfResult">-->
188 <!--        </el-table-column>-->
189 <!--        <el-table-column label="实际开始时间" width="160" align="center" prop="actualStartTime">-->
190 <!--        </el-table-column>-->
191 <!--        <el-table-column label="当前站点报工时间" width="160" align="center" prop="actualEndTime">-->
192 <!--        </el-table-column>-->
193 <!--        <el-table-column label="创建人" width="80" align="center" prop="createUser">-->
194 <!--        </el-table-column>-->
195 <!--        <el-table-column label="备注" width="100" align="center" prop="remarks">-->
196 <!--        </el-table-column>-->
e57a89 197       </el-table>
198     </el-card>
199
200
201     <pagination
202       v-show="total>0"
203       :total="total"
204       :page.sync="queryParams.pageNum"
205       :limit.sync="queryParams.pageSize"
206       @pagination="getList"
207     />
208
209     <!-- 添加或修改生产工单对话框 -->
648160 210     <el-dialog v-dialogpop-up :title="title" :visible.sync="open" width="500px" append-to-body>
e57a89 211        <span slot="title">
212         <i class="el-icon-s-order"></i>
213         {{titleName}}
214       </span>
648160 215       <el-form ref="form" inline :model="form" :rules="rules" label-width="100px">
H 216         <el-form-item label="生产工单号" prop="workOrderNo">
217           <el-input style="width: 265px" v-model="form.workOrderNo" placeholder="请输入生产工单号" />
e57a89 218         </el-form-item>
219         <el-form-item label="订单编号" prop="salesOrderCode">
648160 220           <el-input style="width: 265px" v-model="form.salesOrderCode" placeholder="请输入订单编号" />
e57a89 221         </el-form-item>
648160 222         <el-form-item label="产品序列号" prop="productNum">
e57a89 223           <el-input v-model="form.productCode" placeholder="请选择产品" >
224             <el-button slot="append" @click="handleSelectProduct" icon="el-icon-search"></el-button>
225           </el-input>
226           <ItemSelect ref="itemSelect" @onSelected="onItemSelected" > </ItemSelect>
227         </el-form-item>
228         <el-form-item label="产品名称" prop="productName">
648160 229           <el-input style="width: 265px" v-model="form.productName" disabled placeholder="请输入产品名称" />
e57a89 230         </el-form-item>
b64ed2 231         <el-form-item label="产品型号" prop="productModel">
232           <el-input v-model="form.productModel" placeholder="请输入产品型号" />
233         </el-form-item>
648160 234         <el-form-item label="工厂编号" prop="siteCode">
H 235           <el-input style="width: 265px" v-model="form.siteCode" placeholder="请输入工厂编号" />
e57a89 236         </el-form-item>
648160 237         <el-form-item label="工站编号" prop="stationCode">
H 238           <el-input style="width: 265px"v-model="form.stationCode" placeholder="请输入工站编号" />
e57a89 239         </el-form-item>
648160 240         <el-form-item label="备注" prop="remarks">
H 241           <el-input style="width: 265px" v-model="form.remarks" placeholder="请输入备注" />
e57a89 242         </el-form-item>
243
244       </el-form>
245       <div slot="footer" class="dialog-footer">
246         <el-button type="primary" @click="submitForm">确 定</el-button>
247         <el-button @click="cancel">取 消</el-button>
248       </div>
249     </el-dialog>
250
42cfe3 251     <!-- 用户导入对话框 -->
252     <el-dialog :title="upload.title" :visible.sync="upload.open" width="400px">
253       <el-upload
254         ref="upload"
255         :limit="1"
256         accept=".xlsx, .xls"
257         :headers="upload.headers"
258         :action="upload.url + '?updateSupport=' + upload.updateSupport"
259         :disabled="upload.isUploading"
260         :on-progress="handleFileUploadProgress"
261         :on-success="handleFileSuccess"
262         :auto-upload="false"
263         drag
264       >
265         <i class="el-icon-upload"></i>
266         <div class="el-upload__text">
267           将文件拖到此处,或
268           <em>点击上传</em>
269         </div>
270         <div class="el-upload__tip" slot="tip">
271           <el-checkbox v-model="upload.updateSupport" />是否更新已经存在的用户数据
272           <el-link type="info" style="font-size:12px" @click="importTemplate">下载模板</el-link>
273         </div>
274         <div class="el-upload__tip" style="color:red" slot="tip">提示:仅允许导入“xls”或“xlsx”格式文件!</div>
275       </el-upload>
276       <div slot="footer" class="dialog-footer">
277         <el-button type="primary" @click="submitFileForm">确 定</el-button>
278         <el-button @click="upload.open = false">取 消</el-button>
279       </div>
280     </el-dialog>
281
e57a89 282   </div>
283 </template>
284
285 <script>
42cfe3 286 import { getToken } from "@/utils/auth";
e57a89 287 import { listLineInfo } from "@/api/main/bs/lineInfo/lineInfo";
288 import { listWorkshop } from "@/api/main/bs/workshop/workshop";
237733 289 import {getProductBom, listProductBom} from "@/api/main/bs/ProductBom/ProductBom";
e57a89 290 import { listTechnologyRoute} from "@/api/main/bs/technologyRoute/technologyRoute";
291 import ItemSelect  from "@/components/itemSelect/single.vue";
c860ca 292 import {
A 293   importTemplate,
294   upDownMove,
295   listProductionOrde,
296   getProductionOrde,
297   delProductionOrde,
298   addProductionOrde,
299   updateProductionOrde,
300   receivingWorkOrders
301 } from "@/api/main/om/productionOrde/productionOrde";
288790 302 import QRCode from "qrcodejs2";
e57a89 303
304 export default {
305   name: "ProductionOrde",
306   dicts: ['order_state'],
307   components: {
308     ItemSelect ,
309   },
310   data() {
311     return {
288790 312       // packCode: '0RSPB001139E3AE4X0000011',
A 313       packCode: 'test111',
e57a89 314       titleName: '',
315       options: [],
316       lineOptions: [],
317       showFlag:false,
318       advancedShowSearch: false,
319       workOrder: {
320         status: 'ss'
321       },
322       // 遮罩层
323       loading: true,
324       // 选中数组
325       ids: [],
326       // 非单个禁用
327       single: true,
328       // 非多个禁用
329       multiple: true,
330       move: true,
331       selectedRowIndex: -1, // 存储选中行的索引
332       // 显示搜索条件
333       showSearch: true,
334       // 总条数
335       total: 0,
336       // 生产工单表格数据
337       productionOrdeList: [],
338       // 弹出层标题
339       title: "",
340       // 是否显示弹出层
341       open: false,
342       // 查询参数
343       queryParams: {
344         pageNum: 1,
345         pageSize: 10,
346         workOrderNo: null,
347         salesOrderCode: null,
348         productCode: null,
349         productName: null,
350         workshopCode: null,
351         lineCode: null,
352         routeCode: null,
353         bomCode: null,
354         recipeCode: null,
355         orderStatus: null,
356         custom: null,
357         marketAreaCode: null,
358         softwareVersionCode: null,
359         productCompanyCode: null,
360         frontEndId: 0,
361         idNums: null,
362         flag: null,
b64ed2 363         siteCode: null,
364         productNum: null,
365         stationCode: null,
366         resultText: null,
367         resultCode: null,
368         sfResult: null,
369         productModel: null
370
e57a89 371       },
372       // 表单参数
373       form: {},
374       updateStatusParameter: {
375         id: null,
376         orderStatus: null
377       },
378       // 表单校验
379       rules: {
380         id: [
381           { required: true, message: "ID不能为空", trigger: "blur" }
382         ],
42cfe3 383       },
384       // 用户导入参数
385       upload: {
386         // 是否显示弹出层(用户导入)
387         open: false,
388         // 弹出层标题(用户导入)
389         title: "",
390         // 是否禁用上传
391         isUploading: false,
392         // 是否更新已经存在的用户数据
393         updateSupport: 0,
394         // 设置上传的请求头部
395         headers: { Authorization: "Bearer " + getToken() },
396         // 上传的地址
397         url: process.env.VUE_APP_BASE_API + "/om/productionOrde/importData"
398       },
e57a89 399     };
400   },
401   created() {
402     this.getList();
403     this.initWorkshop();
404   },
288790 405   mounted() {
A 406     this.test1()
407   },
e57a89 408   methods: {
237733 409     patchwork(row){
A 410       const id = row.id || this.ids
411       getProductionOrde(id).then(response => {
412         console.log(response.data)
413         this.packCode = response.data.productNum
414         console.log(this.packCode)
415         this.test1()
416         setTimeout(() => {
417           this.print()
418         },50)
419       });
420     },
421     async getWorkOrders(){
288790 422       await receivingWorkOrders().then(response => {
c860ca 423         this.getList()
288790 424         this.packCode = response.msg;
A 425         this.test1()
c860ca 426       });
288790 427       setTimeout(() => {
A 428         this.print()
429       },50)
430     },
431      print() {
432       // 本页面直接打印(有bug单岁先不要删)
433       // let oldStr = window.document.body.innerHTML;
434       // let newStr = document.getElementById('printMe').innerHTML;
435       // document.body.innerHTML = newStr;
436       // window.print();
437       // document.body.innerHTML = oldStr;
438       // return false;
439
440       // 新开页面打印
441       //  document.getElementById('canvasWrapper').innerHTML = '';
442       let newStr = document.getElementById('printMe').innerHTML;
443       let newWin = window.open('', '_blank');
444       newWin.document.body.innerHTML = newStr;
445       newWin.print();
446       return false;
447     },
448     test1(){
449       document.getElementById('canvasWrapper').innerHTML = ''
450       this.$nextTick(() => {
451         let qrCode = new QRCode('canvasWrapper',{
452           width: 80,
453           height: 80,
454           padding: 0,
455           margin: 0,
456           text: this.packCode,
457           colorDark: '#000',
458           colorLight: '#fff'
459         })
460       })
461       // console.log(this.packCode)
462       // this.print()
e70fb4 463     },
42cfe3 464     /** 导入按钮操作 */
465     handleImport() {
466       this.upload.title = "订单信息导入";
467       this.upload.open = true;
468     },
469     /** 下载模板操作 */
470     importTemplate() {
471       this.download('om/productionOrde/importTemplate', {
472       }, `productionOrde_template_${new Date().getTime()}.xlsx`)
473     },
474 // 文件上传中处理
475     handleFileUploadProgress(event, file, fileList) {
476       this.upload.isUploading = true;
477     },
478 // 文件上传成功处理
479     handleFileSuccess(response, file, fileList) {
480       this.upload.open = false;
481       this.upload.isUploading = false;
482       this.$refs.upload.clearFiles();
483       this.$alert(response.msg, "导入结果", { dangerouslyUseHTMLString: true });
484       this.getList();
485     },
486 // 提交上传文件
487     submitFileForm() {
488       this.$refs.upload.submit();
e57a89 489     },
490     initWorkshop(){
491       listWorkshop(this.queryParams).then(response => {
492         this.options = response.rows;
493       });
494     },
495     // 在这里编写处理选中事件的逻辑
496     handleSelectChange(selectedOption) {
497       this.form.lineCode = null;
498       let params = {
499         workshopCode: selectedOption
500       };
501       listLineInfo(params).then(response => {
502         this.lineOptions = response.rows;
503       });
504     },
505     //物料选择弹出框
506     onItemSelected(obj){
507       if(obj !== undefined && obj !== null){
508         let productCode = obj.materialCode;
509         this.form.productCode = productCode;
510         this.form.productName = obj.materialName;
511         this.queryParams.productCode = productCode
512         listTechnologyRoute(this.queryParams).then(response => {
513           this.form.routeCode = response.rows[0].routeCode;
514         });
515         listProductBom(this.queryParams).then(response => {
516           this.form.bomCode = response.rows[0].bomCode;
517         });
518       }
519     },
520     handleSelectProduct(){
521       this.$refs.itemSelect.showFlag = true;
522     },
523     advancedQuery(){
524       this.advancedShowSearch = (this.advancedShowSearch) ? this.advancedShowSearch = false : this.advancedShowSearch = true;
525     },
526     handleCommand(status,id) {
527       console.log(status)
528       this.updateStatusParameter.id = id;
529       this.updateStatusParameter.orderStatus = status;
530       updateProductionOrde(this.updateStatusParameter).then(response => {
531         this.$modal.msgSuccess("修改成功");
532         this.open = false;
533         this.getList();
534       });
535     },
536     /** 查询生产工单列表 */
537     getList() {
538       this.loading = true;
539       listProductionOrde(this.queryParams).then(response => {
540         this.productionOrdeList = response.rows;
541         this.total = response.total;
542         this.loading = false;
543       });
544     },
545     // 取消按钮
546     cancel() {
547       this.open = false;
548       this.reset();
549     },
550     // 表单重置
551     reset() {
552       this.form = {
553         id: null,
554         workOrderNo: null,
555         salesOrderCode: null,
556         productCode: null,
557         productName: null,
558         workshopCode: null,
559         lineCode: null,
560         routeCode: null,
561         bomCode: null,
562         recipeCode: null,
563         planQty: null,
564         actualQty: null,
565         badQty: null,
566         scrapQty: null,
567         repairQty: null,
568         actualOnlineQty: null,
569         onlineCompletionMark: null,
570         demandDate: null,
571         planStartTime: null,
572         planEndTime: null,
573         actualStartTime: null,
574         actualEndTime: null,
575         serialNumber: null,
576         orderStatus: null,
577         createTime: null,
578         updateTime: null,
579         createUser: null,
580         updateUser: null,
581         remarks: null,
582         streamNumber: null,
583         custom: null,
584         marketAreaCode: null,
585         softwareVersionCode: null,
586         productCompanyCode: null,
a75d86 587         trolleyYard: null,
e57a89 588         spareField2: null,
589         spareField3: null,
648160 590         spareField4: null,
H 591         siteCode: null,
592         productNum: null,
593         stationCode: null,
594         resultText: null,
595         resultCode: null,
596         sfResult: null
e57a89 597       };
598       this.resetForm("form");
599     },
600     /** 搜索按钮操作 */
601     handleQuery() {
602       this.queryParams.pageNum = 1;
603       this.getList();
604     },
605     /** 重置按钮操作 */
606     resetQuery() {
607       this.resetForm("queryForm");
608       this.handleQuery();
609     },
610     // 多选框选中数据
237733 611     // handleSelectionChange(selection) {
A 612     //   this.ids = selection.map(item => item.id)
613     //   this.move = selection.length!==1
614     //   if(!selection.length){
615     //     this.single = true
616     //     this.multiple = true
617     //   }else {
618     //     if(selection[0].orderStatus === '1' && selection.length === 1){
619     //       this.single = false
620     //       this.multiple = false
621     //     }
622     //   }
623     //
624     // },
625     // 多选框选中数据
e57a89 626     handleSelectionChange(selection) {
627       this.ids = selection.map(item => item.id)
237733 628       this.single = selection.length!==1
A 629       this.multiple = !selection.length
e57a89 630     },
631     /** 新增按钮操作 */
632     handleAdd() {
633       this.initWorkshop();
634       this.reset();
635       this.open = true;
636       this.titleName = "添加生产工单";
637     },
638     /** 修改按钮操作 */
639     handleUpdate(row) {
640       this.initWorkshop();
641       this.reset();
642       const id = row.id || this.ids
643       getProductionOrde(id).then(response => {
644         console.log(response.data)
645         this.form = response.data;
646         this.open = true;
647         this.titleName = "修改生产工单";
648       });
649     },
650     /** 提交按钮 */
651     submitForm() {
652       this.$refs["form"].validate(valid => {
653         if (valid) {
654           if (this.form.id != null) {
655             updateProductionOrde(this.form).then(response => {
656               this.$modal.msgSuccess("修改成功");
657               this.open = false;
658               this.getList();
659             });
660           } else {
661             addProductionOrde(this.form).then(response => {
662               this.$modal.msgSuccess("新增成功");
663               this.open = false;
664               this.getList();
665             });
666           }
667         }
668       });
669     },
670     /** 删除按钮操作 */
671     handleDelete(row) {
672       const ids = row.id || this.ids;
673       this.$modal.confirm('是否确认删除生产工单编号为"' + ids + '"的数据项?').then(function() {
674         return delProductionOrde(ids);
675       }).then(() => {
676         this.getList();
677         this.$modal.msgSuccess("删除成功");
678       }).catch(() => {});
679     },
680     /** 导出按钮操作 */
681     handleExport() {
682       this.download('om/productionOrde/export', {
683         ...this.queryParams
684       }, `productionOrde_${new Date().getTime()}.xlsx`)
685     }
686   }
687 };
688 </script>
689 <style lang="scss" scoped>
690 //::v-deep .el-dialog__header{
691 //  /*background-color: #f8f8f8;*/
692 //  background-color: #f8f8f9;
693 //}
694 </style>