王震
2023-12-29 b3cdb967634dddba8a88bca2550f7e07c9ac262c
src/views/plan/productionschedul/index.vue
@@ -2,81 +2,90 @@
  <div class="mod-config">
    <basic-container>
      <el-row>
        <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>
        <el-col :span="16" style="height:100vh">
          <el-row style="height:65%;padding:0px 10px;">
            <el-col :span="24" style="margin: 0;">
              <div style="display:flex;height:36px;justify-content: space-between;align-items:center;">
                <div><span style="color:#E84738;font-weight: bold;">未完成</span></div>
                <div>
                  <el-button @click="tagFinished" size="mini" round type="success">标记已完成</el-button>
                  <el-button size="mini" round type="primary"
                  v-if="permissions.plan_productionschedul_edit_line"
                  @click="openEditDialog">编辑时间线</el-button>
                  <el-tooltip content="刷新">
                    <el-button circle icon="el-icon-refresh" @click="getDataList"></el-button>
                  </el-tooltip>
                </div>
              </div>
              <avue-crud
              class="unfinished-crud"
              :data="tableData"
              ref="crud"
              :option="option"
              :span-method="spanMethod"
              @refresh-change="getDataList"
              @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>
            </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>
          <el-row style="height:35%;padding:0px 10px;">
            <el-col :span="24" style="margin: 0;">
              <div style="display:flex;height:36px;justify-content: space-between;align-items:center;">
                <div><span style="color:#34BD66;font-weight: bold;">已完成</span></div>
              </div>
              <avue-crud
              class="finished-crud"
              :data="finishedTableData"
              ref="finished"
              :option="finishedOption"
              :span-method="spanMethod"
              @refresh-change="getFinishedData"
              @current-change="handleCurrentChange"
              @size-change="handleSizeChange"
              :page="finishedPage"
              @selection-change="selectionFinishedRow">
              <!-- <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>
            </el-col>
          </el-row>
        </el-col>
        <el-col :span="10" style="padding-left: 10px">
        <el-col :span="8" style="padding-left: 10px">
          <div style="">
            <el-card>
              <div slot="header" class="clearfix">
                <span>调度时间线</span>
                <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;">
              <div style="height:100vh;overflow-y: scroll;">
                <el-timeline>
                    <el-timeline-item
                      placement="top"
                      :color="(item.planTime||item.actualTime) ? '#34BD66' :null"
                      :icon="(item.planTime||item.actualTime) ? 'el-icon-circle-check' :null"
                      v-for="(item, index) in scheduleList"
                      :key="index"
                      :timestamp="item.title">
@@ -183,6 +192,7 @@
  fillTime,
  deleteSchedul,
  updateState,
  checkTimeLines,
} from '@/api//plan/productionschedul'
import ttable from '@/views/common/ztt-table.vue'
import { mapGetters } from 'vuex'
@@ -220,7 +230,7 @@
          prop:'id',
          order:'descending'
        },
        height: 200,
        height: 370,
        selection: true,
        columnBtn: false,
        index: true,
@@ -330,7 +340,7 @@
          prop:'id',
          order:'descending'
        },
        height: 180,
        height: 230,
        selection: true,
        columnBtn: false,
        index: true,
