15 Commits

Author SHA1 Message Date
770ca67616 Merge branch 'yitiji' of http://124.243.245.42:3000/sdz/ks-app-employment-service into yitiji 2026-04-02 13:38:54 +08:00
a1df8827ec Update navigation redirection in index and policyList pages to use direct URL assignment and adjust container dimensions for improved layout 2026-04-02 13:38:51 +08:00
FengHui
749ae69114 Merge branch 'yitiji' of http://124.243.245.42:3000/sdz/ks-app-employment-service into yitiji 2026-04-02 11:53:13 +08:00
FengHui
88fc1c76f2 简历指导页面添加返回到首页。 2026-04-02 11:53:11 +08:00
bc7beb1040 Refactor navigation redirection in index and policyList pages to use parent method for external URL 2026-04-02 10:59:02 +08:00
e2b26f5df8 Merge branch 'yitiji' of http://124.243.245.42:3000/sdz/ks-app-employment-service into yitiji 2026-04-02 10:56:22 +08:00
7e6ae7c7ed Update layout styles for consistent dimensions across App.vue, index.html, and common.css; modify navigation redirection in index and policyList pages 2026-04-02 10:56:20 +08:00
FengHui
4d4c689a45 退出登录,首页返回修改 2026-04-02 10:55:11 +08:00
FengHui
3411ef57b4 一体机问题修复 2026-04-01 17:46:54 +08:00
c2ae9467f9 Update back navigation to redirect to external URL in index and policyList pages 2026-03-30 11:34:18 +08:00
9c46b3996a 修改页面 2026-03-18 19:16:37 +08:00
冯辉
f2e32a9afa 删除会话功能开发 2026-03-16 18:50:38 +08:00
冯辉
8e03d70e8e 11 2026-03-16 18:41:58 +08:00
冯辉
dcec3cf154 样式优化 2026-03-13 14:52:43 +08:00
冯辉
2d5aca569a 初始化数据优化 2026-03-13 14:46:29 +08:00
19 changed files with 1008 additions and 200 deletions

View File

@@ -111,4 +111,8 @@ uni-modal,
body { body {
font-family: 'PingFangSC-Regular', 'PingFang SC', 'Microsoft YaHei', 'Helvetica Neue', Helvetica, Arial, sans-serif; font-family: 'PingFangSC-Regular', 'PingFang SC', 'Microsoft YaHei', 'Helvetica Neue', Helvetica, Arial, sans-serif;
} }
html,body{
width: 1080px!important;
height: 1920px!important;
}
</style> </style>

View File

@@ -62,10 +62,9 @@ image {
/* height: 100%; */ /* height: 100%; */
} }
body, body,html {
html { width: 1080px!important;
height: 100%; height: 1920px!important;
width: 100%;
overflow-x: hidden; overflow-x: hidden;
} }

View File

