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

+ 2 - 38
src/main/java/com/izouma/wenlvju/domain/Organization.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(value = "承办单位")
+@Where(clause = "del = 0")
 public class Organization extends BaseEntity {
     private Long userId;
 
@@ -38,42 +40,4 @@ public class Organization extends BaseEntity {
     @ApiModelProperty(value = "证件号码")
     private String IDNo;
 
-    @ApiModelProperty(value = "简介")
-    private String introduction;
-
-    /*
-    评星定级
-     */
-//    private LocalDateTime applyTime;
-
-//    private RateStatus status;
-
-//    @ApiModelProperty(value = "是否承办考级活动")
-//    private Boolean undertakeExamination;
-
-//    @Convert(converter = StringArrayConverter.class)
-//    @ApiModelProperty(value = "承办过的考级机构名称")
-//    private List<String> examination;
-//
-//    @Convert(converter = StringArrayConverter.class)
-//    private List<String> img;
-//
-//    @ApiModelProperty(value = "专家组长")
-//    private Long expertUserId;
-//
-//    @ApiModelProperty(value = "专家组员")
-//    private List<Long> expertMemberUserId;
-//
-//    @ApiModelProperty(value = "审核开始时间")
-//    private LocalDate reviewStartTime;
-//
-//    @ApiModelProperty(value = "审核结束时间")
-//    private LocalDate reviewEndTime;
-
-    /*
-    复审结果
-    市级录入成绩
-     */
-//    private int score;
-
 }

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

@@ -30,8 +30,8 @@ public class Rate extends BaseEntity {
     @ApiModelProperty(value = "承办过的考级活动名称")
     private List<String> examination;
 
-//    @ApiModelProperty(value = "简介")
-//    private String introduction;
+    @ApiModelProperty(value = "单位概况")
+    private String introduction;
 
     @Convert(converter = StringArrayConverter.class)
     private List<String> img;

+ 3 - 0
src/main/java/com/izouma/wenlvju/domain/User.java

@@ -6,6 +6,7 @@ import com.izouma.wenlvju.annotations.Searchable;
 import com.izouma.wenlvju.config.Constants;
 import com.izouma.wenlvju.security.Authority;
 import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
@@ -73,4 +74,6 @@ public class User extends BaseEntity implements Serializable {
 
     private int age;
 
+    @ApiModelProperty(value = "艺术分类id")
+    private Long artTypeId;
 }

+ 38 - 0
src/main/java/com/izouma/wenlvju/dto/ExpertDTO.java

@@ -0,0 +1,38 @@
+package com.izouma.wenlvju.dto;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.izouma.wenlvju.domain.User;
+import io.swagger.annotations.ApiModel;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+@ApiModel(value = "用户", description = "用户")
+public class ExpertDTO {
+    private Long id;
+
+    private String username;
+
+    private String nickname;
+
+    private String sex;
+
+    private String phone;
+
+    private int age;
+
+    private Long artTypeId;
+
+    private String artType;
+
+    public ExpertDTO(User user, String artType) {
+        BeanUtil.copyProperties(user, this);
+        this.artType = artType;
+    }
+}

+ 31 - 0
src/main/java/com/izouma/wenlvju/dto/OrganizationRegDTO.java

@@ -0,0 +1,31 @@
+package com.izouma.wenlvju.dto;
+
+import io.swagger.annotations.ApiModel;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+@ApiModel(value = "用户", description = "用户")
+public class OrganizationRegDTO {
+
+    private String username;
+
+    private String nickname;
+
+    private String password;
+
+    private String phone;
+
+    private String email;
+
+    private String organizationName;
+
+    private String businessLicense;
+
+}

+ 16 - 0
src/main/java/com/izouma/wenlvju/enums/OrganizationGrade.java

@@ -0,0 +1,16 @@
+package com.izouma.wenlvju.enums;
+
+public enum OrganizationGrade {
+    EXCELLENT("优秀"),
+    ELIGIBLE("合格"),
+    NOT_ELIGIBLE("不合格");
+    private final String desc;
+
+    public String getDesc() {
+        return desc;
+    }
+
+    OrganizationGrade(String desc) {
+        this.desc = desc;
+    }
+}

+ 0 - 3
src/main/java/com/izouma/wenlvju/repo/ArtTypeRepo.java

@@ -7,13 +7,10 @@ import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
 
 import javax.transaction.Transactional;
-import java.util.List;
 
 public interface ArtTypeRepo extends JpaRepository<ArtType, Long>, JpaSpecificationExecutor<ArtType> {
     @Query("update ArtType t set t.del = true where t.id = ?1")
     @Modifying
     @Transactional
     void softDelete(Long id);
-
-    List<ArtType> findAllByParentIsNull();
 }

+ 3 - 0
src/main/java/com/izouma/wenlvju/repo/OrganizationRepo.java

@@ -7,10 +7,13 @@ import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
 
 import javax.transaction.Transactional;
+import java.util.Optional;
 
 public interface OrganizationRepo extends JpaRepository<Organization, Long>, JpaSpecificationExecutor<Organization> {
     @Query("update Organization t set t.del = true where t.id = ?1")
     @Modifying
     @Transactional
     void softDelete(Long id);
+
+    Optional<Organization> findByUserId(Long userId);
 }

+ 2 - 0
src/main/java/com/izouma/wenlvju/security/WebSecurityConfig.java

@@ -62,6 +62,8 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
                 //swagger-ui放行路径
                 .antMatchers("/v2/api-docs", "/swagger-ui.html", "/swagger-resources/**", "/webjars/**").permitAll()
                 .antMatchers("/user/register").permitAll()
+                .antMatchers("/user/regOrganization").permitAll()
+                .antMatchers("/district").permitAll()
                 .antMatchers("/upload/**").permitAll()
                 .antMatchers("/files/**").permitAll()
                 .antMatchers("/static/**").permitAll()

+ 44 - 10
src/main/java/com/izouma/wenlvju/service/UserService.java

@@ -3,12 +3,19 @@ package com.izouma.wenlvju.service;
 import cn.binarywang.wx.miniapp.api.WxMaService;
 import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
 import cn.binarywang.wx.miniapp.bean.WxMaUserInfo;
+import cn.hutool.core.bean.BeanUtil;
 import com.izouma.wenlvju.config.Constants;
+import com.izouma.wenlvju.domain.ArtType;
+import com.izouma.wenlvju.domain.Organization;
 import com.izouma.wenlvju.domain.User;
+import com.izouma.wenlvju.dto.ExpertDTO;
+import com.izouma.wenlvju.dto.OrganizationRegDTO;
 import com.izouma.wenlvju.dto.PageQuery;
 import com.izouma.wenlvju.dto.UserRegister;
 import com.izouma.wenlvju.enums.AuthorityName;
 import com.izouma.wenlvju.exception.BusinessException;
+import com.izouma.wenlvju.repo.ArtTypeRepo;
+import com.izouma.wenlvju.repo.OrganizationRepo;
 import com.izouma.wenlvju.repo.UserRepo;
 import com.izouma.wenlvju.security.Authority;
 import com.izouma.wenlvju.security.JwtTokenUtil;
@@ -34,18 +41,21 @@ import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.SetJoin;
 import java.text.SimpleDateFormat;
 import java.util.*;
+import java.util.stream.Collectors;
 
 @Service
 @Slf4j
 @AllArgsConstructor
 public class UserService {
-    private UserRepo       userRepo;
-    private WxMaService    wxMaService;
-    private WxMpService    wxMpService;
-    private SmsService     smsService;
-    private StorageService storageService;
-    private JwtTokenUtil   jwtTokenUtil;
-    private CaptchaService captchaService;
+    private final UserRepo         userRepo;
+    private final WxMaService      wxMaService;
+    private final WxMpService      wxMpService;
+    private final SmsService       smsService;
+    private final StorageService   storageService;
+    private final JwtTokenUtil     jwtTokenUtil;
+    private final CaptchaService   captchaService;
+    private final ArtTypeRepo      artTypeRepo;
+    private final OrganizationRepo organizationRepo;
 
     public Page<User> all(PageQuery pageQuery) {
         return userRepo.findAll(JpaUtils.toSpecification(pageQuery, User.class), JpaUtils.toPageRequest(pageQuery));
@@ -186,15 +196,39 @@ public class UserService {
         return setPassword(userId, password);
     }
 
-    public Page<User> all1(PageQuery pageQuery) {
+    public Page<ExpertDTO> all1(PageQuery pageQuery) {
+        Map<Long, String> artMap = artTypeRepo.findAll()
+                .stream()
+                .collect(Collectors.toMap(ArtType::getId, ArtType::getName));
         return userRepo.findAll(((root, criteriaQuery, criteriaBuilder) -> {
-            List<Predicate> and = JpaUtils.toPredicates(pageQuery,User.class,root,criteriaQuery,criteriaBuilder);
+            List<Predicate> and = JpaUtils.toPredicates(pageQuery, User.class, root, criteriaQuery, criteriaBuilder);
             // 只有专家权限
             SetJoin<User, Authority> join = root.join(root.getModel()
                     .getSet("authorities", Authority.class), JoinType.LEFT);
             and.add(join.in(Authority.get(AuthorityName.ROLE_EXPERT)));
             return criteriaBuilder.and(and.toArray(new Predicate[0]));
+        }), JpaUtils.toPageRequest(pageQuery)).map(user -> new ExpertDTO(user, artMap.get(user.getArtTypeId())));
+    }
+
+    /*
+    注册承办单位
+     */
+    public User regOrganization(OrganizationRegDTO dto) {
+        User user = new User();
+        BeanUtil.copyProperties(dto, user);
+        if (StringUtils.isNotBlank(dto.getPassword())) {
+            user.setPassword(new BCryptPasswordEncoder().encode(dto.getPassword()));
+        }
+        user.setAuthorities(Collections.singleton(Authority.get(AuthorityName.ROLE_ORGANIZER)));
+        User save = userRepo.save(user);
+
+        organizationRepo.save(
+                Organization.builder()
+                        .businessLicense(dto.getBusinessLicense())
+                        .userId(save.getId())
+                        .name(dto.getOrganizationName())
+                        .build());
 
-        }), JpaUtils.toPageRequest(pageQuery));
+        return user;
     }
 }

+ 7 - 1
src/main/java/com/izouma/wenlvju/web/OrganizationController.java

@@ -1,4 +1,5 @@
 package com.izouma.wenlvju.web;
+
 import com.izouma.wenlvju.domain.Organization;
 import com.izouma.wenlvju.service.OrganizationService;
 import com.izouma.wenlvju.dto.PageQuery;
@@ -21,7 +22,7 @@ import java.util.List;
 @AllArgsConstructor
 public class OrganizationController extends BaseController {
     private OrganizationService organizationService;
-    private OrganizationRepo organizationRepo;
+    private OrganizationRepo    organizationRepo;
 
     //@PreAuthorize("hasRole('ADMIN')")
     @PostMapping("/save")
@@ -47,6 +48,11 @@ public class OrganizationController extends BaseController {
         return organizationRepo.findById(id).orElseThrow(new BusinessException("无记录"));
     }
 
+    @GetMapping("/getByUserId/{userId}")
+    public Organization getByUserId(@PathVariable Long userId) {
+        return organizationRepo.findByUserId(userId).orElseThrow(new BusinessException("无记录"));
+    }
+
     @PostMapping("/del/{id}")
     public void del(@PathVariable Long id) {
         organizationRepo.softDelete(id);

+ 11 - 1
src/main/java/com/izouma/wenlvju/web/UserController.java

@@ -1,6 +1,10 @@
 package com.izouma.wenlvju.web;
 
+import cn.hutool.core.bean.BeanUtil;
+import com.izouma.wenlvju.domain.Organization;
 import com.izouma.wenlvju.domain.User;
+import com.izouma.wenlvju.dto.ExpertDTO;
+import com.izouma.wenlvju.dto.OrganizationRegDTO;
 import com.izouma.wenlvju.dto.PageQuery;
 import com.izouma.wenlvju.dto.UserRegister;
 import com.izouma.wenlvju.enums.AuthorityName;
@@ -15,6 +19,7 @@ import com.izouma.wenlvju.utils.SecurityUtils;
 import com.izouma.wenlvju.utils.excel.ExcelUtils;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.data.domain.Page;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
@@ -45,6 +50,11 @@ public class UserController extends BaseController {
         return userService.create(user);
     }
 
+    @PostMapping("/regOrganization")
+    public User regOrganization(@RequestBody OrganizationRegDTO dto) {
+        return userService.regOrganization(dto);
+    }
+
     @PreAuthorize("hasRole('ADMIN')")
     @PostMapping("/create")
     public User create(@RequestBody UserRegister userRegister) {
@@ -82,7 +92,7 @@ public class UserController extends BaseController {
     }
 
     @PostMapping("/all1")
-    public Page<User> all1(@RequestBody PageQuery pageQuery) {
+    public Page<ExpertDTO> all1(@RequestBody PageQuery pageQuery) {
         return userService.all1(pageQuery);
     }
 

+ 18 - 0
src/main/vue/src/assets/img_defaultphoto.svg

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>img_defaultphoto</title>
+    <g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="01-国内申请" transform="translate(-1541.000000, -18.000000)">
+            <g id="路径" transform="translate(1541.000000, 18.000000)">
+                <path d="M0,12 C0,18.627417 5.372583,24 12,24 C18.627417,24 24,18.627417 24,12 C24,5.372583 18.627417,0 12,0 C5.372583,0 0,5.372583 0,12 Z" fill="#F2F4F5"></path>
+                <path d="M15.1515789,9.75 C17.4015789,6.69078947 16.9673684,11.7631579 14.8752632,11.9605263 C11.5792105,13.0460526 15.151579,9.75 15.1515789,9.75 Z" fill="#FBEBE8" fill-rule="nonzero"></path>
+                <path d="M9.11286939,9.73863135 C11.3628694,6.67942082 10.9286589,11.7517892 8.83655362,11.9491577 C5.54050098,13.034684 9.11286941,9.73863135 9.11286939,9.73863135 Z" fill="#FBEBE8" fill-rule="nonzero" transform="translate(9.026916, 10.464264) scale(-1, 1) translate(-9.026916, -10.464264) "></path>
+                <path d="M9.07894737,12.0592105 C9.20493328,12.9723699 9.42775452,14.6894016 7.87559821,16.344478 C6.32344189,17.9995543 12.0394737,20.0921053 12.0394737,20.0921053 C12.0394737,20.0921053 16.8562256,18.2992584 17.1325414,17.4505742 C18.8299098,16.0097847 14.2154712,17.4505742 15.2171053,12.2171053 C13.006579,10.8157895 9.07894737,12.0592105 9.07894737,12.0592105 Z" fill="#FFF0ED" fill-rule="nonzero"></path>
+                <path d="M9.32692869,12.8806632 C9.5759509,13.6533919 12.9948251,16.8740481 16.1168778,16.0845745 C14.8627627,14.8177668 15.0087027,13.3708194 15.375,11.9605263 C15.5906842,11.4868421 13.5746604,11.7935544 9.32692869,12.8806632 Z" fill="#F3E6E4" fill-rule="nonzero"></path>
+                <path d="M12,24 C16.3689474,24 20.1915789,21.6645789 22.2901579,18.1746316 C22.2898421,18.1691053 22.2898421,18.1629474 22.2893684,18.1578947 C21.6841579,17.2368947 17.5261579,15.8420526 15.8946316,15.8420526 C12.5410829,20.8736278 8.25753067,16.9509223 8.25753067,15.8420526 C6.02249057,15.7518137 3.38368423,17.3718947 1.872,18.4327895 C4.0016842,21.7784211 7.7401579,24 12,24 Z" fill="#D7AB41"></path>
+                <path d="M12.1942105,3.94736843 C13.4771053,4.18421053 15.2731579,4.30263159 15.51,6.0986842 C18.0165789,16.5592105 6.80605263,18.0197368 8.2468421,7.04605263 C8.97710527,3.15789473 12.1942105,3.94736843 12.1942105,3.94736843 Z" fill="#FFF4F4"></path>
+                <path d="M9.36789473,5.36842106 C10.0627895,5.84210527 11.4656842,7.39468423 14.8670526,6.63157894 C15.1582105,7.76321051 15.0126316,7.76321051 15.8000526,8.9605263 C16.3757368,9.15789473 18.0434211,3.49342104 13.1595789,2.7236842 C7.44221053,1.8355263 6.69094737,6.95557918 8.16,8.77136865 C8.5173158,8.39636865 8.2561579,6.25657896 9.36789473,5.36842106 Z" fill="#705A48"></path>
+            </g>
+        </g>
+    </g>
+</svg>

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

@@ -274,6 +274,14 @@ const router = new Router({
                         title: '评星定级'
                     }
                 },
+                {
+                    path: '/organizationInfo',
+                    name: 'OrganizationInfo',
+                    component: () => import(/* webpackChunkName: "organizationInfo" */ '@/views/OrganizationInfo.vue'),
+                    meta: {
+                        title: '基本信息'
+                    }
+                },
                 {
                     path: '/organizationEdit',
                     name: 'OrganizationEdit',

+ 4 - 1
src/main/vue/src/views/Admin.vue

@@ -47,7 +47,10 @@
                 </el-tooltip>
 
                 <el-dropdown @command="onCommand" style="margin-left: 20px;" trigger="click">
-                    <img :src="userInfo ? userInfo.avatar || '' : ''" class="avatar" />
+                    <!-- <img :src="userInfo ? userInfo.avatar || '' : ''" class="avatar" /> -->
+                    <el-avatar size="small" shape="circle" :src="userInfo ? userInfo.avatar || '' : ''" fit="fill">
+                        <img src="../assets/img_defaultphoto.svg" alt="" />
+                    </el-avatar>
                     <el-dropdown-menu slot="dropdown">
                         <el-dropdown-item command="pwd" style="word-break:keep-all">修改密码 </el-dropdown-item>
                         <el-dropdown-item command="logout">退出登录 </el-dropdown-item>

+ 37 - 12
src/main/vue/src/views/ExpertEdit.vue

@@ -29,17 +29,16 @@
             <el-form-item prop="phone" label="手机">
                 <el-input v-model="formData.phone"></el-input>
             </el-form-item>
-            <el-form-item prop="" label="艺术分类">
+            <el-form-item prop="artTypeId" label="艺术分类">
                 <el-cascader
-                    ref="elCascader"
-                    v-model="formValueIds"
-                    :options="showList"
-                    :props="defaultProps"
-                    clearable
-                    filterable
+                    style="width: 100%"
+                    v-model="formData.artTypeId"
+                    :props="optionProps"
+                    :options="artTypes"
                     :show-all-levels="false"
-                    @change="getformValue"
-                ></el-cascader>
+                    placeholder="请选择艺术分类"
+                >
+                </el-cascader>
             </el-form-item>
             <!-- <el-form-item prop="authorities" label="角色">
                 <el-select
@@ -86,6 +85,15 @@ export default {
             .catch(e => {
                 console.log(e);
             });
+        this.$http
+            .post('/artType/allList')
+            .then(res => {
+                this.artTypes = this.delChild(res);
+                // this.artTypes = res;
+            })
+            .catch(e => {
+                console.log(e);
+            });
     },
     data() {
         return {
@@ -118,8 +126,16 @@ export default {
             },
             authorities: [],
             districts: [],
-            districtDisplay: false,
-            artTypeDisplay: false
+            optionProps: {
+                value: 'id',
+                label: 'name',
+                children: 'children',
+                multiple: false,
+                emitPath: false,
+                checkStrictly: true,
+                expandTrigger: 'hover'
+            },
+            artTypes: []
         };
     },
     methods: {
@@ -134,7 +150,6 @@ export default {
         },
         submit() {
             this.formData.username = this.formData.phone;
-            console.log(this.authorities);
             this.$http
                 .post(this.formData.id ? '/user/save' : '/user/create', this.formData, { body: 'json' })
                 .then(res => {
@@ -189,6 +204,16 @@ export default {
                     }
                 })
                 .catch(() => {});
+        },
+        delChild(list) {
+            return list.map(item => {
+                const info = {
+                    ...item,
+                    ['children']:
+                        item['children'] && item['children'].length > 0 ? this.delChild(item['children']) : null
+                };
+                return info;
+            });
         }
     }
 };

+ 39 - 6
src/main/vue/src/views/Login.vue

@@ -2,7 +2,8 @@
     <div class="container" :style="{ backgroundImage: 'url(' + require('../assets/login_bg.jpg') + ')' }">
         <transition :name="`slide-${register ? 'in' : 'out'}`">
             <div class="login-wrapper" @keyup.enter="doRegister" v-if="register" key="register">
-                <el-page-header @back="register = false" title="登录" style="width: 350px; line-height: 60px;">
+                <div class="title">南京市社会艺术水平考级系统注册</div>
+                <el-page-header @back="register = false" title="登录" style="width: 350px; line-height: 55px;">
                     <div class="register-title" slot="content">注册账号</div>
                 </el-page-header>
 
@@ -13,7 +14,34 @@
                     <el-form-item prop="password" :rules="{ required: true, message: '请输入密码', trigger: 'blur' }">
                         <el-input v-model="registerInfo.password" placeholder="密码" type="password"></el-input>
                     </el-form-item>
-                    <el-form-item>
+                    <el-form-item prop="nickname" :rules="{ required: true, message: '请输入昵称', trigger: 'blur' }">
+                        <el-input v-model="registerInfo.nickname" placeholder="昵称"> </el-input>
+                    </el-form-item>
+                    <el-form-item prop="phone" :rules="{ required: true, message: '请输入手机号', trigger: 'blur' }">
+                        <el-input v-model="registerInfo.phone" placeholder="手机号"> </el-input>
+                    </el-form-item>
+                    <el-form-item prop="email" :rules="{ required: true, message: '请输入电子邮箱', trigger: 'blur' }">
+                        <el-input v-model="registerInfo.email" placeholder="电子邮箱"> </el-input>
+                    </el-form-item>
+                    <el-form-item
+                        prop="organizationName"
+                        :rules="{ required: true, message: '请输入机构名称', trigger: 'blur' }"
+                    >
+                        <el-input v-model="registerInfo.organizationName" placeholder="机构名称"> </el-input>
+                    </el-form-item>
+                    <!-- <el-form-item
+                        prop="district"
+                        :rules="{ required: true, message: '请选择注册地址', trigger: 'blur' }"
+                    >
+                        <district-choose v-model="registerInfo.district"></district-choose>
+                    </el-form-item> -->
+                    <!-- <el-form-item
+                        prop="businessLicense"
+                        :rules="{ required: true, message: '请上传营业执照', trigger: 'blur' }"
+                    >
+                        <single-upload v-model="registerInfo.businessLicense"></single-upload>
+                    </el-form-item> -->
+                    <el-form-item class="login-btn">
                         <el-button :loading="loading" @click="doRegister" type="primary" style="width: 100%;"
                             >注册</el-button
                         >
@@ -189,10 +217,15 @@ export default {
                 if (valid) {
                     this.loading = true;
                     this.$http
-                        .post('/user/register', {
-                            username: this.registerInfo.username,
-                            password: this.registerInfo.password
-                        })
+                        .post(
+                            '/user/regOrganization',
+                            // {
+                            // username: this.registerInfo.username,
+                            // password: this.registerInfo.password
+                            // },
+                            this.registerInfo,
+                            { body: 'json' }
+                        )
                         .then(res => {
                             this.loading = false;
                             this.$message.success('注册成功');

+ 0 - 3
src/main/vue/src/views/OrganizationEdit.vue

@@ -38,9 +38,6 @@
             <el-form-item prop="IDNo" label="证件号码">
                 <el-input v-model="formData.IDNo"></el-input>
             </el-form-item>
-            <el-form-item prop="introduction" label="简介">
-                <el-input type="textarea" :autosize="{ minRows: 2 }" v-model="formData.introduction"></el-input>
-            </el-form-item>
             <el-form-item>
                 <el-button @click="onSave" :loading="saving" type="primary" v-if="this.$route.query.organId"
                     >保存基本信息</el-button

+ 146 - 0
src/main/vue/src/views/OrganizationInfo.vue

@@ -0,0 +1,146 @@
+<template>
+    <div class="edit-view">
+        <el-form
+            :model="formData"
+            :rules="rules"
+            ref="form"
+            label-width="128px"
+            label-position="right"
+            size="small"
+            style="max-width: 500px;"
+        >
+            <el-form-item prop="name" label="名称">
+                <el-input v-model="formData.name" class="size-color"></el-input>
+            </el-form-item>
+            <el-form-item prop="district" label="地址">
+                <el-select v-model="formData.district" clearable filterable placeholder="请选择">
+                    <el-option
+                        v-for="item in districtOptions"
+                        :key="item.value"
+                        :label="item.label"
+                        :value="item.value"
+                    >
+                    </el-option>
+                </el-select>
+            </el-form-item>
+            <el-form-item prop="uscc" label="统一社会信用代码">
+                <el-input v-model="formData.uscc"></el-input>
+            </el-form-item>
+            <el-form-item prop="businessLicense" label="营业执照">
+                <single-upload v-model="formData.businessLicense"></single-upload>
+            </el-form-item>
+            <el-form-item prop="owner" label="负责人">
+                <el-input v-model="formData.owner"></el-input>
+            </el-form-item>
+            <el-form-item prop="privacyPolicy" label="法人姓名">
+                <el-input v-model="formData.privacyPolicy"></el-input>
+            </el-form-item>
+            <el-form-item prop="IDNo" label="证件号码">
+                <el-input v-model="formData.IDNo"></el-input>
+            </el-form-item>
+            <el-form-item>
+                <!-- <el-button @click="readonly = false" :loading="saving" type="success">编辑</el-button> -->
+                <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>
+import { mapState } from 'vuex';
+export default {
+    name: 'OrganizationInfo',
+    created() {
+        this.$http
+            .get('organization/getByUserId/' + this.userInfo.id)
+            .then(res => {
+                this.formData = res;
+            })
+            .catch(e => {
+                console.log(e);
+                this.$message.error(e.error);
+            });
+
+        this.$http
+            .get('/district/NJ', { size: 1000, query: { del: false } })
+            .then(res => {
+                if (res.length > 0) {
+                    res.forEach(item => {
+                        this.districtOptions.push({
+                            label: item.name,
+                            value: item.name
+                        });
+                    });
+                }
+            })
+            .catch(e => {
+                console.log(e);
+                this.$message.error(e.error);
+            });
+    },
+    data() {
+        return {
+            saving: false,
+            formData: {},
+            rules: {},
+            districtOptions: [],
+            readonly: true
+        };
+    },
+    computed: {
+        ...mapState(['userInfo'])
+    },
+    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('/organization/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.readonly = true;
+                    this.$message.error(e.error);
+                });
+        },
+        onDelete() {
+            this.$alert('删除将无法恢复,确认要删除么?', '警告', { type: 'error' })
+                .then(() => {
+                    return this.$http.post(`/organization/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>
+.size-color {
+    color: #606266 !important;
+    background-color: #ffffff;
+}
+</style>

+ 3 - 0
src/main/vue/src/views/RateEdit.vue

@@ -79,6 +79,9 @@
             <el-form-item prop="property" label="房产证明">
                 <file-upload v-model="formData.property"></file-upload>
             </el-form-item>
+            <el-form-item prop="introduction" label="单位概况">
+                <el-input type="textarea" :autosize="{ minRows: 2 }" v-model="formData.introduction"></el-input>
+            </el-form-item>
             <el-form-item>
                 <el-button @click="onSave('FIRST_REVIEW_PENDING')" :loading="saving" type="success"
                     >提交申请信息</el-button