Browse Source

feature(注册):接口对接

wanglj 11 months ago
parent
commit
f8e94db155

+ 10 - 12
src/App.vue

@@ -6,14 +6,12 @@
           <div class="logo mr12">
             <img src="./assets/img/common-logo.png" alt />
           </div>
-          <el-menu
-            :default-active="defaultActive"
-            class="el-menu-demo"
-            mode="horizontal"
-            menu-trigger="click"
-            @select="handleSelect"
-            :router="router"
-          >
+          <el-menu :default-active="defaultActive"
+                   class="el-menu-demo"
+                   mode="horizontal"
+                   menu-trigger="hover"
+                   @select="handleSelect"
+                   :router="router">
             <el-menu-item index="/">首页</el-menu-item>
             <el-menu-item index="/introduce">中心介绍</el-menu-item>
             <el-menu-item index="/news">新闻动态</el-menu-item>
@@ -108,12 +106,12 @@ export default {
         this.$confirm("确定注销吗?", "提示", {
           confirmButtonText: "确定",
           cancelButtonText: "取消",
-          type: "warning",
+          type: "warning"
         }).then(() => {
-          this.$store.dispatch("logOut");
-        });
+          this.$store.dispatch('logOut').then(() => this.$router.push('/'))
+        })
       }
-    },
+    }
   },
 };
 </script>

+ 7 - 3
src/api/login.js

@@ -2,7 +2,7 @@
  * @Author: wanglj
  * @Date: 2022-04-25 10:38:19
  * @LastEditors: wanglj
- * @LastEditTime: 2025-01-11 09:13:02
+ * @LastEditTime: 2025-01-11 10:58:19
  * @Description: file content
  * @FilePath: \labsop_website\src\api\login.js
  */
