已修改8个文件
3223 ■■■■■ 文件已修改
src/views/eam/equipment/modules/EamEquipmentModal.vue 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/eam/maintenance/EamSecondMaintenanceOrderList.vue 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/eam/maintenance/EamThirdMaintenanceOrderList.vue 784 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/eam/maintenance/modules/EamThirdMaintenanceOrderModal.vue 647 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/eam/technical/EamTechnicalStatusEvaluationOrderList.vue 436 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/flowable/workflow/secondMaintenance/SecondMaintenanceApprovalModal.vue 419 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/flowable/workflow/thirdMaintenance/ThirdMaintenanceApprovalModal.vue 495 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/UserList.vue 417 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/eam/equipment/modules/EamEquipmentModal.vue
@@ -283,13 +283,6 @@
        <a-tab-pane tab="保养标准" :key="7">
        </a-tab-pane>
        <a-tab-pane tab="工艺参数" :key="8">
        </a-tab-pane>
        <a-tab-pane tab="设备精度" :key="9">
        </a-tab-pane>
      </template>
    </a-tabs>
  </j-modal>
src/views/eam/maintenance/EamSecondMaintenanceOrderList.vue
@@ -73,7 +73,8 @@
    <!-- 表单区域 -->
    <eamSecondMaintenanceOrder-modal ref="modalForm" @ok="modalFormOk"/>
    <second-maintenance-approval-modal ref="secondMaintenanceApprovalModal" :selectShenpiData="selectSecondMaintenanceData"/>
    <second-maintenance-approval-modal ref="secondMaintenanceApprovalModal"
                                       :selectShenpiData="selectSecondMaintenanceData"/>
  </a-card>
</template>
@@ -81,7 +82,8 @@
  import EamSecondMaintenanceOrderModal from './modules/EamSecondMaintenanceOrderModal'
  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
  import { deleteAction, getAction } from '@api/manage'
  import SecondMaintenanceApprovalModal from '@views/flowable/workflow/secondMaintenance/SecondMaintenanceApprovalModal.vue'
  import SecondMaintenanceApprovalModal
    from '@views/flowable/workflow/secondMaintenance/SecondMaintenanceApprovalModal.vue'
  import LxSearchEquipmentSelect from '../equipment/modules/LxSearchEquipmentSelect'
  export default {
@@ -113,22 +115,26 @@
            align: 'center',
            customRender: function(t, r, index) {
              return parseInt(index) + 1
            }
            },
            fixed: 'left'
          },
          {
            title: '统一编码',
            align: 'center',
            dataIndex: 'equipmentCode'
            dataIndex: 'equipmentCode',
            fixed: 'left'
          },
          {
            title: '设备名称',
            align: 'center',
            dataIndex: 'equipmentName'
            dataIndex: 'equipmentName',
            fixed: 'left'
          },
          {
            title: '设备型号',
            align: 'center',
            dataIndex: 'equipmentModel'
            dataIndex: 'equipmentModel',
            fixed: 'left'
          },
          {
            title: '工单号',
src/views/eam/maintenance/EamThirdMaintenanceOrderList.vue
@@ -2,193 +2,91 @@
  <a-card :bordered="false">
    <!-- 查询区域 -->
    <div
      class="table-page-search-wrapper"
      v-if="isDisplayOperation"
    >
      <a-form
        layout="inline"
        @keyup.enter.native="searchQuery"
      >
    <div class="table-page-search-wrapper" v-if="isDisplayOperation">
      <a-form layout="inline" @keyup.enter.native="searchQuery">
        <a-row :gutter="24">
          <a-col
            :xl="4"
            :lg="7"
            :md="8"
            :sm="24"
          >
          <a-col :xl="6" :lg="7" :md="8" :sm="24">
            <a-form-item label="统一编码">
              <lx-search-equipment-select placeholder="请输入统一编码或名称搜索" v-model="queryParam.equipmentId"/>
            </a-form-item>
          </a-col>
          <a-col :xl="4" :lg="7" :md="8" :sm="24">
            <a-form-item label="工单号">
              <a-input
                placeholder="请输入工单号"
                v-model="queryParam.orderNum"
              ></a-input>
              <a-input placeholder="请输入工单号" v-model="queryParam.orderNum"/>
            </a-form-item>
          </a-col>
          <a-col
            :xl="4"
            :lg="7"
            :md="8"
            :sm="24"
          >
            <a-form-item label="设备编号">
              <lx-search-equipment-select
                placeholder="请输入设备编号或名称搜索"
                v-model="queryParam.equipmentId"
              ></lx-search-equipment-select>
            </a-form-item>
          </a-col>
          <a-col
            :xl="6"
            :lg="7"
            :md="8"
            :sm="24"
          >
          <a-col :xl="6" :lg="7" :md="8" :sm="24">
            <a-form-item label="计划保养日期">
              <a-range-picker
                v-model="queryParam.maintenanceDateRange"
                @change="onMaintenanceDateChange"
                format="YYYY-MM-DD"
                value-format="YYYY-MM-DD"
              />
              <a-range-picker v-model="queryParam.maintenanceDateRange" @change="onMaintenanceDateChange"
                              value-format="YYYY-MM-DD"/>
            </a-form-item>
          </a-col>
          <a-col
            :xl="4"
            :lg="7"
            :md="8"
            :sm="24"
          >
          <a-col :xl="4" :lg="7" :md="8" :sm="24">
            <a-form-item label="保养状态">
              <j-dict-select-tag
                placeholder="请选择保养状态"
                dict-code="second_maintenance_status"
                v-model="queryParam.maintenanceStatus"
              />
              <j-dict-select-tag placeholder="请选择保养状态" dict-code="second_maintenance_status"
                                 v-model="queryParam.maintenanceStatus"/>
            </a-form-item>
          </a-col>
          <a-col
            :xl="4"
            :lg="7"
            :md="8"
            :sm="24"
          >
            <span
              style="float: left;overflow: hidden;"
              class="table-page-search-submitButtons"
            >
              <a-button
                type="primary"
                @click="searchQuery"
                icon="search"
              >查询</a-button>
              <a-button
                type="info"
                @click="searchReset"
                icon="reload"
                style="margin-left: 8px"
              >重置</a-button>
          <a-col :xl="4" :lg="7" :md="8" :sm="24">
            <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
              <a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
              <a-button type="info" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
            </span>
          </a-col>
        </a-row>
      </a-form>
    </div>
    <!-- 操作按钮区域 -->
    <div
      class="table-operator"
      v-if="isDisplayOperation"
    >
      <a-button
        @click="handleAdd"
        type="primary"
        icon="plus"
      >新增
    <div class="table-operator" v-if="isDisplayOperation">
      <a-button @click="handleAdd" type="primary" icon="plus">新增
      </a-button>
      <a-dropdown v-if="selectedRowKeys.length > 0">
        <a-menu slot="overlay">
          <a-menu-item
            key="1"
            @click="handlerBatchAbolish"
          >
            <a-icon type="delete" />
          <a-menu-item key="1" @click="handlerBatchAbolish">
            <a-icon type="delete"/>
            作废
          </a-menu-item>
          <a-menu-item
            key="2"
            @click="handlerBatchCollect"
          >
            <a-icon type="form" />
          <a-menu-item key="2" @click="handlerBatchCollect">
            <a-icon type="form"/>
            领取
          </a-menu-item>
        </a-menu>
        <a-button style="margin-left: 8px"> 批量操作
          <a-icon type="down" />
          <a-icon type="down"/>
        </a-button>
      </a-dropdown>
    </div>
    <!-- table区域-begin -->
    <div>
      <div
        class="ant-alert ant-alert-info"
        style="margin-bottom: 16px;"
        v-if="isDisplayOperation"
      >
        <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>项
        <a
          style="margin-left: 24px"
          @click="onClearSelected"
        >清空</a>
      <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;" v-if="isDisplayOperation">
        <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{
        selectedRowKeys.length }}</a>项
        <a style="margin-left: 24px" @click="onClearSelected">清空</a>
      </div>
      <a-table
        ref="table"
        size="middle"
        bordered
        rowKey="id"
        :columns="columns"
        :dataSource="dataSource"
        :pagination="ipagination"
        :loading="loading"
        class="j-table-force-nowrap"
        :scroll="{x:'max-content'}"
        :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
        @change="handleTableChange"
      >
      <a-table ref="table" size="middle" bordered rowKey="id" :columns="columns" :dataSource="dataSource"
               :pagination="ipagination" :loading="loading" :scroll="{x:'max-content'}"
               :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}" @change="handleTableChange">
        <span
          slot="action"
          slot-scope="text, record"
        >
        <span slot="action" slot-scope="text, record">
          <template v-if="record.maintenanceStatus === 'WAIT_MAINTENANCE'">
            <a
              @click="handleEdit(record)"
            >编辑</a>
            <a @click="handleEdit(record)">编辑</a>
            <a-divider
              type="vertical"
            />
            <a-divider type="vertical"/>
            <a-popconfirm
              title="确定领取吗?"
              @confirm="() => handlerCollect(record.id)"
            >
            <a-popconfirm title="确定领取吗?" @confirm="() => handlerCollect(record.id)">
              <a>领取</a>
            </a-popconfirm>
            <a-divider
              type="vertical"
            />
            <a-divider type="vertical"/>
            <a-dropdown>
              <a class="ant-dropdown-link">更多 <a-icon type="down" /></a>
              <a class="ant-dropdown-link">更多 <a-icon type="down"/></a>
              <a-menu slot="overlay">
                <a-menu-item>
                  <a-popconfirm
                    title="确定作废吗?"
                    @confirm="() => handlerAbolish(record.id)"
                  >
                  <a-popconfirm title="确定作废吗?" @confirm="() => handlerAbolish(record.id)">
                    <a>作废</a>
                  </a-popconfirm>
                </a-menu-item>
@@ -203,14 +101,8 @@
            <a @click="handleDetail(record)">详情</a>
          </template>
          <a-divider
            v-if="record.maintenanceStatus === 'COMPLETE'"
            type="vertical"
          />
          <a
            v-if="record.maintenanceStatus === 'COMPLETE'"
            @click="handlePrint(record)"
          >打印</a>
          <a-divider v-if="record.maintenanceStatus === 'COMPLETE'" type="vertical"/>
          <a v-if="record.maintenanceStatus === 'COMPLETE'" @click="handlePrint(record)">打印</a>
        </span>
      </a-table>
@@ -218,239 +110,204 @@
    <!-- table区域-end -->
    <!-- 表单区域 -->
    <eamThirdMaintenanceOrder-modal
      ref="modalForm"
      @ok="modalFormOk"
    ></eamThirdMaintenanceOrder-modal>
    <eamThirdMaintenanceOrder-modal ref="modalForm" @ok="modalFormOk"/>
    <third-maintenance-approval-modal
      ref="thirdMaintenanceApprovalModal"
      :selectShenpiData="selectThirdMaintenanceData"
    />
    <third-maintenance-approval-modal ref="thirdMaintenanceApprovalModal"
                                      :selectShenpiData="selectThirdMaintenanceData"/>
  </a-card>
</template>
<script>
import '@/assets/less/TableExpand.less'
import EamThirdMaintenanceOrderModal from './modules/EamThirdMaintenanceOrderModal'
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
import LxSearchEquipmentSelect from '@views/eam/equipment/modules/LxSearchEquipmentSelect.vue'
import { deleteAction, getAction } from '@api/manage'
import ThirdMaintenanceApprovalModal from '@views/flowable/workflow/thirdMaintenance/ThirdMaintenanceApprovalModal.vue'
  import EamThirdMaintenanceOrderModal from './modules/EamThirdMaintenanceOrderModal'
  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
  import LxSearchEquipmentSelect from '@views/eam/equipment/modules/LxSearchEquipmentSelect.vue'
  import { deleteAction, getAction } from '@api/manage'
  import ThirdMaintenanceApprovalModal
    from '@views/flowable/workflow/thirdMaintenance/ThirdMaintenanceApprovalModal.vue'
