zhangherong
2025-06-02 5dbc514187fa9979b61a37e134cde4ff39b6f92f
src/views/flowable/workflow/weekMaintenance/WeekMaintenanceApprovalModal.vue
@@ -8,16 +8,22 @@
    switchFullscreen
    @ok="handleOk"
    @cancel="handleCancel"
    centered
    cancelText="关闭">
    <a-spin :spinning="confirmLoading">
    <a-spin :spinning="spinning">
      <a-form-model ref="form" :model="model" :rules="validatorRules">
        <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;"> 保养基础信息
        </a-divider>
        <a-row :gutter="24">
          <a-col :span="8">
            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="orderNum" label="工单号">
              <a-input placeholder="工单号系统自动生成" v-model="model.orderNum" disabled />
            <a-form-model-item  prop="orderNum" label="工单号" :labelCol="labelCol" :wrapperCol="wrapperCol">
              <a-input v-model="model.orderNum" readOnly />
            </a-form-model-item>
          </a-col>
          <a-col :span='8'>
            <a-form-model-item label="工单状态" :labelCol="labelCol" :wrapperCol="wrapperCol">
              <a-input readOnly v-model="model.maintenanceStatus_dictText"/>
            </a-form-model-item>
          </a-col>
          <a-col :span="8">
@@ -28,50 +34,60 @@
                                            disabled></maintenance-equipment-select>
            </a-form-model-item>
          </a-col>
        </a-row>
        <a-row :gutter="24">
          <a-col :span="8">
            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="standardName" label="安装位置">
              <a-input v-model="model.installationPosition_dictText" readOnly />
            </a-form-model-item>
          </a-col>
          <a-col :span="8">
            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="standardName" label="标准名称">
              <a-input placeholder="选择设备后自动带出" v-model="model.standardName" disabled />
              <a-input v-model="model.standardName" readOnly/>
            </a-form-model-item>
          </a-col>
          <a-col :span="8">
            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="maintenancePeriod" label="保养周期">
              <a-input v-model="model.maintenancePeriod" readOnly />
            </a-form-model-item>
          </a-col>
        </a-row>
        <a-row :gutter="24">
          <a-col :span="8">
            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="maintenanceDate" label="保养日期">
              <a-date-picker placeholder="请选择计划保养日期" v-model="model.maintenanceDate" format="YYYY-MM-DD"
                             disabled
                             style="width: 100%" />
              <a-input v-model="model.maintenanceDate" readOnly/>
            </a-form-model-item>
          </a-col>
          <a-col :span="8">
            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="operator" label="保养人">
              <j-search-select-tag v-model="model.operator" placeholder="请选择保养人" disabled
                                   :dictOptions="maintenanceOperatorOptions" />
              <a-input v-model="model.operator_dictText" readOnly/>
            </a-form-model-item>
          </a-col>
          <a-col :span="8">
            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="maintenancePeriod" label="保养周期">
              <a-input placeholder="选择设备后自动带出" v-model="model.maintenancePeriod" disabled />
            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="保养人电话">
              <a-input v-model="model.operatorPhone_dictText" readOnly />
            </a-form-model-item>
          </a-col>
        </a-row>
        <a-row :gutter="24">
          <a-form-model-item :labelCol="labelColLong" :wrapperCol="wrapperColLong" prop="remark" label="备注">
            <a-textarea placeholder="请输入备注" v-model="model.remark" disabled />
            <a-textarea v-model="model.remark" readOnly/>
          </a-form-model-item>
        </a-row>
        <a-row :gutter="24">
          <a-form-model-item :labelCol="labelColLong" :wrapperCol="wrapperColLong" prop="remark" label="保养图片">
          <a-form-model-item :labelCol="labelColLong" :wrapperCol="wrapperColLong" label="保养图片">
            <lx-upload :returnUrl="false"
                       :isMultiple="true"
                       file-type="image"
                       :disabled="confirmDisable"
                       v-model="model.imageFilesResult" />
                       :number="3"
                       v-model="model.imageFilesResult"/>
          </a-form-model-item>
        </a-row>
        <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;"> 保养项信息
        </a-divider>
        <a-row :gutter="24">
          <a-tabs>
          <a-tabs v-model="activeTabKey">
            <a-tab-pane key="1" tab="保养项明细">
              <j-vxe-table
                ref="editableDetailTable"
