Browse Source

实现企业管理基本信息的编辑

huxz 8 years ago
parent
commit
f1631a64bd

+ 74 - 0
sso-manage-console-web/src/components/accounts/enterprises/CommonMenu.vue

@@ -0,0 +1,74 @@
+<template>
+  <div>
+    <ul class="nav nav-tabs">
+      <li @click="$router.go(-1)">
+        <img src="/static/images/go_back.png" alt="GoBack"/>
+      </li>
+      <router-link tag="li" active-class="active" :to="{name: 'EnterpriseBasicInfo'}" exact>
+        <a>基本信息</a><span class="triangle"></span></router-link>
+      <router-link tag="li" active-class="active" :to="{name: 'EnterpriseMembers'}" exact>
+        <a>成员管理</a><span class="triangle"></span></router-link>
+      <router-link tag="li" active-class="active" :to="{name: 'EnterpriseAdmin'}" exact><a>管理员信息</a><span
+        class="triangle"></span></router-link>
+      <router-link tag="li" active-class="active" :to="{name: 'EnterpriseAuth'}" exact>
+        <a>认证信息</a><span class="triangle"></span></router-link>
+      <router-link tag="li" active-class="active" :to="{name: 'EnterpriseApps'}" exact>
+        <a>应用管理</a><span class="triangle"></span></router-link>
+    </ul>
+  </div>
+</template>
+
+<script>
+  export default {
+    name: 'common-menu'
+  }
+</script>
+
+<style scoped>
+  .nav-tabs {
+    background-color: #E6EDF1;
+  }
+  .nav-tabs>li {
+    height: 60px;
+  }
+  .nav-tabs>li>img {
+    margin: 13px 38px 13px 14px;
+
+    cursor: pointer;
+  }
+  .nav-tabs>li>a {
+    margin: 13px 0;
+    border: none;
+    height: 34px;
+    padding: 9px 8px;
+    line-height: 14px;
+    background: none;
+
+    color: #646464;
+    font-size: 14px;
+    font-family: "Microsoft YaHei", sans-serif;
+  }
+  .nav-tabs>li.active>a {
+    color: #323232;
+    font-weight: bold;
+  }
+  .nav-tabs>li.active>a,
+  .nav-tabs>li.active>a:focus,
+  .nav-tabs>li.active>a:hover {
+    cursor: pointer;
+    border: none;
+    background: none;
+  }
+  .nav-tabs>li.active .triangle{
+    position: absolute;
+    width: 24px;
+    height: 12px;
+    border-right: 12px solid transparent;
+    border-left: 12px solid transparent;
+    border-bottom: 12px solid #FFFFFF;
+    z-index: 99;
+    bottom: 0;
+    left: 50%;
+    margin-left: -12px;
+  }
+</style>

+ 173 - 0
sso-manage-console-web/src/components/accounts/enterprises/EnterpriseBasicInfo.vue

