فهرست منبع

Merge branch 'dev' of http://git.izouma.com/licailing/wenlvju into dev

panhui 5 سال پیش
والد
کامیت
ec62dffb0a

+ 0 - 7
src/main/java/com/izouma/wenlvju/domain/GradingOrganization.java

@@ -1,7 +0,0 @@
-package com.izouma.wenlvju.domain;
-
-import io.swagger.annotations.ApiModel;
-
-@ApiModel(value = "考级机构")
-public class GradingOrganization {
-}

+ 2 - 0
src/main/java/com/izouma/wenlvju/repo/RateExpertAuditRepo.java

@@ -13,4 +13,6 @@ public interface RateExpertAuditRepo extends JpaRepository<RateExpertAudit, Long
     @Modifying
     @Modifying
     @Transactional
     @Transactional
     void softDelete(Long id);
     void softDelete(Long id);
+
+    RateExpertAudit findByRateId(Long rateId);
 }
 }

+ 11 - 2
src/main/java/com/izouma/wenlvju/web/RateExpertAuditController.java

@@ -1,10 +1,13 @@
 package com.izouma.wenlvju.web;
 package com.izouma.wenlvju.web;
+
+import cn.hutool.core.util.ObjectUtil;
 import com.izouma.wenlvju.domain.RateExpertAudit;
 import com.izouma.wenlvju.domain.RateExpertAudit;
 import com.izouma.wenlvju.service.RateExpertAuditService;
 import com.izouma.wenlvju.service.RateExpertAuditService;
 import com.izouma.wenlvju.dto.PageQuery;
 import com.izouma.wenlvju.dto.PageQuery;
 import com.izouma.wenlvju.exception.BusinessException;
 import com.izouma.wenlvju.exception.BusinessException;
 import com.izouma.wenlvju.repo.RateExpertAuditRepo;
 import com.izouma.wenlvju.repo.RateExpertAuditRepo;
 import com.izouma.wenlvju.utils.ObjUtils;
 import com.izouma.wenlvju.utils.ObjUtils;
+import com.izouma.wenlvju.utils.SecurityUtils;
 import com.izouma.wenlvju.utils.excel.ExcelUtils;
 import com.izouma.wenlvju.utils.excel.ExcelUtils;
 import lombok.AllArgsConstructor;
 import lombok.AllArgsConstructor;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Page;
