zhaowei
7 天以前 722b647891b3d4f120ffb492fea2159b54c20768
src/views/eam/maintenance/modules/EamInspectionOrderModal.vue
@@ -4,7 +4,8 @@
    <a-spin :spinning="spinning">
      <a-form-model ref="form" :model="model" :rules="validatorRules" :labelCol="labelCol" :wrapperCol="wrapperCol">
        <a-row :gutter="24">
        <a-row>
          <a-col :span="8">
            <a-form-model-item prop="standardCode" label="工单号">
              <a-input placeholder="工单号自动生成" v-model="model.orderNum" disabled/>
@@ -12,62 +13,65 @@
          </a-col>
          <a-col :span="8">
            <a-form-model-item prop="equipmentId" label="统一编码">
              <MaintenanceEquipmentSelect placeholder="请输入统一编码或名称搜索" v-model="model.equipmentId"
                                          :maintenanceCategory="maintenanceCategory" :disabled="disabled"
              <MaintenanceEquipmentSelect placeholder="请输入统一编码或名称搜索" v-model="model.equipmentId" :allow-clear="false"
                                          maintenanceCategory="POINT_INSPECTION" :disabled="!editable"
                                          @autocompleteForm="autocompleteForm"/>
            </a-form-model-item>
          </a-col>
          <a-col :span="8">
            <a-form-model-item prop="standardName" label="规范名称">
              <a-input placeholder="选择设备后自动带出" readOnly v-model="model.standardName"/>
            </a-form-model-item>
          </a-col>
        </a-row>
        <a-row :gutter="24">
          <a-col :span="8">
            <a-form-model-item prop="standardCode" label="规范编码">
              <a-input placeholder="选择设备后自动带出" readOnly v-model="model.standardCode"/>
            </a-form-model-item>
          </a-col>
          <a-col :span="8">
            <a-form-model-item label="保养周期">
              <a-input placeholder="选择设备后自动带出" v-model="model.maintenancePeriod" readOnly/>
            </a-form-model-item>
          </a-col>
          <a-col :span="8">
            <a-form-model-item prop="operator" label="点检人">
              <j-search-select-tag v-model="model.operator" placeholder="请选择点检人" :disabled="!model.equipmentId"
                                   :dictOptions="maintenanceOperatorOptions"/>
              <a-input placeholder="选择设备后自动带出" disabled v-model="model.standardName"/>
            </a-form-model-item>
          </a-col>
        </a-row>
        <a-row :gutter="24">
        <a-row>
          <a-col :span="8">
            <a-form-model-item label="点检日期" prop="inspectionDate">
              <j-date :placeholder="!model.maintenancePeriod?'请填写保养周期':'请选择点检日期'" v-model="model.inspectionDate"
                      :disabled="!model.maintenancePeriod"
                      @change="expirationTimeFrom(model.inspectionDate)" style="width: 100%"/>
            <a-form-model-item prop="standardCode" label="规范编码">
              <a-input placeholder="选择设备后自动带出" disabled v-model="model.standardCode"/>
            </a-form-model-item>
          </a-col>
          <a-col :span="8">
            <a-form-model-item label="点检过期时间">
              <j-date placeholder="选择点检日期后自动带出" v-model="model.expirationTime" disabled style="width: 100%"/>
            <a-form-model-item label="保养周期">
              <a-input v-model="model.maintenancePeriod" disabled/>
            </a-form-model-item>
          </a-col>
          <a-col :span="8">
            <a-form-model-item label="点检日期" prop="inspectionDate">
              <a-date-picker v-model="model.inspectionDate" @change="expirationTimeFrom(model.inspectionDate)"
                             :allow-clear="false" value-format="YYYY-MM-DD" style="width: 100%"/>
            </a-form-model-item>
          </a-col>
        </a-row>
        <a-row :gutter="24">
        <a-row>
          <a-col :span="8">
            <a-form-model-item label="点检过期时间">
              <a-date-picker placeholder="选择点检日期后自动带出" :value="model.expirationTime" disabled style="width: 100%"
                             value-format="YYYY-MM-DD"/>
            </a-form-model-item>
          </a-col>
        </a-row>
        <a-row>
          <a-col :span="24">
            <a-form-model-item label="备注" :labelCol="{span:2}" :wrapperCol="{span:21}" prop="remark">
              <a-textarea v-model="model.remark" rows="3" placeholder="请输入备注"/>
            </a-form-model-item>
          </a-col>
        </a-row>
        <a-row :gutter="24">
          <j-vxe-table ref="editableDetailTable" :rowNumber="true" :rowSelection="true" :bordered="true"
                       :alwaysEdit="true" :toolbar="true" keep-source :height="300" :loading="detail.loading"
                       :dataSource="detail.dataSource" :columns="detail.columns" style="margin-top: 8px;"/>
        </a-row>
        <a-tabs default-active-key="1">
          <a-tab-pane key="1" tab="日点检">
            <j-vxe-table rowNumber bordered keep-source :height="300" always-edit :dataSource="detail.dayInspectionList"
                         :columns="detail.standardInspectionColumns"/>
          </a-tab-pane>
          <a-tab-pane key="2" tab="周点检" v-if="detail.weekInspectionList.length>0" forceRender>
            <j-vxe-table rowNumber bordered always-edit keep-source :height="300"
                         :dataSource="detail.weekInspectionList"
                         :columns="detail.weekInspectionColumns"/>
          </a-tab-pane>
        </a-tabs>
      </a-form-model>
    </a-spin>
  </j-modal>
