小小儁爺
2024-08-12 8ff18ada93d1e3a6174a28f9339bec8221f03e6a
src/views/produceManager/workOrder.vue
@@ -5,10 +5,10 @@
      <div class="bodyTopButtonGroup" style="justify-content: space-between">
        <div style="display: flex">
          <el-button v-waves type="primary" icon="el-icon-circle-plus-outline" @click="add('add')">新增</el-button>
          <el-button v-waves type="primary" icon="el-icon-connection" @click="send('send')">派发</el-button>
          <el-button v-waves type="primary" icon="el-icon-connection" @click="batchSend()">批量派发</el-button>
        </div>
        <el-button v-waves icon="el-icon-switch-button" @click="orderClose">关闭工单</el-button>
        <!--        <el-button v-waves icon="el-icon-switch-button" @click="orderClose">关闭工单</el-button>-->
      </div>
      <div class="bodyTopFormGroup">
@@ -138,24 +138,25 @@
          :cell-style="this.$cellStyle"
          @sort-change="sortChange"
          @row-click="rowClick"
          @selection-change="handleSelectionChange"
        >
          <!--          <el-table-column-->
          <!--            type="selection"-->
          <!--            width="50"-->
          <!--          />-->
          <el-table-column
            type="selection"
            width="50"
            fixed
          >
            <template slot-scope="{row}">
              <el-radio
                v-model="radioSelected"
                :label="row.wo_code"
                style="color: transparent;padding-left: 10px;"
              />
              <!--              @change.native="getCurrentRow(row.wo_code)"-->
            </template>
          </el-table-column>
            :selectable="selected"
          />
          <!--          <el-table-column-->
          <!--            width="50"-->
          <!--            fixed-->
          <!--          >-->
          <!--            <template slot-scope="{row}">-->
          <!--              <el-radio-->
          <!--                v-model="radioSelected"-->
          <!--                :label="row.wo_code"-->
          <!--                style="color: transparent;padding-left: 10px;"-->
          <!--              />-->
          <!--            </template>-->
          <!--          </el-table-column>-->
          <el-table-column
            prop="RowNum"
            width="50"
@@ -288,16 +289,7 @@
              <div v-else>/</div>
            </template>
          </el-table-column>
          <!--          <el-table-column-->
          <!--            prop="route_name"-->
          <!--            label="关联工艺路线"-->
          <!--            min-width="110"-->
          <!--          >-->
          <!--            <template slot-scope="{row}">-->
          <!--              <i v-if="row.route_name" class="el-icon-share" @click="routeClick(row)" />-->
          <!--              <i v-else style="color:rgb(180 ,181, 185)" class="el-icon-share" @click="routeClick(row)" />-->
          <!--            </template>-->
          <!--          </el-table-column>-->
          <el-table-column
            prop="plan_startdate"
            label="计划开始时间"
@@ -352,11 +344,27 @@
          />
          <el-table-column
            label="操作"
            width="120"
            width="140"
            fixed="right"
          >
            <template slot-scope="{row}">
              <div class="operationClass">
                <el-tooltip class="item" effect="dark" content="派发" placement="top">
                  <i
                    :style="{color:$store.state.settings.theme}"
                    class="el-icon-connection"
                    style="cursor: pointer;margin-right: 15px"
                    @click="send('send',row)"
                  />
                </el-tooltip>
                <el-tooltip class="item" effect="dark" content="工单关闭" placement="top">
                  <i
                    :style="{color:$store.state.settings.theme}"
                    class="el-icon-switch-button"
                    style="cursor: pointer;margin-right: 15px"
                    @click="orderClose(row.wo_code)"
                  />
                </el-tooltip>
                <el-tooltip class="item" effect="dark" content="打印工单" placement="top">
                  <!--                  <i-->
                  <!--                    class="el-icon-tickets"-->
@@ -505,6 +513,7 @@
        </el-table>
      </div>
    </div>
    <!--新增派发对话框-->
    <el-dialog
      v-el-drag-dialog
