zs 1 vuosi sitten
vanhempi
commit
b4ab70c86a

+ 40 - 0
src/store/api/user/association.js

@@ -0,0 +1,40 @@
+import { defineStore } from 'pinia'
+import { AxiosWrapper } from '@/utils/axios-wrapper'
+import { get } from 'lodash-es'
+const url = '/association'
+const axios = new AxiosWrapper()
+
+export const AssociationStore = defineStore('association', () => {
+  const query = async ({ skip = 0, limit = undefined, ...info } = {}) => {
+    let cond = {}
+    if (skip) cond.skip = skip
+    if (limit) cond.limit = limit
+    cond = { ...cond, ...info }
+    const res = await axios.$get(`${url}`, cond)
+    return res
+  }
+  const fetch = async (payload) => {
+    const res = await axios.$get(`${url}/${payload}`)
+    return res
+  }
+  const create = async (payload) => {
+    const res = await axios.$post(`${url}`, payload)
+    return res
+  }
+  const update = async (payload) => {
+    const id = get(payload, 'id', get(payload, '_id'))
+    const res = await axios.$post(`${url}/${id}`, payload)
+    return res
+  }
+  const del = async (payload) => {
+    const res = await axios.$delete(`${url}/${payload}`)
+    return res
+  }
+  return {
+    query,
+    fetch,
+    create,
+    update,
+    del
+  }
+})

+ 40 - 0
src/store/api/user/company.js

@@ -0,0 +1,40 @@
+import { defineStore } from 'pinia'
+import { AxiosWrapper } from '@/utils/axios-wrapper'
+import { get } from 'lodash-es'
+const url = '/company'
+const axios = new AxiosWrapper()
+
+export const CompanyStore = defineStore('company', () => {
+  const query = async ({ skip = 0, limit = undefined, ...info } = {}) => {
+    let cond = {}
+    if (skip) cond.skip = skip
+    if (limit) cond.limit = limit
+    cond = { ...cond, ...info }
+    const res = await axios.$get(`${url}`, cond)
+    return res
+  }
+  const fetch = async (payload) => {
+    const res = await axios.$get(`${url}/${payload}`)
+    return res
+  }
+  const create = async (payload) => {
+    const res = await axios.$post(`${url}`, payload)
+    return res
+  }
+  const update = async (payload) => {
+    const id = get(payload, 'id', get(payload, '_id'))
+    const res = await axios.$post(`${url}/${id}`, payload)
+    return res
+  }
+  const del = async (payload) => {
+    const res = await axios.$delete(`${url}/${payload}`)
+    return res
+  }
+  return {
+    query,
+    fetch,
+    create,
+    update,
+    del
+  }
+})

+ 40 - 0
src/store/api/user/competition.js

@@ -0,0 +1,40 @@
+import { defineStore } from 'pinia'
+import { AxiosWrapper } from '@/utils/axios-wrapper'
+import { get } from 'lodash-es'
+const url = '/competition'
+const axios = new AxiosWrapper()
+
+export const CompetitionStore = defineStore('competition', () => {
+  const query = async ({ skip = 0, limit = undefined, ...info } = {}) => {
+    let cond = {}
+    if (skip) cond.skip = skip
+    if (limit) cond.limit = limit
+    cond = { ...cond, ...info }
+    const res = await axios.$get(`${url}`, cond)
+    return res
+  }
+  const fetch = async (payload) => {
+    const res = await axios.$get(`${url}/${payload}`)
+    return res
+  }
+  const create = async (payload) => {
+    const res = await axios.$post(`${url}`, payload)
+    return res
+  }
+  const update = async (payload) => {
+    const id = get(payload, 'id', get(payload, '_id'))
+    const res = await axios.$post(`${url}/${id}`, payload)
+    return res
+  }
+  const del = async (payload) => {
+    const res = await axios.$delete(`${url}/${payload}`)
+    return res
+  }
+  return {
+    query,
+    fetch,
+    create,
+    update,
+    del
+  }
+})

+ 40 - 0
src/store/api/user/expert.js

@@ -0,0 +1,40 @@
+import { defineStore } from 'pinia'
+import { AxiosWrapper } from '@/utils/axios-wrapper'
+import { get } from 'lodash-es'
+const url = '/expert'
+const axios = new AxiosWrapper()
+
+export const ExpertStore = defineStore('expert', () => {
+  const query = async ({ skip = 0, limit = undefined, ...info } = {}) => {
+    let cond = {}
+    if (skip) cond.skip = skip
+    if (limit) cond.limit = limit
+    cond = { ...cond, ...info }
+    const res = await axios.$get(`${url}`, cond)
+    return res
+  }
+  const fetch = async (payload) => {
+    const res = await axios.$get(`${url}/${payload}`)
+    return res
+  }
+  const create = async (payload) => {
+    const res = await axios.$post(`${url}`, payload)
+    return res
+  }
+  const update = async (payload) => {
+    const id = get(payload, 'id', get(payload, '_id'))
+    const res = await axios.$post(`${url}/${id}`, payload)
+    return res
+  }
+  const del = async (payload) => {
+    const res = await axios.$delete(`${url}/${payload}`)
+    return res
+  }
+  return {
+    query,
+    fetch,
+    create,
+    update,
+    del
+  }
+})

+ 40 - 0
src/store/api/user/incubator.js

@@ -0,0 +1,40 @@
+import { defineStore } from 'pinia'
+import { AxiosWrapper } from '@/utils/axios-wrapper'
+import { get } from 'lodash-es'
+const url = '/incubator'
+const axios = new AxiosWrapper()
+
+export const IncubatorStore = defineStore('incubator', () => {
+  const query = async ({ skip = 0, limit = undefined, ...info } = {}) => {
+    let cond = {}
+    if (skip) cond.skip = skip
+    if (limit) cond.limit = limit
+    cond = { ...cond, ...info }
+    const res = await axios.$get(`${url}`, cond)
+    return res
+  }
+  const fetch = async (payload) => {
+    const res = await axios.$get(`${url}/${payload}`)
+    return res
+  }
+  const create = async (payload) => {
+    const res = await axios.$post(`${url}`, payload)
+    return res
+  }
+  const update = async (payload) => {
+    const id = get(payload, 'id', get(payload, '_id'))
+    const res = await axios.$post(`${url}/${id}`, payload)
+    return res
+  }
+  const del = async (payload) => {
+    const res = await axios.$delete(`${url}/${payload}`)
+    return res
+  }
+  return {
+    query,
+    fetch,
+    create,
+    update,
+    del
+  }
+})

