expertGroup.vue 7.77 KB
<template>
  <div class="app-content" style="height:80vh;overflow: auto;">
    <a-spin :spinning="loading">
      <a-form-model ref="form" :model="formData" :rules="rules" class="from-table">
        <a-row>
          <a-col :span="2" class="bg-gray">
            <div class="required">年 度:</div>
          </a-col>
          <a-col :span="22">
            <a-form-model-item prop="year">
              <base-select v-model="formData.year" :type="4" :isAll="true" :width="150" />
            </a-form-model-item>
          </a-col>
        </a-row>
        <a-row>
          <a-col :span="2" class="bg-gray">
            <div class="required">批 次:</div>
          </a-col>
          <a-col :span="22">
            <a-form-model-item prop="batch">
              <base-select v-model="formData.batch" :type="10" :isAll="true" :width="150" />
            </a-form-model-item>
          </a-col>
        </a-row>
        <a-row>
          <a-col :span="2" class="bg-gray expertGroupMembers">
            <div class="required">批次名称:</div>
          </a-col>
          <a-col :span="22">
            <a-form-model-item prop="name">
              <a-input placeholder="批次名称" v-model="formData.name" :maxLength="100" style="width:300px" />
            </a-form-model-item>
          </a-col>
        </a-row>
        <a-row>
          <a-col :span="2" class="bg-gray expertGroupMembers">
            <div style="margin-left:10px">备 注:</div>
          </a-col>
          <a-col :span="22">
            <a-form-model-item prop="remark">
              <a-input placeholder="备注" v-model="formData.remark" :maxLength="100" style="width:300px" />
            </a-form-model-item>
          </a-col>
        </a-row>

        <a-row>
          <a-col :span="24">
            <div class="tb-title">
              <span>专家组</span>
            </div>
          </a-col>
        </a-row>

        <a-row style="text-align: center;">
          <a-col :span="2" class="bg-gray">
            序号
          </a-col>
          <a-col :span="8" class="bg-gray required">
            专家组名称
          </a-col>
          <a-col :span="6" class="bg-gray">
            备注
          </a-col>
          <a-col :span="2" class="bg-gray">
            专家数
          </a-col>
          <a-col :span="6" class="bg-gray">
            操作
          </a-col>
        </a-row>

        <a-row v-for="(expert, index) in formData.expertGroup" :key="index">
          <a-col :span="2" style="text-align: center;">
            {{index+1}}
          </a-col>
          <a-col :span="8" style="text-align: left;">
            <a-form-model-item :prop="'expertGroup.' + index + '.name'" :rules="{required: true,message: '*',trigger: 'blur',}">
              <a-input placeholder="名称" v-model="expert.name" :maxLength="200" style="width:80%" />
            </a-form-model-item>
          </a-col>
          <a-col :span="6" style="text-align: left;">
            <a-form-model-item :prop="'expertGroup.' + index + '.remark'">
              <a-input placeholder="备注" v-model="expert.remark" :maxLength="200" style="width:80%" />
            </a-form-model-item>
          </a-col>
          <a-col :span="2" style="text-align: center;">
            {{expert.members.length}}
          </a-col>
          <a-col :span="6" style="text-align: center;">
            <a-popconfirm title="确定要删除吗?" ok-text="确定" cancel-text="取消" @confirm="removeMembers(expert)">
              <a-button type="link" size="small">删除</a-button>
            </a-popconfirm>
            <a-button type="link" @click="selectExpert(expert,index)">选择评审专家</a-button>
          </a-col>
        </a-row>
        <a-row v-if="formData.expertGroup && formData.expertGroup.length < 10">
          <a-col :span="24" style="text-align: center;">
            <a-button type="dashed" style="width: 30%" @click="addMembers">
              <a-icon type="plus" /> 添加
            </a-button>
          </a-col>
        </a-row>
        <a-row>
          <a-col style="text-align: center;">
            <a-button type="primary" @click="submit">提交</a-button>
          </a-col>
        </a-row>
      </a-form-model>
      <!-- @close="() => this.visibleEdit=false" -->
      <a-modal v-model="visibleEdit" :title="'选择专家'" :width="'850px'" :dialog-style="{ top: '11%' }" :maskClosable="false" :footer="null" destroyOnClose>
        <expert-group-members v-model="expertArray" @close="closeWindow" />
      </a-modal>
    </a-spin>
  </div>
</template>

<script>
const Expert = { id: null, name: null, remark: null, members: [] }
import moment from 'moment'
import { isEmptyParams, filterExportExcelData, tableColumnsName } from "@/views/utils/common";
import expertGroupMembers from '@/views/expertGroup/expertGroupMembers'
import baseSelect from '@/views/components/common/baseSelect'
export default {
  name: 'expertGroup',
  components: {
    expertGroupMembers, baseSelect
  },
  data () {
    return {
      // 表单
      formData: { year: null, batch: null, name: null, remark: null, expertGroup: [{ id: null, name: null, remark: null, members: [] }] },
      rules: {
        year: { required: true, message: '请选择年度', trigger: 'change' },
        batch: { required: true, message: '请选择批次', trigger: 'change' },
        name: { required: true, message: '请填写批次名称', trigger: 'blur' },
      },
      // 弹窗标志
      visibleView: false,
      visibleEdit: false,
      expertArray: [{}],
      expertIndex: 0,
      loading: true,
    }
  },
  props: {
    value: {
      type: String,
      default: () => {
        return null
      }
    },
  },
  created () {
    this.load()
  },
  methods: {
    load () {
      if (this.value != null) {
        let pars = { id: this.value }
        this.$api.expertBatch.getBatchById(pars).then(({ data = {} }) => {
          if (data) {
            this.formData = data
            this.loading = false
          }
        }).catch(() => { })
      } else {
        var date = new Date();
        let year = date.getFullYear()
        this.formData.year = year
        this.loading = false
      }
    },
    batchCreate () {
      this.visibleEdit = true
    },
    removeMembers (item) {//移除成员
      if (this.formData.expertGroup.length == 1) {
        alert('至少创建一个专家组')
        return
      }
      let index = this.formData.expertGroup.indexOf(item)
      if (index !== -1) {
        this.formData.expertGroup.splice(index, 1)
      }
    },
    memberToTop (item) {//成员置顶
      let index = this.formData.expertGroup.indexOf(item)
      if (index !== -1) {
        this.formData.expertGroup.splice(index, 1)
        this.formData.expertGroup.unshift({ ...item })
      }
    },
    addMembers () {//添加成员
      this.formData.expertGroup.push({ ...Expert })
    },
    selectExpert (obj, index) {
      this.expertIndex = index
      this.expertArray = obj.members
      this.visibleEdit = true
    },
    closeWindow (value) {
      if (value === 'view') {
        this.visibleView = false
      }
      else {
        this.visibleEdit = false
        this.formData.expertGroup[this.expertIndex].members = this.expertArray
      }
      this.expertIndex = 0
      this.expertArray = []
    },
    submit () {
      this.$refs.form.validate(valid => {
        if (valid) {
          this.loading = true
          let pars = isEmptyParams(this.formData)
          let par = { ...pars }
          this.$api.expertBatch.save(par).then(({ data = {} }) => {
            if (data) {
              this.loading = false
              this.$message.success('提交成功!')
              this.$emit('close', 'edit')
            }
            else
              this.loading = false
          }).catch(() => {
            this.loading = false
          })
        }
      })
    },
  }
}
</script>