lyh
2025-04-09 53c269711fcb59f48fd2acd7e825bebfd31d09e5
点检工单修改,修改指派设备问题
已添加4个文件
已修改10个文件
2095 ■■■■■ 文件已修改
src/views/eam/equipment/modules/MaintenanceEquipmentSelect.vue 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/eam/maintenance/EamInspectionOrderList.vue 180 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/eam/maintenance/modules/EamInspectionOrderModal.vue 89 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/eam/maintenance/modules/EamInspectionOrderModalXq.vue 343 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/flowable/workflow/FlowCompleted.vue 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/flowable/workflow/FlowLedger.vue 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/flowable/workflow/FlowTodo.vue 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/flowable/workflow/InspectionOrder/InspectionOrderHandle.vue 446 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/flowable/workflow/InspectionOrder/InspectionOrderHandleBzz.vue 468 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/flowable/workflow/InspectionOrder/InspectionOrderXq.vue 443 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/flowable/workflow/assignFileStream/AssignFileStreamHandle.vue 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/flowable/workflow/assignFileStream/AssignFileStreamXq.vue 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/flowable/workflow/dispatchFile/DispatchFileHandle.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/flowable/workflow/dispatchFile/DispatchFileXq.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/eam/equipment/modules/MaintenanceEquipmentSelect.vue
@@ -79,9 +79,7 @@
  },
  methods: {
    initSelectValue() {
      if (!this.selectedAsyncValue || !this.selectedAsyncValue.key || this.selectedAsyncValue.key != this.value) {
        console.log('ssfs', this.selectedAsyncValue)
        console.log('ASGasgsgas', this.maintenanceCategory)
      if (!this.selectedAsyncValue || !this.selectedAsyncValue.key || this.selectedAsyncValue.key != this.value || !this.maintenanceCategory) {
        console.log('这才请求后台')
        getAction(`/eam/maintenanceStandard/listByUser`, {
          id: this.value,
src/views/eam/maintenance/EamInspectionOrderList.vue
@@ -44,13 +44,10 @@
    <!-- æ“ä½œæŒ‰é’®åŒºåŸŸ -->
    <div class="table-operator">
      <a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
<!--      <a-button type="primary" icon="download" @click="handleExportXls('eam_inspection_order')">导出</a-button>-->
<!--      <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">-->
<!--        <a-button type="primary" icon="import">导入</a-button>-->
<!--      </a-upload>-->
      <a-dropdown v-if="selectedRowKeys.length > 0">
        <a-menu slot="overlay">
          <a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>删除</a-menu-item>
          <a-menu-item key="1" @click="batchZf(5)"><a-icon type="snippets"/>作废</a-menu-item>
          <a-menu-item key="2" @click="batchLq(2)"><a-icon type="form"/>领取</a-menu-item>
        </a-menu>
        <a-button style="margin-left: 8px"> æ‰¹é‡æ“ä½œ <a-icon type="down" /></a-button>
      </a-dropdown>
@@ -98,18 +95,25 @@
        </template>
        <span slot="action" slot-scope="text, record">
          <a @click="handleEdit(record)">编辑</a>
          <a v-if="record.inspectionStatus === '1'" @click="handleEdit(record)">编辑</a>
          <a-divider type="vertical" />
          <a-divider v-if="record.inspectionStatus === '1'" type="vertical" />
          <a-popconfirm v-if="record.inspectionStatus === '1'" title="确定领取吗?" @confirm="() => handleInspection(record.id)">
                  <a>领取</a>
          </a-popconfirm>
          <a-divider v-if="record.inspectionStatus === '1'" type="vertical" />
          <a-dropdown>
            <a class="ant-dropdown-link">更多 <a-icon type="down" /></a>
            <a-menu slot="overlay">
              <a-menu-item>
                <a @click="handleDetail(record)">详情</a>
              </a-menu-item>
              <a-menu-item>
                <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
                  <a>删除</a>
              <a-menu-item  v-if="record.inspectionStatus === '1'" >
                <a-popconfirm title="确定作废吗?" @confirm="() => handleDelete(record.id)">
                  <a>作废</a>
                </a-popconfirm>
              </a-menu-item>
            </a-menu>
@@ -120,6 +124,7 @@
    </div>
    <eam-inspection-order-modal ref="modalForm" @ok="modalFormOk"></eam-inspection-order-modal>
    <EamInspectionOrderModalXq ref="modalFormXq" @ok="modalFormOk"></EamInspectionOrderModalXq>
  </a-card>
</template>
@@ -129,12 +134,15 @@
  import { mixinDevice } from '@/utils/mixin'
  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
  import EamInspectionOrderModal from './modules/EamInspectionOrderModal'
  import EamInspectionOrderModalXq from './modules/EamInspectionOrderModalXq.vue'
  import { deleteAction, getAction } from '@api/manage'
  export default {
    name: 'EamInspectionOrderList',
    mixins:[JeecgListMixin, mixinDevice],
    components: {
      EamInspectionOrderModal
      EamInspectionOrderModal,
      EamInspectionOrderModalXq
    },
    data () {
      return {
@@ -159,12 +167,12 @@
          {
            title:'设备编号',
            align:"center",
            dataIndex: 'equipmentId'
            dataIndex: 'equipmentId_dictText'
          },
          {
            title:'标准编码',
            align:"center",
            dataIndex: 'standardId'
            dataIndex: 'standardId_dictText'
          },
          {
            title:'点检日期',
@@ -173,19 +181,6 @@
            customRender:function (text) {
              return !text?"":(text.length>10?text.substr(0,10):text)
            }
          },
          {
            title:'点检时间',
            align:"center",
            dataIndex: 'operateTime',
            customRender:function (text) {
              return !text?"":(text.length>10?text.substr(0,10):text)
            }
          },
          {
            title:'点检人',
            align:"center",
            dataIndex: 'operator'
          },
          {
            title:'点检过期时间',
@@ -198,12 +193,25 @@
          {
            title:'创建方式',
            align:"center",
            dataIndex: 'creationMethod'
            dataIndex: 'creationMethod_dictText'
          },
          {
            title:'点检状态',
            align:"center",
            dataIndex: 'inspectionStatus_dictText'
          },
          {
            title:'点检时间',
            align:"center",
            dataIndex: 'operateTime',
            customRender:function (text) {
              return !text?"":(text.length>10?text.substr(0,10):text)
            }
          },
          {
            title:'点检人',
            align:"center",
            dataIndex: 'operator_dictText'
          },
          {
            title:'班组长确认',
@@ -219,11 +227,6 @@
            }
          },
          {
            title:'备注',
            align:"center",
            dataIndex: 'remark'
          },
          {
            title: '操作',
            dataIndex: 'action',
            align:"center",
@@ -234,11 +237,12 @@
        ],
        url: {
          list: "/eam/eamInspectionOrder/list",
          delete: "/eam/eamInspectionOrder/delete",
          delete: "/eam/eamInspectionOrder/cancelInspectionOrder",
          deleteBatch: "/eam/eamInspectionOrder/deleteBatch",
          exportXlsUrl: "/eam/eamInspectionOrder/exportXls",
          importExcelUrl: "eam/eamInspectionOrder/importExcel",
          receiveInspectionOrder : "eam/eamInspectionOrder/receiveInspectionOrder",
          cancelOrReceive: "eam/eamInspectionOrder/cancelOrReceive"
        },
        dictOptions:{},
        superFieldList:[],
@@ -271,7 +275,113 @@
        fieldList.push({type:'string',value:'remark',text:'备注',dictCode:''})
        fieldList.push({type:'string',value:'imageFiles',text:'照片文件ids;id以逗号分隔',dictCode:''})
        this.superFieldList = fieldList
      }
      },
      //详情
      handleDetail: function(record) {
        this.$refs.modalFormXq.edit(record);
        this.$refs.modalFormXq.title = "详情";
        this.$refs.modalFormXq.disableSubmit = true;
      },
      handleInspection(id) {
        if (!this.url.receiveInspectionOrder) {
          this.$message.error("请设置url.receiveInspectionOrder!")
          return
        }
        var that = this;
        getAction(that.url.receiveInspectionOrder, { id: id }).then((res) => {
          if (res.success) {
            that.$notification.success({
              message: '消息',
              description: res.message
            });
            that.loadData();
          } else {
            // that.$message.warning(res.message);
            that.$notification.warning({
              message: '消息',
              description: res.message
            });
          }
        });
      },
      batchZf(type){
        if (this.selectedRowKeys.length <= 0) {
          this.$notification.warning({
            message:'消息',
            description:"请选择一条记录"
          });
        } else {
          var ids = "";
          for (var a = 0; a < this.selectedRowKeys.length; a++) {
            ids += this.selectedRowKeys[a] + ",";
          }
          var that = this;
          this.$confirm({
            title: "确认作废",
            content: "是否作废选中数据,只有待点检状态的数据才可作废成功?",
            onOk: function () {
              that.loading = true;
              getAction(that.url.cancelOrReceive, {ids: ids,type:type}).then((res) => {
                if (res.success) {
                  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;
              });
            }
          });
        }
      },
      batchLq(type){
        if (this.selectedRowKeys.length <= 0) {
          this.$notification.warning({
            message:'消息',
            description:"请选择一条记录"
          });
        } else {
          var ids = "";
          for (var a = 0; a < this.selectedRowKeys.length; a++) {
            ids += this.selectedRowKeys[a] + ",";
          }
          var that = this;
          this.$confirm({
            title: "确认领取",
            content: "是否领取选中数据,只有待点检状态的数据才可领取成功?",
            onOk: function () {
              that.loading = true;
              getAction(that.url.cancelOrReceive, {ids: ids,type:type}).then((res) => {
                if (res.success) {
                  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;
              });
            }
          });
        }
      },
    }
  }
</script>
src/views/eam/maintenance/modules/EamInspectionOrderModal.vue
@@ -13,8 +13,8 @@
      <a-form-model ref="form" :model="model" :rules="validatorRules">
        <a-row :gutter="24">
          <a-col :span="8">
            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="standardCode" label="标准编码">
              <a-input placeholder="编码系统自动生成" v-model="model.standardCode" disabled />
            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="standardCode" label="工单号">
              <a-input placeholder="工单号自动生成" v-model="model.orderNum" disabled />
            </a-form-model-item>
          </a-col>
          <a-col :span="8">
@@ -32,13 +32,26 @@
        </a-row>
        <a-row :gutter="24">
          <a-col :span="8">
            <a-form-model-item label="点检日期" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="inspectionDate">
              <j-date placeholder="请选择点检日期" v-model="model.inspectionDate" style="width: 100%" />
            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="standardCode" label="标准编码">
              <a-input placeholder="请输入标准编码" disabled v-model="model.standardCode" />
            </a-form-model-item>
          </a-col>
          <a-col :span="8">
            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="maintenancePeriod" label="保养周期">
              <a-input-number v-model="model.maintenancePeriod" :min="1" :precision="0" 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-dict-select-tag v-model="model.operator" placeholder="请选择用户" dictCode="sys_user,realname,username,username!='admin' order by create_time"/>
            </a-form-model-item>
          </a-col>
        </a-row>
        <a-row :gutter="24">
          <a-col :span="8">
            <a-form-model-item label="点检日期" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="inspectionDate">
              <j-date placeholder="请选择点检日期" v-model="model.inspectionDate" @change="expirationTimeFrom(model.inspectionDate)" style="width: 100%" />
            </a-form-model-item>
          </a-col>
          <a-col :span="8">
@@ -58,10 +71,10 @@
          <j-vxe-table
            ref="editableDetailTable"
            :rowNumber="true"
            :rowSelection="false"
            :rowSelection="true"
            :bordered="true"
            :alwaysEdit="true"
            :toolbar="false"
            :toolbar="true"
            keep-source
            :height="300"
            :loading="detail.loading"
@@ -79,6 +92,7 @@
import { JVxeTableModelMixin } from '@/mixins/JVxeTableModelMixin.js'
import { JVXETypes } from '@/components/jeecg/JVxeTable'
import MaintenanceEquipmentSelect from '@views/eam/equipment/modules/MaintenanceEquipmentSelect'
import moment from 'dayjs'
export default {
  name: 'EamMaintenanceStandardModal',
@@ -116,14 +130,16 @@
        ],
        equipmentId: [
          { required: true, message: '请选择设备!' }
        ]
        ],
      },
      url: {
        add: '/eam/maintenanceStandard/add',
        edit: '/eam/maintenanceStandard/edit',
        detail: '/eam/eamMaintenanceStandardDetail/queryList'
        add: '/eam/eamInspectionOrder/add',
        edit: '/eam/eamInspectionOrder/edit',
        detail: '/eam/eamMaintenanceStandardDetail/queryList',
        detailOrder: '/eam/eamInspectionOrderDetail/queryList'
      },
      maintenanceCategory: 'POINT_INSPECTION',
      standardId:"",
      detail: {
        loading: false,
        dataSource: [],
@@ -131,21 +147,33 @@
          {
            title: '序号',
            key: 'itemCode',
            type: JVXETypes.inputNumber,
            width: '10%',
            align: 'center'
            align:"center",
            validateRules: [
              {required : true, unique: true, message: '序号不能重复'}
            ]
          },
          {
            title: '保养项',
            key: 'itemName',
            type: JVXETypes.textarea,
            width: '20%',
            align: 'center'
            align:"center",
            validateRules: [
              {required : true, message: '保养项不能为空!'}
            ]
          },
          {
            title: '保养要求',
            key: 'itemDemand',
            type: JVXETypes.textarea,
            width: '30%',
            align: 'center'
          }
            align:"center",
            validateRules: [
              {required : true, message: "保养要求不能为空!"}
            ]
          },
        ]
      }
    }
@@ -155,11 +183,14 @@
  methods: {
    add() {
      this.model = {}
      this.detail.dataSource = [];
      this.visible = true
      this.editable = false
    },
    edit(record) {
      console.log(record)
      this.model = Object.assign({}, record)
      this.standardId=record.standardId
      this.visible = true
      this.editable = true
      if (record && record.referenceFile) {
@@ -168,7 +199,7 @@
      } else {
        this.model.fieldList = []
      }
      this.loadDetail(record.id)
      this.loadDetailOrder(record.id)
    },
    close() {
      this.$emit('close')
@@ -200,6 +231,7 @@
            httpurl += this.url.edit
            method = 'put'
          }
          this.model.standardId=this.standardId
          httpAction(httpurl, this.model, method).then((res) => {
            if (res.success) {
              that.$message.success(res.message)
@@ -222,6 +254,22 @@
    autocompleteForm(selectObj) {
      this.model.standardName = selectObj.standardName
      this.model.maintenancePeriod=selectObj.maintenancePeriod
      this.model.standardCode=selectObj.standardCode
      if (this.standardId===undefined || this.standardId==="") {
        this.standardId=selectObj.id
        this.loadDetail(selectObj.id)
      }
    },
    expirationTimeFrom(date) {
      //过期时间是初始时间+保养周期
      if (date && this.model.maintenancePeriod) {
        // è½¬æ¢ä¸ºæ—¶é—´æˆ³å­—符串(或指定格式)
        this.model.expirationTime = moment(date)
          .add(this.model.maintenancePeriod, 'days')
          .format('YYYY-MM-DD')
      } else {
        this.model.expirationTime = null; // æ¸…空无效值
      }
    },
    //加载详情数据
    loadDetail(standardId) {
@@ -233,8 +281,17 @@
          }
        })
      }
    },
    loadDetailOrder(orderId){
      this.detail.dataSource = []
      if (orderId) {
        getAction(this.url.detailOrder, { orderId: orderId }).then(res => {
          if (res.success) {
            this.detail.dataSource = [...res.result]
          }
        })
      }
    }
  }
}
</script>
src/views/eam/maintenance/modules/EamInspectionOrderModalXq.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,343 @@
<template>
  <j-modal
    :title="title"
    :width="1200"
    :visible="visible"
    :confirmLoading="false"
    :okButtonProps="{ class:{'jee-hidden': disableSubmit} }"
    switchFullscreen
    @ok="handleOk"
    @cancel="handleCancel"
    cancelText="关闭">
    <a-spin :spinning="false">
      <a-form-model ref="form" :model="model" :rules="validatorRules">
        <a-row :gutter="24">
          <a-col :span="8">
            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="standardCode" 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="设备编号">
              <MaintenanceEquipmentSelect placeholder="请输入设备编号或名称搜索" v-model="model.equipmentId"
                                          :maintenanceCategory="maintenanceCategory" :disabled="editable"
                                          @autocompleteForm="autocompleteForm"></MaintenanceEquipmentSelect>
            </a-form-model-item>
          </a-col>
          <a-col :span="8">
            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="standardName" label="标准名称">
              <a-input placeholder="请输入标准名称" disabled v-model="model.standardName" />
            </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="standardCode" label="标准编码">
              <a-input placeholder="请输入标准编码" disabled v-model="model.standardCode" />
            </a-form-model-item>
          </a-col>
          <a-col :span="8">
            <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="maintenancePeriod" label="保养周期">
              <a-input-number v-model="model.maintenancePeriod" :min="1" :precision="0" 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-dict-select-tag v-model="model.operator" placeholder="请选择用户" disabled dictCode="sys_user,realname,username,username!='admin' order by create_time"/>
            </a-form-model-item>
          </a-col>
        </a-row>
        <a-row :gutter="24">
          <a-col :span="8">
            <a-form-model-item label="点检日期" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="inspectionDate">
              <j-date placeholder="请选择点检日期" v-model="model.inspectionDate" disabled @change="expirationTimeFrom(model.inspectionDate)" style="width: 100%" />
            </a-form-model-item>
          </a-col>
          <a-col :span="8">
            <a-form-model-item label="点检过期时间" :labelCol="{span:6}" :wrapperCol="{span:15}" prop="expirationTime">
              <j-date placeholder="请选择点检过期时间" v-model="model.expirationTime" disabled style="width: 100%" />
            </a-form-model-item>
          </a-col>
          <a-col :span="8" v-if="model.inspectionStatus === '3' || model.inspectionStatus === '4'">
            <a-form-model-item label="点检时间" :labelCol="{span:6}" :wrapperCol="{span:15}" prop="operateTime">
              <j-date placeholder="请选择点检时间" v-model="model.operateTime" disabled style="width: 100%" />
            </a-form-model-item>
          </a-col>
        </a-row>
        <a-row :gutter="24">
          <a-col :span="8">
            <a-form-model-item label="点检状态" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="inspectionStatus">
              <j-dict-select-tag v-model="model.inspectionStatus" placeholder="请选择点检状态" disabled dictCode="inspection_status"/>
            </a-form-model-item>
          </a-col>
          <a-col :span="8" v-if="model.inspectionStatus === '4'">
            <a-form-model-item label="班组长确认" :labelCol="{span:6}" :wrapperCol="{span:15}" prop="confirmUser">
              <j-dict-select-tag v-model="model.confirmUser" placeholder="请选择用户" disabled dictCode="sys_user,realname,username,username!='admin' order by create_time"/>
            </a-form-model-item>
          </a-col>
          <a-col :span="8" v-if="model.inspectionStatus === '4'">
            <a-form-model-item label="确认时间" :labelCol="{span:6}" :wrapperCol="{span:15}" prop="confirmTime">
              <j-date placeholder="请选择确认时间" v-model="model.confirmTime" disabled style="width: 100%" />
            </a-form-model-item>
          </a-col>
        </a-row>
        <a-row :gutter="24">
          <a-col :span="24">
            <a-form-model-item label="备注" :labelCol="{span:1}" :wrapperCol="{span:22}" prop="remark">
              <a-textarea v-model="model.remark" rows="3" placeholder="请输入备注" disabled/>
            </a-form-model-item>
          </a-col>
        </a-row>
        <a-row :gutter="24">
          <j-vxe-table
            ref="editableDetailTable"
            :rowNumber="false"
            :rowSelection="false"
            :bordered="true"
            :alwaysEdit="true"
            :toolbar="false"
            :disabled="true"
            keep-source
            :height="300"
            :loading="detail.loading"
            :dataSource="detail.dataSource"
            :columns="detail.columns"
            style="margin-top: 8px;" />
        </a-row>
      </a-form-model>
    </a-spin>
  </j-modal>