@@ -20,16 +23,22 @@ import java.util.List;
 @AllArgsConstructor
 @AllArgsConstructor
 public class RateExpertAuditController extends BaseController {
 public class RateExpertAuditController extends BaseController {
     private RateExpertAuditService rateExpertAuditService;
     private RateExpertAuditService rateExpertAuditService;
-    private RateExpertAuditRepo rateExpertAuditRepo;
+    private RateExpertAuditRepo    rateExpertAuditRepo;
 
 
     //@PreAuthorize("hasRole('ADMIN')")
     //@PreAuthorize("hasRole('ADMIN')")
     @PostMapping("/save")
     @PostMapping("/save")
     public RateExpertAudit save(@RequestBody RateExpertAudit record) {
     public RateExpertAudit save(@RequestBody RateExpertAudit record) {
         if (record.getId() != null) {
         if (record.getId() != null) {
-            RateExpertAudit orig = rateExpertAuditRepo.findById(record.getId()).orElseThrow(new BusinessException("无记录"));
+            RateExpertAudit orig = rateExpertAuditRepo.findById(record.getId())
+                    .orElseThrow(new BusinessException("无记录"));
             ObjUtils.merge(orig, record);
             ObjUtils.merge(orig, record);
             return rateExpertAuditRepo.save(orig);
             return rateExpertAuditRepo.save(orig);
         }
         }
+        RateExpertAudit byRateId = rateExpertAuditRepo.findByRateId(record.getRateId());
+        if (ObjectUtil.isNotNull(byRateId)){
+            throw new BusinessException("已评分");
+        }
+        record.setUserId(SecurityUtils.getAuthenticatedUser().getId());
         return rateExpertAuditRepo.save(record);
         return rateExpertAuditRepo.save(record);
     }
     }
 
 

+ 155 - 0
src/main/vue/src/mixins/expert.js

@@ -0,0 +1,155 @@
+export default {
+    data() {
+        return {
+            categories: [
+                // {
+                // label: '考级管理',
+                // score: 20,
+                // // icon: 'icon_kaojiguanli.svg',
+                // children: [
+                {
+                    parentLabel: '考级管理',
+                    parentScore: 20,
+                    label: '考级组织',
+                    value: 'examOrganization',
+                    sub: '有专门负责考级活动的部门和人员,考级工作方案内容详实细致。',
+                    score: 3
+                },
+                {
+                    parentLabel: '考级管理',
+                    parentScore: 20,
+                    label: '考点设置',
+                    value: 'examSite',
+                    sub: '考点选择、考点布局、功能分区、设备设施、临建设施等方面符合国家标准 要求,提供个性化服务。',
+                    score: 4
+                },
+                {
+                    parentLabel: '考级管理',
+                    parentScore: 20,
+                    label: '考场设置',
+                    value: 'examRoom',
+                    sub: '考场设置体现服务优先、相对集中和环境整洁原则,考场设备、设施符合国 家标准要求。',
+                    score: 4
+                },
+                {
+                    parentLabel: '考级管理',
+                    parentScore: 20,
+                    label: '环境要求',
+                    value: 'environment',
+                    sub: '考点和考场环境、基本设施、卫生清洁、标志标识符合国家标准要求。',
+                    score: 4
+                },
+                {
+                    parentLabel: '考级管理',
+                    parentScore: 20,
+                    label: '安全保障',
+                    value: 'safety',
+                    sub:
+                        '有开展艺术考级活动的卫生和安全应急预案,安保资源配置、考点安全巡查、 考场人员管控、考试信息安全符合相关国家标准要求。',
+                    score: 5
+                },
+                //     ]
+                // },
+                // {
+                //     label: '考级服务',
+                //     score: 30,
+                //     // icon: 'icon_kaojifuwu.svg',
+                //     children: [
+                {
+                    parentLabel: '考级服务',
+                    parentScore: 30,
+                    label: '宣传报备',
+                    value: 'promote',
+                    sub: '有完备的考前宣传方案,考生和家长获取考级信息便捷准确,考前报备信息 及时准确。',
+                    score: 2
+                },
+                {
+                    parentLabel: '考级服务',
+                    parentScore: 30,
+                    label: '考级报名',
+                    value: 'signUp',
+                    sub: '考试报名符合国家标准要求,有规范的报名表(准考证)、收据和考生统计表。',
+                    score: 2
+                },
+                {
+                    parentLabel: '考级服务',
+                    parentScore: 30,
+                    label: '考试准备',
+                    value: 'examPreparation',
+                    sub: '考试工作协调会、人员培训和考场布置符合国家标准要求。',
+                    score: 3
+                },
+                {
+                    parentLabel: '考级服务',
+                    parentScore: 30,
+                    label: '考场服务',
+                    value: 'examService',
+                    sub:
+                        '制订规范化、人性化考场服务方案;考试服务流程清晰,5见场服务设施完善,提供 考生引导服务,显著位置张贴考级机构《考级简章》、考级机构统一模板的考官和工作人员信息。每个考场、每个考官当日执考人数上限符合《实施细则》要求。',
+                    score: 5
+                },
+                {
+                    parentLabel: '考级服务',
+                    parentScore: 30,
+                    label: '考务考官',
+                    value: 'examiner',
+                    sub:
+                        '考务人员遵守各项规定,考官执考规范,着装整洁、执证上岗。考试期间和 考后试卷收回工作符合国家标准;考官管理及职责符合《实施细则》要求。',
+                    score: 5
+                },
+                {
+                    parentLabel: '考级服务',
+                    parentScore: 30,
+                    label: '考级规范',
+                    value: 'specification',
+                    sub:
+                        '在签约考级机构协议范围内以艺术考级机构名义组织艺术考级活动,使用规 范的考级教材,考级范围合规,考前备案与考试内容一致。',
+                    score: 5
+                },
+                {
+                    parentLabel: '考级服务',
+                    parentScore: 30,
+                    label: '视频器材',
+                    value: 'video',
+                    sub: '考点考场内安装监控设备,考级现场全程录像,音视频材料(含线上考级)完整保留不少于一年。',
+                    score: 5
+                },
+                {
+                    parentLabel: '考级服务',
+                    parentScore: 30,
+                    label: '考试成绩',
+                    value: 'score',
+                    sub: '成绩核实、公布及证书领取符合国家标准规定,提供细致周到服务。',
+                    score: 3
+                },
+                //     ]
+                // },
+                // {
+                //     label: '艺术成效',
+                //     score: 10,
+                //     // icon: 'icon_yishuchengxiao.svg',
+                //     children: [
+                {
+                    parentLabel: '艺术成效',
+                    parentScore: 10,
+                    label: '艺术培训',
+                    value: 'artTrain',
+                    sub:
+                        '艺术培训组织能力强,专业水平高;配合艺术考级机构做好师资培训、考级 培训、学术研讨活动等,举办社会艺术考级普及教育公益活动。',
+                    score: 4
+                },
+                {
+                    parentLabel: '艺术成效',
+                    parentScore: 10,
+                    label: '艺术成果',
+                    value: 'artResult',
+                    sub:
+                        '定期举办艺术教育成果交流展示活动;积极组织参加各级管理部门和艺术考 级机构举办的艺术成果交流展示展演和各类社会公益活动;积极参与各级各类艺术教育成果比赛和展演,获得表彰和奖项。',
+                    score: 6
+                }
+            ]
+            //         }
+            //     ]
+        };
+    }
+};

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

@@ -103,6 +103,14 @@ const router = new Router({
                         title: '分配专家组'
                         title: '分配专家组'
                     }
                     }
                 },
                 },