@@ -18,11 +18,15 @@ export function signIn(data) {
 export function signOut(data) {
   return request.postRequestWithClientInfo(basePath, "System", "Logout", data);
 }
- // 根据用户名获取用户信息
+// 首页注册
+export function register(query) {
+  return request.postRequest(basePath, 'System', 'Register', query)
+}
+// 根据用户名获取用户信息
 export function getUserByUserName(data) {
   return request.postRequest(basePath, "User", "GetUserByUserName", data);
 }
 // 通知公告列表
 export function getNoticeList(query) {
-  return request.postRequest(basePath,'Notice','GetList', query)
+  return request.postRequest(basePath, 'Notice', 'GetList', query)
 }

+ 3 - 1
src/assets/styles/index.scss

@@ -97,6 +97,8 @@ body,
 }
 
 .custom-submenu {
+  border-radius: 4px;
+  overflow: hidden;
   .el-menu {
     padding: 0;
     border-radius: 4px;
@@ -120,7 +122,7 @@ body,
 
 .el-card {
   border-radius: 8px !important;
-  
+
   .header {
     display: flex;
     align-items: center;

+ 1 - 1
src/components/RightContent.vue

@@ -57,7 +57,7 @@
            v-html="document.remark"></div>
       <div slot="footer" class="card-footer">
         附件【
-        <el-link @click="toDownload(document)">{{ document.docUrlName }}</el-link>
+        <el-link type="primary" @click="toDownload(document)">{{ document.docUrlName }}</el-link>
         】已下载{{document.downloadCount}}次
       </div>
     </div>

+ 5 - 2
src/views/Case/RightContent.vue

@@ -2,9 +2,9 @@
  * @Author: wanglj wanglijie@dashoo.cn
  * @Date: 2025-01-09 10:52:48
  * @LastEditors: wanglj
- * @LastEditTime: 2025-01-09 19:55:04
+ * @LastEditTime: 2025-01-11 11:45:53
  * @Description: file content
- * @FilePath: \labsop_website\src\components\RightContent.vue
+ * @FilePath: \labsop_website\src\views\Case\RightContent.vue
 -->
 <template>
   <el-card class="right-content">
@@ -245,4 +245,7 @@ export default {
     }
   }
 }
+::v-deep .el-card__body {
+  height: auto !important;
+}
 </style>

+ 97 - 23
src/views/Register.vue

@@ -7,10 +7,10 @@
       </div>
       <div>
         <ul class="choose-type">
-          <li :class="{ active: type == 'person' }"
-              @click="changeType('person')"><i class="el-icon-user-solid"></i>注册课题组成员</li>
-          <li :class="{ active: type == 'project' }"
-              @click="changeType('project')"><i class="el-icon-notebook-2"></i>注册课题组负责人</li>
+          <li :class="{ active: form.registerType == '10' }"
+              @click="changeType('10')"><i class="el-icon-user-solid"></i>注册课题组成员</li>
+          <li :class="{ active: form.registerType == '20' }"
+              @click="changeType('20')"><i class="el-icon-notebook-2"></i>注册课题组负责人</li>
         </ul>
         <el-steps :space="200"
                   :active="active"
@@ -19,7 +19,7 @@
                   class="mb20">
           <el-step title="登录信息"></el-step>
           <el-step title="个人信息"></el-step>
-          <el-step title="其它信息"></el-step>
+          <!-- <el-step title="其它信息"></el-step> -->
         </el-steps>
         <el-form ref="loginInfoRef"
                  size="mini"
@@ -28,10 +28,10 @@
                  :rules="rules"
                  label-width="80px">
           <el-form-item label="登录账号"
-                        prop="username">
+                        prop="userName">
             <el-input name="username"
                       placeholder="请输入登录账号"
-                      v-model="form.username"></el-input>
+                      v-model="form.userName"></el-input>
           </el-form-item>
           <el-form-item label="密码"
                         prop="password">
@@ -57,9 +57,9 @@
                  :rules="rules"
                  label-width="80px">
           <el-form-item label="姓名"
-                        prop="name">
+                        prop="nickName">
             <el-input placeholder="请输入姓名"
-                      v-model="form.name"></el-input>
+                      v-model="form.nickName"></el-input>
           </el-form-item>
           <el-form-item label="性别"
                         prop="sex">
@@ -113,9 +113,16 @@
             </el-input>
           </el-form-item>
           <el-form-item label="课题组"
-                        prop="projectId">
-            <el-select v-model="form.projectId"
+                        prop="applyPgName"
+                        v-if="form.registerType === '20'">
+            <el-input v-model="form.applyPgName"></el-input>
+          </el-form-item>
+          <el-form-item label="课题组"
+                        prop="applyPg"
+                        v-else>
+            <el-select v-model="form.applyPg"
                        placeholder="请选择课题组"
+                       value-key="id"
                        class="w100">
               <el-option v-for="item in pjtList"
                          :key="item.id"
@@ -124,8 +131,8 @@
             </el-select>
           </el-form-item>
           <el-form-item label="所在时间"
-                        prop="projectId" 
-                        v-show="type === 'person'">
+                        prop="projectDate"
+                        v-show="form.registerType === '10'">
             <el-date-picker v-model="form.projectDate"
                             type="daterange"
                             class="w100"
@@ -140,8 +147,13 @@
                      v-if="active > 0"
                      @click="preStep">上一步</el-button>
           <el-button size="mini"
+                     v-if="active < 1"
                      type="primary"
                      @click="nextStep">下一步</el-button>
+          <el-button size="mini"
+                     v-if="active === 1"
+                     @click="onRegister"
+                     type="primary">注册</el-button>
         </div>
       </div>
     </el-card>
@@ -151,7 +163,7 @@
 <script>
 import crypto from "sm-crypto";
 import { setToken } from "@/utils/auth";
-import { signIn } from "@/api/login";
+import { register } from "@/api/login";
 import to from "await-to-js";
 import {
   getDictDataByType,
@@ -169,6 +181,14 @@ export default {
         callback();
       }
     };
+    const checkDate = (rule, value, callback) => {
+      console.log(value, 'valueeeeee');
+      
+      if(this.form.registerType === '10' && !value.length) {
+        callback(new Error("请选择所在时间"));
+      }
+      callback()
+    };
     return {
       active: 0,
       type: "person",
@@ -185,7 +205,7 @@ export default {
         groupIds: [],
         phone: "", // 手机号
         email: "", // 邮箱
-        sex: "", // 性别
+        sex: "30", // 性别
         password: "", // 账户密码
         confirmPassword: "",
         status: "10", // 用户状态
@@ -197,9 +217,13 @@ export default {
         projectId: null,
         projectName: "",
         projectDate: [],
+        registerType: '10',
+        applyPg: {},
+        applyPgName: '',
+        applyPgId: null
       },
       rules: {
-        username: [
+        userName: [
           { required: true, message: "请输入用户名", trigger: "blur" },
         ],
         password: [
@@ -214,13 +238,30 @@ export default {
         confirmPassword: [
           { required: true, validator: checkPassword, trigger: "blur" },
         ],
+        nickName: [{ required: true, message: "请输入姓名", trigger: "blur" }],
+        userType: [
+          { required: true, message: "请选择用户类型", trigger: "change" },
+        ],
+        deptId: [
+          { required: true, message: "请选择组织部门", trigger: "change" },
+        ],
+        idCode: [{ required: true, message: "请输入证件号", trigger: "blur" }],
+        applyPg: [
+          { required: true, message: "请选择课题组", trigger: "change" },
+        ],
+        applyPgName: [
+          { required: true, message: "请输入课题组", trigger: "blur" },
+        ],
+        projectDate: [
+          { required: true, validator: checkDate, trigger: "change" },
+        ]
       },
       loading: false,
       userTypeList: [],
       userSexList: [],
       userCertList: [],
       deptData: [],
-      projectList: [],
+      pjtList: [],
     };
   },
   mounted() {
@@ -233,17 +274,17 @@ export default {
         getDictDataByType("sys_com_sex"),
         getDictDataByType("sys_user_certificate"),
         getDeptTree(),
-        // getProjectGroupList(),
+        getProjectGroupList(),
       ]).then(([type, sex, cert, dept, pjt]) => {
         this.userTypeList = type.data.values || [];
         this.userSexList = sex.data.values || [];
         this.userCertList = cert.data.values || [];
         this.deptData = dept.data || [];
-        // this.projectList = pjt.data.list || [];
+        this.pjtList = pjt.data.list || [];
       });
     },
     changeType(val) {
-      this.type = val;
+      this.form.registerType = val;
     },
     // 部门选择
     deptChange() {
@@ -252,10 +293,10 @@ export default {
       this.form.deptName = nodes[0].label;
     },
     preStep() {
-      this.active--
+      this.active--;
     },
     nextStep() {
-      if (this.active < 3) {
+      if (this.active < 2) {
         let form = "loginInfoRef";
         if (this.active == 1) {
           form = "personInfoRef";
@@ -267,6 +308,36 @@ export default {
         });
       }
     },
+    onRegister() {
+      this.$refs.personInfoRef.validate(async valid => {
+        if(valid) {
+          const params = JSON.parse(JSON.stringify(this.form))
+          params.password = crypto.sm3(params.password);
+          delete params.confirmPassword
+          if(params.projectDate.length) {
+            params.startDate = params.projectDate[0]
+            params.endDate = params.projectDate[1]
+          }
+          delete params.projectDate
+          if(params.registerType === '10') {
+            params.applyPgId = params.applyPg.id
+            params.applyPgName = params.applyPg.padName
+          }
+          delete params.applyPg
+          const [err] = await to(register(params));
+          if(err) {
+            this.$message.warning('操作失败')
+            return
+          }
+          this.$message.success({
+            message: '注册成功,即将跳转登录页',
+            onClose: () => {
+              this.$router.push('/login')
+            }
+          })
+        }
+      })
+    },
     login() {
       if (this.active < 3) {
         this.active++;
@@ -290,7 +361,7 @@ a {
   display: flex;
   align-items: center;
   justify-content: center;
-  background: url('../assets/img/login-bg.png') center no-repeat;
+  background: url("../assets/img/login-bg.png") center no-repeat;
   background-size: 100% 100%;
 }
 
@@ -356,4 +427,7 @@ a {
   background-color: #fff;
   width: 40%;
 }
+.el-steps {
+  justify-content: center;
+}
 </style>