</template>
<script>
import { getAction, httpAction } from '@/api/manage'
import { JVxeTableModelMixin } from '@/mixins/JVxeTableModelMixin.js'
import { JVXETypes } from '@/components/jeecg/JVxeTable'
import MaintenanceEquipmentSelect from '@views/eam/equipment/modules/MaintenanceEquipmentSelect'
import moment from 'dayjs'
export default {
  name: 'EamMaintenanceStandardModal',
  mixins: [JVxeTableModelMixin],
  components: {
    MaintenanceEquipmentSelect
  },
  data() {
    return {
      title: '操作',
      visible: false,
      model: {},
      editable: false,
      labelCol: {
        xs: { span: 24 },
        sm: { span: 5 }
      },
      wrapperCol: {
        xs: { span: 24 },
        sm: { span: 16 }
      },
      confirmLoading: false,
      validatorRules: {
        standardName: [
          { required: true, message: '请输入标准名称!' }
        ],
        maintenanceCategory: [
          { required: true, message: '请选择保养分类!' }
        ],
        initialDate: [
          { required: true, message: '请选择初始日期!' }
        ],
        maintenancePeriod: [
          { required: true, message: '请输入保养周期,单位:天!' }
        ],
        equipmentId: [
          { required: true, message: '请选择设备!' }
        ],
        operator: [
          { required: true, message: '请选择点检人!' }
        ]
      },
      url: {
        add: '/eam/eamInspectionOrder/add',
        edit: '/eam/eamInspectionOrder/edit',
        detail: '/eam/eamMaintenanceStandardDetail/queryList',
        detailOrder: '/eam/eamInspectionOrderDetail/queryList'
      },
      maintenanceCategory: 'POINT_INSPECTION',
      standardId:"",
      detail: {
        loading: false,
        dataSource: [],
        columns: [
          {
            title: '序号',
            key: 'itemCode',
            type: JVXETypes.normal,
            width: '10%',
            align:"center",
          },
          {
            title: '保养项',
            key: 'itemName',
            type: JVXETypes.normal,
            width: '20%',
            align:"center",
          },
          {
            title: '保养要求',
            key: 'itemDemand',
            type: JVXETypes.normal,
            width: '30%',
            align:"center",
          },
          {
            title: "点检结果"
            ,key: 'inspectionResult'
            ,type: JVXETypes.selectSearch
            ,dictCode:'eam_inspection_result'
            ,width: '20%'
            ,align:"center"
          },
          {
            title: '异常描述',
            key: 'exceptionDescription',
            type: JVXETypes.normal,
            width: '30%',
            align:"center",
          },
          {
            title: '异常是否报修',
            key: 'selectSearch',
            type: JVXETypes.selectSearch,
            dictCode:'yn',
            width: '20%',
            align:"center",
          }
        ]
      }
    }
  },
  created() {
  },
  methods: {
    add() {
      this.model = {}
      this.detail.dataSource = [];
      this.visible = true
      this.editable = false
    },
    edit(record) {
      this.model = Object.assign({}, record)
      this.standardId=record.standardId
      this.visible = true
      this.editable = true
      if (record && record.referenceFile) {
        let obj = JSON.parse(record.referenceFile)
        this.model.fileList = [obj]
      } else {
        this.model.fieldList = []
      }
      this.loadDetailOrder(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]
          that.confirmLoading = false
          let httpurl = ''
          let method = ''
          if (!this.model.id) {
            httpurl += this.url.add
            method = 'post'
          } else {
            httpurl += this.url.edit
            method = 'put'
          }
          this.model.standardId=this.standardId
          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) {
      this.model.standardName = selectObj.standardName
      this.model.maintenancePeriod=selectObj.maintenancePeriod
      this.model.standardCode=selectObj.standardCode
      if (this.standardId===undefined || this.standardId==="") {
        this.standardId=selectObj.id
        this.loadDetail(selectObj.id)
      }
    },
    expirationTimeFrom(date) {
      //过期时间是初始时间+保养周期
      if (date && this.model.maintenancePeriod) {
        // è½¬æ¢ä¸ºæ—¶é—´æˆ³å­—符串(或指定格式)
        this.model.expirationTime = moment(date)
          .add(this.model.maintenancePeriod, 'days')
          .format('YYYY-MM-DD')
      } else {
        this.model.expirationTime = null; // æ¸…空无效值
      }
    },
    //加载详情数据
    loadDetail(standardId) {
      this.detail.dataSource = []
      if (standardId) {
        getAction(this.url.detail, { standardId: standardId }).then(res => {
          if (res.success) {
            this.detail.dataSource = [...res.result]
          }
        })
      }
    },
    loadDetailOrder(orderId){
      this.detail.dataSource = []
      if (orderId) {
        getAction(this.url.detailOrder, { orderId: orderId }).then(res => {
          if (res.success) {
            this.detail.dataSource = [...res.result]
          }
        })
      }
    }
  }
}
</script>
<style lang="less" scoped>
</style>
src/views/flowable/workflow/FlowCompleted.vue
@@ -79,6 +79,8 @@
    <DispatchFileXq ref="modalFormDispatchFileXq"  :selectShenpiData="selectDispatchFileXqData"></DispatchFileXq>
    <InspectionOrderXq ref="modalFormInspectionOrderXq"  :selectShenpiData="selectInspectionOrderXqData"></InspectionOrderXq>
  </a-card>
