From bf8f755535e07b59116fced6dab7e2b53e78ff50 Mon Sep 17 00:00:00 2001
From: 王震 <10952869+daywangzhen@user.noreply.gitee.com>
Date: 星期五, 22 十二月 2023 17:15:23 +0800
Subject: [PATCH] modified: src/views/common/qrCodeApp.vue modified: src/views/product/workbench/productInDialog.vue modified: src/views/quality/Packaging_ledger/index.vue modified: vue.config.js
---
src/views/plan/productionschedul/index.vue | 493 ++++++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 451 insertions(+), 42 deletions(-)
diff --git a/src/views/plan/productionschedul/index.vue b/src/views/plan/productionschedul/index.vue
index 0775072..2b4de6c 100644
--- a/src/views/plan/productionschedul/index.vue
+++ b/src/views/plan/productionschedul/index.vue
@@ -2,25 +2,76 @@
<div class="mod-config">
<basic-container>
<el-row>
- <el-col :span="12">
- <div style="height:80vh">
- <avue-crud :data="tableData" ref="crud" :option="option" :span-method="spanMethod"
- @refresh-change="getData"
- :page="page"
- @selection-change="selectionRow"
- :table-loading="loading">
- <template #menu="{ row, index }">
- <el-button type="text" icon="el-icon-delete" size="small" @click="deleteHandle(row, index)">鍒犻櫎</el-button>
- </template>
- </avue-crud>
- </div>
+ <el-col :span="14">
+ <el-row>
+ <el-col :span="24">
+ <div style="height:40vh;padding: 0px 10px;">
+ <span style="position: relative;top:40px;">鏈畬鎴�</span>
+ <span style="position: relative;top:30px;left:73%;z-index: 11">
+ <el-button @click="tagFinished" size="mini" round type="primary">鏍囪宸插畬鎴�</el-button>
+ </span>
+ <avue-crud
+ :data="tableData"
+ ref="crud"
+ :option="option"
+ :span-method="spanMethod"
+ @refresh-change="getUnFinishedData"
+ @current-change="handleCurrentChange"
+ @size-change="handleSizeChange"
+ :page="page"
+ @selection-change="selectionRow"
+ :table-loading="loading">
+ <template #menu="{ row, index }">
+ <el-button
+ v-if="permissions.plan_productionschedul_edit"
+ type="text"
+ icon="el-icon-edit"
+ size="small"
+ @click="editHandle(row, index)">缂栬緫</el-button>
+ <el-button
+ v-if="permissions.plan_productionschedul_del"
+ type="text"
+ icon="el-icon-delete"
+ size="small"
+ @click="deleteHandle(row, index)">鍒犻櫎</el-button>
+ </template>
+ </avue-crud>
+ </div>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="24">
+ <div style="height:40vh;padding: 0px 10px;">
+ <span style="position: relative;top:40px;">宸插畬鎴�</span>
+ <avue-crud
+ :data="finishedTableData"
+ ref="finished"
+ :option="finishedOption"
+ :span-method="spanMethod"
+ @refresh-change="getFinishedData"
+ @current-change="handleCurrentChange"
+ @size-change="handleSizeChange"
+ :page="finishedPage"
+ @selection-change="selectionRow">
+ <!-- <template #menu="{ row, index }">
+ <el-button
+ v-if="permissions.plan_productionschedul_del"
+ type="text"
+ icon="el-icon-delete"
+ size="small"
+ @click="deleteHandle(row, index)">鍒犻櫎</el-button>
+ </template> -->
+ </avue-crud>
+ </div>
+ </el-col>
+ </el-row>
</el-col>
- <el-col :span="12" style="padding-left: 10px">
+ <el-col :span="10" style="padding-left: 10px">
<div style="">
<el-card>
<div slot="header" class="clearfix">
<span>璋冨害鏃堕棿绾�</span>
- <el-button style="float: right; padding: 3px 0" type="text">鎿嶄綔鎸夐挳</el-button>
+ <el-button v-if="permissions.plan_productionschedul_edit_line && scheduleList.length>0" @click="openEditDialog" style="float: right; padding: 3px 0" type="text">缂栬緫</el-button>
</div>
<div style="height:70vh;overflow-y: scroll;">
<el-timeline>
@@ -28,10 +79,15 @@
placement="top"
v-for="(item, index) in scheduleList"
:key="index"
- :timestamp="item.planTime">
- <el-card style="width:95%;margin: 0;padding: 0px 10px;">
- <p style="font-weight: bold;">{{item.title}}</p>
- <p>瀹為檯鏃堕棿: {{ item.actualTime }}</p>
+ :timestamp="item.title">
+ <el-card shadow="hover" :body-style="{margin: '0',padding:'0px 20px 0px 20px'}" style="width:90%;">
+ <p>
+ <span style="font-weight: bold;">璁″垝鏃堕棿: </span>
+ {{item.planTime}}
+ </p>
+ <p>
+ <span style="font-weight: bold;">瀹為檯鏃堕棿: </span>
+ {{ item.actualTime }}</p>
</el-card>
</el-timeline-item>
</el-timeline>
@@ -41,6 +97,82 @@
</el-col>
</el-row>
</basic-container>
+ <el-dialog
+ title="缂栬緫鏃堕棿绾�"
+ :visible.sync="dialogVisible"
+ top="5vh"
+ width="50%"
+ :before-close="handleClose">
+ <div style="height:60vh;overflow-y: scroll;">
+ <el-timeline>
+ <el-timeline-item
+ placement="top"
+ v-for="(item, index) in scheduleEditList"
+ :key="index"
+ :timestamp="item.title">
+ <el-card shadow="hover" style="width:90%" :body-style="{padding:'20px 20px 5px 20px'}">
+ <el-row>
+ <el-col :span="3">
+ <p style="font-weight: bold;line-height: 50%;">璁″垝鏃堕棿: </p>
+ </el-col>
+ <el-col :span="21">
+ <el-date-picker
+ style="width:100%"
+ v-model="item.planTime"
+ value-format="yyyy-MM-dd HH:mm:ss"
+ type="datetime"
+ placeholder="閫夋嫨鏃ユ湡鏃堕棿">
+ </el-date-picker>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="3">
+ <p style="font-weight: bold;line-height: 50%;">瀹為檯鏃堕棿: </p>
+ </el-col>
+ <el-col :span="21">
+ <el-date-picker
+ style="width:100%"
+ v-model="item.actualTime"
+ value-format="yyyy-MM-dd HH:mm:ss"
+ type="datetime"
+ placeholder="閫夋嫨鏃ユ湡鏃堕棿">
+ </el-date-picker>
+ </el-col>
+ </el-row>
+ </el-card>
+ </el-timeline-item>
+ </el-timeline>
+ </div>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="dialogVisible = false">鍙� 娑�</el-button>
+ <el-button type="primary" @click="confirmEditSchedul">纭� 瀹�</el-button>
+ </span>
+ </el-dialog>
+ <el-dialog
+ title="缂栬緫"
+ :visible.sync="editDialogVisible"
+ width="50%">
+ <el-form :model="editForm" label-width="120px">
+ <el-row>
+ <el-col :span="24">
+ <el-form-item label="鐢熶骇鎯呭喌:">
+ <el-input style="width:100%" placeholder="璇疯緭鍏ョ敓浜ф儏鍐�" type="textarea" :row="2" v-model="editForm.productionStatus"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="24">
+ <el-form-item label="鐢熶骇绋嬪害:">
+ <el-input style="width:100%" placeholder="璇疯緭鍏ョ敓浜х▼搴�" type="textarea" :row="2" v-model="editForm.productionRoutine"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="editDialogVisible = false">鍙� 娑�</el-button>
+ <el-button type="primary" @click="confirmEdit()">纭� 瀹�</el-button>
+ </span>
+ </el-dialog>
</div>
</template>
@@ -48,32 +180,167 @@
import {
fetchScheduleList,
fetchScheduleById,
+ fillTime,
+ deleteSchedul,
+ updateState,
} from '@/api//plan/productionschedul'
-import TableForm from './template-form'
import ttable from '@/views/common/ztt-table.vue'
import { mapGetters } from 'vuex'
export default {
data() {
return {
+ editForm:{
+ id: null,
+ productionRoutine: null,
+ productionStatus: null,
+ },
+ editDialogVisible: false,
+ dialogVisible: false,
scheduleList: [],
+ scheduleEditList: [],
typeOptions: [],
multipleSelection: [],
loading: true,
tableData: [],
+ finishedTableData: [],
page: {
- total: 10,
+ total: 0,
currentPage: 1,
- pageSize: 10
+ pageSize: 10,
+ pagerCount: 5
+ },
+ finishedPage: {
+ total: 0,
+ currentPage: 1,
+ pageSize: 10,
+ pagerCount: 5
},
option: {
- height: 400,
+ defaultSort:{
+ prop:'id',
+ order:'descending'
+ },
+ height: 200,
selection: true,
columnBtn: false,
index: true,
- rowKey: 'product',
+ indexFixed: false,
+ selectionFixed: false,
+ rowKey: 'mid',
indexLabel: '搴忓彿',
menuAlign: 'center',
- menuWidth: 100,
+ menuWidth: 130,
+ editBtn: false,
+ delBtn: false,
+ addBtn: false,
+ border: true,
+ align: 'center',
+ column: [
+ {
+ minWidth: 120,
+ prop: 'projectName',
+ label: '椤圭洰鍚嶇О',
+ overHidden: true,
+ },
+ {
+ minWidth: 100,
+ prop: 'contractNo',
+ label: '鍚堝悓鍙�',
+ overHidden: true,
+ },
+ {
+ minWidth: 120,
+ prop: 'orderTime',
+ label: '鎺ュ崟鏃ユ湡',
+ overHidden: true,
+ formatter: (row,columnValue)=> this.formatDate(row,columnValue)
+ },
+ {
+ minWidth: 120,
+ prop: 'customerName',
+ label: '瀹㈡埛鍚嶇О',
+ overHidden: true,
+ },
+ {
+ minWidth: 120,
+ prop: 'deliveryDate',
+ label: '浜よ揣鏃ユ湡',
+ overHidden: true,
+ formatter: (row,columnValue)=> this.formatDate(row,columnValue)
+ },
+ {
+ minWidth: 120,
+ prop: 'productType',
+ label: '浜у搧绫诲瀷',
+ overHidden: true,
+ },
+ {
+ minWidth: 120,
+ prop: 'product',
+ label: '浜у搧鍚�',
+ overHidden: true,
+ },
+ {
+ minWidth: 120,
+ prop: 'specs',
+ label: '瑙勬牸鍨嬪彿',
+ overHidden: true,
+ },
+ {
+ minWidth: 120,
+ prop: 'unit',
+ label: '鍗曚綅',
+ overHidden: true,
+ },
+ {
+ minWidth: 120,
+ prop: 'number',
+ label: '鏁伴噺',
+ overHidden: true,
+ },
+ {
+ minWidth: 120,
+ prop: 'productionStatus',
+ label: '鐢熶骇鎯呭喌',
+ overHidden: true,
+ },
+ {
+ minWidth: 120,
+ prop: 'productionRoutine',
+ label: '鐢熶骇绋嬪害',
+ overHidden: true,
+ },
+ {
+ minWidth: 120,
+ prop: 'projectLeader',
+ label: '椤圭洰璐熻矗浜�',
+ overHidden: true,
+ },
+ {
+ minWidth: 150,
+ prop: 'remark',
+ label: '澶囨敞',
+ overHidden: true,
+ }
+ ],
+ },
+ finishedOption: {
+ refreshBtn: false, // 鏄惁鏄剧ず鍒锋柊鎸夐挳
+ defaultSort:{
+ prop:'id',
+ order:'descending'
+ },
+ height: 180,
+ selection: true,
+ columnBtn: false,
+ index: true,
+ indexFixed: false,
+ selectionFixed: false,
+ rowKey: 'mid',
+ indexLabel: '搴忓彿',
+ menu: false,
+ menuAlign: 'center',
+ menuWidth: 130,
editBtn: false,
delBtn: false,
addBtn: false,
@@ -169,6 +436,9 @@
],
},
spanArr: [{
+ prop: 'id',
+ span: []
+ },{
prop: 'projectName',
span: []
}, {
@@ -196,24 +466,35 @@
},
components: {
ttable,
- TableForm,
},
computed: {
...mapGetters(['permissions']),
},
created(){
+ if(!this.permissions.plan_productionschedul_edit && !this.permissions.plan_productionschedul_del){
+ this.option.menu = false
+ }
this.loading = true
- this.getData()
+ this.getUnFinishedData()
+ this.getFinishedData()
this.getParamType()
- this.rowSort()
+ // this.rowSort()
this.rowCalc()
},
beforeUpdate() {
- this.rowSort()
+ // this.rowSort()
this.rowCalc()
},
watch:{
-
+ editDialogVisible(newVal){
+ if(!newVal){
+ this.editForm = {
+ id: null,
+ productionRoutine: null,
+ productionStatus: null,
+ }
+ }
+ }
},
mounted() {
@@ -221,6 +502,88 @@
beforeDestroy() {
},
methods: {
+ tagFinished(){
+ if(this.multipleSelection.length < 1){
+ this.$message.warning("璇烽�夋嫨涓�鏉℃暟鎹�")
+ return
+ }
+ let ids = this.multipleSelection.map(ele=>{
+ return ele.mid
+ })
+ updateState(ids).then(res=>{
+ if(res.status===200){
+ this.$message.success("鏇存柊鎴愬姛")
+ this.getUnFinishedData()
+ this.getFinishedData()
+ }
+ }).catch(error=>{
+ console.error(error);
+ })
+ },
+ confirmEdit(){
+ const _than = this
+ updateSchedul(this.editForm).then(res=>{
+ if(res.status===200){
+ _than.$message.success("鏇存柊鎴愬姛")
+ _than.editDialogVisible = false
+ _than.getUnFinishedData()
+ }
+ }).catch(error=>{
+ console.error(error);
+ })
+ },
+ editHandle(row,index){
+ if(row){
+ this.editForm.id = row.mid
+ this.editForm.productionRoutine = row.productionRoutine
+ this.editForm.productionStatus = row.productionStatus
+ this.editDialogVisible = true
+ }
+ },
+ openEditDialog(){
+ this.scheduleEditList = JSON.parse(JSON.stringify(this.scheduleList))
+ this.dialogVisible = true
+ },
+ confirmEditSchedul(){
+ let data = this.scheduleEditList
+ let orderObj = this.multipleSelection[0]
+ let obj = {
+ "documentActualTime": data[0].actualTime,
+ "documentPlanTime": data[0].planTime,
+ "bomActualTime": data[1].actualTime,
+ "bomPlanTime": data[1].planTime,
+ "contractActualTime": data[2].actualTime,
+ "contractPlanTime": data[2].planTime,
+ "arrivalActualTime": data[3].actualTime,
+ "arrivalPlanTime": data[3].planTime,
+ "checkActualTime": data[4].actualTime,
+ "checkPlanTime": data[4].planTime,
+ "productActualTime": data[5].actualTime,
+ "productPlanTime": data[5].planTime,
+ "id": orderObj.id,
+ "contractNo": orderObj.contractNo,
+ "customerName": orderObj.customerName,
+ "deliveryDate": orderObj.deliveryDate,
+ "orderTime": orderObj.orderTime,
+ "productType": orderObj.productType,
+ "projectName": orderObj.projectName
+ }
+ fillTime(obj).then(res=>{
+ if(res.status===200){
+ this.$message.success("鏇存柊鎴愬姛")
+ }else{
+ this.$message.error("鏇存柊澶辫触")
+ }
+ this.getScheduleById(orderObj.id)
+ this.dialogVisible = false
+ }).catch(error=>{
+ console.log(error);
+ })
+
+ },
+ handleClose(done){
+ done()
+ },
initTimeLine(data){
this.scheduleList = []
if(data){
@@ -269,11 +632,15 @@
}
},
selectionRow(val){
- if (val.length > 1) {
- const preVal = val.shift();
- this.$refs.crud.toggleRowSelection(preVal, false);
- }
- this.getScheduleById(val[0].id)
+ // if (val.length > 1) {
+ // const preVal = val.shift();
+ // this.$refs.crud.toggleRowSelection(preVal, false);
+ // }
+ // else{
+ // this.scheduleList=[]
+ // }
+ this.multipleSelection = val
+ // this.getScheduleById(val[0].id)
},
formatDate(row, cellValue){
if (cellValue) {
@@ -284,12 +651,25 @@
}
return ''
},
+ handleSizeChange(val){
+ if(val){
+ this.page.pageSize=val
+ this.getUnFinishedData()
+ }
+ },
+ handleCurrentChange(val){
+ if(val){
+ this.page.currentPage=val
+ this.getUnFinishedData()
+ }
+ },
// 鑾峰彇鏁版嵁鍒楄〃
- getData() {
+ getUnFinishedData() {
this.loading = true
let param = {
- size: 20,
- current: 1,
+ size: this.page.pageSize,
+ current: this.page.currentPage,
+ state: false
}
fetchScheduleList(param).then((res) => {
this.tableData = res.data.data.records
@@ -299,17 +679,37 @@
})
this.loading = false
},
- handleCurrentChange(val) {
- this.multipleSelection = val
+ getFinishedData() {
+ this.loading = true
+ let param = {
+ size: this.finishedPage.pageSize,
+ current: this.finishedPage.currentPage,
+ state: true
+ }
+ fetchScheduleList(param).then((res) => {
+ this.finishedTableData = res.data.data.records
+ this.finishedPage.total = res.data.data.total
+ this.finishedPage.currentPage = res.data.data.records.pages
+ this.scheduleList = []
+ })
+ this.loading = false
},
// 鍒犻櫎
deleteHandle(row,index) {
- this.$confirm('鏄惁纭鍒犻櫎', '鎻愮ず', {
+ const _than = this
+ _than.$confirm('鏄惁纭鍒犻櫎', '鎻愮ず', {
confirmButtonText: '纭畾',
cancelButtonText: '鍙栨秷',
type: 'warning'
}).then(function() {
-
+ deleteSchedul(row.mid).then(res=>{
+ if(res.status===200){
+ _than.$message.success("鍒犻櫎鎴愬姛")
+ _than.getData()
+ }
+ }).catch(error=>{
+ console.error(error)
+ })
})
},
//鍔ㄦ�佸悎骞舵柟娉�
@@ -320,7 +720,7 @@
ele.span = this.rowSpan(ele.prop, parent)
})
},
- rowSort(list) {
+ rowSort() {
let propList = this.spanArr.map(ele => ele.prop)
this.spanArr.forEach((ele, index) => {
let key = ele.prop
@@ -380,6 +780,15 @@
}
</script>
<style>
+.avue-crud__tip{
+ display: none;
+}
+.avue-crud__pagination {
+ position: relative;
+ padding: 5px 0 20px 20px;
+ text-align: right;
+ z-index: 10;
+}
.basic-template-table .el-table__body .el-table__row td:first-child .cell {
padding-left: 0px;
padding-right: 0px;
--
Gitblit v1.9.3