作者:管理员  历史版本:1  最后编辑:龚清  更新时间:2024-11-20 15:41

基础功能

帮助提示,用于标注某个注解说明。


当ibps-help元素中注入对应数据后得效果,此处应用在系统附件菜单的预览功能。

<template>
  <div class="main-container">
    <ibps-crud
      ref="crud"
      :height="height"
      :data="listData"
      :toolbars="listConfig.toolbars"
      :search-form="listConfig.searchForm"
      :pk-key="pkKey"
      :columns="listConfig.columns"
      :row-handle="listConfig.rowHandle"
      :pagination="pagination"
      :loading="loading"
      :index-row="false"
      :identity="identity"
      @column-link-click="handleLinkClick"
      @action-event="handleAction"
      @sort-change="handleSortChange"
      @pagination-change="handlePaginationChange"
    >
      <template slot="headerIcon" slot-scope="scope">
        <span>{{ scope.column.label }}</span>
        <ibps-help
          width="100%"
          :title="$t('platform.bpmn.bpm-task.about-candidate')"
          :content="` ${$t('platform.bpmn.bpm-task.detailed-one')}<br>
            ${$t('platform.bpmn.bpm-task.detailed-tow')}<br>
            ${$t('platform.bpmn.bpm-task.detailed-four')}<br>
            ${$t('platform.bpmn.bpm-task.detailed-three')}<br>`"
        />
      </template>
    </ibps-crud>
    <approve-dialog
      :visible="dialogFormVisible"
      :title="title"
      :task-id="editId"
      :action="action"
      class="bpm-task-dialog"
      @callback="search"
      @close="visible => dialogFormVisible = visible"
    />
    <!-- 人员选择器 -->
    <ibps-employee-selector-dialog
      :visible="selectorVisible"
      :value="[]"
      multiple
      @close="visible => selectorVisible = visible"
      @action-event="handleSelectorActionEvent"
    />

    <bpmn-formrender
      :visible="bpmnFormrenderDialogVisible"
      :task-id="editId"
      @callback="search"
      @close="visible => bpmnFormrenderDialogVisible = visible"
    />
  </div>
</template>

<script>
import { queryPageList, remove, batchSuspendProcess, batchRecoverProcess, assignee } from '@/api/platform/bpmn/bpmTask'
import ActionUtils from '@/utils/action'
import FixHeight from '@/mixins/height'
import Identity from '@/constants/identity'

export default {
  components: {
    'ibps-employee-selector-dialog': () => import('@/business/platform/org/employee/dialog'),
    'approve-dialog': () => import('@/business/platform/bpmn/form-ext/approve'),
    'bpmn-formrender': () => import('@/business/platform/bpmn/form/dialog')
  },
  mixins: [FixHeight],
  data() {
    return {
      identity: Identity.IBPS.BPMN.BPM_TASK_MGR,
      dialogFormVisible: false, // 弹窗
      bpmnFormrenderDialogVisible: false, // 表单
      editId: '', // 编辑dialog需要使用
      action: 'agree', // 打开弹窗的动作
      pkKey: 'id', // 主键  如果主键不是pk需要传主键

      selectorVisible: false,
      ids: '',
      title: '',
      loading: true,
      height: document.clientHeight,

      listData: [],
      pagination: {},
      sorts: {},
      listConfig: {
        toolbars: [
          { key: 'agree', type: 'primary', label: this.$t('platform.bpmn.bpm-task.agree') },
          { key: 'stop', label: this.$t('platform.bpmn.bpm-task.stop') },
          { key: 'suspend', label: this.$t('platform.bpmn.bpm-task.suspend') },
          { key: 'recover', label: this.$t('platform.bpmn.bpm-task.recover') },
          { key: 'assignee', label: this.$t('platform.bpmn.bpm-task.assignee') }
        ],
        searchForm: {
          forms: [
            { prop: 'Q^subject_^SL', label: this.$t('platform.bpmn.bpm-task.request-title') },
            { prop: 'Q^NAME_^SL', label: this.$t('platform.bpmn.bpm-task.current-node'), fieldType: 'languageSelect' },
            {
              prop: ['Q^CREATE_TIME_^DL', 'Q^CREATE_TIME_^DG'],
              label: this.$t('common.field.createTime'),
              fieldType: 'daterange'
            }
          ]
        },
        // 表格字段配置
        columns: [
          { prop: 'subject', label: this.$t('platform.bpmn.bpm-task.request-title'), link: 'dialog' },
          { prop: 'name', label: this.$t('platform.bpmn.bpm-task.current-node'), width: 200, slotName: 'trans' },
          { prop: 'ownerName', label: this.$t('platform.bpmn.bpm-task.candidate'), width: 200, headerName: 'headerIcon' },
          { prop: 'partyTypeName', label: this.$t('platform.bpmn.bpm-task.range-of-candidates'), width: 200 },
          { prop: 'createTime', label: this.$t('common.field.createTime'), sortable: 'custom', width: 150 }
        ],
        rowHandle: {
          actions: [{
            key: 'assignee',
            label: this.$t('platform.bpmn.bpm-task.designated-executor')
          }, {
            key: 'approve',
            label: this.$t('platform.bpmn.bpm-task.approve')
          }]
        }
      }
    }
  },
  created() {
    this.loadData()
  },
  beforeDestroy() {
    this.listData = null
    this.pagination = null
    this.sorts = null
    this.listConfig = null
  },
  methods: {
    // 加载数据
    loadData() {
      this.loading = true
      queryPageList(this.getSearcFormData()).then(response => {
        // Modify by Fuyu 国际化内容显示 at 2021-03-30
        // for (const i in response.data.dataResult) {
        //   const item = response.data.dataResult[i]
        //   if (item.subject.indexOf(this.$t('platform.bpmn.common.initiate')) > -1) {
        //     const index = item.subject.indexOf(this.$t('platform.bpmn.common.initiate'))
        //     const fix = item.subject.substr(0, index + 2)
        //     const trans = item.subject.substr(index + 2, item.subject.length - 1)
        //     item.subject = fix + (this.$t(trans) || trans) || fix + trans
        //   }
        //   if (item.ownerName.length > 0) { // 候选人
        //     const split = item.ownerName.split(',')
        //     let ownerNameTrans = ''
        //     for (const i in split) {
        //       split[i] = this.$t(split[i])
        //       ownerNameTrans = ownerNameTrans + split[i] + (i < split.length - 1 ? ',' : '')
        //     }
        //     item.ownerName = ownerNameTrans
        //   }
        //   if (item.partyTypeName.length > 0) { // 候选人范围
        //     const split = item.partyTypeName.split(',')
        //     let partyTypeNameTrans = ''
        //     for (const i in split) {
        //       split[i] = this.$t(split[i])
        //       partyTypeNameTrans = partyTypeNameTrans + split[i] + (i < split.length - 1 ? ',' : '')
        //     }
        //     item.partyTypeName = partyTypeNameTrans
        //   }
        // }
        ActionUtils.handleListData(this, response.data)
        this.loading = false
      }).catch(() => {
        this.loading = false
      })
    },
    /**
     * 获取格式化参数
     */
    getSearcFormData() {
      return ActionUtils.formatParams(
        this.$refs['crud'] ? this.$refs['crud'].getSearcFormData() : {},
        this.pagination,
        this.sorts)
    },
    /**
     * 处理分页事件
     */
    handlePaginationChange(page) {
      ActionUtils.setPagination(this.pagination, page)
      this.loadData()
    },
    /**
     * 处理排序
     */
    handleSortChange(sort) {
      ActionUtils.setSorts(this.sorts, sort)
      this.loadData()
    },
    /**
     * 查询
     */
    search() {
      this.loadData()
    },
    /**
     * 重置查询
     */
    resetSearch() {
      this.$refs['crud'] ? this.$refs['crud'].resetSearch() : null
      ActionUtils.setFirstPagination(this.pagination)
      this.search()
    },
    /**
     * 处理按钮事件
     */
    handleAction(command, position, selection, data) {
      switch (command) {
        case 'search':// 查询
          ActionUtils.setFirstPagination(this.pagination)
          this.search()
          break
        case 'resetSearch':// 重置查询
          this.resetSearch()
          break
        case 'stop':// 终止
          ActionUtils.selectedMultiRecord(selection).then((ids) => {
            this.handleBatchApprove(ids, 'stop')
            this.title = this.$t('platform.bpmn.bpm-task.batch-termination-process')
          }).catch(() => { })
          break
        case 'agree':// 同意
          ActionUtils.selectedMultiRecord(selection).then((ids) => {
            this.handleBatchApprove(ids, 'agree')
            this.title = this.$t('platform.bpmn.bpm-task.batch-approval')
          }).catch(() => { })
          break
        case 'suspend':// 挂起
          ActionUtils.selectedMultiRecord(selection).then((ids) => {
            this.handleSuspend(ids)
          }).catch(() => { })
          break
        case 'recover':// 恢复
          ActionUtils.selectedMultiRecord(selection).then((ids) => {
            this.handleRecover(ids)
          }).catch(() => { })
          break
        case 'assignee':// 指定执行人
          ActionUtils.selectedMultiRecord(selection).then((ids) => {
            this.handleAssignee(ids)
          }).catch(() => { })
          break
        case 'approve':// 审批
          ActionUtils.selectedMultiRecord(selection).then((ids) => {
            this.handleApprove(ids)
          }).catch(() => { })
          break
        default:
          break
      }
    },
    /**
     * 处理审批
     */
    handleBatchApprove(id = '', action = 'agree') {
      this.editId = id
      this.action = action
      this.dialogFormVisible = true
    },
    /**
     * 处理删除
     */
    handleRemove(ids) {
      remove({ levelIds: ids }).then(response => {
        ActionUtils.removeSuccessMessage()
        this.search()
      }).catch(() => {})
    },
    /**
     * 批量挂起任务
     */
    handleSuspend(ids) {
      this.$confirm(this.$t('platform.bpmn.bpm-task.batch-hang-up-process'), this.$t('common.msg.info')).then(() => {
        batchSuspendProcess({ taskIds: ids }).then(() => {
          ActionUtils.successMessage(this.$t('platform.bpmn.bpm-task.process-task-suspended-successfully'))
          this.search()
        }).catch(error => {
          console.error(error)
        })
      })
    },
    /**
     * 批量挂起任务
     */
    handleRecover(ids) {
      this.$confirm(this.$t('platform.bpmn.bpm-task.batch-recovery-process'), this.$t('common.msg.info')).then(() => {
        batchRecoverProcess({ taskIds: ids }).then(() => {
          ActionUtils.successMessage(this.$t('platform.bpmn.bpm-task.recovery-process-task-succeeded'))
          this.search()
        }).catch(error => {
          console.error(error)
        })
      })
    },
    /**
     * 指定执行人
     */
    handleAssignee(ids) {
      this.ids = ids
      this.selectorVisible = true
    },
    handleSelectorActionEvent(buttonKey, data) {
      switch (buttonKey) {
        case 'confirm':// 确定
          this.handleConfirm(data)
          break
      }
    },
    handleConfirm(data) {
      assignee({
        taskId: this.ids,
        userId: data.map((d) => { return d.id }).join(',')
      }).then(response => {
        this.selectorVisible = false
        ActionUtils.success(this.$t('platform.bpmn.bpm-task.designated-executor-succeeded'))
        this.search()
      })
    },
    /**
     * 审批
     */
    handleApprove(id) {
      this.bpmnFormrenderDialogVisible = true
      this.editId = id
    },
    handleLinkClick(data, columns) {
      this.handleApprove(data[this.pkKey])
    }
  }
}
</script>