Houjie
2025-06-15 be0a6bf776b5ce3e388088e96295960eb7c0d406
src/views/tms/requirement/modules/ToolsSharpeningModal.vue
@@ -2,125 +2,137 @@
  <j-modal
    :title="title"
    :width="1200"
    :visible="visible"
    :confirmLoading="confirmLoading"
    switchFullscreen
    centered
    :visible="visible"
    :mask-closable="false"
    @ok="handleOk"
    @cancel="handleCancel"
    cancelText="关闭">
    <a-spin :spinning="spinning">
      <a-form-model ref="form" :model="model" :rules="validatorRules" :labelCol="labelCol" :wrapperCol="wrapperCol">
        <a-row :gutter="24">
          <a-col :span="8">
            <a-form-model-item prop="standardCode" label="工具编号">
              <a-input-search v-model="model.toolsId"  placeholder="请选择工具编号"  :disabled="disableSubmit" @search="onSearchPart" enter-button
          <a-col :span="12">
            <a-form-model-item prop="standardCode" label="工具编码">
              <a-input-search v-model="model.toolId" placeholder="请选择工具编码" :disabled="disableSubmit"
                              @search="selectTools" enter-button
              />
            </a-form-model-item>
          </a-col>
          <a-col :span="10">
            <a-form-model-item prop="equipmentId" label="工具分类名称">
              <a-input placeholder="请输入工具分类名称" v-model="model.typeName" readOnly/>
          <a-col :span="12">
            <a-form-model-item prop="classify_id" label="工具分类名称">
              <a-input placeholder="请输入工具分类名称" v-model="model.classifyId" readOnly :disabled="disableSubmit" />
            </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.paraTypeFlagName" readOnly/>
          <a-col :span="12">
            <a-form-model-item prop="paramaTableName" label="工具参数标识">
              <a-input placeholder="选择设备后自动带出" readOnly v-model="model.paramaTableName_dictText" readOnly
                       :disabled="disableSubmit" />
            </a-form-model-item>
          </a-col>
          <a-col :span="8">
          <a-col :span="12">
            <a-form-model-item label="工具类型">
              <a-input placeholder="选择设备后自动带出" v-model="model.applicationType" readOnly/>
              <a-input placeholder="选择设备后自动带出" v-model="model.applicationType_dictText" readOnly
                       :disabled="disableSubmit" />
            </a-form-model-item>
          </a-col>
        </a-row>
        <a-row :gutter="24">
          <a-col :span="8">
            <a-form-model-item prop="operator" label="责任人">
              <j-dict-select-tag type="list" v-model="model.reportPerson" dictCode="sys_user,realname,id" placeholder="请选择报工人员" />
          <a-col :span="12">
            <a-form-model-item prop="responsiblePerson" label="责任人">
              <j-dict-select-tag type="list" v-model="model.responsiblePerson" dictCode="sys_user,realname,id"
                                 placeholder="请选择责任人" :disabled="disableSubmit" />
            </a-form-model-item>
          </a-col>
          <a-col :span="8">
            <a-form-model-item prop="standardName" label="工具分类编码">
              <a-input placeholder="选择设备后自动带出" readOnly v-model="model.classifyId" readOnly/>
          <a-col :span="12">
            <a-form-model-item label="刃磨时间" prop="sharpeningTime">
              <j-date placeholder="请选择刃磨时间" date-format="YYYY-MM-DD HH:mm:ss" v-model="model.sharpeningTime"
                      style="width: 100%" :disabled="disableSubmit" />
            </a-form-model-item>
          </a-col>
        </a-row>
        <a-row :gutter="24">
          <a-col :span="8">
            <a-form-model-item label="结果及建议" prop="inspectionDate">
              <a-input placeholder="选择填写刃磨结果及建议"  v-model="model.sharpeningResult" readOnly/>
          <a-col :span="12">
            <a-form-model-item label="刃磨结果及建议" prop="sharpeningResult">
              <a-textarea placeholder="选择填写刃磨结果及建议" v-model="model.sharpeningResult"
                          :disabled="disableSubmit" />
            </a-form-model-item>
          </a-col>
          <a-col :span="6">
          <a-col :span="12">
            <a-form-model-item label="型号/图号">
              <j-date placeholder="选择填写型号/图号" v-model="model.toolModel" disabled style="width: 100%"/>
              <a-input placeholder="选择填写型号/图号" v-model="model.toolModel" :disabled="disableSubmit" />
            </a-form-model-item>
          </a-col>
        </a-row>
        <a-row :gutter="24">
          <a-col :span="8">
          <a-col :span="12">
            <a-form-model-item label="仓库城市" prop="inspectionDate">
              <a-input placeholder="选择填写仓库省份城市"  v-model="model.provinceCity" readOnly/>
              <a-input placeholder="选择填写仓库省份城市" v-model="model.provinceCity" readOnly
                       :disabled="disableSubmit" />
            </a-form-model-item>
          </a-col>
          <a-col :span="8">
          <a-col :span="12">
            <a-form-model-item label="库区/库号">
              <j-date placeholder="选择填写库区/库号" v-model="model.warehouseId" disabled style="width: 100%"/>
              <a-input placeholder="选择填写库区/库号" v-model="model.warehouseId" readOnly :disabled="disableSubmit" />
            </a-form-model-item>
          </a-col>
        </a-row>
        <a-row :gutter="24">
          <a-col :span="8">
            <a-form-model-item label="存储位置" prop="inspectionDate">
              <a-input placeholder="选择填写存储位置"  v-model="model.storageLocation" readOnly/>
          <a-col :span="12">
            <a-form-model-item label="存储位置" prop="storageLocation">
              <a-input placeholder="选择填写存储位置" v-model="model.positionCode" readOnly
                       :disabled="disableSubmit" />
            </a-form-model-item>
          </a-col>
          <a-col :span="8">
          <a-col :span="12">
            <a-form-model-item label="计量主单位">
              <j-date placeholder="请填写计量主单位" v-model="model.mainUnit" disabled style="width: 100%"/>
              <a-input placeholder="请填写计量主单位" v-model="model.mainUnit" readOnly :disabled="disableSubmit" />
            </a-form-model-item>
          </a-col>
        </a-row>
        <a-row :gutter="24">
          <a-col :span="8">
            <a-form-model-item label="刃磨时间" prop="inspectionDate">
              <j-date placeholder="请选择打印时间" v-model="model.sharpeningTime"  style="width: 100%" />
            </a-form-model-item>
          </a-col>
        </a-row>
        <a-row :gutter="24">
          <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-col :span="12">
            <a-form-model-item label="备注" prop="remark">
              <a-textarea v-model="model.remark" rows="3" placeholder="请输入备注" :disabled="disableSubmit" />
            </a-form-model-item>
          </a-col>
        </a-row>
      </a-form-model>
    </a-spin>
    <template slot="footer">
      <a-button :style="{ marginRight: '8px' }" @click="handleCancel()">
        关闭
      </a-button>
      <a-button @click="handleOk()" :disabled="disableSubmit" type="primary" :loading="confirmLoading">确定</a-button>
    </template>
    <tools-modal ref="toolListModel"  @sendSelectionRows="getRows"></tools-modal>
  </j-modal>
