zouyu
2024-02-29 363678a54142e62fdd4ca39a0db5c54af1a704dc
src/views/plan/productionschedul/index.vue
@@ -2,33 +2,49 @@
  <div class="mod-config">
    <basic-container>
      <el-row>
        <el-col :span="16" style="height:100vh">
          <el-row style="height:65%;padding:0px 10px;">
        <el-col :span="24">
          <el-row style="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-dropdown @command="changeTable">
                        <span :style="dropdownTitleStyle" class="el-dropdown-link">
                            {{dropdownTitle}}<i class="el-icon-arrow-down el-icon--right"></i>
                        </span>
                        <el-dropdown-menu slot="dropdown">
                            <el-dropdown-item command="undone">待完成调度</el-dropdown-item>
                            <el-dropdown-item command="done">已完成调度</el-dropdown-item>
                        </el-dropdown-menu>
                    </el-dropdown>
                </div>
                <div>
                  <el-button @click="tagFinished" v-if="showUnDownTable" size="mini" round type="success">标记已完成</el-button>
                  <el-button size="mini" round type="primary"
                  v-if="permissions.plan_productionschedul_edit_line"
                  v-if="permissions.plan_productionschedul_edit_line && showUnDownTable"
                  @click="openEditDialog">编辑时间线</el-button>
                  <el-tooltip content="刷新">
                    <el-button circle icon="el-icon-refresh" @click="getDataList"></el-button>
                  </el-tooltip>
                </div>
              </div>
              <!-- 待完成调度表格 -->
              <avue-crud
              v-if="showUnDownTable"
              class="unfinished-crud"
              :data="tableData"
              ref="crud"
              ref="unfinished"
              :option="option"
              :span-method="spanMethod"
              @refresh-change="getDataList"
              @current-change="handleCurrentChange"
              @size-change="handleSizeChange"
              @cell-click="handleClickCell"
              :page="page"
              @selection-change="selectionRow"
              :table-loading="loading">
                <template slot="product" slot-scope="scope">
                    <el-link type="primary">{{ scope.row.product }}</el-link>
                </template>
              <template #menu="{ row, index }">
                <el-button
                v-if="permissions.plan_productionschedul_edit"
@@ -44,14 +60,9 @@
                @click="deleteHandle(row, index)">删除</el-button>
              </template>
              </avue-crud>
            </el-col>
          </el-row>
          <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
              v-else
              class="finished-crud"
              :data="finishedTableData"
              ref="finished"
@@ -59,45 +70,20 @@
              :span-method="spanMethod"
              @refresh-change="getFinishedData"
              @current-change="handleCurrentChange"
              @cell-click="handleClickCell"
              @size-change="handleSizeChange"
              :page="finishedPage"
              @selection-change="selectionFinishedRow">
                <template slot="product" slot-scope="scope">
                    <el-link type="primary">{{ scope.row.product }}</el-link>
                </template>
              </avue-crud>
            </el-col>
          </el-row>
        </el-col>
        <el-col :span="8" style="padding-left: 10px">
          <div style="">
            <el-card>
              <div slot="header" class="clearfix">
                <span>调度时间线</span>
              </div>
              <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">
                        <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>
            </div>
            </el-card>
          </div>
        </el-col>
      </el-row>
    </basic-container>
    <!-- 编辑时间线 -->
    <el-dialog
    title="编辑时间线"
    :visible.sync="dialogVisible"
@@ -148,6 +134,7 @@
        <el-button type="primary" @click="confirmEditSchedul">确 定</el-button>
      </span>
  </el-dialog>
    <!-- 编辑生产过程和生产情况 -->
  <el-dialog
    title="编辑"
    :visible.sync="editDialogVisible"
