Browse Source

修改个人中心

zs 1 year ago
parent
commit
087a66a1bd

+ 9 - 0
src/store/api/platform/achievement.js

@@ -13,6 +13,14 @@ export const AchievementStore = defineStore('achievement', () => {
     const res = await axios.$get(`${url}`, cond)
     return res
   }
+  const list = 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}/list`, cond)
+    return res
+  }
   const fetch = async (payload) => {
     const res = await axios.$get(`${url}/${payload}`)
     return res
@@ -36,6 +44,7 @@ export const AchievementStore = defineStore('achievement', () => {
   }
   return {
     query,
+    list,
     fetch,
     detail,
     create,

+ 9 - 0
src/store/api/platform/project.js

@@ -13,6 +13,14 @@ export const ProjectStore = defineStore('project', () => {
     const res = await axios.$get(`${url}`, cond)
     return res
   }
+  const list = 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}/list`, cond)
+    return res
+  }
   const fetch = async (payload) => {
     const res = await axios.$get(`${url}/${payload}`)
     return res
@@ -36,6 +44,7 @@ export const ProjectStore = defineStore('project', () => {
   }
   return {
     query,
+    list,
     fetch,
     detail,
     create,

+ 2 - 2
src/views/achievement/detail.vue

@@ -110,7 +110,7 @@
                       <span>成果地区:</span>{{ getArea(item.area) }}
                     </el-col>
                     <el-col :span="24" class="two_1">
-                      <span>单位:</span>{{ item.user || '暂无单位' }}
+                      <span>单位:</span>{{ item.userName || '暂无单位' }}
                     </el-col>
                     <el-col :span="24" class="bottom">
                       <a-button size="small" type="primary" @click="toView(item)">
@@ -201,7 +201,7 @@ const searchAchieve = async (query = { skip: 0, limit }) => {
     is_use: '0',
     status: '1'
   }
-  const res = await store.query(info)
+  const res = await store.list(info)
   if (res.errcode == '0') {
     list.value = res.data
     total.value = res.total

+ 163 - 88
src/views/center/index.vue

@@ -3,74 +3,119 @@
     <el-row>
       <el-col :span="24" class="main animate__animated animate__backInRight" v-loading="loading">
         <div class="w_1200 one">
-          <el-col :span="24" class="one_1"> 基本信息</el-col>
-          <el-col :span="24" class="one_2">
-            <el-form
-              label-position="top"
-              ref="ruleFormRef"
-              :model="form"
-              :rules="rules"
-              label-width="80px"
-              class="form"
-            >
-              <el-form-item label="账号" prop="account">
-                <el-input disabled v-model="form.account" placeholder="请输入账号">
-                  <template #prefix>
-                    <el-icon>
-                      <User />
-                    </el-icon>
-                  </template>
-                </el-input>
-              </el-form-item>
-              <el-form-item label="昵称" prop="nick_name">
-                <el-input v-model="form.nick_name" placeholder="请输入昵称">
-                  <template #prefix>
-                    <el-icon>
-                      <Avatar />
-                    </el-icon>
-                  </template>
-                </el-input>
-              </el-form-item>
-              <el-form-item label="性别" prop="gender">
-                <el-select v-model="form.gender" width="100%" placeholder="请选择性别">
-                  <el-option
-                    v-for="(item, index) in genderList"
-                    :key="index"
-                    :label="item.label"
-                    :value="item.value"
-                  />
-                </el-select>
-              </el-form-item>
-              <el-form-item label="手机号" prop="phone">
-                <el-input v-model="form.phone" placeholder="请输入手机号">
-                  <template #prefix>
-                    <el-icon>
-                      <Iphone />
-                    </el-icon>
-                  </template>
-                </el-input>
-              </el-form-item>
-              <el-form-item label="角色" prop="role">
-                <el-col :span="24" class="role"> {{ getRole(form.role) }}</el-col>
-              </el-form-item>
-              <el-col :span="24" class="button">
-                <el-button type="primary" @click="submitForm(ruleFormRef)">保存</el-button>
+          <el-tabs v-model="activeName" type="card" class="tabs">
+            <el-tab-pane label="个人中心" name="first">
+              <el-col :span="24" class="one_1"> 基本信息</el-col>
+              <el-col :span="24" class="one_2">
+                <el-form
+                  label-position="top"
+                  ref="ruleFormRef"
+                  :model="form"
+                  :rules="rules"
+                  label-width="80px"
+                  class="form"
+                >
+                  <el-form-item label="账号" prop="account">
+                    <el-input disabled v-model="form.account" placeholder="请输入账号">
+                      <template #prefix>
+                        <el-icon>
+                          <User />
+                        </el-icon>
+                      </template>
+                    </el-input>
+                  </el-form-item>
+                  <el-form-item label="昵称" prop="nick_name">
+                    <el-input v-model="form.nick_name" placeholder="请输入昵称">
+                      <template #prefix>
+                        <el-icon>
+                          <Avatar />
+                        </el-icon>
+                      </template>
+                    </el-input>
+                  </el-form-item>
+                  <el-form-item label="性别" prop="gender">
+                    <el-select v-model="form.gender" width="100%" placeholder="请选择性别">
+                      <el-option
+                        v-for="(item, index) in genderList"
+                        :key="index"
+                        :label="item.label"
+                        :value="item.value"
+                      />
+                    </el-select>
+                  </el-form-item>
+                  <el-form-item label="手机号" prop="phone">
+                    <el-input v-model="form.phone" placeholder="请输入手机号">
+                      <template #prefix>
+                        <el-icon>
+                          <Iphone />
+                        </el-icon>
+                      </template>
+                    </el-input>
+                  </el-form-item>
+                  <el-col :span="24" class="button">
+                    <el-button type="primary" @click="submitForm(ruleFormRef)">保存</el-button>
+                  </el-col>
+                </el-form>
               </el-col>
-            </el-form>
-          </el-col>
-          <el-row v-if="form.type">
-            <el-col :span="24" class="one_1"> 基本资料</el-col>
-            <el-col :span="24" class="one_2">
-              <expert v-if="form.type == '1'"></expert>
-              <company v-if="form.type == '2'"></company>
-              <incubator v-if="form.type == '3'"></incubator>
-              <competition v-if="form.type == '4'"></competition>
-              <investment v-if="form.type == '5'"></investment>
-              <association v-if="form.type == '6'"></association>
-              <state v-if="form.type == '7'"></state>
-              <unit v-if="form.type == '8'"></unit>
-            </el-col>
-          </el-row>
+              <el-row v-if="form.type">
+                <el-col :span="24" class="one_1"> 基本资料</el-col>
+                <el-col :span="24" class="one_2">
+                  <expert v-if="form.type == '1'"></expert>
+                  <company v-if="form.type == '2'"></company>
+                  <incubator v-if="form.type == '3'"></incubator>
+                  <competition v-if="form.type == '4'"></competition>
+                  <investment v-if="form.type == '5'"></investment>
+                  <association v-if="form.type == '6'"></association>
+                  <state v-if="form.type == '7'"></state>
+                  <unit v-if="form.type == '8'"></unit>
+                </el-col>
+              </el-row>
+            </el-tab-pane>
+            <el-tab-pane label="修改密码" name="second">
+              <el-col :span="24" class="one_2">
+                <el-form
+                  label-position="top"
+                  ref="secondRule"
+                  :model="secondForm"
+                  :rules="secondRules"
+                  label-width="80px"
+                  class="form"
+                >
+                  <el-form-item label="新密码" prop="password">
+                    <el-input
+                      v-model="secondForm.password"
+                      type="password"
+                      show-password
+                      placeholder="请输入新密码"
+                    >
+                      <template #prefix>
+                        <el-icon>
+                          <Unlock />
+                        </el-icon>
+                      </template>
+                    </el-input>
+                  </el-form-item>
+                  <el-form-item label="确认密码" prop="refpassword">
+                    <el-input
+                      v-model="secondForm.refpassword"
+                      type="password"
+                      show-password
+                      placeholder="请再次确认输入密码"
+                    >
+                      <template #prefix>
+                        <el-icon>
+                          <Unlock />
+                        </el-icon>
+                      </template>
+                    </el-input>
+                  </el-form-item>
+                  <el-col :span="24" class="button">
+                    <el-button type="primary" @click="submit(secondRule)">修改密码</el-button>
+                  </el-col>
+                </el-form>
+              </el-col>
+            </el-tab-pane>
+          </el-tabs>
         </div>
       </el-col>
     </el-row>
@@ -80,7 +125,7 @@
 <script setup>
 // API 引用
 import { getCity } from '@/utils/city'
-import { cloneDeep, get } from 'lodash-es'
+import { cloneDeep } from 'lodash-es'
 // 组件
 import association from './parts/association.vue'
 import company from './parts/company.vue'
@@ -94,15 +139,17 @@ import investment from './parts/investment.vue'
 import { UserStore } from '@/store/user'
 const userStore = UserStore()
 const user = computed(() => userStore.user)
+const router = useRouter()
 import { UsersStore } from '@/store/api/user/user'
 const store = UsersStore()
 import { DictDataStore } from '@/store/api/system/dictData'
+import { LoginStore } from '@/store/api/login'
+const loginStore = LoginStore()
 const dictDataStore = DictDataStore()
-import { RoleStore } from '@/store/api/system/role'
-const roleStore = RoleStore()
 const $checkRes = inject('$checkRes')
 // 加载中
 const loading = ref(false)
+const activeName = ref('first')
 const form = ref({})
 // 表单验证
 const ruleFormRef = ref()
@@ -116,12 +163,28 @@ const validatePhoneNumber = (rule, value, callback) => {
   }
   callback()
 }
+const validatePassword = (rule, value, callback) => {
+  if (!value) {
+    return callback(new Error('请输入确认密码'))
+  }
+  if (secondForm.value.password !== value) {
+    callback(new Error('两次输入的密码不一致'))
+  } else {
+    callback()
+  }
+}
 const rules = reactive({
   nick_name: [{ required: true, message: '请输入昵称', trigger: 'blur' }],
   gender: [{ required: true, message: '请选择性别', trigger: 'blur' }],
   phone: [{ required: true, validator: validatePhoneNumber, trigger: 'blur' }],
   account: [{ required: true, message: '请输入账号', trigger: 'blur' }]
 })
+const secondRule = ref()
+const secondForm = ref({})
+const secondRules = reactive({
+  password: [{ required: true, message: '请输入新密码', trigger: 'blur' }],
+  refpassword: [{ required: true, validator: validatePassword, trigger: 'blur' }]
+})
 // 字典
 const typeList = ref([])
 const genderList = ref([])
@@ -134,7 +197,6 @@ const scaleList = ref([])
 const IndustryList = ref([])
 const cardTypeList = ref([])
 const contributionList = ref([])
-const roleList = ref([])
 // 请求
 onMounted(async () => {
   loading.value = true
@@ -182,19 +244,38 @@ const searchOther = async () => {
   if ($checkRes(result)) isUseList.value = result.data
   // 城市
   getCity().then((response) => (cityList.value = response.address))
-  // 角色
-  result = await roleStore.query({ is_use: '0' })
-  if ($checkRes(result)) roleList.value = result.data
 }
-const getRole = (data) => {
-  if (data) {
-    const list = []
-    for (const val of data) {
-      const res = roleList.value.find((f) => f.code === val)
-      list.push(get(res, 'name'))
+// 保存
+const submitForm = async (formEl) => {
+  if (!formEl) return
+  await formEl.validate(async (valid, fields) => {
+    if (valid) {
+      const data = cloneDeep(form.value)
+      console.log(data)
+    } else {
+      console.log('error submit!', fields)
     }
-    return list.join(',')
-  }
+  })
+}
+// 修改密码
+const submit = async (formEl) => {
+  if (!formEl) return
+  await formEl.validate(async (valid, fields) => {
+    if (valid) {
+      const data = cloneDeep(secondForm.value)
+      const res = await loginStore.rp({
+        type: 'User',
+        _id: user.value._id,
+        password: data.password
+      })
+      if (res.errcode === 0) {
+        userStore.logOut()
+        router.push('/login')
+      }
+    } else {
+      console.log('error submit!', fields)
+    }
+  })
 }
 // provide
 provide('cloneDeep', cloneDeep)
@@ -215,12 +296,6 @@ provide('contributionList', contributionList)
 .main {
   background-color: #f1f2f5;
   padding: 20px;
-  .role {
-    border: 1px solid #dcdfe6;
-    border-radius: 4px;
-    padding: 1px 11px;
-    color: #606266;
-  }
   .one {
     background-color: #fff;
     padding: 20px;

+ 2 - 2
src/views/company/detail.vue

@@ -97,7 +97,7 @@
                         <span>成果地区:</span>{{ getArea(item.area) }}
                       </el-col>
                       <el-col :span="24" class="two_1">
-                        <span>单位:</span>{{ item.user || '暂无单位' }}
+                        <span>单位:</span>{{ item.userName || '暂无单位' }}
                       </el-col>
                       <el-col :span="24" class="bottom">
                         <a-button size="small" type="primary" @click="toView(item)">
@@ -185,7 +185,7 @@ const searchAchieve = async (query = { skip: 0, limit }) => {
     is_use: '0',
     status: '1'
   }
-  const res = await achievementStore.query(info)
+  const res = await achievementStore.list(info)
   if (res.errcode == '0') {
     list.value = res.data
     total.value = res.total

+ 2 - 2
src/views/demand/detail.vue

@@ -97,7 +97,7 @@
                       <span>需求地区:</span>{{ getArea(item.area) }}
                     </el-col>
                     <el-col :span="24" class="two_1">
-                      <span>单位:</span>{{ item.user || '暂无单位' }}
+                      <span>单位:</span>{{ item.userName || '暂无单位' }}
                     </el-col>
                     <el-col :span="24" class="bottom">
                       <a-button size="small" type="primary" @click="toView(item)">
@@ -187,7 +187,7 @@ const searchAchieve = async (query = { skip: 0, limit }) => {
     is_use: '0',
     status: '1'
   }
-  const res = await store.query(info)
+  const res = await store.list(info)
   if (res.errcode == '0') {
     list.value = res.data
     total.value = res.total

+ 2 - 2
src/views/expert/detail.vue

@@ -64,7 +64,7 @@
                         <span>成果地区:</span>{{ getArea(item.area) }}
                       </el-col>
                       <el-col :span="24" class="two_1">
-                        <span>单位:</span>{{ item.user || '暂无单位' }}
+                        <span>单位:</span>{{ item.userName || '暂无单位' }}
                       </el-col>
                       <el-col :span="24" class="bottom">
                         <a-button size="small" type="primary" @click="toView(item)">
@@ -152,7 +152,7 @@ const searchAchieve = async (query = { skip: 0, limit }) => {
     is_use: '0',
     status: '1'
   }
-  const res = await achievementStore.query(info)
+  const res = await achievementStore.list(info)
   if (res.errcode == '0') {
     list.value = res.data
     total.value = res.total

+ 1 - 1
src/views/home/index.vue

@@ -433,7 +433,7 @@ const searchAchieve = async () => {
     is_use: '0',
     status: '1'
   }
-  const res = await achievementStore.query(info)
+  const res = await achievementStore.list(info)
   if (res.errcode == '0') achievementList.value = res.data
 }
 // 字典数据转换

+ 6 - 6
src/views/project/detail.vue

@@ -103,7 +103,7 @@
                       <span>项目地区:</span>{{ getArea(item.area) }}
                     </el-col>
                     <el-col :span="24" class="two_1">
-                      <span>单位:</span>{{ item.user || '暂无单位' }}
+                      <span>单位:</span>{{ item.userName || '暂无单位' }}
                     </el-col>
                     <el-col :span="24" class="bottom">
                       <a-button size="small" type="primary" @click="toView(item)">
@@ -173,7 +173,7 @@ onMounted(async () => {
   loading.value = true
   await searchOther()
   await search()
-  await searchAchieve({ skip, limit })
+  await searchProject({ skip, limit })
   loading.value = false
 })
 const search = async () => {
@@ -186,14 +186,14 @@ const search = async () => {
     }
   }
 }
-const searchAchieve = async (query = { skip: 0, limit }) => {
+const searchProject = async (query = { skip: 0, limit }) => {
   const info = {
     skip: query.skip,
     limit: query.limit,
     is_use: '0',
     status: '1'
   }
-  const res = await store.query(info)
+  const res = await store.list(info)
   if (res.errcode == '0') {
     list.value = res.data
     total.value = res.total
@@ -279,13 +279,13 @@ const toView = (item) => {
 const currentPage = ref(1)
 // 分页
 const changePage = (page = currentPage.value) => {
-  searchAchieve({ skip: (page - 1) * limit, limit: limit })
+  searchProject({ skip: (page - 1) * limit, limit: limit })
 }
 const sizeChange = (limits) => {
   console.log(limits)
   limit = limits
   currentPage.value = 1
-  searchAchieve({ skip: 0, limit: limit })
+  searchProject({ skip: 0, limit: limit })
 }
 </script>
 <style scoped lang="scss">