@@ -0,0 +1,173 @@
+<template>
+  <div style="min-height: 570px;">
+    <common-menu></common-menu>
+    <!-- 内容区域 -->
+    <div class="basic-enterprise-info" style="padding: 30px 0 0;width: 490px;">
+      <el-form ref="form" :model="enterpriseInfo" label-width="150px">
+        <el-form-item label="企业UU">
+          <div>{{ enterpriseInfo.spaceUU }}</div>
+        </el-form-item>
+        <el-form-item label="企业名称">
+          <el-input v-model="enterpriseInfo.spaceName"></el-input>
+        </el-form-item>
+        <el-form-item label="法定代表人">
+          <el-input v-model="enterpriseInfo.corporation">
+            <div slot="append" v-if="enterpriseInfo.corporation">
+              <img src="/static/images/status/right.png" alt="Status">
+            </div>
+            <div slot="append" v-if="!enterpriseInfo.corporation">
+              <img src="/static/images/status/wrong.png" alt="Status">
+            </div>
+          </el-input>
+
+        </el-form-item>
+        <el-form-item label="营业执照号">
+          <el-input v-model="enterpriseInfo.businessCode"></el-input>
+        </el-form-item>
+        <el-form-item label="营业执照附件">
+          <el-input v-model="enterpriseInfo.businessCodeImage">
+            <i class="el-input__icon" slot="prefix" style="line-height: 14px;margin-left: 10px;">
+              <img src="/static/images/pic.png" alt="Picture">
+            </i>
+            <i class="el-input__icon" slot="suffix" style="line-height: 12px;">
+              <img src="/static/images/look.png" alt="Look">
+            </i>
+          </el-input>
+        </el-form-item>
+        <el-form-item label="企业地址">
+          <el-input v-model="enterpriseInfo.companyAddress" :readonly="true">
+            <i class="el-input__icon" slot="prefix" style="line-height: 16px;margin-left: 10px;">
+              <img src="/static/images/loc.png" alt="Location">
+            </i>
+          </el-input>
+        </el-form-item>
+        <el-form-item label="认证状态" width="400">
+          <el-select v-model="enterpriseInfo.validCode" placeholder="请选择认证状态">
+            <el-option label="未认证" :value="0"></el-option>
+            <el-option label="申诉中" :value="1"></el-option>
+            <el-option label="已认证" :value="2"></el-option>
+            <el-option label="未通过" :value="3"></el-option>
+          </el-select>
+          <span style="padding-left: 8px;">
+            <img src="/static/images/status/right.png" alt="Status" v-if="enterpriseInfo.validCode === 2">
+            <img src="/static/images/status/wrong.png" alt="Status" v-if="enterpriseInfo.validCode !== 2">
+          </span>
+        </el-form-item>
+        <el-form-item label="注册时间">
+          <!-- TODO 注册时间 -->
+          <div v-text="enterpriseInfo.registerDate">2017-06-11 12:51:44</div>
+        </el-form-item>
+        <el-form-item>
+          <div class="action-form-item">
+            <el-button type="primary" @click="onSubmit">保存修改</el-button>
+          </div>
+        </el-form-item>
+      </el-form>
+    </div>
+  </div>
+</template>
+
+<script>
+  import _ from 'lodash'
+  import axios from '@/assets/js/axios'
+  import CommonMenu from './CommonMenu'
+
+  export default {
+    name: 'enterprise-basic-info',
+    components: {
+      CommonMenu
+    },
+    data () {
+      return {
+        enterpriseInfo: {}
+      }
+    },
+    methods: {
+      onSubmit () {
+        const data = _.pick(this.enterpriseInfo,
+          [
+            'spaceUU',
+            'spaceName',
+            'corporation',
+            'businessCode',
+            'businessCodeImage',
+            'companyAddress',
+            'validCode'
+          ]
+        )
+
+        const success = () => {
+          this.isChange = false
+          this.$message.success('保存成功')
+          this.$route.go(-1)
+        }
+        const error = error => {
+          this.$message.error(error)
+        }
+
+        axios.put('/api/user/space//modifySpaceInfo', data).then(success).catch(error)
+      }
+    },
+    mounted () {
+      this.enterpriseInfo = Object.assign({}, this.enterpriseInfo, this.$route.params)
+    }
+  }
+</script>
+
+<style scoped>
+  .action-form-item {
+    margin-left: -128px;
+    margin-top: 70px;
+  }
+  .action-form-item .el-button {
+    border-radius: 0;
+    padding: 10px 20px;
+  }
+  .el-button {
+    width: 120px;
+    height: 34px;
+  }
+  .el-button--primary {
+    background-color: #4E8EFC;
+    border-color: #4E8EFC;
+  }
+  .el-button--primary.is-disabled {
+    background-color: #D2D2D2;
+    border-color: #D2D2D2;
+  }
+</style>
+
+<style>
+  .basic-enterprise-info .el-input__inner {
+    height: 34px;
+    width: 340px;
+    border-radius: 0;
+  }
+  .basic-enterprise-info .el-form-item {
+    margin-bottom: 12px;
+  }
+  .basic-enterprise-info .el-form-item__label {
+    margin: 0;
+    height: 34px;
+    padding-left: 26px;
+    text-align: left;
+    line-height: 34px;
+
+    color: #000000;
+    font-size: 14px;
+    font-weight: normal;
+    font-family: "SimHei", sans-serif;
+  }
+  .basic-enterprise-info .el-form-item__content {
+    height: 34px;
+    line-height: 34px;
+  }
+  .basic-enterprise-info div.el-form-item:nth-last-child(3) .el-form-item__content {
+    width: 400px;
+  }
+  .basic-enterprise-info .el-input-group__append {
+    background: none;
+    border: none;
+    padding-left: 12px;
+  }
+</style>

+ 1 - 1
sso-manage-console-web/src/components/accounts/enterprises/EnterpriseHome.vue

@@ -165,7 +165,7 @@
         this.fetchData()
       },
       handleClick (row) {
-        const routeLocation = {name: 'UserBasicInfo', params: row}
+        const routeLocation = {name: 'EnterpriseBasicInfo', params: row}
         this.$router.push(routeLocation)
       }
     }

+ 3 - 1
sso-manage-console-web/src/components/accounts/enterprises/index.js

@@ -1,5 +1,7 @@
 import EnterpriseHome from './EnterpriseHome'
+import EnterpriseBasicInfo from './EnterpriseBasicInfo'
 
 export {
-  EnterpriseHome
+  EnterpriseHome,
+  EnterpriseBasicInfo
 }

+ 38 - 1
sso-manage-console-web/src/router/index.js

