zhaowei
2025-04-25 d2547913ef2e150d8bb18bc8f7423515c7ed71d0
1、调整设备台账铭牌二维码大小
2、待机停机页面功能开发
已修改6个文件
723 ■■■■■ 文件已修改
src/views/eam/equipment/modules/NameplateModal.vue 122 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/eam/repair/modules/EamReportRepairList/EamReportRepairModal.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/flowable/workflow/InspectionOrder/InspectionOrderHandle.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mdc/base/modules/EquipmentStandbyShutDown/EquipmentStandbyShutdownList.vue 302 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mdc/base/modules/EquipmentStandbyShutDown/EquipmentStandbyShutdownModal.vue 292 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/modules/SelectDeviceDrawer.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/eam/equipment/modules/NameplateModal.vue
@@ -18,8 +18,10 @@
        <tbody>
        <tr>
          <td rowspan="3">
            <QrcodeVue :value="httpUrl+item.id"/>
          <td rowspan="3" align="center">
            <div style="height: 80%;width: 50%">
              <QrcodeVue :value="httpUrl+item.id" :size="50"/>
            </div>
          </td>
          <td>设备编号</td>
          <td>{{ item.equipmentCode }}</td>
@@ -42,8 +44,10 @@
        </tr>
        <tr>
          <td rowspan="3">
            <QrcodeVue :value="item.equipmentCode"/>
          <td rowspan="3" align="center">
            <div style="height: 80%;width: 50%">
              <QrcodeVue :value="item.equipmentCode" :size="50"/>
            </div>
          </td>
          <td>出厂编号</td>
          <td>{{ item.factoryNumber }}</td>
@@ -75,73 +79,73 @@
</template>
<script>
import QrcodeVue from 'qrcode.vue'
  import QrcodeVue from 'qrcode.vue'
