240 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			240 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
<template>
 | 
						|
  <div class="add-config">
 | 
						|
    <ai-detail>
 | 
						|
      <ai-title slot="title" :title="detailTitle" isShowBack isShowBottomBorder @onBackClick="handleBack"/>
 | 
						|
      <template slot="step">
 | 
						|
        <div class="step">
 | 
						|
          <el-steps :active="activeStep" simple>
 | 
						|
            <el-step v-for="(step,i) in processList" :key="i" v-bind="step" :icon="getStepIcon(i)"/>
 | 
						|
          </el-steps>
 | 
						|
        </div>
 | 
						|
      </template>
 | 
						|
      <template #content v-if="refresh">
 | 
						|
        <baseInfo ref="baseInfo" :instance="instance" :dict="dict" v-show="activeStep==0"/>
 | 
						|
        <applyForm ref="applyForm" :instance="instance" :dict="dict" v-show="activeStep==1"/>
 | 
						|
        <attachmentMaterial ref="attachmentMaterial" :instance="instance" v-show="activeStep==2"/>
 | 
						|
        <processApproval ref="processApproval" :approvalSteps="applyForm.approvalSteps" :instance="instance"
 | 
						|
                         :dict="dict" v-show="activeStep==3"/>
 | 
						|
      </template>
 | 
						|
      <template #footer>
 | 
						|
        <el-button class="btn" v-if="activeStep==0" @click="handleBack">取消</el-button>
 | 
						|
        <el-button class="btn" v-else @click="preStep">上一步</el-button>
 | 
						|
        <el-button class="btn" type="primary" v-if="[0,1,2].includes(activeStep)" @click="nextStep">下一步</el-button>
 | 
						|
        <el-button class="btn" type="primary" v-if="activeStep==3" @click="save">保存</el-button>
 | 
						|
      </template>
 | 
						|
    </ai-detail>
 | 
						|
  </div>
 | 
						|
</template>
 | 
						|
 | 
						|
<script>
 | 
						|
import {applyForm, attachmentMaterial, baseInfo, processApproval} from './index'
 | 
						|
 | 
						|