+ 40 - 0
src/store/api/user/investment.js

@@ -0,0 +1,40 @@
+import { defineStore } from 'pinia'
+import { AxiosWrapper } from '@/utils/axios-wrapper'
+import { get } from 'lodash-es'
+const url = '/investment'
+const axios = new AxiosWrapper()
+
+export const InvestmentStore = defineStore('investment', () => {
+  const query = async ({ skip = 0, limit = undefined, ...info } = {}) => {
+    let cond = {}
+    if (skip) cond.skip = skip
+    if (limit) cond.limit = limit
+    cond = { ...cond, ...info }
+    const res = await axios.$get(`${url}`, cond)
+    return res
+  }
+  const fetch = async (payload) => {
+    const res = await axios.$get(`${url}/${payload}`)
+    return res
+  }
+  const create = async (payload) => {
+    const res = await axios.$post(`${url}`, payload)
+    return res
+  }
+  const update = async (payload) => {
+    const id = get(payload, 'id', get(payload, '_id'))
+    const res = await axios.$post(`${url}/${id}`, payload)
+    return res
+  }
+  const del = async (payload) => {
+    const res = await axios.$delete(`${url}/${payload}`)
+    return res
+  }
+  return {
+    query,
+    fetch,
+    create,
+    update,
+    del
+  }
+})

+ 40 - 0
src/store/api/user/state.js

@@ -0,0 +1,40 @@
+import { defineStore } from 'pinia'
+import { AxiosWrapper } from '@/utils/axios-wrapper'
+import { get } from 'lodash-es'
+const url = '/state'
+const axios = new AxiosWrapper()
+
+export const StateStore = defineStore('state', () => {
+  const query = async ({ skip = 0, limit = undefined, ...info } = {}) => {
+    let cond = {}
+    if (skip) cond.skip = skip
+    if (limit) cond.limit = limit
+    cond = { ...cond, ...info }
+    const res = await axios.$get(`${url}`, cond)
+    return res
+  }
+  const fetch = async (payload) => {
+    const res = await axios.$get(`${url}/${payload}`)
+    return res
+  }
+  const create = async (payload) => {
+    const res = await axios.$post(`${url}`, payload)
+    return res
+  }
+  const update = async (payload) => {
+    const id = get(payload, 'id', get(payload, '_id'))
+    const res = await axios.$post(`${url}/${id}`, payload)
+    return res
+  }
+  const del = async (payload) => {
+    const res = await axios.$delete(`${url}/${payload}`)
+    return res
+  }
+  return {
+    query,
+    fetch,
+    create,
+    update,
+    del
+  }
+})

+ 40 - 0
src/store/api/user/unit.js

@@ -0,0 +1,40 @@
+import { defineStore } from 'pinia'
+import { AxiosWrapper } from '@/utils/axios-wrapper'
+import { get } from 'lodash-es'
+const url = '/unit'
+const axios = new AxiosWrapper()
+
+export const UnitStore = defineStore('unit', () => {
+  const query = async ({ skip = 0, limit = undefined, ...info } = {}) => {
+    let cond = {}
+    if (skip) cond.skip = skip
+    if (limit) cond.limit = limit
+    cond = { ...cond, ...info }
+    const res = await axios.$get(`${url}`, cond)
+    return res
+  }
+  const fetch = async (payload) => {
+    const res = await axios.$get(`${url}/${payload}`)
+    return res
+  }
+  const create = async (payload) => {
+    const res = await axios.$post(`${url}`, payload)
+    return res
+  }
+  const update = async (payload) => {
+    const id = get(payload, 'id', get(payload, '_id'))
+    const res = await axios.$post(`${url}/${id}`, payload)
+    return res
+  }
+  const del = async (payload) => {
+    const res = await axios.$delete(`${url}/${payload}`)
+    return res
+  }
+  return {
+    query,
+    fetch,
+    create,
+    update,
+    del
+  }
+})

+ 4 - 4
src/views/register/index.vue

@@ -47,7 +47,7 @@
 import { getCity } from '@/utils/city'
 import { siteInfo } from '@/layout/site'
 const $checkRes = inject('$checkRes')
-import { cloneDeep } from 'lodash-es'
+import { get, cloneDeep } from 'lodash-es'
 // 接口
 import { DictDataStore } from '@/store/api/system/dictData'
 import { DesignStore } from '@/store/api/platform/design'
@@ -59,10 +59,10 @@ import association from './parts/association.vue'
 import company from './parts/company.vue'
 import competition from './parts/competition.vue'
 import expert from './parts/expert.vue'
-import Incubator from './parts/Incubator.vue'
+import Incubator from './parts/incubator.vue'
 import state from './parts/state.vue'
 import unit from './parts/unit.vue'
-import Investment from './parts/Investment.vue'
+import Investment from './parts/investment.vue'
 // 路由
 const router = useRouter()
 // 加载中
@@ -146,8 +146,8 @@ const toBack = () => {
   router.push({ path: '/home' })
 }
 // provide
-provide('$checkRes', $checkRes)
 provide('cloneDeep', cloneDeep)
+provide('get', get)
 provide('siteInfo', siteInfo)
 provide('dialog', dialog)
 provide('isAgree', isAgree)

+ 29 - 16
src/views/register/parts/Incubator.vue

@@ -96,24 +96,24 @@
       <el-row :gutter="20">
         <el-col :span="12">
           <el-form-item label="孵化器名称" prop="name">
-            <el-input v-model="form.name" placeholder="请输入孵化器名称" />
+            <el-input v-model="form.info.name" placeholder="请输入孵化器名称" />
           </el-form-item>
         </el-col>
         <el-col :span="12">
           <el-form-item label="负责人姓名" prop="person">
-            <el-input v-model="form.person" placeholder="请输入负责人姓名" />
+            <el-input v-model="form.info.person" placeholder="请输入负责人姓名" />
           </el-form-item>
         </el-col>
       </el-row>
       <el-row :gutter="20">
         <el-col :span="12">
           <el-form-item label="负责人电话" prop="person_phone">
