zhaowei
5 天以前 79c0397ae8aedb6cc4f5db486e2d9b87a7410d04
二保工单批量新增
已添加1个文件
已修改2个文件
285 ■■■■ 文件已修改
src/views/eam/maintenance/EamSecondMaintenanceOrderList.vue 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/eam/maintenance/modules/EamSecondMaintenanceBatchOrderDetailModal.vue 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/eam/maintenance/modules/EamSecondMaintenanceBatchOrderModal.vue 167 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/eam/maintenance/EamSecondMaintenanceOrderList.vue
@@ -81,14 +81,19 @@
            <a-divider type="vertical"/>
            <a @click="handleDetail(record)">详情</a>
            <a-divider type="vertical"/>
            <a-popconfirm title="确定作废吗?" @confirm="() => handlerAbolish(record.id)">
              <a>作废</a>
            </a-popconfirm>
            <a-dropdown>
            <a class="ant-dropdown-link">更多 <a-icon type="down"/></a>
            <a-menu slot="overlay">
              <a-menu-item>
                <a-popconfirm title="确定作废吗?" @confirm="() => handleAbolish(record.id)">
                  <a>作废</a>
                </a-popconfirm>
              </a-menu-item>
               <a-menu-item>
                <a @click="handleDetail(record)">详情</a>
              </a-menu-item>
            </a-menu>
          </a-dropdown>
          </template>
          <template v-else>
src/views/eam/maintenance/modules/EamSecondMaintenanceBatchOrderDetailModal.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,97 @@
<template>
  <j-modal :title="title" :width="1200" :visible="visible" switchFullscreen centered
           :okButtonProps="{ class:{'jee-hidden': true} }" @cancel="handleCancel"
           cancelText="关闭">
    <a-spin :spinning="spinning">
      <a-tabs default-active-key="1">
        <a-tab-pane tab="操作工" key="1">
          <j-vxe-table rowNumber bordered keep-source :height="500" :dataSource="detail.operatorMaintenanceList"
                       :columns="detail.columns"/>
        </a-tab-pane>
        <a-tab-pane tab="维修工" key="2" forceRender>
          <j-vxe-table rowNumber bordered keep-source :height="500" :dataSource="detail.repairerMaintenanceList"
                       :columns="detail.columns"/>
        </a-tab-pane>
      </a-tabs>
    </a-spin>
  </j-modal>
</template>
<script>
  import { getAction, httpAction } from '@/api/manage'
  import MaintenanceEquipmentSelect from '@views/eam/equipment/modules/MaintenanceEquipmentSelect.vue'
  import { JVXETypes } from '@comp/jeecg/JVxeTable'
  export default {
    name: 'EamSecondMaintenanceBatchOrderDetailModal',
    components: { MaintenanceEquipmentSelect },
    data() {
      return {
        title: '预览明细',
        visible: false,
        spinning: false,
        url: {
          standardDetail: '/eam/eamMaintenanceStandardDetail/queryList'
        },
        detail: {
          operatorMaintenanceList: [],
          repairerMaintenanceList: [],
          columns: [
            {
              title: 'ID',
              key: 'id',
              type: JVXETypes.hidden
            },
            {
              title: 'orderId',
              key: 'orderId',
              type: JVXETypes.hidden
            },
            {
              title: '序号',
              key: 'itemCode',
              type: JVXETypes.normal,
              width: 60,
              align: 'center'
            },
            {
              title: '保养项',
              key: 'itemName',
              type: JVXETypes.normal,
              align: 'center'
            }
          ]
        }
      }
    },
    methods: {
      /**
       * èŽ·å–ä¿å…»è§„èŒƒæ•°æ®
       * @param standardId è§„范Id
       */
      loadStandardDetail(standardId) {
        this.spinning = true
        getAction(this.url.standardDetail, { standardId })
          .then(res => {
            if (res.success) {
              this.detail.operatorMaintenanceList = res.result.filter(item => item.itemCategory == 'OPERATOR_MAINTENANCE')
              this.detail.repairerMaintenanceList = res.result.filter(item => item.itemCategory == 'REPAIRER_MAINTENANCE')
            }
          })
          .finally(() => {
            this.spinning = false
          })
      },
      handleCancel() {
        this.close()
      },
      close() {
        this.$emit('close')
        this.visible = false
      }
    }
  }