export default {
 | 
						|
  name: "addConfig",
 | 
						|
  provide() {
 | 
						|
    return {
 | 
						|
      config: this
 | 
						|
    }
 | 
						|
  },
 | 
						|
  props: {
 | 
						|
    instance: Function,
 | 
						|
    dict: Object,
 | 
						|
    row: Object
 | 
						|
  },
 | 
						|
  components: {baseInfo, applyForm, attachmentMaterial, processApproval},
 | 
						|
  data() {
 | 
						|
    return {
 | 
						|
      activeStep: 0,
 | 
						|
      baseInfo: {},
 | 
						|
      applyForm: {
 | 
						|
        tableId: "",
 | 
						|
        approvalSteps: "",
 | 
						|
      },
 | 
						|
      processAnnexDefs: [],
 | 
						|
      detailObj: {},
 | 
						|
      refresh: true
 | 
						|
    }
 | 
						|
  },
 | 
						|
  computed: {
 | 
						|
    processList() {
 | 
						|
      return [
 | 
						|
        {title: '基本信息', activeIndex: 0},
 | 
						|
        {title: '申请表单', activeIndex: 1},
 | 
						|
        {title: '附件材料', activeIndex: 2},
 | 
						|
        {title: '审批流程', activeIndex: 3}
 | 
						|
      ]
 | 
						|
    },
 | 
						|
    detailTitle() {
 | 
						|
      return this.detailObj?.id ? "编辑事项" : "添加事项"
 | 
						|
    }
 | 
						|
  },
 | 
						|
  methods: {
 | 
						|
    /**
 | 
						|
     * 上一步
 | 
						|
     * */
 | 
						|
    preStep() {
 | 
						|
      this.activeStep--
 | 
						|
    },
 | 
						|
    /**
 | 
						|
     * 下一步
 | 
						|
     */
 | 
						|
    nextStep() {
 | 
						|
      switch (this.activeStep) {
 | 
						|
        case 0:
 | 
						|
          this.handleBaseInfo()
 | 
						|
          break
 | 
						|
        case 1:
 | 
						|
          this.$refs['applyForm'].handleApplyForm().then(ret => {
 | 
						|
            this.applyForm.tableId = ret.id
 | 
						|
            this.applyForm.approvalSteps = ret.approvalSteps.toString()
 | 
						|
            this.activeStep++
 | 
						|
          }).catch(err => {
 | 
						|
            console.error(err);
 | 
						|
          })
 | 
						|
          break
 | 
						|
        case 2:
 | 
						|
          this.$refs['attachmentMaterial'].handleAttachmentMaterial().then(res => {
 | 
						|
            this.annexs = res
 | 
						|
            this.activeStep++
 | 
						|
          }).catch(err => {
 | 
						|
            console.error(err);
 | 
						|
          })
 | 
						|
          break
 | 
						|
      }
 | 
						|
    },
 | 
						|
    handleBaseInfo() {
 | 
						|
      this.$refs['baseInfo'].banseInfoForm().then(res => {
 | 
						|
        if (res) {
 | 
						|
          this.$refs['applyForm'].getFormList()
 | 
						|
          this.baseInfo = res
 | 
						|
          this.activeStep++
 | 
						|
        }
 | 
						|
      })
 | 
						|
    },
 | 
						|
    /**
 | 
						|
     * 保存
 | 
						|
     */
 | 
						|
    save() {
 | 
						|
      this.$refs['processApproval'].handleProcessApproval().then(res => {
 | 
						|
        this.instance.post(`/approval-process-def/add-update`, {
 | 
						|
          ...this.detailObj,
 | 
						|
          ...this.baseInfo,
 | 
						|
          processDefStatus: Number(this.baseInfo.processDefStatus),
 | 
						|
          tableId: this.applyForm.tableId,
 | 
						|
          processType: 0,
 | 
						|
          tableType: 2,
 | 
						|
          processAnnexDefs: this.annexs.map(e => ({...e, mustFill: Number(e.mustFill)})),
 | 
						|
          processNodeList: res.processNodeList
 | 
						|
        }).then(res => {
 | 
						|
          if (res.code == 0) {
 | 
						|
            this.$message.success("保存成功")
 | 
						|
            this.$emit("back")
 | 
						|
          }
 | 
						|
        })
 | 
						|
      }).catch(err => {
 | 
						|
        console.error(err);
 | 
						|
      })
 | 
						|
    },
 | 
						|
    getDetail(id) {
 | 
						|
      this.instance.post(`/approval-process-def/info-id`, null, {params: {id}}).then(res => {
 | 
						|
        if (res?.data) {
 | 
						|
          this.detailObj = res.data
 | 
						|
          this.refreshDetail()
 | 
						|
        }
 | 
						|
      })
 | 
						|
    },
 | 
						|
    getStepIcon(rowIndex) {
 | 
						|
      if (rowIndex < this.activeStep) return "iconfont iconSteps_Finished"
 | 
						|
      else if (this.activeStep == rowIndex) return "iconfont iconSteps_In_Progress"
 | 
						|
      return ""
 | 
						|
    },
 | 
						|
    refreshDetail() {
 | 
						|
      this.refresh = false
 | 
						|
      this.$nextTick(() => this.refresh = true)
 | 
						|
    },
 | 
						|
    handleBack() {
 | 
						|
      this.detailObj?.id && this.$router.push({query: {}})
 | 
						|
      this.$emit('back')
 | 
						|
    }
 | 
						|
  },
 | 
						|
  created() {
 | 
						|
    if (this.row.id) {
 | 
						|
      this.getDetail(this.row.id)
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 | 
						|
</script>
 | 
						|
 | 
						|
<style lang="scss" scoped>
 | 
						|
.add-config {
 | 
						|
  height: 100%;
 | 
						|
 | 
						|
  ::v-deep .step .el-steps {
 | 
						|
    height: 72px;
 | 
						|
  }
 | 
						|
 | 
						|
  .step {
 | 
						|
    width: 100%;
 | 
						|
    height: 72px;
 | 
						|
    font-size: 14px;
 | 
						|
 | 
						|
    .el-steps {
 | 
						|
      display: flex;
 | 
						|
      align-items: center;
 | 
						|
      height: 72px;
 | 
						|
      padding: 0 calc(50% - 380px);
 | 
						|
 | 
						|
 | 
						|
      ::v-deep .el-step {
 | 
						|
        font-weight: bold;
 | 
						|
 | 
						|
        ::v-deep .el-step__icon {
 | 
						|
          width: 24px;
 | 
						|
          height: 24px;
 | 
						|
          background: #fff;
 | 
						|
 | 
						|
          .iconfont {
 | 
						|
            font-size: 24px;
 | 
						|
          }
 | 
						|
        }
 | 
						|
 | 
						|
        ::v-deep .el-step__main {
 | 
						|
          display: flex;
 | 
						|
          align-items: center;
 | 
						|
 | 
						|
          .el-step__arrow {
 | 
						|
            background: #D0D4DC;
 | 
						|
            margin: 0 8px;
 | 
						|
            height: 2px;
 | 
						|
 | 
						|
            &:before, &:after {
 | 
						|
              display: none;
 | 
						|
            }
 | 
						|
          }
 | 
						|
        }
 | 
						|
 | 
						|
        .is-process {
 | 
						|
          color: #2266FF;
 | 
						|
        }
 | 
						|
 | 
						|
        .is-wait {
 | 
						|
          color: #666;
 | 
						|
          border-color: #D0D4DC;
 | 
						|
        }
 | 
						|
      }
 | 
						|
 | 
						|
    }
 | 
						|
 | 
						|
  }
 | 
						|
 | 
						|
  .btn {
 | 
						|
    width: 92px;
 | 
						|
    height: 32px;
 | 
						|
 | 
						|
    &:nth-child(2) {
 | 
						|
      margin-left: 24px;
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 | 
						|
</style>
 |