@@ -92,39 +108,44 @@
                                     placeholder="请选择保养结果"
                                     :disabled="disableSubmit || confirmDisable"
                                     @change="handleInspectionResultSelectChange($event,props.row)"
                                     style="width: 100%" />
                                     style="width: 100%"/>
                </template>
                <template v-slot:exceptionDescription="props">
                  <a-textarea style="height: 32px" v-model="props.row.exceptionDescription"
                              :disabled="disableSubmit || confirmDisable || !props.row.maintenanceResult || props.row.maintenanceResult === '1'" />
                              :disabled="disableSubmit || confirmDisable || !props.row.maintenanceResult || props.row.maintenanceResult === '1'"/>
                </template>
                <template v-slot:reportFlag="props">
                  <j-dict-select-tag v-model="props.row.reportFlag"
                                     :disabled="disableSubmit || confirmDisable || !props.row.maintenanceResult || props.row.maintenanceResult === '1'"
                                     dictCode="yn"
                                     style="width: 100%" />
                                     style="width: 100%"/>
                </template>
              </j-vxe-table>
            </a-tab-pane>
            <a-tab-pane v-if="!disableSubmit" key='2' tab='流程节点'>
              <a-card :bordered="false">
                <a-timeline>
                  <a-timeline-item v-for="(item,index) in taskData" :key="index">
                    <div>
                      <h3 style="font-weight: bold;">{{item.taskName}}</h3>
                      <div>处理人:{{item.assignee_dictText}}</div>
                      <div v-if="index !==0">处理时长:{{item.duration}}</div>
                      <div v-if="item.name !== '提交申请'">处理类型:{{item.sequenceFlowName}}</div>
                      <div v-if="item.description">处理意见:{{item.description}}</div>
                    </div>
                  </a-timeline-item>
                </a-timeline>
              </a-card>
            </a-tab-pane>
            <a-button v-if="!disableSubmit || selectedRowKeys.length > 0" slot="tabBarExtraContent" type="primary"
                      @click="handleSelectAllInspectionResult">保养正常
            <template v-if="selectShenpiData.procInstId">
              <a-tab-pane key='2' tab='流程节点'>
                <a-card :bordered="false">
                  <a-timeline>
                    <a-timeline-item v-for="(item,index) in taskData" :key="index">
                      <div>
                        <h3 style="font-weight: bold;">{{item.taskName}}</h3>
                        <div>处理人:{{item.assignee_dictText}}</div>
                        <div v-if="index !==0">处理时长:{{item.duration}}</div>
                        <div v-if="item.name !== '提交申请'">处理类型:{{item.sequenceFlowName}}</div>
                        <div v-if="item.description">处理意见:{{item.description}}</div>
                      </div>
                    </a-timeline-item>
                  </a-timeline>
                </a-card>
              </a-tab-pane>
              <a-tab-pane key='3' tab='流程图'>
                <img :src="imageSrc" alt="Fetched Image"/>
              </a-tab-pane>
            </template>
            <a-button v-if="!disableSubmit &&!confirmDisable&& selectedRowKeys.length > 0" slot="tabBarExtraContent"
                      type="primary" @click="handleSelectAllInspectionResult">保养正常
            </a-button>
          </a-tabs>
        </a-row>
@@ -134,12 +155,14 @@
          <a-row :gutter="24">
            <a-col :span="12">
              <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="confirmDealType" label="确认类型">
                <j-dict-select-tag  type='radio' v-model='model.confirmDealType' dictCode='approved_rejected' placeholder="请选择处理类型" :disabled="disableSubmit || initialAcceptanceDisable" />
                <j-dict-select-tag type='radio' v-model='model.confirmDealType' dictCode='approved_rejected'
                                   placeholder="请选择处理类型" :disabled="disableSubmit || initialAcceptanceDisable"/>
              </a-form-model-item>
            </a-col>
            <a-col :span="12">
              <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="confirmComment" label="确认意见">
                <a-textarea placeholder="请输入意见" v-model="model.confirmComment" :disabled="disableSubmit || initialAcceptanceDisable" />
                <a-textarea placeholder="请输入意见" v-model="model.confirmComment"
                            :disabled="disableSubmit || initialAcceptanceDisable"/>
              </a-form-model-item>
            </a-col>
          </a-row>