-            <el-input v-model="form.person_phone" placeholder="请输入负责人电话" />
+            <el-input v-model="form.info.person_phone" placeholder="请输入负责人电话" />
           </el-form-item>
         </el-col>
         <el-col :span="12">
           <el-form-item label="是否公开" prop="is_show">
-            <el-radio-group v-model="form.is_show">
+            <el-radio-group v-model="form.info.is_show">
               <el-radio v-for="i in isUseList" :key="i._id" :label="i.value">{{
                 i.label
               }}</el-radio>
@@ -124,7 +124,7 @@
       <el-col :span="24">
         <el-form-item label="地址" prop="address">
           <el-input
-            v-model="form.address"
+            v-model="form.info.address"
             :autosize="{ minRows: 2, maxRows: 4 }"
             type="textarea"
             placeholder="请输入地址"
@@ -134,7 +134,7 @@
       <el-col :span="24">
         <el-form-item label="简介" prop="brief">
           <el-input
-            v-model="form.brief"
+            v-model="form.info.brief"
             :autosize="{ minRows: 2, maxRows: 4 }"
             type="textarea"
             placeholder="请输入简介"
@@ -160,7 +160,7 @@
 // 基础
 const siteInfo = inject('siteInfo')
 const cloneDeep = inject('cloneDeep')
-const $checkRes = inject('$checkRes')
+const get = inject('get')
 // 路由
 const router = inject('router')
 // 弹框
@@ -177,8 +177,10 @@ const toLogin = inject('toLogin')
 const toBack = inject('toBack')
 // 接口
 import { UserStore } from '@/store/api/user/user'
+import { IncubatorStore } from '@/store/api/user/incubator'
 const store = UserStore()
