Xiao_123 7 hónapja
szülő
commit
f67b0be054

+ 1 - 0
App.vue

@@ -2,6 +2,7 @@
 	export default {
 		onLaunch: function() {
 			console.log('App Launch')
+			uni.setStorageSync('firstOpen', true)
 		},
 		onShow: function() {
 			console.log('App Show')

+ 70 - 0
components/Advertisement/index.vue

@@ -0,0 +1,70 @@
+<template>
+  <view >
+		<uni-popup ref="inputDialog"  class="pop" :mask-click="false" @close="closeAdd">
+			<view class="popup-content" >
+					<swiper class="swiper-box" @change="swiperChange">
+						<swiper-item v-for="(item ,index) in swiperList" :key="index" class="f-straight">
+							<image class="img-item" :src="item.url" @click="skipLink()" mode="widthFix"></image>
+							<view @click="closeAdd" class="f-horizon-center">
+								<uni-icons style="display: flex;justify-content: flex-end;" type="closeempty"	size="40"	color="#fff"/>
+							</view>
+						</swiper-item>
+					</swiper>
+			</view>
+		</uni-popup>
+	</view>
+</template>
+
+<script setup>
+import { ref, onMounted } from 'vue'
+const emit = defineEmits(['login'])
+
+const current = ref(0)
+const inputDialog = ref()
+const swiperList = [{ url: 'https://minio.citupro.com/dev/menduner/advertisement.jpg', path: '' }]
+
+const closeAdd = () => {
+  inputDialog.value.close()
+	uni.removeStorageSync('firstOpen')
+}
+
+const openDialog = () => {
+  inputDialog.value.open()
+}
+
+const skipLink = () => {
+	closeAdd()
+	emit('login')
+}
+
+const swiperChange = (e) => {
+  current.value = e.detail.current
+}
+
+onMounted(() => {
+  if(uni.getStorageSync('firstOpen')) openDialog()
+})
+</script>
+
+<style scoped lang="scss">
+.popup-content {
+	align-items: center;
+	justify-content: center;
+	width: 80vw;
+	height: 100vh;
+}
+.img-item{
+	width: 100%;
+	height: 60vh;
+	margin: 0;
+	border-radius: 20px;
+}
+.swiper-box{
+	height: 100vh;
+}
+.f-straight{
+	display: flex;
+	justify-content: center;
+	flex-direction: column;
+}
+</style>

+ 3 - 1
hooks/useIM.js

@@ -150,7 +150,9 @@ export function useDataSource () {
 
 async function getKey () {
   const useUserStore = userStore()
-
+  if (!useUserStore.accountInfo?.userId) {
+    return {}
+  }
   const keyQuery = {
     userId: useUserStore.accountInfo?.userId
   }

+ 5 - 2
pages/index/crowdsourcing.vue

@@ -43,7 +43,6 @@
 import { ref, reactive } from 'vue'
 import SwiperAd from '@/components/SwiperAd'
 // import { showAuthModal } from '@/hooks/useModal'
-import { swiperAdListTest } from '@/utils/testData'
 // import { userStore } from '@/store/user'
 import layoutPage from '@/layout'
 import ResumeStatus from '@/components/ResumeStatus'
@@ -63,7 +62,11 @@ onShow(() => {
 onLoad(() => {
 	getList()
 })
-const swiperAdList = ref(swiperAdListTest)
+const swiperAdList = [
+  'https://minio.citupro.com/dev/menduner/miniProgram/banner1.gif',
+  'https://minio.citupro.com/dev/menduner/miniProgram/banner2.jpg',
+  'https://minio.citupro.com/dev/menduner/miniProgram/banner3.jpg',
+]
 const items = reactive([])
 const pageInfo = ref({
 	pageNo: 1,

+ 39 - 32
pages/index/position.vue

@@ -1,52 +1,59 @@
 <template>
-  
-  <view class="box defaultBgc">
-    <scroll-view class="scrollBox" scroll-y="true" @scrolltolower="loadingMore" style="position:relative;">
-      <view>
-        <view class="white-bgc stick">
-          <uni-search-bar
-            v-model="query.content"
-            radius="8"
-            placeholder="请输入关键字"
-            cancelButton="none"
-            :focus="false"
-            @confirm="onSearch($event.value)"
-            @clear="query.content = ''; onSearch()"
-          />
-        </view>
-        <SwiperAd :list="swiperAdList"></SwiperAd>
-        <view class="white-bgc px-10 mb-10 stickFilter">
-          <FilterList :list="filterList" idValue="label" @change="handleSearch"></FilterList>
+  <layout-page>
+    <view class="box defaultBgc">
+      <scroll-view class="scrollBox" scroll-y="true" @scrolltolower="loadingMore" style="position:relative;">
+        <view>
+          <view class="white-bgc stick">
+            <uni-search-bar
+              v-model="query.content"
+              radius="8"
+              placeholder="请输入关键字"
+              cancelButton="none"
+              :focus="false"
+              @confirm="onSearch($event.value)"
+              @clear="query.content = ''; onSearch()"
+            />
+          </view>
+          <SwiperAd :list="swiperAdList"></SwiperAd>
+          <view class="white-bgc px-10 mb-10 stickFilter">
+            <FilterList :list="filterList" idValue="label" @change="handleSearch"></FilterList>
+          </view>
+          <PositionList :list="positionListData" :noMore="false"></PositionList>
+          <uni-load-more :status="more" />
+          
         </view>
-        <PositionList :list="positionListData" :noMore="false"></PositionList>
-        <uni-load-more :status="more" />
-        
-      </view>
-    </scroll-view>
-  </view>
-  
+      </scroll-view>
+      <AdvertisePop @login="showAuthModal()"></AdvertisePop>
+    </view>
+  </layout-page>
 </template>
 
 <script setup>
 import SwiperAd from '@/components/SwiperAd'
 import FilterList from '@/components/FilterList'
 import PositionList from '@/components/PositionList'
-import { swiperAdListTest } from '@/utils/testData'
+import AdvertisePop from '@/components/Advertisement'
 import { dealDictObjData } from '@/utils/position'
-import { getJobAdvertisedSearch } from '@/api/position';
+import { getJobAdvertisedSearch } from '@/api/position'
+import { showAuthModal } from '@/hooks/useModal'
 import { onShow } from '@dcloudio/uni-app'
+import layoutPage from '@/layout'
 
 import { ref, reactive } from 'vue'
 // 设置自定义tabbar选中值
 onShow(() => {
-    const currentPage = getCurrentPages()[0];  // 获取当前页面实例
-    const currentTabBar = currentPage?.getTabBar?.();
-    // 设置当前tab页的下标index
-    currentTabBar?.setData({ selected: 0 });
+  const currentPage = getCurrentPages()[0];  // 获取当前页面实例
+  const currentTabBar = currentPage?.getTabBar?.();
+  // 设置当前tab页的下标index
+  currentTabBar?.setData({ selected: 0 });
 })
 
 const more = ref('more')
-const swiperAdList = ref(swiperAdListTest)
+const swiperAdList = [
+  'https://minio.citupro.com/dev/menduner/miniProgram/banner1.gif',
+  'https://minio.citupro.com/dev/menduner/miniProgram/banner2.jpg',
+  'https://minio.citupro.com/dev/menduner/miniProgram/banner3.jpg',
+]
 const filterList = ref([
   { label: '城市', dictType: 'areaTreeData', key: 'areaIds', map: { text: 'name', value: 'id' } },
   { label: '行业', dictType: 'industryTreeData',key: 'industryIds', map: { text: 'nameCn', value: 'id' } },

+ 3 - 0
pages/login/index.vue

@@ -42,6 +42,8 @@
         </view>
       </view>
     </view>
+
+    <AdvertisePop></AdvertisePop>
   </view>
 </template>
 
@@ -54,6 +56,7 @@ import { userStore } from '@/store/user'
 import { onLoad } from '@dcloudio/uni-app'
 import { useIM } from '@/hooks/useIM'
 import { watch } from 'vue'
+import AdvertisePop from '@/components/Advertisement'
 
 const useUserStore = userStore()
 const smsLoginRef = ref()

+ 32 - 29
pagesA/chart/index.vue

@@ -4,7 +4,7 @@
       <view class="box-top-title">
         {{ info.name }}
         <text class="subText">
-          {{ info.postName }}
+          {{ info.postName || '' }}
           <text v-if="info.postName && info.enterpriseName" class="gun">|</text>
           {{ info.enterpriseName }}
         </text>
@@ -146,20 +146,23 @@
       
     <!-- </view> -->
     <view class="box-bottom">
-      <view class="box-bottom-tool">
+      <view class="box-bottom-tool" style="display: flex; justify-content: space-between;">
         <uni-tag :text="isSendResume ? '简历已投递' : '发送简历'" :disabled="isSendResume" type="success" @tap="handleFindResume"/>
+        <uni-tag text="发 送" type="success" @tap="handleSend"/>
       </view>
       
-      <textarea
-        v-model="inputValue"
-        confirm-type="send"
-        auto-height
-        @confirm="handleSend"
-      />
+      <view class="d-flex align-end">
+        <textarea
+          v-model="inputValue"
+          confirm-type="send"
+          auto-height
+          @confirm="handleSend"
+        />
+      </view>
     </view>
     <uni-popup ref="popup" background-color="#fff">
       <view class="popup-title">
-        <text>请选择简历</text>
+        <text>发送简历选择</text>
         <uni-icons type="closeempty" size="20" @tap="handleClose"></uni-icons>
       </view>
       <view v-for="resume in resumeList" :key="resume.id" class="popup-content" @tap="resumeCheck = resume">
@@ -176,7 +179,7 @@
         <view class="popup-upload-box">
           <uni-icons type="plusempty" size="50" color="#f1f1f1"></uni-icons>
         </view>
-        <text>请先上传简历</text>
+        <text>您还未上传过简历,点击选取微信聊天文件投递</text>
       </view>
       <view v-if="resumeList.length" class="popup-actions">
         <button class="default" type="default" @click="handleSendResume">发送简历</button>
@@ -198,7 +201,7 @@
 </template>
 
 <script setup>
-import { ref, nextTick, watch, computed } from 'vue'
+import { ref, watch } from 'vue'
 import { onLoad } from '@dcloudio/uni-app'
 import { useIMStore } from '@/store/im'
 import { userStore } from '@/store/user'
@@ -208,8 +211,9 @@ import { timesTampChange } from '@/utils/date'
 import { getUserAvatar } from '@/utils/avatar'
 import { preview } from '@/utils/preview'
 import { getPersonResumeCv, saveResume } from '@/api/user'
+import { uploadFile } from '@/api/file'
 import { getInterviewInviteListByInviteUserId, getMessageType } from '@/api/common'
-import { userInterviewInviteReject, userInterviewInviteConsent } from '@/api/personalCenter'
+import { userInterviewInviteReject } from '@/api/personalCenter'
 import {
   jobCvRelSend,
   jobCvRelCheckSend,
@@ -312,7 +316,7 @@ function setScrollBottom () {
 async function getInterviewInviteList () {
   if (!info.value.id) return
   const { data } = await getInterviewInviteListByInviteUserId(info.value.id)
-  interview.value = data.slice(0, 1).map(e => {
+  interview.value = data ? data.slice(0, 1).map(e => {
     const statusItem = statusList.value.find(_e => _e.value === e.status)
     const statusText = statusItem?.label || ''
     const statusColor = ['5', '98', '99'].includes(e.status)
@@ -321,7 +325,7 @@ async function getInterviewInviteList () {
       statusColor: statusColor ? '#FE574A' : '#0E8E80',
       statusText
     }
-  })
+  }) : []
 }
 
 const getStatusList = async () => {
@@ -336,6 +340,10 @@ const getStatusList = async () => {
 }
 
 function handleSend () {
+  if (!inputValue.value) {
+    uni.showToast({ title: '不能发送空白信息', icon: 'none' })
+    return
+  }
   send(inputValue.value, channelItem.value)
 }
 
@@ -358,9 +366,6 @@ async function handleFindResume () {
   if (isSendResume.value) {
     return
   }
-  uni.showLoading({
-    title: '真正查找简历'
-  })
   try {
     // 获取简历列表
     const { data } = await getPersonResumeCv()
@@ -369,11 +374,11 @@ async function handleFindResume () {
         title: '您还未上传过简历,请先上传简历后再投递',
         icon: 'none',
         mask: true,
+        duration: 3000
       })
-      return
     }
-    resumeList.value = data
-    resumeCheck.value = data[0]
+    resumeList.value = data || []
+    resumeCheck.value = data && data.length ? data[0] : ''
     popup.value.open('center')
   } finally {
     uni.hideLoading()
@@ -401,7 +406,6 @@ async function handleSendResume () {
     type: 1
   }
   send (JSON.stringify(text), channelItem.value, 105)
-  // console.log(isEmployment.value, positionInfo.value)
   try {
     if (isEmployment.value !== '-1') {
       await jobCvRelHireSend({
@@ -420,7 +424,6 @@ async function handleSendResume () {
     isSendResume.value = true
     popup.value.close()
   } catch (error) {
-
   }
 }
 
@@ -796,22 +799,22 @@ onLoad(async (options) => {
     }
   }
   .popup-upload {
-    display: flex;
-    align-items: center;
-    justify-content: center;
-    flex-direction: column;
-    width: 400rpx;
+    // display: flex;
+    // align-items: center;
+    // justify-content: center;
+    // flex-direction: column;
+    // width: 70%;
     font-size: .75em;
     color: #999;
-    padding-bottom: 40rpx;
+    padding: 40rpx;
     &-box {
-      margin-top: 20rpx;
       width: 200rpx;
       height: 200rpx;
       text-align: center;
       line-height: 200rpx;
       border: 4rpx solid #ddd;
       border-radius: 8rpx;
+      margin: 0 auto;
     }
   }
   .popup-actions {

+ 0 - 5
utils/testData.js

@@ -1,8 +1,3 @@
-export const swiperAdListTest = [
-  'https://img.bosszhipin.com/beijin/activity/img/20240829/488f35070cc7d0b615328d1e05fe62df4b7d0ebc36568cfb80c0fe17b37418f00945b742138a9e17.jpg.webp',
-  'https://img.bosszhipin.com/beijin/activity/img/20240909/488f35070cc7d0b6f8f7ed925b78fbeeff4debde701ea99880c0fe17b37418f00945b742138a9e17.png.webp',
-  'https://img.bosszhipin.com/beijin/activity/img/20240228/488f35070cc7d0b6d0945cbd3f9c51073ac02fecc9479e3780c0fe17b37418f00945b742138a9e17.png.webp',
-]
 export const positionList = [
   {
     job: {