@@ -1927,26 +1936,26 @@
        </div>
      </div>
      <el-divider />
      <div>
        <i class="el-icon-s-operation" style="color:#42b983;" /> 默认工艺路线
      </div>
      <div style="margin-top: 20px">
        <el-select
          v-model="defaultroute_code"
          filterable
          style="width: 200px;"
          placeholder="请选择"
          class="defaultroute_code"
        >
          <el-option
            v-for="item in defaultroute_codeArr"
            :key="item.code"
            :label="item.name"
            :value="item.code"
          />
        </el-select>
      </div>
      <!--      <el-divider />-->
      <!--      <div>-->
      <!--        <i class="el-icon-s-operation" style="color:#42b983;" /> 默认工艺路线-->
      <!--      </div>-->
      <!--      <div style="margin-top: 20px">-->
      <!--        <el-select-->
      <!--          v-model="defaultroute_code"-->
      <!--          filterable-->
      <!--          style="width: 200px;"-->
      <!--          placeholder="请选择"-->
      <!--          class="defaultroute_code"-->
      <!--        >-->
      <!--          <el-option-->
      <!--            v-for="item in defaultroute_codeArr"-->
      <!--            :key="item.code"-->
      <!--            :label="item.name"-->
      <!--            :value="item.code"-->
      <!--          />-->
      <!--        </el-select>-->
      <!--      </div>-->
      <el-divider />
      <div style="margin-bottom: 10px">
        <i class="el-icon-s-operation" style="color:#42b983;" /> 工序列表
@@ -2004,6 +2013,205 @@
      </span>
    </el-dialog>
    <!--    批量派发对话框-->
    <el-dialog
      v-el-drag-dialog
      title="批量派发"
      :visible.sync="dialogVisible3"
      width="900px"
      top="10vh"
      :close-on-click-modal="false"
      @closed="handleClose3"
      @close="handleClose3"
    >
      <div style="height: 30px;width: 100%;margin-bottom: 10px;">
        <el-alert
          v-if="formData3.filter(i => i.routecode==='').length>0"
          :title="'当前选中'+multipleSelection.length+'个工单,有'+(formData3.filter(i => i.routecode==='').length)+'个工单未指定工艺路线,请指定!'"
          type="error"
        />
      </div>
      <div style="height: 600px;padding-right: 20px;overflow: auto">
        <div v-for="(i,index) in formData3" :key="index">
          <el-divider content-position="left">第{{ index+1 }}个工单</el-divider>
          <el-form
            ref="dialogForm"
            inline
            :model="i"
            style="margin-bottom: 20px"
            label-width="110px"
          >
            <el-form-item
              label="工单状态"
              prop="mesorderstus"
            >
              <el-select
                v-model="i.mesorderstus"
                disabled
                filterable
                :popper-append-to-body="false"
                style="width: 200px"
                placeholder="请选择"
              >
                <el-option
                  v-for="item in erporderstusArr"
                  :key="item.code"
                  :label="item.name"
                  :value="item.code"
                />
              </el-select>
            </el-form-item>
            <el-form-item label="工单编号" prop="mesordercode">
              <el-input v-model="i.mesordercode" disabled style="width: 200px" />
            </el-form-item>
            <el-form-item label="工单类型" prop="mesorderstus">
              <el-select
                v-model="i.ordertype"
                :popper-append-to-body="false"
                style="width: 200px"
                :disabled="operation!=='add'"
                placeholder="请选择"
                @change="mesordertypeChange"
              >
                <el-option
                  v-for="item in ordertypeArr"
                  :key="item.code"
                  :label="item.name"
                  :value="item.code"
                />
              </el-select>
            </el-form-item>
            <el-form-item label="源单单号">
              <el-input
                v-model="i.sourceorder"
                :disabled="i.ordertype==='PO'"
                style="width: 200px"
              >
                <!--            <el-button-->
                <!--              slot="append"-->
                <!--              icon="el-icon-search"-->
                <!--              :disabled="operation!=='add'||dialogForm.ordertype==='PO'"-->
                <!--              @click="mesordertsourcesearchclick"-->
                <!--            />-->
              </el-input>
            </el-form-item>
            <el-form-item label="工单数量" prop="mesqty">
              <el-input
                v-model="i.mesqty"
                oninput="value=value.replace(/[^0-9.]/g,'')"
                :disabled="operation!=='add'"
                style="width: 200px"
              />
            </el-form-item>
            <el-form-item
              v-if="operation==='add'"
              label="产品名称/编码"
              prop="partcode"
            >
              <el-select
                v-model="i.partcode"
                filterable
                :disabled="operation!=='add'"
                :popper-append-to-body="false"
                style="width: 200px"
                placeholder="请选择"
                @change="partcodeChangeDialog"
              >
                <el-option
                  v-for="item in partArr"
                  :key="item.partcode"
                  :label="item.partname+'/'+item.partcode"
                  :value="item.partcode"
                />
              </el-select>
            </el-form-item>
            <el-form-item v-if="operation!=='add'" label="产品名称" prop="partname">
              <el-input v-model="i.partname" disabled style="width: 200px" />
            </el-form-item>
            <el-form-item label="产品编码">
              <el-input v-model="i.partcode" disabled style="width: 200px" />
            </el-form-item>
            <el-form-item label="产品规格" prop="partspec">
              <el-input v-model="i.partspec" disabled style="width: 200px" />
            </el-form-item>
            <!--        <div style="display: flex">-->
            <el-form-item label="生产车间" prop="wkshopcode">
              <el-input v-model="i.wkshopname" disabled style="width: 200px" />
              <!--              <el-select-->
              <!--                v-model="i.wkshopcode"-->
              <!--                filterable-->
              <!--                :popper-append-to-body="false"-->
              <!--                style="width: 200px;"-->
              <!--                placeholder="请选择"-->
              <!--                disabled-->
              <!--              >-->
              <!--                <el-option-->
              <!--                  v-for="item in wkshopArr"-->
              <!--                  :key="item.org_code"-->
              <!--                  :label="item.org_name"-->
              <!--                  :value="item.org_code"-->
              <!--                />-->
              <!--              </el-select>-->
            </el-form-item>
            <el-form-item label="工艺路线">
              <el-select
                v-model="i.routecode"
                filterable
                :popper-append-to-body="false"
                style="width: 200px"
                placeholder="请选择"
                :disabled="i.wkshopcode===''"
              >
                <el-option
                  v-for="item in i.children"
                  :key="item.routecode"
                  :label="item.routename"
                  :value="item.routecode"
                />
              </el-select>
            </el-form-item>
            <el-form-item label="工价管控" required>
              <div style="display: flex;align-items: center;justify-content: space-between;width: 200px;">
                <el-switch
                  v-model="i.is_steprice"
                  active-color="#13ce66"
                  inactive-color="#eee"
                  style="width: 60px;"
                  @change="routecodeChange2(i)"
                />
                <el-button type="primary" @click="routeClick(i,routeIndex=index)">工艺选择</el-button>
              </div>
            </el-form-item>
          </el-form>
          <div style="display: flex;justify-content: flex-end;margin-top: -50px;margin-right: 50px">
            {{ i.children.length>0? i.children.find(it=>it.routecode===i.routecode).stepname:'' }}
          </div>
        </div>
      </div>
      <span slot="footer" class="dialog-footer">
        <div class="footerButton">
          <el-button v-waves @click="dialogVisible3=false">取 消</el-button>
          <el-button
            v-waves
            type="primary"
            :disabled="submitButtonIsDisabled"
            @click="dialogVisibleConfirm3"
          >确 定</el-button>
        </div>
      </span>
    </el-dialog>
  </div>
