Selaa lähdekoodia

企业详情埋点

Xiao_123 11 kuukautta sitten
vanhempi
commit
2a73a937fe

+ 1 - 1
components.d.ts

@@ -21,7 +21,7 @@ declare module 'vue' {
     CtPagination: typeof import('./src/components/CtPagination/index.vue')['default']
     CtSearch: typeof import('./src/components/CtSearch/index.vue')['default']
     CtTextField: typeof import('./src/components/CtVuetify/CtTextField/index.vue')['default']
-    DatePicker: typeof import('./src/components/DatePicker/index.vue')['default']
+    DatePicker: typeof import('./src/components/FormUI/datePicker/index.vue')['default']
     Details: typeof import('./src/components/Enterprise/details.vue')['default']
     Empty: typeof import('./src/components/Empty/index.vue')['default']
     HeadSearch: typeof import('./src/components/headSearch/index.vue')['default']

+ 8 - 0
src/api/enterprise.js

@@ -45,4 +45,12 @@ export const getEnterpriseSearch = async (params) => {
     url: '/app-api/menduner/system/enterprise/search',
     params
   })
+}
+
+// 点击企业详情埋点
+export const enterpriseClick = async (data) => {
+  return await request.post({
+    url: '/app-api/menduner/system/enterprise/click',
+    data
+  })
 }

+ 1 - 0
src/components/Enterprise/components/positions.vue

@@ -102,6 +102,7 @@ const route = useRoute(); const router = useRouter()
 const routeQuery = (route?.query && route.query && Object.keys(route?.query).length) ? route.query : null
 if (routeQuery?.content) query.content = routeQuery?.content
 provide('routeQuery', routeQuery)
