• 徐俊's avatar
    xujun · 12033e13
    徐俊 authored
    12033e13
technologyEvalucation.vue 11.3 KB
<template>
  <div>
    <table class="tab-content" cellpadding="3" cellspacing="3" style="width: 98%">
      <tr>
        <td class="bg-title">一级指标(固定)</td>
        <td class="bg-title">二级指标(供参考)</td>
        <td class="bg-title" colspan="3">评价意见(供参考)</td>
        <td class="bg-title">专家打分</td>
      </tr>
      <tr v-for="(item, index) in tableData" :key="index" style="line-height: 25px">
        <td :rowspan="item.rowspan" v-if="item.rowspan != 0" class="bg-title">
          {{ item.oneLevel }}
        </td>
        <td>{{ item.towLevel }}</td>
        <td>{{ item.title1 }}</td>
        <td>{{ item.title2 }}</td>
        <td>{{ item.title3 }}</td>
        <td>
          <a-form-model-item :prop="'score' + (index + 1)">
            <a-input-number v-model="item.grade" :min="0" :max="item.score" :step="1" @change="numberChange(index)" style="width: 90%"/>
          </a-form-model-item>
        </td>
      </tr>
      <tr>
        <td class="bg-title">评审意见</td>
        <td colspan="4">
          <a-form-model-item prop="remark">
            <a-textarea placeholder="评审意见" v-model="remark" @change="AreaChange()" :maxLength="1000" style="width: 90%; height: 120px; margin-top: 6px" />
          </a-form-model-item>
        </td>
        <td style="text-align: center">总分:{{ totalScore }}</td>
      </tr>
      <tr>
        <td class="bg-title">是否推荐立项支持</td>
        <td colspan="2">
          <a-form-model-item prop="supportState">
            <a-radio-group v-model="supportState" @change="supportStateChange">
              <a-radio :value="1"></a-radio>
              <a-radio :value="0"></a-radio>
            </a-radio-group>
          </a-form-model-item>
        </td>
        <td class="bg-title">评审结果</td>
        <td colspan="2">
          <a-form-model-item prop="evaluationType">
            <a-radio-group v-model="evaluationType" @change="EcaluationChange" disabled>
              <a-radio :value="1">A类(通过)</a-radio>
              <a-radio :value="2">B类(修改)</a-radio>
              <a-radio :value="3">C类(不通过)</a-radio>
            </a-radio-group>
          </a-form-model-item>
        </td>
      </tr>
    </table>
  </div>
</template>

<script>
const formData = {
  id: null,
  projId: null,
  expertId: null,
  expertName: null,
  score1: null,
  score2: null,
  score3: null,
  score4: null,
  score4: null,
  score5: null,
  score6: null,
  score7: null,
  score8: null,
  score9: null,
  score10: null,
  score11: null,
  score12: null,
  score13: null,
  score14: null,
  score15: null,
  score16: null,
  score17: null,
  totalScore: null,
  supportState: null,
  remark: null,
  projName: null,
  projNo: null,
};
const plainOptions = ['A', 'B', 'C'];

