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