+                {
+                    path: '/gradeList',
+                    name: 'gradeList',
+                    component: () => import(/* webpackChunkName: "userList" */ '@/views/organization/GradeList.vue'),
+                    meta: {
+                        title: '分配专家组'
+                    }
+                },
                 {
                 {
                     path: '/organization',
                     path: '/organization',
                     name: 'organization',
                     name: 'organization',

+ 156 - 0
src/main/vue/src/views/organization/GradeList.vue

@@ -0,0 +1,156 @@
+<template>
+    <div class="list-view">
+        <el-table
+            :data="categories"
+            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="tableHeight1"
+            :span-method="objectSpanMethod"
+        >
+            <el-table-column prop="parentLabel" label="一级指标" min-width="25" align="center">
+                <template slot-scope="{ row }">
+                    {{ row.parentLabel }}
+                    <div>{{ row.parentScore }}分</div>
+                </template>
+            </el-table-column>
+            <!-- <el-table-column prop="parentScore" label="总分" min-width="15"> </el-table-column> -->
+            <el-table-column prop="label" label="二级指标" min-width="35" align="center"> </el-table-column>
+            <el-table-column prop="sub" label="评定项目和要求" min-width="120" show-overflow-tooltip> </el-table-column>
+            <el-table-column prop="score" label="分值" min-width="20" align="center"> </el-table-column>
+            <el-table-column prop="score" label="评分" min-width="20" align="center"> </el-table-column>
+        </el-table>
+    </div>
+</template>
+<script>
+import { mapState } from 'vuex';
+import pageableTable from '@/mixins/pageableTable';
+import expert from '@/mixins/expert';
+
+export default {
+    name: 'GradeRuleList',
+    mixins: [pageableTable, expert],
+    data() {
+        return {
+            multipleMode: false,
+            search: '',
+            downloading: false,
+            spanArr: [],
+            tableHeight1: 200
+        };
+    },
+    computed: {
+        selection() {
+            return this.$refs.table.selection.map(i => i.id);
+        }
+    },
+    mounted() {
+        this.tableHeight1 = document.querySelector('.el-table').getBoundingClientRect().height;
+    },
+    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);
+                });
+        },
+        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 === 0) {
+                    return {
+                        // 合并第一列(columnIndex === 0),从第2行开始往下2行
+                        rowspan: 5,
+                        colspan: 1
+                    };
+                } else if (rowIndex === 5) {
+                    return {
+                        // 合并第一列(columnIndex === 0),从第2行开始往下2行
+                        rowspan: 8,
+                        colspan: 1
+                    };
+                } else if (rowIndex === 13) {
+                    return {
+                        // 合并第一列(columnIndex === 0),从第2行开始往下2行
+                        rowspan: 2,
+                        colspan: 1
+                    };
+                }
+                if (rowIndex != 0 || rowIndex != 5 || rowIndex != 13) {
+                    return {
+                        // 删除第一列(columnIndex === 0),第3、4行单元格
+                        rowspan: 0,
+                        colspan: 0
+                    };
+                } else {
+                    return {
+                        // 除了第一列,其余的不变
+                        rowspan: 1,
+                        colspan: 1
+                    };
+                }
+            }
+        }
+    }
+};
+</script>
+<style lang="less" scoped></style>

+ 6 - 2
src/main/vue/src/views/organization/Organization.vue

@@ -3,18 +3,21 @@
         <el-tabs v-model="active">
         <el-tabs v-model="active">
             <el-tab-pane label="申请信息" name="first"><RateAudit ref="page1" @next="goNext"/></el-tab-pane>
             <el-tab-pane label="申请信息" name="first"><RateAudit ref="page1" @next="goNext"/></el-tab-pane>
             <el-tab-pane label="专家组" name="second" :disabled="status"><AssignExpert ref="page2"/></el-tab-pane>
             <el-tab-pane label="专家组" name="second" :disabled="status"><AssignExpert ref="page2"/></el-tab-pane>
+            <el-tab-pane label="评分细则" name="third"><GradeList ref="page3"/></el-tab-pane>
+            <el-tab-pane label="提交材料" name="forth"></el-tab-pane>
         </el-tabs>
         </el-tabs>
     </div>
     </div>
 </template>
 </template>
 <script>
 <script>
 import RateAudit from '../RateAudit.vue';
 import RateAudit from '../RateAudit.vue';
 import AssignExpert from '../AssignExpert.vue';
 import AssignExpert from '../AssignExpert.vue';
+import GradeList from './GradeList.vue';
 export default {
 export default {
     name: 'Organization',
     name: 'Organization',
     created() {
     created() {
         let data = this.$route.query.status;
         let data = this.$route.query.status;
         console.log(data != 'SUBMIT_GRADE');
         console.log(data != 'SUBMIT_GRADE');
-        if (data == 'SUBMIT_GRADE' || data == 'REVIEW_PENDING') {
+        if (data == 'SUBMIT_GRADE' || data == 'REVIEW_PENDING' || data == 'SUBMIT_PAPER_MATERIALS') {
             this.status = false;
             this.status = false;
         }
         }
     },
     },
@@ -33,7 +36,8 @@ export default {
     },
     },
     components: {
     components: {
         AssignExpert,
         AssignExpert,
-        RateAudit
+        RateAudit,
+        GradeList
     }
     }
 };
 };
 </script>
 </script>