export default {
  name: "technologyEvalucation",
  props: {
    value: {
      type: Object,
      default: () => {
        return formData;
      },
    },
  },
  data() {
    return {
      
      tableData: [
        { rowspan: 1, oneLevel: "1.意义及必要性(5分)", towLevel: "A:项目实施的意义及必要性(5分)", title1: "重要(4-5分)", title2: "较重要(2-3分)", title3: "一般(0-1分)", score: 5, grade: null, },
        
        { rowspan: 2, oneLevel: "2.目标及考核指标(10分)", towLevel: "A:目标定位及可考核性(5分)", title1: "明确量化可考(4-5分)", title2: "较明确可考(2-3分)", title3: "一般(0-1分)", score: 5, grade: null, },
        { rowspan: 0, oneLevel: "2.目标及考核指标(10分)", towLevel: "B:绩效目标设置合理性(5分)", title1: "准确合理(4-5分)", title2: "较准确合理(2-3分)", title3: "一般(0-1分)", score: 5, grade: null, },
        
        { rowspan: 3, oneLevel: "3.主要内容(20分)", towLevel: "A:研发内容与目标实现关联度(6分)", title1: "高(5-6分)", title2: "中(2-4分)", title3: "低(0-1分)", score: 6, grade: null, },
        { rowspan: 0, oneLevel: "3.主要内容(20分)", towLevel: "B:研究成果产业化成熟度(6分)", title1: "好(5-6分)", title2: "较好(2-4分)", title3: "一般(0-1分)", score: 6, grade: null, },
        { rowspan: 0, oneLevel: "3.主要内容(20分)", towLevel: "C:产业化市场竞争力及预期效益(8分)", title1: "好(7-8分)", title2: "较好(3-6分)", title3: "一般(0-2分)", score: 8, grade: null, },

        { rowspan: 3, oneLevel: "4.项目实施方案(技术路线)(25分)", towLevel: "A:技术路线和实施方案设计(10分)", title1: "合理(7-10分)", title2: "较合理(3-6分)", title3: "一般(0-2分)", score: 10, grade: null, },
        { rowspan: 0, oneLevel: "4.项目实施方案(技术路线)(25分)", towLevel: "B:技术关键选择及创新性先进性(8分)", title1: "突出(7-8分)", title2: "较突出(3-6分)", title3: "一般(0-2分)", score: 8, grade: null, },
        { rowspan: 0, oneLevel: "4.项目实施方案(技术路线)(25分)", towLevel: "C:年度计划安排(7分)", title1: "合理(6-7分)", title2: "较合理(3-5分)", title3: "一般(0-2分)", score: 7, grade: null, },

        { rowspan: 3, oneLevel: "5.工作基础及支撑条件(15分)", towLevel: "A:负责人及团队创新能力(7分)", title1: "强(6-7分)", title2: "较强(2-5分)", title3: "一般(0-1分)", score: 7, grade: null, },
        { rowspan: 0, oneLevel: "5.工作基础及支撑条件(15分)", towLevel: "B:研发平台及科研条件保障(4分)", title1: "好(4分)", title2: "较好(3分)", title3: "一般(1分)", score: 4, grade: null, },
        { rowspan: 0, oneLevel: "5.工作基础及支撑条件(15分)", towLevel: "C:前期工作基础(4分)", title1: "好(4分)", title2: "较好(3分)", title3: "一般(1分)", score: 4, grade: null, },

        { rowspan: 3, oneLevel: "6.组织运行与管理(15分)", towLevel: "A:经费预算合理性(6分)", title1: "合理(5-6分)", title2: "较合理(2-4分)", title3: "一般(0-1分)", score: 6, grade: null, },
        { rowspan: 0, oneLevel: "6.组织运行与管理(15分)", towLevel: "B:任务分工和权益分配(4分)", title1: "合理(4分)", title2: "较合理(3分)", title3: "一般(1分)", score: 4, grade: null, },
        { rowspan: 0, oneLevel: "6.组织运行与管理(15分)", towLevel: "C:项目组织协调及管理措施(5分)", title1: "完善(4-5分)", title2: "较完善(2-3分)", title3: "一般(0-1分)", score: 5, grade: null, },

        { rowspan: 2, oneLevel: "7.风险分析(10分)", towLevel: "A:项目组织实施风险(6分)", title1: "风险小(5-6分)", title2: "有一定风险(3-4分)", title3: "风险较大(0-2分)", score: 6, grade: null, },
        { rowspan: 0, oneLevel: "7.风险分析(10分)", towLevel: "B:目标实现风险(4分)", title1: "风险小(4分)", title2: "有一定风险(3分)", title3: "风险较大(0分)", score: 4, grade: null, },
      ],
      remark: "",
      supportState: null,
      evaluationType: 0,
      totalScore: 0,
      plainOptions,
      disabled: true,
    };
  },
  created() {
    this.tableData[0].grade = this.value.score1
    this.tableData[1].grade = this.value.score2
    this.tableData[2].grade = this.value.score3
    this.tableData[3].grade = this.value.score4
    this.tableData[4].grade = this.value.score5
    this.tableData[5].grade = this.value.score6
    this.tableData[6].grade = this.value.score7
    this.tableData[7].grade = this.value.score8
    this.tableData[8].grade = this.value.score9
    this.tableData[9].grade = this.value.score10
    this.tableData[10].grade = this.value.score11
    this.tableData[11].grade = this.value.score12
    this.tableData[12].grade = this.value.score13
    this.tableData[13].grade = this.value.score14
    this.tableData[14].grade = this.value.score15
    this.tableData[15].grade = this.value.score16
    this.tableData[16].grade = this.value.score17
    this.remark = this.value.remark
    this.supportState = this.value.supportState
    this.evaluationType = this.value.evaluationType
    this.calTotalScore()
  },
  methods: {
    numberChange(index) {
      switch (index + 1) {
        case 1:
          this.value.score1 = this.tableData[index].grade;
          break;
        case 2:
          this.value.score2 = this.tableData[index].grade;
          break;
        case 3:
          this.value.score3 = this.tableData[index].grade;
          break;
        case 4:
          this.value.score4 = this.tableData[index].grade;
          break;
        case 5:
          this.value.score5 = this.tableData[index].grade;
          break;
        case 6:
          this.value.score6 = this.tableData[index].grade;
          break;
        case 7:
          this.value.score7 = this.tableData[index].grade;
          break;
        case 8:
          this.value.score8 = this.tableData[index].grade;
          break;
        case 9:
          this.value.score9 = this.tableData[index].grade;
          break;
        case 10:
          this.value.score10 = this.tableData[index].grade;
          break;
        case 11:
          this.value.score11 = this.tableData[index].grade;
          break;
        case 12:
          this.value.score12 = this.tableData[index].grade;
          break;
        case 13:
          this.value.score13 = this.tableData[index].grade;
          break;
        case 14:
          this.value.score14 = this.tableData[index].grade;
          break;
        case 15:
          this.value.score15 = this.tableData[index].grade;
          break;
        case 16:
          this.value.score16 = this.tableData[index].grade;
          break;
        case 17:
          this.value.score17 = this.tableData[index].grade;
          break;
      }
      this.calTotalScore()
    },
    calTotalScore() {
      this.totalScore = 0;
      this.tableData.forEach((e) => {
        if (e.grade != null) {
          this.totalScore += e.grade;
        }
        this.DetermineType()
      });
    },
    DetermineType() {
      if (this.totalScore >= 80)
        this.evaluationType = 1
      else if (this.totalScore < 80 && this.totalScore >= 60)
        this.evaluationType = 2
      else
        this.evaluationType = 3
      this.EcaluationChange()
    },
    AreaChange() {
      this.value.remark = this.remark
    },
    supportStateChange() {
      this.value.supportState = this.supportState
    },
    EcaluationChange() {
      this.value.evaluationType = this.evaluationType
    }
  },
};
</script>

<style scoped lang="less">
.tab-content {
  ::v-deep .ant-row {
    border: 0 !important;
  }
  ::v-deep .ant-row .ant-col {
    border: 0 !important;
    min-height: 30px !important;
  }
  ::v-deep .ant-form-item-control {
    line-height: 30px !important;
  }
  ::v-deep .ant-form-item {
    margin: 0 !important;
  }
  ::v-deep .ant-input-number {
    height: 30px !important;
  }
  ::v-deep .ant-input-number-input {
    height: 30px !important;
  }
}
table,
tr,
td {
  border: 1px solid #f0f0f0;
  font-size: 10pt;
  text-align: left;
  line-height: 25px;
  height: 25px;
}
.bg-title {
  background-color: #f8fafc;
  font-weight: bold;
  text-align: center;
}
.target-value {
  text-align: center;
}
</style>