</template>
@@ -90,11 +92,13 @@
import JDictSelectTag from '@/components/dict/JDictSelectTag.vue'
import AssignFileStreamXq from '@views/flowable/workflow/assignFileStream/AssignFileStreamXq.vue'
import DispatchFileXq from '@views/flowable/workflow/dispatchFile/DispatchFileXq.vue'
import InspectionOrderXq from '@views/flowable/workflow/InspectionOrder/InspectionOrderXq.vue'
export default {
  name: 'NcDeviceCharactersList',
  mixins:[JeecgListMixin, mixinDevice],
  components: {
    InspectionOrderXq,
    DispatchFileXq,
    AssignFileStreamXq: AssignFileStreamXq,
    JDictSelectTag,
@@ -147,7 +151,7 @@
        {
          title: '操作时间',
          align: "center",
          dataIndex: 'createTime',
          dataIndex: 'finishTime',
          width:300
        },
        {
@@ -164,7 +168,8 @@
      },
      dictOptions:{},
      selectShenpiData: {},
      selectDispatchFileXqData:{}
      selectDispatchFileXqData:{},
      selectInspectionOrderXqData:{}
    }
  },
  created() {
@@ -179,17 +184,20 @@
      console.log('点击了详情')
      console.log('item----->', item)
      console.log('index----->', index)
      let approcesstype = this.splitAprocessType(item.category_dictText)
      let approcesstype = this.splitAprocessType(item.category)
      console.log('approcesstype--->', approcesstype)
      switch (approcesstype) {
        case '指派NC文档到设备流程':
        case 'drApproval':
          this.handDrDetial(item)
          break
        case 'NC程序签派':
        case 'ggApproval':
          this.handDispatchFileDetial(item)
          break
        case 'sbdjApproval':
          this.handInspectionOrder(item)
          break
        default:
          alert('没找到该审批')
          alert('没找到该流程')
      }
    },
    splitAprocessType(title) {
@@ -211,6 +219,16 @@
      this.selectDispatchFileXqData.title=item.description
      this.$refs.modalFormDispatchFileXq.clearTableSource()
      this.$refs.modalFormDispatchFileXq.getAllApproveData(item)
    },
    handInspectionOrder(item) {
      console.log('item----->', item)
      this.selectInspectionOrderXqData = item
      this.selectInspectionOrderXqData.assignee_dictText=item.todoUsers_dictText
      this.selectInspectionOrderXqData.procInstId=item.procInsId
      this.selectInspectionOrderXqData.processInstanceId=item.procInsId
      this.selectInspectionOrderXqData.title=item.description
      this.$refs.modalFormInspectionOrderXq.clearTableSource()
      this.$refs.modalFormInspectionOrderXq.getAllApproveData(item)
    }
  }
}
src/views/flowable/workflow/FlowLedger.vue
@@ -90,6 +90,8 @@
    <AssignFileStreamXq ref="modalFormApproval" :selectShenpiData="selectShenpiData"></AssignFileStreamXq>
    <DispatchFileXq ref="modalFormDispatchFileXq"  :selectShenpiData="selectDispatchFileXqData"></DispatchFileXq>
    <InspectionOrderXq ref="modalFormInspectionOrderXq"  :selectShenpiData="selectInspectionOrderXqData"></InspectionOrderXq>
  </a-card>
</template>
@@ -101,6 +103,7 @@
import JDictSelectTag from '@/components/dict/JDictSelectTag.vue'
import AssignFileStreamXq from '@views/flowable/workflow/assignFileStream/AssignFileStreamXq.vue'
import DispatchFileXq from '@views/flowable/workflow/dispatchFile/DispatchFileXq.vue'
import InspectionOrderXq from '@views/flowable/workflow/InspectionOrder/InspectionOrderXq.vue'
export default {
  name: 'NcDeviceCharactersList',
@@ -109,6 +112,7 @@
    DispatchFileXq,
    AssignFileStreamXq: AssignFileStreamXq,
    JDictSelectTag,
    InspectionOrderXq
  },
  data () {
    return {
@@ -194,7 +198,8 @@
      },
      dictOptions:{},
      selectShenpiData: {},
      selectDispatchFileXqData:{}
      selectDispatchFileXqData:{},
      selectInspectionOrderXqData:{}
    }
  },
  created() {
@@ -209,19 +214,23 @@
      console.log('点击了详情')
      console.log('item----->', item)
      console.log('index----->', index)
      let approcesstype = this.splitAprocessType(item.category_dictText)
      let approcesstype = this.splitAprocessType(item.category)
      console.log('approcesstype--->', approcesstype)
      switch (approcesstype) {
        case '指派NC文档到设备流程':
        case 'drApproval':
          item.description=item.title
          this.handDrDetial(item)
          break
        case 'NC程序签派':
        case 'ggApproval':
          item.description=item.title
          this.handDispatchFileDetial(item)
          break
        case 'sbdjApproval':
          item.description=item.title
          this.handInspectionOrderDetial(item)
          break
        default:
          alert('没找到该审批')
          alert('没找到该流程')
      }
    },
    splitAprocessType(title) {
@@ -241,6 +250,14 @@
      this.selectDispatchFileXqData.procInstId=item.processInstanceId
      this.$refs.modalFormDispatchFileXq.clearTableSource()
      this.$refs.modalFormDispatchFileXq.getAllApproveData(item)
    },
    handInspectionOrderDetial(item){
      this.selectInspectionOrderXqData = item
      this.selectInspectionOrderXqData.assignee_dictText=item.todoUsers_dictText
      this.selectInspectionOrderXqData.createTime=item.startTime
      this.selectInspectionOrderXqData.procInstId=item.processInstanceId
      this.$refs.modalFormInspectionOrderXq.clearTableSource()
      this.$refs.modalFormInspectionOrderXq.getAllApproveData(item)
    }
  }
}
src/views/flowable/workflow/FlowTodo.vue
@@ -103,6 +103,8 @@
    <AssignFileStreamHandle ref="modalFormApproval" :selectShenpiData="selectShenpiData"></AssignFileStreamHandle>
    <DispatchFileHandle ref="modalFormDispatchFileXq"  :selectShenpiData="selectDispatchFileXqData" @searchReset="searchReset"></DispatchFileHandle>
    <DispatchFileBachHandleStyle ref="modalFormDispatchFileBatch" @searchReset="searchReset" @ok="modalFormOk"></DispatchFileBachHandleStyle>
    <InspectionOrderHandle ref="modalFormInspectionOrder" :selectShenpiData="selectInspectionOrderData" @searchReset="searchReset"></InspectionOrderHandle>
    <InspectionOrderHandleBzz ref="modalFormInspectionOrderBzz" :selectShenpiData="selectInspectionOrderDataBzz" @searchReset="searchReset"></InspectionOrderHandleBzz>
    <week-maintenance-approval-modal ref = "weekMaintenanceApprovalModal" :maintenanceId="dataId"></week-maintenance-approval-modal>
  </a-card>