</script>
src/views/eam/maintenance/modules/EamSecondMaintenanceBatchOrderModal.vue
@@ -2,21 +2,41 @@
  <j-modal :title="title" :width="1200" :visible="visible" :confirmLoading="confirmLoading" switchFullscreen centered
           :mask-closable="false" @ok="handleOk" @cancel="handleCancel" cancelText="关闭">
    <a-spin :spinning="spinning">
      <j-vxe-table ref="editableDetailTable" rowNumber rowSelection bordered alwaysEdit toolbar @added="addNewRow"
      <j-vxe-table ref="editableDetailTable" rowNumber rowSelection bordered alwaysEdit toolbar
                   :toolbarConfig="detail.toolbarConfig" keep-source :height="500"
                   :dataSource="detail.dataSource" :columns="detail.columns"/>
                   :dataSource="detail.dataSource" :columns="detail.columns">
        <!--统一编码-->
        <template v-slot:equipmentId="props">
          <maintenance-equipment-select placeholder="请输入统一编码或名称搜索" v-model="props.row.equipmentId"
                                        maintenanceCategory="SECOND_MAINTENANCE" :allowClear="false"
                                        @autocompleteForm="autocompleteForm($event,props.row)"/>
        </template>
        <!-- ä¿å…»æ—¥æœŸ-->
        <template v-slot:maintenanceDate="props">
          <a-date-picker v-model="props.row.maintenanceDate" value-format="YYYY-MM-DD"/>
        </template>
        <!-- æ“ä½œ-->
        <template v-slot:action="props">
          <a :disabled="!props.row.equipmentId" @click="handlePreviewDetail(props.row.standardId)">预览明细</a>
        </template>
      </j-vxe-table>
    </a-spin>
    <eam-second-maintenance-batch-order-detail-modal ref="detailModal"/>
  </j-modal>