export default {
  name: 'EamThirdMaintenanceOrderList',
  mixins: [JeecgListMixin],
  components: {
    LxSearchEquipmentSelect,
    EamThirdMaintenanceOrderModal,
    ThirdMaintenanceApprovalModal
  },
  props: {
    isDisplayOperation: {
      type: Boolean,
      default: true
    }
  },
  data() {
    return {
      description: '设备三级保养管理页面',
      disableMixinCreated: true,
      selectThirdMaintenanceData: {},
      // 表头
      columns: [
        {
          title: '#',
          dataIndex: '',
          key: 'rowIndex',
          width: 60,
          align: 'center',
          fixed: 'left',
          customRender: function (t, r, index) {
            return parseInt(index) + 1
          }
        },
        {
          title: '工单号',
          align: 'center',
          dataIndex: 'orderNum',
          fixed: 'left',
          width: 60
        },
        {
          title: '设备编号',
          align: 'center',
          dataIndex: 'equipmentCode',
          fixed: 'left',
          width: 60
        },
        {
          title: '设备名称',
          align: 'center',
          dataIndex: 'equipmentName',
          fixed: 'left',
          width: 60
        },
        {
          title: '标准名称',
          align: 'center',
          dataIndex: 'standardId_dictText'
        },
        {
          title: '计划保养日期',
          align: 'center',
          dataIndex: 'maintenanceDate'
        },
        {
          title: '实际开始时间',
          align: 'center',
          dataIndex: 'actualStartTime'
        },
        {
          title: '实际结束时间',
          align: 'center',
          dataIndex: 'actualEndTime'
        },
        {
          title: '保养人',
          align: 'center',
          dataIndex: 'operator_dictText'
        },
        {
          title: '精度检验人',
          align: 'center',
          dataIndex: 'precisionChecker_dictText'
        },
        {
          title: '精度检验时间',
          align: 'center',
          dataIndex: 'precisionCheckTime'
        },
        {
          title: '保养状态',
          align: 'center',
          dataIndex: 'maintenanceStatus_dictText'
        },
        {
          title: '创建方式',
          align: 'center',
          dataIndex: 'creationMethod_dictText'
        },
        {
          title: '机动办确认',
          align: 'center',
          dataIndex: 'confirmUser_dictText',
          width: 60
        },
        {
          title: '机动办确认时间',
          align: 'center',
          dataIndex: 'confirmTime',
          width: 60
        },
        {
          title: '机动办意见',
          align: 'center',
          dataIndex: 'confirmComment',
          width: 60
        },
        {
          title: '确认领导',
          align: 'center',
          dataIndex: 'confirmLeader_dictText',
          width: 60
        },
        {
          title: '领导确认时间',
          align: 'center',
          dataIndex: 'leaderConfirmTime',
          width: 60
        },
        {
          title: '领导意见',
          align: 'center',
          dataIndex: 'leaderConfirmComment',
          width: 60
        },
        {
          title: '备注',
          align: 'center',
          dataIndex: 'remark'
        }
      ],
      url: {
        list: '/eam/thirdMaintenanceOrder/list',
        abolish: '/eam/thirdMaintenanceOrder/abolish',
        abolishBatch: '/eam/thirdMaintenanceOrder/abolishBatch',
        collect: '/eam/thirdMaintenanceOrder/collect',
        collectBatch: '/eam/thirdMaintenanceOrder/collectBatch'
  export default {
    name: 'EamThirdMaintenanceOrderList',
    mixins: [JeecgListMixin],
    components: {
      LxSearchEquipmentSelect,
      EamThirdMaintenanceOrderModal,
      ThirdMaintenanceApprovalModal
    },
    props: {
      isDisplayOperation: {
        type: Boolean,
        default: true
      }
    }
  },
  created() {
    if (!this.isDisplayOperation) {
      return
    }
    const operationColumn = {
      title: '操作',
      dataIndex: 'action',
      align: 'center',
      fixed: 'right',
      width: 200,
      scopedSlots: { customRender: 'action' }
    }
    this.columns = [...this.columns, operationColumn]
    this.loadData(1)
  },
  computed: {},
  methods: {
    onMaintenanceDateChange: function (value, dateString) {
      if (dateString && dateString.length === 2) {
    },
    data() {
      return {
        description: '设备三级保养管理页面',
        disableMixinCreated: true,
        selectThirdMaintenanceData: {},
        // 表头
        columns: [
          {
            title: '#',
            dataIndex: '',
            key: 'rowIndex',
            width: 60,
            align: 'center',
            fixed: 'left',
            customRender: function(t, r, index) {
              return parseInt(index) + 1
            }
          },
          {
            title: '统一编码',
            align: 'center',
            dataIndex: 'equipmentCode',
            fixed: 'left'
          },
          {
            title: '设备名称',
            align: 'center',
            dataIndex: 'equipmentName',
            fixed: 'left'
          },
          {
            title: '设备型号',
            align: 'center',
            dataIndex: 'equipmentModel',
            fixed: 'left'
          },
          {
            title: '工单号',
            align: 'center',
            dataIndex: 'orderNum'
          },
          {
            title: '规范名称',
            align: 'center',
            dataIndex: 'standardId_dictText'
          },
          {
            title: '计划保养日期',
            align: 'center',
            dataIndex: 'maintenanceDate'
          },
          {
            title: '实际开始时间',
            align: 'center',
            dataIndex: 'actualStartTime'
          },
          {
            title: '实际结束时间',
            align: 'center',
            dataIndex: 'actualEndTime'
          },
          {
            title: '保养人',
            align: 'center',
            dataIndex: 'operator_dictText'
          },
          {
            title: '精度检验人',
            align: 'center',
            dataIndex: 'precisionChecker_dictText'
          },
          {
            title: '精度检验时间',
            align: 'center',
            dataIndex: 'precisionCheckTime'
          },
          {
            title: '保养状态',
            align: 'center',
            dataIndex: 'maintenanceStatus_dictText'
          },
          {
            title: '创建方式',
            align: 'center',
            dataIndex: 'creationMethod_dictText'
          },
          {
            title: '机动办确认',
            align: 'center',
            dataIndex: 'confirmUser_dictText'
          },
          {
            title: '机动办确认时间',
            align: 'center',
            dataIndex: 'confirmTime'
          },
          {
            title: '机动办意见',
            align: 'center',
            dataIndex: 'confirmComment'
          },
          {
            title: '确认领导',
            align: 'center',
            dataIndex: 'confirmLeader_dictText'
          },
          {
            title: '领导确认时间',
            align: 'center',
            dataIndex: 'leaderConfirmTime'
          },
          {
            title: '领导意见',
            align: 'center',
            dataIndex: 'leaderConfirmComment'
          }
        ],
        url: {
          list: '/eam/thirdMaintenanceOrder/list',
          abolish: '/eam/thirdMaintenanceOrder/abolish',
          abolishBatch: '/eam/thirdMaintenanceOrder/abolishBatch',
          collect: '/eam/thirdMaintenanceOrder/collect',
          collectBatch: '/eam/thirdMaintenanceOrder/collectBatch'
        }
      }
    },
    created() {
      if (!this.isDisplayOperation) {
        return
      }
      const operationColumn = {
        title: '操作',
        dataIndex: 'action',
        align: 'center',
        fixed: 'right',
        width: 200,
        scopedSlots: { customRender: 'action' }
      }
      this.columns = [...this.columns, operationColumn]
      this.loadData(1)
    },
    computed: {},
    methods: {
      onMaintenanceDateChange: function(dateString) {
        this.queryParam.maintenanceDateBegin = dateString[0]
        this.queryParam.maintenanceDateEnd = dateString[1]
      } else {
        this.queryParam.maintenanceDateBegin = undefined
        this.queryParam.maintenanceDateEnd = undefined
      }
    },
    handlerAbolish(id) {
      if (!this.url.abolish) {
        this.$message.error('请设置url.abolish属性!')
        return
      }
      var that = this
      deleteAction(that.url.abolish, { id: id }).then((res) => {
        if (res.success) {
          //重新计算分页问题
          that.reCalculatePage(1)
          // that.$message.success(res.message);
          that.$notification.success({
            message: '消息',
            description: res.message
      },
      handlerAbolish(id) {
        var that = this
        deleteAction(that.url.abolish, { id })
          .then((res) => {
            if (res.success) {
              //重新计算分页问题
              that.$notification.success({
                message: '消息',
                description: res.message
              })
              that.loadData()
            } else {
              that.$notification.warning({
                message: '消息',
                description: res.message
              })
            }
          })
          that.loadData()
        } else {
          // that.$message.warning(res.message);
          that.$notification.warning({
            message: '消息',
            description: res.message
          })
        }
      })
    },
    handlerBatchAbolish() {
      if (!this.url.abolishBatch) {
        this.$message.error('请设置url.abolishBatch属性!')
        return
      }
      if (this.selectedRowKeys.length <= 0) {
        // this.$message.warning('请选择一条记录!');
        this.$notification.warning({
          message: '消息',
          description: '请选择一条记录'
        })
        return
      } else {
      },
      handlerBatchAbolish() {
        var ids = ''
        for (var a = 0; a < this.selectedRowKeys.length; a++) {
          ids += this.selectedRowKeys[a] + ','
@@ -459,73 +316,54 @@
        this.$confirm({
          title: '确认作废',
          content: '是否作废选中数据,只有待保养状态的数据才可作废成功?',
          onOk: function () {
          onOk: function() {
            that.loading = true
            deleteAction(that.url.abolishBatch, { ids: ids }).then((res) => {
              if (res.success) {
                //重新计算分页问题
                that.reCalculatePage(that.selectedRowKeys.length)
                // that.$message.success(res.message);
                that.$notification.success({
                  message: '消息',
                  description: res.message
                })
                that.loadData()
                that.onClearSelected()
              } else {
                // that.$message.warning(res.message);
                that.$notification.warning({
                  message: '消息',
                  description: res.message
                })
              }
            }).finally(() => {
              that.loading = false
            })
            deleteAction(that.url.abolishBatch, { ids })
              .then((res) => {
                if (res.success) {
                  that.$notification.success({
                    message: '消息',
                    description: res.message
                  })
                  that.loadData()
                  that.onClearSelected()
                } else {
                  that.$notification.warning({
                    message: '消息',
                    description: res.message
                  })
                }
              })
              .finally(() => {
                that.loading = false
              })
          }
        })
      }
    },
    //单个领取
    handlerCollect(id) {
      if (!this.url.collect) {
        this.$message.error('请设置url.collect属性!')
        return
      }
      let that = this
      getAction(that.url.collect, { id: id }).then((res) => {
        if (res.success) {
          //重新计算分页问题
          that.reCalculatePage(1)
          // that.$message.success(res.message);
          that.$notification.success({
            message: '消息',
            description: res.message
      },
      //单个领取
      handlerCollect(id) {
        let that = this
        getAction(that.url.collect, { id })
          .then((res) => {
            if (res.success) {
              //重新计算分页问题
              that.$notification.success({
                message: '消息',
                description: res.message
              })
              that.loadData()
            } else {
              that.$notification.warning({
                message: '消息',
                description: res.message
              })
            }
          })
          that.loadData()
        } else {
          // that.$message.warning(res.message);
          that.$notification.warning({
            message: '消息',
            description: res.message
          })
        }
      })
    },
    //批量领取
    handlerBatchCollect() {
      if (!this.url.collectBatch) {
        this.$message.error('请设置url.abolishBatch属性!')
        return
      }
      if (this.selectedRowKeys.length <= 0) {
        // this.$message.warning('请选择一条记录!');
        this.$notification.warning({
          message: '消息',
          description: '请选择一条记录'
        })
        return
      } else {
      },
      //批量领取
      handlerBatchCollect() {
        var ids = ''
        for (var a = 0; a < this.selectedRowKeys.length; a++) {
          ids += this.selectedRowKeys[a] + ','
@@ -534,48 +372,42 @@
        this.$confirm({
          title: '确认领取',
          content: '是否领取选中数据,只有待保养状态的数据才可领取成功?',
          onOk: function () {
          onOk: function() {
            that.loading = true
            deleteAction(that.url.collectBatch, { ids: ids }).then((res) => {
              if (res.success) {
                //重新计算分页问题
                that.reCalculatePage(that.selectedRowKeys.length)
                // that.$message.success(res.message);
                that.$notification.success({
                  message: '消息',
                  description: res.message
                })
                that.loadData()
                that.onClearSelected()
              } else {
                // that.$message.warning(res.message);
                that.$notification.warning({
                  message: '消息',
                  description: res.message
                })
              }
            }).finally(() => {
              that.loading = false
            })
            deleteAction(that.url.collectBatch, { ids })
              .then((res) => {
                if (res.success) {
                  that.$notification.success({
                    message: '消息',
                    description: res.message
                  })
                  that.loadData()
                  that.onClearSelected()
                } else {
                  that.$notification.warning({
                    message: '消息',
                    description: res.message
                  })
                }
              })
              .finally(() => {
                that.loading = false
              })
          }
        })
      }
    },
    handleDetail(record) {
      this.selectThirdMaintenanceData = Object.assign({}, record)
      this.$refs.thirdMaintenanceApprovalModal.recordDetail(record)
      this.$refs.thirdMaintenanceApprovalModal.title = '详情'
      this.$refs.thirdMaintenanceApprovalModal.disableSubmit = true
    },
      },
    handlePrint(record) {
      let href = `${window._CONFIG['domianURL']}/jmreport/view/1094880052100399104?id=` + record.id;
      //  + `&orderId=` + record.id; //网站链接
      window.open(href, "_blank");
    },
      handleDetail(record) {
        this.selectThirdMaintenanceData = Object.assign({}, record)
        this.$refs.thirdMaintenanceApprovalModal.recordDetail(record)
        this.$refs.thirdMaintenanceApprovalModal.title = '详情'
        this.$refs.thirdMaintenanceApprovalModal.disableSubmit = true
      },
      handlePrint(record) {
        let href = `${window._CONFIG['domianURL']}/jmreport/view/1094880052100399104?id=` + record.id
        window.open(href, '_blank')
      }
    }
  }
}
</script>
<style scoped>
@import '~@assets/less/common.less';
</style>
</script>
src/views/eam/maintenance/modules/EamThirdMaintenanceOrderModal.vue
@@ -1,459 +1,272 @@
<template>
  <j-modal
    :title="title"
    :width="1200"
    :visible="visible"
    :confirmLoading="confirmLoading"
    switchFullscreen
    :mask-closable="false"
    @ok="handleOk"
    @cancel="handleCancel"
    cancelText="关闭">
  <j-modal :title="title" :width="1200" :visible="visible" :confirmLoading="confirmLoading" switchFullscreen
           :mask-closable="false" @ok="handleOk" @cancel="handleCancel" centered cancelText="关闭">
    <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="orderNum" label="工单号">
              <a-input placeholder="工单号系统自动生成" v-model="model.orderNum" disabled />
              <a-input placeholder="工单号系统自动生成" v-model="model.orderNum" disabled/>
            </a-form-model-item>
          </a-col>
          <a-col :span="8">
            <a-form-model-item prop="equipmentId" label="设备编码">
              <maintenance-equipment-select placeholder="请输入设备编号或名称搜索" v-model="model.equipmentId"
                                            :maintenanceCategory="maintenanceCategory"
            <a-form-model-item prop="equipmentId" label="统一编码">
              <maintenance-equipment-select placeholder="请输入统一编码或名称搜索" v-model="model.equipmentId"
                                            maintenanceCategory="THIRD_MAINTENANCE"
                                            @autocompleteForm="autocompleteForm"
                                            :disabled="editable"></maintenance-equipment-select>
                                            :disabled="!editable"/>
            </a-form-model-item>
          </a-col>
          <a-col :span="8">
            <a-form-model-item prop="standardName" label="标准名称">
              <a-input placeholder="选择设备后自动带出" v-model="model.standardName" disabled />
            <a-form-model-item prop="standardName" label="规范名称">
              <a-input placeholder="选择设备后自动带出" v-model="model.standardName" disabled/>
            </a-form-model-item>
          </a-col>
        </a-row>
        <a-row :gutter="24">
        <a-row>
          <a-col :span="8">
            <a-form-model-item prop="maintenanceDate" label="保养日期">
              <a-date-picker placeholder="请选择计划保养日期" v-model="model.maintenanceDate" format="YYYY-MM-DD"
                             style="width: 100%" />
            </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-date-picker placeholder="请选择计划保养日期" v-model="model.maintenanceDate" value-format="YYYY-MM-DD"
                             style="width: 100%"/>
            </a-form-model-item>
          </a-col>
          <a-col :span="8">
            <a-form-model-item prop="maintenancePeriod" label="保养周期">
              <a-input placeholder="选择设备后自动带出" v-model="model.maintenancePeriod" disabled />
              <a-input placeholder="选择设备后自动带出" v-model="model.maintenancePeriod" disabled/>
            </a-form-model-item>
          </a-col>
        </a-row>
        <a-row :gutter="24">
        <a-row>
          <a-form-model-item :labelCol="labelColLong" :wrapperCol="wrapperColLong" prop="remark" label="备注">
            <a-textarea placeholder="请输入备注" v-model="model.remark" />
            <a-textarea placeholder="请输入备注" v-model="model.remark"/>
          </a-form-model-item>
        </a-row>
        <a-row :gutter="24">
          <a-tabs v-model="activeTabKey">
            <a-tab-pane key="1" tab="保养项" :forceRender="true">
              <j-vxe-table
                ref="editableDetailTable"
                :rowNumber="true"
                :rowSelection="true"
                :bordered="true"
                :alwaysEdit="true"
                :toolbar="true"
                :toolbarConfig="detail.toolbarConfig"
                keep-source
                :height="300"
                :dataSource="detail.dataSource"
                :columns="detail.columns"
                style="margin-top: 8px;" />
            </a-tab-pane>
            <a-tab-pane key="2" tab="精度参数" :forceRender="true">
              <j-vxe-table
                ref="editablePrecisionDetailTable"
                :rowNumber="true"
                :rowSelection="true"
                :bordered="true"
                :alwaysEdit="true"
                :toolbar="false"
                :toolbarConfig="precisionDetail.toolbarConfig"
                keep-source
                :height="300"
                :dataSource="precisionDetail.dataSource"
                :columns="precisionDetail.columns"
                style="margin-top: 8px;" />
            </a-tab-pane>
          </a-tabs>
        </a-row>
        <a-tabs>
          <a-tab-pane key="1" tab="保养项明细">
            <j-vxe-table ref="editableDetailTable" rowNumber bordered keep-source :height="300"
                         :dataSource="detail.dataSource"
                         :columns="detail.columns"/>
          </a-tab-pane>
        </a-tabs>
      </a-form-model>
    </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'
  import { getAction, httpAction } from '@/api/manage'
  import MaintenanceEquipmentSelect from '@views/eam/equipment/modules/MaintenanceEquipmentSelect.vue'
  import { JVXETypes } from '@comp/jeecg/JVxeTable'
export default {
  name: 'EamThirdMaintenanceOrderModal',
  components: { MaintenanceEquipmentSelect },
  data() {
    return {
      title: '操作',
      visible: false,
      editable: false,
      maintenanceCategory: 'THIRD_MAINTENANCE',
      model: {},
      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,
      activeTabKey: '1',
      maintenanceOperatorOptions: [],
      validatorRules: {
        equipmentId: [
          { required: true, message: '请选择设备!' }
        ],
        maintenanceDate: [
          { required: true, message: '请选择计划保养日期!' }
        ]
      },
      url: {
        add: '/eam/thirdMaintenanceOrder/add',
        edit: '/eam/thirdMaintenanceOrder/edit',
        standardDetail: '/eam/eamMaintenanceStandardDetail/queryList',
        detail: '/eam/thirdMaintenanceOrderDetail/queryList',
        userSelect: '/eam/user_select/list',
        precisionDetail: '/eam/equipmentPrecisionParameters/queryList',
        precisionCheckDetail: '/eam/precisionCheckDetail/queryList',
      },
      detail: {
        loading: false,
        dataSource: [],
        columns: [
          {
            title: 'ID',
            key: 'id',
            type: JVXETypes.hidden
          },
          {
            title: 'orderId',
            key: 'orderId',
            type: JVXETypes.hidden
          },
          {
            title: '序号',
            key: 'itemCode',
            type: JVXETypes.inputNumber,
            width: '10%',
            align: 'center',
            validateRules: [
              { required: true, unique: true, message: '序号不能重复' }
            ]
          },
          {
            title: '部位',
            key: 'itemPart',
            type: JVXETypes.textarea,
            width: '25%',
            align: 'center'
          },
          {
            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: '保养要求不能为空!' }
            ]
  export default {
    name: 'EamThirdMaintenanceOrderModal',
    components: { MaintenanceEquipmentSelect },
    data() {
      return {
        title: '操作',
        visible: false,
        editable: true,
        model: {},
        labelCol: {
          xs: { span: 24 },
          sm: { span: 6 }
        },
        wrapperCol: {
          xs: { span: 24 },
          sm: { span: 15 }
        },
        labelColLong: {
          xs: { span: 24 },
          sm: { span: 2 }
        },
        wrapperColLong: {
          xs: { span: 24 },
          sm: { span: 21 }
        },
        confirmLoading: false,
        spinning: false,
        maintenanceOperatorOptions: [],
        validatorRules: {
          equipmentId: [
            { required: true, message: '请选择设备!', trigger: 'change' }
          ],
          maintenanceDate: [
            { required: true, message: '请选择计划保养日期!', trigger: 'change' }
          ]
        },
        url: {
          add: '/eam/thirdMaintenanceOrder/add',
          edit: '/eam/thirdMaintenanceOrder/edit',
          standardDetail: '/eam/eamMaintenanceStandardDetail/queryList',
          detail: '/eam/thirdMaintenanceOrderDetail/queryList',
          userSelect: '/eam/user_select/list'
        },
        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: 60,
              align: 'center'
            },
            {
              title: '保养部位',
              key: 'itemPart',
              type: JVXETypes.normal,
              align: 'center'
            },
            {
              title: '保养内容',
              key: 'itemName',
              type: JVXETypes.normal,
              align: 'center'
            },
            {
              title: '验收标准',
              key: 'itemDemand',
              type: JVXETypes.normal,
              align: 'center'
            }
          ],
          toolbarConfig: {
            // prefix 前缀;suffix 后缀
            slot: ['prefix', 'suffix'],
            // add 新增按钮;remove 删除按钮;clearSelection 清空选择按钮
            btn: ['add', 'remove', 'clearSelection']
          }
        ],
        toolbarConfig: {
          // prefix 前缀;suffix 后缀
          slot: ['prefix', 'suffix'],
          // add 新增按钮;remove 删除按钮;clearSelection 清空选择按钮
          btn: ['add', 'remove', 'clearSelection']
        }
      }
    },
    methods: {
      add() {
        //初始化默认值
        this.model = {}
        this.visible = true
        this.editable = true
        this.detail.dataSource = []
      },
      edit(record) {
        this.model = Object.assign({}, record)
        this.visible = true
        this.editable = false
        this.detail.dataSource = []
        this.loadDetail(record.id)
      },
      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 = true
            let httpurl = ''
            let method = ''
            if (!this.model.id) {
              httpurl += this.url.add
              method = 'post'
            } else {
              httpurl += this.url.edit
              method = 'put'
            }
            httpAction(httpurl, this.model, method).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 {
            return false
          }
        })
      },
      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)
        if (!this.model.equipmentId) delete this.model.operator
        if (!this.model.id) {
          this.loadStandardDetail(selectObj.id)
        }
        this.loadMaintenanceOperatorList(this.model.equipmentId)
      },
      //加载详情数据
      loadStandardDetail(standardId) {
        this.detail.dataSource = []
        if (standardId) {
          this.spinning = true
          getAction(this.url.standardDetail, { standardId: standardId })
            .then(res => {
              if (res.success) {
                this.detail.dataSource = res.result.map(item => ({
                  itemCode: item.itemCode,
                  itemName: item.itemName,
                  itemPart: item.itemPart,
                  itemDemand: item.itemDemand
                }))
              }
            })
            .finally(() => {
              this.spinning = false
            })
        }
      },
      precisionDetail: {
        loading: false,
        dataSource: [],
        columns: [
          {
            title: 'ID',
            key: 'id',
            type: JVXETypes.hidden
          },
          {
            title: 'orderId',
            key: 'orderId',
            type: JVXETypes.hidden
          },
          {
            title: 'equipmentId',
            key: 'equipmentId',
            type: JVXETypes.hidden
          },
          {
            title: 'parameterId',
            key: 'parameterId',
            type: JVXETypes.hidden
          },
          {
            title: '检测项目',
            key: 'parameterId_dictText',
            type: JVXETypes.normal,
            width: '25%',
            align: 'center'
          },
          {
            title: '参数编码',
            key: 'parameterCode_dictText',
            type: JVXETypes.normal,
            width: '20%',
            align: 'center',
          },
          {
            title: '允差值',
            key: 'parameterValue',
            type: JVXETypes.normal,
            width: '30%',
            align: 'center',
          }
        ],
        toolbarConfig: {
          // prefix 前缀;suffix 后缀
          slot: ['prefix', 'suffix'],
          // add 新增按钮;remove 删除按钮;clearSelection 清空选择按钮
          btn: ['add', 'remove', 'clearSelection']
      //规范选择变化
      loadDetail(orderId) {
        if (orderId) {
          getAction(this.url.detail, { orderId: orderId }).then(res => {
            if (res.success) {
              this.detail.dataSource = [...res.result]
            }
          })
        }
      },
      handleCancel() {
        this.close()
      },
      close() {
        this.$emit('close')
        this.visible = false
        this.$refs.form.clearValidate()
      }
    }
  },
  created() {
  },
  methods: {
    add() {
      this.initParams();
      //初始化默认值
      this.model = {}
      this.visible = true
      this.editable = false
      this.detail.dataSource = []
    },
    edit(record) {
      this.initParams();
      this.model = Object.assign({}, record)
      this.visible = true
      this.editable = true
      this.detail.dataSource = []
      this.loadDetail(record.id)
      this.loadPrecisionDetail(record.id)
    },
    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()
          let removeData = that.$refs.editableDetailTable.getDeleteData()
          that.model.tableDetailList = [...tableData]
          that.model.removeDetailList = [...removeData]
          let precisionDetailList = that.$refs.editablePrecisionDetailTable.getTableData()
          let removePrecisionDetailList = that.$refs.editablePrecisionDetailTable.getDeleteData()
          that.model.precisionDetailList = [...precisionDetailList]
          that.model.removePrecisionDetailList = [...removePrecisionDetailList]
          that.confirmLoading = true
          let httpurl = ''
          let method = ''
          if (!this.model.id) {
            httpurl += this.url.add
            method = 'post'
          } else {
            httpurl += this.url.edit
            method = 'put'
          }
          httpAction(httpurl, this.model, method).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 {
          return false
        }
      })
    },
    handleCancel() {
      this.close()
    },
    autocompleteForm(selectObj) {
      //标准名称,保养周期不刷新解决办法
      //办法一  validatorRules equipmentId 还是有问题
      // const newObj = {
      //   standardName: selectObj.standardName,
      //   maintenancePeriod: selectObj.maintenancePeriod,
      //   standardId : selectObj.id,
      //   equipmentId: selectObj.equipmentId,
      // };
      // this.model = Object.assign({}, newObj, this.model)
      //办法二
      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.equipmentId) delete this.model.operator
      if (!this.model.id) {
        this.loadStandardDetail(selectObj.id)
        this.loadPrecisionParameterList(selectObj.equipmentId)
      }
      this.loadMaintenanceOperatorList(this.model.equipmentId)
    },
    //加载详情数据
    loadStandardDetail(standardId) {
      this.detail.dataSource = []
      if (standardId) {
        this.spinning = true
        getAction(this.url.standardDetail, { standardId: standardId })
          .then(res => {
            if (res.success) {
              this.detail.dataSource = res.result.map(item => ({
                itemCode: item.itemCode,
                itemName: item.itemName,
                itemPart: item.itemPart,
                itemDemand: item.itemDemand
              }))
            }
          })
          .finally(() => {
            this.spinning = false
          })
      }
    },
    //标准选择变化
    loadDetail(orderId) {
      if (orderId) {
        getAction(this.url.detail, { orderId: orderId }).then(res => {
          if (res.success) {
            this.detail.dataSource = [...res.result]
          }
        })
      }
    },
    loadMaintenanceOperatorList(equipmentId) {
      this.maintenanceOperatorOptions = []
      let params = { positionCode: 'PCR0001' }
      if (equipmentId) {
        params.equipmentId = equipmentId
      } else {
        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
        })
    },
    loadPrecisionParameterList(equipmentId) {
      this.precisionDetail.dataSource = []
      if (equipmentId) {
        this.spinning = true
        getAction(this.url.precisionDetail, { equipmentId: equipmentId })
          .then(res => {
            if (res.success) {
              this.precisionDetail.dataSource = res.result.map(item => ({
                equipmentId: item.equipmentId,
                parameterId: item.parameterId,
                parameterId_dictText: item.parameterId_dictText,
                parameterCode_dictText: item.parameterCode_dictText,
                parameterValue: item.parameterValue,
              }))
            }
          })
          .finally(() => {
            this.spinning = false
          })
      }
    },
    loadPrecisionDetail(orderId) {
      if (orderId) {
        getAction(this.url.precisionCheckDetail, { orderId: orderId }).then(res => {
          if (res.success) {
            this.precisionDetail.dataSource = [...res.result]
          }
        })
      }
    },
    initParams() {
      this.detail.dataSource = []
      this.precisionDetail.dataSource = []
      this.activeTabKey = '1'
    },
  }
}
</script>
<style lang="less" scoped>
</style>
</script>
src/views/eam/technical/EamTechnicalStatusEvaluationOrderList.vue
@@ -6,17 +6,18 @@
        <a-row :gutter="24">
          <a-col :xl="5" :lg="6" :md="8" :sm="12">
            <a-form-item label="统一编码">
              <technical-status-equipment-select placeholder="请输入统一编码或名称搜索" v-model="queryParam.equipmentId"/>
              <technical-status-equipment-select placeholder="请输入统一编码或名称搜索"
                                                 v-model="queryParam.equipmentId" />
            </a-form-item>
          </a-col>
          <a-col :xl="5" :lg="6" :md="8" :sm="12">
            <a-form-item label="工单号">
              <a-input placeholder="请输入工单号" v-model="queryParam.orderNum"/>
              <a-input placeholder="请输入工单号" v-model="queryParam.orderNum" />
            </a-form-item>
          </a-col>
          <a-col :xl="5" :lg="6" :md="8" :sm="12">
            <a-form-item label="计划鉴定日期">
              <a-date-picker v-model="queryParam.evaluationDate" style="width: 100%"/>
              <a-date-picker v-model="queryParam.evaluationDate" style="width: 100%" />
            </a-form-item>
          </a-col>
          <a-col :xl="4" :lg="6" :md="8" :sm="12">
@@ -39,7 +40,7 @@
             :scroll="{ x: 'max-content' }" :loading="loading" @change="handleTableChange">
        <span slot="action" slot-scope="text, record">
          <a-popconfirm v-if="record.evaluationStatus=='WAIT_EVALUATION'" title="确定领取吗?"
          <a-popconfirm v-if="record.evaluationStatus === 'WAIT_EVALUATION'" title="确定领取吗?"
                        @confirm="handleReceive(record.id)">
            <a>领取</a>
          </a-popconfirm>
@@ -48,229 +49,226 @@
    <!-- table区域-end -->
    <!-- 表单区域 -->
    <eamTechnicalStatusEvaluationOrder-modal ref="modalForm" @ok="modalFormOk"/>
    <eamTechnicalStatusEvaluationOrder-modal ref="modalForm" @ok="modalFormOk" />
  </a-card>
</template>
<script>
  import EamTechnicalStatusEvaluationOrderModal from './modules/EamTechnicalStatusEvaluationOrderModal'
  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
  import TechnicalStatusEquipmentSelect from '../equipment/modules/TechnicalStatusEquipmentSelect'
  import { getAction } from '@/api/manage'
import EamTechnicalStatusEvaluationOrderModal from './modules/EamTechnicalStatusEvaluationOrderModal'
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
import TechnicalStatusEquipmentSelect from '../equipment/modules/TechnicalStatusEquipmentSelect'
import { getAction } from '@/api/manage'
  export default {
    name: 'EamTechnicalStatusEvaluationOrderList',
    mixins: [JeecgListMixin],
    components: {
      TechnicalStatusEquipmentSelect,
      EamTechnicalStatusEvaluationOrderModal
    },
    data() {
      return {
        description: '技术状态鉴定工单管理页面',
        // 表头
        columns: [
          {
            title: '#',
            dataIndex: '',
            key: 'rowIndex',
            width: 60,
            align: 'center',
            customRender: function(t, r, index) {
              return parseInt(index) + 1
            },
            fixed: 'left'
export default {
  name: 'EamTechnicalStatusEvaluationOrderList',
  mixins: [JeecgListMixin],
  components: {
    TechnicalStatusEquipmentSelect,
    EamTechnicalStatusEvaluationOrderModal
  },
  data() {
    return {
      description: '技术状态鉴定工单管理页面',
      // 表头
      columns: [
        {
          title: '#',
          dataIndex: '',
          key: 'rowIndex',
          width: 60,
          align: 'center',
          customRender: function(t, r, index) {
            return parseInt(index) + 1
          },
          {
            title: '统一编码',
            align: 'center',
            dataIndex: 'equipmentCode',
            fixed: 'left'
          },
          {
            title: '设备名称',
            align: 'center',
            dataIndex: 'equipmentName',
            fixed: 'left'
          },
          {
            title: '设备型号',
            align: 'center',
            dataIndex: 'equipmentModel',
            fixed: 'left'
          },
          {
            title: '工单号',
            align: 'center',
            dataIndex: 'orderNum',
            fixed: 'left'
          },
          {
            title: '计划鉴定日期',
            align: 'center',
            dataIndex: 'evaluationDate',
            fixed: 'left'
          },
          {
            title: '锁定工单日期',
            align: 'center',
            dataIndex: 'freezeOrderDate'
          },
          {
            title: '工单过期日期',
            align: 'center',
            dataIndex: 'orderExpirationDate'
          },
          {
            title: '实际开始时间',
            align: 'center',
            dataIndex: 'actualStartTime'
          },
          {
            title: '实际结束时间',
            align: 'center',
            dataIndex: 'actualEndTime'
          },
          {
            title: '鉴定人',
            align: 'center',
            dataIndex: 'evaluator'
          },
          {
            title: '鉴定状态',
            align: 'center',
            dataIndex: 'evaluationStatus_dictText'
          },
          {
            title: '创建方式',
            align: 'center',
            dataIndex: 'creationMethod_dictText'
          },
          {
            title: '安全装置检查结果',
            align: 'center',
            dataIndex: 'safetyEquipmentCheckResult'
          },
          {
            title: '精度参数检查结果',
            align: 'center',
            dataIndex: 'precisionCheckResult'
          },
          {
            title: '功能状态检查结果',
            align: 'center',
            dataIndex: 'functionalCheckResult'
          },
          {
            title: '其他检查结果',
            align: 'center',
            dataIndex: 'otherCheckResult'
          },
          {
            title: '维修室主任签字',
            align: 'center',
            dataIndex: 'repairManagerSignature'
          },
          {
            title: '维修室主任签字时间',
            align: 'center',
            dataIndex: 'repairManagerSignatureTime1'
          },
          {
            title: '试件检查结果',
            align: 'center',
            dataIndex: 'sampleCheckResult'
          },
          {
            title: '工艺员签字',
            align: 'center',
            dataIndex: 'processTechnicianSignature'
          },
          {
            title: '工艺员签字时间',
            align: 'center',
            dataIndex: 'processTechnicianSignatureTime'
          },
          {
            title: '鉴定结果',
            align: 'center',
            dataIndex: 'evaluationResult'
          },
          {
            title: '限/禁用原因',
            align: 'center',
            dataIndex: 'evaluationReason'
          },
          {
            title: '设备检查人签字',
            align: 'center',
            dataIndex: 'inspectorSignature'
          },
          {
            title: '设备检查人签字时间',
            align: 'center',
            dataIndex: 'inspectorSignatureTime'
          },
          {
            title: '附录A HF编码',
            align: 'center',
            dataIndex: 'hfCodeA'
          },
          {
            title: '附录B HF编码',
            align: 'center',
            dataIndex: 'hfCodeB'
          },
          {
            title: '附录C HF编码',
            align: 'center',
            dataIndex: 'hfCodeC'
          },
          {
            title: '附录D HF编码',
            align: 'center',
            dataIndex: 'hfCodeD'
          },
          {
            title: '操作',
            dataIndex: 'action',
            align: 'center',
            scopedSlots: { customRender: 'action' },
            fixed: 'right'
          }
        ],
        url: {
          list: '/eam/eamTechnicalStatusEvaluationOrder/list',
          receive: '/eam/eamTechnicalStatusEvaluationOrder/collect',
          delete: '/eam/eamTechnicalStatusEvaluationOrder/delete',
          deleteBatch: '/eam/eamTechnicalStatusEvaluationOrder/deleteBatch',
          exportXlsUrl: 'eam/eamTechnicalStatusEvaluationOrder/exportXls',
          importExcelUrl: 'eam/eamTechnicalStatusEvaluationOrder/importExcel'
          fixed: 'left'
        },
        {
          title: '统一编码',
          align: 'center',
          dataIndex: 'equipmentCode',
          fixed: 'left'
        },
        {
          title: '设备名称',
          align: 'center',
          dataIndex: 'equipmentName',
          fixed: 'left'
        },
        {
          title: '设备型号',
          align: 'center',
          dataIndex: 'equipmentModel',
          fixed: 'left'
        },
        {
          title: '工单号',
          align: 'center',
          dataIndex: 'orderNum',
          fixed: 'left'
        },
        {
          title: '计划鉴定日期',
          align: 'center',
          dataIndex: 'evaluationDate',
          fixed: 'left'
        },
        {
          title: '锁定工单日期',
          align: 'center',
          dataIndex: 'freezeOrderDate'
        },
        {
          title: '工单过期日期',
          align: 'center',
          dataIndex: 'orderExpirationDate'
        },
        {
          title: '实际开始时间',
          align: 'center',
          dataIndex: 'actualStartTime'
        },
        {
          title: '实际结束时间',
          align: 'center',
          dataIndex: 'actualEndTime'
        },
        {
          title: '鉴定人',
          align: 'center',
          dataIndex: 'evaluator'
        },
        {
          title: '鉴定状态',
          align: 'center',
          dataIndex: 'evaluationStatus_dictText'
        },
        {
          title: '创建方式',
          align: 'center',
          dataIndex: 'creationMethod_dictText'
        },
        {
          title: '安全装置检查结果',
          align: 'center',
          dataIndex: 'safetyEquipmentCheckResult'
        },
        {
          title: '精度参数检查结果',
          align: 'center',
          dataIndex: 'precisionCheckResult'
        },
        {
          title: '功能状态检查结果',
          align: 'center',
          dataIndex: 'functionalCheckResult'
        },
        {
          title: '其他检查结果',
          align: 'center',
          dataIndex: 'otherCheckResult'
        },
        {
          title: '维修室主任签字',
          align: 'center',
          dataIndex: 'repairManagerSignature'
        },
        {
          title: '维修室主任签字时间',
          align: 'center',
          dataIndex: 'repairManagerSignatureTime1'
        },
        {
          title: '试件检查结果',
          align: 'center',
          dataIndex: 'sampleCheckResult'
        },
        {
          title: '工艺员签字',
          align: 'center',
          dataIndex: 'processTechnicianSignature'
        },
        {
          title: '工艺员签字时间',
          align: 'center',
          dataIndex: 'processTechnicianSignatureTime'
        },
        {
          title: '鉴定结果',
          align: 'center',
          dataIndex: 'evaluationResult'
        },
        {
          title: '限/禁用原因',
          align: 'center',
          dataIndex: 'evaluationReason'
        },
        {
          title: '设备检查人签字',
          align: 'center',
          dataIndex: 'inspectorSignature'
        },
        {
          title: '设备检查人签字时间',
          align: 'center',
          dataIndex: 'inspectorSignatureTime'
        },
        {
          title: '附录A HF编码',
          align: 'center',
          dataIndex: 'hfCodeA'
        },
        {
          title: '附录B HF编码',
          align: 'center',
          dataIndex: 'hfCodeB'
        },
        {
          title: '附录C HF编码',
          align: 'center',
          dataIndex: 'hfCodeC'
        },
        {
          title: '附录D HF编码',
          align: 'center',
          dataIndex: 'hfCodeD'
        },
        {
          title: '操作',
          dataIndex: 'action',
          align: 'center',
          scopedSlots: { customRender: 'action' },
          fixed: 'right'
        }
      }
    },
    computed: {
      importExcelUrl: function() {
        return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`
      }
    },
    methods: {
      handleReceive(id) {
        getAction(this.url.receive, { id })
          .then(res => {
            if (res.success) {
              this.$notification.success({
                message: '消息',
                description: res.message
              })
            } else {
              this.$notification.warning({
                message: '消息',
                description: res.message
              })
            }
          })
      ],
      url: {
        list: '/eam/eamTechnicalStatusEvaluationOrder/list',
        receive: '/eam/eamTechnicalStatusEvaluationOrder/collect',
      }
    }
  },
  computed: {
  },
  methods: {
    handleReceive(id) {
      let that = this
      this.loading = true
      getAction(that.url.receive, { id })
        .then(res => {
          if (res.success) {
            that.$notification.success({
              message: '消息',
              description: res.message
            })
            that.loadData();
          } else {
            that.$notification.warning({
              message: '消息',
              description: res.message
            })
            that.loading = false
          }
        })
    }
  }
}
</script>
src/views/flowable/workflow/secondMaintenance/SecondMaintenanceApprovalModal.vue
@@ -1,171 +1,178 @@
<template>
  <j-modal
    :title="title"
    :width="1200"
    :visible="visible"
    :confirmLoading="confirmLoading"
    :okButtonProps="{ class:{'jee-hidden': disableSubmit} }"
    switchFullscreen
    @ok="handleOk"
    @cancel="handleCancel"
    centered
    cancelText="关闭">
  <j-modal :title="title" :width="1200" :visible="visible" :confirmLoading="confirmLoading"
           :okButtonProps="{ class:{'jee-hidden': disableSubmit} }" fullscreen @ok="handleOk"
           @cancel="handleCancel" centered cancelText="关闭">
    <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-form-model ref="form" :model="model" :rules="validatorRules" :labelCol="labelCol" :wrapperCol="wrapperCol">
        <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>
          </a-col>
          <a-col :span="8">
            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="equipmentId" label="设备编码">
              <maintenance-equipment-select placeholder="请输入设备编号或名称搜索" v-model="model.equipmentId"
                                            :maintenanceCategory="maintenanceCategory"
                                            @autocompleteForm="autocompleteForm"
                                            disabled></maintenance-equipment-select>
            </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-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-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-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>
          </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-form-model-item>
        </a-row>
        <a-row :gutter="24">
          <a-form-model-item :labelCol="labelColLong" :wrapperCol="wrapperColLong" label="保养图片">
            <lx-upload :returnUrl="false"
                       :isMultiple="true"
                       file-type="image"
                       :disabled="confirmDisable"
                       :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 v-model="activeTabKey">
            <a-tab-pane key="1" tab="保养项明细">
              <j-vxe-table
                ref="editableDetailTable"
                :rowNumber="false"
                :rowSelection="true"
                :bordered="true"
                :alwaysEdit="true"
                :toolbar="false"
                keep-source
                :height="300"
                :loading="detail.loading"
                :dataSource="detail.dataSource"
                :columns="detail.columns"
                @selectRowChange="handleTableSelectRowChange"
              >
                <template v-slot:maintenanceResult="props">
                  <j-dict-select-tag v-model="props.row.maintenanceResult" dictCode="eam_inspection_result"
                                     placeholder="请选择保养结果"
                                     :disabled="disableSubmit || confirmDisable"
                                     @change="handleInspectionResultSelectChange($event,props.row)"
                                     style="width: 100%"/>
                </template>
            <a-tabs>
              <a-tab-pane tab="基础信息">
                <a-row>
                  <a-col :span="12">
                    <a-form-model-item label="工单号">
                      <a-input v-model="model.orderNum" readOnly/>
                    </a-form-model-item>
                  </a-col>
                  <a-col :span="12">
                    <a-form-model-item label="设备编码">
                      <maintenance-equipment-select v-model="model.equipmentId" maintenanceCategory="SECOND_MAINTENANCE"
                                                    @autocompleteForm="autocompleteForm" disabled/>
                    </a-form-model-item>
                  </a-col>
                </a-row>
                <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'"/>
                </template>
                <a-row>
                  <a-col :span="12">
                    <a-form-model-item label="规范名称">
                      <a-input v-model="model.standardName" readOnly/>
                    </a-form-model-item>
                  </a-col>
                  <a-col :span="12">
                    <a-form-model-item label="保养日期">
                      <a-input v-model="model.maintenanceDate" readOnly/>
                    </a-form-model-item>
                  </a-col>
                </a-row>
                <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%"/>
                </template>
              </j-vxe-table>
            </a-tab-pane>
            <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-row>
                  <a-col :span="12">
                    <a-form-model-item label="操作工">
                      <a-input v-model="model.operator_dicText" readOnly/>
                    </a-form-model-item>
                  </a-col>
                  <a-col :span="12">
                    <a-form-model-item label="维修工">
                      <a-input v-model="model.repairer_dicText" readOnly/>
                    </a-form-model-item>
                  </a-col>
                </a-row>
                <a-row>
                  <a-col :span="12">
                    <a-form-model-item prop="maintenancePeriod" label="保养周期">
                      <a-input v-model="model.maintenancePeriod" readOnly/>
                    </a-form-model-item>
                  </a-col>
                </a-row>
                <a-row>
                  <a-form-model-item :labelCol="labelColLong" :wrapperCol="wrapperColLong" label="备注">
                    <a-textarea v-model="model.remark" readOnly/>
                  </a-form-model-item>
                </a-row>
              </a-tab-pane>
              <a-tab-pane key='3' tab='流程图'>
                <img :src="imageSrc" alt="Fetched Image"/>
            </a-tabs>
          </a-col>
          <a-col
            :span="model.maintenanceStatus!='WAIT_MAINTENANCE'&&model.maintenanceStatus!='UNDER_MAINTENANCE'?10:16">
            <a-tabs v-model="activeTabKey">
              <a-tab-pane key="1" tab="操作工">
                <j-vxe-table ref="editableDetailTable1" :rowNumber="false" rowSelection bordered
                             alwaysEdit keep-source :height="300"
                             :dataSource="detail.operatorMaintenanceList" :columns="detail.columns"
                             @selectRowChange="handleTableSelectRowChange">
                  <template v-slot:maintenanceResult="props">
                    <j-dict-select-tag v-model="props.row.maintenanceResult" dictCode="eam_inspection_result"
                                       placeholder="请选择保养结果" :disabled="disableSubmit || confirmDisable"
                                       @change="handleInspectionResultSelectChange($event,props.row)"
                                       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'"/>
                  </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%"/>
                  </template>
                </j-vxe-table>
              </a-tab-pane>
            </template>
            <a-button v-if="!disableSubmit &&!confirmDisable&& selectedRowKeys.length > 0" slot="tabBarExtraContent"
                      type="primary" @click="handleSelectAllInspectionResult">保养正常
            </a-button>
          </a-tabs>
              <a-tab-pane key="2" tab="维修工">
                <j-vxe-table ref="editableDetailTable2" :rowNumber="false" rowSelection bordered
                             alwaysEdit kee-source :height="300"
                             :dataSource="detail.repairerMaintenanceList" :columns="detail.columns"
                             @selectRowChange="handleTableSelectRowChange">
                  <template v-slot:maintenanceResult="props">
                    <j-dict-select-tag v-model="props.row.maintenanceResult" dictCode="eam_inspection_result"
                                       placeholder="请选择保养结果" :disabled="disableSubmit || confirmDisable"
                                       @change="handleInspectionResultSelectChange($event,props.row)"
                                       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'"/>
                  </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%"/>
                  </template>
                </j-vxe-table>
              </a-tab-pane>
              <template v-if="selectShenpiData.procInstId">
                <a-tab-pane key='3' tab='流程图'>
                  <img :src="imageSrc" alt="Fetched Image"/>
                </a-tab-pane>
              </template>
              <a-button :disabled="disableSubmit ||confirmDisable||selectedRowKeys.length > 0" slot="tabBarExtraContent"
                        type="primary" @click="handleSelectAllInspectionResult">批量保养正常
              </a-button>
            </a-tabs>
          </a-col>
          <a-col :span="6"
                 v-if="model.maintenanceStatus!='WAIT_MAINTENANCE'&&model.maintenanceStatus!='UNDER_MAINTENANCE'">
            <a-tabs>
              <a-tab-pane tab="管理员确认" v-if="confirmDisable">
                <a-row>
                  <a-col :span="24">
                    <a-form-model-item prop="confirmDealType" label="确认类型">
                      <j-dict-select-tag type='radio' v-model='model.confirmDealType' dictCode='approve_reject'
                                         placeholder="请选择确认类型" :disabled="disableSubmit || inspectorConfirmDisable"/>
                    </a-form-model-item>
                  </a-col>
                  <a-col :span="24">
                    <a-form-model-item prop="confirmComment" label="确认意见">
                      <a-textarea placeholder="请输入意见" v-model="model.confirmComment"
                                  :disabled="disableSubmit || inspectorConfirmDisable"/>
                    </a-form-model-item>
                  </a-col>
                </a-row>
              </a-tab-pane>
            </a-tabs>
            <a-tabs>
              <a-tab-pane tab="检查人确认" v-if="inspectorConfirmDisable">
                <a-row>
                  <a-col :span="24">
                    <a-form-model-item prop="confirmDealType" label="确认类型">
                      <j-dict-select-tag type='radio' v-model='model.confirmDealType' dictCode='approve_reject'
                                         placeholder="请选择确认类型" :disabled="disableSubmit || inspectorConfirmDisable"/>
                    </a-form-model-item>
                  </a-col>
                  <a-col :span="24">
                    <a-form-model-item prop="leaderConfirmComment" label="确认意见">
                      <a-textarea placeholder="请输入意见" v-model="model.leaderConfirmComment"
                                  :disabled="disableSubmit || completionDisable"/>
                    </a-form-model-item>
                  </a-col>
                </a-row>
              </a-tab-pane>
            </a-tabs>
          </a-col>
        </a-row>
        <div v-if="confirmDisable">
          <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;"> 管理员确认信息
          </a-divider>
          <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 || leaderConfirmDisable"/>
              </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 || leaderConfirmDisable"/>
              </a-form-model-item>
            </a-col>
          </a-row>
        </div>
        <div v-if="leaderConfirmDisable">
          <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;"> 领导确认信息
          </a-divider>
          <a-row :gutter="24">
            <a-col :span="24">
              <a-form-model-item :labelCol="labelColLong" :wrapperCol="wrapperColLong" prop="leaderConfirmComment"
                                 label="领导意见">
                <a-textarea placeholder="请输入意见" v-model="model.leaderConfirmComment"
                            :disabled="disableSubmit || completionDisable"/>
              </a-form-model-item>
            </a-col>
          </a-row>
        </div>
      </a-form-model>
    </a-spin>
  </j-modal>
@@ -192,15 +199,7 @@
      return {
        title: '操作',
        visible: false,
        //状态控制
        //保养中 不可编辑
        // confirmDisable: false,
        // initialAcceptanceDisable: false,
        // finalAcceptanceDisable: false,
        editable: false,
        model: {},
        maintenanceCategory: 'SECOND_MAINTENANCE',
        maintenanceOperatorOptions: [],
        labelCol: {
          xs: { span: 24 },
          sm: { span: 6 }
@@ -211,11 +210,11 @@
        },
        labelColLong: {
          xs: { span: 24 },
          sm: { span: 2 }
          sm: { span: 3 }
        },
        wrapperColLong: {
          xs: { span: 24 },
          sm: { span: 21 }
          sm: { span: 20 }
        },
        confirmLoading: false,
        spinning: false,
@@ -230,7 +229,7 @@
          ],
          leaderConfirmComment: [
            { required: true, message: '请输入初验收意见!' }
          ],
          ]
        },
        url: {
          queryById: '/eam/secondMaintenanceOrder/queryById',
@@ -242,12 +241,10 @@
        },
        disableSubmit: false,
        taskData: [],
        isDisplayBmp: false,
        showBmpButtonLoading: false,
        selectedRowKeys: [],
        detail: {
          loading: false,
          dataSource: [],
          operatorMaintenanceList: [],
          repairerMaintenanceList: [],
          columns: [
            {
              title: 'ID',
@@ -263,28 +260,19 @@
              title: '序号',
              key: 'itemCode',
              type: JVXETypes.normal,
              width: '5%',
              width: 60,
              align: 'center'
            },
            {
              title: '保养项',
              key: 'itemName',
              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: [
@@ -295,7 +283,6 @@
              title: '异常描述',
              key: 'exceptionDescription',
              type: JVXETypes.slot,
              width: '20%',
              align: 'center',
              slotName: 'exceptionDescription',
              validateRules: [
@@ -306,34 +293,25 @@
              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']
          }
          ]
        }
      }
    },
    created() {
    },
    computed: {
      confirmDisable: function() {
        return ['WAIT_CONFIRM', 'WAIT_LEADER_CONFIRM', 'COMPLETE'].includes(this.model.maintenanceStatus)
        return ['WAIT_ADMIN_CONFIRM', 'WAIT_INSPECTOR_CONFIRM', 'COMPLETE'].includes(this.model.maintenanceStatus)
      },
      leaderConfirmDisable: function() {
        return ['WAIT_LEADER_CONFIRM', 'COMPLETE'].includes(this.model.maintenanceStatus)
      inspectorConfirmDisable: function() {
        return ['WAIT_INSPECTOR_CONFIRM', 'COMPLETE'].includes(this.model.maintenanceStatus)
      },
      completionDisable: function() {
        return ['COMPLETE', 'ABOLISH'].includes(this.model.maintenanceStatus)
        return ['COMPLETE'].includes(this.model.maintenanceStatus)
      }
    },
    methods: {
@@ -341,10 +319,7 @@
        this.initParams()
        this.model = {}
        if (item.procInstId) {
          const { processDefinitionId, processInstanceId, processDefinitionKey, procInstId } = item
          let taskDataList = await getAction(this.url.queryHisTaskList, { procInstId })
          this.taskData = [...taskDataList.result]
          const { processDefinitionId, processInstanceId, processDefinitionKey } = item
          downFile(this.url.diagramView, {
            processDefinitionId,
@@ -364,10 +339,6 @@
        }
        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]
        }
        this.model.dataId = item.dataId
        this.model.taskId = item.id
        this.model.userId = item.assignee
@@ -380,10 +351,6 @@
        console.log('record', record)
        this.initParams()
        this.model = Object.assign({}, record)
        if (this.model.imageFiles) {
          let obj = JSON.parse(this.model.imageFiles)
          this.model.imageFilesResult = [...obj]
        }
        this.loadDetail(record.id)
      },
@@ -432,43 +399,23 @@
        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)
        if (!this.model.id) this.loadStandardDetail(selectObj.id)
      },
      //标准选择变化
      //规范选择变化
      loadDetail(orderId) {
        if (orderId) {
          getAction(this.url.detail, { orderId: orderId })
          getAction(this.url.detail, { orderId })
            .then(res => {
              if (res.success) {
                this.detail.dataSource = [...res.result]
                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
            })
        }
      },
      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) {
src/views/flowable/workflow/thirdMaintenance/ThirdMaintenanceApprovalModal.vue
@@ -1,184 +1,126 @@
<template>
  <j-modal
    :title="title"
    :width="1200"
    :visible="visible"
    :confirmLoading="confirmLoading"
    :okButtonProps="{ class:{'jee-hidden': disableSubmit} }"
    switchFullscreen
    @ok="handleOk"
    @cancel="handleCancel"
    centered
    cancelText="关闭">
  <j-modal :title="title" :visible="visible" :confirmLoading="confirmLoading"
           :okButtonProps="{ class:{'jee-hidden': disableSubmit} }" fullscreen @ok="handleOk" @cancel="handleCancel"
           centered cancelText="关闭">
    <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-form-model ref="form" :model="model" :rules="validatorRules" :labelCol="labelCol" :wrapperCol="wrapperCol">
        <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>
          </a-col>
          <a-col :span="8">
            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="equipmentId" label="设备编码">
              <maintenance-equipment-select placeholder="请输入设备编号或名称搜索" v-model="model.equipmentId"
                                            :maintenanceCategory="maintenanceCategory"
                                            @autocompleteForm="autocompleteForm"
                                            disabled></maintenance-equipment-select>
            </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-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-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-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>
          </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-form-model-item>
        </a-row>
        <a-row :gutter="24">
          <a-form-model-item :labelCol="labelColLong" :wrapperCol="wrapperColLong" label="保养图片">
            <lx-upload :returnUrl="false"
                       :isMultiple="true"
                       file-type="image"
                       :disabled="confirmDisable"
                       :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 v-model="activeTabKey">
            <a-tab-pane key="1" tab="保养项明细" v-if="!isPrecisionCheck">
              <j-vxe-table
                ref="editableDetailTable"
                :rowNumber="false"
                :rowSelection="true"
                :bordered="true"
                :alwaysEdit="true"
                :toolbar="false"
                keep-source
                :height="300"
                :loading="detail.loading"
                :dataSource="detail.dataSource"
                :columns="detail.columns"
                @selectRowChange="handleTableSelectRowChange"
              >
                <template v-slot:maintenanceResult="props">
                  <j-dict-select-tag v-model="props.row.maintenanceResult" dictCode="eam_inspection_result"
                                     placeholder="请选择保养结果"
                                     :disabled="disableSubmit || confirmDisable"
                                     @change="handleInspectionResultSelectChange($event,props.row)"
                                     style="width: 100%"/>
                </template>
            <a-tabs>
              <a-tab-pane tab="基础信息">
                <a-row>
                  <a-col :span="12">
                    <a-form-model-item label="工单号">
                      <a-input v-model="model.orderNum" readOnly/>
                    </a-form-model-item>
                  </a-col>
                  <a-col :span="12">
                    <a-form-model-item label="统一编码">
                      <maintenance-equipment-select v-model="model.equipmentId" maintenanceCategory="SECOND_MAINTENANCE"
                                                    @autocompleteForm="autocompleteForm" disabled/>
                    </a-form-model-item>
                  </a-col>
                </a-row>
                <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'"/>
                </template>
                <a-row>
                  <a-col :span="12">
                    <a-form-model-item label="规范名称">
                      <a-input v-model="model.standardName" readOnly/>
                    </a-form-model-item>
                  </a-col>
                  <a-col :span="12">
                    <a-form-model-item label="保养日期">
                      <a-input v-model="model.maintenanceDate" readOnly/>
                    </a-form-model-item>
                  </a-col>
                </a-row>
                <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%"/>
                </template>
              </j-vxe-table>
            </a-tab-pane>
            <a-tab-pane key='4' tab='精度检验' v-if="!isMaintenance">
              <j-vxe-table
                ref="editablePrecisionDetailTable"
                :rowNumber="true"
                :rowSelection="true"
                :bordered="true"
                :alwaysEdit="true"
                :toolbar="false"
                :toolbarConfig="precisionDetail.toolbarConfig"
                keep-source
                :height="300"
                :dataSource="precisionDetail.dataSource"
                :columns="precisionDetail.columns"
                style="margin-top: 8px;" >
                <template v-slot:actualValue="props">
                  <a-input-number v-model="props.row.actualValue" :disabled="disableSubmit || confirmDisable" style="width: 100%" />
                </template>
              </j-vxe-table>
            </a-tab-pane>
            <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-row>
                  <a-col :span="12">
                    <a-form-model-item label="保养人">
                      <a-input v-model="model.operator" readOnly/>
                    </a-form-model-item>
                  </a-col>
                  <a-col :span="12">
                    <a-form-model-item label="保养周期">
                      <a-input v-model="model.maintenancePeriod" readOnly/>
                    </a-form-model-item>
                  </a-col>
                </a-row>
                <a-row>
                  <a-col :span="24">
                    <a-form-model-item :labelCol="labelColLong" :wrapperCol="wrapperColLong" label="备注">
                      <a-textarea v-model="model.remark" readOnly/>
                    </a-form-model-item>
                  </a-col>
                </a-row>
              </a-tab-pane>
              <a-tab-pane key='3' tab='流程图'>
                <img :src="imageSrc" alt="Fetched Image"/>
            </a-tabs>
          </a-col>
          <a-col :span="10">
            <a-tabs v-model="activeTabKey">
              <a-tab-pane key="1" tab="保养项明细" v-if="!isPrecisionCheck">
                <j-vxe-table ref="editableDetailTable" :rowNumber="false" :rowSelection="true" :bordered="true"
                             :alwaysEdit="true" :toolbar="false" keep-source :height="300" :loading="detail.loading"
                             :dataSource="detail.dataSource" :columns="detail.columns"
                             @selectRowChange="handleTableSelectRowChange">
                  <template v-slot:maintenanceResult="props">
                    <j-dict-select-tag v-model="props.row.maintenanceResult" dictCode="eam_inspection_result"
                                       placeholder="请选择保养结果"
                                       :disabled="disableSubmit || confirmDisable"
                                       @change="handleInspectionResultSelectChange($event,props.row)"
                                       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'"/>
                  </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%"/>
                  </template>
                </j-vxe-table>
              </a-tab-pane>
            </template>
            <a-button v-if="!disableSubmit &&!confirmDisable&& selectedRowKeys.length > 0" slot="tabBarExtraContent"
                      type="primary" @click="handleSelectAllInspectionResult">保养正常
            </a-button>
          </a-tabs>
              <template v-if="selectShenpiData.procInstId">
                <a-tab-pane key='2' tab='流程图'>
                  <img :src="imageSrc" alt="Fetched Image"/>
                </a-tab-pane>
              </template>
              <a-button :disabled="disableSubmit ||confirmDisable||selectedRowKeys.length > 0" slot="tabBarExtraContent"
                        type="primary" @click="handleSelectAllInspectionResult">批量保养正常
              </a-button>
            </a-tabs>
          </a-col>
          <a-col :span="6">
            <a-tabs v-if="confirmDisable">
              <a-tab-pane tab="确认">
                <a-form-model-item :labelCol="labelColLong" :wrapperCol="wrapperColLong" prop="confirmComment"
                                   label="确认意见">
                  <a-textarea placeholder="请输入意见" v-model="model.confirmComment"
                              :disabled="disableSubmit || leaderConfirmDisable"/>
                </a-form-model-item>
              </a-tab-pane>
            </a-tabs>
            <a-tabs v-if="leaderConfirmDisable">
              <a-tab-pane tab="领导确认">
                <a-form-model-item :labelCol="labelColLong" :wrapperCol="wrapperColLong" prop="leaderConfirmComment"
                                   label="领导意见">
                  <a-textarea placeholder="请输入意见" v-model="model.leaderConfirmComment"
                              :disabled="disableSubmit || completionDisable"/>
                </a-form-model-item>
              </a-tab-pane>
            </a-tabs>
          </a-col>
        </a-row>
        <div v-if="confirmDisable">
          <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;"> 机动办确认信息
          </a-divider>
          <a-row :gutter="24">
            <a-col :span="24">
              <a-form-model-item :labelCol="labelColLong" :wrapperCol="wrapperColLong" prop="confirmComment" label="确认意见">
                <a-textarea placeholder="请输入意见" v-model="model.confirmComment"
                            :disabled="disableSubmit || leaderConfirmDisable"/>
              </a-form-model-item>
            </a-col>
          </a-row>
        </div>
        <div v-if="leaderConfirmDisable">
          <a-divider orientation="center" style="font-size: large;font-style: italic;color: #66aeed;"> 领导确认信息
          </a-divider>
          <a-row :gutter="24">
            <a-col :span="24">
              <a-form-model-item :labelCol="labelColLong" :wrapperCol="wrapperColLong" prop="leaderConfirmComment"
                                 label="领导意见">
                <a-textarea placeholder="请输入意见" v-model="model.leaderConfirmComment"
                            :disabled="disableSubmit || completionDisable"/>
              </a-form-model-item>
            </a-col>
          </a-row>
        </div>
      </a-form-model>
    </a-spin>
  </j-modal>
@@ -205,15 +147,7 @@
      return {
        title: '操作',
        visible: false,
        //状态控制
        //保养中 不可编辑
        // confirmDisable: false,
        // initialAcceptanceDisable: false,
        // finalAcceptanceDisable: false,
        editable: false,
        model: {},
        maintenanceCategory: 'SECOND_MAINTENANCE',
        maintenanceOperatorOptions: [],
        labelCol: {
          xs: { span: 24 },
          sm: { span: 6 }
@@ -224,11 +158,11 @@
        },
        labelColLong: {
          xs: { span: 24 },
          sm: { span: 2 }
          sm: { span: 3 }
        },
        wrapperColLong: {
          xs: { span: 24 },
          sm: { span: 21 }
          sm: { span: 20 }
        },
        confirmLoading: false,
        spinning: false,
@@ -240,24 +174,18 @@
          ],
          leaderConfirmComment: [
            { required: true, message: '请输入初验收意见!' }
          ],
          ]
        },
        url: {
          queryById: '/eam/thirdMaintenanceOrder/queryById',
          detail: '/eam/thirdMaintenanceOrderDetail/queryList',
          approval: '/eam/thirdMaintenanceOrder/approval',
          userSelect: '/eam/user_select/list',
          queryHisTaskList: '/assign/flow/queryHisTaskList',
          diagramView: '/assign/flow/diagramView',
          precisionCheckDetail: '/eam/precisionCheckDetail/queryList',
          diagramView: '/assign/flow/diagramView'
        },
        disableSubmit: false,
        taskData: [],
        isDisplayBmp: false,
        showBmpButtonLoading: false,
        selectedRowKeys: [],
        detail: {
          loading: false,
          dataSource: [],
          columns: [
            {
@@ -274,28 +202,31 @@
              title: '序号',
              key: 'itemCode',
              type: JVXETypes.normal,
              width: '5%',
              width: 60,
              align: 'center'
            },
            {
              title: '保养项',
              title: '保养部位',
              key: 'itemPart',
              type: JVXETypes.normal,
              align: 'center'
            },
            {
              title: '保养内容',
              key: 'itemName',
              type: JVXETypes.normal,
              width: '10%',
              align: 'center'
            },
            {
              title: '保养要求',
              title: '验收标准',
              key: 'itemDemand',
              type: JVXETypes.normal,
              width: '20%',
              align: 'center'
            },
            {
              title: '保养结果',
              key: 'maintenanceResult',
              type: JVXETypes.slot,
              width: '10%',
              align: 'center',
              slotName: 'maintenanceResult',
              validateRules: [
@@ -306,7 +237,6 @@
              title: '异常描述',
              key: 'exceptionDescription',
              type: JVXETypes.slot,
              width: '20%',
              align: 'center',
              slotName: 'exceptionDescription',
              validateRules: [
@@ -317,88 +247,15 @@
              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']
          }
        },
        precisionDetail: {
          loading: false,
          dataSource: [],
          columns: [
            {
              title: 'ID',
              key: 'id',
              type: JVXETypes.hidden
            },
            {
              title: 'orderId',
              key: 'orderId',
              type: JVXETypes.hidden
            },
            {
              title: 'equipmentId',
              key: 'equipmentId',
              type: JVXETypes.hidden
            },
            {
              title: 'parameterId',
              key: 'parameterId',
              type: JVXETypes.hidden
            },
            {
              title: '检测项目',
              key: 'parameterId_dictText',
              type: JVXETypes.normal,
              width: '25%',
              align: 'center'
            },
            {
              title: '参数编码',
              key: 'parameterCode_dictText',
              type: JVXETypes.normal,
              width: '20%',
              align: 'center',
            },
            {
              title: '允差值',
              key: 'parameterValue',
              type: JVXETypes.normal,
              width: '15%',
              align: 'center',
            },
            {
              title: '实测值',
              key: 'actualValue',
              type: JVXETypes.slot,
              width: '15%',
              align: 'center',
              slotName: 'actualValue',
              validateRules: [
                { required: true, message: '请输入实测值!' }
              ]
            }
          ],
          toolbarConfig: {
            // prefix 前缀;suffix 后缀
            slot: ['prefix', 'suffix'],
            // add 新增按钮;remove 删除按钮;clearSelection 清空选择按钮
            btn: ['add', 'remove', 'clearSelection']
          }
          ]
        }
      }
    },
    created() {
    },
    computed: {
      confirmDisable: function() {
@@ -411,25 +268,18 @@
        return ['COMPLETE', 'ABOLISH'].includes(this.model.maintenanceStatus)
      },
      isMaintenance: function() {
        return this.selectShenpiData && this.selectShenpiData.taskDefKey === 'maintenance_execution';
        return this.selectShenpiData && this.selectShenpiData.taskDefKey === 'maintenance_execution'
      },
      isPrecisionCheck: function() {
        return this.selectShenpiData && this.selectShenpiData.taskDefKey === 'precision_check';
      },
        return this.selectShenpiData && this.selectShenpiData.taskDefKey === 'precision_check'
      }
    },
    methods: {
      async handleDetail(item) {
        this.initParams()
        //重新计算defaultKey
        if(item && item.taskDefKey === 'precision_check') {
          this.activeTabKey = '4';
        }
        this.model = {}
        if (item.procInstId) {
          const { processDefinitionId, processInstanceId, processDefinitionKey, procInstId } = item
          let taskDataList = await getAction(this.url.queryHisTaskList, { procInstId })
          this.taskData = [...taskDataList.result]
          const { processDefinitionId, processInstanceId, processDefinitionKey } = item
          downFile(this.url.diagramView, {
            processDefinitionId,
@@ -449,66 +299,40 @@
        }
        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]
        }
        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)
        await this.loadPrecisionDetail(item.dataId);
      },
      recordDetail(record) {
        console.log('record', record)
        this.initParams()
        this.model = Object.assign({}, record)
        if (this.model.imageFiles) {
          let obj = JSON.parse(this.model.imageFiles)
          this.model.imageFilesResult = [...obj]
        }
        this.loadDetail(record.id)
        this.loadPrecisionDetail(record.id);
      },
      initParams() {
        this.detail.dataSource = []
        this.visible = true
        this.activeTabKey = '1';
        if(this.selectShenpiData &&  this.selectShenpiData.taskDefKey === 'precision_check') {
          this.activeTabKey = '4';
        }
        this.activeTabKey = '1'
        this.spinning = true
      },
      async handleOk() {
        const that = this
        if(that.$refs.editableDetailTable) {
          let errMap = await that.$refs.editableDetailTable.validateTable()
          if (errMap) {
            this.$message.warning('数据校验失败!')
            return
          }
        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 = [];
            let precisionTableData = [];
            if(that.$refs.editableDetailTable) {
              tableData = that.$refs.editableDetailTable.getTableData()
            }
            if(that.$refs.editablePrecisionDetailTable) {
              precisionTableData = that.$refs.editablePrecisionDetailTable.getTableData()
            }
            that.model.tableDetailList = [...tableData]
            that.model.precisionDetailList = [...precisionTableData]
            let httpurl = this.url.approval
            let method = 'put'
            that.model.tableDetailList = that.$refs.editableDetailTable.getTableData()
            httpAction(httpurl, this.model, method).then((res) => {
            httpAction(this.url.approval, this.model, 'put').then((res) => {
              if (res.success) {
                that.$message.success(res.message)
                that.$emit('searchReset')
@@ -524,21 +348,20 @@
          }
        })
      },
      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 })
          getAction(this.url.detail, { orderId })
            .then(res => {
              if (res.success) {
                this.detail.dataSource = [...res.result]
@@ -549,35 +372,11 @@
            })
        }
      },
      loadPrecisionDetail(orderId) {
        if (orderId) {
          getAction(this.url.precisionCheckDetail, { orderId: orderId }).then(res => {
            if (res.success) {
              this.precisionDetail.dataSource = [...res.result]
            }
          })
        }
      },
      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 => {
@@ -624,8 +423,4 @@
      }
    }
  }
</script>
<style lang="less" scoped>
</style>
</script>
src/views/system/UserList.vue
@@ -6,22 +6,27 @@
      <a-form layout="inline" @keyup.enter.native="searchQuery">
        <a-row :gutter="24">
          <a-col :md="6" :sm="12">
            <a-form-item label="账号">
              <!--<a-input placeholder="请输入账号查询" v-model="queryParam.username"></a-input>-->
              <j-input placeholder="输入账号模糊查询" v-model="queryParam.username"></j-input>
          <a-col :md="4" :sm="6">
            <a-form-item label="用户账号">
              <j-input placeholder="输入用户账号模糊查询" v-model="queryParam.username"/>
            </a-form-item>
          </a-col>
          <a-col :md="6" :sm="8">
            <a-form-item label="真实名字">
              <a-input placeholder="请输入真实名字" v-model="queryParam.realname"></a-input>
          <a-col :md="4" :sm="6">
            <a-form-item label="用户姓名">
              <a-input placeholder="请输入用户姓名" v-model="queryParam.realname"/>
            </a-form-item>
          </a-col>
          <a-col :md="6" :sm="8">
          <a-col :md="4" :sm="6">
            <a-form-item label="岗位">
              <j-dict-select-tag v-model="queryParam.post" placeholder="请选择岗位" dict-code="sys_position,name,code"/>
            </a-form-item>
          </a-col>
          <a-col :md="4" :sm="6">
            <a-form-item label="用户状态">
              <a-select v-model="queryParam.status" placeholder="请选择">
              <a-select v-model="queryParam.status" placeholder="请选择用户状态">
                <a-select-option value="">请选择</a-select-option>
                <a-select-option value="1">正常</a-select-option>
                <a-select-option value="2">冻结</a-select-option>
@@ -29,25 +34,26 @@
            </a-form-item>
          </a-col>
          <a-col :md="6" :sm="8">
          <a-col :md="4" :sm="6">
            <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
              <a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
              <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
            </span>
          </a-col>
        </a-row>
      </a-form>
    </div>
    <!-- 操作按钮区域 -->
    <div class="table-operator" style="border-top: 5px">
      <a-button @click="handleAdd" type="primary" icon="plus" >添加用户</a-button>
      <a-button @click="handleAdd" type="primary" icon="plus">添加用户</a-button>
      <a-button type="primary" icon="download" @click="handleExportXls('用户信息')">导出</a-button>
      <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
      <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl"
                @change="handleImportExcel">
        <a-button type="primary" icon="import">导入</a-button>
      </a-upload>
      <j-third-app-button biz-type="user" :selected-row-keys="selectedRowKeys" syncToApp syncToLocal @sync-finally="onSyncFinally"/>
      <j-third-app-button biz-type="user" :selected-row-keys="selectedRowKeys" syncToApp syncToLocal
                          @sync-finally="onSyncFinally"/>
      <a-button type="primary" icon="hdd" @click="recycleBinVisible=true">回收站</a-button>
      <a-dropdown v-if="selectedRowKeys.length > 0">
        <a-menu slot="overlay" @click="handleMenuClick">
@@ -75,7 +81,8 @@
    <!-- table区域-begin -->
    <div>
      <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
        <i class="anticon anticon-info-circle ant-alert-icon"></i>已选择&nbsp;<a style="font-weight: 600">{{ selectedRowKeys.length }}</a>项&nbsp;&nbsp;
        <i class="anticon anticon-info-circle ant-alert-icon"></i>已选择&nbsp;<a style="font-weight: 600">{{
        selectedRowKeys.length }}</a>项&nbsp;&nbsp;
        <a style="margin-left: 24px" @click="onClearSelected">清空</a>
      </div>
@@ -98,9 +105,9 @@
        </template>
        <span slot="action" slot-scope="text, record">
          <a @click="handleEdit(record)" >编辑</a>
          <a @click="handleEdit(record)">编辑</a>
          <a-divider type="vertical" />
          <a-divider type="vertical"/>
          <a-dropdown>
            <a class="ant-dropdown-link">
@@ -158,18 +165,18 @@
  import UserModal from './modules/UserModal'
  import PasswordModal from './modules/PasswordModal'
  import {putAction,getFileAccessHttpUrl} from '@/api/manage';
  import {frozenBatch} from '@/api/api'
  import {JeecgListMixin} from '@/mixins/JeecgListMixin'
  import SysUserAgentModal from "./modules/SysUserAgentModal";
  import { putAction, getFileAccessHttpUrl } from '@/api/manage'
  import { frozenBatch } from '@/api/api'
  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
  import SysUserAgentModal from './modules/SysUserAgentModal'
  import JInput from '@/components/jeecg/JInput'
  import UserRecycleBinModal from './modules/UserRecycleBinModal'
  import JSuperQuery from '@/components/jeecg/JSuperQuery'
  import JThirdAppButton from '@/components/jeecgbiz/thirdApp/JThirdAppButton'
  import {mapActions} from 'vuex'
  import { mapActions } from 'vuex'
  export default {
    name: "UserList",
    name: 'UserList',
    mixins: [JeecgListMixin],
    components: {
      JThirdAppButton,
@@ -188,47 +195,47 @@
        columns: [
          {
            title: '用户账号',
            align: "center",
            align: 'center',
            dataIndex: 'username',
            width: 120,
            sorter: true
          },
          {
            title: '用户姓名',
            align: "center",
            align: 'center',
            width: 100,
            dataIndex: 'realname',
            dataIndex: 'realname'
          },
          {
            title: '头像',
            align: "center",
            align: 'center',
            width: 80,
            dataIndex: 'avatar',
            scopedSlots: {customRender: "avatarslot"}
            scopedSlots: { customRender: 'avatarslot' }
          },
          {
            title: '部门',
            align: "center",
            align: 'center',
            width: 240,
            dataIndex: 'orgCodeTxt'
          },
          {
            title: '车间',
            align: "center",
            align: 'center',
            width: 240,
            dataIndex: 'productionName',
            ellipsis: true,
            ellipsis: true
          },
          {
            title: '维修部门',
            align: "center",
            align: 'center',
            width: 240,
            dataIndex: 'repairDepartName',
            ellipsis: true,
            ellipsis: true
          },
          {
            title: '状态',
            align: "center",
            align: 'center',
            width: 80,
            dataIndex: 'status_dictText'
          },
@@ -236,240 +243,238 @@
            title: '操作',
            dataIndex: 'action',
            scopedSlots: { customRender: 'action' },
            align: "center",
            align: 'center',
            width: 80
          },
          }
        ],
        isDepartType:'',
        isDepartType: '',
        superQueryFieldList: [
          { type: 'input', value: 'username', text: '用户账号', },
          { type: 'input', value: 'realname', text: '用户姓名', },
          { type: 'select', value: 'sex', dbType: 'int', text: '性别', dictCode: 'sex' },
          { type: 'input', value: 'username', text: '用户账号' },
          { type: 'input', value: 'realname', text: '用户姓名' },
          { type: 'select', value: 'sex', dbType: 'int', text: '性别', dictCode: 'sex' }
        ],
        url: {
          syncUser: "/act/process/extActProcess/doSyncUser",
          list: "/sys/user/list",
          delete: "/sys/user/delete",
          deleteBatch: "/sys/user/deleteBatch",
          exportXlsUrl: "/sys/user/exportXls",
          importExcelUrl: "sys/user/importExcel",
        },
          syncUser: '/act/process/extActProcess/doSyncUser',
          list: '/sys/user/list',
          delete: '/sys/user/delete',
          deleteBatch: '/sys/user/deleteBatch',
          exportXlsUrl: '/sys/user/exportXls',
          importExcelUrl: 'sys/user/importExcel'
        }
      }
    },
    computed: {
      importExcelUrl: function(){
        return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
      importExcelUrl: function() {
        return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`
      }
    },
      created() {
        this.queryTreeData()
      },
      methods: {
        ...mapActions(['QueryDepartTree']),
        queryTreeData() {
          this.QueryDepartTree().then(res => {
            if (res.success) {
              this.isDepartType = res.result[0].value
              if(this.isDepartType == -1){
                this.columns=[
                  {
                    title: '用户账号',
                    align: "center",
                    dataIndex: 'username',
                    width: 120,
                    sorter: true
                  },
                  {
                    title: '用户姓名',
                    align: "center",
                    width: 100,
                    dataIndex: 'realname',
                  },
                  {
                    title: '头像',
                    align: "center",
                    width: 80,
                    dataIndex: 'avatar',
                    scopedSlots: {customRender: "avatarslot"}
                  },
                  {
                    title: '车间',
                    align: "center",
                    width: 240,
                    dataIndex: 'productionName',
                    ellipsis: true,
                  },
                  {
                    title: '状态',
                    align: "center",
                    width: 80,
                    dataIndex: 'status_dictText'
                  },
                  {
                    title: '操作',
                    dataIndex: 'action',
                    scopedSlots: { customRender: 'action' },
                    align: "center",
                    width: 80
                  },
                ]
              }else{
                this.columns= [
                  {
    created() {
      this.queryTreeData()
    },
    methods: {
      ...mapActions(['QueryDepartTree']),
      queryTreeData() {
        this.QueryDepartTree().then(res => {
          if (res.success) {
            this.isDepartType = res.result[0].value
            if (this.isDepartType == -1) {
              this.columns = [
                {
                  title: '用户账号',
                  align: "center",
                  align: 'center',
                  dataIndex: 'username',
                  width: 120,
                  sorter: true
                },
                  {
                    title: '用户姓名',
                    align: "center",
                    width: 100,
                    dataIndex: 'realname',
                  },
                  {
                    title: '头像',
                    align: "center",
                    width: 80,
                    dataIndex: 'avatar',
                    scopedSlots: {customRender: "avatarslot"}
                  },
                  {
                    title: '部门',
                    align: "center",
                    width: 240,
                    dataIndex: 'orgCodeTxt'
                  },
                  {
                    title: '车间',
                    align: "center",
                    width: 240,
                    dataIndex: 'productionName',
                    ellipsis: true,
                  },
                  {
                    title: '班组',
                    align: "center",
                    width: 240,
                    dataIndex: 'teamId_dictText'
                  },
                  {
                    title: '状态',
                    align: "center",
                    width: 80,
                    dataIndex: 'status_dictText'
                  },
                  {
                    title: '操作',
                    dataIndex: 'action',
                    scopedSlots: { customRender: 'action' },
                    align: "center",
                    width: 80
                  }
                {
                  title: '用户姓名',
                  align: 'center',
                  width: 100,
                  dataIndex: 'realname'
                },
                {
                  title: '岗位',
                  align: 'center',
                  width: 80,
                  dataIndex: 'post_dictText'
                },
                {
                  title: '车间',
                  align: 'center',
                  width: 240,
                  dataIndex: 'productionName',
                  ellipsis: true
                },
                {
                  title: '状态',
                  align: 'center',
                  width: 80,
                  dataIndex: 'status_dictText'
                },
                {
                  title: '操作',
                  dataIndex: 'action',
                  scopedSlots: { customRender: 'action' },
                  align: 'center',
                  width: 80
                }
              ]
              }
            } else {
              this.$notification.warning({
                message:'消息',
                description:res.message
              });
              this.columns = [
                {
                  title: '用户账号',
                  align: 'center',
                  dataIndex: 'username',
                  width: 120,
                  sorter: true
                },
                {
                  title: '用户姓名',
                  align: 'center',
                  width: 100,
                  dataIndex: 'realname'
                },
                {
                  title: '岗位',
                  align: 'center',
                  width: 80,
                  dataIndex: 'post_dictText'
                },
                {
                  title: '部门',
                  align: 'center',
                  width: 240,
                  dataIndex: 'orgCodeTxt'
                },
                {
                  title: '车间',
                  align: 'center',
                  width: 240,
                  dataIndex: 'productionName',
                  ellipsis: true
                },
                {
                  title: '班组',
                  align: 'center',
                  width: 240,
                  dataIndex: 'teamId_dictText'
                },
                {
                  title: '状态',
                  align: 'center',
                  width: 80,
                  dataIndex: 'status_dictText'
                },
                {
                  title: '操作',
                  dataIndex: 'action',
                  scopedSlots: { customRender: 'action' },
                  align: 'center',
                  width: 80
                }
              ]
            }
          }).finally(() =>{
          })
        },
      getAvatarView: function (avatar) {
          } else {
            this.$notification.warning({
              message: '消息',
              description: res.message
            })
          }
        }).finally(() => {
        })
      },
      getAvatarView: function(avatar) {
        return getFileAccessHttpUrl(avatar)
      },
      batchFrozen: function (status) {
      batchFrozen: function(status) {
        if (this.selectedRowKeys.length <= 0) {
          // this.$message.warning('请选择一条记录!');
          this.$notification.warning({
            message:'消息',
            description:"请选择一条记录"
          });
          return false;
            message: '消息',
            description: '请选择一条记录'
          })
          return false
        } else {
          let ids = "";
          let that = this;
          let isAdmin = false;
          that.selectionRows.forEach(function (row) {
          let ids = ''
          let that = this
          let isAdmin = false
          that.selectionRows.forEach(function(row) {
            if (row.username == 'admin') {
              isAdmin = true;
              isAdmin = true
            }
          });
          })
          if (isAdmin) {
            that.$message.warning('管理员账号不允许此操作,请重新选择!');
            return;
            that.$message.warning('管理员账号不允许此操作,请重新选择!')
            return
          }
          that.selectedRowKeys.forEach(function (val) {
            ids += val + ",";
          });
          that.selectedRowKeys.forEach(function(val) {
            ids += val + ','
          })
          that.$confirm({
            title: "确认操作",
            content: "是否" + (status == 1 ? "解冻" : "冻结") + "选中账号?",
            onOk: function () {
              frozenBatch({ids: ids, status: status}).then((res) => {
            title: '确认操作',
            content: '是否' + (status == 1 ? '解冻' : '冻结') + '选中账号?',
            onOk: function() {
              frozenBatch({ ids: ids, status: status }).then((res) => {
                if (res.success) {
                  that.$message.success(res.message);
                  that.loadData();
                  that.onClearSelected();
                  that.$message.success(res.message)
                  that.loadData()
                  that.onClearSelected()
                } else {
                  that.$message.warning(res.message);
                  that.$message.warning(res.message)
                }
              });
              })
            }
          });
          })
        }
      },
      handleMenuClick(e) {
        if (e.key == 1) {
          this.batchDel();
          this.batchDel()
        } else if (e.key == 2) {
          this.batchFrozen(2);
          this.batchFrozen(2)
        } else if (e.key == 3) {
          this.batchFrozen(1);
          this.batchFrozen(1)
        }
      },
      handleFrozen: function (id, status, username) {
        let that = this;
      handleFrozen: function(id, status, username) {
        let that = this
        //TODO 后台校验管理员角色
        if ('admin' == username) {
          that.$message.warning('管理员账号不允许此操作!');
          return;
          that.$message.warning('管理员账号不允许此操作!')
          return
        }
        frozenBatch({ids: id, status: status}).then((res) => {
        frozenBatch({ ids: id, status: status }).then((res) => {
          if (res.success) {
            that.$notification.success({
              message:'消息',
              description:res.message
            });
            that.loadData();
              message: '消息',
              description: res.message
            })
            that.loadData()
          } else {
            that.$notification.warning({
              message:'消息',
              description:res.message
            });
              message: '消息',
              description: res.message
            })
          }
        });
        })
      },
      handleChangePassword(username) {
        this.$refs.passwordmodal.show(username);
        this.$refs.passwordmodal.show(username)
      },
      passwordModalOk() {
        //TODO 密码修改完成 不需要刷新页面,可以把datasource中的数据更新一下
      },
      onSyncFinally({isToLocal}) {
      onSyncFinally({ isToLocal }) {
        // 同步到本地时刷新下数据
        if (isToLocal) {
          this.loadData()
        }
      },
      }
    }
  }