</template>
@@ -116,6 +118,8 @@
import AssignFileStreamHandle from '@views/flowable/workflow/assignFileStream/AssignFileStreamHandle.vue'
import DispatchFileHandle from '@views/flowable/workflow/dispatchFile/DispatchFileHandle.vue'
import DispatchFileBachHandleStyle from '@views/flowable/workflow/dispatchFile/DispatchFileBachHandleStyle#Drawer.vue'
import InspectionOrderHandle from '@views/flowable/workflow/InspectionOrder/InspectionOrderHandle.vue'
import InspectionOrderHandleBzz from '@views/flowable/workflow/InspectionOrder/InspectionOrderHandleBzz.vue'
import WeekMaintenanceApprovalModal from '@views/flowable/workflow/weekMaintenance/WeekMaintenanceApprovalModal';
import { getAction } from '@api/manage'
@@ -127,6 +131,8 @@
    JDictSelectTag,
    DispatchFileHandle,
    DispatchFileBachHandleStyle,
    InspectionOrderHandle,
    InspectionOrderHandleBzz,
    WeekMaintenanceApprovalModal
  },
  data () {
@@ -202,6 +208,8 @@
      dictOptions:{},
      selectShenpiData: {},
      selectDispatchFileXqData:{},
      selectInspectionOrderData:{},
      selectInspectionOrderDataBzz:{},
      selectBachData:{},
      //业务信息ID
      dataId: undefined,
@@ -228,11 +236,14 @@
        case 'ggApproval':
          this.handDispatchFileDetial(item)
          break
        case 'sbdjApproval':
          this.handInspectionOrder(item)
          break
        case 'WEEK_MAINTENANCE':
          this.handleWeekMaintenance(item)
          break
        default:
          alert('没找到该审批')
          alert('没找到该流程')
      }
    },
    splitAprocessType(title) {
@@ -255,6 +266,18 @@
      this.$refs.modalFormDispatchFileXq.clearTableSource()
      this.$refs.modalFormDispatchFileXq.getAllApproveData(item)
    },
    handInspectionOrder(item) {
      console.log('item----->', item)
      if (item.taskDefKey ==='Confirmed_completed'){
        this.selectInspectionOrderDataBzz = item
        this.$refs.modalFormInspectionOrderBzz .clearTableSource()
        this.$refs.modalFormInspectionOrderBzz .getAllApproveData(item)
      }else {
        this.selectInspectionOrderData = item
        this.$refs.modalFormInspectionOrder.clearTableSource()
        this.$refs.modalFormInspectionOrder.getAllApproveData(item)
      }
    },
    batchHandle() {
      if (this.selectedRowKeys.length <= 0) {
        this.$notification.warning({
src/views/flowable/workflow/InspectionOrder/InspectionOrderHandle.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,446 @@
<!--
 Description: å·¥ä½œæµ-设备点检处理页面 List
 Author: ä½œè€… liuyh
 Date:   2025-02-27
-->
<template>
  <a-modal
    :title="title"
    :width="width"
    :visible="visible"
    :footer="null"
    @cancel="handCancel"
  >
    <a-card :bordered="false">
      <div>
        <b>{{ selectShenpiData.title }}</b>
        <br>
        <br>
        <a-tag color="blue">
          å½“前处理人 {{ selectShenpiData.assignee_dictText }}
        </a-tag>
        <a-tag color="blue">
          ä»»åŠ¡åˆ›å»ºæ—¶é—´ {{ selectShenpiData.createTime }}
        </a-tag>
        <br>
        <br>
        <button @click="fetchAndShowBmp" class="btn-custom">打开流程图</button>
        <div v-if="imageSrc">
          <img :src="imageSrc" alt="Fetched Image" />
        </div>
        <hr class="shallow-hr">
      </div>
      <div>
        <b>点检工单详情</b>
        <br>
        <a-form :form='form'>
          <a-spin :spinning="spinning">
            <a-tabs default-active-key='1' @change='callback'>
              <a-tab-pane key='1' tab='基本信息'>
                <a-form-model ref='form' :model='tableRowRecord' :rules='validatorRules'>
                  <a-row>
                    <a-col :span='span'>
                      <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="standardCode" label="工单号">
                        <a-input placeholder="工单号自动生成" :disabled="true" v-model="tableRowRecord.orderNum" />
                      </a-form-model-item>
                    </a-col>
                    <a-col :span='span'>
                      <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="equipmentId" label="设备编号">
                        <MaintenanceEquipmentSelect placeholder="请输入设备编号或名称搜索" v-model="tableRowRecord.equipmentId"
                                                    :maintenanceCategory="maintenanceCategory" :disabled="true"
                                                    @autocompleteForm="autocompleteForm"></MaintenanceEquipmentSelect>
                      </a-form-model-item>
                    </a-col>
                  </a-row>
                  <a-row>
                    <a-col :span='span'>
                      <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="standardName" label="标准名称">
                        <a-input placeholder="请输入标准名称" disabled v-model="this.standardName" />
                      </a-form-model-item>
                    </a-col>
                    <a-col :span='span'>
                      <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="standardCode" label="标准编码">
                        <a-input placeholder="请输入标准编码" disabled v-model="this.standardCode" />
                      </a-form-model-item>
                    </a-col>
                  </a-row>
                  <a-row>
                    <a-col :span='span'>
                      <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="maintenancePeriod" label="保养周期">
                        <a-input-number v-model="this.maintenancePeriod" :min="1" :precision="0" disabled style="width: 100%" />
                      </a-form-model-item>
                    </a-col>
                    <a-col :span='span'>
                      <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="operator" label="点检人">
                        <j-dict-select-tag v-model="tableRowRecord.operator" placeholder="请选择用户" disabled dictCode="sys_user,realname,username,username!='admin' order by create_time"/>
                      </a-form-model-item>
                    </a-col>
                  </a-row>
                  <a-row>
                    <a-col :span='span'>
                      <a-form-model-item label="点检日期" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="inspectionDate">
                        <j-date placeholder="请选择点检日期" v-model="tableRowRecord.inspectionDate" disabled  style="width: 100%" />
                      </a-form-model-item>
                    </a-col>
                    <a-col :span='span'>
                      <a-form-model-item label="点检过期时间" :labelCol="{span:6}" :wrapperCol="{span:15}" prop="expirationTime">
                        <j-date placeholder="请选择点检过期时间" v-model="tableRowRecord.expirationTime" disabled style="width: 100%" />
                      </a-form-model-item>
                    </a-col>
                  </a-row>
                  <a-row >
                    <a-col :span="24">
                      <a-form-model-item label="备注" :labelCol="{span:1}" :wrapperCol="{span:22}" prop="remark">
                        <a-textarea v-model="tableRowRecord.remark" rows="3" placeholder="请输入备注" disabled />
                      </a-form-model-item>
                    </a-col>
                  </a-row>
                </a-form-model>
              </a-tab-pane>
              <a-tab-pane key='2' tab='流程节点'>
                <a-card>
                  <a-timeline style="padding:0 1% 0 12%" >
                    <a-timeline-item color='white' v-for="(item,index1) in hitaskDataSource" :key="index1">
                      <div class="bottom">
                        <p>处理人:{{item.assignee_dictText}}</p>
                        <p v-if="index1 !==0">处理时长:{{item.duration}}</p>
                        <p v-if="item.name !== '提交申请'">处理类型:{{item.sequenceFlowName}}</p>
                        <p v-if="item.description != null">处理意见:{{item.description}}</p>
                        <div class="left_qiu"><span>{{item.taskName}}</span></div>
                      </div>
                    </a-timeline-item>
                  </a-timeline>
                </a-card>
              </a-tab-pane>
            </a-tabs>
          </a-spin>
        </a-form>
      </div>
      <div>
        <hr class="shallow-hr">
        <br>
        <b>保养项明细</b>
        <br>
        <a-form-model ref="form" :model="approveData" :rules="validatorRules" slot="detail">
          <a-row :gutter="24">
            <j-vxe-table
              ref="editableDetailTable"
              :rowNumber="false"
              :rowSelection="false"
              :bordered="true"
              :alwaysEdit="true"
              :toolbar="false"
              keep-source
              :height="300"
              :loading="detail.loading"
              :dataSource="detail.dataSource"
              :columns="detail.columns"
              style="margin-top: 8px;" />
          </a-row>
          <div class="table-operator" style="text-align: right;">
            <a-button  @click="handleQueXiaoTask" type="primary" icon="close">取消</a-button>
            <a-button @click="submitForm">提 äº¤</a-button>
          </div>
        </a-form-model>
      </div>
    </a-card>
  </a-modal>
</template>
<script>
import '@assets/less/TableExpand.less'
import { mixinDevice } from '@/utils/mixin'
import { getAction, deleteAction, postAction, downFile, httpAction } from '@api/manage'
import MaintenanceEquipmentSelect from '@views/eam/equipment/modules/MaintenanceEquipmentSelect.vue'
import { JVXETypes } from '@comp/jeecg/JVxeTable'
export default {
  name: 'FlowShenPi',
  components: { MaintenanceEquipmentSelect },
  mixins: [mixinDevice],
  props: {
    selectShenpiData: {
      type: Object,
      required: true
    }
  },
  data() {
    return {
      form: this.$form.createForm(this),
      span: 12,
      span1: 8,
      coldisabled: true,
      spinning: false,
      tableRowRecord: {},
      assignFileStream:{},
      tableDataSource: [],
      usageDataSource: [],
      hitaskDataSource:[],
      bomForm: {},
      approveContent:"",
      imageSrc: null,
      drawerVisible: true,
      labelCol: {
        xs: { span: 24 },
        sm: { span: 5 }
      },
      wrapperCol: {
        xs: { span: 30 },
        sm: { span: 16 }
      },
      validatorRules: {
        status: {
          rules: [
            { required: true, message: '请选择审批状态!'},
          ]
        },
      },
      approveData: {},
      flowData: {},
      title: '详情页面',
      width: 1000,
      visible: false,
      // è¡¨å¤´
      url: {
        queryBomDataById: '/eam/eamInspectionOrder/selectVoById',
        diagramView: '/assign/flow/diagramView',
        queryHisTaskList:'/dncFlow/dispatchFile/queryHisTaskList',
        approve:"/eam/eamInspectionOrder/approval",
        saveDispatchFile:"/dncFlow/dispatchFile/saveDispatchFile"
      },
      dictOptions: {},
      superFieldList: [],
      workflowSource: [],
      maintenanceCategory: 'POINT_INSPECTION',
      standardName:"",
      maintenancePeriod:"",
      standardCode:"",
      detail: {
        loading: false,
        dataSource: [],
        columns: [
          {
            title: '序号',
            key: 'itemCode',
            type: JVXETypes.normal,
            width: '10%',
            align:"center",
          },
          {
            title: '保养项',
            key: 'itemName',
            type: JVXETypes.normal,
            width: '20%',
            align:"center",
          },
          {
            title: '保养要求',
            key: 'itemDemand',
            type: JVXETypes.normal,
            width: '30%',
            align:"center",
          },
          {
            title: "点检结果"
            ,key: 'inspectionResult'
            ,type: JVXETypes.selectSearch
            ,dictCode:'eam_inspection_result'
            ,width: '20%'
            ,align:"center"
          },
          {
            title: '异常描述',
            key: 'exceptionDescription',
            type: JVXETypes.textarea,
            width: '30%',
            align:"center",
          },
          {
            title: '异常是否报修',
            key: 'reportFlag',
            type: JVXETypes.selectSearch,
            dictCode:'yn',
            width: '20%',
            align:"center",
          }
        ]
      }
    }
  },
  created() {
  },
  computed: {},
  methods: {
    callback() {
    },
    handCancel() {
      this.visible = false
    },
    clearTableSource() {
      this.tableDataSource = []
      this.usageDataSource = []
    },
    fetchAndShowBmp() {
      console.log('flowData----->', this.flowData)
      try {
        let parm = {
          processDefinitionId: this.flowData.processDefinitionId,
          processInstanceId:this.flowData.processInstanceId,
          TaskDefinitionKey:this.flowData.processDefinitionKey
        }
        downFile(this.url.diagramView,parm,'get').then((res=>{
          console.log('Pica------>',res)
          const urlObject = window.URL.createObjectURL(new Blob([res]))
          this.imageSrc = urlObject
        }))
      } catch (error) {
        console.error('Error fetching image blob:', error)
        alert('无法加载图片,请稍后再试。')
      }
    },
    handleQueXiaoTask(){
      this.visible = false
      this.routeReload()
    },
    autocompleteForm(selectObj) {
      this.standardName = selectObj.standardName
      this.maintenancePeriod=selectObj.maintenancePeriod
      this.standardCode=selectObj.standardCode
    },
    submitForm () {
      const that = this;
      // è§¦å‘表单验证
      this.form.validateFields((err, values) => {
        if (!err) {
          that.confirmLoading = true;
          let url=this.url.approve
          let method = 'post';
          let flowTaskVo = {}
          let tableData = that.$refs.editableDetailTable.getTableData()
          flowTaskVo.comment =that.assignFileStream.approveContent;
          flowTaskVo.dataId = this.selectShenpiData.dataId
          flowTaskVo.taskId = this.selectShenpiData.id
          flowTaskVo.userId = this.selectShenpiData.assignee
          flowTaskVo.instanceId = this.selectShenpiData.procInstId
          flowTaskVo.values = this.selectShenpiData.variables
          flowTaskVo.tableDetailList=tableData
          console.log("表单提交数据",flowTaskVo)
          httpAction(url,flowTaskVo,method).then((res)=>{
            if(res.success){
              that.$message.success(res.message);
              that.visible = false
              //刷新表格
              that.$emit('searchReset')
            }else{
              that.$message.warning(res.message);
            }
          }).finally(() => {
            that.confirmLoading = false;
          })
        }
      })
    },
    getAllApproveData(item) {
      console.log('selectShenpiData----->', this.selectShenpiData)
      this.flowData = item
      let param = {
        'id': item.dataId
      }
      let parmhis={
        'procInstId': item.procInstId
      }
      getAction(this.url.queryHisTaskList,parmhis).then(res=>{
        this.hitaskDataSource=res.result
        getAction(this.url.queryBomDataById, param).then((res => {
          if (res.success) {
            this.tableRowRecord = res.result[0]
            this.detail.dataSource=res.result[0].tableDetailList
            console.log('this.tableRowRecord----->', this.tableRowRecord[0])
          }
        }))
      }).finally(
        this.visible = true,
        console.log('this.approveData---->', this.approveData)
      )
    }
  }
}
</script>
<style scoped>
.shallow-hr {
  border: 0;
  height: 1px; /* åˆ†ç•Œçº¿çš„高度 */
  background-color: rgba(0, 0, 0, 0.1); /* ä½¿ç”¨ RGBA é¢œè‰²ï¼Œå¹¶è®¾ç½®è¾ƒä½Žçš„透明度 */
  margin: 20px 0; /* åˆ†ç•Œçº¿ä¸Šä¸‹çš„外边距 */
}
.btn-custom {
  background-color: #4CAF50; /* ç»¿è‰²èƒŒæ™¯ */
  color: white; /* ç™½è‰²æ–‡å­— */
  border: none; /* æ— è¾¹æ¡† */
  padding: 5px 15px; /* å†…边距 */
  text-align: center; /* æ–‡å­—居中 */
  text-decoration: none; /* æ— ä¸‹åˆ’线 */
  display: inline-block; /* è¡Œå†…块元素 */
  font-size: 12px; /* å­—体大小 */
  margin: 4px 2px; /* å¤–边距 */
  cursor: pointer; /* é¼ æ ‡æ‚¬åœæ—¶æ˜¾ç¤ºæ‰‹åž‹ */
  border-radius: 4px; /* åœ†è§’边框 */
}
.bold-large-label {
  font-weight: bold;
  font-size: 20px; /* æˆ–你需要的任何大小 */
}
.left_qiu{
  position: absolute;
  left: -74px;
  top: 0;
  width:54px;
  border-radius: 50%;
  height:54px;
  font-size: 13px;
  margin: auto;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  background: #0099ff;
  transform: translate(0, 0);
}
/deep/ .ant-timeline-item-tail{
  left: -29px !important;
}
.left_qiu span{
  width: 3em;
  display: block;
  color: #fff;
  text-align: center;
}
.img{
  width: 75%;
}
.wrap{
  clear: both;
  width: 100%;
  display: flex;
  height: 50px;
  border: 1px solid #ccc;
  /* background-color: aqua; */
}
.box{
  width:21%;
  height:50px;
  border-right: 1px solid #ccc;
  line-height: 50px;
  /* background: red; */
  text-align:center;
  margin: auto;
}
@import '~@assets/less/common.less';
</style>
src/views/flowable/workflow/InspectionOrder/InspectionOrderHandleBzz.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,468 @@
<!--
 Description: å·¥ä½œæµ-设备点检处理页面 List
 Author: ä½œè€… liuyh
 Date:   2025-02-27
-->
<template>
  <a-modal
    :title="title"
    :width="width"
    :visible="visible"
    :footer="null"
    @cancel="handCancel"
  >
    <a-card :bordered="false">
      <div>
        <b>{{ selectShenpiData.title }}</b>
        <br>
        <br>
        <a-tag color="blue">
          å½“前处理人 {{ selectShenpiData.assignee_dictText }}
        </a-tag>
        <a-tag color="blue">
          ä»»åŠ¡åˆ›å»ºæ—¶é—´ {{ selectShenpiData.createTime }}
        </a-tag>
        <br>
        <br>
        <button @click="fetchAndShowBmp" class="btn-custom">打开流程图</button>
        <div v-if="imageSrc">
          <img :src="imageSrc" alt="Fetched Image" />
        </div>
        <hr class="shallow-hr">
      </div>
      <div>
        <b>点检工单详情</b>
        <br>
        <a-form :form='form'>
          <a-spin :spinning="spinning">
            <a-tabs default-active-key='1' @change='callback'>
              <a-tab-pane key='1' tab='基本信息'>
                <a-form-model ref='form' :model='tableRowRecord' :rules='validatorRules'>
                  <a-row>
                    <a-col :span='span'>
                      <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="standardCode" label="工单号">
                        <a-input placeholder="工单号自动生成" :disabled="true" v-model="tableRowRecord.orderNum" />
                      </a-form-model-item>
                    </a-col>
                    <a-col :span='span'>
                      <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="equipmentId" label="设备编号">
                        <MaintenanceEquipmentSelect placeholder="请输入设备编号或名称搜索" v-model="tableRowRecord.equipmentId"
                                                    :maintenanceCategory="maintenanceCategory" :disabled="true"
                                                    @autocompleteForm="autocompleteForm"></MaintenanceEquipmentSelect>
                      </a-form-model-item>
                    </a-col>
                  </a-row>
                  <a-row>
                    <a-col :span='span'>
                      <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="standardName" label="标准名称">
                        <a-input placeholder="请输入标准名称" disabled v-model="this.standardName" />
                      </a-form-model-item>
                    </a-col>
                    <a-col :span='span'>
                      <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="standardCode" label="标准编码">
                        <a-input placeholder="请输入标准编码" disabled v-model="this.standardCode" />
                      </a-form-model-item>
                    </a-col>
                  </a-row>
                  <a-row>
                    <a-col :span='span'>
                      <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="maintenancePeriod" label="保养周期">
                        <a-input-number v-model="this.maintenancePeriod" :min="1" :precision="0" disabled style="width: 100%" />
                      </a-form-model-item>
                    </a-col>
                    <a-col :span='span'>
                      <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="operator" label="点检人">
                        <j-dict-select-tag v-model="tableRowRecord.operator" placeholder="请选择用户" disabled dictCode="sys_user,realname,username,username!='admin' order by create_time"/>
                      </a-form-model-item>
                    </a-col>
                  </a-row>
                  <a-row>
                    <a-col :span='span'>
                      <a-form-model-item label="点检日期" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="inspectionDate">
                        <j-date placeholder="请选择点检日期" v-model="tableRowRecord.inspectionDate" disabled  style="width: 100%" />
                      </a-form-model-item>
                    </a-col>
                    <a-col :span='span'>
                      <a-form-model-item label="点检过期时间" :labelCol="{span:6}" :wrapperCol="{span:15}" prop="expirationTime">
                        <j-date placeholder="请选择点检过期时间" v-model="tableRowRecord.expirationTime" disabled style="width: 100%" />
                      </a-form-model-item>
                    </a-col>
                  </a-row>
                  <a-row >
                    <a-col :span="24">
                      <a-form-model-item label="备注" :labelCol="{span:1}" :wrapperCol="{span:22}" prop="remark">
                        <a-textarea v-model="tableRowRecord.remark" rows="3" placeholder="请输入备注" disabled />
                      </a-form-model-item>
                    </a-col>
                  </a-row>
                </a-form-model>
              </a-tab-pane>
              <a-tab-pane key='2' tab='流程节点'>
                <a-card>
                  <a-timeline style="padding:0 1% 0 12%" >
                    <a-timeline-item color='white' v-for="(item,index1) in hitaskDataSource" :key="index1">
                      <div class="bottom">
                        <p>处理人:{{item.assignee_dictText}}</p>
                        <p v-if="index1 !==0">处理时长:{{item.duration}}</p>
                        <p v-if="item.name !== '提交申请'">处理类型:{{item.sequenceFlowName}}</p>
                        <p v-if="item.description != null">处理意见:{{item.description}}</p>
                        <div class="left_qiu"><span>{{item.taskName}}</span></div>
                      </div>
                    </a-timeline-item>
                  </a-timeline>
                </a-card>
              </a-tab-pane>
            </a-tabs>
          </a-spin>
        </a-form>
      </div>
      <div>
        <hr class="shallow-hr">
        <br>
        <b>保养项明细</b>
        <br>
        <a-form-model ref="form" :model="approveData" :rules="validatorRules" slot="detail">
          <a-row :gutter="24">
            <j-vxe-table
              ref="editableDetailTable"
              :rowNumber="false"
              :rowSelection="false"
              :bordered="true"
              :alwaysEdit="true"
              :toolbar="false"
              keep-source
              :height="300"
              :loading="detail.loading"
              :dataSource="detail.dataSource"
              :columns="detail.columns"
              :disabled="true"
              style="margin-top: 8px;" />
          </a-row>
        </a-form-model>
      </div>
      <div>
        <hr class="shallow-hr">
        <br>
        <b>班组长确认</b>
        <br>
        <a-form-model ref="form" :model="approveData" :rules="validatorRules" slot="detail">
          <a-row>
            <a-col ::span='span' class="btxx">
              <a-form-model-item  label="处理类型" :labelCol="labelCol" :wrapperCol="wrapperCol" prop='dealType'>
                <j-dict-select-tag  type='list' v-model='assignFileStream.dealType' dictCode='approved_rejected' placeholder="请选择处理类型"  />
              </a-form-model-item >
            </a-col>
            <a-col :span="24" class="btxx">
              <a-form-model-item  label="处理意见" :labelCol="labelCol" :wrapperCol="wrapperCol">
                <a-textarea v-model="assignFileStream.dealSuggestion" rows="4" placeholder="请输入处理意见"/>
              </a-form-model-item >
            </a-col>
          </a-row>
          <div class="table-operator" style="text-align: right;">
            <a-button  @click="handleQueXiaoTask" type="primary" icon="close">取消</a-button>
            <a-button @click="submitForm">提 äº¤</a-button>
          </div>
        </a-form-model>
      </div>
    </a-card>
  </a-modal>
</template>
<script>
import '@assets/less/TableExpand.less'
import { mixinDevice } from '@/utils/mixin'
import { getAction, deleteAction, postAction, downFile, httpAction } from '@api/manage'
import MaintenanceEquipmentSelect from '@views/eam/equipment/modules/MaintenanceEquipmentSelect.vue'
import { JVXETypes } from '@comp/jeecg/JVxeTable'
export default {
  name: 'FlowShenPi',
  components: { MaintenanceEquipmentSelect },
  mixins: [mixinDevice],
  props: {
    selectShenpiData: {
      type: Object,
      required: true
    }
  },
  data() {
    return {
      form: this.$form.createForm(this),
      span: 12,
      span1: 8,
      coldisabled: true,
      spinning: false,
      tableRowRecord: {},
      assignFileStream:{},
      tableDataSource: [],
      usageDataSource: [],
      hitaskDataSource:[],
      bomForm: {},
      approveContent:"",
      imageSrc: null,
      drawerVisible: true,
      labelCol: {
        xs: { span: 24 },
        sm: { span: 5 }
      },
      wrapperCol: {
        xs: { span: 30 },
        sm: { span: 16 }
      },
      validatorRules: {
        status: {
          rules: [
            { required: true, message: '请选择审批状态!'},
          ]
        },
      },
      approveData: {},
      flowData: {},
      title: '详情页面',
      width: 1000,
      visible: false,
      // è¡¨å¤´
      url: {
        queryBomDataById: '/eam/eamInspectionOrder/selectVoById',
        diagramView: '/assign/flow/diagramView',
        queryHisTaskList:'/dncFlow/dispatchFile/queryHisTaskList',
        approve:"/eam/eamInspectionOrder/approval",
        saveDispatchFile:"/dncFlow/dispatchFile/saveDispatchFile"
      },
      dictOptions: {},
      superFieldList: [],
      workflowSource: [],
      maintenanceCategory: 'POINT_INSPECTION',
      standardName:"",
      maintenancePeriod:"",
      standardCode:"",
      detail: {
        loading: false,
        dataSource: [],
        columns: [
          {
            title: '序号',
            key: 'itemCode',
            type: JVXETypes.normal,
            width: '10%',
            align:"center",
          },
          {
            title: '保养项',
            key: 'itemName',
            type: JVXETypes.normal,
            width: '20%',
            align:"center",
          },
          {
            title: '保养要求',
            key: 'itemDemand',
            type: JVXETypes.normal,
            width: '30%',
            align:"center",
          },
          {
            title: "点检结果"
            ,key: 'inspectionResult'
            ,type: JVXETypes.selectSearch
            ,dictCode:'eam_inspection_result'
            ,width: '20%'
            ,align:"center"
          },
          {
            title: '异常描述',
            key: 'exceptionDescription',
            type: JVXETypes.normal,
            width: '30%',
            align:"center",
          },
          {
            title: '异常是否报修',
            key: 'reportFlag',
            type: JVXETypes.selectSearch,
            dictCode:'yn',
            width: '20%',
            align:"center",
          }
        ]
      }
    }
  },
  created() {
  },
  computed: {},
  methods: {
    callback() {
    },
    handCancel() {
      this.visible = false
    },
    clearTableSource() {
      this.tableDataSource = []
      this.usageDataSource = []
    },
    fetchAndShowBmp() {
      console.log('flowData----->', this.flowData)
      try {
        let parm = {
          processDefinitionId: this.flowData.processDefinitionId,
          processInstanceId:this.flowData.processInstanceId,
          TaskDefinitionKey:this.flowData.processDefinitionKey
        }
        downFile(this.url.diagramView,parm,'get').then((res=>{
          console.log('Pica------>',res)
          const urlObject = window.URL.createObjectURL(new Blob([res]))
          this.imageSrc = urlObject
        }))
      } catch (error) {
        console.error('Error fetching image blob:', error)
        alert('无法加载图片,请稍后再试。')
      }
    },
    handleQueXiaoTask(){
      this.visible = false
      this.routeReload()
    },
    autocompleteForm(selectObj) {
      this.standardName = selectObj.standardName
      this.maintenancePeriod=selectObj.maintenancePeriod
      this.standardCode=selectObj.standardCode
    },
    submitForm () {
      const that = this;
      // è§¦å‘表单验证
      this.form.validateFields((err, values) => {
        if (!err) {
          that.confirmLoading = true;
          let url=this.url.approve
          let method = 'post';
          let flowTaskVo = {}
          let tableData = that.$refs.editableDetailTable.getTableData()
          flowTaskVo.dealType=that.assignFileStream.dealType
          flowTaskVo.dealSuggestion=that.assignFileStream.dealSuggestion
          flowTaskVo.dataId = this.selectShenpiData.dataId
          flowTaskVo.taskId = this.selectShenpiData.id
          flowTaskVo.userId = this.selectShenpiData.assignee
          flowTaskVo.instanceId = this.selectShenpiData.procInstId
          flowTaskVo.values = this.selectShenpiData.variables
          flowTaskVo.tableDetailList=tableData
          console.log("表单提交数据",flowTaskVo)
          httpAction(url,flowTaskVo,method).then((res)=>{
            if(res.success){
              that.$message.success(res.message);
              that.visible = false
              //刷新表格
              that.$emit('searchReset')
            }else{
              that.$message.warning(res.message);
            }
          }).finally(() => {
            that.confirmLoading = false;
          })
        }
      })
    },
    getAllApproveData(item) {
      console.log('selectShenpiData----->', this.selectShenpiData)
      this.flowData = item
      let param = {
        'id': item.dataId
      }
      let parmhis={
        'procInstId': item.procInstId
      }
      getAction(this.url.queryHisTaskList,parmhis).then(res=>{
        this.hitaskDataSource=res.result
        getAction(this.url.queryBomDataById, param).then((res => {
          if (res.success) {
            this.tableRowRecord = res.result[0]
            this.detail.dataSource=res.result[0].tableDetailList
            console.log('this.tableRowRecord----->', this.tableRowRecord[0])
          }
        }))
      }).finally(
        this.visible = true,
        console.log('this.approveData---->', this.approveData)
      )
    }
  }
}
</script>
<style scoped>
.shallow-hr {
  border: 0;
  height: 1px; /* åˆ†ç•Œçº¿çš„高度 */
  background-color: rgba(0, 0, 0, 0.1); /* ä½¿ç”¨ RGBA é¢œè‰²ï¼Œå¹¶è®¾ç½®è¾ƒä½Žçš„透明度 */
  margin: 20px 0; /* åˆ†ç•Œçº¿ä¸Šä¸‹çš„外边距 */
}
.btn-custom {
  background-color: #4CAF50; /* ç»¿è‰²èƒŒæ™¯ */
  color: white; /* ç™½è‰²æ–‡å­— */
  border: none; /* æ— è¾¹æ¡† */
  padding: 5px 15px; /* å†…边距 */
  text-align: center; /* æ–‡å­—居中 */
  text-decoration: none; /* æ— ä¸‹åˆ’线 */
  display: inline-block; /* è¡Œå†…块元素 */
  font-size: 12px; /* å­—体大小 */
  margin: 4px 2px; /* å¤–边距 */
  cursor: pointer; /* é¼ æ ‡æ‚¬åœæ—¶æ˜¾ç¤ºæ‰‹åž‹ */
  border-radius: 4px; /* åœ†è§’边框 */
}
.bold-large-label {
  font-weight: bold;
  font-size: 20px; /* æˆ–你需要的任何大小 */
}
.left_qiu{
  position: absolute;
  left: -74px;
  top: 0;
  width:54px;
  border-radius: 50%;
  height:54px;
  font-size: 13px;
  margin: auto;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  background: #0099ff;
  transform: translate(0, 0);
}
/deep/ .ant-timeline-item-tail{
  left: -29px !important;
}
.left_qiu span{
  width: 3em;
  display: block;
  color: #fff;
  text-align: center;
}
.img{
  width: 75%;
}
.wrap{
  clear: both;
  width: 100%;
  display: flex;
  height: 50px;
  border: 1px solid #ccc;
  /* background-color: aqua; */
}
.box{
  width:21%;
  height:50px;
  border-right: 1px solid #ccc;
  line-height: 50px;
  /* background: red; */
  text-align:center;
  margin: auto;
}
@import '~@assets/less/common.less';
</style>
src/views/flowable/workflow/InspectionOrder/InspectionOrderXq.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,443 @@
<!--
 Description: å·¥ä½œæµ-设备点检处理页面 List
 Author: ä½œè€… liuyh
 Date:   2025-02-27
-->
<template>
  <a-modal
    :title="title"
    :width="width"
    :visible="visible"
    :footer="null"
    @cancel="handCancel"
  >
    <a-card :bordered="false">
      <div>
        <b>{{ selectShenpiData.title }}</b>
        <br>
        <br>
        <a-tag color="blue">
          å½“前处理人 {{ selectShenpiData.assignee_dictText }}
        </a-tag>
        <a-tag color="blue">
          ä»»åŠ¡åˆ›å»ºæ—¶é—´ {{ selectShenpiData.createTime }}
        </a-tag>
        <br>
        <br>
        <button @click="fetchAndShowBmp" class="btn-custom">打开流程图</button>
        <div v-if="imageSrc">
          <img :src="imageSrc" alt="Fetched Image" />
        </div>
        <hr class="shallow-hr">
      </div>
      <div>
        <b>点检工单详情</b>
        <br>
        <a-form :form='form'>
          <a-spin :spinning="spinning">
            <a-tabs default-active-key='1' @change='callback'>
              <a-tab-pane key='1' tab='基本信息'>
                <a-form-model ref='form' :model='tableRowRecord' :rules='validatorRules'>
                  <a-row>
                    <a-col :span='span'>
                      <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="standardCode" label="工单号">
                        <a-input placeholder="工单号自动生成" :disabled="true" v-model="tableRowRecord.orderNum" />
                      </a-form-model-item>
                    </a-col>
                    <a-col :span='span'>
                      <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="equipmentId" label="设备编号">
                        <MaintenanceEquipmentSelect placeholder="请输入设备编号或名称搜索" v-model="tableRowRecord.equipmentId"
                                                    :maintenanceCategory="maintenanceCategory" :disabled="true"
                                                    @autocompleteForm="autocompleteForm"></MaintenanceEquipmentSelect>
                      </a-form-model-item>
                    </a-col>
                  </a-row>
                  <a-row>
                    <a-col :span='span'>
                      <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="standardName" label="标准名称">
                        <a-input placeholder="请输入标准名称" disabled v-model="this.standardName" />
                      </a-form-model-item>
                    </a-col>
                    <a-col :span='span'>
                      <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="standardCode" label="标准编码">
                        <a-input placeholder="请输入标准编码" disabled v-model="this.standardCode" />
                      </a-form-model-item>
                    </a-col>
                  </a-row>
                  <a-row>
                    <a-col :span='span'>
                      <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="maintenancePeriod" label="保养周期">
                        <a-input-number v-model="this.maintenancePeriod" :min="1" :precision="0" disabled style="width: 100%" />
                      </a-form-model-item>
                    </a-col>
                    <a-col :span='span'>
                      <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="operator" label="点检人">
                        <j-dict-select-tag v-model="tableRowRecord.operator" placeholder="请选择用户" disabled dictCode="sys_user,realname,username,username!='admin' order by create_time"/>
                      </a-form-model-item>
                    </a-col>
                  </a-row>
                  <a-row>
                    <a-col :span='span'>
                      <a-form-model-item label="点检日期" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="inspectionDate">
                        <j-date placeholder="请选择点检日期" v-model="tableRowRecord.inspectionDate" disabled  style="width: 100%" />
                      </a-form-model-item>
                    </a-col>
                    <a-col :span='span'>
                      <a-form-model-item label="点检过期时间" :labelCol="{span:6}" :wrapperCol="{span:15}" prop="expirationTime">
                        <j-date placeholder="请选择点检过期时间" v-model="tableRowRecord.expirationTime" disabled style="width: 100%" />
                      </a-form-model-item>
                    </a-col>
                  </a-row>
                  <a-row >
                    <a-col :span="24">
                      <a-form-model-item label="备注" :labelCol="{span:1}" :wrapperCol="{span:22}" prop="remark">
                        <a-textarea v-model="tableRowRecord.remark" rows="3" placeholder="请输入备注" disabled />
                      </a-form-model-item>
                    </a-col>
                  </a-row>
                </a-form-model>
              </a-tab-pane>
              <a-tab-pane key='2' tab='流程节点'>
                <a-card>
                  <a-timeline style="padding:0 1% 0 12%" >
                    <a-timeline-item color='white' v-for="(item,index1) in hitaskDataSource" :key="index1">
                      <div class="bottom">
                        <p>处理人:{{item.assignee_dictText}}</p>
                        <p v-if="index1 !==0">处理时长:{{item.duration}}</p>
                        <p v-if="item.name !== '提交申请'">处理类型:{{item.sequenceFlowName}}</p>
                        <p v-if="item.description != null">处理意见:{{item.description}}</p>
                        <div class="left_qiu"><span>{{item.taskName}}</span></div>
                      </div>
                    </a-timeline-item>
                  </a-timeline>
                </a-card>
              </a-tab-pane>
            </a-tabs>
          </a-spin>
        </a-form>
      </div>
      <div>
        <hr class="shallow-hr">
        <br>
        <b>保养项明细</b>
        <br>
        <a-form-model ref="form" :model="approveData" :rules="validatorRules" slot="detail">
          <a-row :gutter="24">
            <j-vxe-table
              ref="editableDetailTable"
              :rowNumber="false"
              :rowSelection="false"
              :bordered="true"
              :alwaysEdit="true"
              :toolbar="false"
              :disabled="true"
              keep-source
              :height="300"
              :loading="detail.loading"
              :dataSource="detail.dataSource"
              :columns="detail.columns"
              style="margin-top: 8px;" />
          </a-row>
        </a-form-model>
      </div>
    </a-card>
  </a-modal>
</template>
<script>
import '@assets/less/TableExpand.less'
import { mixinDevice } from '@/utils/mixin'
import { getAction, deleteAction, postAction, downFile, httpAction } from '@api/manage'
import MaintenanceEquipmentSelect from '@views/eam/equipment/modules/MaintenanceEquipmentSelect.vue'
import { JVXETypes } from '@comp/jeecg/JVxeTable'
export default {
  name: 'FlowShenPi',
  components: { MaintenanceEquipmentSelect },
  mixins: [mixinDevice],
  props: {
    selectShenpiData: {
      type: Object,
      required: true
    }
  },
  data() {
    return {
      form: this.$form.createForm(this),
      span: 12,
      span1: 8,
      coldisabled: true,
      spinning: false,
      tableRowRecord: {},
      assignFileStream:{},
      tableDataSource: [],
      usageDataSource: [],
      hitaskDataSource:[],
      bomForm: {},
      approveContent:"",
      imageSrc: null,
      drawerVisible: true,
      labelCol: {
        xs: { span: 24 },
        sm: { span: 5 }
      },
      wrapperCol: {
        xs: { span: 30 },
        sm: { span: 16 }
      },
      validatorRules: {
        status: {
          rules: [
            { required: true, message: '请选择审批状态!'},
          ]
        },
      },
      approveData: {},
      flowData: {},
      title: '详情页面',
      width: 1000,
      visible: false,
      // è¡¨å¤´
      url: {
        queryBomDataById: '/eam/eamInspectionOrder/selectVoById',
        diagramView: '/assign/flow/diagramView',
        queryHisTaskList:'/dncFlow/dispatchFile/queryHisTaskList',
        approve:"/eam/eamInspectionOrder/approval",
        saveDispatchFile:"/dncFlow/dispatchFile/saveDispatchFile"
      },
      dictOptions: {},
      superFieldList: [],
      workflowSource: [],
      maintenanceCategory: 'POINT_INSPECTION',
      standardName:"",
      maintenancePeriod:"",
      standardCode:"",
      detail: {
        loading: false,
        dataSource: [],
        columns: [
          {
            title: '序号',
            key: 'itemCode',
            type: JVXETypes.normal,
            width: '10%',
            align:"center",
          },
          {
            title: '保养项',
            key: 'itemName',
            type: JVXETypes.normal,
            width: '20%',
            align:"center",
          },
          {
            title: '保养要求',
            key: 'itemDemand',
            type: JVXETypes.normal,
            width: '30%',
            align:"center",
          },
          {
            title: "点检结果"
            ,key: 'inspectionResult'
            ,type: JVXETypes.selectSearch
            ,dictCode:'eam_inspection_result'
            ,width: '20%'
            ,align:"center"
          },
          {
            title: '异常描述',
            key: 'exceptionDescription',
            type: JVXETypes.normal,
            width: '30%',
            align:"center",
          },
          {
            title: '异常是否报修',
            key: 'selectSearch',
            type: JVXETypes.selectSearch,
            dictCode:'yn',
            width: '20%',
            align:"center",
          }
        ]
      }
    }
  },
  created() {
  },
  computed: {},
  methods: {
    callback() {
    },
    handCancel() {
      this.visible = false
    },
    clearTableSource() {
      this.tableDataSource = []
      this.usageDataSource = []
    },
    fetchAndShowBmp() {
      console.log('flowData----->', this.flowData)
      try {
        let parm = {
          processDefinitionId: this.flowData.processDefinitionId,
          processInstanceId:this.flowData.processInstanceId,
          TaskDefinitionKey:this.flowData.processDefinitionKey
        }
        downFile(this.url.diagramView,parm,'get').then((res=>{
          console.log('Pica------>',res)
          const urlObject = window.URL.createObjectURL(new Blob([res]))
          this.imageSrc = urlObject
        }))
      } catch (error) {
        console.error('Error fetching image blob:', error)
        alert('无法加载图片,请稍后再试。')
      }
    },
    handleQueXiaoTask(){
      this.visible = false
      this.routeReload()
    },
    autocompleteForm(selectObj) {
      this.standardName = selectObj.standardName
      this.maintenancePeriod=selectObj.maintenancePeriod
      this.standardCode=selectObj.standardCode
    },
    submitForm () {
      const that = this;
      // è§¦å‘表单验证
      this.form.validateFields((err, values) => {
        if (!err) {
          that.confirmLoading = true;
          let url=this.url.approve
          let method = 'post';
          let flowTaskVo = {}
          let tableData = that.$refs.editableDetailTable.getTableData()
          flowTaskVo.comment =that.assignFileStream.approveContent;
          flowTaskVo.dataId = this.selectShenpiData.dataId
          flowTaskVo.taskId = this.selectShenpiData.id
          flowTaskVo.userId = this.selectShenpiData.assignee
          flowTaskVo.instanceId = this.selectShenpiData.procInstId
          flowTaskVo.values = this.selectShenpiData.variables
          flowTaskVo.tableDetailList=tableData
          console.log("表单提交数据",flowTaskVo)
          httpAction(url,flowTaskVo,method).then((res)=>{
            if(res.success){
              that.$message.success(res.message);
              that.visible = false
              //刷新表格
              that.$emit('searchReset')
            }else{
              that.$message.warning(res.message);
            }
          }).finally(() => {
            that.confirmLoading = false;
          })
        }
      })
    },
    getAllApproveData(item) {
      console.log('selectShenpiData----->', this.selectShenpiData)
      this.flowData = item
      let param = {
        'id': item.dataId
      }
      let parmhis={
        'procInstId': item.procInstId
      }
      getAction(this.url.queryHisTaskList,parmhis).then(res=>{
        this.hitaskDataSource=res.result
        getAction(this.url.queryBomDataById, param).then((res => {
          if (res.success) {
            this.tableRowRecord = res.result[0]
            this.detail.dataSource=res.result[0].tableDetailList
            console.log('this.tableRowRecord----->', this.tableRowRecord[0])
          }
        }))
      }).finally(
        this.visible = true,
        console.log('this.approveData---->', this.approveData)
      )
    }
  }
}
</script>
<style scoped>
.shallow-hr {
  border: 0;
  height: 1px; /* åˆ†ç•Œçº¿çš„高度 */
  background-color: rgba(0, 0, 0, 0.1); /* ä½¿ç”¨ RGBA é¢œè‰²ï¼Œå¹¶è®¾ç½®è¾ƒä½Žçš„透明度 */
  margin: 20px 0; /* åˆ†ç•Œçº¿ä¸Šä¸‹çš„外边距 */
}
.btn-custom {
  background-color: #4CAF50; /* ç»¿è‰²èƒŒæ™¯ */
  color: white; /* ç™½è‰²æ–‡å­— */
  border: none; /* æ— è¾¹æ¡† */
  padding: 5px 15px; /* å†…边距 */
  text-align: center; /* æ–‡å­—居中 */
  text-decoration: none; /* æ— ä¸‹åˆ’线 */
  display: inline-block; /* è¡Œå†…块元素 */
  font-size: 12px; /* å­—体大小 */
  margin: 4px 2px; /* å¤–边距 */
  cursor: pointer; /* é¼ æ ‡æ‚¬åœæ—¶æ˜¾ç¤ºæ‰‹åž‹ */
  border-radius: 4px; /* åœ†è§’边框 */
}
.bold-large-label {
  font-weight: bold;
  font-size: 20px; /* æˆ–你需要的任何大小 */
}
.left_qiu{
  position: absolute;
  left: -74px;
  top: 0;
  width:54px;
  border-radius: 50%;
  height:54px;
  font-size: 13px;
  margin: auto;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  background: #0099ff;
  transform: translate(0, 0);
}
/deep/ .ant-timeline-item-tail{
  left: -29px !important;
}
.left_qiu span{
  width: 3em;
  display: block;
  color: #fff;
  text-align: center;
}
.img{
  width: 75%;
}
.wrap{
  clear: both;
  width: 100%;
  display: flex;
  height: 50px;
  border: 1px solid #ccc;
  /* background-color: aqua; */
}
.box{
  width:21%;
  height:50px;
  border-right: 1px solid #ccc;
  line-height: 50px;
  /* background: red; */
  text-align:center;
  margin: auto;
}
@import '~@assets/less/common.less';
</style>
src/views/flowable/workflow/assignFileStream/AssignFileStreamHandle.vue
@@ -105,13 +105,11 @@
                  <a-timeline style="padding:0 1% 0 12%" >
                    <a-timeline-item color='white' v-for="(item,index1) in hitaskDataSource" :key="index1">
                      <div class="bottom">
                        <p>开始时间:{{item.startTime}}</p>
                        <p>结束时间:{{item.endTime}}</p>
                        <p>处理人:{{item.assignee}}</p>
                        <p>办理类型:{{item.bllx_dictText}}</p>
                        <p v-if="item.name == '提交申请'">指派原因:{{item.cause}}</p>
                        <p v-else >处理意见:{{item.cause}}</p>
                        <div  class="left_qiu"><span>{{item.name}}</span></div>
                        <p>处理人:{{item.assignee_dictText}}</p>
                        <p v-if="index1 !==0">处理时长:{{item.duration}}</p>
                        <p v-if="item.name !== '提交申请'">处理类型:{{item.sequenceFlowName}}</p>
                        <p v-if="item.description != null">处理意见:{{item.description}}</p>
                        <div class="left_qiu"><span>{{item.taskName}}</span></div>
                      </div>
                    </a-timeline-item>
                  </a-timeline>
@@ -246,8 +244,8 @@
      url: {
        queryBomDataById: '/nc/activit/selectVoById',
        diagramView: '/assign/flow/diagramView',
        queryHisTaskList:'/assign/flow/queryHisTaskList',
        approve:"/activit/assign/file/approve",
        queryHisTaskList:'/dncFlow/dispatchFile/queryHisTaskList',
        approve:"/nc/activit/assign/file/approve",
      },
      dictOptions: {},
      superFieldList: [],
@@ -340,7 +338,7 @@
        'id': item.dataId
      }
      let parmhis={
        'procInstId': item.dataId
        'procInstId': item.procInstId
      }
      getAction(this.url.queryHisTaskList,parmhis).then(res=>{
        this.hitaskDataSource=res.result
src/views/flowable/workflow/assignFileStream/AssignFileStreamXq.vue
@@ -105,13 +105,11 @@
                  <a-timeline style="padding:0 1% 0 12%" >
                    <a-timeline-item color='white' v-for="(item,index1) in hitaskDataSource" :key="index1">
                      <div class="bottom">
                        <p>开始时间:{{item.startTime}}</p>
                        <p>结束时间:{{item.endTime}}</p>
                        <p>处理人:{{item.assignee}}</p>
                        <p v-if="item.name !== '提交申请'">办理类型:{{item.status_dictText}}</p>
                        <p v-if="item.name === '提交申请'">指派原因:{{item.cause}}</p>
                        <p v-else >处理意见:{{item.cause}}</p>
                        <div  class="left_qiu"><span>{{item.name}}</span></div>
                        <p>处理人:{{item.assignee_dictText}}</p>
                        <p v-if="index1 !==0">处理时长:{{item.duration}}</p>
                        <p v-if="item.name !== '提交申请'">处理类型:{{item.sequenceFlowName}}</p>
                        <p v-if="item.description != null">处理意见:{{item.description}}</p>
                        <div class="left_qiu"><span>{{item.taskName}}</span></div>
                      </div>
                    </a-timeline-item>
                  </a-timeline>
@@ -202,7 +200,7 @@
      url: {
        queryBomDataById: '/nc/activit/selectVoById',
        diagramView: '/assign/flow/diagramView',
        queryHisTaskList:'/assign/flow/queryHisTaskList',
        queryHisTaskList:'/dncFlow/dispatchFile/queryHisTaskList',
        approve:"/activit/assign/file/approve",
      },
      dictOptions: {},
@@ -291,12 +289,13 @@
    },
    getAllApproveData(item) {
      console.log('selectShenpiData----->', this.selectShenpiData)
      console.log('item----->', item)
      this.flowData = item
      let param = {
        'id': item.dataId
      }
      let parmhis={
        'drapprovedataId': item.dataId
        'procInstId': item.processInstanceId
      }
      getAction(this.url.queryHisTaskList,parmhis).then(res=>{
        this.hitaskDataSource=res.result
src/views/flowable/workflow/dispatchFile/DispatchFileHandle.vue
@@ -84,8 +84,7 @@
                        <p>处理人:{{item.assignee_dictText}}</p>
                        <p v-if="index1 !==0">处理时长:{{item.duration}}</p>
                        <p v-if="item.name !== '提交申请'">处理类型:{{item.sequenceFlowName}}</p>
                        <p v-if="index1 ===0">申请原因:{{item.description}}</p>
                        <p v-else >处理意见:{{item.description}}</p>
                        <p v-if="item.description != null">处理意见:{{item.description}}</p>
                        <div class="left_qiu"><span>{{item.taskName}}</span></div>
                      </div>
                    </a-timeline-item>
src/views/flowable/workflow/dispatchFile/DispatchFileXq.vue
@@ -84,7 +84,7 @@
                        <p>处理人:{{item.assignee_dictText}}</p>
                        <p v-if="index1 !==0">处理时长:{{item.duration}}</p>
                        <p v-if="item.name !== '提交申请'">处理类型:{{item.sequenceFlowName}}</p>
                        <p v-if="index1 !==0">处理意见:{{item.description}}</p>
                        <p v-if="item.description != null">处理意见:{{item.description}}</p>
                        <div class="left_qiu"><span>{{item.taskName}}</span></div>
                      </div>
                    </a-timeline-item>