+if (routeQuery) query = routeQuery
 
 // 职位详情
 const handlePosition = (val) => {

+ 72 - 63
src/components/Enterprise/details.vue

@@ -1,75 +1,77 @@
 <template>
   <div class="default-width banner px-6">
-    <div class="banner-title" v-if="Object.keys(info).length">
-      <div class="float-left d-flex align-center">
-        <v-img width="60" height="60" :src="info.enterprise.logoUrl || 'https://minio.citupro.com/dev/menduner/company-avatar.png'"></v-img>
-        <div class="ml-4">
-          <div class="contact-name">
-            {{ info.enterprise.name }}
-            <v-icon color="primary" size="24">mdi-shield-check</v-icon>
+    <div v-if="Object.keys(info).length">
+      <div class="banner-title" v-if="Object.keys(info).length">
+        <div class="float-left d-flex align-center">
+          <v-img width="60" height="60" :src="info.enterprise.logoUrl || 'https://minio.citupro.com/dev/menduner/company-avatar.png'"></v-img>
+          <div class="ml-4">
+            <div class="contact-name">
+              {{ info.enterprise.name }}
+              <v-icon color="primary" size="24">mdi-shield-check</v-icon>
+            </div>
+            <div class="contact-info">{{ info.business.type }} · {{ info.scaleName }} · {{ info.industryName }}</div>
           </div>
-          <div class="contact-info">{{ info.business.type }} · {{ info.scaleName }} · {{ info.industryName }}</div>
         </div>
-      </div>
-      <div class="float-right d-flex">
-        <div class="tools-box text-center" v-if="info.jobAdvertisedCount">
-          <div class="tools-box-number">{{ info.jobAdvertisedCount }}</div>
-          <div class="tools-box-text">职位在招</div>
+        <div class="float-right d-flex">
+          <div class="tools-box text-center" v-if="info.jobAdvertisedCount">
+            <div class="tools-box-number">{{ info.jobAdvertisedCount }}</div>
+            <div class="tools-box-text">职位在招</div>
+          </div>
+          <!-- 是否关注该企业 -->
+          <v-tooltip location="bottom">
+            <template v-slot:activator="{ props }">
+              <v-icon v-bind="props" class="ml-5 mr-2" size="25" :color="isCollection ? 'error' : ''" @click="handleFollow">{{ isCollection ? 'mdi-heart' : 'mdi-heart-outline' }}</v-icon>
+            </template>
+            <span>关注该企业</span>
+          </v-tooltip>
         </div>
-        <!-- 是否关注该企业 -->
-        <v-tooltip location="bottom">
-          <template v-slot:activator="{ props }">
-            <v-icon v-bind="props" class="ml-5 mr-2" size="25" :color="isCollection ? 'error' : ''" @click="handleFollow">{{ isCollection ? 'mdi-heart' : 'mdi-heart-outline' }}</v-icon>
-          </template>
-          <span>关注该企业</span>
-        </v-tooltip>
       </div>
-    </div>
-    <v-divider></v-divider>
-    <div class="mt-3">
-      <v-tabs v-model="tab" align-tabs="start" color="primary" bg-color="#f3f3f3" @update:model-value="handleTabClick">
-        <v-tab :value="1">公司简介</v-tab>
-        <v-tab :value="2">在招职位{{ info.jobAdvertisedCount ? `(${info.jobAdvertisedCount})` : '' }}</v-tab>
-      </v-tabs>
-      <div class="d-flex" v-if="Object.keys(info).length">
-        <div class="content-left">
-          <EnterpriseIntroduction v-if="tab === 1" :info="info" />
-          <recruitmentPositions v-else :info="info"/>
-        </div>
-        <div class="content-right">
-          <div class="welfare">
-            <h4>工作时间及福利</h4>
-            <div class="my-3" style="color: #777;font-size: 14px;">
-              <v-icon size="17" color="#ccc" class="mr-2">mdi-clock</v-icon>{{ info.enterprise.workTime }}
-            </div>
-            <div class="welfare-tags">
-              <v-chip size="small" label v-for="(k, i) in info.enterprise.welfareList.slice(0, 6)" :key="i" class="mb-2 welfare-tags-item ellipsis" color="primary">{{ k }}</v-chip>
-            </div>
+      <v-divider></v-divider>
+      <div class="mt-3">
+        <v-tabs v-model="tab" align-tabs="start" color="primary" bg-color="#f3f3f3" @update:model-value="handleTabClick">
+          <v-tab :value="1">公司简介</v-tab>
+          <v-tab :value="2">在招职位{{ info.jobAdvertisedCount ? `(${info.jobAdvertisedCount})` : '' }}</v-tab>
+        </v-tabs>
+        <div class="d-flex" v-if="Object.keys(info).length">
+          <div class="content-left">
+            <EnterpriseIntroduction v-if="tab === 1" :info="info" />
+            <recruitmentPositions v-else :info="info"/>
           </div>
-          <div class="welfare my-3">
-            <h4>工商信息</h4>
-            <div :class="['mt-2', 'business-item']" v-for="(val, index) in businessList" :key="val.value">
-              <div>{{ val.label }}</div>
-              <div class="business-value ellipsis">{{ info.business[val.value] }}</div>
-              <div :class="['my-3', {'border-bottom-dashed': index === businessList.length - 1 }]"></div>
-            </div>
-            <div class="business-source">
-              数据来源:企查查
+          <div class="content-right">
+            <div class="welfare">
+              <h4>工作时间及福利</h4>
+              <div class="my-3" style="color: #777;font-size: 14px;">
+                <v-icon size="17" color="#ccc" class="mr-2">mdi-clock</v-icon>{{ info.enterprise.workTime }}
+              </div>
+              <div class="welfare-tags">
+                <v-chip size="small" label v-for="(k, i) in info.enterprise.welfareList.slice(0, 6)" :key="i" class="mb-2 welfare-tags-item ellipsis" color="primary">{{ k }}</v-chip>
+              </div>
             </div>
-          </div>
-          <div class="welfare">
-            <h4>4位经理正在招聘</h4>
-            <div class="d-flex mt-2" v-for="(val, i) in recruitmentSpecialist" :key="i">
-              <v-avatar>
-                <v-img :src="val.avatar || 'https://minio.citupro.com/dev/menduner/7.png'"></v-img>
-              </v-avatar>
-              <div class="ml-2">
-                <div class="position-name ellipsis">{{ val.name }} · {{ val.position }}</div>
-                <div class="desc ellipsis">{{ val.desc }}</div>
+            <div class="welfare my-3">
+              <h4>工商信息</h4>
+              <div :class="['mt-2', 'business-item']" v-for="(val, index) in businessList" :key="val.value">
+                <div>{{ val.label }}</div>
+                <div class="business-value ellipsis">{{ info.business[val.value] }}</div>
+                <div :class="['my-3', {'border-bottom-dashed': index === businessList.length - 1 }]"></div>
+              </div>
+              <div class="business-source">
+                数据来源:企查查
               </div>
             </div>
-            <div class="text-center mt-3" v-if="tab === 1">
-              <v-btn class="buttons" color="primary" variant="outlined" @click="handleMorePosition">{{ $t('position.allBtn') }}</v-btn>
+            <div class="welfare">
+              <h4>4位经理正在招聘</h4>
+              <div class="d-flex mt-2" v-for="(val, i) in recruitmentSpecialist" :key="i">
+                <v-avatar>
+                  <v-img :src="val.avatar || 'https://minio.citupro.com/dev/menduner/7.png'"></v-img>
+                </v-avatar>
+                <div class="ml-2">
+                  <div class="position-name ellipsis">{{ val.name }} · {{ val.position }}</div>
+                  <div class="desc ellipsis">{{ val.desc }}</div>
+                </div>
+              </div>
+              <div class="text-center mt-3" v-if="tab === 1">
+                <v-btn class="buttons" color="primary" variant="outlined" @click="handleMorePosition">{{ $t('position.allBtn') }}</v-btn>
+              </div>
             </div>
           </div>
         </div>
@@ -83,7 +85,7 @@ defineOptions({ name: 'enterprise-details'})
 import { ref } from 'vue'
 import EnterpriseIntroduction from './components/introduction.vue'
 import recruitmentPositions from './components/positions.vue'
-import { getEnterpriseDetails, getEnterpriseSubscribeCheck, getEnterpriseSubscribe, getEnterpriseUnsubscribe } from '@/api/enterprise'
+import { getEnterpriseDetails, getEnterpriseSubscribeCheck, getEnterpriseSubscribe, getEnterpriseUnsubscribe, enterpriseClick } from '@/api/enterprise'
 import { timesTampChange } from '@/utils/date'
 import { dealDictData } from '@/views/recruit/position/components/dict.js'
 import { useRoute, useRouter } from 'vue-router'
@@ -110,6 +112,13 @@ const handleMorePosition = () => {
   window.open(`/enterprise/details/${props.id}?key=recruitmentPositions`)
 }
 
+// 企业埋点
+const handleEnterpriseClick = async () => {
+  if (!props.id) return
+  await enterpriseClick({ id: props.id })
+}
+handleEnterpriseClick()
+
 // 企业详情
 const info = ref({})
 const getDetails = async () => {

+ 2 - 2
src/components/PositionLongStrip/item.vue

@@ -1,6 +1,6 @@
 <!-- 搜索页面的职位详情-长条 -->
 <template>
-  <v-card class="positionItem" v-for="(item, index) in list" :key="index" @mouseenter="item.active = true" @mouseleave="item.active = false">
+  <div class="positionItem" v-for="(item, index) in list" :key="index" @mouseenter="item.active = true" @mouseleave="item.active = false">
     <div class="position-and-company">
       <!-- 职位 -->
       <div class="position" @mouseenter="item.positionActive = true" @mouseleave="item.positionActive = false" @click="handlePosition(item)">
@@ -42,7 +42,7 @@
         <v-chip color="primary" label size="x-small">当前在线</v-chip>
       </div>
     </div>
-  </v-card>
+  </div>
 </template>
 
 <script setup>

+ 1 - 3
src/views/Home/personal/components/hotJobs.vue

@@ -19,9 +19,7 @@ const handleClick = (item) => { router.push({ path: '/recruit/position',query: i
 let jobs = ref(null)
 const getTreeData = async () => {
   const res = await getHotPositionList()
-  jobs.value = res || []
-  // // 暂无数据,先假数据
-  // if (!res?.length) jobs.value = ['Java','PHP','C#','.NET','会计','区块链工程师','测试', '新媒体运营','人力资源专员/助理','GIS工程师']
+  jobs.value = res.splice(0, 10) || []
 }
 getTreeData()
 </script>

+ 5 - 4
src/views/recruit/position/components/conditionFilter/areaType.vue

@@ -39,13 +39,14 @@ getDict('menduner_area_type', {}, 'areaList').then(({ data }) => {
     return { id, label, number: e.value, parentId, type }
   })
   items.value = [{ id: -1, label: '全部' }, ...arr]
-  if (query && query?.areaIds) {
+  show.value = true
+})
+
+if (query && query?.areaIds) {
     title.value = '工作地点(1)'
-    selectedItems.value = [Number(query.areaIds)]
+    selectedItems.value = [query.areaIds]
     emits('inputChange', { values: selectedItems.value })
   }
-  show.value = true
-})
 
 const handle = (val) => {
   const obj = selectedItems.value.find(e => e === val.id)

+ 1 - 0
src/views/recruit/position/components/details.vue

@@ -17,6 +17,7 @@
             <v-chip size="small" label v-for="(k, i) in info.tagList" :key="i" class="mr-1" color="primary">{{ k }}</v-chip>
           </div>
           <div class="banner-tools-btns float-right">
+            <v-btn class="radius mr-2" variant="outlined" color="error" prepend-icon="mdi-share-outline" style="width: 187px; height: 36px;">分享 赚小钱赚大钱</v-btn>
             <v-btn
               class="button-item radius"
               color="warning" 

+ 3 - 4
src/views/recruit/position/index.vue

@@ -1,9 +1,8 @@
 <!-- 检索列表页 - 职位检索 -->
 <template>
   <div class="default-width">
-    <div style="width: 100%; height: 20px;"></div>
-    <v-card style="z-index: 998">
-      <div class="stickyBox my-3">
+    <div class="py-3" style="z-index: 998; background-color: #fff">
+      <div class="stickyBox">
         <headSearch 
           @handleJobClick="val => dealParams(val, 'positionId')" 
           @handleSearch="val => dealParams(val, 'content')"
@@ -11,7 +10,7 @@
       </div>
       <cityFilter class="mx-5 mb-3" ref="cityFilterRef" @updateCheckedInput="handleMounted"></cityFilter>
       <conditionFilter class="mx-5 mb-3" ref="conditionFilterRef" @conditionFilterChange="handleMounted"></conditionFilter>
-    </v-card>
+    </div>
     <div class="d-flex mt-3">
       <div class="mr-3" style="min-width: 884px;">
         <Empty v-if="!items?.length"></Empty>