@@ -173,6 +160,36 @@
      <el-button type="primary" @click="confirmEdit()">确 定</el-button>
    </span>
  </el-dialog>
    <!-- 查看时间线 -->
    <el-dialog
    title="查看调度时间线"
    top="5vh"
    :visible.sync="showTimeLineDialog"
    width="40%">
        <el-card>
            <div style="height:500px;overflow-y: scroll;">
            <el-timeline>
                <el-timeline-item
                    placement="top"
                    :color="(item.actualTime) ? '#34BD66' :null"
                    :icon="(item.actualTime) ? 'el-icon-circle-check' :null"
                    v-for="(item, index) in scheduleList"
                    :key="index"
                    :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>
            </div>
        </el-card>
    </el-dialog>
  </div>
</template>
@@ -184,12 +201,20 @@
  deleteSchedul,
  updateState,
  checkTimeLines,
  updateSchedul
} from '@/api//plan/productionschedul'
import ttable from '@/views/common/ztt-table.vue'
import { mapGetters } from 'vuex'
export default {
    data() {
    return {
      dropdownTitleStyle: {
        color: '#E84738',
        fontWeight: 'bold'
      },
      showUnDownTable: true,
      dropdownTitle: '待完成调度',
      showTimeLineDialog:false,
      editForm:{
        id: null,
        productionRoutine: null,
@@ -221,7 +246,7 @@
          prop:'id',
          order:'descending'
        },
        height: 370,
        height: 530,
        selection: true,
        columnBtn: false,
        index: true,
@@ -280,6 +305,7 @@
            prop: 'product',
            label: '产品名',
            overHidden: true,
            slot: true
          },
          {
            minWidth: 120,
@@ -391,6 +417,7 @@
            prop: 'product',
            label: '产品名',
            overHidden: true,
            slot: true
          },
          {
            minWidth: 120,
@@ -502,12 +529,26 @@
      }
    }
  },
  mounted() {
  },
  beforeDestroy() {
  },
  mounted() {},
  beforeDestroy() {},
  methods: {
    handleClickCell(row, column, cell, event){
        if(column.label === '产品名'){
            this.getScheduleById(row.mid)
            this.showTimeLineDialog = true
        }
    },
    changeTable(command){
        if(command === 'undone'){
            this.dropdownTitle = '待完成调度'
            this.dropdownTitleStyle = {color:'#E84738',fontWeight: 'bold'}
            this.showUnDownTable = true
        }else if(command === 'done'){
            this.dropdownTitle = '已完成调度'
            this.dropdownTitleStyle = {color:'#34BD66',fontWeight: 'bold'}
            this.showUnDownTable = false
        }
    },
    tagFinished(){
      if(this.multipleSelection.length < 1){
        this.$message.warning("请至少选择一条数据")
@@ -567,6 +608,7 @@
      })
    },
    confirmEditSchedul(){
      const _than = this
      let data = this.scheduleEditList
      let mIds = this.multipleSelection.map(ele=>{
        return ele.mid
@@ -588,16 +630,15 @@
      }
      fillTime(obj).then(res=>{
        if(res.status===200){
          this.$message.success("更新成功")
            _than.$message.success("更新成功")
        }else{
          this.$message.error("更新失败")
            _than.$message.error("更新失败")
        }
        this.getScheduleById(orderObj.id)
        this.dialogVisible = false
        // _than.getScheduleById(orderObj.id)
        _than.dialogVisible = false
      }).catch(error=>{
        console.error(error);
      })
    },
    initTimeLine(data){
      let scheduleList = []
@@ -649,7 +690,10 @@
    },
    selectionRow(val){
      this.multipleSelection = val
      this.getScheduleById(val[val.length-1].mid)
    //   if(this.multipleSelection.length>0){
    //       this.getScheduleById(val[val.length-1].mid)
    //       this.showTimeLineDialog = true
    //   }
    },
    selectionFinishedRow(val){
      if (val.length > 1) {
@@ -686,6 +730,9 @@
    getDataList(){
      this.getUnFinishedData()
      this.getFinishedData()
      this.$nextTick(()=>{
          this.rowCalc()
      })
    },
    getUnFinishedData() {
      this.loading = true
@@ -728,7 +775,7 @@
        deleteSchedul(row.mid).then(res=>{
          if(res.status===200){
            _than.$message.success("删除成功")
            _than.getData()
            _than.getDataList()
          }
        }).catch(error=>{
          console.error(error)