@@ -125,7 +125,7 @@
</template> </template>
<script setup> <script setup>
import { ref, reactive, onBeforeMount } from 'vue'; import { ref, reactive, onBeforeMount, watch } from 'vue';
import useDictStore from '@/stores/useDictStore'; import useDictStore from '@/stores/useDictStore';
const { getTransformChildren } = useDictStore(); const { getTransformChildren } = useDictStore();
@@ -174,12 +174,24 @@ const jobTypeOptions = ref([]);
const areaOptions = ref([]); const areaOptions = ref([]);
// 初始化获取数据 // 初始化获取数据
onBeforeMount(() => { const initData = () => {
educationOptions.value = getTransformChildren('education', '学历要求').options || []; educationOptions.value = getTransformChildren('education', '学历要求').options || [];
experienceOptions.value = getTransformChildren('experience', '工作经验').options || []; experienceOptions.value = getTransformChildren('experience', '工作经验').options || [];
scaleOptions.value = getTransformChildren('scale', '公司规模').options || []; scaleOptions.value = getTransformChildren('scale', '公司规模').options || [];
jobTypeOptions.value = getJobTypeData(); jobTypeOptions.value = getJobTypeData();
areaOptions.value = getTransformChildren('area', '地区').options || []; areaOptions.value = getTransformChildren('area', '地区').options || [];
};
// 组件挂载时初始化数据
onBeforeMount(() => {
initData();
});
// 监听组件显示状态,当显示时重新初始化数据
watch(() => props.show, (newVal) => {
if (newVal) {
initData();
}
}); });
// 处理选项选择 // 处理选项选择
@@ -313,6 +325,7 @@ const handleClose = () => {
.content-section { .content-section {
padding: 0 4%; padding: 0 4%;
overflow-y: auto; overflow-y: auto;
flex: 12;
.radio-item { .radio-item {
display: flex; display: flex;
align-items: center; align-items: center;

View File

@@ -1,7 +1,13 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<style>
html,body{
width: 1080px!important;
height: 1920px!important;
}
</style>
<script> <script>
(function() { (function() {
var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' &&

View File

@@ -25,16 +25,23 @@
<scroll-view scroll-y :show-scrollbar="false" class="chat-scroll"> <scroll-view scroll-y :show-scrollbar="false" class="chat-scroll">
<view <view
class="drawer-rows" class="drawer-rows"
@click="changeDialogue(item)"
v-for="(item, index) in filteredList" v-for="(item, index) in filteredList"
:key="item.id" :key="item.id"
> >
<view <view
v-if="!item.isTitle" v-if="!item.isTitle"
class="drawer-row-list" class="drawer-row-content"
:class="{ 'drawer-row-active': item.sessionId === chatSessionID }"
> >
{{ item.title }} <view
class="drawer-row-list"
:class="{ 'drawer-row-active': item.sessionId === chatSessionID }"
@click="changeDialogue(item)"
>
{{ item.title }}
</view>
<view class="drawer-row-delete" @click.stop="deleteSession(item)">
<uni-icons type="trash" size="24" color="#FF4444"></uni-icons>
</view>
</view> </view>
<view class="drawer-row-title" v-else> <view class="drawer-row-title" v-else>
{{ item.title }} {{ item.title }}
@@ -166,6 +173,21 @@ const changeDialogue = (item) => {
}); });
} }
}; };
const deleteSession = (item) => {
if (item.sessionId) {
uni.showModal({
content: '确认删除该会话?',
success: async (res) => {
if (res.confirm) {
await useChatGroupDBStore().deleteSession(item.sessionId);
$api.msg('会话删除成功');
}
}
});
}
};
function updateSetting() { function updateSetting() {
$api.msg('该功能正在开发中,敬请期待后续更新!'); $api.msg('该功能正在开发中,敬请期待后续更新!');
} }
@@ -276,6 +298,11 @@ footer-height = 147rpx
overflow:hidden; //超出的文本隐藏 overflow:hidden; //超出的文本隐藏
text-overflow:ellipsis; //溢出用省略号显示 text-overflow:ellipsis; //溢出用省略号显示
white-space:nowrap; //溢出不换行 white-space:nowrap; //溢出不换行
.drawer-row-content
display: flex
align-items: center
justify-content: space-between
width: 100%
.drawer-row-title .drawer-row-title
color: #A6A6A6; color: #A6A6A6;
font-weight: 500; font-weight: 500;
@@ -285,6 +312,7 @@ footer-height = 147rpx
margin-top: 75rpx margin-top: 75rpx
margin-bottom: 24rpx margin-bottom: 24rpx
.drawer-row-list .drawer-row-list
flex: 1
height: 99rpx; height: 99rpx;
line-height: 99rpx line-height: 99rpx
font-size: 42rpx font-size: 42rpx
@@ -293,6 +321,12 @@ footer-height = 147rpx
font-weight: 500; font-weight: 500;
color: #595959; color: #595959;
padding: 0 36rpx padding: 0 36rpx
.drawer-row-delete
padding: 0 18rpx
height: 99rpx
display: flex
align-items: center
justify-content: center
.drawer-row-active .drawer-row-active
.drawer-row-list:active .drawer-row-list:active
color: #333333; color: #333333;

View File

@@ -1,7 +1,21 @@
<template> <template>
<view class="chat-container"> <view class="chat-container">
<!-- 选择模式操作栏 -->
<view v-if="isSelectMode" class="select-mode-header">
<view class="select-mode-left">
<view class="select-count">{{ selectedMessages.length }} 条已选择</view>
<view class="select-mode-btn select-all-btn" @click="toggleSelectAll">
{{ isAllSelected ? '取消全选' : '全选' }}
</view>
</view>
<view class="select-mode-right">
<view class="select-mode-btn" @click="exitSelectMode">取消</view>
<view class="select-mode-btn delete-btn" @click="deleteSelectedMessages">删除</view>
</view>
</view>
<!-- Tab切换 --> <!-- Tab切换 -->
<view class="tab-container"> <view class="tab-container" v-if="!isSelectMode">
<view <view
class="tab-item" class="tab-item"
:class="{ active: activeTab === 'policy' }" :class="{ active: activeTab === 'policy' }"
@@ -74,7 +88,19 @@
:id="'msg-' + index" :id="'msg-' + index"
class="chat-item" class="chat-item"
:class="{ self: msg.self }" :class="{ self: msg.self }"
@longpress="handleLongPress(msg, index)"
@click="isSelectMode && toggleMessageSelection(msg.id)"
> >
<!-- 选择模式下显示选中框 -->
<view
v-if="isSelectMode"
class="message-checkbox"
@click.stop="toggleMessageSelection(msg.id)"
>
<view :class="{ checked: selectedMessages.includes(msg.id) }">
<uni-icons v-if="selectedMessages.includes(msg.id)" type="success" size="24" color="#FFFFFF"></uni-icons>
</view>
</view>
<view class="message" v-if="msg.self"> <view class="message" v-if="msg.self">
<view class="msg-filecontent" v-if="msg.files.length"> <view class="msg-filecontent" v-if="msg.files.length">
<view <view
@@ -199,7 +225,8 @@
@confirm="sendMessage" @confirm="sendMessage"
:disabled="isTyping" :disabled="isTyping"
:adjust-position="false" :adjust-position="false"
placeholder="请输入您的职位名称、薪资要求、岗位地址" placeholder="请输入您想找的岗位信息或就政策信息【比如:设计师、10000-12000、广州】【比如:今年喀
什地区高校毕业生有什么就业政策】"
v-show="!isVoice" v-show="!isVoice"
/> />
<view <view
@@ -386,6 +413,14 @@ const cancelThreshold = 100;
const speechIndex = ref(0); const speechIndex = ref(0);
const isAudioPermission = ref(false); const isAudioPermission = ref(false);
const feebackData = ref(null); const feebackData = ref(null);
// 新增:删除消息相关状态
const isSelectMode = ref(false);
const selectedMessages = ref([]);
// 全选状态
const isAllSelected = computed(() => {
const visibleMessages = messages.value.filter(msg => shouldShowMessage(msg));
return visibleMessages.length > 0 && selectedMessages.value.length === visibleMessages.length;
});
// ref for DOM element // ref for DOM element
const voiceBtn = ref(null); const voiceBtn = ref(null);
const feeback = ref(null); const feeback = ref(null);
@@ -879,6 +914,91 @@ function refreshMarkdown(index) {
} }
} }
// 新增:删除消息相关方法
function handleLongPress(msg, index) {
isSelectMode.value = true;
const selected = [msg.id];
// 如果是用户消息检查下一条是否是AI消息并自动选中
if (msg.self && index + 1 < messages.value.length) {
const nextMsg = messages.value[index + 1];
if (!nextMsg.self) {
selected.push(nextMsg.id);
}
}
selectedMessages.value = selected;
}
function toggleMessageSelection(msgId) {
const index = selectedMessages.value.indexOf(msgId);
if (index > -1) {
// 取消选中
selectedMessages.value.splice(index, 1);
// 找到对应的消息索引
const msgIndex = messages.value.findIndex(msg => msg.id === msgId);
if (msgIndex !== -1) {
const msg = messages.value[msgIndex];
// 如果是用户消息检查下一条是否是AI消息并取消选中
if (msg.self && msgIndex + 1 < messages.value.length) {
const nextMsg = messages.value[msgIndex + 1];
if (!nextMsg.self) {
const nextIndex = selectedMessages.value.indexOf(nextMsg.id);
if (nextIndex > -1) {
selectedMessages.value.splice(nextIndex, 1);
}
}
}
}
} else {
// 选中消息
selectedMessages.value.push(msgId);
// 找到对应的消息索引
const msgIndex = messages.value.findIndex(msg => msg.id === msgId);
if (msgIndex !== -1) {
const msg = messages.value[msgIndex];
// 如果是用户消息检查下一条是否是AI消息并自动选中
if (msg.self && msgIndex + 1 < messages.value.length) {
const nextMsg = messages.value[msgIndex + 1];
if (!nextMsg.self && !selectedMessages.value.includes(nextMsg.id)) {
selectedMessages.value.push(nextMsg.id);
}
}
}
}
}
function exitSelectMode() {
isSelectMode.value = false;
selectedMessages.value = [];
}
async function deleteSelectedMessages() {
if (selectedMessages.value.length === 0) return;
uni.showModal({
content: `确认删除选中的 ${selectedMessages.value.length} 条消息?`,
success: async (res) => {
if (res.confirm) {
for (const msgId of selectedMessages.value) {
await useChatGroupDBStore().deleteMessage(msgId);
}
exitSelectMode();
$api.msg('消息删除成功');
}
}
});
}
function toggleSelectAll() {
const visibleMessages = messages.value.filter(msg => shouldShowMessage(msg));
if (isAllSelected.value) {
// 取消全选
selectedMessages.value = [];
} else {
// 全选
selectedMessages.value = visibleMessages.map(msg => msg.id);
}
}
const jobSearchQueries = [ const jobSearchQueries = [
'喀什地区有哪些薪资 12K 以上的岗位适合我?', '喀什地区有哪些薪资 12K 以上的岗位适合我?',
'喀什地区 3 年工作经验能找到哪些 12K 以上的工作?', '喀什地区 3 年工作经验能找到哪些 12K 以上的工作?',
@@ -1473,4 +1593,92 @@ image-margin-top = 60rpx
.tab-item:active { .tab-item:active {
background-color: #F5F5F5; background-color: #F5F5F5;
} }
/* 选择模式样式 */
.select-mode-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 0 66rpx;
height: 132rpx;
background: #FFFFFF;
border-bottom: 3rpx solid #F4F4F4;
z-index: 10;
}
.select-mode-left {
display: flex;
align-items: center;
gap: 48rpx;
}
.select-count {
font-size: 42rpx;
font-weight: 500;
color: #333333;
}
.select-all-btn {
font-size: 42rpx;
font-weight: 500;
color: #256BFA;
padding: 12rpx 24rpx;
border-radius: 18rpx;
}
.select-all-btn:active {
background-color: #F5F5F5;
}
.select-mode-right {
display: flex;
align-items: center;
gap: 48rpx;
}
.select-mode-btn {
font-size: 42rpx;
font-weight: 500;
color: #666666;
padding: 12rpx 24rpx;
border-radius: 18rpx;
}
.select-mode-btn:active {
background-color: #F5F5F5;
}
.delete-btn {
color: #FF4757;
}
/* 消息选中框样式 */
.message-checkbox {
position: absolute;
top: 15rpx;
left: -45rpx;
z-index: 5;
}
.message-checkbox view {
width: 40rpx;
height: 40rpx;
border-radius: 50%;
border: 3rpx solid #D1D1D1;
display: flex;
align-items: center;
justify-content: center;
background-color: #FFFFFF;
}
.message-checkbox view.checked {
background-color: #256BFA;
border-color: #256BFA;
}
/* 调整聊天项的布局,为选中框留出空间 */
.chat-item {
position: relative;
padding-left: 30rpx;
}
</style> </style>

View File

@@ -5,8 +5,16 @@
--> -->
<template> <template>
<!-- @scroll="handleScroll" @scrolltolower="scrollBottom" --> <!-- @scroll="handleScroll" @scrolltolower="scrollBottom" -->
<scroll-view :scroll-y="true" class="container" :class="{'h5-pc-container': isH5}" :show-scrollbar="false" style="background-image: url(../../../packageRc/static/pageBgIndex.png);"> <scroll-view :scroll-y="true" class="container" :class="{'h5-pc-container': isH5}" :show-scrollbar="false">
<view style="padding: 40rpx 28rpx;"> <!-- 自定义导航栏 -->
<view class="custom-nav" :style="{paddingTop: statusBarHeight + 'px'}">
<view class="nav-content">
<view class="nav-back" @click="back"><text class="iconfont"><</text></view>
<view class="nav-title">高校毕业生智慧就业</view>
<view class="nav-placeholder"></view>
</view>
</view>
<view class="main-content">
<!-- #ifdef MP-WEIXIN --> <!-- #ifdef MP-WEIXIN -->
<view class="kinggang"> <view class="kinggang">
<view @click="navTo('/packageA/pages/myResume/myResume')"> <view @click="navTo('/packageA/pages/myResume/myResume')">
@@ -31,70 +39,68 @@
</view> </view>
</view> </view>
<!-- #endif --> <!-- #endif -->
<view class="showtab"> <!-- 岗位类型切换 -->
<view class="tabItem" @click="changeType(1)"> <view class="tabs">
<image src="/packageRc/static/gw.png"/> <view class="tab" :class="{active: pageState.type == ''}" @click="changeJobType('')">岗位列表</view>
<image v-show="tabType == 1" class="activeImg" src="/packageRc/static/activeTangle.png"/> <view class="tab" :class="{active: pageState.type == 2}" @click="changeJobType(2)">实习实训</view>
<view class="tab" :class="{active: pageState.type == 3}" @click="changeJobType(3)">社区实践</view>
</view>
<!-- 子选项卡 -->
<view class="titles">
<view class="title-item" :class="{active: activeTitle == 1}" @click="activeTitle = 1,getJobRecommed()">
<view>推荐<text class="accent">岗位</text></view>
</view> </view>
<view class="tabItem" @click="changeType(2)"> <view class="title-item" :class="{active: activeTitle == 2}" @click="activeTitle = 2,getJobList()">
<image src="/packageRc/static/zc.png"/> <view>热门<text class="accent">岗位</text></view>
<image v-show="tabType == 2" class="activeImg" src="/packageRc/static/activeTangle.png"/>
</view> </view>
</view> </view>
<template v-if="tabType == 1">
<view class="tabs">
<view class="tab" :class="{active: pageState.type == ''}" @click="changeJobType('')">岗位列表</view>
<view class="tab" :class="{active: pageState.type == 2}" @click="changeJobType(2)">实习实训</view>
<view class="tab" :class="{active: pageState.type == 3}" @click="changeJobType(3)">社区实践</view>
</view>
<view class="titles">
<view class="title-item" :class="{active: activeTitle == 1}" @click="activeTitle = 1,getJobRecommed()"><view>推荐岗位</view></view>
<view class="title-item" :class="{active: activeTitle == 2}" @click="activeTitle = 2,getJobList()"><view>热门岗位</view></view>
</view>
<view v-for="(item, index) in jobList" :key="index" @click="nextDetail(item)" class="job-list">
<view class="top-line">
<view class="salary">{{item.minSalary}}-{{item.maxSalary}}/</view>
<view class="time"><uni-icons color="#A2A2A2" type="info" :size="uniIconSize"></uni-icons>发布日期{{ item.postingDate }}</view>
</view>
<view class="title">{{ item.jobTitle }}</view>
<view class="infos">
<view>
<dict-Label dictType="education" :value="item.education"></dict-Label>
</view>
<view>
<dict-Label dictType="experience" :value="item.experience"></dict-Label>
</view>
<view>{{ item.jobLocation }}</view>
</view>
<view class="bottom-line">
<view><uni-icons color="#A2A2A2" type="person" :size="uniIconSize"></uni-icons>{{item.vacancies}}</view>
<view>{{ item.companyName }}</view>
</view>
</view>
<view class="view-more-btn" @click="viewMore">查看更多内容</view>
</template> <!-- 岗位列表改为网格布局 -->
<template v-else> <view class="job-grid">
<view class="titles" style="justify-content: space-between;"> <view v-for="(item, index) in jobList" :key="index" @click="nextDetail(item)" class="job-card-box">
<view class="title-item active"><view>政策专区</view></view> <view class="job-top">
<view class="more-link" @click="toPolicyList">{{'查看更多 >'}}</view> <view class="job-name">{{ item.jobTitle }}</view>
</view> <view class="job-salary">{{item.minSalary}}-{{item.maxSalary}}/</view>
<view v-for="(item, index) in policyList" :key="index" class="job-list" @click="toPolicyDetail(item)">
<view class="sign">推荐</view>
<view class="title">
<image src="../../../packageRc/static/zcLeft.png"/>
{{item.zcmc}}</view>
<view class="infos">
<view v-if="item.zcLevel">{{item.zcLevel}}</view>
<view v-if="item.sourceUnit">{{item.sourceUnit}}</view>
</view> </view>
<view class="bottom-line"> <view class="job-tags">
<view class="time"><uni-icons color="#A2A2A2" type="info" :size="uniIconSize"></uni-icons>发布日期:{{item.createTime}}</view> <view v-if="item.jobLocationAreaCode" class="tag"><dict-Label dictType="jobLocationAreaCode" :value="item.jobLocationAreaCode"></dict-Label></view>
<view><uni-icons color="#A2A2A2" type="eye" :size="uniIconSize"></uni-icons>浏览量:{{item.viewNum || 0}}</view> <view class="tag"><dict-Label dictType="education" :value="item.education"></dict-Label></view>
<view class="tag"><dict-Label dictType="experience" :value="item.experience"></dict-Label></view>
</view>
<view class="job-desc">
{{ vacanciesTo(item.vacancies) }} | {{item.jobCategory}} | {{ item.jobCategory }}
</view>
<view class="company-link">
<image class="comp-icon" src="../../../packageRc/static/dmsc/gs.png" />
<view class="comp-name">{{ item.companyName }}</view>
</view>
<view class="delivery-btn" @click.stop="nextDetail(item)">简历投递</view>
</view>
</view>
<view class="view-more-btn" @click="viewMore">查看更多内容</view>
<!-- 政策专区改为常驻显示 -->
<view class="titles section-title" style="justify-content: space-between; margin-top: 60rpx;">
<view class="title-item active"><view>政策<text class="accent">专区</text></view></view>
<view class="more-link" @click="toPolicyList">{{'查看更多 >'}}</view>
</view>
<view v-for="(item, index) in policyList" :key="index" class="policy-list-card" @click="toPolicyDetail(item)">
<view class="card-left">
<image class="clock-icon" src="../../../packageRc/static/dmsc/sj.png" />
<view class="date-md">{{ formatMD(item.publishTime || item.createTime) }}</view>
<view class="date-year">{{ formatYear(item.publishTime || item.createTime) }}</view>
</view>
<view class="card-right">
<view class="card-title">{{ item.zcmc }}</view>
<view class="card-infos">
<view v-if="item.zcLevel" class="info-tag">{{ item.zcLevel }}</view>
<view v-if="item.sourceUnit" class="info-tag">{{ item.sourceUnit }}</view>
</view> </view>
</view> </view>
</template> </view>
</view> </view>
</scroll-view> </scroll-view>
</template> </template>
@@ -110,11 +116,23 @@ isH5.value = true;
uniIconSize.value = 20; uniIconSize.value = 20;
// #endif // #endif
// 状态栏高度(用于自定义导航栏)
const statusBarHeight = ref(0);
try {
const sysInfo = uni.getSystemInfoSync();
statusBarHeight.value = sysInfo.statusBarHeight || 0;
} catch(e) {}
import { getPolicyList } from '@/packageRc/apiRc/policy'; import { getPolicyList } from '@/packageRc/apiRc/policy';
let policyList = ref([]) let policyList = ref([])
function getPolicy() { function getPolicy() {
getPolicyList({pageNum: 1, pageSize: 10,zclx:'1'}).then(res => { getPolicyList({pageNum: 1, pageSize: 4,zclx:'1'}).then(res => {
policyList.value = res.rows if (res.code == 200) {
policyList.value = res.rows
} else {
throw new Error();
}
}) })
} }
let tabType = ref(1) let tabType = ref(1)
@@ -131,9 +149,14 @@ let activeTab = ref(1)
let activeTitle = ref(1) let activeTitle = ref(1)
function back() { function back() {
uni.navigateBack({ // uni.navigateBack({
delta: 1 // delta: 1
}) // })
window.location.href='https://www.xjksly.cn/mechine-single-vue/'
// uni.reLaunch({
// url: '/pages/index/index'
// })
} }
onMounted(()=>{ onMounted(()=>{
getJobRecommed() getJobRecommed()
@@ -178,7 +201,7 @@ const pageState = reactive({
page: 0, page: 0,
total: 0, total: 0,
maxPage: 2, maxPage: 2,
pageSize: 10, pageSize: 4,
search: { search: {
order: 0, order: 0,
}, },
@@ -196,8 +219,15 @@ function getJobRecommed(){
type:pageState.type type:pageState.type
}; };
$api.createRequest('/app/job/recommend', params).then((resData) => { $api.createRequest('/app/job/recommend', params).then((resData) => {
jobList.value = resData.data if (resData.code == 200 && resData.data.length) {
pageState.total = 0; jobList.value = resData.data
} else {
throw new Error();
}
}).catch(() => {
// 造一些测试数据
const mock = { jobTitle: '计算机网络运维员', companyName: '新疆天山人才智汇发展有限责任公司', minSalary: '面议', maxSalary: '面议' };
jobList.value = [mock, mock, mock, mock];
}); });
} }
@@ -244,6 +274,26 @@ function nextDetail(job) {
} }
} }
function formatMD(dateStr) {
if (!dateStr) return '--';
const parts = dateStr.split('-').length > 1 ? dateStr.split('-') : dateStr.split(' ');
// 处理 YYYY-MM-DD 或 YYYY-MM-DD HH:mm:ss
let d = parts[0].includes('-') ? parts[0].split('-') : parts;
if (d.length >= 3) {
return `${d[1]}-${d[2].substring(0,2)}`;
}
return dateStr;
}
function formatYear(dateStr) {
if (!dateStr) return '';
const parts = dateStr.split('-');
if (parts.length >= 1) {
return parts[0].substring(0, 4);
}
return '';
}
</script> </script>
@@ -259,22 +309,59 @@ function nextDetail(job) {
} }
view{box-sizing: border-box;display: block;} view{box-sizing: border-box;display: block;}
.container{ .container{
background-color: #F4F4F4;background-position: top center;background-size: 100% auto; background-color: #FFFFFF;
height: 100vh; min-height: 1920px;
min-width: 100vw; min-width: 1080px;
padding-bottom: 0;
background-repeat: no-repeat;
box-sizing: border-box; box-sizing: border-box;
} }
/* 自定义导航栏 */
.custom-nav {
background: #107AFD;
width: 100%;
.nav-content {
height: 200rpx;
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 40rpx;
.nav-back {
width: 120rpx;
height: 200rpx;
display: flex;
align-items: center;
justify-content: center;
color: #fff;
font-weight: 300;
.iconfont{
font-size: 40px!important;
}
}
.nav-title {
color: #fff;
font-size: 72rpx;
font-weight: bold;
}
.nav-placeholder {
width: 120rpx;
}
}
}
.main-content {
position: relative;
z-index: 2;
/* 页面全局边距加倍 */
padding: 64rpx 48rpx;
}
.kinggang{ .kinggang{
display: flex; display: flex;
justify-content: space-around; justify-content: space-around;
align-items: center; align-items: center;
padding: 16rpx 16rpx 32rpx 16rpx; padding: 24rpx 16rpx 48rpx 16rpx;
font-size: 24rpx; font-size: 52rpx;
background: #FFFFFF; background: #FFFFFF;
border-radius: 16rpx; border-radius: 20rpx;
margin-bottom: 24rpx; margin-bottom: 32rpx;
>view{ >view{
display: flex; display: flex;
flex-direction: column; flex-direction: column;
@@ -282,58 +369,68 @@ view{box-sizing: border-box;display: block;}
justify-content: space-around; justify-content: space-around;
} }
image{ image{
width: 78rpx; width: 160rpx;
// margin-bottom: 15rpx; height: 160rpx;
height: 78rpx; margin-bottom: 20rpx;
} }
} }
.tabs{ .tabs{
margin-bottom: 29rpx; /* 调大上方选项卡的边距 */
margin: 64rpx auto 64rpx;
border-radius: 16rpx; border-radius: 120rpx;
display: flex; display: flex;
background: #fff; background: #F4F6F9;
color: #878787; color: #878787;
text-align: center; text-align: center;
width: 100%; width: 80%;
.tab{ overflow: hidden;
width: 50%; padding: 8rpx;
border: 4rpx solid transparent; box-sizing: border-box;
border-radius: 16rpx; .tab{
line-height: 64rpx; flex: 1;
position: relative; line-height: 120rpx;
&.active{ position: relative;
border: 4rpx solid #fff; font-size: 72rpx;
color: #fff; font-weight: 500;
background: linear-gradient(180deg, #79AFFF 1%, #A2B3FE 100%); transition: all 0.25s;
box-shadow: 0px 4rpx 10rpx 0px rgba(40, 102, 194, 0.4); border-radius: 120rpx;
} &.active{
} color: #fff;
background: #107AFD;
box-shadow: none;
}
}
} }
.titles{ .titles{
display: flex; display: flex;
margin-bottom: 44rpx; /* 调大标题下边距 */
margin-bottom: 72rpx;
align-items: flex-end;
.title-item{ .title-item{
font-size: 32rpx; font-size: 120rpx;
font-weight: bold; font-weight: bold;
color: #282828; color: #282828;
margin-right: 32rpx; margin-right: 56rpx;
position: relative; position: relative;
>view{ >view{
position: relative; position: relative;
z-index: 2; z-index: 2;
padding: 0 16rpx; padding: 0 8rpx;
.accent {
color: #EC7737;
margin-left: 4rpx;
}
} }
&.active::after{ &.active::after{
content: ''; content: '';
position: absolute; position: absolute;
z-index: 1; z-index: 1;
bottom: -12rpx; bottom: -8rpx;
left: 0; left: 10%;
width: 120%; width: 80%;
height: 24rpx; height: 20rpx;
border-radius: 50px 0px 0px 50px; border-radius: 50px;
background: linear-gradient(90deg, #78AEFF 0%, rgba(120, 174, 255, 0.31) 52%, rgba(24, 116, 255, 0) 100%); background: linear-gradient(90deg, rgba(82, 149, 255, 0.4) 0%, rgba(24, 116, 255, 0) 100%);
} }
} }
} }
@@ -341,11 +438,12 @@ view{box-sizing: border-box;display: block;}
width: 100%; width: 100%;
margin: 0 auto; margin: 0 auto;
color: #333333; color: #333333;
border-radius: 24rpx; border-radius: 12rpx;
background: #FFFFFF; background: #FFFFFF;
padding: 32rpx; padding: 32rpx;
margin-bottom: 24rpx; margin-bottom: 24rpx;
position: relative; position: relative;
/* 去掉阴影,保持扁平统一 */
.sign{ .sign{
position: absolute; position: absolute;
font-size: 28rpx; font-size: 28rpx;
@@ -413,22 +511,191 @@ view{box-sizing: border-box;display: block;}
margin: 0 auto; margin: 0 auto;
margin-bottom: 20rpx; margin-bottom: 20rpx;
} }
.showtab{ .job-grid {
display: flex; display: flex;
flex-wrap: wrap;
justify-content: space-between; justify-content: space-between;
margin-bottom: 40rpx; /* 列表前边距调大 */
.tabItem{ margin-top: 48rpx;
position: relative;
width: calc(50% - 8rpx); .job-card-box {
height: 144rpx; /* 缩小宽度比例以增加瀑布流列间距 */
width: calc(50% - 24rpx);
background: #FFFFFF;
background-image: url(../../../packageRc/static/dmsc/kpbj.png);
background-size: 100% 100%;
/* 加大卡片下边距 */
margin-bottom: 48rpx;
border: 1px solid #D1E5FF;
border-radius: 16rpx;
/* 加大卡片内边距 */
padding: 48rpx;
box-sizing: border-box;
display: flex;
flex-direction: column;
.job-top {
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: flex-start;
margin-bottom: 24rpx;
.job-salary {
color: #EC7737;
font-weight: bold;
font-size: 64rpx;
flex-shrink: 0;
}
.job-name {
font-size: 72rpx;
font-weight: bold;
color: #333;
flex: 1;
margin-top: 0;
margin-right: 12rpx;
/* 只保留单行溢出,以适应不同宽度 */
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
}
.job-tags {
display: flex;
flex-wrap: wrap;
margin-bottom: 32rpx;
.tag {
background: #7DA6FF;
color: #FFFFFF;
font-size: 48rpx;
padding: 8rpx 20rpx;
border-radius: 12rpx;
margin-right: 16rpx;
margin-bottom: 16rpx;
}
}
.job-desc {
font-size: 48rpx;
color: #4C6EFB;
margin-bottom: 44rpx;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.company-link {
display: flex;
align-items: center;
margin-top: auto;
margin-bottom: 48rpx;
.comp-icon {
width: 56rpx;
height: 56rpx;
margin-right: 16rpx;
flex-shrink: 0;
}
.comp-name {
font-size: 48rpx;
color: #666;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
}
.delivery-btn {
width: 75%;
margin: 0 auto;
height: 96rpx;
line-height: 96rpx;
background: #2591FF; /* 与设计图一致的亮蓝色 */
color: #FFFFFF;
text-align: center;
font-size: 52rpx;
font-weight: 500;
border-radius: 12rpx;
/* 移除阴影以贴合扁平化设计稿 */
}
} }
.activeImg{ }
position: absolute;
width: 143rpx; .policy-list-card {
height: 18rpx; width: 100%;
bottom: -24rpx; margin: 0 auto;
right: 50%; color: #333333;
transform: translateX(50%); /* 政策卡片大边距与内边距 */
margin-bottom: 48rpx;
box-sizing: border-box;
display: flex;
background: linear-gradient(180deg, #F0F8FF 0%, #FFFFFF 100%);
padding: 64rpx 48rpx;
border-radius: 16rpx;
border: 1px solid #D1E5FF;
box-shadow: 0px 4rpx 12rpx 0px rgba(16, 122, 253, 0.05);
.card-left {
/* 加宽左侧保护不再折行 */
width: 220rpx;
flex-shrink: 0;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
border-right: 1px solid #E5EEFA;
/* 增大左右空隙 */
margin-right: 48rpx;
.clock-icon {
width: 52rpx;
height: 52rpx;
margin-bottom: 12rpx;
}
.date-md {
font-size: 60rpx;
font-weight: bold;
color: #107afd;
line-height: 1;
margin-bottom: 12rpx;
}
.date-year {
font-size: 40rpx;
color: #107afd;
line-height: 1;
}
}
.card-right {
flex: 1;
display: flex;
flex-direction: column;
justify-content: center;
.card-title {
font-size: 64rpx;
font-weight: bold;
color: #333;
margin-bottom: 24rpx;
line-height: 1.4;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
}
.card-infos {
display: flex;
flex-wrap: wrap;
.info-tag {
font-size: 48rpx;
color: #999;
margin-right: 24rpx;
}
}
} }
} }
@@ -464,32 +731,35 @@ view{box-sizing: border-box;display: block;}
.tabs { .tabs {
margin-bottom: 80rpx; margin-bottom: 80rpx;
height: 120rpx; background-color: #eee;
border-radius: 20rpx !important; border-radius: 60px;
background: #f8faff !important; padding: 10px;
box-shadow: 0px 4rpx 15rpx rgba(0, 0, 0, 0.04);
.tab { .tab {
width: 33.3% !important; width: 33.3% !important;
line-height: 120rpx !important; line-height: 180rpx !important;
font-size: 20px !important; font-size: 36px !important;
border-radius: 16rpx !important; border-radius: 100rpx;
} }
} }
.titles { .titles {
margin-top: 40rpx; margin-top: 40rpx;
margin-bottom: 60rpx; margin-bottom: 60px;
.title-item { .title-item {
font-size: 24px !important; font-size: 40px;
font-weight: 600; font-weight: 600;
margin-right: 100rpx !important; margin-right: 100px !important;
>view { >view {
padding: 0 16rpx !important; padding: 0 16rpx !important;
} }
&::after { &::after {
height: 24rpx !important; height: 20rpx !important;
bottom: -12rpx !important; bottom: -16px !important;
width: 110% !important; width: 20% !important;
left: 40% !important;
background: orange;
border-radius: 0;
} }
} }
.more-link { .more-link {

View File

@@ -1,10 +1,14 @@
<template> <template>
<view <view
class="page" :class="{'h5-pc-page': isH5}" class="page" :class="{'h5-pc-page': isH5}"
style="
background-image: url(../../../packageRc/static/pageBg.png);
"
> >
<view class="custom-nav" :style="{paddingTop: statusBarHeight + 'px'}">
<view class="nav-content">
<view class="nav-back" @click="back"><text class="iconfont"><</text></view>
<view class="nav-title">高校毕业生智慧就业</view>
<view class="nav-placeholder"></view>
</view>
</view>
<view <view
class="input-outer-part" class="input-outer-part"
style="padding: 24rpx 32rpx 0; max-height: unset" style="padding: 24rpx 32rpx 0; max-height: unset"
@@ -17,7 +21,7 @@
border="none" border="none"
/> />
<img <img
src="https://rc.jinan.gov.cn/qcwjyH5/static/images/person/search.png" src="/packageRc/static/dmsc/ss.png"
class="search-icon" class="search-icon"
@click="search()" @click="search()"
/> />
@@ -53,33 +57,22 @@
@scrolltolower="getBottomList" @scrolltolower="getBottomList"
:show-scrollbar="false" :show-scrollbar="false"
> >
<view
style="margin-bottom: 24rpx; border-radius: 16rpx" <view v-for="(item, index) in tableData" :key="index" class="policy-list-card" @click="toPolicyDetail(item)">
class="policy-list" <view class="card-left">
v-for="(item, index) in tableData" <image class="clock-icon" src="../../../packageRc/static/dmsc/sj.png" />
:key="index" <view class="date-md">{{ formatMD(item.publishTime || item.createTime) }}</view>
@click="goPolicyDetail(item)" <view class="date-year">{{ formatYear(item.publishTime || item.createTime) }}</view>
>
<view class="title">
<image src="../../../packageRc/static/zcLeft.png" />
{{ item.zcmc }}</view
>
<view class="infos">
<view v-if="item.zcLevel">{{ item.zcLevel }}</view>
<view v-if="item.sourceUnit">{{ item.sourceUnit }}</view>
</view> </view>
<view class="bottom-line"> <view class="card-right">
<view> <view class="card-title">{{ item.zcmc }}</view>
<uni-icons color="#A2A2A2" type="info" :size="uniIconSize"></uni-icons> <view class="card-infos">
发文日期{{ item.publishTime }} <view v-if="item.zcLevel" class="info-tag">{{ item.zcLevel }}</view>
</view> <view v-if="item.sourceUnit" class="info-tag">{{ item.sourceUnit }}</view>
<view>
<uni-icons color="#A2A2A2" type="eye" :size="uniIconSize"></uni-icons>
浏览量{{ item.viewNum || 0 }}
</view> </view>
</view> </view>
</view> </view>
<view style="padding-bottom: 24rpx"> <view style="padding-bottom: 24px">
<img <img
v-if="!total && !loading" v-if="!total && !loading"
src="https://rc.jinan.gov.cn/qcwjyH5/static/images/person/empty.png" src="https://rc.jinan.gov.cn/qcwjyH5/static/images/person/empty.png"
@@ -90,11 +83,11 @@
</view> </view>
<view <view
v-else-if="showMorePage" v-else-if="showMorePage"
style="text-align: center; color: #1a62ce; font-size: 24rpx" style="text-align: center; color: #1a62ce; font-size: 24px"
>加载更多 >加载更多
</view> </view>
<view <view
style="text-align: center; color: #8e8e8e; font-size: 24rpx" style="text-align: center; color: #8e8e8e; font-size: 24px"
v-else v-else
>没有更多数据了~</view >没有更多数据了~</view
> </view > </view
@@ -212,6 +205,15 @@ export default {
}, },
]; ];
}, },
back() {
// uni.navigateBack({
// delta: 1
// })
window.location.href='https://www.xjksly.cn/mechine-single-vue/'
// uni.reLaunch({
// url: '/pages/index/index'
// })
},
popupSearch(data) { popupSearch(data) {
// 获取此次提交前,旧的政策类型值 // 获取此次提交前,旧的政策类型值
const oldTypeL = this.queryParams.policyTypeL || ""; const oldTypeL = this.queryParams.policyTypeL || "";
@@ -291,20 +293,31 @@ export default {
this.total = res.total; this.total = res.total;
} else { } else {
this.loading = false; this.loading = false;
// #ifdef H5 || APP-PLUS
// 接口返回非 200 或失败时展示测试数据 (条件编译)
this.tableData = [
{ id: '1', zcmc: '测试政策001关于进一步支持人才发展的若干措施条件编译测试数据', publishTime: '2026-03-10', viewNum: 888, zcLevel: '省级', sourceUnit: '模拟测试部' },
{ id: '2', zcmc: '测试政策002高校毕业生创业补贴申请指南条件编译测试数据', publishTime: '2026-03-10', viewNum: 666, zcLevel: '市级', sourceUnit: '人力资源局' }
];
this.total = 2;
// #endif
uni.showToast({ uni.showToast({
title: res.msg || '获取列表失败', title: res.msg || '获取列表失败',
icon: "none", icon: "none",
}); });
} }
}, },
formatMD(dateStr) {
if (!dateStr) return '--';
const parts = dateStr.split('-').length > 1 ? dateStr.split('-') : dateStr.split(' ');
// 处理 YYYY-MM-DD 或 YYYY-MM-DD HH:mm:ss
let d = parts[0].includes('-') ? parts[0].split('-') : parts;
if (d.length >= 3) {
return `${d[1]}-${d[2].substring(0,2)}`;
}
return dateStr;
},
formatYear(dateStr) {
if (!dateStr) return '';
const parts = dateStr.split('-');
if (parts.length >= 1) {
return parts[0].substring(0, 4);
}
return '';
}
}, },
}; };
</script> </script>
@@ -320,7 +333,7 @@ export default {
} }
.page { .page {
background-color: #f4f4f4 !important; background-color: #f4f4f4 !important;
height: 100vh; height: 1920px;
background-repeat: no-repeat; background-repeat: no-repeat;
background-size: 100% auto; background-size: 100% auto;
} }
@@ -330,7 +343,7 @@ export default {
background: #ffffff; background: #ffffff;
box-sizing: border-box; box-sizing: border-box;
border: 1px solid #107afd; border: 1px solid #107afd;
height: 64rpx; height: 120rpx;
border-radius: 32rpx; border-radius: 32rpx;
padding: 0 32rpx; padding: 0 32rpx;
display: flex; display: flex;
@@ -340,8 +353,10 @@ export default {
margin-top: 24rpx; margin-top: 24rpx;
.search-icon { .search-icon {
width: 40rpx; width: 40px;
height: 40rpx; background: #107afd;
padding: 10px;border-radius: 40px;
height: 40px;
} }
} }
@@ -718,7 +733,10 @@ export default {
height: 48px !important; height: 48px !important;
} }
.search-line { .search-line {
height: 80rpx !important; height: 80px !important;
border-radius: 40px;
padding: 0 20px!important;
input{font-size: 24px!important;}
} }
.policy-list .title image { .policy-list .title image {
width: 56rpx !important; width: 56rpx !important;
@@ -726,8 +744,119 @@ export default {
margin-right: 16rpx !important; margin-right: 16rpx !important;
} }
.loading-text { .loading-text {
font-size: 20px !important; font-size: 26px !important;
} }
} }
/* #endif */ /* #endif */
/* 自定义导航栏 */
.custom-nav {
background: #107AFD;
width: 100%;
.nav-content {
height: 200rpx;
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 40rpx;
.nav-back {
width: 120rpx;
height: 200rpx;
display: flex;
align-items: center;
justify-content: center;
color: #fff;
font-weight: 300;
.iconfont{
font-size: 40px!important;
}
}
.nav-title {
color: #fff;
font-size: 72rpx;
font-weight: bold;
}
.nav-placeholder {
width: 120rpx;
}
}
}
.policy-list-card {
width: 100%;
margin: 0 auto;
color: #333333;
/* 政策卡片大边距与内边距 */
margin-bottom: 48rpx;
box-sizing: border-box;
display: flex;
background: linear-gradient(180deg, #F0F8FF 0%, #FFFFFF 100%);
padding: 64rpx 48rpx;
border-radius: 16rpx;
border: 1px solid #D1E5FF;
box-shadow: 0px 4rpx 12rpx 0px rgba(16, 122, 253, 0.05);
.card-left {
/* 加宽左侧保护不再折行 */
width: 220rpx;
flex-shrink: 0;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
border-right: 1px solid #E5EEFA;
/* 增大左右空隙 */
margin-right: 48rpx;
.clock-icon {
width: 52rpx;
height: 52rpx;
margin-bottom: 12rpx;
}
.date-md {
font-size: 60rpx;
font-weight: bold;
color: #107afd;
line-height: 1;
margin-bottom: 12rpx;
}
.date-year {
font-size: 40rpx;
color: #107afd;
line-height: 1;
}
}
.card-right {
flex: 1;
display: flex;
flex-direction: column;
justify-content: center;
.card-title {
font-size: 64rpx;
font-weight: bold;
color: #333;
margin-bottom: 24rpx;
line-height: 1.4;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
}
.card-infos {
display: flex;
flex-wrap: wrap;
.info-tag {
font-size: 48rpx;
color: #999;
margin-right: 24rpx;
}
}
}
}
</style> </style>

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 611 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 911 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1007 B

View File

@@ -3,7 +3,8 @@
{ {
"path": "pages/index/index", "path": "pages/index/index",
"style": { "style": {
"navigationBarTitleText": "喀什智慧就业平台" "navigationBarTitleText": "喀什智慧就业平台",
"navigationStyle": "custom"
} }
}, },
{ {
@@ -79,7 +80,8 @@
{ {
"path": "pages/resume-guide/resume-guide", "path": "pages/resume-guide/resume-guide",
"style": { "style": {
"navigationBarTitleText": "简历制作指导" "navigationBarTitleText": "简历制作指导",
"navigationStyle": "custom"
} }
}, },
{ {
@@ -645,7 +647,10 @@
{ {
"path": "pages/index/index", "path": "pages/index/index",
"style": { "style": {
"navigationBarTitleText": "高校毕业生智慧就业" "navigationBarTitleText": "高校毕业生智慧就业",
"navigationBarBackgroundColor": "#107AFD",
"navigationBarTextStyle": "white",
"navigationStyle": "custom"
} }
}, },
{ {
@@ -723,7 +728,8 @@
{ {
"path": "pages/policy/policyList", "path": "pages/policy/policyList",
"style": { "style": {
"navigationBarTitleText": "政策专区" "navigationBarTitleText": "政策专区",
"navigationStyle": "custom"
} }
}, },
{ {

View File

@@ -1,6 +1,16 @@
<template> <template>
<view class="app-custom-root"> <view class="app-custom-root">
<view class="app-container"> <view class="app-container">
<!-- #ifdef H5 -->
<!-- 自定义导航栏 -->
<view class="custom-nav" :style="{paddingTop: statusBarHeight + 'px'}">
<view class="nav-content">
<view class="nav-back" @click="back"><text class="nav-back-text"></text></view>
<view class="nav-title">喀什智慧就业平台</view>
<view class="nav-placeholder"></view>
</view>
</view>
<!-- #endif -->
<!-- 主体内容区域 --> <!-- 主体内容区域 -->
<view class="container-main"> <view class="container-main">
<IndexOne @onShowTabbar="changeShowTabbar" /> <IndexOne @onShowTabbar="changeShowTabbar" />
@@ -23,6 +33,22 @@ import useUserStore from '@/stores/useUserStore';
import { tabbarManager } from '@/utils/tabbarManager'; import { tabbarManager } from '@/utils/tabbarManager';
const { unreadCount } = storeToRefs(useReadMsg()); const { unreadCount } = storeToRefs(useReadMsg());
const userStore = useUserStore(); const userStore = useUserStore();
// 状态栏高度(用于自定义导航栏)
const statusBarHeight = ref(0);
try {
const sysInfo = uni.getSystemInfoSync();
statusBarHeight.value = sysInfo.statusBarHeight || 0;
} catch(e) {}
// 返回按钮功能
function back() {
// uni.navigateBack({
// delta: 1
// });
window.location.href = 'https://www.xjksly.cn/mechine-single-vue/';
}
onLoad((options) => { onLoad((options) => {
// useReadMsg().fetchMessages(); // useReadMsg().fetchMessages();
}); });
@@ -191,4 +217,32 @@ onShow(() => {
background: #FFFFFF background: #FFFFFF
width: 4rpx width: 4rpx
height: 20rpx height: 20rpx
/* 自定义导航栏样式 */
.custom-nav
background: #107AFD
width: 100%
.nav-content
height: 140rpx
display: flex
align-items: center
justify-content: space-between
padding: 0 40rpx
.nav-back
width: 120rpx
height: 200rpx
display: flex
align-items: center
justify-content: center
color: #fff
font-weight: 300
.nav-back-text
font-size: 80rpx
line-height: 1
.nav-title
color: #fff
font-size: 52rpx
font-weight: bold
.nav-placeholder
width: 120rpx
</style> </style>

View File

@@ -192,6 +192,8 @@ function close() {
function confirm() { function confirm() {
useUserStore().logOut(); useUserStore().logOut();
// alert('退出登录成功');
// window.location.reload();
} }
const isAbove90 = (percent) => parseFloat(percent) < 90; const isAbove90 = (percent) => parseFloat(percent) < 90;

View File

@@ -1,5 +1,12 @@
<template> <template>
<AppLayout back-gorund-color="#FFFFFF"> <AppLayout back-gorund-color="#FFFFFF">
<view class="head-nav">
<view class="head-back" @click="navBack">
</view>
<view class="head-title">
简历制作指导
</view>
</view>
<view class="resume-guide-container"> <view class="resume-guide-container">
<!-- 页面标题 --> <!-- 页面标题 -->
<view class="page-header"> <view class="page-header">
@@ -91,7 +98,9 @@ const warnings = ref([
{ title: '格式混乱', desc: '保持统一的字体、字号和排版风格' }, { title: '格式混乱', desc: '保持统一的字体、字号和排版风格' },
{ title: '缺乏针对性', desc: '针对不同岗位调整简历内容' } { title: '缺乏针对性', desc: '针对不同岗位调整简历内容' }
]); ]);
const navBack = () => {
window.location.href = 'https://www.xjksly.cn/mechine-single-vue/';
};
// 开始制作简历 // 开始制作简历
const startCreateResume = () => { const startCreateResume = () => {
navTo('/packageA/pages/myResume/myResume'); navTo('/packageA/pages/myResume/myResume');
@@ -109,7 +118,37 @@ const viewExampleResume = () => {
background: #FFFFFF; background: #FFFFFF;
min-height: 100vh; min-height: 100vh;
} }
.head-nav{
height: 120rpx;
background: #F5F5F5;
display: flex;
align-items: center;
justify-content: center;
}
.head-title{
font-size: 60rpx;
font-weight: 600;
color: #1A1A1A;
}
.head-back{
position: fixed;
left: 20rpx;
display: flex;
align-items: center;
justify-content: center;
margin-right: 30rpx;
width: 80rpx;
height: 80rpx;
&::before {
content: '';
display: block;
width: 30rpx;
height: 30rpx;
border-left: 4rpx solid #1A1A1A;
border-top: 4rpx solid #1A1A1A;
transform: rotate(-45deg);
}
}
.page-header { .page-header {
text-align: center; text-align: center;
margin-bottom: 42rpx; margin-bottom: 42rpx;

View File

@@ -72,6 +72,7 @@ const useUserStore = defineStore("user", () => {
role.value = {} role.value = {}
uni.removeStorageSync('userInfo') uni.removeStorageSync('userInfo')
uni.removeStorageSync('token') uni.removeStorageSync('token')
uni.removeStorageSync('zkr-token')
uni.removeStorageSync('Padmin-Token') uni.removeStorageSync('Padmin-Token')
// 如果需要显示登录弹窗,则通过事件通知页面显示微信登录弹窗 // 如果需要显示登录弹窗,则通过事件通知页面显示微信登录弹窗
if (showLoginModal) { if (showLoginModal) {

View File

@@ -335,6 +335,47 @@ const useChatGroupDBStore = defineStore("messageGroup", () => {
})) }))
} }
async function deleteMessage(messageId) {
if (!baseDB.isDBReady) await baseDB.initDB();
await baseDB.db.delete(massageName.value, messageId);
messages.value = messages.value.filter(msg => msg.id !== messageId);
}
async function deleteSession(sessionId) {
if (!baseDB.isDBReady) await baseDB.initDB();
// 删除会话相关的所有消息
const messagesList = await baseDB.db.queryByField(massageName.value, 'parentGroupId', sessionId);
for (const msg of messagesList) {
await baseDB.db.delete(massageName.value, msg.id);
}
// 删除会话本身
const allSessions = await baseDB.db.getAll(tableName.value);
const sessionToDelete = allSessions.find(session => session.sessionId === sessionId);
if (sessionToDelete) {
await baseDB.db.delete(tableName.value, sessionToDelete.id);
}
// 更新会话列表
const result = await baseDB.db.getAll(tableName.value);
const [table] = insertSortData(result.reverse());
tabeList.value = table;
// 如果删除的是当前会话,切换到第一个会话或清空
if (chatSessionID.value === sessionId) {
if (tabeList.value.length > 0) {
const firstSession = tabeList.value.find(item => !item.isTitle);
if (firstSession) {
chatSessionID.value = firstSession.sessionId;
initMessage(firstSession.sessionId);
} else {
chatSessionID.value = '';
messages.value = [];
}
} else {
chatSessionID.value = '';
messages.value = [];
}
}
}
return { return {
messages, messages,
isTyping, isTyping,
@@ -348,7 +389,9 @@ const useChatGroupDBStore = defineStore("messageGroup", () => {
changeDialogue, changeDialogue,
getStearm, getStearm,
getHistory, getHistory,
badFeedback badFeedback,
deleteMessage,
deleteSession
}; };
}); });