@@ -149,16 +172,30 @@
          </a-divider>
          <a-row :gutter="24">
            <a-col :span="12">
              <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="initialAcceptanceComment" label="初验收意见">
                <a-textarea placeholder="请输入意见" v-model="model.initialAcceptanceComment" :disabled="disableSubmit || finalAcceptanceDisable" />
              <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="initialAcceptanceComment"
                                 label="初验收意见">
                <a-textarea placeholder="请输入意见" v-model="model.initialAcceptanceComment"
                            :disabled="disableSubmit || finalAcceptanceDisable"/>
              </a-form-model-item>
            </a-col>
            <a-col :span="12">
              <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="initialAcceptanceFilesResult" label="初验收附件">
            <a-col :span="6">
              <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="initialAcceptanceFilesResult"
                                 label="初验收附件">
                <lx-upload :returnUrl="false"
                           :isMultiple="true"
                           :disabled="disableSubmit || finalAcceptanceDisable"
                           v-model="model.initialAcceptanceFilesResult" />
                           v-model="model.initialAcceptanceFilesResult"/>
              </a-form-model-item>
            </a-col>
            <a-col :span="6">
              <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="randomInspectionFlag"
                                 label="抽检标记">
                <lx-switch
                  checked-children='是'
                  un-checked-children='否'
                  v-model="model.randomInspectionFlag"
                  :disabled="disableSubmit || finalAcceptanceDisable"
                />
              </a-form-model-item>
            </a-col>
          </a-row>
@@ -168,16 +205,30 @@
          </a-divider>
          <a-row :gutter="24">
            <a-col :span="12">
              <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="finalAcceptanceComment" label="终验收意见">
                <a-textarea placeholder="请输入意见" v-model="model.finalAcceptanceComment" :disabled="disableSubmit || completionDisable" />
              <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="finalAcceptanceComment"
                                 label="终验收意见">
                <a-textarea placeholder="请输入意见" v-model="model.finalAcceptanceComment"
                            :disabled="disableSubmit || completionDisable"/>
              </a-form-model-item>
            </a-col>
            <a-col :span="12">
              <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="finalAcceptanceFilesResult" label="终验收附件">
            <a-col :span="6">
              <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="finalAcceptanceFilesResult"
                                 label="终验收附件">
                <lx-upload :returnUrl="false"
                           :isMultiple="true"
                           :disabled="disableSubmit || completionDisable"
                           v-model="model.finalAcceptanceFilesResult" />
                           v-model="model.finalAcceptanceFilesResult"/>
              </a-form-model-item>
            </a-col>
            <a-col :span="6">
              <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="finalRandomInspectionFlag"
                                 label="抽检标记">
                <lx-switch
                  checked-children='是'
                  un-checked-children='否'
                  v-model="model.finalRandomInspectionFlag"
                  :disabled="disableSubmit || completionDisable"
                />
              </a-form-model-item>
            </a-col>
          </a-row>
@@ -188,339 +239,386 @@
</template>
<script>
import { getAction, httpAction } from '@/api/manage'
import { JVxeTableModelMixin } from '@/mixins/JVxeTableModelMixin.js'
import { JVXETypes } from '@comp/jeecg/JVxeTable'
import MaintenanceEquipmentSelect from '@views/eam/equipment/modules/MaintenanceEquipmentSelect'
  import { downFile, getAction, httpAction } from '@/api/manage'
  import { JVxeTableModelMixin } from '@/mixins/JVxeTableModelMixin.js'
  import { JVXETypes } from '@comp/jeecg/JVxeTable'
  import MaintenanceEquipmentSelect from '@views/eam/equipment/modules/MaintenanceEquipmentSelect'
