Merge branch 'main-ALL-IN-ONE' of http://124.243.245.42:3000/sdz/qingdao-employment-service into main-ALL-IN-ONE

This commit is contained in:
2025-12-16 09:31:56 +08:00
10 changed files with 343 additions and 373 deletions

View File

@@ -27,7 +27,7 @@
</view> </view>
<!-- 主体内容区域 --> <!-- 主体内容区域 -->
<view class="container-main"> <view class="container-main" :style="{ backgroundColor: mainbackGroundColor }">
<scroll-view v-if="useScrollView" scroll-y class="main-scroll" @scrolltolower="handleScrollToLower"> <scroll-view v-if="useScrollView" scroll-y class="main-scroll" @scrolltolower="handleScrollToLower">
<slot></slot> <slot></slot>
</scroll-view> </scroll-view>
@@ -70,6 +70,10 @@ defineProps({
type: String, type: String,
default: '#ffffff', default: '#ffffff',
}, },
mainbackGroundColor: {
type: String,
default: '',
},
useScrollView: { useScrollView: {
type: Boolean, type: Boolean,
default: true, default: true,

View File

@@ -1,6 +1,6 @@
export default { export default {
// baseUrl: 'https://fw.rc.qingdao.gov.cn/rgpp-api/api', // 内网 baseUrl: 'https://fw.rc.qingdao.gov.cn/rgpp-api/api', // 内网
baseUrl: 'https://qd.zhaopinzao8dian.com/api', // 测试 // baseUrl: 'https://qd.zhaopinzao8dian.com/api', // 测试
// baseUrl: 'http://192.168.3.29:8081', // baseUrl: 'http://192.168.3.29:8081',
// baseUrl: 'http://10.213.6.207:19010/api', // baseUrl: 'http://10.213.6.207:19010/api',
// 语音转文字 // 语音转文字

View File

@@ -22,11 +22,11 @@
<script> <script>
eruda.init(); eruda.init();
</script> --> </script> -->
<!-- <script src="https://unpkg.com/vconsole@latest/dist/vconsole.min.js"></script> <script src="https://unpkg.com/vconsole@latest/dist/vconsole.min.js"></script>
<script> <script>
// VConsole 默认会挂载到 `window.VConsole` 上 // VConsole 默认会挂载到 `window.VConsole` 上
var vConsole = new window.VConsole(); var vConsole = new window.VConsole();
</script> --> </script>
<!-- 爱山东jssdk 本sdk存在性能问题 --> <!-- 爱山东jssdk 本sdk存在性能问题 -->
<script type="text/javascript" src="https://isdapp.shandong.gov.cn/jmopen/jssdk/index.js"></script> <script type="text/javascript" src="https://isdapp.shandong.gov.cn/jmopen/jssdk/index.js"></script>
<!-- 只在内网有效 --> <!-- 只在内网有效 -->

View File

@@ -1,5 +1,11 @@
<template> <template>
<AppLayout title="投递记录" :use-scroll-view="true" :show-bg-image="false" @onScrollBottom="getJobList()"> <AppLayout
title="投递记录"
:use-scroll-view="true"
mainback-ground-color="#f4f4f4"
:show-bg-image="false"
@onScrollBottom="getJobList()"
>
<template #headerleft v-if="isMiniProgram"> <template #headerleft v-if="isMiniProgram">
<view class="btnback"> <view class="btnback">
<image src="@/static/icon/back.png" @click="navBack"></image> <image src="@/static/icon/back.png" @click="navBack"></image>
@@ -12,7 +18,7 @@
:list="pageState.list" :list="pageState.list"
:longitude="longitudeVal" :longitude="longitudeVal"
:latitude="latitudeVal" :latitude="latitudeVal"
></renderDeliveryRecord> ></renderDeliveryRecord>
<empty v-else :is-position="true"></empty> <empty v-else :is-position="true"></empty>
</view> </view>
</AppLayout> </AppLayout>
@@ -45,8 +51,6 @@ onLoad(() => {
getJobList(); getJobList();
}); });
function getJobList(type = 'add') { function getJobList(type = 'add') {
if (type === 'refresh') { if (type === 'refresh') {
pageState.page = 1; pageState.page = 1;

View File

@@ -65,7 +65,6 @@ function removeNullProperties(obj) {
} }
return obj; return obj;
} }
</script> </script>
<style lang="stylus" scoped> <style lang="stylus" scoped>

View File

@@ -71,7 +71,7 @@
</template> </template>
<script setup> <script setup>
import { ref, inject, nextTick, computed,watch } from 'vue'; import { ref, inject, nextTick, computed, watch } from 'vue';
const { $api, navTo, insertSortData } = inject('globalFunction'); const { $api, navTo, insertSortData } = inject('globalFunction');
import { onLoad, onShow, onHide } from '@dcloudio/uni-app'; import { onLoad, onShow, onHide } from '@dcloudio/uni-app';
import Tabbar from '@/components/tabbar/midell-box.vue'; import Tabbar from '@/components/tabbar/midell-box.vue';
@@ -88,19 +88,18 @@ import config from '@/config';
const searchText = ref(''); const searchText = ref('');
const paging = ref(null); const paging = ref(null);
import useScreenStore from '@/stores/useScreenStore';
const screenStore = useScreenStore();
import useScreenStore from '@/stores/useScreenStore' const showTabbar = ref(false);
const screenStore = useScreenStore()
const showTabbar = ref(false)
watch( watch(
() => screenStore.isWideScreen, () => screenStore.isWideScreen,
(newVal) => { (newVal) => {
showTabbar.value = newVal showTabbar.value = newVal;
}, },
{ immediate: true } { immediate: true }
) );
// 实时过滤 // 实时过滤
const filteredList = computed(() => { const filteredList = computed(() => {
@@ -125,7 +124,7 @@ onHide(() => {
paging.value?.handleTouchCancel(); paging.value?.handleTouchCancel();
if (isDrawerOpen.value) { if (isDrawerOpen.value) {
isDrawerOpen.value = false; isDrawerOpen.value = false;
if(!screenStore.isWideScreen)uni.showTabBar(); if (!screenStore.isWideScreen) uni.showTabBar();
} }
}); });
@@ -134,7 +133,7 @@ const toggleDrawer = () => {
if (isDrawerOpen.value) { if (isDrawerOpen.value) {
uni.hideTabBar(); uni.hideTabBar();
} else { } else {
if(!screenStore.isWideScreen)uni.showTabBar(); if (!screenStore.isWideScreen) uni.showTabBar();
} }
}; };

View File

@@ -267,6 +267,8 @@ import AudioWave from './AudioWave.vue';
import WaveDisplay from './WaveDisplay.vue'; import WaveDisplay from './WaveDisplay.vue';
import FileIcon from './fileIcon.vue'; import FileIcon from './fileIcon.vue';
import FileText from './fileText.vue'; import FileText from './fileText.vue';
import useScreenStore from '@/stores/useScreenStore'
const screenStore = useScreenStore();
// 系统功能hook和阿里云hook // 系统功能hook和阿里云hook
import { useAudioRecorder } from '@/hook/useRealtimeRecorder2.js'; import { useAudioRecorder } from '@/hook/useRealtimeRecorder2.js';
// import { useAudioRecorder } from '@/hook/useSystemSpeechReader.js'; // import { useAudioRecorder } from '@/hook/useSystemSpeechReader.js';
@@ -446,7 +448,7 @@ const scrollToBottom = throttle(function () {
}, 500); }, 500);
function getGuess() { function getGuess() {
$api.chatRequest('/app/chat/guest', { sessionId: chatSessionID.value }, 'POST').then((res) => { $api.createRequest('/app/chat/guest', { sessionId: chatSessionID.value }, 'POST').then((res) => {
guessList.value = res.data; guessList.value = res.data;
showGuess.value = true; showGuess.value = true;
nextTick(() => { nextTick(() => {
@@ -619,14 +621,14 @@ function confirmFeeBack(value) {
useChatGroupDBStore() useChatGroupDBStore()
.badFeedback(feebackData.value, value) .badFeedback(feebackData.value, value)
.then(() => { .then(() => {
uni.showTabBar() if (!screenStore.isWideScreen) uni.showTabBar()
feeback.value?.close(); feeback.value?.close();
feeBackTips.value?.open(); feeBackTips.value?.open();
}); });
} }
function colseFeeBack() { function colseFeeBack() {
uni.showTabBar() if (!screenStore.isWideScreen) uni.showTabBar()
} }
function readMarkdown(value, index) { function readMarkdown(value, index) {
@@ -898,6 +900,7 @@ image-margin-top = 40rpx
position: relative position: relative
background: #F5F5F5; background: #F5F5F5;
border-radius: 60rpx 60rpx 60rpx 60rpx; border-radius: 60rpx 60rpx 60rpx 60rpx;
font-size: 28rpx;
} }
.input_vio .input_vio
flex: 1; flex: 1;

View File

@@ -1,14 +1,14 @@
<template> <template>
<view class="out"> <view class="out">
<view v-if="loading" class="loading"> <view v-if="loading" class="loading">
<view class="semicircle-loader"></view> <view class="semicircle-loader"></view>
</view>
<view v-else class="container" id="pixi-box" ref="pixiContainerRef"></view>
</view> </view>
<view v-else class="container" id="pixi-box" ref="pixiContainerRef"></view>
</view>
</template> </template>
<script setup> <script setup>
import { onMounted, onUnmounted, ref, nextTick ,watch} from "vue"; import { onMounted, onUnmounted, ref, nextTick, watch } from 'vue';
const props = defineProps({ const props = defineProps({
tags: { tags: {
@@ -20,7 +20,7 @@ const props = defineProps({
default: false, default: false,
}, },
}); });
const emit = defineEmits(["tag-click"]); const emit = defineEmits(['tag-click']);
// DOM Ref // DOM Ref
const pixiContainerRef = ref(null); const pixiContainerRef = ref(null);
@@ -31,359 +31,365 @@ let tagsContainer = null;
let activeTagInstances = []; let activeTagInstances = [];
// 配置数据 // 配置数据
const tagsConfig =ref( const tagsConfig = ref([
[ { bgColor: 0x0069fe, fontColor: 0xffffff, size: 16, opacity: 1.0, angle: 0, radius: 0 },
{ bgColor: 0x0069fe, fontColor: 0xffffff, size: 16, opacity: 1.0, angle: 0, radius: 0 }, {
{ bgColor: 0x87e2ec,
bgColor: 0x87e2ec, fontColor: 0xffffff,
fontColor: 0xffffff, size: 14,
size: 14, opacity: 1,
opacity: 1, angle: -Math.PI / 2,
angle: -Math.PI / 2, radius: 68,
radius: 68, tailRotation: Math.PI / 2,
tailRotation: Math.PI / 2, },
}, {
{ bgColor: 0xffebeb,
bgColor: 0xffebeb, tailColor: 0xffe1e1,
tailColor: 0xffe1e1, fontColor: 0xff6969,
fontColor: 0xff6969, size: 11.5,
size: 11.5, opacity: 1,
opacity: 1, angle: -Math.PI / 4.2,
angle: -Math.PI / 4.2, radius: 125,
radius: 125, tailRotation: (3 * Math.PI) / 4.5,
tailRotation: (3 * Math.PI) / 4.5, },
}, {
{ bgColor: 0x21ea85,
bgColor: 0x21ea85, fontColor: 0xffffff,
fontColor: 0xffffff, size: 15,
size: 15, opacity: 1,
opacity: 1, angle: -Math.PI / 10,
angle: -Math.PI / 10, radius: 130,
radius: 130, tailRotation: (3 * Math.PI) / 4.2,
tailRotation: (3 * Math.PI) / 4.2, },
}, {
{ bgColor: 0xebf3ff,
bgColor: 0xebf3ff, tailColor: 0xb9d3ff,
tailColor: 0xb9d3ff, fontColor: 0x1d71ef,
fontColor: 0x1d71ef, size: 12,
size: 12, opacity: 1,
opacity: 1, angle: Math.PI / 18,
angle: Math.PI / 18, radius: 135,
radius: 135, tailRotation: (3 * Math.PI) / 4.3,
tailRotation: (3 * Math.PI) / 4.3, },
}, {
{ bgColor: 0xffd4b6,
bgColor: 0xffd4b6, fontColor: 0xffffff,
fontColor: 0xffffff, size: 14,
size: 14, opacity: 1,
opacity: 1, angle: Math.PI / 4.3,
angle: Math.PI / 4.3, radius: 100,
radius: 100, tailRotation: -(3 * Math.PI) / 4.5,
tailRotation: -(3 * Math.PI) / 4.5, },
},
{ {
bgColor: 0xff9400, bgColor: 0xff9400,
fontColor: 0xffffff, fontColor: 0xffffff,
size: 14, size: 14,
opacity: 1, opacity: 1,
angle: (2 * Math.PI) / 3, angle: (2 * Math.PI) / 3,
radius: 92, radius: 92,
tailRotation: -Math.PI / 2.4, tailRotation: -Math.PI / 2.4,
}, },
{ {
bgColor: 0xebf3ff, bgColor: 0xebf3ff,
tailColor: 0xb9d3ff, tailColor: 0xb9d3ff,
fontColor: 0x1d71ef, fontColor: 0x1d71ef,
size: 10.5, size: 10.5,
opacity: 1, opacity: 1,
angle: (5.4 * Math.PI) / 6, angle: (5.4 * Math.PI) / 6,
radius: 110, radius: 110,
tailRotation: (3 * Math.PI) / 1.79, tailRotation: (3 * Math.PI) / 1.79,
}, },
{ {
bgColor: 0xff6969, bgColor: 0xff6969,
fontColor: 0xffffff, fontColor: 0xffffff,
size: 14, size: 14,
opacity: 1, opacity: 1,
angle: (6.3 * Math.PI) / 5.8, angle: (6.3 * Math.PI) / 5.8,
radius: 120, radius: 120,
tailRotation: Math.PI / 2.9, tailRotation: Math.PI / 2.9,
}, },
{ {
bgColor: 0xfce9c9, bgColor: 0xfce9c9,
fontColor: 0xfbc55f, fontColor: 0xfbc55f,
size: 13, size: 13,
opacity: 1, opacity: 1,
angle: (7.2 * Math.PI) / 5.9, angle: (7.2 * Math.PI) / 5.9,
radius: 120, radius: 120,
tailRotation: Math.PI / 3, tailRotation: Math.PI / 3,
}, },
] ]);
)
watch( watch(
()=>props.tags, () => props.tags,
(val)=>{ (val) => {
if(val&&val.length){ if (val && val.length) {
tagsConfig.value.map((tag,index)=>{ tagsConfig.value.map((tag, index) => {
console.log(val[index]) // console.log(val[index])
tag.name = val[index]?.job_name tag.name = val[index]?.job_name;
}) });
setTimeout(() => { setTimeout(() => {
initPixi() initPixi();
}, 100); }, 100);
} }
}, },
{deep:true} { deep: true }
) );
onMounted(async () => { onMounted(async () => {
window.addEventListener("resize", handleResize); window.addEventListener('resize', handleResize);
}); });
onUnmounted(() => { onUnmounted(() => {
window.removeEventListener("resize", handleResize); window.removeEventListener('resize', handleResize);
if (app) { if (app) {
app.destroy(true, { children: true, texture: true, baseTexture: true }); app.destroy(true, { children: true, texture: true, baseTexture: true });
app = null; app = null;
} }
}); });
const getContainerDOM = () => { const getContainerDOM = () => {
const refVal = pixiContainerRef.value; const refVal = pixiContainerRef.value;
if (!refVal) return document.getElementById("pixi-box"); if (!refVal) return document.getElementById('pixi-box');
if (refVal.$el) return refVal.$el; if (refVal.$el) return refVal.$el;
return refVal; return refVal;
}; };
const clamp = (num, min, max) => Math.min(Math.max(num, min), max); const clamp = (num, min, max) => Math.min(Math.max(num, min), max);
const initPixi = () => { const initPixi = () => {
const container = getContainerDOM(); const container = getContainerDOM();
if (!container) return; if (!container) return;
const width = container.clientWidth || 300; const width = container.clientWidth || 300;
const height = container.clientHeight || 300; const height = container.clientHeight || 300;
if (app) return; if (app) return;
app = new PIXI.Application({ app = new PIXI.Application({
width: width, width: width,
height: height, height: height,
backgroundAlpha: 0, backgroundAlpha: 0,
backgroundColor: 0xf5f7fa, backgroundColor: 0xf5f7fa,
antialias: true, antialias: true,
resolution: window.devicePixelRatio || 1, resolution: window.devicePixelRatio || 1,
autoDensity: true, autoDensity: true,
}); });
app.view.style.touchAction = "auto"; app.view.style.touchAction = 'auto';
container.appendChild(app.view); container.appendChild(app.view);
tagsContainer = new PIXI.Container(); tagsContainer = new PIXI.Container();
app.stage.addChild(tagsContainer); app.stage.addChild(tagsContainer);
renderScene(width, height); renderScene(width, height);
}; };
const renderScene = (sw, sh) => { const renderScene = (sw, sh) => {
let ratio = window.innerWidth / 400; let ratio = window.innerWidth / 400;
if (ratio < 1) ratio = 1; if (ratio < 1) ratio = 1;
tagsContainer.removeChildren(); tagsContainer.removeChildren();
activeTagInstances = []; activeTagInstances = [];
tagsConfig.value.forEach((data, index) => { tagsConfig.value.forEach((data, index) => {
const scaledRadius = data.radius * ratio; const scaledRadius = data.radius * ratio;
let x = sw / 2 + scaledRadius * Math.cos(data.angle); let x = sw / 2 + scaledRadius * Math.cos(data.angle);
let y = sh / 2 + scaledRadius * Math.sin(data.angle); let y = sh / 2 + scaledRadius * Math.sin(data.angle);
const tag = createTag(data, index, ratio); const tag = createTag(data, index, ratio);
tagsContainer.addChild(tag); tagsContainer.addChild(tag);
const safeW = tag.width / 2 + 10; const safeW = tag.width / 2 + 10;
const safeH = tag.height / 2 + 10; const safeH = tag.height / 2 + 10;
// 强制修正 x 和 y使其不超出屏幕 // 强制修正 x 和 y使其不超出屏幕
x = clamp(x, safeW, sw - safeW); x = clamp(x, safeW, sw - safeW);
y = clamp(y, safeH, sh - safeH); y = clamp(y, safeH, sh - safeH);
tag.x = x; tag.x = x;
tag.y = y; tag.y = y;
// 4. 保存元数据 // 4. 保存元数据
tag.userData = { tag.userData = {
originalX: x, originalX: x,
originalY: y, originalY: y,
angle: data.angle, angle: data.angle,
radius: scaledRadius, radius: scaledRadius,
floatOffset: Math.random() * Math.PI * 2, floatOffset: Math.random() * Math.PI * 2,
floatSpeed: 0.01 + Math.random() * 0.02, floatSpeed: 0.01 + Math.random() * 0.02,
floatRange: 2 + Math.random() * 2, floatRange: 2 + Math.random() * 2,
safeH: safeH, safeH: safeH,
}; };
if (data.radius > 0) { if (data.radius > 0) {
const tail = createCometTail(data.tailColor || data.bgColor, data.tailRotation, tag.width, tag.height, ratio); const tail = createCometTail(
tag.addChildAt(tail, 0); data.tailColor || data.bgColor,
tag.updateTail = () => tail.updateAnim(); data.tailRotation,
} tag.width,
tag.height,
ratio
);
tag.addChildAt(tail, 0);
tag.updateTail = () => tail.updateAnim();
}
activeTagInstances.push(tag); activeTagInstances.push(tag);
}); });
// 动画循环 // 动画循环
app.ticker.add(() => { app.ticker.add(() => {
const screenH = app.screen.height; const screenH = app.screen.height;
activeTagInstances.forEach((tag) => { activeTagInstances.forEach((tag) => {
const meta = tag.userData; const meta = tag.userData;
if (meta) { if (meta) {
// 计算新的浮动位置 // 计算新的浮动位置
meta.floatOffset += meta.floatSpeed; meta.floatOffset += meta.floatSpeed;
let nextY = meta.originalY + Math.sin(meta.floatOffset) * meta.floatRange; let nextY = meta.originalY + Math.sin(meta.floatOffset) * meta.floatRange;
// 再次进行边界检查 // 再次进行边界检查
if (nextY < meta.safeH) nextY = meta.safeH; if (nextY < meta.safeH) nextY = meta.safeH;
if (nextY > screenH - meta.safeH) nextY = screenH - meta.safeH; if (nextY > screenH - meta.safeH) nextY = screenH - meta.safeH;
tag.y = nextY; tag.y = nextY;
if (tag.updateTail) tag.updateTail(); if (tag.updateTail) tag.updateTail();
} }
});
}); });
});
}; };
const createTag = (tagData, index, ratio) => { const createTag = (tagData, index, ratio) => {
if (ratio > 1) ratio = ratio * 0.9; if (ratio > 1) ratio = ratio * 0.9;
const tagGroup = new PIXI.Container(); const tagGroup = new PIXI.Container();
tagGroup.eventMode = "static"; tagGroup.eventMode = 'static';
tagGroup.cursor = "pointer"; tagGroup.cursor = 'pointer';
tagGroup.on("pointertap", () => emit("tag-click", tagData)); tagGroup.on('pointertap', () => emit('tag-click', tagData));
const text = new PIXI.Text(tagData.name, { const text = new PIXI.Text(tagData.name, {
fontFamily: ["PingFang SC", "Microsoft YaHei", "Arial"], fontFamily: ['PingFang SC', 'Microsoft YaHei', 'Arial'],
fontSize: tagData.size * ratio, fontSize: tagData.size * ratio,
fill: tagData.fontColor, fill: tagData.fontColor,
padding: 4 * ratio, padding: 4 * ratio,
resolution: 2, resolution: 2,
}); });
text.anchor.set(0.5); text.anchor.set(0.5);
const paddingH = 26 * ratio; const paddingH = 26 * ratio;
const paddingV = 10 * ratio; const paddingV = 10 * ratio;
let bgWidth = text.width + paddingH; let bgWidth = text.width + paddingH;
let bgHeight = text.height + paddingV; let bgHeight = text.height + paddingV;
if (index === 0) bgWidth = Math.max(bgWidth, tagData.size * 4.5); if (index === 0) bgWidth = Math.max(bgWidth, tagData.size * 4.5);
const bg = new PIXI.Graphics(); const bg = new PIXI.Graphics();
bg.beginFill(tagData.bgColor, tagData.opacity ?? 1); bg.beginFill(tagData.bgColor, tagData.opacity ?? 1);
bg.drawRoundedRect(-bgWidth / 2, -bgHeight / 2, bgWidth, bgHeight, bgHeight / 2); bg.drawRoundedRect(-bgWidth / 2, -bgHeight / 2, bgWidth, bgHeight, bgHeight / 2);
bg.endFill(); bg.endFill();
tagGroup.addChild(bg); tagGroup.addChild(bg);
tagGroup.addChild(text); tagGroup.addChild(text);
return tagGroup; return tagGroup;
}; };
const createCometTail = (bgColor, tailRotation, parentWidth,parentHeight, ratio) => { const createCometTail = (bgColor, tailRotation, parentWidth, parentHeight, ratio) => {
if (ratio > 1) ratio = ratio ; if (ratio > 1) ratio = ratio;
const tailGroup = new PIXI.Container(); const tailGroup = new PIXI.Container();
const graphics = new PIXI.Graphics(); const graphics = new PIXI.Graphics();
tailGroup.addChild(graphics); tailGroup.addChild(graphics);
const baseLength = 45 * ratio; const baseLength = 45 * ratio;
const startWidth = parentHeight + 20 * ratio; const startWidth = parentHeight + 20 * ratio;
const endWidth = parentHeight * 0.4; const endWidth = parentHeight * 0.4;
let breathPhase = Math.random() * Math.PI * 2; let breathPhase = Math.random() * Math.PI * 2;
const breathSpeed = 0.04; const breathSpeed = 0.04;
tailGroup.updateAnim = () => { tailGroup.updateAnim = () => {
breathPhase += breathSpeed; breathPhase += breathSpeed;
const breathScale = 0.85 + 0.15 * Math.sin(breathPhase); const breathScale = 0.85 + 0.15 * Math.sin(breathPhase);
graphics.clear(); graphics.clear();
const currentLength = baseLength * breathScale; const currentLength = baseLength * breathScale;
const cos = Math.cos(tailRotation); const cos = Math.cos(tailRotation);
const sin = Math.sin(tailRotation); const sin = Math.sin(tailRotation);
const perpX = -sin; const perpX = -sin;
const perpY = cos; const perpY = cos;
const p1 = { x: perpX * (startWidth / 2), y: perpY * (startWidth / 2) }; const p1 = { x: perpX * (startWidth / 2), y: perpY * (startWidth / 2) };
const p2 = { x: -perpX * (startWidth / 2), y: -perpY * (startWidth / 2) }; const p2 = { x: -perpX * (startWidth / 2), y: -perpY * (startWidth / 2) };
const endCX = cos * currentLength; const endCX = cos * currentLength;
const endCY = sin * currentLength; const endCY = sin * currentLength;
const p3 = { x: endCX - perpX * (endWidth / 2), y: endCY - perpY * (endWidth / 2) }; const p3 = { x: endCX - perpX * (endWidth / 2), y: endCY - perpY * (endWidth / 2) };
const p4 = { x: endCX + perpX * (endWidth / 2), y: endCY + perpY * (endWidth / 2) }; const p4 = { x: endCX + perpX * (endWidth / 2), y: endCY + perpY * (endWidth / 2) };
const segments = 8; const segments = 8;
for (let i = 0; i < segments; i++) { for (let i = 0; i < segments; i++) {
const t1 = i / segments; const t1 = i / segments;
const t2 = (i + 1) / segments; const t2 = (i + 1) / segments;
const alpha = 0.4 * (1 - t1); const alpha = 0.4 * (1 - t1);
const sp1 = { x: p1.x + (p4.x - p1.x) * t1, y: p1.y + (p4.y - p1.y) * t1 }; const sp1 = { x: p1.x + (p4.x - p1.x) * t1, y: p1.y + (p4.y - p1.y) * t1 };
const sp2 = { x: p2.x + (p3.x - p2.x) * t1, y: p2.y + (p3.y - p2.y) * t1 }; const sp2 = { x: p2.x + (p3.x - p2.x) * t1, y: p2.y + (p3.y - p2.y) * t1 };
const ep1 = { x: p1.x + (p4.x - p1.x) * t2, y: p1.y + (p4.y - p1.y) * t2 }; const ep1 = { x: p1.x + (p4.x - p1.x) * t2, y: p1.y + (p4.y - p1.y) * t2 };
const ep2 = { x: p2.x + (p3.x - p2.x) * t2, y: p2.y + (p3.y - p2.y) * t2 }; const ep2 = { x: p2.x + (p3.x - p2.x) * t2, y: p2.y + (p3.y - p2.y) * t2 };
graphics.beginFill(bgColor, alpha); graphics.beginFill(bgColor, alpha);
graphics.moveTo(sp1.x, sp1.y); graphics.moveTo(sp1.x, sp1.y);
graphics.lineTo(sp2.x, sp2.y); graphics.lineTo(sp2.x, sp2.y);
graphics.lineTo(ep2.x, ep2.y); graphics.lineTo(ep2.x, ep2.y);
graphics.lineTo(ep1.x, ep1.y); graphics.lineTo(ep1.x, ep1.y);
graphics.endFill(); graphics.endFill();
} }
}; };
tailGroup.updateAnim(); tailGroup.updateAnim();
return tailGroup; return tailGroup;
}; };
const handleResize = () => { const handleResize = () => {
const container = getContainerDOM(); const container = getContainerDOM();
if (!app || !container) return; if (!app || !container) return;
app.destroy(true, { children: true, texture: true, baseTexture: true }); app.destroy(true, { children: true, texture: true, baseTexture: true });
app = null; app = null;
initPixi() initPixi();
}; };
</script> </script>
<style scoped> <style scoped>
.out{ .out {
width: 100%; width: 100%;
height: 100%; height: 100%;
} }
.loading{ .loading {
width: 100%; width: 100%;
height: 100%; height: 100%;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
} }
.semicircle-loader { .semicircle-loader {
width: 150rpx; width: 150rpx;
height: 150rpx; height: 150rpx;
border: 12rpx solid #f3f3f3; border: 12rpx solid #f3f3f3;
border-top: 12rpx solid #3498db; border-top: 12rpx solid #3498db;
border-radius: 50%; border-radius: 50%;
animation: spin 1.2s linear infinite; animation: spin 1.2s linear infinite;
} }
@keyframes spin { @keyframes spin {
0% { transform: rotate(0deg); } 0% {
100% { transform: rotate(360deg); } transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
} }
.container { .container {
width: 100%; width: 100%;
height: 100%; height: 100%;
position: relative; position: relative;
overflow: hidden; overflow: hidden;
color: #b9d3ff; color: #b9d3ff;
} }
</style> </style>

View File

@@ -280,8 +280,8 @@ const isSticky = ref(false);
const showScrollBottom = ref(false); const showScrollBottom = ref(false);
const scrollTop = ref(0); const scrollTop = ref(0);
const matchTags = ref([]) const matchTags = ref([]);
const matchLoading = ref(false) const matchLoading = ref(false);
const emits = defineEmits(['onShowTabbar']); const emits = defineEmits(['onShowTabbar']);
@@ -314,69 +314,24 @@ const rangeOptions = ref([
]); ]);
const isLoaded = ref(false); const isLoaded = ref(false);
const occupations = [
'律师',
'工程师',
'医生',
'教师',
'设计师',
'程序员',
'会计师',
'建筑师',
'护士',
'销售',
'经理',
'顾问',
'分析师',
'研究员',
'编辑',
'记者',
'摄影师',
'厨师',
'司机',
'保安',
'客服',
'行政',
'人事',
'市场',
'运营',
'产品',
'测试',
'运维',
'前端',
'后端',
'全栈',
'数据',
'策划',
'导演',
'演员',
'歌手',
'作家',
'画家',
'翻译',
'导游',
];
const colors = ['#0069FE', '#FF9400', '#FF6969', '#21EA85', '#87E2EC']; const colors = ['#0069FE', '#FF9400', '#FF6969', '#21EA85', '#87E2EC'];
onMounted(() => { onMounted(() => {
let firstEntry = uni.getStorageSync('firstEntry') === false ? false : true; // 默认未读 let firstEntry = uni.getStorageSync('firstEntry') === false ? false : true; // 默认未读
maskFirstEntry.value = firstEntry; maskFirstEntry.value = firstEntry;
getMatchTags() getMatchTags();
}); });
async function getMatchTags(){ async function getMatchTags() {
try{ try {
matchLoading.value=true matchLoading.value = true;
const {data} = await $api.createRequest('/app/user/getJobAdviceByResume') const { data } = await $api.createRequest('/app/user/getJobAdviceByResume');
matchTags.value = data matchTags.value = data;
matchLoading.value=false matchLoading.value = false;
}catch(err){ } catch (err) {
console.err('简历匹配职位获取失败') console.err('简历匹配职位获取失败');
}finally{ } finally {
} }
} }
const checkStickyStatus = (e) => { const checkStickyStatus = (e) => {
@@ -405,7 +360,7 @@ function closeVideoTip() {
const handleTagClick = (tagInfo) => { const handleTagClick = (tagInfo) => {
console.log('点击的标签信息:', tagInfo); console.log('点击的标签信息:', tagInfo);
navTo(`/pages/search/search?keyWord=${encodeURIComponent(tagInfo.name)}`) navTo(`/pages/search/search?keyWord=${encodeURIComponent(tagInfo.name)}`);
}; };
const handleItemClick = (item) => { const handleItemClick = (item) => {

View File

@@ -216,7 +216,7 @@ const useChatGroupDBStore = defineStore("messageGroup", () => {
userBadFeedback: content, userBadFeedback: content,
} }
$api.chatRequest('/stepped', parmas, 'POST').then((res) => { $api.createRequest('/stepped', parmas, 'POST').then((res) => {
baseDB.db.update(massageName.value, dbData) // 更新本地数据库 baseDB.db.update(massageName.value, dbData) // 更新本地数据库
messages.value.forEach((item) => { messages.value.forEach((item) => {
if (item.id === dbData.id) { if (item.id === dbData.id) {
@@ -230,7 +230,7 @@ const useChatGroupDBStore = defineStore("messageGroup", () => {
// 云端数据 // 云端数据
function getHistory() { function getHistory() {
$api.chatRequest('/app/chat/getHistory').then((res) => { $api.createRequest('/app/chat/getHistory').then((res) => {
if (!res.data.list.length) return if (!res.data.list.length) return
let tabel = parseHistory(res.data.list) let tabel = parseHistory(res.data.list)
if (tabel && tabel.length) { if (tabel && tabel.length) {
@@ -250,14 +250,14 @@ const useChatGroupDBStore = defineStore("messageGroup", () => {
const params = { const params = {
sessionId: chatSessionID.value sessionId: chatSessionID.value
} }
$api.chatRequest('/app/chat/detail', params, 'GET', loading).then((res) => { $api.createRequest('/app/chat/detail', params, 'GET', loading).then((res) => {
let list = parseHistoryDetail(res.data.list, chatSessionID.value) let list = parseHistoryDetail(res.data.list, chatSessionID.value)
if (list.length) { if (list.length) {
baseDB.db.add(massageName.value, list).then((ids) => { baseDB.db.add(massageName.value, list).then((ids) => {
messages.value = listAddId(list, ids) messages.value = listAddId(list, ids)
}); });
} }
console.log('解析后:', list) // console.log('解析后:', list)
}).catch(() => { }).catch(() => {
msg('请求出现异常,请联系工作人员') msg('请求出现异常,请联系工作人员')
}) })