@@ -494,6 +504,11 @@
          productionStatus: null,
        }
      }
    },
    multipleSelection(newVal){
      if(newVal.length==0){
        this.scheduleList = []
      }
    }
  },
  mounted() {
@@ -504,7 +519,7 @@
  methods: {
    tagFinished(){
      if(this.multipleSelection.length < 1){
        this.$message.warning("请选择一条数据")
        this.$message.warning("请至少选择一条数据")
        return
      }
      let ids = this.multipleSelection.map(ele=>{
@@ -541,12 +556,30 @@
      }
    },
    openEditDialog(){
      this.scheduleEditList = JSON.parse(JSON.stringify(this.scheduleList))
      this.dialogVisible = true
      if(this.multipleSelection.length<1){
        this.$message.warning("请至少选择一条数据")
        return
      }
      let mIds = this.multipleSelection.map(ele=>{
        return ele.mid
      })
      checkTimeLines(mIds).then(res=>{
        if(res.data.data.length==1){
          let dataList = this.initTimeLine(res.data.data[0])
          this.scheduleEditList = dataList
          this.dialogVisible = true
        }else{
          this.$message.error("选中数据的调度时间线不一致!")
        }
      }).catch(error=>{
        console.error(error);
      })
    },
    confirmEditSchedul(){
      let data = this.scheduleEditList
      let orderObj = this.multipleSelection[0]
      let mIds = this.multipleSelection.map(ele=>{
        return ele.mid
      })
      let obj = {
        "documentActualTime": data[0].actualTime,
        "documentPlanTime": data[0].planTime,
@@ -560,13 +593,13 @@
        "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
        "mids": mIds,
        // "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){
@@ -577,7 +610,7 @@
        this.getScheduleById(orderObj.id)
        this.dialogVisible = false
      }).catch(error=>{
        console.log(error);
        console.error(error);
      })
    },
@@ -585,7 +618,7 @@
      done()
    },
    initTimeLine(data){
      this.scheduleList = []
      let scheduleList = []
      if(data){
        let arr = [
          {
@@ -619,28 +652,39 @@
            planTime: data.productPlanTime,
          },
        ]
        this.scheduleList = arr
        scheduleList = arr
        return scheduleList
      }
    },
    getScheduleById(id){
      if(id){
        fetchScheduleById(id).then(res=>{
          this.initTimeLine(res.data.data)
          this.scheduleList = this.initTimeLine(res.data.data)
        }).catch(error=>{
          console.log(error);
          console.error(error);
        })
      }
    },
    selectionRow(val){
      // if (val.length > 1) {
      //   const preVal = val.shift();
      //   this.$refs.crud.toggleRowSelection(preVal, false);
      // }
      // else{
      //   this.scheduleList=[]
      // }
      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)
      this.getScheduleById(val[0].mid)
    },
    selectionFinishedRow(val){
      if (val.length > 1) {
        const preVal = val.shift();
        this.$refs.finished.toggleRowSelection(preVal, false);
      }
      else{
        this.scheduleList=[]
      }
      this.getScheduleById(val[0].mid)
    },
    formatDate(row, cellValue){
      if (cellValue) {
@@ -664,6 +708,10 @@
      }
    },
    // 获取数据列表
    getDataList(){
      this.getUnFinishedData()
      this.getFinishedData()
    },
    getUnFinishedData() {
      this.loading = true
      let param = {
@@ -697,7 +745,7 @@
    // 删除
    deleteHandle(row,index) {
      const _than = this
      _than.$confirm('是否确认删除', '提示', {
      _than.$confirm('是否确认删除该生产调度信息', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
@@ -780,51 +828,22 @@
}
</script>
<style>
.avue-crud__tip{
.unfinished-crud .avue-crud__tip{
  display: none;
}
.unfinished-crud .avue-crud__menu{
  display: none;
}
.finished-crud .avue-crud__tip{
  display: none;
}
.finished-crud .avue-crud__menu{
  display: none;
}
.avue-crud__pagination {
    position: relative;
    padding: 5px 0 20px 20px;
    padding: 0px 0 0px 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;
}
.basic-template-table .el-table__body .el-table__row:hover {
  cursor: move;
}
.basic-template-table .el-table__body .el-table__row:hover .icon {
  display: inline-block;
}
.basic-template-table .el-table__body .el-table__row .icon {
  color: rgba(0, 0, 0, 0.45);
  font-size: 12px;
  line-height: 18px;
  display: none;
}
.aufontAll {
  font-family: aufontAll !important;
  font-size: 14px;
  font-style: normal;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}
.h-icon-all-drag {
  background: url('/img/tz.png') center center no-repeat;
  background-size: cover;
  font-size: 14px;
}
.h-icon-all-drag:before {
  content: '\E63E';
  font-size: 14px;
  visibility: hidden;
}
</style>