</template>
<script>
  import { getAction, httpAction } from '@/api/manage'
  import { postAction } from '@/api/manage'
  import MaintenanceEquipmentSelect from '@views/eam/equipment/modules/MaintenanceEquipmentSelect.vue'
  import { JVXETypes } from '@comp/jeecg/JVxeTable'
  import EamSecondMaintenanceBatchOrderDetailModal from './EamSecondMaintenanceBatchOrderDetailModal'
  export default {
    name: 'EamSecondMaintenanceBatchOrderModal',
    components: { MaintenanceEquipmentSelect },
    components: { EamSecondMaintenanceBatchOrderDetailModal, MaintenanceEquipmentSelect },
    data() {
      return {
        title: '操作',
@@ -36,39 +56,63 @@
            },
            {
              title: '工单号',
              dataIndex: 'orderNum',
              key: 'orderNum',
              align: 'center',
              type: JVXETypes.inputNumber,
              disabled: true,
              placeholder: '工单号系统自动生成'
              placeholder: '${title}系统自动生成',
              width: 200
            },
            {
              title: '统一编码',
              dataIndex: 'equipmentId',
              key: 'equipmentId',
              align: 'center',
              type: JVXETypes.slot,
              slotName: 'equipmentId'
              slotName: 'equipmentId',
              width: 300,
              validateRules: [
                { required: true, message: '请输入${title}或名称搜索' },
                { unique: true, message: '${title}不能重复' }
              ]
            },
            {
              title: '规范名称',
              dataIndex: 'standardName',
              key: 'standardName',
              align: 'center',
              type: JVXETypes.input,
              disabled: true,
              placeholder: '选择设备后自动带出'
              type: JVXETypes.normal,
              width: 200
            },
            {
              title: '保养日期',
              dataIndex: 'maintenanceDate',
              key: 'maintenanceDate',
              align: 'center',
              type: JVXETypes.date
              type: JVXETypes.slot,
              width: 200,
              slotName: 'maintenanceDate',
              validateRules: [{ required: true, message: '请选择${title}' }]
            },
            {
              title: '保养周期',
              dataIndex: 'maintenancePeriod',
              key: 'maintenancePeriod',
              align: 'center',
              type: JVXETypes.inputNumber,
              defaultValue: '6'
              type: JVXETypes.normal,
              width: 150
            },
            {
              title: '备注',
              key: 'remark',
              align: 'center',
              type: JVXETypes.textarea,
              placeholder: '请输入备注',
              width: 300
            },
            {
              title: '操作',
              align: 'center',
              type: JVXETypes.slot,
              width: 150,
              slotName: 'action',
              fixed: 'right'
            }
          ],
          toolbarConfig: {
@@ -89,57 +133,52 @@
        this.detail.operatorMaintenanceList = this.detail.repairerMaintenanceList = []
      },
      addNewRow({ row }) {
        console.log('row', row)
        row.maintenancePeriod = 6
        this.$refs.editableDetailTable.updateData()
      handlePreviewDetail(standardId) {
        this.$refs.detailModal.visible = true
        this.$refs.detailModal.loadStandardDetail(standardId)
      },
      autocompleteForm(selectObj) {
        this.$set(this.model, 'standardName', selectObj.standardName)
        this.$set(this.model, 'standardId', selectObj.id)
        this.$set(this.model, 'equipmentId', selectObj.equipmentId)
        if (!this.model.id) this.loadStandardDetail(selectObj.id)
      autocompleteForm(selectObj, record) {
        this.$set(record, 'standardName', selectObj.standardName)
        this.$set(record, 'standardId', selectObj.id)
        this.$set(record, 'equipmentId', selectObj.equipmentId)
        this.$set(record, 'maintenancePeriod', selectObj.maintenancePeriod)
        this.$refs.editableDetailTable.validateTable()
      },
      async handleOk() {
        const that = this
        // è§¦å‘表单验证
        this.$refs.form.validate(valid => {
          if (valid) {
            that.confirmLoading = that.spinning = true
            let httpUrl = ''
            let method = ''
            if (!this.model.id) {
              httpUrl += this.url.add
              method = 'post'
        const requests = this.$refs.editableDetailTable.getTableData()
        if (requests.length == 0) {
          this.$notification.warning({
            message: '消息',
            description: '请至少新增一条记录'
          })
          return
        }
        const errMap = await this.$refs.editableDetailTable.validateTable()
        if (errMap) return
        this.confirmLoading = this.spinning = true
        postAction(this.url.batchAdd, requests)
          .then((res) => {
            if (res.success) {
              this.$notification.success({
                message: '消息',
                description: res.message
              })
              this.$emit('ok')
              this.close()
            } else {
              httpUrl += this.url.edit
              method = 'put'
              this.$notification.warning({
                message: '消息',
                description: res.message
              })
            }
            httpAction(httpUrl, this.model, method)
              .then((res) => {
                if (res.success) {
                  that.$notification.success({
                    message: '消息',
                    description: res.message
                  })
                  that.$emit('ok')
                  that.close()
                } else {
                  that.$notification.warning({
                    message: '消息',
                    description: res.message
                  })
                }
              })
              .finally(() => {
                that.confirmLoading = that.spinning = false
              })
          } else {
            return false
          }
        })
          })
          .finally(() => {
            this.confirmLoading = this.spinning = false
          })
      },
      handleCancel() {
@@ -154,3 +193,9 @@
    }
  }
</script>
<style scoped lang="less">
  /deep/ .ant-select-dropdown-menu {
    text-align: left;
  }
</style>