export default {
  name: 'NameplateModal',
  components: { QrcodeVue },
  props: {
    printedRows: {
      type: Array
    }
  },
  data() {
    return {
      title: '铭牌',
      visible: false,
      httpUrl: ''
    }
  },
  methods: {
    handleCancel() {
      this.visible = false
  export default {
    name: 'NameplateModal',
    components: { QrcodeVue },
    props: {
      printedRows: {
        type: Array
      }
    },
    data() {
      return {
        title: '铭牌',
        visible: false,
        httpUrl: ''
      }
    },
    methods: {
      handleCancel() {
        this.visible = false
      }
    }
  }
}
</script>
<style lang="less" scoped>
/deep/ .ant-modal {
  height: 75%;
  overflow: hidden;
  .ant-modal-content {
    height: 100%;
    display: flex;
    flex-direction: column;
  /deep/ .ant-modal {
    height: 75%;
    overflow: hidden;
    ::-webkit-scrollbar {
      width: 8px;
      height: 8px;
    }
    .ant-modal-content {
      height: 100%;
      display: flex;
      flex-direction: column;
      overflow: hidden;
    .ant-modal-body {
      flex: 1;
      overflow: auto;
      ::-webkit-scrollbar {
        width: 8px;
        height: 8px;
      }
      .ant-modal-body {
        flex: 1;
        overflow: auto;
      }
    }
  }
}
table {
  font-family: "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "微软雅黑", Arial, sans-serif;
  color: #000;
  text-align: center;
  table {
    font-family: "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "微软雅黑", Arial, sans-serif;
    color: #000;
    text-align: center;
  &:not(:last-child) {
    margin-bottom: 10px;
    &:not(:last-child) {
      margin-bottom: 10px;
    }
    th {
      font-size: 24px;
      letter-spacing: 3px;
      padding: 12px;
    }
    td {
      font-size: 14px;
      width: 33%;
      padding: 6px;
    }
  }
  th {
    font-size: 24px;
    letter-spacing: 3px;
    padding: 12px;
  }
  td {
    font-size: 14px;
    width: 33%;
    padding: 6px;
  }
}
</style>
src/views/eam/repair/modules/EamReportRepairList/EamReportRepairModal.vue
@@ -234,7 +234,8 @@
        return {
          disabledHours: () => range(moment().hour() + 1, 24),
          disabledMinutes: () => range(moment().minute(), 60)
          disabledMinutes: () => range(moment().minute() + 1, 60),
          disabledSeconds: () => range(moment().second() + 1, 60)
        }
      },
src/views/flowable/workflow/InspectionOrder/InspectionOrderHandle.vue
@@ -145,7 +145,7 @@
            </a-tab-pane>
            <a-tab-pane key='3' tab='流程图'>
              <img :src="imageSrc" alt="Fetched Image"/>-->
              <img :src="imageSrc" alt="Fetched Image"/>
            </a-tab-pane>
          </template>
@@ -365,7 +365,6 @@
        const param = { id: record.dataId }
        let res = await getAction(this.url.queryById, param);
        this.tableRowRecord = Object.assign({}, res.result);
        debugger
        if (this.tableRowRecord.imageFiles) {
          let obj = JSON.parse(this.tableRowRecord.imageFiles)
          this.tableRowRecord.fileList = [...obj]
src/views/mdc/base/modules/EquipmentStandbyShutDown/EquipmentStandbyShutdownList.vue
@@ -6,17 +6,26 @@
        <a-form layout="inline" @keyup.enter.native="searchQuery">
          <a-row :gutter="24">
            <a-col :md="4" :sm="4">
              <a-form-item label="日期">
                <a-date-picker value-format="YYYY-MM-DD" style="width: 100%" v-model="queryParam.theDate"/>
              <a-form-item label="停机日期">
                <a-date-picker placeholder="请选择停机日期" value-format="YYYY-MM-DD" style="width: 100%"
                               v-model="queryParam.theDate" :allow-clear="false"/>
              </a-form-item>
            </a-col>
            <a-col :md="2" :sm="2" :xs="2">
              <a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
            <a-col :md="4" :sm="4" :xs="4">
              <a-space>
                <a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
                <a-button @click="searchReset" icon="reload">重置</a-button>
              </a-space>
            </a-col>
          </a-row>
        </a-form>
      </div>
    </div>
    <!-- 操作按钮区域 -->
    <div class="table-operator">
      <a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
    </div>
    <div style="overflow: hidden;width: 100%;flex: 1" id="DeviceList">
@@ -30,7 +39,7 @@
        </template>
        <template slot="action" slot-scope="text, record">
          <a @click="handleReport(record)">上报</a>
          <a @click="handleEdit(record)">编辑</a>
          <a-divider type="vertical"/>
@@ -46,168 +55,167 @@
</template>
<script>
import moment from 'moment'
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
import EquipmentStandbyShutdownModal
  from '@views/mdc/base/modules/EquipmentStandbyShutDown/EquipmentStandbyShutdownModal.vue'
  import moment from 'moment'
  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
  import EquipmentStandbyShutdownModal
    from '@views/mdc/base/modules/EquipmentStandbyShutDown/EquipmentStandbyShutdownModal.vue'
export default {
  name: 'EquipmentStandbyShutdownList',
  components: { EquipmentStandbyShutdownModal },
  mixins: [JeecgListMixin],
  data() {
    return {
      disableMixinCreated: true,
      scrollY: 465,
      queryParam: {
        theDate: moment().subtract('days', 1).format('YYYY-MM-DD')
      },
      columns: [
        {
          title: '#',
          dataIndex: '',
          key: 'rowIndex',
          width: 60,
          align: 'center',
          customRender: function(t, r, index) {
            return parseInt(index) + 1
  export default {
    name: 'EquipmentStandbyShutdownList',
    components: { EquipmentStandbyShutdownModal },
    mixins: [JeecgListMixin],
    data() {
      return {
        disableMixinCreated: true,
        scrollY: 465,
        queryParam: {
          theDate: moment().subtract('days', 1).format('YYYY-MM-DD')
        },
        columns: [
          {
            title: '#',
            dataIndex: '',
            key: 'rowIndex',
            width: 60,
            align: 'center',
            customRender: function(t, r, index) {
              return parseInt(index) + 1
            }
          },
          {
            title: '设备编号',
            align: 'center',
            dataIndex: 'equipmentId',
            width: 200
          },
          {
            title: '设备名称',
            align: 'center',
            dataIndex: 'equipmentName',
            width: 200
          },
          {
            title: '停机类型',
            align: 'center',
            dataIndex: 'downtimeType',
            scopedSlots: { customRender: 'downtimeType' },
            width: 150
          },
          {
            title: '停机原因',
            align: 'center',
            dataIndex: 'downtimeDescription',
            width: 200
          },
          {
            title: '停机日期',
            align: 'center',
            dataIndex: 'theDate',
            width: 150
          },
          {
            title: '停机时长(min)',
            align: 'center',
            dataIndex: 'downLong',
            width: 150
          },
          {
            title: '备注',
            align: 'center',
            dataIndex: 'remark'
          },
          {
            title: '操作',
            dataIndex: 'action',
            align: 'center',
            width: 150,
            scopedSlots: { customRender: 'action' },
            fixed: 'right'
          }
        },
        {
          title: '设备编号',
          align: 'center',
          dataIndex: 'equipmentId',
          width: 200
        },
        {
          title: '设备名称',
          align: 'center',
          dataIndex: 'equipmentName',
          width: 200
        },
        {
          title: '停机类型',
          align: 'center',
          dataIndex: 'downtimeType',
          scopedSlots: { customRender: 'downtimeType' },
          width: 150
        },
        {
          title: '停机原因',
          align: 'center',
          dataIndex: 'downtimeDescription',
          width: 200
        },
        {
          title: '开始时间',
          align: 'center',
          dataIndex: 'startDate',
          width: 150
        },
        {
          title: '结束时间',
          align: 'center',
          dataIndex: 'endDate',
          width: 150
        },
        {
          title: '备注',
          align: 'center',
          dataIndex: 'remark',
          width: 200
        },
        {
          title: '操作',
          dataIndex: 'action',
          align: 'center',
          width: 150,
          scopedSlots: { customRender: 'action' },
          fixed: 'right'
        ],
        url: {
          list: '/mdc/mdcDowntime/list',
          delete: '/mdc/mdcDowntime/delete'
        }
      ],
      url: {
        list: '/mdc/mdcDowntime/list',
        delete: '/mdc/mdcDowntime/delete'
      }
    }
  },
  props: { node: {}, Type: '' },
  created() {
    this.queryParam.typeTree = '1'
    this.loadData()
  },
  mounted() {
    window.addEventListener('resize', this.handleWindowResize)
    this.handleWindowResize()
  },
  beforeDestroy() {
    window.removeEventListener('resize', this.handleWindowResize)
  },
  watch: {
    Type(valmath) {
      this.queryParam.typeTree = valmath
    },
    node(val) { //监听currSelected 变化,将变化后的数值传递给 getCurrSelected 事件
      if (JSON.stringify(val) != '{}') {
        if (val.equipmentId != null) {
          this.queryParam.equipmentId = val.equipmentId
          this.queryParam.parentId = ''
        } else {
          this.queryParam.parentId = val.key
          this.queryParam.equipmentId = ''
    props: { node: {}, Type: '' },
    created() {
      this.queryParam.typeTree = '1'
      this.loadData()
    },
    mounted() {
      window.addEventListener('resize', this.handleWindowResize)
      this.handleWindowResize()
    },
    beforeDestroy() {
      window.removeEventListener('resize', this.handleWindowResize)
    },
    watch: {
      Type(valmath) {
        this.queryParam.typeTree = valmath
      },
      node(val) { //监听currSelected 变化,将变化后的数值传递给 getCurrSelected 事件
        if (JSON.stringify(val) != '{}') {
          if (val.equipmentId != null) {
            this.queryParam.equipmentId = val.equipmentId
            this.queryParam.parentId = ''
          } else {
            this.queryParam.parentId = val.key
            this.queryParam.equipmentId = ''
          }
          this.loadData(1)
        }
      }
    },
    methods: {
      searchReset() {
        this.queryParam = { theDate: moment().subtract('days', 1).format('YYYY-MM-DD') }
        this.loadData(1)
      }
    }
  },
  methods: {
    handleReport(record) {
      this.$refs.modalForm.edit(record)
      this.$refs.modalForm.title = '上报'
    },
      },
    handleWindowResize() {
      const boxHeight = +window.getComputedStyle(document.getElementById('DeviceList')).height.slice(0, -2)
      const tableHeadHeight = +window.getComputedStyle(document.querySelector('.ant-table-thead th')).height.slice(0, -2)
      this.scrollY = boxHeight - tableHeadHeight - 50
      handleWindowResize() {
        const boxHeight = +window.getComputedStyle(document.getElementById('DeviceList')).height.slice(0, -2)
        const tableHeadHeight = +window.getComputedStyle(document.querySelector('.ant-table-thead th')).height.slice(0, -2)
        this.scrollY = boxHeight - tableHeadHeight - 50
      }
    }
  }
}
</script>
<style scoped>
.page-container {
  overflow: hidden;
  display: flex;
  flex-direction: column;
}
@media screen and (min-width: 1920px) {
  .page-container {
    height: 812px !important;
    overflow: hidden;
    display: flex;
    flex-direction: column;
  }
}
@media screen and (min-width: 1680px) and (max-width: 1920px) {
  .page-container {
    height: 812px !important;
  @media screen and (min-width: 1920px) {
    .page-container {
      height: 812px !important;
    }
  }
}
@media screen and (min-width: 1400px) and (max-width: 1680px) {
  .page-container {
    height: 664px !important;
  @media screen and (min-width: 1680px) and (max-width: 1920px) {
    .page-container {
      height: 812px !important;
    }
  }
}
@media screen and (min-width: 1280px) and (max-width: 1400px) {
  .page-container {
    height: 565px !important;
  @media screen and (min-width: 1400px) and (max-width: 1680px) {
    .page-container {
      height: 664px !important;
    }
  }
}
@media screen and (max-width: 1280px) {
  .page-container {
    height: 565px !important;
  @media screen and (min-width: 1280px) and (max-width: 1400px) {
    .page-container {
      height: 565px !important;
    }
  }
}
  @media screen and (max-width: 1280px) {
    .page-container {
      height: 565px !important;
    }
  }
</style>
src/views/mdc/base/modules/EquipmentStandbyShutDown/EquipmentStandbyShutdownModal.vue
@@ -1,9 +1,18 @@
<template>
  <a-modal :title="title" :width="500" :visible="visible" :confirmLoading="confirmLoading" @ok="handleOk"
           @cancel="handleCancel" cancelText="关闭">
    <a-spin :spinning="confirmLoading">
      <a-form-model ref="form" :form="form" :model="model" :rules="validatorRules" :labelCol="labelColLong"
    <a-spin :spinning="spinning">
      <a-form-model ref="form" :model="model" :rules="validatorRules" :labelCol="labelColLong"
                    :wrapperCol="wrapperColLong">
        <a-row :gutter="24">
          <a-col :span="24">
            <a-form-model-item label="设备组" prop="equipmentIds">
              <a-input-search readOnly v-model="model.equipmentIds" @search="deviceSearch" enter-button
                              placeholder="请选择设备"/>
            </a-form-model-item>
          </a-col>
        </a-row>
        <a-row :gutter="24">
          <a-col :span="24">
            <a-form-model-item label="停机类型" prop="downtimeType">
@@ -14,6 +23,7 @@
              </a-radio-group>
            </a-form-model-item>
          </a-col>
        </a-row>
        <a-row :gutter="24">
@@ -30,6 +40,38 @@
        <a-row :gutter="24">
          <a-col :span="24">
            <a-form-model-item label="停机日期" prop="theDate">
              <a-date-picker v-model="model.theDate" placeholder="请选择停机日期" value-format="YYYY-MM-DD"
                             style="width: 100%"/>
            </a-form-model-item>
          </a-col>
        </a-row>
        <a-row :gutter="24">
          <a-col :span="24">
            <a-form-model-item label="停机时长(min)" prop="downLong">
              <a-input-number v-model="model.downLong" :min="1" :step="1" :precision="0" placeholder="请输入停机时长(min)"
                              style="width: 100%"/>
            </a-form-model-item>
          </a-col>
        </a-row>
        <!--<a-row :gutter="24">-->
        <!--<a-col :span="12">-->
        <!--<a-form-model-item label="开始时间" prop="startTime">-->
        <!--<a-time-picker v-model="model.startTime" value-format="HH:mm:ss" style="width: 100%"/>-->
        <!--</a-form-model-item>-->
        <!--</a-col>-->
        <!--<a-col :span="12">-->
        <!--<a-form-model-item label="结束时间" prop="endTime">-->
        <!--<a-time-picker v-model="model.endTime" value-format="HH:mm:ss" style="width: 100%"/>-->
        <!--</a-form-model-item>-->
        <!--</a-col>-->
        <!--</a-row>-->
        <a-row :gutter="24">
          <a-col :span="24">
            <a-form-model-item label="备注">
              <a-textarea v-model="model.remark" placeholder="请输入备注"/>
            </a-form-model-item>
@@ -37,128 +79,164 @@
        </a-row>
      </a-form-model>
    </a-spin>
    <select-device-drawer ref="selectDeviceDrawer" @selectFinished="selectOK" :title="'选择设备'"/>
  </a-modal>
</template>
<script>
import { getAction, postAction } from '@api/manage'
  import { getAction, postAction } from '@api/manage'
  import SelectDeviceDrawer from '../../../../system/modules/SelectDeviceDrawer'
export default {
  name: 'EquipmentStandbyShutdownModal',
  components: {},
  props: {},
  data() {
    return {
      title: '',
      visible: false,
      model: {},
      downtimeDescriptionList: [],
      labelColLong: {
        xs: {
          span: 24
  export default {
    name: 'EquipmentStandbyShutdownModal',
    components: { SelectDeviceDrawer },
    props: {},
    data() {
      return {
        title: '',
        visible: false,
        model: {},
        equipmentList: [],
        downtimeDescriptionList: [],
        labelColLong: {
          xs: { span: 24 },
          sm: { span: 6 }
        },
        sm: {
          span: 5
        }
      },
      wrapperColLong: {
        xs: {
          span: 24
        wrapperColLong: {
          xs: { span: 24 },
          sm: { span: 16 }
        },
        sm: {
          span: 17
        confirmLoading: false,
        spinning: false,
        disableSelectDevice: false,
        validatorRules: {
          equipmentIds: [
            { required: true, message: '请选择设备', trigger: 'change' }
          ],
          downtimeType: [
            { required: true, message: '请选择停机类型' }
          ],
          reasonId: [
            { required: true, message: '请选择停机原因' }
          ],
          theDate: [
            { required: true, message: '请选择停机日期' }
          ],
          downLong: [
            { required: true, message: '请输入停机时长(min)' }
          ]
        },
        url: {
          add: '/mdc/mdcDowntime/add',
          edit: '/mdc/mdcDowntime/edit',
          getDowntimeDescriptionListByDowntimeType: '/mdc/mdcDowntimeReason/downtimeReasonList'
        }
      },
      confirmLoading: false,
      form: this.$form.createForm(this),
      validatorRules: {
        downtimeType: [
          {
            required: true, message: '请选择停机类型'
          }
        ],
        reasonId: [
          {
            required: true, message: '请选择停机原因'
          }
        ]
      },
      url: {
        edit: '/mdc/mdcDowntime/edit',
        getDowntimeDescriptionListByDowntimeType: '/mdc/mdcDowntimeReason/downtimeReasonList'
      }
    }
  },
  methods: {
    edit(record) {
      this.model = Object.assign({}, record)
      this.getDowntimeDescriptionListByApi()
      if (this.model.downtimeType === null) {
        delete this.model.downtimeType
        delete this.model.reasonId
      }
      this.visible = true
    },
    // 停机类型值发生改变时触发清空停机原因并重新获取对应停机类型的停机原因列表
    handleDowntimeTypeChange() {
      if (this.model.reasonId) delete this.model.reasonId
      this.removeValidate()
      this.getDowntimeDescriptionListByApi()
    },
    // 调用接口获取停机原因列表
    getDowntimeDescriptionListByApi() {
      const that = this
      this.downtimeDescriptionList = []
      getAction(this.url.getDowntimeDescriptionListByDowntimeType, { downtimeType: this.model.downtimeType })
        .then(res => {
          if (res.success) that.downtimeDescriptionList = res.result
    methods: {
      add() {
        this.edit({
          downtimeType: 0
        })
    },
      },
    handleOk() {
      const that = this
      // 触发表单验证
      this.$refs.form.validate(valid => {
        if (valid) {
          that.confirmLoading = true
          postAction(this.url.edit, that.model)
            .then((res) => {
              if (res.success) {
                that.$notification.success({
                  message: '消息',
                  description: res.message
                })
                that.$emit('ok', res.result)
                that.handleCancel()
              } else {
                that.$notification.warning({
                  message: '消息',
                  description: res.message
                })
              }
            })
            .finally(() => {
              that.confirmLoading = false
            })
        } else {
          return false
      edit(record) {
        this.model = Object.assign({}, record)
        this.getDowntimeDescriptionListByApi()
        if (this.model.downtimeType === null) {
          delete this.model.downtimeType
          delete this.model.reasonId
        }
      })
    },
        this.visible = true
      },
    handleCancel() {
      this.visible = false
      this.removeValidate()
    },
      // 停机类型值发生改变时触发清空停机原因并重新获取对应停机类型的停机原因列表
      handleDowntimeTypeChange() {
        if (this.model.reasonId) delete this.model.reasonId
        this.removeValidate()
        this.getDowntimeDescriptionListByApi()
      },
    // 关闭弹窗时清楚表单校验
    removeValidate() {
      if (this.$refs.form) this.$refs.form.clearValidate()
      // 调用接口获取停机原因列表
      getDowntimeDescriptionListByApi() {
        const that = this
        this.downtimeDescriptionList = []
        this.spinning = true
        getAction(this.url.getDowntimeDescriptionListByDowntimeType, { downtimeType: this.model.downtimeType })
          .then(res => {
            if (res.success) that.downtimeDescriptionList = res.result
          })
          .finally(() => {
            that.spinning = false
          })
      },
      handleOk() {
        const that = this
        // 触发表单验证
        console.log('model', this.model)
        this.$refs.form.validate(valid => {
          if (valid) {
            that.confirmLoading = that.spinning = true
            let url
            if (!that.model.id) {
              url = that.url.add
            } else {
              url = that.url.edit
            }
            postAction(url, that.model)
              .then((res) => {
                if (res.success) {
                  that.$notification.success({
                    message: '消息',
                    description: res.message
                  })
                  that.$emit('ok')
                  that.handleCancel()
                } else {
                  that.$notification.warning({
                    message: '消息',
                    description: res.message
                  })
                }
              })
              .finally(() => {
                that.confirmLoading = that.spinning = false
              })
          } else {
            return false
          }
        })
      },
      deviceSearch() {
        this.$refs.selectDeviceDrawer.visible = true
        this.$refs.selectDeviceDrawer.selectedRowKeys = []
        this.$refs.selectDeviceDrawer.selectedRows = []
        this.$refs.selectDeviceDrawer.checkedKeys = this.model.equipmentIds ? this.model.equipmentIds.split(',') : []
      },
      /**
       * 选择已有设备后点击确定时触发
       * @param data 已选择的设备
       */
      selectOK(data) {
        this.$set(this.model, 'equipmentIds', data.join(','))
        if (this.model.equipmentIds) this.$refs.form.clearValidate('equipmentIds')
      },
      handleCancel() {
        this.visible = false
        this.removeValidate()
      },
      // 关闭弹窗时清楚表单校验
      removeValidate() {
        if (this.$refs.form) this.$refs.form.clearValidate()
      }
    }
  }
}
</script>
src/views/system/modules/SelectDeviceDrawer.vue
@@ -96,6 +96,7 @@
        expandedKeys: [],
        checkedKeys: [],
        autoExpandParent: true,
        searchValue: '',
        url: {
          getBaseTree: '/mdc/mdcEquipment/queryTreeListByProduction'
        },