@@ -78,7 +82,7 @@
  import { JVxeTableModelMixin } from '@/mixins/JVxeTableModelMixin.js'
  import { JVXETypes } from '@/components/jeecg/JVxeTable'
  import MaintenanceEquipmentSelect from '@views/eam/equipment/modules/MaintenanceEquipmentSelect'
  import moment from 'dayjs'
  import moment from 'moment'
  export default {
    name: 'EamMaintenanceStandardModal',
@@ -101,66 +105,88 @@
        },
        confirmLoading: false,
        spinning: false,
        disabled: false,
        editable: true,
        validatorRules: {
          // standardName: [
          //   { required: true, message: '请输入规范名称!' }
          // ],
          inspectionDate: [
            { required: true, message: '请选择点检日期', trigger: 'change' }
          ],
          // maintenancePeriod: [
          //   { required: true, message: '请输入保养周期,单位:天!' }
          // ],
          equipmentId: [
            { required: true, message: '请选择设备', trigger: 'change' }
            { required: true, message: '请输入统一编码或名称搜索', trigger: 'change' }
          ]
        },
        url: {
          add: '/eam/eamInspectionOrder/add',
          edit: '/eam/eamInspectionOrder/edit',
          detail: '/eam/eamMaintenanceStandardDetail/queryList',
          detailOrder: '/eam/eamInspectionOrderDetail/queryList',
          userSelect: '/eam/user_select/list'
          weekInspectionOrderList: '/eam/eamWeekInspectionDetail/queryStandardList'
        },
        maintenanceCategory: 'POINT_INSPECTION',
        maintenanceOperatorOptions: [],
        standardId: '',
        standardType: false,
        detail: {
          loading: false,
          dataSource: [],
          columns: [
          dayInspectionList: [],
          weekInspectionList: [],
          standardInspectionColumns: [
            {
              title: '序号',
              key: 'itemCode',
              type: JVXETypes.inputNumber,
              width: '10%',
              align: 'center',
              validateRules: [
                { required: true, message: '请输入${title}' },
                { unique: true, message: '序号不能重复' }
              ]
              type: JVXETypes.normal,
              width: 100,
              align: 'center'
            },
            {
              title: '保养项',
              key: 'itemName',
              type: JVXETypes.textarea,
              width: '20%',
              align: 'center',
              validateRules: [
                { required: true, message: '请输入${title}' }
              ]
              type: JVXETypes.normal,
              align: 'center'
            },
            {
              title: '保养规范或要求',
              key: 'itemDemand',
              type: JVXETypes.normal,
              align: 'center'
            }
          ],
          weekInspectionColumns: [],
          weekInspectionOrderColumns: [
            {
              title: '序号',
              key: 'itemCode',
              type: JVXETypes.normal,
              width: 60,
              align: 'center'
            },
            {
              title: '保养项',
              key: 'itemName',
              type: JVXETypes.normal,
              align: 'center'
            },
            {
              title: '保养要求',
              key: 'itemDemand',
              type: JVXETypes.textarea,
              width: '30%',
              type: JVXETypes.normal,
              align: 'center'
            },
            {
              title: '点检结果',
              key: 'inspectionResult',
              type: JVXETypes.select,
              dictCode: 'inspection_project_result',
              align: 'center',
              validateRules: [
                { required: true, message: '请输入${title}' }
              ]
              disabled: true
            },
            {
              title: '异常描述',
              key: 'exceptionDescription',
              type: JVXETypes.normal,
              align: 'center'
            },
            {
              title: '异常是否报修',
              key: 'reportFlag',
              type: JVXETypes.select,
              ditCode: 'yn',
              align: 'center',
              disabled: true
            }
          ]
        }
@@ -168,62 +194,49 @@
    },
    methods: {
      add() {
        this.model = {}
        this.detail.dataSource = []
        this.model = { maintenancePeriod: 1 }
        this.visible = true
        this.disabled = false
        this.standardType = false
        this.editable = true
        this.detail.dayInspectionList = []
        this.detail.weekInspectionList = []
      },
      edit(record) {
        this.model = Object.assign({}, record)
        this.standardId = record.standardId
        this.disabled = true
        this.standardType = true
        this.model = Object.assign({ maintenancePeriod: 1 }, record)
        this.editable = false
        this.visible = true
        this.detail.dataSource = []
        if (record && record.referenceFile) {
          let obj = JSON.parse(record.referenceFile)
          this.model.fileList = [obj]
        } else {
          this.model.fieldList = []
        }
        this.loadDetailOrder(record.id)
        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) {
            let tableData = that.$refs.editableDetailTable.getTableData()
            let removeData = that.$refs.editableDetailTable.getDeleteData()
            that.model.tableDetailList = [...tableData]
            that.model.removeDetailList = [...removeData]
            that.confirmLoading = that.spinning = true
            let httpurl = ''
            let httpUrl = ''
            let method = ''
            if (!this.model.id) {
              httpurl += this.url.add
              httpUrl += this.url.add
              method = 'post'
            } else {
              httpurl += this.url.edit
              httpUrl += this.url.edit
              method = 'put'
            }
            this.model.standardId = this.standardId
            httpAction(httpurl, this.model, method).then((res) => {
            httpAction(httpUrl, this.model, method).then((res) => {
              if (res.success) {
                that.$message.success(res.message)
                that.$notification.success({
                  message: '消息',
                  description: res.message
                })
                that.$emit('ok')
                that.close()
              } else {
                that.$message.warning(res.message)
                that.$notification.warning({
                  message: '消息',
                  description: res.message
                })
              }
            }).finally(() => {
              that.confirmLoading = that.spinning = false
@@ -236,94 +249,61 @@
      autocompleteForm(selectObj) {
        this.model.standardName = selectObj.standardName
        this.model.maintenancePeriod = selectObj.maintenancePeriod
        this.model.standardCode = selectObj.standardCode
        // 若取消设备选择后保养周期为空则需清空点检日期和点检过期时间
        if (!this.model.equipmentId) {
          delete this.model.inspectionDate
          delete this.model.expirationTime
        } else {
          // 如果点检日期存在,则在重新选择设备后即保养周期可能发生改变后重新计算过期时间
          if (this.model.inspectionDate) this.expirationTimeFrom(this.model.inspectionDate)
        }
        if (!this.standardType) {
          console.log('this.standardType', this.standardType)
          this.standardId = selectObj.id
          this.loadDetail(selectObj.id)
        }
        this.$nextTick(() => this.loadMaintenanceOperatorList(this.model.equipmentId))
        this.standardId = selectObj.id
        this.detail.dayInspectionList = []
        this.detail.weekInspectionList = []
        this.loadDetail()
      },
      expirationTimeFrom(date) {
        // 选择点检日期后获取点检工单明细列表
        if (this.model.equipmentId) this.getWeekInspectionOrderListByApi()
        //过期时间是初始时间+保养周期
        if (date && this.model.maintenancePeriod) {
          // 转换为时间戳字符串(或指定格式)
          this.model.expirationTime = moment(date)
            .add(this.model.maintenancePeriod, 'days')
            .format('YYYY-MM-DD')
          this.model.expirationTime = moment(date).add(this.model.maintenancePeriod, 'days').format('YYYY-MM-DD')
        } else {
          this.model.expirationTime = null // 清空无效值
        }
      },
      //加载详情数据
      loadDetail(standardId) {
        this.detail.dataSource = []
        if (standardId) {
          console.log('standardId', standardId)
          this.spinning = true
          getAction(this.url.detail, { standardId: standardId })
            .then(res => {
              if (res.success) {
                this.detail.dataSource = [...res.result]
              }
            })
            .finally(() => {
              this.spinning = false
            })
        }
      },
      loadDetail() {
      loadDetailOrder(orderId) {
        if (orderId) {
          this.spinning = true
          getAction(this.url.detailOrder, { orderId: orderId })
            .then(res => {
              if (res.success) {
                this.detail.dataSource = [...res.result]
              }
            })
            .finally(() => {
              this.spinning = false
            })
        }
      },
      loadMaintenanceOperatorList(equipmentId) {
        this.maintenanceOperatorOptions = []
        let params = { positionCode: 'PCR0001' }
        if (equipmentId) {
          params.equipmentId = equipmentId
        } else {
          delete this.model.operator
          return
        }
        const that = this
        getAction(this.url.userSelect, params)
        this.spinning = true
        getAction(this.url.detail, { standardId: this.standardId })
          .then(res => {
            if (res.success) {
              that.maintenanceOperatorOptions = res.result.map(item => ({
                key: item.id,
                value: item.username,
                text: item.realname
              }))
              if (!that.maintenanceOperatorOptions.find(item => item.value === that.model.operator)) delete that.model.operator
            } else {
              if (that.model.operator) delete that.model.operator
              this.detail.dayInspectionList = res.result.filter(item => item.itemCategory == 'DAY_INSPECTION')
              this.detail.weekInspectionList = res.result.filter(item => item.itemCategory == 'WEEK_INSPECTION')
              this.detail.weekInspectionColumns = this.detail.standardInspectionColumns
              // 如果点检日期存在,则在重新选择设备后即保养周期可能发生改变后重新计算过期时间
              if (this.model.inspectionDate) this.expirationTimeFrom(this.model.inspectionDate)
            }
          })
          .catch(err => {
            if (that.model.operator) delete that.model.operator
          .finally(() => {
            if (!this.model.inspectionDate) this.spinning = false
          })
      },
      // 获取点检工单中的周点检明细
      getWeekInspectionOrderListByApi() {
        this.spinning = true
        getAction(this.url.weekInspectionOrderList, {
          standardId: this.standardId,
          inspectionDate: this.model.inspectionDate
        })
          .then(res => {
            if (res.success) {
              if (res.result.list.length > 0) {
                this.detail.weekInspectionList = res.result.list
                this.detail.weekInspectionColumns = this.detail.weekInspectionOrderColumns
              }
            }
          })
          .finally(() => {
            this.spinning = false
          })
      },
@@ -338,8 +318,4 @@
      }
    }
  }
</script>
<style lang="less" scoped>
</style>
</script>