-const form = ref({ role: ['User', 'Expert'] })
+const incubatorStore = IncubatorStore()
+const form = ref({ role: ['User', 'Incubator'], info: {} })
 const validatePhoneNumber = (rule, value, callback) => {
   const reg = /^1[3-9]\d{9}$/
   if (!value) {
@@ -220,14 +222,25 @@ const submitForm = async (formEl) => {
   await formEl.validate(async (valid, fields) => {
     if (valid) {
       const data = cloneDeep(form.value)
-      delete data.refpassword
-      const res = await store.create(data)
-      if ($checkRes(res, true)) {
-        ElMessage({
-          message: '注册用户成功,审核中请稍后登录',
-          type: 'success'
-        })
-        router.push({ path: '/login' })
+      const info = {
+        role: get(data, 'role'),
+        account: get(data, 'account'),
+        password: get(data, 'password'),
+        nick_name: get(data, 'nick_name'),
+        gender: get(data, 'gender'),
+        phone: get(data, 'phone')
+      }
+      const res = await store.create(info)
+      if (res.errcode === 0) {
+        const form = { ...{ user: get(res.data, '_id'), ...get(data, 'info') } }
+        const expert = await incubatorStore.create(form)
+        if (expert.errcode === 0) {
+          ElMessage({
+            message: '注册用户成功,审核中请稍后登录',
+            type: 'success'
+          })
+          router.push({ path: '/login' })
+        }
       }
     } else {
       console.log('error submit!', fields)

+ 31 - 18
src/views/register/parts/Investment.vue

@@ -96,19 +96,19 @@
       <el-row :gutter="20">
         <el-col :span="12">
           <el-form-item label="姓名" prop="name">
-            <el-input v-model="form.name" placeholder="请输入姓名" />
+            <el-input v-model="form.info.name" placeholder="请输入姓名" />
           </el-form-item>
         </el-col>
         <el-col :span="12">
           <el-form-item label="出资额" prop="money">
-            <el-input v-model="form.money" placeholder="请输入出资额(万元)" />
+            <el-input v-model="form.info.money" placeholder="请输入出资额(万元)" />
           </el-form-item>
         </el-col>
       </el-row>
       <el-row :gutter="20">
         <el-col :span="12">
           <el-form-item label="证件类型" prop="cardType">
-            <el-select clearable v-model="form.cardType" placeholder="请选择证件类型">
+            <el-select clearable v-model="form.info.cardType" placeholder="请选择证件类型">
               <el-option
                 v-for="(item, index) in cardTypeList"
                 :key="index"
@@ -120,14 +120,14 @@
         </el-col>
         <el-col :span="12">
           <el-form-item label="证件号码" prop="card">
-            <el-input v-model="form.card" placeholder="请输入证件号码" />
+            <el-input v-model="form.info.card" placeholder="请输入证件号码" />
           </el-form-item>
         </el-col>
       </el-row>
       <el-row :gutter="20">
         <el-col :span="12">
           <el-form-item label="出资方式" prop="type">
-            <el-select clearable v-model="form.type" placeholder="请选择出资方式">
+            <el-select clearable v-model="form.info.type" placeholder="请选择出资方式">
               <el-option
                 v-for="(item, index) in contributionList"
                 :key="index"
@@ -139,7 +139,7 @@
         </el-col>
         <el-col :span="12">
           <el-form-item label="是否公开" prop="is_show">
-            <el-radio-group v-model="form.is_show">
+            <el-radio-group v-model="form.info.is_show">
               <el-radio v-for="i in isUseList" :key="i._id" :label="i.value">{{
                 i.label
               }}</el-radio>
@@ -150,7 +150,7 @@
       <el-col :span="24">
         <el-form-item label="地址" prop="address">
           <el-input
-            v-model="form.address"
+            v-model="form.info.address"
             :autosize="{ minRows: 2, maxRows: 4 }"
             type="textarea"
             placeholder="请输入地址"
@@ -160,7 +160,7 @@
       <el-col :span="24">
         <el-form-item label="简介" prop="brief">
           <el-input
-            v-model="form.brief"
+            v-model="form.info.brief"
             :autosize="{ minRows: 2, maxRows: 4 }"
             type="textarea"
             placeholder="请输入简介"
@@ -186,7 +186,7 @@
 // 基础
 const siteInfo = inject('siteInfo')
 const cloneDeep = inject('cloneDeep')
-const $checkRes = inject('$checkRes')
+const get = inject('get')
 // 路由
 const router = inject('router')
 // 弹框
@@ -205,8 +205,10 @@ const toLogin = inject('toLogin')
 const toBack = inject('toBack')
 // 接口
 import { UserStore } from '@/store/api/user/user'
+import { InvestmentStore } from '@/store/api/user/investment'
 const store = UserStore()
-const form = ref({ role: ['User', 'Expert'] })
+const investmentStore = InvestmentStore()
+const form = ref({ role: ['User', 'Investment'], info: {} })
 const validatePhoneNumber = (rule, value, callback) => {
   const reg = /^1[3-9]\d{9}$/
   if (!value) {
@@ -248,14 +250,25 @@ const submitForm = async (formEl) => {
   await formEl.validate(async (valid, fields) => {
     if (valid) {
       const data = cloneDeep(form.value)
-      delete data.refpassword
-      const res = await store.create(data)
-      if ($checkRes(res, true)) {
-        ElMessage({
-          message: '注册用户成功,审核中请稍后登录',
-          type: 'success'
-        })
-        router.push({ path: '/login' })
+      const info = {
+        role: get(data, 'role'),
+        account: get(data, 'account'),
+        password: get(data, 'password'),
+        nick_name: get(data, 'nick_name'),
+        gender: get(data, 'gender'),
+        phone: get(data, 'phone')
+      }
+      const res = await store.create(info)
+      if (res.errcode === 0) {
+        const form = { ...{ user: get(res.data, '_id'), ...get(data, 'info') } }
+        const expert = await investmentStore.create(form)
+        if (expert.errcode === 0) {
+          ElMessage({
+            message: '注册用户成功,审核中请稍后登录',
+            type: 'success'
+          })
+          router.push({ path: '/login' })
+        }
       }
     } else {
       console.log('error submit!', fields)

+ 29 - 16
src/views/register/parts/association.vue

@@ -96,24 +96,24 @@
       <el-row :gutter="20">
         <el-col :span="12">
           <el-form-item label="商协会名称" prop="name">
-            <el-input v-model="form.name" placeholder="请输入商协会名称" />
+            <el-input v-model="form.info.name" placeholder="请输入商协会名称" />
           </el-form-item>
         </el-col>
         <el-col :span="12">
           <el-form-item label="负责人姓名" prop="person">
-            <el-input v-model="form.person" placeholder="请输入负责人姓名" />
+            <el-input v-model="form.info.person" placeholder="请输入负责人姓名" />
           </el-form-item>
         </el-col>
       </el-row>
       <el-row :gutter="20">
         <el-col :span="12">
           <el-form-item label="负责人电话" prop="person_phone">
-            <el-input v-model="form.person_phone" placeholder="请输入负责人电话" />
+            <el-input v-model="form.info.person_phone" placeholder="请输入负责人电话" />
           </el-form-item>
         </el-col>
         <el-col :span="12">
           <el-form-item label="是否公开" prop="is_show">
-            <el-radio-group v-model="form.is_show">
+            <el-radio-group v-model="form.info.is_show">
               <el-radio v-for="i in isUseList" :key="i._id" :label="i.value">{{
                 i.label
               }}</el-radio>
@@ -124,7 +124,7 @@
       <el-col :span="24">
         <el-form-item label="地址" prop="address">
           <el-input
-            v-model="form.address"
+            v-model="form.info.address"
             :autosize="{ minRows: 2, maxRows: 4 }"
             type="textarea"
             placeholder="请输入地址"
@@ -134,7 +134,7 @@
       <el-col :span="24">
         <el-form-item label="简介" prop="brief">
           <el-input
-            v-model="form.brief"
+            v-model="form.info.brief"
             :autosize="{ minRows: 2, maxRows: 4 }"
             type="textarea"
             placeholder="请输入简介"
@@ -160,7 +160,7 @@
 // 基础
 const siteInfo = inject('siteInfo')
 const cloneDeep = inject('cloneDeep')
-const $checkRes = inject('$checkRes')
+const get = inject('get')
 // 路由
 const router = inject('router')
 // 弹框
@@ -177,8 +177,10 @@ const toLogin = inject('toLogin')
 const toBack = inject('toBack')
 // 接口
 import { UserStore } from '@/store/api/user/user'
+import { AssociationStore } from '@/store/api/user/association'
 const store = UserStore()
-const form = ref({ role: ['User', 'Expert'] })
+const associationStore = AssociationStore()
+const form = ref({ role: ['User', 'Association'], info: {} })
 const validatePhoneNumber = (rule, value, callback) => {
   const reg = /^1[3-9]\d{9}$/
   if (!value) {
@@ -220,14 +222,25 @@ const submitForm = async (formEl) => {
   await formEl.validate(async (valid, fields) => {
     if (valid) {
       const data = cloneDeep(form.value)
-      delete data.refpassword
-      const res = await store.create(data)
-      if ($checkRes(res, true)) {
-        ElMessage({
-          message: '注册用户成功,审核中请稍后登录',
-          type: 'success'
-        })
-        router.push({ path: '/login' })
+      const info = {
+        role: get(data, 'role'),
+        account: get(data, 'account'),
+        password: get(data, 'password'),
+        nick_name: get(data, 'nick_name'),
+        gender: get(data, 'gender'),
+        phone: get(data, 'phone')
+      }
+      const res = await store.create(info)
+      if (res.errcode === 0) {
+        const form = { ...{ user: get(res.data, '_id'), ...get(data, 'info') } }
+        const expert = await associationStore.create(form)
+        if (expert.errcode === 0) {
+          ElMessage({
+            message: '注册用户成功,审核中请稍后登录',
+            type: 'success'
+          })
+          router.push({ path: '/login' })
+        }
       }
     } else {
       console.log('error submit!', fields)

+ 38 - 25
src/views/register/parts/company.vue

@@ -97,7 +97,7 @@
         <el-form-item label="企业Logo" prop="logo">
           <custom-upload
             model="logo"
-            :list="form.logo"
+            :list="form.info.logo"
             :limit="1"
             url="/files/web/template/company/upload"
             @change="onFUpload"
@@ -108,12 +108,12 @@
       <el-row :gutter="20">
         <el-col :span="12">
           <el-form-item label="企业名称" prop="name">
-            <el-input v-model="form.name" placeholder="请输入企业名称" />
+            <el-input v-model="form.info.name" placeholder="请输入企业名称" />
           </el-form-item>
         </el-col>
         <el-col :span="12">
           <el-form-item label="企业类型" prop="pattern">
-            <el-select clearable v-model="form.pattern" placeholder="请选择企业类型">
+            <el-select clearable v-model="form.info.pattern" placeholder="请选择企业类型">
               <el-option
                 v-for="(item, index) in patternList"
                 :key="index"
@@ -127,7 +127,7 @@
       <el-row :gutter="20">
         <el-col :span="12">
           <el-form-item label="企业规模" prop="scale">
-            <el-select clearable v-model="form.scale" placeholder="请选择企业规模">
+            <el-select clearable v-model="form.info.scale" placeholder="请选择企业规模">
               <el-option
                 v-for="item in scaleList"
                 :key="item.value"
@@ -139,14 +139,14 @@
         </el-col>
         <el-col :span="12">
           <el-form-item label="统一信用代码" prop="code">
-            <el-input v-model="form.code" placeholder="请输入统一信用代码" />
+            <el-input v-model="form.info.code" placeholder="请输入统一信用代码" />
           </el-form-item>
         </el-col>
       </el-row>
       <el-row :gutter="20">
         <el-col :span="12">
           <el-form-item label="所属行业" prop="type">
-            <el-select clearable v-model="form.type" placeholder="请选择所属行业">
+            <el-select clearable v-model="form.info.type" placeholder="请选择所属行业">
               <el-option
                 v-for="(item, index) in IndustryList"
                 :key="index"
@@ -159,7 +159,7 @@
         <el-col :span="12">
           <el-form-item label="所在地区" prop="region">
             <el-cascader
-              v-model="form.area"
+              v-model="form.info.area"
               :props="{ value: 'label', label: 'label' }"
               :options="cityList"
               clearable
@@ -172,24 +172,24 @@
       <el-row :gutter="20">
         <el-col :span="12">
           <el-form-item label="法定代表人" prop="representative">
-            <el-input v-model="form.representative" placeholder="请输入法定代表人名称" />
+            <el-input v-model="form.info.representative" placeholder="请输入法定代表人名称" />
           </el-form-item>
         </el-col>
         <el-col :span="12">
           <el-form-item label="电子邮箱" prop="email">
-            <el-input v-model="form.email" type="email" placeholder="请输入电子邮箱" />
+            <el-input v-model="form.info.email" type="email" placeholder="请输入电子邮箱" />
           </el-form-item>
         </el-col>
       </el-row>
       <el-row :gutter="20">
         <el-col :span="12">
           <el-form-item label="员工人数" prop="person">
-            <el-input v-model="form.person" placeholder="请输入员工人数" />
+            <el-input v-model="form.info.person" placeholder="请输入员工人数" />
           </el-form-item>
         </el-col>
         <el-col :span="12">
           <el-form-item label="注册资本" prop="register">
-            <el-input v-model="form.register" placeholder="请输入注册资本(万元)" />
+            <el-input v-model="form.info.register" placeholder="请输入注册资本(万元)" />
           </el-form-item>
         </el-col>
       </el-row>
@@ -199,7 +199,7 @@
             <el-date-picker
               format="YYYY-MM-DD"
               value-format="YYYY-MM-DD"
-              v-model="form.create_time"
+              v-model="form.info.create_time"
               type="date"
               placeholder="请选择成立时间"
               style="width: 100%"
@@ -208,13 +208,13 @@
         </el-col>
         <el-col :span="12">
           <el-form-item label="企业地址" prop="address">
-            <el-input v-model="form.address" placeholder="请输入企业地址" />
+            <el-input v-model="form.info.address" placeholder="请输入企业地址" />
           </el-form-item>
         </el-col>
       </el-row>
       <el-col :span="24">
         <el-form-item label="是否公开" prop="is_show">
-          <el-radio-group v-model="form.is_show">
+          <el-radio-group v-model="form.info.is_show">
             <el-radio v-for="i in isUseList" :key="i._id" :label="i.value">{{ i.label }}</el-radio>
           </el-radio-group>
         </el-form-item>
@@ -222,7 +222,7 @@
       <el-col :span="24">
         <el-form-item label="简介" prop="brief">
           <el-input
-            v-model="form.brief"
+            v-model="form.info.brief"
             :autosize="{ minRows: 2, maxRows: 4 }"
             type="textarea"
             placeholder="请输入简介"
@@ -248,7 +248,7 @@
 // 基础
 const siteInfo = inject('siteInfo')
 const cloneDeep = inject('cloneDeep')
-const $checkRes = inject('$checkRes')
+const get = inject('get')
 // 路由
 const router = inject('router')
 // 弹框
@@ -269,8 +269,10 @@ const toLogin = inject('toLogin')
 const toBack = inject('toBack')
 // 接口
 import { UserStore } from '@/store/api/user/user'
+import { CompanyStore } from '@/store/api/user/company'
 const store = UserStore()
-const form = ref({ role: ['User', 'Expert'] })
+const companyStore = CompanyStore()
+const form = ref({ role: ['User', 'Company'], info: { logo: [] } })
 const validatePhoneNumber = (rule, value, callback) => {
   const reg = /^1[3-9]\d{9}$/
   if (!value) {
@@ -317,14 +319,25 @@ const submitForm = async (formEl) => {
   await formEl.validate(async (valid, fields) => {
     if (valid) {
       const data = cloneDeep(form.value)
-      delete data.refpassword
-      const res = await store.create(data)
-      if ($checkRes(res, true)) {
-        ElMessage({
-          message: '注册用户成功,审核中请稍后登录',
-          type: 'success'
-        })
-        router.push({ path: '/login' })
+      const info = {
+        role: get(data, 'role'),
+        account: get(data, 'account'),
+        password: get(data, 'password'),
+        nick_name: get(data, 'nick_name'),
+        gender: get(data, 'gender'),
+        phone: get(data, 'phone')
+      }
+      const res = await store.create(info)
+      if (res.errcode === 0) {
+        const form = { ...{ user: get(res.data, '_id'), ...get(data, 'info') } }
+        const expert = await companyStore.create(form)
+        if (expert.errcode === 0) {
+          ElMessage({
+            message: '注册用户成功,审核中请稍后登录',
+            type: 'success'
+          })
+          router.push({ path: '/login' })
+        }
       }
     } else {
       console.log('error submit!', fields)

+ 29 - 16
src/views/register/parts/competition.vue

@@ -96,24 +96,24 @@
       <el-row :gutter="20">
         <el-col :span="12">
           <el-form-item label="名称" prop="name">
-            <el-input v-model="form.name" placeholder="请输入名称" />
+            <el-input v-model="form.info.name" placeholder="请输入名称" />
           </el-form-item>
         </el-col>
         <el-col :span="12">
           <el-form-item label="负责人姓名" prop="person">
-            <el-input v-model="form.person" placeholder="请输入负责人姓名" />
+            <el-input v-model="form.info.person" placeholder="请输入负责人姓名" />
           </el-form-item>
         </el-col>
       </el-row>
       <el-row :gutter="20">
         <el-col :span="12">
           <el-form-item label="负责人电话" prop="person_phone">
-            <el-input v-model="form.person_phone" placeholder="请输入负责人电话" />
+            <el-input v-model="form.info.person_phone" placeholder="请输入负责人电话" />
           </el-form-item>
         </el-col>
         <el-col :span="12">
           <el-form-item label="是否公开" prop="is_show">
-            <el-radio-group v-model="form.is_show">
+            <el-radio-group v-model="form.info.is_show">
               <el-radio v-for="i in isUseList" :key="i._id" :label="i.value">{{
                 i.label
               }}</el-radio>
@@ -124,7 +124,7 @@
       <el-col :span="24">
         <el-form-item label="地址" prop="address">
           <el-input
-            v-model="form.address"
+            v-model="form.info.address"
             :autosize="{ minRows: 2, maxRows: 4 }"
             type="textarea"
             placeholder="请输入地址"
@@ -134,7 +134,7 @@
       <el-col :span="24">
         <el-form-item label="简介" prop="brief">
           <el-input
-            v-model="form.brief"
+            v-model="form.info.brief"
             :autosize="{ minRows: 2, maxRows: 4 }"
             type="textarea"
             placeholder="请输入简介"
@@ -160,7 +160,7 @@
 // 基础
 const siteInfo = inject('siteInfo')
 const cloneDeep = inject('cloneDeep')
-const $checkRes = inject('$checkRes')
+const get = inject('get')
 // 路由
 const router = inject('router')
 // 弹框
@@ -177,8 +177,10 @@ const toLogin = inject('toLogin')
 const toBack = inject('toBack')
 // 接口
 import { UserStore } from '@/store/api/user/user'
+import { CompetitionStore } from '@/store/api/user/competition'
 const store = UserStore()
-const form = ref({ role: ['User', 'Expert'] })
+const competitionStore = CompetitionStore()
+const form = ref({ role: ['User', 'Competition'], info: {} })
 const validatePhoneNumber = (rule, value, callback) => {
   const reg = /^1[3-9]\d{9}$/
   if (!value) {
@@ -220,14 +222,25 @@ const submitForm = async (formEl) => {
   await formEl.validate(async (valid, fields) => {
     if (valid) {
       const data = cloneDeep(form.value)
-      delete data.refpassword
-      const res = await store.create(data)
-      if ($checkRes(res, true)) {
-        ElMessage({
-          message: '注册用户成功,审核中请稍后登录',
-          type: 'success'
-        })
-        router.push({ path: '/login' })
+      const info = {
+        role: get(data, 'role'),
+        account: get(data, 'account'),
+        password: get(data, 'password'),
+        nick_name: get(data, 'nick_name'),
+        gender: get(data, 'gender'),
+        phone: get(data, 'phone')
+      }
+      const res = await store.create(info)
+      if (res.errcode === 0) {
+        const form = { ...{ user: get(res.data, '_id'), ...get(data, 'info') } }
+        const expert = await competitionStore.create(form)
+        if (expert.errcode === 0) {
+          ElMessage({
+            message: '注册用户成功,审核中请稍后登录',
+            type: 'success'
+          })
+          router.push({ path: '/login' })
+        }
       }
     } else {
       console.log('error submit!', fields)

+ 33 - 20
src/views/register/parts/expert.vue

@@ -96,7 +96,7 @@
       <el-row :gutter="20">
         <el-col :span="12">
           <el-form-item label="专家姓名" prop="name">
-            <el-input v-model="form.name" placeholder="请输入专家姓名" />
+            <el-input v-model="form.info.name" placeholder="请输入专家姓名" />
           </el-form-item>
         </el-col>
         <el-col :span="12">
@@ -104,7 +104,7 @@
             <el-date-picker
               format="YYYY-MM-DD"
               value-format="YYYY-MM-DD"
-              v-model="form.birth"
+              v-model="form.info.birth"
               type="date"
               placeholder="请选择出生年月"
               style="width: 100%"
@@ -115,7 +115,7 @@
       <el-row :gutter="20">
         <el-col :span="12">
           <el-form-item label="证件类型" prop="cardType">
-            <el-select clearable v-model="form.cardType" placeholder="请选择证件类型">
+            <el-select clearable v-model="form.info.cardType" placeholder="请选择证件类型">
               <el-option
                 v-for="(item, index) in cardTypeList"
                 :key="index"
@@ -127,14 +127,14 @@
         </el-col>
         <el-col :span="12">
           <el-form-item label="证件号码" prop="card">
-            <el-input v-model="form.card" placeholder="请输入证件号码" />
+            <el-input v-model="form.info.card" placeholder="请输入证件号码" />
           </el-form-item>
         </el-col>
       </el-row>
       <el-row :gutter="20">
         <el-col :span="12">
           <el-form-item label="擅长领域" prop="field">
-            <el-select clearable v-model="form.field" placeholder="请选择擅长领域">
+            <el-select clearable v-model="form.info.field" placeholder="请选择擅长领域">
               <el-option
                 v-for="(item, index) in fieldList"
                 :key="index"
@@ -146,14 +146,14 @@
         </el-col>
         <el-col :span="12">
           <el-form-item label="研究方向" prop="direction">
-            <el-input v-model="form.direction" placeholder="请输入研究方向" />
+            <el-input v-model="form.info.direction" placeholder="请输入研究方向" />
           </el-form-item>
         </el-col>
       </el-row>
       <el-row :gutter="20">
         <el-col :span="12">
           <el-form-item label="最高学历" prop="education">
-            <el-select clearable v-model="form.education" placeholder="请选择最高学历">
+            <el-select clearable v-model="form.info.education" placeholder="请选择最高学历">
               <el-option
                 v-for="(item, index) in educationList"
                 :key="index"
@@ -166,7 +166,7 @@
         <el-col :span="12">
           <el-form-item label="所在地区" prop="region">
             <el-cascader
-              v-model="form.area"
+              v-model="form.info.area"
               :props="{ value: 'label', label: 'label' }"
               :options="cityList"
               clearable
@@ -178,7 +178,7 @@
       </el-row>
       <el-col :span="24">
         <el-form-item label="是否公开" prop="is_show">
-          <el-radio-group v-model="form.is_show">
+          <el-radio-group v-model="form.info.is_show">
             <el-radio v-for="i in isUseList" :key="i._id" :label="i.value">{{ i.label }}</el-radio>
           </el-radio-group>
         </el-form-item>
@@ -186,7 +186,7 @@
       <el-col :span="24">
         <el-form-item label="简介" prop="brief">
           <el-input
-            v-model="form.brief"
+            v-model="form.info.brief"
             :autosize="{ minRows: 2, maxRows: 4 }"
             type="textarea"
             placeholder="请输入简介"
@@ -212,7 +212,7 @@
 // 基础
 const siteInfo = inject('siteInfo')
 const cloneDeep = inject('cloneDeep')
-const $checkRes = inject('$checkRes')
+const get = inject('get')
 // 路由
 const router = inject('router')
 // 弹框
@@ -233,8 +233,10 @@ const toLogin = inject('toLogin')
 const toBack = inject('toBack')
 // 接口
 import { UserStore } from '@/store/api/user/user'
+import { ExpertStore } from '@/store/api/user/expert'
 const store = UserStore()
-const form = ref({ role: ['User', 'Expert'] })
+const expertStore = ExpertStore()
+const form = ref({ role: ['User', 'Expert'], info: {} })
 const validatePhoneNumber = (rule, value, callback) => {
   const reg = /^1[3-9]\d{9}$/
   if (!value) {
@@ -276,14 +278,25 @@ const submitForm = async (formEl) => {
   await formEl.validate(async (valid, fields) => {
     if (valid) {
       const data = cloneDeep(form.value)
-      delete data.refpassword
-      const res = await store.create(data)
-      if ($checkRes(res, true)) {
-        ElMessage({
-          message: '注册用户成功,审核中请稍后登录',
-          type: 'success'
-        })
-        router.push({ path: '/login' })
+      const info = {
+        role: get(data, 'role'),
+        account: get(data, 'account'),
+        password: get(data, 'password'),
+        nick_name: get(data, 'nick_name'),
+        gender: get(data, 'gender'),
+        phone: get(data, 'phone')
+      }
+      const res = await store.create(info)
+      if (res.errcode === 0) {
+        const form = { ...{ user: get(res.data, '_id'), ...get(data, 'info') } }
+        const expert = await expertStore.create(form)
+        if (expert.errcode === 0) {
+          ElMessage({
+            message: '注册用户成功,审核中请稍后登录',
+            type: 'success'
+          })
+          router.push({ path: '/login' })
+        }
       }
     } else {
       console.log('error submit!', fields)

+ 30 - 17
src/views/register/parts/state.vue

@@ -96,24 +96,24 @@
       <el-row :gutter="20">
         <el-col :span="12">
           <el-form-item label="名称" prop="name">
-            <el-input v-model="form.name" placeholder="请输入名称" />
+            <el-input v-model="form.info.name" placeholder="请输入名称" />
           </el-form-item>
         </el-col>
         <el-col :span="12">
           <el-form-item label="负责人姓名" prop="person">
-            <el-input v-model="form.person" placeholder="请输入负责人姓名" />
+            <el-input v-model="form.info.person" placeholder="请输入负责人姓名" />
           </el-form-item>
         </el-col>
       </el-row>
       <el-row :gutter="20">
         <el-col :span="12">
           <el-form-item label="负责人电话" prop="person_phone">
-            <el-input v-model="form.person_phone" placeholder="请输入负责人电话" />
+            <el-input v-model="form.info.person_phone" placeholder="请输入负责人电话" />
           </el-form-item>
         </el-col>
         <el-col :span="12">
           <el-form-item label="部门类型" prop="type">
-            <el-select clearable v-model="form.type" placeholder="请选择部门类型">
+            <el-select clearable v-model="form.info.type" placeholder="请选择部门类型">
               <el-option
                 v-for="(item, index) in typeList"
                 :key="index"
@@ -127,7 +127,7 @@
       <el-row :gutter="20">
         <el-col :span="12">
           <el-form-item label="是否公开" prop="is_show">
-            <el-radio-group v-model="form.is_show">
+            <el-radio-group v-model="form.info.is_show">
               <el-radio v-for="i in isUseList" :key="i._id" :label="i.value">{{
                 i.label
               }}</el-radio>
@@ -138,7 +138,7 @@
       <el-col :span="24">
         <el-form-item label="地址" prop="address">
           <el-input
-            v-model="form.address"
+            v-model="form.info.address"
             :autosize="{ minRows: 2, maxRows: 4 }"
             type="textarea"
             placeholder="请输入地址"
@@ -148,7 +148,7 @@
       <el-col :span="24">
         <el-form-item label="简介" prop="brief">
           <el-input
-            v-model="form.brief"
+            v-model="form.info.brief"
             :autosize="{ minRows: 2, maxRows: 4 }"
             type="textarea"
             placeholder="请输入简介"
@@ -174,7 +174,7 @@
 // 基础
 const siteInfo = inject('siteInfo')
 const cloneDeep = inject('cloneDeep')
-const $checkRes = inject('$checkRes')
+const get = inject('get')
 // 路由
 const router = inject('router')
 // 弹框
@@ -191,8 +191,10 @@ const toLogin = inject('toLogin')
 const toBack = inject('toBack')
 // 接口
 import { UserStore } from '@/store/api/user/user'
+import { StateStore } from '@/store/api/user/state'
 const store = UserStore()
-const form = ref({ role: ['User', 'Expert'] })
+const stateStore = StateStore()
+const form = ref({ role: ['User', 'State'], info: {} })
 const validatePhoneNumber = (rule, value, callback) => {
   const reg = /^1[3-9]\d{9}$/
   if (!value) {
@@ -234,14 +236,25 @@ const submitForm = async (formEl) => {
   await formEl.validate(async (valid, fields) => {
     if (valid) {
       const data = cloneDeep(form.value)
-      delete data.refpassword
-      const res = await store.create(data)
-      if ($checkRes(res, true)) {
-        ElMessage({
-          message: '注册用户成功,审核中请稍后登录',
-          type: 'success'
-        })
-        router.push({ path: '/login' })
+      const info = {
+        role: get(data, 'role'),
+        account: get(data, 'account'),
+        password: get(data, 'password'),
+        nick_name: get(data, 'nick_name'),
+        gender: get(data, 'gender'),
+        phone: get(data, 'phone')
+      }
+      const res = await store.create(info)
+      if (res.errcode === 0) {
+        const form = { ...{ user: get(res.data, '_id'), ...get(data, 'info') } }
+        const expert = await stateStore.create(form)
+        if (expert.errcode === 0) {
+          ElMessage({
+            message: '注册用户成功,审核中请稍后登录',
+            type: 'success'
+          })
+          router.push({ path: '/login' })
+        }
       }
     } else {
       console.log('error submit!', fields)

+ 29 - 16
src/views/register/parts/unit.vue

@@ -96,24 +96,24 @@
       <el-row :gutter="20">
         <el-col :span="12">
           <el-form-item label="名称" prop="name">
-            <el-input v-model="form.name" placeholder="请输入名称" />
+            <el-input v-model="form.info.name" placeholder="请输入名称" />
           </el-form-item>
         </el-col>
         <el-col :span="12">
           <el-form-item label="负责人姓名" prop="person">
-            <el-input v-model="form.person" placeholder="请输入负责人姓名" />
+            <el-input v-model="form.info.person" placeholder="请输入负责人姓名" />
           </el-form-item>
         </el-col>
       </el-row>
       <el-row :gutter="20">
         <el-col :span="12">
           <el-form-item label="负责人电话" prop="person_phone">
-            <el-input v-model="form.person_phone" placeholder="请输入负责人电话" />
+            <el-input v-model="form.info.person_phone" placeholder="请输入负责人电话" />
           </el-form-item>
         </el-col>
         <el-col :span="12">
           <el-form-item label="是否公开" prop="is_show">
-            <el-radio-group v-model="form.is_show">
+            <el-radio-group v-model="form.info.is_show">
               <el-radio v-for="i in isUseList" :key="i._id" :label="i.value">{{
                 i.label
               }}</el-radio>
@@ -124,7 +124,7 @@
       <el-col :span="24">
         <el-form-item label="地址" prop="address">
           <el-input
-            v-model="form.address"
+            v-model="form.info.address"
             :autosize="{ minRows: 2, maxRows: 4 }"
             type="textarea"
             placeholder="请输入地址"
@@ -134,7 +134,7 @@
       <el-col :span="24">
         <el-form-item label="简介" prop="brief">
           <el-input
-            v-model="form.brief"
+            v-model="form.info.brief"
             :autosize="{ minRows: 2, maxRows: 4 }"
             type="textarea"
             placeholder="请输入简介"
@@ -160,7 +160,7 @@
 // 基础
 const siteInfo = inject('siteInfo')
 const cloneDeep = inject('cloneDeep')
-const $checkRes = inject('$checkRes')
+const get = inject('get')
 // 路由
 const router = inject('router')
 // 弹框
@@ -177,8 +177,10 @@ const toLogin = inject('toLogin')
 const toBack = inject('toBack')
 // 接口
 import { UserStore } from '@/store/api/user/user'
+import { UnitStore } from '@/store/api/user/unit'
 const store = UserStore()
-const form = ref({ role: ['User', 'Expert'] })
+const unitStore = UnitStore()
+const form = ref({ role: ['User', 'Unit'], info: {} })
 const validatePhoneNumber = (rule, value, callback) => {
   const reg = /^1[3-9]\d{9}$/
   if (!value) {
@@ -220,14 +222,25 @@ const submitForm = async (formEl) => {
   await formEl.validate(async (valid, fields) => {
     if (valid) {
       const data = cloneDeep(form.value)
-      delete data.refpassword
-      const res = await store.create(data)
-      if ($checkRes(res, true)) {
-        ElMessage({
-          message: '注册用户成功,审核中请稍后登录',
-          type: 'success'
-        })
-        router.push({ path: '/login' })
+      const info = {
+        role: get(data, 'role'),
+        account: get(data, 'account'),
+        password: get(data, 'password'),
+        nick_name: get(data, 'nick_name'),
+        gender: get(data, 'gender'),
+        phone: get(data, 'phone')
+      }
+      const res = await store.create(info)
+      if (res.errcode === 0) {
+        const form = { ...{ user: get(res.data, '_id'), ...get(data, 'info') } }
+        const expert = await unitStore.create(form)
+        if (expert.errcode === 0) {
+          ElMessage({
+            message: '注册用户成功,审核中请稍后登录',
+            type: 'success'
+          })
+          router.push({ path: '/login' })
+        }
       }
     } else {
       console.log('error submit!', fields)

+ 1 - 2
src/views/register/parts/user.vue

@@ -92,7 +92,6 @@
 // 基础
 const siteInfo = inject('siteInfo')
 const cloneDeep = inject('cloneDeep')
-const $checkRes = inject('$checkRes')
 const router = inject('router')
 // 弹框
 const dialog = inject('dialog')
@@ -152,7 +151,7 @@ const submitForm = async (formEl) => {
       const data = cloneDeep(form.value)
       delete data.refpassword
       const res = await store.create(data)
-      if ($checkRes(res, true)) {
+      if (res.errcode === 0) {
         ElMessage({
           message: '注册用户成功,审核中请稍后登录',
           type: 'success'