</template>
@@ -2012,9 +2220,20 @@
import {
  AddUpdateMesOrder,
  ClosedMesOrder,
  DeleteMesOrder, MesBadOrderSearch, JobCreationSonAddVison,
  MesOrderSearch, PartSelectRoute, RouteSelectWkshop, SearchWorkStep, SelectRouteOrWkshop,
  SelectRouteStep, AddMesOrderCodeSearch, ProductInHouseLabCode, UpdateMesOrderPrintCount
  DeleteMesOrder,
  MesBadOrderSearch,
  JobCreationSonAddVison,
  MesOrderSearch,
  PartSelectRoute,
  RouteSelectWkshop,
  SearchWorkStep,
  SelectRouteOrWkshop,
  SelectRouteStep,
  AddMesOrderCodeSearch,
  ProductInHouseLabCode,
  UpdateMesOrderPrintCount,
  BatchSearchRouteStep,
  BatchWorkSave
} from '@/api/produceManager'
import { InventoryFileAssociationRoute, PartSelect, SaveInventoryFile } from '@/api/makeModel'
import { handleDatetime, handleDatetime2, validateCode } from '@/utils/global'
@@ -2027,7 +2246,7 @@
import waves from '@/directive/waves'
export default {
  name: 'GD',
  name: 'WorkOrder',
  components: {
    Pagination
  },
@@ -2280,7 +2499,18 @@
      switchButton: false,
      routeStepArr: ''
      routeStepArr: '',
      dialogVisible3: false,
      multipleSelection: [],
      formData3: [],
      routeIndex: ''
      // dialogFormRules2: {
      //   routecode: [
      //     { required: true, message: '请选择工艺路线', trigger: ['blur', 'change'] }
      //   ]
      // }
    }
  },
  created() {
@@ -2513,12 +2743,12 @@
      this.dialogVisibleTask = false
    },
    // 派发
    send(operation) {
      if (this.radioSelected.length < 1) {
        return this.$message.info('请先选择工单!')
      }
      const row = this.tableData.find(item => item.wo_code === this.radioSelected)
    send(operation, row) {
      // if (this.radioSelected.length < 1) {
      //   return this.$message.info('请先选择工单!')
      // }
      //
      // const row = this.tableData.find(item => item.wo_code === this.radioSelected)
      if (row.status !== 'NEW') {
        return this.$message.info('此工单为非新工单状态,不可派发!')
@@ -2574,13 +2804,13 @@
      })
    },
    // 工单关闭事件
    orderClose() {
      if (this.radioSelected.length < 1) {
        return this.$message.info('请先选择工单!')
      }
    orderClose(wo_code) {
      // if (this.radioSelected.length < 1) {
      //   return this.$message.info('请先选择工单!')
      // }
      console.log('工单关闭事件')
      this.tableData.forEach(item => {
        if (item.wo_code === this.radioSelected) {
        if (item.wo_code === wo_code) {
          // if (item.status === 'START') {
          //   return this.$message.info('当前工单未完工,无法关闭!')
          // } else
@@ -3064,14 +3294,20 @@
    },
    /* 关联工艺路线模块*/
    // 关联工艺路线
    async routeClick(row) {
      console.log(row)
      // this.defaultroute_code = row.default_route
      this.dialogFormRoute.projectCode = row.partcode
      this.dialogFormRoute.projectName = row.partname
    async routeClick(i) {
      // console.log(row)
      // // this.defaultroute_code = row.default_route
      this.dialogFormRoute.projectCode = i.partcode
      this.dialogFormRoute.projectName = i.partname
      const { data: res } = await InventoryFileAssociationRoute({ partcode: i.partcode })
      this.dialogFormRoute.routeOperationArr = res.filter(j => j.wkshopcode === i.wkshopcode)
      if (this.dialogFormRoute.routeOperationArr.length === 0) {
        return this.$message.info('此车间下无工艺路线!')
      }
      this.dialogVisibleRoute = true
      const { data: res } = await InventoryFileAssociationRoute({ partcode: this.dialogFormRoute.projectCode })
      this.dialogFormRoute.routeOperationArr = res
      this.dialogFormRoute.routeOperationArr.forEach((item, index) => {
        item.isSelected1 = false
@@ -3083,7 +3319,7 @@
        if (item.flag === 'Y') {
          item.isSelected2 = true
          this.$nextTick(() => {
            $('input:checkbox').eq(index).prop('checked', true)
            $('.myCheckboxInput').eq(index).prop('checked', true)
          })
        }
      })
@@ -3103,23 +3339,36 @@
    },
    // 确定
    async routeDialogVisibleConfirm() {
      const temp = this.dialogFormRoute.routeOperationArr.filter(item => item.isSelected2)
      if (this.defaultroute_code === '' && temp.length > 0) {
        return this.$message.info('默认工艺路线不能为空!')
      if (!this.dialogFormRoute.routeOperationArr.find(i => i.isSelected2)) {
        return this.$message.info('请先选择工艺路线!')
      }
      // const temp = this.dialogFormRoute.routeOperationArr.filter(item => item.isSelected2)
      // if (this.defaultroute_code === '' && temp.length > 0) {
      //   return this.$message.info('默认工艺路线不能为空!')
      // }
      // 提交格式
      const data = []
      this.formData3[this.routeIndex].children = []
      this.dialogFormRoute.routeOperationArr.forEach(item => {
        if (item.isSelected2) {
          data.push({ code: item.code, name: item.name })
          // console.log(item, 8)
          data.push({ code: item.code, name: item.name, wkshopcode: this.formData3[this.routeIndex].wkshopcode, stepname: item.Data.map(i => { if (i.enable === 'Y') { return i.stepname } }).join(',') })
          this.formData3[this.routeIndex].children.push({
            routecode: item.code,
            routename: item.name,
            stepname: item.Data.map(i => { if (i.enable === 'Y') { return i.stepname } }).join(',')
          })
        }
      })
      const res = await SaveInventoryFile(this.dialogFormRoute.projectCode, this.defaultroute_code, data)
      if (res.code === '200') {
        this.$message.success('保存成功!')
        await this.getMesOrderSearch()
        this.formData3[this.routeIndex].routecode = this.formData3[this.routeIndex].children[0].routecode
        this.formData3[this.routeIndex].stepname = this.formData3[this.routeIndex].children[0].stepname
        this.dialogVisibleRoute = false
      }
    },
@@ -3203,7 +3452,124 @@
        this.$forceUpdate()
      }, 500)
    },
    handleSelectionChange(val) {
      this.multipleSelection = val
      console.log(this.multipleSelection)
    },
    // 批量派发
    async  batchSend() {
      if (this.multipleSelection.length === 0) {
        return this.$message.info('请先勾选相对应的工单!')
      }
      const data = []
      this.multipleSelection.forEach(i => {
        data.push({
          'wkshopcode': i.wkshp_code,
          'code': i.partcode,
          'name': i.wo_code,
          'flag': ''
        })
      })
      const { data: res } = await BatchSearchRouteStep(data)
      this.formData3 = []
      this.multipleSelection.forEach((item, index) => {
        item.stepname = res[index].children.length > 0 ? res[index].children[0].stepname : ''
        console.log(item.stepname)
        // if (item.stepname) {
        this.formData3.push({
          'mesorderstus': item.status,
          'sourceorder': item.m_po,
          'ordertype': item.wotype,
          'mesordercode': item.wo_code,
          'partcode': item.partcode,
          'mesqty': item.plan_qty,
          'routecode': res[index].children.length > 0 ? res[index].children[0].routecode : '',
          'wkshopcode': item.wkshp_code,
          'wkshopname': item.wkshp_name,
          'partname': item.partname,
          'partspec': item.partspec,
          'planstartdate': item.plan_startdate,
          'planenddate': item.plan_enddate,
          'orderlev': item.piroque,
          children: res[index].children.length > 0 ? res[index].children : [],
          is_steprice: false,
          'is_aps': '',
          'bom_id': ''
        })
        // }
      })
      if (this.formData3.length === 0) {
        return this.$message.info('未有符合可派发工单!')
      }
      this.dialogVisible3 = true
    },
    // 批量派发确定事件
    async dialogVisibleConfirm3() {
      if (this.formData3.filter(i => i.routecode === '').length > 0) {
        return this.$message.info('还有' + this.formData3.filter(i => i.routecode === '').length + '个工单未指定!')
      }
      const data = []
      this.formData3.forEach(i => {
        data.push({
          'mesorderstus': i.mesorderstus,
          'sourceorder': i.sourceorder,
          'ordertype': i.ordertype,
          'mesordercode': i.mesordercode,
          'partcode': i.partcode,
          'mesqty': i.mesqty,
          'routecode': i.routecode,
          'wkshopcode': i.wkshopcode,
          'planstartdate': i.planstartdate,
          'planenddate': i.planenddate,
          'orderlev': i.orderlev,
          'is_aps': 'N',
          'bom_id': ''
        })
      })
      const res = await BatchWorkSave(data)
      if (res.code === '200') {
        this.dialogVisible3 = false
        this.$message.success('批量派发成功!')
        await this.getMesOrderSearch()
      } else {
        this.$message.error('批量派发失败!')
      }
    },
    // 批量派发关闭事件
    handleClose3() {
      this.formData3 = []
      this.submitButtonIsDisabled = false
    },
    selected(row, index) {
      return row.status === 'NEW'
    },
    async  routecodeChange2(val) {
      if (val.routecode) {
        const data = {
          partcode: val.partcode,
          routecode: val.routecode,
          wkshopcode: val.wkshopcode,
          is_steprice: val.is_steprice ? 'Y' : 'N'
        }
        await SelectRouteOrWkshop(data).then((res) => {
          this.submitButtonIsDisabled = false
        }).catch(err => {
          // console.log(err, 2)
          this.submitButtonIsDisabled = true
        })
      }
    }
  }
}
</script>