licailing 5 лет назад
Родитель
Сommit
62c9a10516

+ 21 - 0
src/main/java/com/izouma/wenlvju/domain/GradeRule.java

@@ -0,0 +1,21 @@
+package com.izouma.wenlvju.domain;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.Entity;
+
+@Data
+@Builder
+@Entity
+@AllArgsConstructor
+@NoArgsConstructor
+public class GradeRule extends BaseEntity {
+    private String name;
+    private String content;
+    private int    score;
+    private String parentName;
+    private int    parentScore;
+}

+ 32 - 0
src/main/java/com/izouma/wenlvju/domain/RateExpertAudit.java

@@ -1,6 +1,7 @@
 package com.izouma.wenlvju.domain;
 
 import com.izouma.wenlvju.converter.StringArrayConverter;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
@@ -23,6 +24,37 @@ public class RateExpertAudit extends BaseEntity {
 
     private Long rateId;
 
+    @ApiModelProperty(value = "考级组织")
+    private int examOrganization;
+    @ApiModelProperty(value = "考点设置")
+    private int examSite;
+    @ApiModelProperty(value = "考场设置")
+    private int examRoom;
+    @ApiModelProperty(value = "环境要求")
+    private int environment;
+    @ApiModelProperty(value = "安全保障")
+    private int safety;
+    @ApiModelProperty(value = "宣传报备")
+    private int promote;
+    @ApiModelProperty(value = "考级报名")
+    private int signUp;
+    @ApiModelProperty(value = "考试准备")
+    private int examPreparation;
+    @ApiModelProperty(value = "考场服务")
+    private int examService;
+    @ApiModelProperty(value = "考务考官")
+    private int examiner;
+    @ApiModelProperty(value = "考级规范")
+    private int specification;
+    @ApiModelProperty(value = "视频器材")
+    private int video;
+    @ApiModelProperty(value = "考试成绩")
+    private int score;
+    @ApiModelProperty(value = "艺术培训")
+    private int artTrain;
+    @ApiModelProperty(value = "艺术成果")
+    private int artResult;
+
     @Column(columnDefinition = "TEXT")
     @Convert(converter = StringArrayConverter.class)
     private List<String> img;

+ 16 - 0
src/main/java/com/izouma/wenlvju/repo/GradeRuleRepo.java

@@ -0,0 +1,16 @@
+package com.izouma.wenlvju.repo;
+
+import com.izouma.wenlvju.domain.GradeRule;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+
+import javax.transaction.Transactional;
+
+public interface GradeRuleRepo extends JpaRepository<GradeRule, Long>, JpaSpecificationExecutor<GradeRule> {
+    @Query("update GradeRule t set t.del = true where t.id = ?1")
+    @Modifying
+    @Transactional
+    void softDelete(Long id);
+}

+ 20 - 0
src/main/java/com/izouma/wenlvju/service/GradeRuleService.java

@@ -0,0 +1,20 @@
+package com.izouma.wenlvju.service;
+
+import com.izouma.wenlvju.domain.GradeRule;
+import com.izouma.wenlvju.dto.PageQuery;
+import com.izouma.wenlvju.repo.GradeRuleRepo;
+import com.izouma.wenlvju.utils.JpaUtils;
+import lombok.AllArgsConstructor;
+import org.springframework.data.domain.Page;
+import org.springframework.stereotype.Service;
+
+@Service
+@AllArgsConstructor
+public class GradeRuleService {
+
+    private GradeRuleRepo gradeRuleRepo;
+
+    public Page<GradeRule> all(PageQuery pageQuery) {
+        return gradeRuleRepo.findAll(JpaUtils.toSpecification(pageQuery, GradeRule.class), JpaUtils.toPageRequest(pageQuery));
+    }
+}

+ 60 - 0
src/main/java/com/izouma/wenlvju/web/GradeRuleController.java

@@ -0,0 +1,60 @@
+package com.izouma.wenlvju.web;
+import com.izouma.wenlvju.domain.GradeRule;
+import com.izouma.wenlvju.service.GradeRuleService;
+import com.izouma.wenlvju.dto.PageQuery;
+import com.izouma.wenlvju.exception.BusinessException;
+import com.izouma.wenlvju.repo.GradeRuleRepo;
+import com.izouma.wenlvju.utils.ObjUtils;
+import com.izouma.wenlvju.utils.excel.ExcelUtils;
+import lombok.AllArgsConstructor;
+import org.springframework.data.domain.Page;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.List;
+
+@RestController
+@RequestMapping("/gradeRule")
+@AllArgsConstructor
+public class GradeRuleController extends BaseController {
+    private GradeRuleService gradeRuleService;
+    private GradeRuleRepo gradeRuleRepo;
+
+    //@PreAuthorize("hasRole('ADMIN')")
+    @PostMapping("/save")
+    public GradeRule save(@RequestBody GradeRule record) {
+        if (record.getId() != null) {
+            GradeRule orig = gradeRuleRepo.findById(record.getId()).orElseThrow(new BusinessException("无记录"));
+            ObjUtils.merge(orig, record);
+            return gradeRuleRepo.save(orig);
+        }
+        return gradeRuleRepo.save(record);
+    }
+
+
+    //@PreAuthorize("hasRole('ADMIN')")
+    @PostMapping("/all")
+    public Page<GradeRule> all(@RequestBody PageQuery pageQuery) {
+        return gradeRuleService.all(pageQuery);
+    }
+
+    @GetMapping("/get/{id}")
+    public GradeRule get(@PathVariable Long id) {
+        return gradeRuleRepo.findById(id).orElseThrow(new BusinessException("无记录"));
+    }
+
+    @PostMapping("/del/{id}")
+    public void del(@PathVariable Long id) {
+        gradeRuleRepo.softDelete(id);
+    }
+
+    @GetMapping("/excel")
+    @ResponseBody
+    public void excel(HttpServletResponse response, PageQuery pageQuery) throws IOException {
+        List<GradeRule> data = all(pageQuery).getContent();
+        ExcelUtils.export(response, data);
+    }
+}
+

+ 1 - 0
src/main/resources/genjson/GradeRule.json

@@ -0,0 +1 @@
+{"tableName":"GradeRule","className":"GradeRule","remark":"评分细则","genTable":true,"genClass":true,"genList":true,"genForm":true,"genRouter":true,"javaPath":"/Users/qiufangchao/Desktop/project/wenlvju/src/main/java/com/izouma/wenlvju","viewPath":"/Users/qiufangchao/Desktop/project/wenlvju/src/main/vue/src/views","routerPath":"/Users/qiufangchao/Desktop/project/wenlvju/src/main/vue/src","resourcesPath":"/Users/qiufangchao/Desktop/project/wenlvju/src/main/resources","dataBaseType":"Mysql","fields":[{"name":"parentName","modelName":"parentName","remark":"一级指标","showInList":true,"showInForm":true,"formType":"singleLineText"},{"name":"parentScore","modelName":"parentScore","remark":"一级指标分数","showInList":true,"showInForm":true,"formType":"number"},{"name":"name","modelName":"name","remark":"二级指标","showInList":true,"showInForm":true,"formType":"singleLineText"},{"name":"content","modelName":"content","remark":"评定项目和要求","showInList":true,"showInForm":true,"formType":"textarea"},{"name":"score","modelName":"score","remark":"分值","showInList":true,"showInForm":true,"formType":"number"}],"readTable":false,"dataSourceCode":"dataSource","genJson":"","subtables":[],"update":false,"basePackage":"com.izouma.wenlvju","tablePackage":"com.izouma.wenlvju.domain.GradeRule"}

+ 24 - 0
src/main/vue/src/router.js

@@ -291,6 +291,14 @@ const router = new Router({
                         title: '评星定级详情'
                     }
                 },
+                {
+                    path: '/rateGrade',
+                    name: 'RateGrade',
+                    component: () => import(/* webpackChunkName: "rateGrade" */ '@/views/RateGrade.vue'),
+                    meta: {
+                        title: '打分'
+                    }
+                },
                 {
                     path: '/rateList',
                     name: 'RateList',
@@ -348,6 +356,22 @@ const router = new Router({
                     meta: {
                         title: '艺术分类'
                     }
+                },
+                {
+                    path: '/gradeRuleEdit',
+                    name: 'GradeRuleEdit',
+                    component: () => import(/* webpackChunkName: "gradeRuleEdit" */ '@/views/GradeRuleEdit.vue'),
+                    meta: {
+                        title: '评分细则编辑'
+                    }
+                },
+                {
+                    path: '/gradeRuleList',
+                    name: 'GradeRuleList',
+                    component: () => import(/* webpackChunkName: "gradeRuleList" */ '@/views/GradeRuleList.vue'),
+                    meta: {
+                        title: '评分细则'
+                    }
                 }
                 /**INSERT_LOCATION**/
             ]

+ 104 - 0
src/main/vue/src/views/GradeRuleEdit.vue

@@ -0,0 +1,104 @@
+<template>
+    <div class="edit-view">
+        <el-form
+            :model="formData"
+            :rules="rules"
+            ref="form"
+            label-width="122px"
+            label-position="right"
+            size="small"
+            style="max-width: 500px;"
+        >
+            <el-form-item prop="parentName" label="一级指标">
+                <el-input v-model="formData.parentName"></el-input>
+            </el-form-item>
+            <el-form-item prop="parentScore" label="一级指标分数">
+                <el-input-number type="number" v-model="formData.parentScore"></el-input-number>
+            </el-form-item>
+            <el-form-item prop="name" label="二级指标">
+                <el-input v-model="formData.name"></el-input>
+            </el-form-item>
+            <el-form-item prop="content" label="评定项目和要求">
+                <el-input type="textarea" v-model="formData.content"></el-input>
+            </el-form-item>
+            <el-form-item prop="score" label="分值">
+                <el-input-number type="number" v-model="formData.score"></el-input-number>
+            </el-form-item>
+            <el-form-item>
+                <el-button @click="onSave" :loading="saving" type="primary">保存</el-button>
+                <el-button @click="onDelete" :loading="saving" type="danger" v-if="formData.id">删除 </el-button>
+                <el-button @click="$router.go(-1)">取消</el-button>
+            </el-form-item>
+        </el-form>
+    </div>
+</template>
+<script>
+export default {
+    name: 'GradeRuleEdit',
+    created() {
+        if (this.$route.query.id) {
+            this.$http
+                .get('gradeRule/get/' + this.$route.query.id)
+                .then(res => {
+                    this.formData = res;
+                })
+                .catch(e => {
+                    console.log(e);
+                    this.$message.error(e.error);
+                });
+        }
+    },
+    data() {
+        return {
+            saving: false,
+            formData: {},
+            rules: {}
+        };
+    },
+    methods: {
+        onSave() {
+            this.$refs.form.validate(valid => {
+                if (valid) {
+                    this.submit();
+                } else {
+                    return false;
+                }
+            });
+        },
+        submit() {
+            let data = { ...this.formData };
+
+            this.saving = true;
+            this.$http
+                .post('/gradeRule/save', data, { body: 'json' })
+                .then(res => {
+                    this.saving = false;
+                    this.$message.success('成功');
+                    this.$router.go(-1);
+                })
+                .catch(e => {
+                    console.log(e);
+                    this.saving = false;
+                    this.$message.error(e.error);
+                });
+        },
+        onDelete() {
+            this.$alert('删除将无法恢复,确认要删除么?', '警告', { type: 'error' })
+                .then(() => {
+                    return this.$http.post(`/gradeRule/del/${this.formData.id}`);
+                })
+                .then(() => {
+                    this.$message.success('删除成功');
+                    this.$router.go(-1);
+                })
+                .catch(e => {
+                    if (e !== 'cancel') {
+                        console.log(e);
+                        this.$message.error((e || {}).error || '删除失败');
+                    }
+                });
+        }
+    }
+};
+</script>
+<style lang="less" scoped></style>

+ 183 - 0
src/main/vue/src/views/GradeRuleList.vue

@@ -0,0 +1,183 @@
+<template>
+    <div class="list-view">
+        <div class="filters-container">
+            <el-input placeholder="输入关键字" v-model="search" clearable class="filter-item"></el-input>
+            <el-button @click="getData" type="primary" icon="el-icon-search" class="filter-item">搜索 </el-button>
+            <el-button @click="addRow" type="primary" icon="el-icon-plus" class="filter-item">添加 </el-button>
+            <el-button
+                @click="download"
+                type="primary"
+                icon="el-icon-download"
+                :loading="downloading"
+                class="filter-item"
+                >导出EXCEL
+            </el-button>
+        </div>
+        <el-table
+            :data="tableData"
+            row-key="id"
+            ref="table"
+            header-row-class-name="table-header-row"
+            header-cell-class-name="table-header-cell"
+            row-class-name="table-row"
+            cell-class-name="table-cell"
+            :height="tableHeight"
+            :span-method="objectSpanMethod"
+        >
+            <el-table-column v-if="multipleMode" align="center" type="selection" width="50"> </el-table-column>
+            <!-- <el-table-column prop="id" label="ID" width="100"> </el-table-column> -->
+            <el-table-column prop="parentName" label="一级指标">
+                <template slot-scope="{ row }">
+                    <span>{{ row.parentName }}</span>
+                    <div>
+                        <span>{{ row.parentScore }}分</span>
+                    </div>
+                </template>
+            </el-table-column>
+            <!-- <el-table-column prop="parentScore" label="一级指标分数"> </el-table-column> -->
+            <el-table-column prop="name" label="二级指标"> </el-table-column>
+            <el-table-column prop="content" label="评定项目和要求" min-width="130"> </el-table-column>
+            <el-table-column prop="score" label="分值"> </el-table-column>
+            <el-table-column label="操作" align="center" fixed="right" min-width="100">
+                <template slot-scope="{ row }">
+                    <el-button @click="editRow(row)" type="primary" size="mini" plain>编辑</el-button>
+                    <el-button @click="deleteRow(row)" type="danger" size="mini" plain>删除</el-button>
+                </template>
+            </el-table-column>
+        </el-table>
+        <div class="pagination-wrapper">
+            <!-- <div class="multiple-mode-wrapper">
+                <el-button v-if="!multipleMode" @click="toggleMultipleMode(true)">批量编辑</el-button>
+                <el-button-group v-else>
+                    <el-button @click="operation1">批量操作1</el-button>
+                    <el-button @click="operation2">批量操作2</el-button>
+                    <el-button @click="toggleMultipleMode(false)">取消</el-button>
+                </el-button-group>
+            </div> -->
+            <el-pagination
+                background
+                @size-change="onSizeChange"
+                @current-change="onCurrentChange"
+                :current-page="page"
+                :page-sizes="[10, 20, 30, 40, 50]"
+                :page-size="pageSize"
+                layout="total, sizes, prev, pager, next, jumper"
+                :total="totalElements"
+            >
+            </el-pagination>
+        </div>
+    </div>
+</template>
+<script>
+import { mapState } from 'vuex';
+import pageableTable from '@/mixins/pageableTable';
+
+export default {
+    name: 'GradeRuleList',
+    mixins: [pageableTable],
+    data() {
+        return {
+            multipleMode: false,
+            search: '',
+            url: '/gradeRule/all',
+            downloading: false
+        };
+    },
+    computed: {
+        selection() {
+            return this.$refs.table.selection.map(i => i.id);
+        }
+    },
+    methods: {
+        beforeGetData() {
+            return { search: this.search };
+        },
+        toggleMultipleMode(multipleMode) {
+            this.multipleMode = multipleMode;
+            if (!multipleMode) {
+                this.$refs.table.clearSelection();
+            }
+        },
+        addRow() {
+            this.$router.push({
+                path: '/gradeRuleEdit',
+                query: {
+                    ...this.$route.query
+                }
+            });
+        },
+        editRow(row) {
+            this.$router.push({
+                path: '/gradeRuleEdit',
+                query: {
+                    id: row.id
+                }
+            });
+        },
+        download() {
+            this.downloading = true;
+            this.$axios
+                .get('/gradeRule/excel', {
+                    responseType: 'blob',
+                    params: { size: 10000 }
+                })
+                .then(res => {
+                    console.log(res);
+                    this.downloading = false;
+                    const downloadUrl = window.URL.createObjectURL(new Blob([res.data]));
+                    const link = document.createElement('a');
+                    link.href = downloadUrl;
+                    link.setAttribute('download', res.headers['content-disposition'].split('filename=')[1]);
+                    document.body.appendChild(link);
+                    link.click();
+                    link.remove();
+                })
+                .catch(e => {
+                    console.log(e);
+                    this.downloading = false;
+                    this.$message.error(e.error);
+                });
+        },
+        operation1() {
+            this.$notify({
+                title: '提示',
+                message: this.selection
+            });
+        },
+        operation2() {
+            this.$message('操作2');
+        },
+        deleteRow(row) {
+            this.$alert('删除将无法恢复,确认要删除么?', '警告', { type: 'error' })
+                .then(() => {
+                    return this.$http.post(`/gradeRule/del/${row.id}`);
+                })
+                .then(() => {
+                    this.$message.success('删除成功');
+                    this.getData();
+                })
+                .catch(e => {
+                    if (e !== 'cancel') {
+                        this.$message.error(e.error);
+                    }
+                });
+        },
+        objectSpanMethod({ row, column, rowIndex, columnIndex }) {
+            if (columnIndex === 0) {
+                if (rowIndex % 2 === 0) {
+                    return {
+                        rowspan: 2,
+                        colspan: 1
+                    };
+                } else {
+                    return {
+                        rowspan: 0,
+                        colspan: 0
+                    };
+                }
+            }
+        }
+    }
+};
+</script>
+<style lang="less" scoped></style>

+ 301 - 0
src/main/vue/src/views/RateGrade.vue

@@ -0,0 +1,301 @@
+<template>
+    <div class="list-view">
+        <div class="filters-container">
+            <!-- <el-input placeholder="输入关键字" v-model="search" clearable class="filter-item"></el-input>
+            <el-button @click="getData" type="primary" icon="el-icon-search" class="filter-item">搜索 </el-button> -->
+            <!-- <el-button @click="addRow" type="primary" icon="el-icon-plus" class="filter-item">创建申请 </el-button> -->
+            <!-- <el-button
+                @click="download"
+                type="primary"
+                icon="el-icon-download"
+                :loading="downloading"
+                class="filter-item"
+                >导出EXCEL
+            </el-button> -->
+        </div>
+        <el-table
+            :data="tableData"
+            row-key="id"
+            ref="table"
+            header-row-class-name="table-header-row"
+            header-cell-class-name="table-header-cell"
+            row-class-name="table-row"
+            cell-class-name="table-cell"
+            :height="tableHeight"
+        >
+            <el-table-column v-if="multipleMode" align="center" type="selection" width="50"> </el-table-column>
+            <!-- <el-table-column prop="id" label="ID" width="100"> </el-table-column> -->
+            <el-table-column prop="organizer" label="一级指标"> </el-table-column>
+            <el-table-column prop="createdAt" label="二级指标"></el-table-column>
+            <el-table-column prop="year" label="评定项目和要求"> </el-table-column>
+            <el-table-column prop="status" label="分值" :formatter="statusFormatter"> </el-table-column>
+            <el-table-column label="评定分" align="right" fixed="right" min-width="150">
+                <template slot-scope="{ row }">
+                    <el-button
+                        v-if="row.status === 'FIRST_REVIEW_PENDING'"
+                        :loading="row.loading"
+                        @click="audit(row, 'REVIEW_PENDING', '通过')"
+                        type="success"
+                        size="mini"
+                        plain
+                    >
+                        通过
+                    </el-button>
+                    <el-button
+                        v-if="row.status === 'FIRST_REVIEW_PENDING'"
+                        :loading="row.loading"
+                        @click="dismiss(row)"
+                        type="warning"
+                        size="mini"
+                        plain
+                    >
+                        驳回
+                    </el-button>
+                    <el-button @click="sorce(row)" type="primary" size="mini" plain v-if="row.status === 'EXPERT_PASS'"
+                        >查看分数</el-button
+                    >
+                    <el-button
+                        @click="supervision(row.id)"
+                        type="success"
+                        size="mini"
+                        plain
+                        v-if="(row.status === 'ASSIGN_EXPERT') & display"
+                        >分配专家组</el-button
+                    >
+                    <!-- <el-button
+                        @click="supervision(row.id)"
+                        type="success"
+                        size="mini"
+                        plain
+                        v-if="(row.status === 'SUBMIT_GRADE' || row.status === 'REVIEW_PENDING') & display"
+                        >查看专家组</el-button
+                    > -->
+                    <el-button @click="editRow(row)" type="primary" size="mini" plain>查看附件</el-button>
+                    <!-- <el-button @click="deleteRow(row)" type="danger" size="mini" plain>删除</el-button> -->
+                </template>
+            </el-table-column>
+        </el-table>
+        <div class="pagination-wrapper">
+            <!-- <div class="multiple-mode-wrapper">
+                <el-button v-if="!multipleMode" @click="toggleMultipleMode(true)">批量编辑</el-button>
+                <el-button-group v-else>
+                    <el-button @click="operation1">批量操作1</el-button>
+                    <el-button @click="operation2">批量操作2</el-button>
+                    <el-button @click="toggleMultipleMode(false)">取消</el-button>
+                </el-button-group>
+            </div> -->
+            <!-- <el-pagination
+                background
+                @size-change="onSizeChange"
+                @current-change="onCurrentChange"
+                :current-page="page"
+                :page-sizes="[10, 20, 30, 40, 50]"
+                :page-size="pageSize"
+                layout="total, sizes, prev, pager, next, jumper"
+                :total="totalElements"
+            >
+            </el-pagination> -->
+        </div>
+    </div>
+</template>
+<script>
+import { mapState } from 'vuex';
+import pageableTable from '@/mixins/pageableTable';
+
+export default {
+    name: 'RateList',
+    mixins: [pageableTable],
+    data() {
+        return {
+            multipleMode: false,
+            search: '',
+            // url: '/rate/all2',
+            downloading: false,
+            statusOptions: [
+                { label: '等待初审', value: 'FIRST_REVIEW_PENDING' },
+                { label: '待分配专家组', value: 'ASSIGN_EXPERT' },
+                { label: '待复审', value: 'REVIEW_PENDING' },
+                { label: '初审驳回', value: 'FIRST_REVIEW_DENY' },
+                { label: '待提交成绩', value: 'SUBMIT_GRADE' },
+                { label: '专家拒绝', value: 'EXPERT_DENY' }
+            ],
+            supervisor: [],
+            dialogVisible: false,
+            rateId: '',
+            display: false
+        };
+    },
+    created() {
+        this.getAdmin();
+    },
+    computed: {
+        selection() {
+            return this.$refs.table.selection.map(i => i.id);
+        },
+        ...mapState(['userInfo'])
+    },
+    mounted() {},
+    methods: {
+        statusFormatter(row, column, cellValue, index) {
+            let selectedOption = this.statusOptions.find(i => i.value === cellValue);
+            if (selectedOption) {
+                return selectedOption.label;
+            }
+            return '';
+        },
+        beforeGetData() {},
+        toggleMultipleMode(multipleMode) {
+            this.multipleMode = multipleMode;
+            if (!multipleMode) {
+                this.$refs.table.clearSelection();
+            }
+        },
+        addRow() {
+            this.$router.push({
+                path: '/rateEdit',
+                query: {
+                    ...this.$route.query
+                }
+            });
+        },
+        editRow(row) {
+            this.$router.push({
+                // path: '/rateAudit',
+                path: '/organization',
+                query: {
+                    // organId: row.organizationId,
+                    // rateId: row.id
+                    id: row.id,
+                    status: row.status
+                }
+            });
+        },
+        download() {
+            this.downloading = true;
+            this.$axios
+                .get('/rate/excel', {
+                    responseType: 'blob',
+                    params: { size: 10000 }
+                })
+                .then(res => {
+                    console.log(res);
+                    this.downloading = false;
+                    const downloadUrl = window.URL.createObjectURL(new Blob([res.data]));
+                    const link = document.createElement('a');
+                    link.href = downloadUrl;
+                    link.setAttribute('download', res.headers['content-disposition'].split('filename=')[1]);
+                    document.body.appendChild(link);
+                    link.click();
+                    link.remove();
+                })
+                .catch(e => {
+                    console.log(e);
+                    this.downloading = false;
+                    this.$message.error(e.error);
+                });
+        },
+        operation1() {
+            this.$notify({
+                title: '提示',
+                message: this.selection
+            });
+        },
+        operation2() {
+            this.$message('操作2');
+        },
+        deleteRow(row) {
+            this.$alert('删除将无法恢复,确认要删除么?', '警告', { type: 'error' })
+                .then(() => {
+                    return this.$http.post(`/rate/del/${row.id}`);
+                })
+                .then(() => {
+                    this.$message.success('删除成功');
+                    this.getData();
+                })
+                .catch(e => {
+                    if (e !== 'cancel') {
+                        this.$message.error(e.error);
+                    }
+                });
+        },
+        audit(row, status, remark) {
+            this.$set(row, 'loading', true);
+            this.$http
+                .post('/rate/audit', {
+                    id: row.id,
+                    status: status,
+                    score: 0,
+                    remark: remark
+                })
+                .then(res => {
+                    this.$set(row, 'loading', false);
+                    this.$message.success('OK');
+                    this.getData();
+                })
+                .catch(e => {
+                    console.log(e);
+                    this.$set(row, 'loading', false);
+                    this.$message.error(e.error);
+                });
+        },
+        dismiss(row) {
+            this.$prompt('请输入驳回缘由', '提示', {
+                confirmButtonText: '确定',
+                cancelButtonText: '取消'
+            })
+                .then(({ value }) => {
+                    this.audit(row, 'FIRST_REVIEW_DENY', value);
+                })
+                .catch(() => {
+                    this.$message({
+                        type: 'info',
+                        message: '取消输入'
+                    });
+                });
+        },
+        supervision(id) {
+            this.$router.push({
+                path: '/assignExpert',
+                query: {
+                    id: id
+                }
+            });
+            // this.dialogVisible = true;
+            // this.rateId = id;
+        },
+        addRegulatory(id) {
+            this.$http
+                .post('/rate/addExpert', {
+                    id: this.rateId,
+                    userId: id
+                })
+                .then(res => {
+                    this.saving = false;
+                    this.$message.success('成功');
+                    this.dialogVisible = false;
+                    this.recordId = '';
+                    this.getData();
+                })
+                .catch(e => {
+                    console.log(e);
+                    this.saving = false;
+                    this.$message.error(e.error);
+                });
+        },
+        sorce(row) {
+            this.$alert('专家打出的分数为:' + row.score, '分数', {
+                confirmButtonText: '确定'
+            });
+        },
+        getAdmin() {
+            let data = this.userInfo.authorities;
+            data.forEach(element => {
+                if (element.name === 'ROLE_ADMIN') {
+                    this.display = true;
+                }
+            });
+        }
+    }
+};
+</script>
+<style lang="less" scoped></style>

+ 1 - 0
src/main/vue/src/views/RateList.vue

@@ -54,6 +54,7 @@
                     <el-button @click="sorce(row)" type="primary" size="mini" plain v-if="row.status === 'EXPERT_PASS'"
                         >查看分数</el-button
                     >
+                    <el-button v-if="row.status === 'SUBMIT_GRADE'">填写分数</el-button>
                     <el-button
                         @click="supervision(row.id)"
                         type="success"