</template>
<script>
import { getAction, httpAction } from '@/api/manage'
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 { JVxeTableModelMixin } from '@/mixins/JVxeTableModelMixin.js'
import ToolsModal from '@views/tms/requirement/modules/ToolsModal.vue'
import DeviceListModel from '@views/mdc/base/modules/EquipmentList/DeviceListModal.vue'
import { requestPut, postAction, httpAction } from '@/api/manage'
export default {
  name: 'ToolsSharpeningModal',
  mixins: [JVxeTableModelMixin],
  components: {
    MaintenanceEquipmentSelect
    DeviceListModel,
    ToolsModal
  },
  data() {
    return {
@@ -138,112 +150,72 @@
      confirmLoading: false,
      spinning: false,
      disabled: false,
      disableSubmit: false,
      validatorRules: {
        // standardName: [
        //   { required: true, message: '请输入标准名称!' }
        // ],
        inspectionDate: [
          { required: true, message: '请选择点检日期!' }
        sharpeningTime: [
          { required: true, message: '请选择刃磨日期!' }
        ],
        // maintenancePeriod: [
        //   { required: true, message: '请输入保养周期,单位:天!' }
        // ],
        equipmentId: [
          { required: true, message: '请选择设备!' }
        responsiblePerson: [
          { required: true, message: '请选择责任人!' }
        ],
        sharpeningResult: [
          { required: true, message: '请输入刃磨结果及建议!' }
        ]
      },
      lastSelectionData: null,
      url: {
        add: '/eam/eamInspectionOrder/add',
        edit: '/eam/eamInspectionOrder/edit',
        detail: '/eam/eamMaintenanceStandardDetail/queryList',
        detailOrder: '/eam/eamInspectionOrderDetail/queryList',
        userSelect: '/eam/user_select/list'
      },
      maintenanceCategory: 'POINT_INSPECTION',
      maintenanceOperatorOptions: [],
      standardId: '',
      standardType: false,
      detail: {
        loading: false,
        dataSource: [],
        columns: [
          {
            title: '序号',
            key: 'itemCode',
            type: JVXETypes.inputNumber,
            width: '10%',
            align: 'center',
            validateRules: [
              { required: true, unique: true, message: '序号不能重复' }
            ]
          },
          {
            title: '保养项',
            key: 'itemName',
            type: JVXETypes.textarea,
            width: '20%',
            align: 'center',
            validateRules: [
              { required: true, message: '保养项不能为空!' }
            ]
          },
          {
            title: '保养要求',
            key: 'itemDemand',
            type: JVXETypes.textarea,
            width: '30%',
            align: 'center',
            validateRules: [
              { required: true, message: '保养要求不能为空!' }
            ]
          }
        ]
        add: '/tms/toolSharpening/add',
        edit: '/tms/toolSharpening/edit'
      }
    }
  },
  created() {
  },
  methods: {
    getRows(item) {
      console.log(item)
      if (item.id) {
        this.$set(this.model, 'toolId', item.toolId)
        this.$set(this.model, 'toolCode', item.toolCode)
        this.$set(this.model, 'classifyId', item.classifyId)
        this.$set(this.model, 'paramaTableName_dictText', item.paramaTableName_dictText)
        this.$set(this.model, 'applicationType_dictText', item.applicationType_dictText)
        this.$set(this.model, 'toolModel', item.toolModel)
        this.$set(this.model, 'provinceCity', item.provinceCity)
        this.$set(this.model, 'warehouseId', item.warehouseId)
        this.$set(this.model, 'positionCode', item.positionCode)
        this.$set(this.model, 'mainUnit', item.mainUnit)
      }
    },
    selectTools: function() {
      this.$refs.toolListModel.showModals()
      this.$refs.toolListModel.title = '选择工具信息'
      this.$refs.toolListModel.disableSubmit = false
    },
    add() {
      this.model = {}
      this.detail.dataSource = []
      this.visible = true
      this.disabled = false
      this.standardType = false
      this.edit({})
    },
    edit(record) {
      this.model = Object.assign({}, record)
      this.standardId = record.standardId
      this.disabled = true
      this.standardType = true
      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)
      let that = this
      that.visible = true
      that.model = Object.assign({}, record)
    },
    async handleOk() {
    close() {
      this.$emit('close')
      this.visible = false
    },
    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 formData = Object.assign(this.model)
          that.confirmLoading = true
          let httpurl = ''
          let method = ''
          if (!this.model.id) {
@@ -253,133 +225,69 @@
            httpurl += this.url.edit
            method = 'put'
          }
          this.model.standardId = this.standardId
          httpAction(httpurl, this.model, method).then((res) => {
          httpAction(httpurl, this.model, method,formData).then((res) => {
            if (res.success) {
              that.$message.success(res.message)
              that.$emit('ok')
              that.close()
            } else {
              that.$message.warning(res.message)
            }
          }).finally(() => {
            that.confirmLoading = that.spinning = false
            that.confirmLoading = false
            that.close()
          })
        } else {
          return false
        }
      })
    },
    onSearchPart() {
      this.$refs.PartPopUp.showModals([this.model.enterpriseId])
    },
    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))
    },
    expirationTimeFrom(date) {
      //过期时间是初始时间+保养周期
      if (date && this.model.maintenancePeriod) {
        // 转换为时间戳字符串(或指定格式)
        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
          })
      }
    },
    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)
        .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
          }
        })
        .catch(err => {
          if (that.model.operator) delete that.model.operator
        })
    },
    // handleOk() {
    //   const that = this
    //   that.confirmLoading = true
    //
    //   // ✅ 触发表单验证
    //   this.$refs.form.validate(valid => {
    //     if (valid) {
    //       let formData = Object.assign(this.model)
    //
    //       let obj
    //       if (!this.model.id) {
    //         obj = postAction(this.url.add, formData)
    //       } else {
    //         obj = requestPut(this.url.edit, formData, { id: this.model.id })
    //       }
    //
    //       obj.then((res) => {
    //         if (res.success) {
    //           that.$message.success(res.message)
    //           that.$emit('ok')
    //           that.close()
    //         } else {
    //           that.$message.warning(res.message)
    //         }
    //       }).finally(() => {
    //         that.confirmLoading = false
    //       })
    //     } else {
    //       that.$message.warning('请填写必填字段')
    //       that.confirmLoading = false
    //       return false
    //     }
    //   })
    // },
    handleCancel() {
      this.close()
    },
    close() {
      this.$emit('close')
      this.visible = false
      this.$refs.form.clearValidate()
    }
  }
}
</script>
<style lang="less" scoped>
</style>
</style>