Pārlūkot izejas kodu

微信小程序编辑个人标签

lifanagju_citu 7 mēneši atpakaļ
vecāks
revīzija
ce8b6203eb

+ 26 - 0
api/user.js

@@ -268,6 +268,32 @@ export const saveBaseInfo = (data) => {
   })
 }
 
+// 根据类型获取标签信息
+export const getTagTreeDataApi = async (params) => {
+  return request({
+    url: '/admin-api/menduner/system/tag/get/by/type',
+    method: 'GET',
+    params,
+    custom: {
+      showLoading: false,
+      auth: false
+    }
+  })
+}
+
+// 修改个人画像
+export const savePersonPortrait = (data) => {
+  return request({
+    url: '/app-api/menduner/system/person/resume/tag/update',
+    method: 'POST',
+    data,
+    custom: {
+      auth: true,
+      showLoading: false
+    }
+  })
+}
+
 // 修改头像
 export const updatePersonAvatar = (avatar) => {
   return request({

+ 1 - 1
layout/components/authModal/login/index.vue

@@ -171,7 +171,7 @@ const state = ref({
 
 
 // 设置默认账号密码便于开发快捷登录
-if (window.location.hostname === 'localhost' || window.location.hostname === '192.168.3.152') {
+if (window && window.location && window.location.hostname && window.location.hostname === 'localhost') {
   state.value.account.phone = '13229740092'
   state.value.account.password = 'Citu123456'
 }

+ 6 - 0
pages.json

@@ -54,6 +54,12 @@
 						"navigationBarTitleText": "个人信息"
 					}
 				},
+				{
+					"path": "resumeOnline/portrait",
+					"style": {
+						"navigationBarTitleText": "个人画像标签选择"
+					}
+				},
 				{
 					"path": "resume/index",
 					"style": {

+ 6 - 0
pagesA/resumeOnline/index.vue

@@ -38,6 +38,7 @@
           color="#666"
           custom-prefix="iconfont"
           size="18"
+          @tap="handleTo('portrait')"
         ></uni-icons>
       </view>
       <view class="tags">
@@ -227,6 +228,7 @@ import { getDict } from '@/hooks/useDictionaries'
 import { userStore } from '@/store/user'
 import { dealJobData } from './dict'
 import layoutPage from '@/layout'
+import { onShow } from '@dcloudio/uni-app'
 
 const useUserStore = userStore()
 
@@ -362,6 +364,10 @@ getWorkExp()
 getTrainExpData()
 // 职业技能
 getSkillExpData()
+
+onShow(() => {
+  getBaseInfo()
+})
 </script>
 
 <style lang="scss" scoped>

+ 131 - 0
pagesA/resumeOnline/portrait.vue

@@ -0,0 +1,131 @@
+<template>
+  <view class="box">
+    <!-- 已选中 -->
+    <view class="chose borderLine">
+      <view class="choseTitle">已选中标签</view>
+      <view class="tags">
+        <view
+          v-for="tag in select"
+          :key="tag"
+          class="tag"
+          style="color: orange; border: 2rpx solid orange;"
+          @tap="handleCancelSelect(tag)"
+        >
+          {{ tag }}
+          <uni-icons type="clear" size="16" color="#ea8d03"></uni-icons>
+        </view>
+      </view>
+    </view>
+    <!-- 选择项 -->
+    <view v-if="showTagList && tagList?.length" class="list">
+      <uni-collapse v-model="collapseOpen">
+        <uni-collapse-item
+          v-for="val in tagList" :key="val.id"
+          :name="val.id"
+          :title="val?.nameCn || '--'"
+        >
+          <view v-if="val?.children?.length" class="tags">
+            <view v-for="k in val.children" :key="k.id">
+              <view v-if="select.includes(k.nameCn)" class="tag" style="color: grey; border: 2rpx solid grey;">
+                <uni-icons type="plusempty" size="14" color="#008978"></uni-icons>
+                {{ k?.nameCn || '--' }}
+              </view>
+              <view v-else class="tag" style="color: #008978; border: 2rpx solid #008978;" @tap="handleSelect(k.nameCn)">
+                <uni-icons type="plusempty" size="14" color="#008978"></uni-icons>
+                {{ k?.nameCn || '--' }}
+              </view>
+            </view>
+          </view>
+        </uni-collapse-item>
+      </uni-collapse>
+    </view>
+    <view class="f-horizon-center">
+      <button type="primary" size="default" class="send-button"  @click="submit">提 交</button>
+    </view>
+  </view>
+</template>
+
+<script setup>
+import { getTagTreeDataApi, savePersonPortrait } from '@/api/user'
+import { ref } from 'vue'
+import { userStore } from '@/store/user'; const useUserStore = userStore()
+
+
+// 选择
+const handleSelect = (nameCn) => {
+  const result = select.value.includes(nameCn)
+  if (!result) return select.value.push(nameCn)
+  else select.value = select.value.filter(e => e !== nameCn)
+}
+
+// 删除
+const handleCancelSelect = (nameCn) => {
+  select.value = select.value.filter(e => e !== nameCn)
+}
+
+const select = ref([])
+// 获取基础信息
+function getBaseInfo () {
+  const { tagList } = useUserStore.baseInfo
+  select.value = tagList?.length ? tagList : []
+}
+
+// 获取基础信息
+getBaseInfo()
+
+const tagList = ref([])
+const collapseOpen = ref([])
+const showTagList = ref(false)
+// 获取标签字典数据
+const getTagList = async () => {
+  showTagList.value = false
+  const res = await getTagTreeDataApi({ type: 0 })
+  tagList.value = res?.data || []
+  collapseOpen.value = tagList.value?.map(e => e.id)
+  showTagList.value = true
+}
+getTagList()
+
+// 提交
+const submit = async () => {
+  await savePersonPortrait({ tagList: select.value })
+  uni.showToast({ title: '编辑成功', icon: 'success' })
+  await useUserStore.getInfo()
+  //
+  setTimeout(() => {
+		uni.navigateBack({
+			delta: 1,
+		})
+	}, 1000);
+}
+</script>
+
+<style lang="scss" scoped>
+$px: 30rpx;
+.borderLine {
+  border-bottom: 2rpx solid #f5f5f5;
+}
+.box {
+  padding: 20rpx $px;
+  .chose {
+    margin-bottom: $px;
+    .choseTitle {
+      margin-bottom: $px;
+    }
+  }
+  .tags {
+    padding: $px 0;
+    display: flex;
+    flex-wrap: wrap;
+    .tag {
+      margin: 0 15rpx 12rpx 0;
+      border: 2rpx 15rpx #008978;
+      color: #008978;
+      white-space: nowrap;
+      padding: 4rpx 10rpx;
+      border-radius: 10rpx;
+      font-size: 24rpx;
+    }
+  }
+}
+</style>