@@ -10,7 +10,10 @@ import AssetHome from '@/components/asset/AssetHome'
 import SettingsHome from '@/components/settings/SettingsHome'
 import {BackHome} from '@/components/back'
 import AccountIndex from '@/components/accounts/AccountIndex'
-import {EnterpriseHome} from '@/components/accounts/enterprises'
+import {
+  EnterpriseBasicInfo,
+  EnterpriseHome
+} from '@/components/accounts/enterprises'
 import {UserBasicInfo, UserHome} from '@/components/accounts/users'
 import {AppealHome} from '@/components/accounts/appeals'
 
@@ -37,6 +40,40 @@ export default new Router({
           name: 'EnterpriseHome',
           component: EnterpriseHome
         },
+        {
+          // 企业基本信息
+          path: 'enterprise/basic',
+          name: 'EnterpriseBasicInfo',
+          component: EnterpriseBasicInfo,
+          beforeEnter: (to, from, next) => {
+            const enterpriseInfo = to.params
+            if (enterpriseInfo.spaceUU) {
+              next()
+            } else {
+              next({ name: 'EnterpriseHome' })
+            }
+          }
+        },
+        {
+          // 企业成员管理
+          path: 'enterprise/members',
+          name: 'EnterpriseMembers'
+        },
+        {
+          // 企业管理员信息
+          path: 'enterprise/admin',
+          name: 'EnterpriseAdmin'
+        },
+        {
+          // 企业认证信息
+          path: 'enterprise/auth',
+          name: 'EnterpriseAuth'
+        },
+        {
+          // 企业应用管理
+          path: 'enterprise/apps',
+          name: 'EnterpriseApps'
+        },
         {
           path: 'user',
           name: 'UserHome',

BIN
sso-manage-console-web/static/images/loc.png


BIN
sso-manage-console-web/static/images/look.png


BIN
sso-manage-console-web/static/images/pic.png


BIN
sso-manage-console-web/static/images/status/right.png


BIN
sso-manage-console-web/static/images/status/wrong.png


+ 9 - 0
sso-manage-console/src/main/java/com/uas/sso/sso/backend/api/UserSpaceManageController.java

@@ -1,12 +1,14 @@
 package com.uas.sso.sso.backend.api;
 
 import com.uas.sso.entity.Userspace;
+import com.uas.sso.sso.backend.dto.UpdateSpaceInfo;
 import com.uas.sso.sso.backend.service.UserSpaceService;
 import com.uas.sso.sso.backend.support.ResultBean;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Pageable;
 import org.springframework.http.MediaType;
 import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RequestParam;
@@ -39,6 +41,13 @@ public class UserSpaceManageController {
         return new ResultBean<>(spaceService.showSpaceByPagination(page, validCode, fromApp, key, keyword));
     }
 
+    @RequestMapping(method = RequestMethod.PUT, path = "//modifySpaceInfo",
+            produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
+    public ResultBean<Boolean> modifyUserInfo(@RequestBody UpdateSpaceInfo spaceInfo) {
+
+        return new ResultBean<>(spaceService.modifyUserInfo(spaceInfo));
+    }
+
     @Deprecated
     @RequestMapping(method = RequestMethod.GET, path = "//showSpaceByPaginationOld",
             produces = MediaType.APPLICATION_JSON_UTF8_VALUE)

+ 124 - 0
sso-manage-console/src/main/java/com/uas/sso/sso/backend/dto/UpdateSpaceInfo.java

@@ -0,0 +1,124 @@
+package com.uas.sso.sso.backend.dto;
+
+import com.uas.sso.entity.Userspace;
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+
+/**
+ * 企业实体 DTO
+ *
+ * @author huxz
+ */
+@SuppressWarnings("unused")
+public class UpdateSpaceInfo {
+
+    /**
+     * 企业uu号
+     */
+    @NotNull(message = "企业UU号不能为空")
+    @Min(value = 10000000, message = "企业UU格式不合法")
+    private Long spaceUU;
+
+    /**
+     * 企业名称
+     */
+    @NotNull(message = "企业名称不能为空")
+    private String spaceName;
+
+    /**
+     * 法定代表人
+     */
+    @NotNull(message = "法定代表人不能为空")
+    private String corporation;
+
+    /**
+     * 营业执照号
+     */
+    private String businessCode;
+
+    /**
+     * 营业执照
+     */
+    private String businessCodeImage;
+
+    /**
+     * 公司地址
+     */
+    private String companyAddress;
+
+    /**
+     * 企业信息认证状态
+     */
+    @NotNull(message = "企业信息认证状态不能为空")
+    private Short validCode;
+
+    public Long getSpaceUU() {
+        return spaceUU;
+    }
+
+    public void setSpaceUU(Long spaceUU) {
+        this.spaceUU = spaceUU;
+    }
+
+    public String getSpaceName() {
+        return spaceName;
+    }
+
+    public void setSpaceName(String spaceName) {
+        this.spaceName = spaceName;
+    }
+
+    public String getCorporation() {
+        return corporation;
+    }
+
+    public void setCorporation(String corporation) {
+        this.corporation = corporation;
+    }
+
+    public String getBusinessCode() {
+        return businessCode;
+    }
+
+    public void setBusinessCode(String businessCode) {
+        this.businessCode = businessCode;
+    }
+
+    public String getBusinessCodeImage() {
+        return businessCodeImage;
+    }
+
+    public void setBusinessCodeImage(String businessCodeImage) {
+        this.businessCodeImage = businessCodeImage;
+    }
+
+    public String getCompanyAddress() {
+        return companyAddress;
+    }
+
+    public void setCompanyAddress(String companyAddress) {
+        this.companyAddress = companyAddress;
+    }
+
+    public Short getValidCode() {
+        return validCode;
+    }
+
+    public void setValidCode(Short validCode) {
+        this.validCode = validCode;
+    }
+
+    public Userspace fillSpaceInfo(Userspace userspace) {
+        if (userspace == null) {
+            userspace = new Userspace();
+        }
+
+        userspace.setSpaceName(this.spaceName);
+        userspace.setCorporation(this.corporation);
+        userspace.setBusinessCode(this.businessCode);
+        userspace.setBusinessCodeImage(this.businessCodeImage);
+        userspace.setCompanyAddress(this.companyAddress);
+        userspace.setValidCode(this.validCode);
+        return userspace;
+    }
+}

+ 3 - 0
sso-manage-console/src/main/java/com/uas/sso/sso/backend/service/UserSpaceService.java

@@ -1,6 +1,7 @@
 package com.uas.sso.sso.backend.service;
 
 import com.uas.sso.entity.Userspace;
+import com.uas.sso.sso.backend.dto.UpdateSpaceInfo;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 
@@ -14,6 +15,8 @@ public interface UserSpaceService {
     Page<Userspace> showSpaceByPagination(Pageable page, Short validCode, String fromApp, String key,
             String keyword);
 
+    Boolean modifyUserInfo(UpdateSpaceInfo spaceInfo);
+
     Page<Userspace> showSpaceByPagination(Pageable page, String spaceName, String businessCode, Short validCode);
 
     void addUserToSpace(Long spaceUu, Long userUu);

+ 33 - 0
sso-manage-console/src/main/java/com/uas/sso/sso/backend/service/impl/UserSpaceServiceImpl.java

@@ -6,6 +6,7 @@ import com.uas.sso.dao.UserspaceDao;
 import com.uas.sso.entity.App;
 import com.uas.sso.entity.User;
 import com.uas.sso.entity.Userspace;
+import com.uas.sso.sso.backend.dto.UpdateSpaceInfo;
 import com.uas.sso.sso.backend.exceptions.ValidationFailedException;
 import com.uas.sso.sso.backend.service.UserSpaceService;
 import java.util.ArrayList;
@@ -74,6 +75,38 @@ public class UserSpaceServiceImpl implements UserSpaceService {
         }, page);
     }
 
+    @Override
+    public Boolean modifyUserInfo(UpdateSpaceInfo spaceInfo) {
+        Userspace userspace = userspaceDao.findOne(spaceInfo.getSpaceUU());
+        if (userspace == null) {
+            throw new ValidationFailedException(String.format("UU%d对应企业不存在", spaceInfo.getSpaceUU()));
+        }
+
+        if (!userspace.getSpaceName().equals(spaceInfo.getSpaceName())) {
+            Userspace existSpace = userspaceDao.findBySpaceName(spaceInfo.getSpaceName());
+            if (existSpace != null) {
+                throw new ValidationFailedException(String.format("企业%s已注册", spaceInfo.getSpaceName()));
+            }
+        }
+
+        // 避免清空营业执照因唯一性约束导致报错
+        if (StringUtils.isEmpty(spaceInfo.getBusinessCode())) {
+            spaceInfo.setBusinessCode(null);
+        } else {
+            if (!spaceInfo.getBusinessCode().equals(userspace.getBusinessCode())) {
+                Userspace existSpace = userspaceDao.findByBusinessCode(spaceInfo.getBusinessCode());
+                if (existSpace != null) {
+                    throw new ValidationFailedException(String.format("营业执照%s已认证", spaceInfo.getBusinessCode()));
+                }
+            }
+        }
+
+        userspace = spaceInfo.fillSpaceInfo(userspace);
+
+        userspaceDao.save(userspace);
+        return true;
+    }
+
     @Override
     public Page<Userspace> showSpaceByPagination(Pageable page, String spaceName, String businessCode,
             Short validCode) {