export default {
  name: 'WeekMaintenanceApprovalModal',
  mixins: [JVxeTableModelMixin],
  components: {
    MaintenanceEquipmentSelect
  },
  data() {
    return {
      title: '操作',
      visible: false,
      //状态控制
      //保养中 不可编辑
      // confirmDisable: false,
      // initialAcceptanceDisable: false,
      // finalAcceptanceDisable: false,
      editable: false,
      model: {},
      maintenanceCategory: 'WEEK_MAINTENANCE',
      maintenanceOperatorOptions: [],
      labelCol: {
        xs: { span: 24 },
        sm: { span: 6 }
      },
      wrapperCol: {
        xs: { span: 24 },
        sm: { span: 16 }
      },
      labelColLong: {
        xs: { span: 24 },
        sm: { span: 2 }
      },
      wrapperColLong: {
        xs: { span: 24 },
        sm: { span: 21 }
      },
      confirmLoading: false,
      validatorRules: {
        confirmDealType: [
          { required: true, message: '请选择通过或驳回!' }
        ],
        confirmComment: [
          { required: true, message: '请输入确认意见!' }
        ],
        initialAcceptanceComment: [
          { required: true, message: '请输入初验收意见!' }
        ],
        finalAcceptanceComment: [
          { required: true, message: '请输入终验收意见!' }
        ],
      },
      url: {
        queryById: '/eam/weekMaintenanceOrder/queryById',
        detail: '/eam/weekMaintenanceOrderDetail/queryList',
        approval: '/eam/weekMaintenanceOrder/approval',
        userSelect: '/eam/user_select/list',
        queryHisTaskList: '/assign/flow/queryHisTaskList',
      },
      disableSubmit: false,
      taskData: [],
      isDisplayBmp: false,
      showBmpButtonLoading: false,
      selectedRowKeys: [],
      detail: {
        loading: false,
        dataSource: [],
        columns: [
          {
            title: 'ID',
            key: 'id',
            type: JVXETypes.hidden
          },
          {
            title: 'orderId',
            key: 'orderId',
            type: JVXETypes.hidden
          },
          {
            title: '序号',
            key: 'itemCode',
            type: JVXETypes.normal,
            width: '5%',
            align: 'center'
          },
          {
            title: '保养项',
            key: 'itemName',
            type: JVXETypes.normal,
            width: '10%',
            align: 'center'
          },
          {
            title: '子保养项',
            key: 'subItemName',
            type: JVXETypes.normal,
            width: '10%',
            align: 'center'
          },
          {
            title: '保养要求',
            key: 'itemDemand',
            type: JVXETypes.normal,
            width: '20%',
            align: 'center'
          },
          {
            title: '保养结果',
            key: 'maintenanceResult',
            type: JVXETypes.slot,
            width: '10%',
            align: 'center',
            slotName: 'maintenanceResult',
            validateRules: [
              { required: true, message: '保养结果不能为空!' }
            ]
          },
          {
            title: '异常描述',
            key: 'exceptionDescription',
            type: JVXETypes.slot,
            width: '20%',
            align: 'center',
            slotName: 'exceptionDescription',
          },
          {
            title: '是否报修',
            key: 'reportFlag',
            type: JVXETypes.slot,
            width: '10%',
            align: 'center',
            slotName: 'reportFlag',
  export default {
    name: 'WeekMaintenanceApprovalModal',
    mixins: [JVxeTableModelMixin],
    components: {
      MaintenanceEquipmentSelect
    },
    props: {
      selectShenpiData: {
        type: Object
      }
    },
    data() {
      return {
        title: '操作',
        visible: false,
        //状态控制
        //保养中 不可编辑
        // confirmDisable: false,
        // initialAcceptanceDisable: false,
        // finalAcceptanceDisable: false,
        editable: false,
        model: {},
        maintenanceCategory: 'WEEK_MAINTENANCE',
        maintenanceOperatorOptions: [],
        labelCol: {
          xs: { span: 24 },
          sm: { span: 6 }
        },
        wrapperCol: {
          xs: { span: 24 },
          sm: { span: 16 }
        },
        labelColLong: {
          xs: { span: 24 },
          sm: { span: 2 }
        },
        wrapperColLong: {
          xs: { span: 24 },
          sm: { span: 21 }
        },
        confirmLoading: false,
        spinning: false,
        imageSrc: null,
        activeTabKey: '1',
        validatorRules: {
          confirmDealType: [
            { required: true, message: '请选择通过或驳回!' }
          ],
          confirmComment: [
            { required: true, message: '请输入确认意见!' }
          ],
          initialAcceptanceComment: [
            { required: true, message: '请输入初验收意见!' }
          ],
          finalAcceptanceComment: [
            { required: true, message: '请输入终验收意见!' }
          ]
        },
        url: {
          queryById: '/eam/weekMaintenanceOrder/queryById',
          detail: '/eam/weekMaintenanceOrderDetail/queryList',
          approval: '/eam/weekMaintenanceOrder/approval',
          userSelect: '/eam/user_select/list',
          queryHisTaskList: '/assign/flow/queryHisTaskList',
          diagramView: '/assign/flow/diagramView'
        },
        disableSubmit: false,
        taskData: [],
        isDisplayBmp: false,
        showBmpButtonLoading: false,
        selectedRowKeys: [],
        detail: {
          loading: false,
          dataSource: [],
          columns: [
            {
              title: 'ID',
              key: 'id',
              type: JVXETypes.hidden
            },
            {
              title: 'orderId',
              key: 'orderId',
              type: JVXETypes.hidden
            },
            {
              title: '序号',
              key: 'itemCode',
              type: JVXETypes.normal,
              width: '5%',
              align: 'center'
            },
            {
              title: '保养项',
              key: 'itemName',
              type: JVXETypes.normal,
              width: '10%',
              align: 'center'
            },
            {
              title: '子保养项',
              key: 'subItemName',
              type: JVXETypes.normal,
              width: '10%',
              align: 'center'
            },
            {
              title: '保养要求',
              key: 'itemDemand',
              type: JVXETypes.normal,
              width: '20%',
              align: 'center'
            },
            {
              title: '保养结果',
              key: 'maintenanceResult',
              type: JVXETypes.slot,
              width: '10%',
              align: 'center',
              slotName: 'maintenanceResult',
              validateRules: [
                { required: true, message: '保养结果不能为空!' }
              ]
            },
            {
              title: '异常描述',
              key: 'exceptionDescription',
              type: JVXETypes.slot,
              width: '20%',
              align: 'center',
              slotName: 'exceptionDescription',
              validateRules: [
                { handler: this.customValidator }
              ]
            },
            {
              title: '是否报修',
              key: 'reportFlag',
              type: JVXETypes.slot,
              width: '10%',
              align: 'center',
              slotName: 'reportFlag',
              validateRules: [
                { handler: this.customValidator }
              ]
            }
          ],
          toolbarConfig: {
            // prefix 前缀;suffix 后缀
            slot: ['prefix', 'suffix'],
            // add 新增按钮;remove 删除按钮;clearSelection 清空选择按钮
            btn: ['clearSelection']
          }
        ],
        toolbarConfig: {
          // prefix 前缀;suffix 后缀
          slot: ['prefix', 'suffix'],
          // add 新增按钮;remove 删除按钮;clearSelection 清空选择按钮
          btn: ['clearSelection']
        }
      }
    }
  },
  created() {
  },
  computed: {
    confirmDisable: function(){
      return ['WAIT_CONFIRM', 'WAIT_INITIAL_ACCEPTANCE', 'WAIT_FINAL_ACCEPTANCE', 'COMPLETE'].includes(this.model.maintenanceStatus);
    },
    initialAcceptanceDisable: function() {
      return ['WAIT_INITIAL_ACCEPTANCE', 'WAIT_FINAL_ACCEPTANCE', 'COMPLETE'].includes(this.model.maintenanceStatus);
    created() {
    },
    finalAcceptanceDisable: function() {
      return ['WAIT_FINAL_ACCEPTANCE', 'COMPLETE'].includes(this.model.maintenanceStatus);
    computed: {
      confirmDisable: function() {
        return ['WAIT_CONFIRM', 'WAIT_INITIAL_ACCEPTANCE', 'WAIT_FINAL_ACCEPTANCE', 'COMPLETE'].includes(this.model.maintenanceStatus)
      },
      initialAcceptanceDisable: function() {
        return ['WAIT_INITIAL_ACCEPTANCE', 'WAIT_FINAL_ACCEPTANCE', 'COMPLETE'].includes(this.model.maintenanceStatus)
      },
      finalAcceptanceDisable: function() {
        return ['WAIT_FINAL_ACCEPTANCE', 'COMPLETE'].includes(this.model.maintenanceStatus)
      },
      completionDisable: function() {
        return ['COMPLETE', 'ABOLISH'].includes(this.model.maintenanceStatus)
      }
    },
    completionDisable: function() {
      return ['COMPLETE', 'ABOLISH'].includes(this.model.maintenanceStatus);
    }
  },
  methods: {
    async handleDetail(item) {
      this.loading = true
      this.visible = true
      this.detail.dataSource = []
      let taskDataList = await  getAction(this.url.queryHisTaskList, { procInstId: item.procInstId });
      this.taskData = [...taskDataList.result];
      let res = await getAction(this.url.queryById, {id: item.dataId})
      this.model = Object.assign({}, res.result)
      if(this.model.imageFiles) {
        let obj = JSON.parse(this.model.imageFiles);
        this.model.imageFilesResult = [...obj];
      }
      if(this.model.initialAcceptanceFiles) {
        let obj = JSON.parse(this.model.initialAcceptanceFiles);
        this.model.initialAcceptanceFilesResult = [...obj];
      }
      if(this.model.finalAcceptanceFiles) {
        let obj = JSON.parse(this.model.finalAcceptanceFiles);
        this.model.finalAcceptanceFilesResult = [...obj];
      }
      this.model.dataId = item.dataId
      this.model.taskId = item.id
      this.model.userId = item.assignee
      this.model.instanceId = item.procInstId
      this.model.values = item.variables
      await this.loadDetail(item.dataId)
      this.loading = false
    },
    recordDetail(record) {
      this.loading = true
      this.visible = true
      this.detail.dataSource = []
      this.model = Object.assign({}, record)
      if(this.model.imageFiles) {
        let obj = JSON.parse(this.model.imageFiles);
        this.model.imageFilesResult = [...obj];
      }
      if(this.model.initialAcceptanceFiles) {
        let obj = JSON.parse(this.model.initialAcceptanceFiles);
        this.model.initialAcceptanceFilesResult = [...obj];
      }
      if(this.model.finalAcceptanceFiles) {
        let obj = JSON.parse(this.model.finalAcceptanceFiles);
        this.model.finalAcceptanceFilesResult = [...obj];
      }
      this.loadDetail(record.id)
      this.loading = false
    },
    close() {
      this.$emit('close')
      this.visible = false
      this.$refs.form.clearValidate()
    },
    async handleOk() {
      const that = this
      let errMap = await that.$refs.editableDetailTable.validateTable()
      if (errMap) {
        this.$message.warning('数据校验失败!')
        return
      }
      // 触发表单验证
      this.$refs.form.validate(valid => {
        if (valid) {
          let tableData = that.$refs.editableDetailTable.getTableData();
    methods: {
      async handleDetail(item) {
        this.initParams()
        this.model = {}
        if (item.procInstId) {
          const { processDefinitionId, processInstanceId, processDefinitionKey, procInstId } = item
          let checkMsg = null;
          tableData.some(row => {
            if(!row.maintenanceResult) {
              checkMsg = '保养结果不能为空!';
              return true;
            }
            if(row.maintenanceResult === '2' && (!row.exceptionDescription || !row.reportFlag)) {
              checkMsg = '保养结果为异常,需要填写异常原因及是否报修!';
              return true;
            }
          })
          if(checkMsg) {
            that.$message.warning(checkMsg);
            return;
          }
          let taskDataList = await getAction(this.url.queryHisTaskList, { procInstId })
          this.taskData = [...taskDataList.result]
          that.model.tableDetailList = [...tableData]
          that.confirmLoading = true
          let httpurl = this.url.approval
          let method = 'put'
          httpAction(httpurl, this.model, method).then((res) => {
            if (res.success) {
              that.$message.success(res.message)
              that.$emit('searchReset')
              that.close()
            } else {
              that.$message.warning(res.message)
            }
          }).finally(() => {
            that.confirmLoading = false
          })
        } else {
          return false
          downFile(this.url.diagramView, {
            processDefinitionId,
            processInstanceId,
            TaskDefinitionKey: processDefinitionKey
          }, 'get')
            .then((res => {
              const urlObject = window.URL.createObjectURL(new Blob([res]))
              this.imageSrc = urlObject
            }))
            .catch(err => {
              this.$notification.error({
                message: '消息',
                description: res.message
              })
            })
        }
      })
    },
    handleCancel() {
      this.close()
    },
    autocompleteForm(selectObj) {
      this.$set(this.model, 'standardName', selectObj.standardName)
      this.$set(this.model, 'maintenancePeriod', selectObj.maintenancePeriod)
      this.$set(this.model, 'standardId', selectObj.id)
      this.$set(this.model, 'equipmentId', selectObj.equipmentId)
      // console.log('model', this.model)
      if (!this.model.id) {
        this.loadStandardDetail(selectObj.id)
      }
      this.loadMaintenanceOperatorList(this.model.equipmentId)
    },
    //标准选择变化
    loadDetail(orderId) {
      if (orderId) {
        getAction(this.url.detail, { orderId: orderId }).then(res => {
          if (res.success) {
            this.detail.dataSource = [...res.result]
        let res = await getAction(this.url.queryById, { id: item.dataId })
        this.model = Object.assign({}, res.result)
        if (this.model.imageFiles) {
          let obj = JSON.parse(this.model.imageFiles)
          this.model.imageFilesResult = [...obj]
        }
        if (this.model.initialAcceptanceFiles) {
          let obj = JSON.parse(this.model.initialAcceptanceFiles)
          this.model.initialAcceptanceFilesResult = [...obj]
        }
        if (this.model.finalAcceptanceFiles) {
          let obj = JSON.parse(this.model.finalAcceptanceFiles)
          this.model.finalAcceptanceFilesResult = [...obj]
        }
        this.model.dataId = item.dataId
        this.model.taskId = item.id
        this.model.userId = item.assignee
        this.model.instanceId = item.procInstId
        this.model.values = item.variables
        await this.loadDetail(item.dataId)
      },
      async recordDetail(record) {
        console.log('record', record)
        this.initParams()
        let res = await getAction(this.url.queryById, { id: record.id })
        this.model = Object.assign({}, res.result)
        if (this.model.imageFiles) {
          let obj = JSON.parse(this.model.imageFiles)
          this.model.imageFilesResult = [...obj]
        }
        if (this.model.initialAcceptanceFiles) {
          let obj = JSON.parse(this.model.initialAcceptanceFiles)
          this.model.initialAcceptanceFilesResult = [...obj]
        }
        if (this.model.finalAcceptanceFiles) {
          let obj = JSON.parse(this.model.finalAcceptanceFiles)
          this.model.finalAcceptanceFilesResult = [...obj]
        }
        this.loadDetail(record.id)
      },
      initParams() {
        this.detail.dataSource = []
        this.visible = true
        this.activeTabKey = '1'
        this.spinning = true
      },
      async handleOk() {
        const that = this
        let errMap = await that.$refs.editableDetailTable.validateTable()
        if (errMap) {
          this.$message.warning('数据校验失败!')
          return
        }
        // 触发表单验证
        this.$refs.form.validate(valid => {
          if (valid) {
            that.confirmLoading = that.spinning = true
            let tableData = that.$refs.editableDetailTable.getTableData()
            that.model.tableDetailList = [...tableData]
            let httpurl = this.url.approval
            let method = 'put'
            httpAction(httpurl, this.model, method).then((res) => {
              if (res.success) {
                that.$message.success(res.message)
                that.$emit('searchReset')
                that.close()
              } else {
                that.$message.warning(res.message)
              }
            }).finally(() => {
              that.confirmLoading = that.spinning = false
            })
          } else {
            return false
          }
        })
      }
    },
    loadMaintenanceOperatorList(equipmentId) {
      this.maintenanceOperatorOptions = []
      let params = { positionCode: 'PCR0001' }
      if (equipmentId) {
        params.equipmentId = equipmentId
      }
      getAction(this.url.userSelect, params).then(res => {
        if (res.success) {
          this.maintenanceOperatorOptions = res.result.map(item => ({
            key: item.id,
            value: item.username,
            text: item.realname
          }))
      },
      autocompleteForm(selectObj) {
        this.$set(this.model, 'standardName', selectObj.standardName)
        this.$set(this.model, 'maintenancePeriod', selectObj.maintenancePeriod)
        this.$set(this.model, 'standardId', selectObj.id)
        this.$set(this.model, 'equipmentId', selectObj.equipmentId)
        // console.log('model', this.model)
        if (!this.model.id) {
          this.loadStandardDetail(selectObj.id)
        }
      })
    },
    handleInspectionResultSelectChange(value, record) {
      if (record.exceptionDescription) delete record.exceptionDescription
      if (record.reportFlag) delete record.reportFlag
    },
    // 批量选择所有点检结果
    handleSelectAllInspectionResult() {
      this.selectedRowKeys.forEach(key => {
        const dataItem = this.detail.dataSource.find(item => item.id === key)
        if (dataItem && dataItem.maintenanceResult !== '1') {
          console.log('dataItem', dataItem)
          delete dataItem.exceptionDescription
          delete dataItem.reportFlag
          dataItem.maintenanceResult = '1'
        this.loadMaintenanceOperatorList(this.model.equipmentId)
      },
      //标准选择变化
      loadDetail(orderId) {
        if (orderId) {
          getAction(this.url.detail, { orderId: orderId })
            .then(res => {
              if (res.success) {
                this.detail.dataSource = [...res.result]
              }
            })
            .finally(() => {
              this.spinning = false
            })
        }
      })
      this.$refs.editableDetailTable.clearCheckboxRow()
      this.selectedRowKeys = []
    },
    /**
     * 表格多选框发生改变时触发
     * @param {selectedRowIds} 表格中已选择的ID列表
     */
    handleTableSelectRowChange({ selectedRowIds }) {
      this.selectedRowKeys = selectedRowIds
    },
      },
      loadMaintenanceOperatorList(equipmentId) {
        this.maintenanceOperatorOptions = []
        let params = { positionCode: 'PCR0001' }
        if (equipmentId) {
          params.equipmentId = equipmentId
        }
        getAction(this.url.userSelect, params).then(res => {
          if (res.success) {
            this.maintenanceOperatorOptions = res.result.map(item => ({
              key: item.id,
              value: item.username,
              text: item.realname
            }))
          }
        })
      },
      handleInspectionResultSelectChange(value, record) {
        if (record.exceptionDescription) delete record.exceptionDescription
        if (record.reportFlag) delete record.reportFlag
      },
      // 批量选择所有点检结果
      handleSelectAllInspectionResult() {
        this.selectedRowKeys.forEach(key => {
          const dataItem = this.detail.dataSource.find(item => item.id === key)
          if (dataItem && dataItem.maintenanceResult !== '1') {
            console.log('dataItem', dataItem)
            delete dataItem.exceptionDescription
            delete dataItem.reportFlag
            dataItem.maintenanceResult = '1'
          }
        })
        this.$refs.editableDetailTable.clearCheckboxRow()
        this.selectedRowKeys = []
      },
      /**
       * 表格多选框发生改变时触发
       * @param {selectedRowIds} 表格中已选择的ID列表
       */
      handleTableSelectRowChange({ selectedRowIds }) {
        this.selectedRowKeys = selectedRowIds
      },
      customValidator({ cellValue, row }, callback) {
        if (row.maintenanceResult === '2') {
          if (!cellValue) {
            callback(false, '${title}不能为空!') // false = 未通过,可以跟自定义提示
          } else {
            callback(true) // true = 通过验证
          }
        } else {
          callback(true)
        }
      },
      handleCancel() {
        this.close()
      },
      close() {
        this.$emit('close')
        this.visible = false
        this.$refs.form.clearValidate()
      }
    }
  }
}
</script>
<style lang="less" scoped>