Răsfoiți Sursa

备案专业

licailing 5 ani în urmă
părinte
comite
b8be2458e1

+ 1 - 1
src/main/java/com/izouma/wenlvju/domain/Record.java

@@ -39,7 +39,7 @@ public class Record extends BaseEntity {
 
     @Enumerated(EnumType.STRING)
     @ApiModelProperty(value = "单位类别")
-    private WorkCategory category;
+    private String category;
 
     @ApiModelProperty(value = "承办单位名称")
     private String organizer;

+ 2 - 0
src/main/java/com/izouma/wenlvju/domain/RecordSpecialty.java

@@ -6,6 +6,7 @@ import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
+import org.hibernate.annotations.Where;
 
 import javax.persistence.Entity;
 
@@ -15,6 +16,7 @@ import javax.persistence.Entity;
 @Builder
 @Entity
 @ApiModel("备案专业")
+@Where(clause = "del = 0")
 public class RecordSpecialty extends BaseEntity {
     private Long recordId;
 

+ 0 - 3
src/main/java/com/izouma/wenlvju/service/ArtTypeService.java

@@ -2,8 +2,6 @@ package com.izouma.wenlvju.service;
 
 import com.alibaba.fastjson.JSON;
 import com.izouma.wenlvju.domain.ArtType;
-import com.izouma.wenlvju.domain.Menu;
-import com.izouma.wenlvju.dto.ArtTypeDTO;
 import com.izouma.wenlvju.dto.PageQuery;
 import com.izouma.wenlvju.repo.ArtTypeRepo;
 import com.izouma.wenlvju.utils.JpaUtils;
@@ -12,7 +10,6 @@ import org.springframework.data.domain.Page;
 import org.springframework.stereotype.Service;
 
 import java.util.*;
-import java.util.stream.Collectors;
 
 @Service
 @AllArgsConstructor

+ 1 - 2
src/main/java/com/izouma/wenlvju/web/ArtTypeController.java

@@ -1,15 +1,14 @@
 package com.izouma.wenlvju.web;
 
 import com.izouma.wenlvju.domain.ArtType;
-import com.izouma.wenlvju.service.ArtTypeService;
 import com.izouma.wenlvju.dto.PageQuery;
 import com.izouma.wenlvju.exception.BusinessException;
 import com.izouma.wenlvju.repo.ArtTypeRepo;
+import com.izouma.wenlvju.service.ArtTypeService;
 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;

+ 2 - 2
src/main/vue/src/plugins/http.js

@@ -5,8 +5,8 @@ import qs from 'qs';
 let baseUrl = 'http://localhost:8080';
 switch (process.env.NODE_ENV) {
     case 'development':
-        // baseUrl = 'http://localhost:8080';
-        baseUrl = 'http://wlj.izouma.com';
+        baseUrl = 'http://localhost:8080';
+        // baseUrl = 'http://wlj.izouma.com';
         break;
     case 'test':
         baseUrl = 'http://localhost:8080';

+ 10 - 2
src/main/vue/src/router.js

@@ -521,6 +521,14 @@ const router = new Router({
                         title: '考场管理'
                     }
                 },
+                {
+                    path: '/recordInfo',
+                    name: 'RecordInfo',
+                    component: () => import(/* webpackChunkName: "recordInfo" */ '@/views/record/RecordInfo.vue'),
+                    meta: {
+                        title: '备案管理'
+                    }
+                },
                 {
                     path: '/recordRoomList',
                     name: 'RecordRoomList',
@@ -534,7 +542,7 @@ const router = new Router({
                     path: '/recordSpecialtyEdit',
                     name: 'RecordSpecialtyEdit',
                     component: () =>
-                        import(/* webpackChunkName: "recordSpecialtyEdit" */ '@/views/RecordSpecialtyEdit.vue'),
+                        import(/* webpackChunkName: "recordSpecialtyEdit" */ '@/views/record/RecordSpecialtyEdit.vue'),
                     meta: {
                         title: '开考专业编辑'
                     }
@@ -543,7 +551,7 @@ const router = new Router({
                     path: '/recordSpecialtyList',
                     name: 'RecordSpecialtyList',
                     component: () =>
-                        import(/* webpackChunkName: "recordSpecialtyList" */ '@/views/RecordSpecialtyList.vue'),
+                        import(/* webpackChunkName: "recordSpecialtyList" */ '@/views/record/RecordSpecialtyList.vue'),
                     meta: {
                         title: '开考专业'
                     }

+ 120 - 53
src/main/vue/src/views/record/RecordEdit.vue

@@ -4,10 +4,10 @@
             :model="formData"
             :rules="rules"
             ref="form"
-            label-width="136px"
+            label-width="127px"
             label-position="right"
             size="small"
-            style="max-width: 600px;"
+            style="max-width: 700px;"
         >
             <el-form-item prop="examinationName" label="考级活动名称">
                 <el-input v-model="formData.examinationName"></el-input>
@@ -45,7 +45,7 @@
                 <el-input v-model="formData.examinationAgency"></el-input>
             </el-form-item>
             <el-form-item prop="category" label="单位类别">
-                <el-select v-model="formData.category" clearable filterable placeholder="请选择">
+                <!-- <el-select v-model="formData.category" clearable filterable placeholder="请选择">
                     <el-option
                         v-for="item in categoryOptions"
                         :key="item.value"
@@ -53,7 +53,8 @@
                         :value="item.value"
                     >
                     </el-option>
-                </el-select>
+                </el-select> -->
+                <el-input v-model="formData.category"></el-input>
             </el-form-item>
             <el-form-item prop="organizer" label="承办单位名称">
                 <el-input v-model="formData.organizer"></el-input>
@@ -62,7 +63,7 @@
                 <el-input v-model="formData.uscc"></el-input>
             </el-form-item>
             <el-form-item prop="examinationDistrict" label="考级地点">
-                <el-select v-model="formData.district">
+                <el-select v-model="formData.district" style="width: 100%;margin-bottom: 10px">
                     <el-option
                         v-for="item in district"
                         :key="item.id"
@@ -70,50 +71,87 @@
                         :label="item.name"
                     ></el-option>
                 </el-select>
+                <el-input type="textarea" :rows="3" v-model="formData.examinationAddress"></el-input>
             </el-form-item>
-            <el-form-item prop="examinationAddress" label="考级地点">
-                <el-input v-model="formData.examinationAddress"></el-input>
-            </el-form-item>
-            <el-form-item prop="examCenterQuantity" label="考场数量">
-                <el-input-number v-model="formData.examCenterQuantity" class="date-width"></el-input-number>
-            </el-form-item>
-            <el-form-item prop="examQuantity" label="报考人数">
-                <el-input-number v-model="formData.examQuantity" class="date-width"></el-input-number>
-            </el-form-item>
-            <el-form-item prop="examinerQuantity" label="考官人数">
-                <el-input-number v-model="formData.examinerQuantity" class="date-width"></el-input-number>
-            </el-form-item>
-            <el-form-item prop="examOwner" label="考点负责人名称">
-                <el-input v-model="formData.examOwner"></el-input>
-            </el-form-item>
-            <el-form-item prop="examOwnerPhone" label="考点负责人手机号">
-                <el-input v-model="formData.examOwnerPhone"></el-input>
-            </el-form-item>
-            <el-form-item prop="securityOwner" label="安全负责人名称">
-                <el-input v-model="formData.securityOwner"></el-input>
-            </el-form-item>
-            <el-form-item prop="securityOwnerPhone" label="安全负责人手机号">
-                <el-input v-model="formData.securityOwnerPhone"></el-input>
-            </el-form-item>
-            <el-form-item prop="recordTime" label="备案时间">
-                <el-date-picker
-                    v-model="formData.recordTime"
-                    type="date"
-                    value-format="yyyy-MM-dd"
-                    placeholder="选择日期"
-                >
-                </el-date-picker>
-            </el-form-item>
-            <el-form-item prop="status" label="状态">
-                <el-select v-model="formData.status" clearable filterable placeholder="请选择">
-                    <el-option v-for="item in statusOptions" :key="item.value" :label="item.label" :value="item.value">
-                    </el-option>
-                </el-select>
-            </el-form-item>
+            <el-row>
+                <el-col :span="12">
+                    <el-form-item prop="examCenterQuantity" label="考场数量">
+                        <el-input-number v-model="formData.examCenterQuantity" class="date-width"></el-input-number>
+                    </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                    <el-form-item prop="examQuantity" label="报考人数">
+                        <el-input-number v-model="formData.examQuantity" class="date-width"></el-input-number>
+                    </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                    <el-form-item prop="examinerQuantity" label="考官人数">
+                        <el-input-number v-model="formData.examinerQuantity" class="date-width"></el-input-number>
+                    </el-form-item>
+                </el-col>
+            </el-row>
+            <el-row>
+                <el-col :span="12">
+                    <el-form-item prop="examOwner" label="考点负责人名称">
+                        <el-input v-model="formData.examOwner"></el-input>
+                    </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                    <el-form-item prop="examOwnerPhone" label="手机号">
+                        <el-input v-model="formData.examOwnerPhone"></el-input>
+                    </el-form-item>
+                </el-col>
+            </el-row>
+            <el-row>
+                <el-col :span="12">
+                    <el-form-item prop="securityOwner" label="安全负责人名称">
+                        <el-input v-model="formData.securityOwner"></el-input>
+                    </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                    <el-form-item prop="securityOwnerPhone" label="手机号">
+                        <el-input v-model="formData.securityOwnerPhone"></el-input>
+                    </el-form-item>
+                </el-col>
+            </el-row>
+            <el-row>
+                <el-col :span="12">
+                    <el-form-item prop="recordTime" label="备案时间">
+                        <el-date-picker
+                            v-model="formData.recordTime"
+                            type="date"
+                            value-format="yyyy-MM-dd"
+                            placeholder="选择日期"
+                        >
+                        </el-date-picker>
+                    </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                    <el-form-item prop="status" label="状态">
+                        <el-select
+                            v-model="formData.status"
+                            clearable
+                            filterable
+                            placeholder="请选择"
+                            style="width: 100%"
+                        >
+                            <el-option
+                                v-for="item in statusOptions"
+                                :key="item.value"
+                                :label="item.label"
+                                :value="item.value"
+                            >
+                            </el-option>
+                        </el-select>
+                    </el-form-item>
+                </el-col>
+            </el-row>
             <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>
+                <div style="margin-top: 10px">
+                    <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>
+                </div>
             </el-form-item>
         </el-form>
     </div>
@@ -122,13 +160,12 @@
 export default {
     name: 'RecordEdit',
     created() {
-        if (this.$route.query.id) {
+        if (this.$route.query.rid) {
             this.$http
-                .get('record/get/' + this.$route.query.id)
+                .get('record/get/' + this.$route.query.rid)
                 .then(res => {
                     this.formData = res;
                     this.dateRange = [res.examinationStartTime, res.examinationEndTime];
-                    console.log(this.dateRange);
                 })
                 .catch(e => {
                     console.log(e);
@@ -149,9 +186,23 @@ export default {
         return {
             saving: false,
             formData: {},
-            rules: {},
+            rules: {
+                examOwnerPhone: {
+                    pattern: /^1[3-9]\d{9}$/,
+                    message: '请输入正确的手机号',
+                    trigger: 'blur'
+                },
+                securityOwnerPhone: {
+                    pattern: /^1[3-9]\d{9}$/,
+                    message: '请输入正确的手机号',
+                    trigger: 'blur'
+                }
+            },
             categoryOptions: [{ label: '承办单位', value: 'ORGANIZER' }],
-            statusOptions: [{ label: '正常', value: 'NORMAL' }],
+            statusOptions: [
+                { label: '正常', value: 'NORMAL' },
+                { label: '已撤回', value: 'WITHDRAWN' }
+            ],
             district: [],
             dateRange: []
         };
@@ -205,6 +256,22 @@ export default {
 </script>
 <style lang="less" scoped>
 .date-width {
-    width: 200px;
+    width: 100%;
+}
+.info-content {
+    // padding: 39px 25px 25px;
+    // margin: 5px auto;
+    width: 50%;
+    display: flex;
+    flex-wrap: wrap;
+    justify-content: space-between;
+}
+
+/deep/ .address {
+    display: flex;
+    width: 100%;
+    .el-form-item__content {
+        flex-grow: 1;
+    }
 }
 </style>

+ 38 - 0
src/main/vue/src/views/record/RecordInfo.vue

@@ -0,0 +1,38 @@
+<template>
+    <div class="edit-view">
+        <el-tabs v-model="active">
+            <el-tab-pane label="基本信息" name="first"><RecordEdit ref="page1" @next="goNext"/></el-tab-pane>
+            <el-tab-pane label="备考专业" name="second"><RecordSpecialtyList ref="page2"/></el-tab-pane>
+            <el-tab-pane label="考场管理" name="third"><RecordRoomList ref="page3"/></el-tab-pane>
+        </el-tabs>
+
+        <div style="min-height:50px"></div>
+    </div>
+</template>
+<script>
+import RecordEdit from './RecordEdit.vue';
+import RecordSpecialtyList from './RecordSpecialtyList.vue';
+import RecordRoomList from './RecordRoomList.vue';
+export default {
+    name: 'RecordInfo',
+    created() {},
+    data() {
+        return {
+            active: 'first'
+        };
+    },
+    methods: {
+        goNext(page) {
+            this.$nextTick(() => {
+                this.activeName = 'second';
+            });
+        }
+    },
+    components: {
+        RecordEdit,
+        RecordSpecialtyList,
+        RecordRoomList
+    }
+};
+</script>
+<style lang="less" scoped></style>

+ 6 - 6
src/main/vue/src/views/record/RecordList.vue

@@ -85,10 +85,10 @@
             </div>
             <div style="padding-left: 20px">
                 <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="update" type="primary" icon="el-icon-refresh" class="filter-item"
+                <el-button @click="addRow" type="primary" icon="el-icon-plus" class="filter-item">上传 </el-button>
+                <!-- <el-button @click="update" type="primary" icon="el-icon-refresh" class="filter-item"
                     >一键获取
-                </el-button>
+                </el-button> -->
                 <!-- <el-button @click="distribute" type="primary" class="filter-item">一键分发 </el-button> -->
                 <el-button
                     @click="download"
@@ -127,7 +127,7 @@
             <el-table-column label="操作" align="center" fixed="right" min-width="80">
                 <template slot-scope="{ row }">
                     <el-button @click="editRow(row)" type="primary" size="mini" plain>查看</el-button>
-                    <el-button @click="openRoom(row)" type="warning" size="mini" plain>考场</el-button>
+                    <!-- <el-button @click="openRoom(row)" type="warning" size="mini" plain>考场</el-button> -->
                     <!-- <el-button @click="deleteRow(row)" type="danger" size="mini" plain>删除</el-button> -->
                 </template>
             </el-table-column>
@@ -258,9 +258,9 @@ export default {
         },
         editRow(row) {
             this.$router.push({
-                path: '/recordEdit',
+                path: '/recordInfo',
                 query: {
-                    id: row.id
+                    rid: row.id
                 }
             });
         },

+ 2 - 2
src/main/vue/src/views/record/RecordRegulationList.vue

@@ -189,7 +189,7 @@ export default {
             this.$router.push({
                 path: '/recordEdit',
                 query: {
-                    id: row.id
+                    rid: row.id
                 }
             });
         },
@@ -266,7 +266,7 @@ export default {
             this.$router.push({
                 path: '/recordRoomList',
                 query: {
-                    id: row.id
+                    rid: row.id
                 }
             });
         }

+ 8 - 4
src/main/vue/src/views/record/RecordRoomList.vue

@@ -97,8 +97,8 @@ export default {
         };
     },
     created() {
-        if (this.$route.query.id) {
-            this.formRoom.id = Number(this.$route.query.id);
+        if (this.$route.query.rid) {
+            this.formRoom.id = Number(this.$route.query.rid);
         }
         if (this.organization != null) {
             this.showAdd = true;
@@ -131,7 +131,7 @@ export default {
             return {
                 search: this.search,
                 query: {
-                    recordId: this.$route.query.id
+                    recordId: this.$route.query.rid
                 }
             };
         },
@@ -251,4 +251,8 @@ export default {
     }
 };
 </script>
-<style lang="less" scoped></style>
+<style lang="less" scoped>
+.list-view {
+    height: 700px;
+}
+</style>

+ 58 - 8
src/main/vue/src/views/RecordSpecialtyEdit.vue → src/main/vue/src/views/record/RecordSpecialtyEdit.vue

@@ -9,8 +9,19 @@
             size="small"
             style="max-width: 500px;"
         >
-            <el-form-item prop="name" label="专业名称">
-                <el-input v-model="formData.name"></el-input>
+            <el-form-item prop="code" label="专业名称">
+                <!-- <el-input v-model="formData.name"></el-input> -->
+                <el-cascader
+                    ref="artCascader"
+                    style="width: 100%"
+                    v-model="formData.code"
+                    :props="optionProps"
+                    :options="artTypes"
+                    :show-all-levels="false"
+                    placeholder="请选择专业"
+                    @change="showArt"
+                >
+                </el-cascader>
             </el-form-item>
             <el-form-item prop="code" label="专业代码">
                 <el-input v-model="formData.code"></el-input>
@@ -19,17 +30,21 @@
                 <el-input v-model="formData.level"></el-input>
             </el-form-item>
             <el-form-item prop="numOfExam" label="考场数量">
-                <el-input-number type="number" v-model="formData.numOfExam"></el-input-number>
+                <el-input-number type="number" v-model="formData.numOfExam" style="width: 100%"></el-input-number>
             </el-form-item>
             <el-form-item prop="examinerQuantity" label="考官人数">
-                <el-input-number type="number" v-model="formData.examinerQuantity"></el-input-number>
+                <el-input-number
+                    type="number"
+                    v-model="formData.examinerQuantity"
+                    style="width: 100%"
+                ></el-input-number>
             </el-form-item>
             <el-form-item prop="numOfCandidates" label="考试人数">
-                <el-input-number type="number" v-model="formData.numOfCandidates"></el-input-number>
+                <el-input-number type="number" v-model="formData.numOfCandidates" style="width: 100%"></el-input-number>
             </el-form-item>
-            <el-form-item prop="numOfQualified" label="合格人数">
+            <!-- <el-form-item prop="numOfQualified" label="合格人数">
                 <el-input-number type="number" v-model="formData.numOfQualified"></el-input-number>
-            </el-form-item>
+            </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>
@@ -53,12 +68,33 @@ export default {
                     this.$message.error(e.error);
                 });
         }
+        if (this.$route.query.rid) {
+            this.formData.recordId = Number(this.$route.query.rid);
+        }
+        this.$http
+            .post('/artType/allList')
+            .then(res => {
+                this.artTypes = this.delChild(res);
+            })
+            .catch(e => {
+                console.log(e);
+            });
     },
     data() {
         return {
             saving: false,
             formData: {},
-            rules: {}
+            rules: {},
+            optionProps: {
+                value: 'code',
+                label: 'name',
+                children: 'children',
+                multiple: false,
+                emitPath: false,
+                checkStrictly: true,
+                expandTrigger: 'hover'
+            },
+            artTypes: []
         };
     },
     methods: {
@@ -103,6 +139,20 @@ export default {
                         this.$message.error((e || {}).error || '删除失败');
                     }
                 });
+        },
+        delChild(list) {
+            return list.map(item => {
+                const info = {
+                    ...item,
+                    ['children']:
+                        item['children'] && item['children'].length > 0 ? this.delChild(item['children']) : null
+                };
+                return info;
+            });
+        },
+        showArt() {
+            let data = this.$refs['artCascader'].getCheckedNodes()[0].pathLabels;
+            this.formData.name = data[data.length - 1];
         }
     }
 };

+ 17 - 10
src/main/vue/src/views/RecordSpecialtyList.vue → src/main/vue/src/views/record/RecordSpecialtyList.vue

@@ -1,17 +1,17 @@
 <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-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
+            <!-- <el-button
                 @click="download"
                 type="primary"
                 icon="el-icon-download"
                 :loading="downloading"
                 class="filter-item"
                 >导出EXCEL
-            </el-button>
+            </el-button> -->
         </div>
         <el-table
             :data="tableData"
@@ -24,14 +24,13 @@
             :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="name" label="专业名称"> </el-table-column>
+            <el-table-column prop="name" label="专业名称" width="100"> </el-table-column>
             <el-table-column prop="code" label="专业代码"> </el-table-column>
             <el-table-column prop="level" label="总级数"> </el-table-column>
             <el-table-column prop="numOfExam" label="考场数量"> </el-table-column>
             <el-table-column prop="examinerQuantity" label="考官人数"> </el-table-column>
             <el-table-column prop="numOfCandidates" label="考试人数"> </el-table-column>
-            <el-table-column prop="numOfQualified" label="合格人数"> </el-table-column>
+            <!-- <el-table-column prop="numOfQualified" label="合格人数"> </el-table-column> -->
             <el-table-column label="操作" align="center" fixed="right" min-width="150">
                 <template slot-scope="{ row }">
                     <el-button @click="editRow(row)" type="primary" size="mini" plain>编辑</el-button>
@@ -74,7 +73,8 @@ export default {
             multipleMode: false,
             search: '',
             url: '/recordSpecialty/all',
-            downloading: false
+            downloading: false,
+            dialogSpecoalty: false
         };
     },
     computed: {
@@ -84,7 +84,10 @@ export default {
     },
     methods: {
         beforeGetData() {
-            return { search: this.search };
+            return {
+                search: this.search,
+                query: { recordId: Number(this.$route.query.rid) }
+            };
         },
         toggleMultipleMode(multipleMode) {
             this.multipleMode = multipleMode;
@@ -159,4 +162,8 @@ export default {
     }
 };
 </script>
-<style lang="less" scoped></style>
+<style lang="less" scoped>
+.list-view {
+    height: 700px;
+}
+</style>