Compare commits
15 Commits
16ff0d1c4a
...
yitiji
| Author | SHA1 | Date | |
|---|---|---|---|
| 770ca67616 | |||
| a1df8827ec | |||
|
|
749ae69114 | ||
|
|
88fc1c76f2 | ||
| bc7beb1040 | |||
| e2b26f5df8 | |||
| 7e6ae7c7ed | |||
|
|
4d4c689a45 | ||
|
|
3411ef57b4 | ||
| c2ae9467f9 | |||
| 9c46b3996a | |||
|
|
f2e32a9afa | ||
|
|
8e03d70e8e | ||
|
|
dcec3cf154 | ||
|
|
2d5aca569a |
4
App.vue
4
App.vue
@@ -111,4 +111,8 @@ uni-modal,
|
||||
body {
|
||||
font-family: 'PingFangSC-Regular', 'PingFang SC', 'Microsoft YaHei', 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
||||
}
|
||||
html,body{
|
||||
width: 1080px!important;
|
||||
height: 1920px!important;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -62,10 +62,9 @@ image {
|
||||
/* height: 100%; */
|
||||
}
|
||||
|
||||
body,
|
||||
html {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
body,html {
|
||||
width: 1080px!important;
|
||||
height: 1920px!important;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
|
||||
@@ -125,7 +125,7 @@
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, reactive, onBeforeMount } from 'vue';
|
||||
import { ref, reactive, onBeforeMount, watch } from 'vue';
|
||||
import useDictStore from '@/stores/useDictStore';
|
||||
const { getTransformChildren } = useDictStore();
|
||||
|
||||
@@ -174,12 +174,24 @@ const jobTypeOptions = ref([]);
|
||||
const areaOptions = ref([]);
|
||||
|
||||
// 初始化获取数据
|
||||
onBeforeMount(() => {
|
||||
const initData = () => {
|
||||
educationOptions.value = getTransformChildren('education', '学历要求').options || [];
|
||||
experienceOptions.value = getTransformChildren('experience', '工作经验').options || [];
|
||||
scaleOptions.value = getTransformChildren('scale', '公司规模').options || [];
|
||||
jobTypeOptions.value = getJobTypeData();
|
||||
areaOptions.value = getTransformChildren('area', '地区').options || [];
|
||||
};
|
||||
|
||||
// 组件挂载时初始化数据
|
||||
onBeforeMount(() => {
|
||||
initData();
|
||||
});
|
||||
|
||||
// 监听组件显示状态,当显示时重新初始化数据
|
||||
watch(() => props.show, (newVal) => {
|
||||
if (newVal) {
|
||||
initData();
|
||||
}
|
||||
});
|
||||
|
||||
// 处理选项选择
|
||||
@@ -313,6 +325,7 @@ const handleClose = () => {
|
||||
.content-section {
|
||||
padding: 0 4%;
|
||||
overflow-y: auto;
|
||||
flex: 12;
|
||||
.radio-item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
@@ -1,7 +1,13 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta charset="UTF-8" />
|
||||
<style>
|
||||
html,body{
|
||||
width: 1080px!important;
|
||||
height: 1920px!important;
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
(function() {
|
||||
var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' &&
|
||||
|
||||
@@ -25,16 +25,23 @@
|
||||
<scroll-view scroll-y :show-scrollbar="false" class="chat-scroll">
|
||||
<view
|
||||
class="drawer-rows"
|
||||
@click="changeDialogue(item)"
|
||||
v-for="(item, index) in filteredList"
|
||||
:key="item.id"
|
||||
>
|
||||
<view
|
||||
v-if="!item.isTitle"
|
||||
class="drawer-row-list"
|
||||
:class="{ 'drawer-row-active': item.sessionId === chatSessionID }"
|
||||
class="drawer-row-content"
|
||||
>
|
||||
{{ 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 class="drawer-row-title" v-else>
|
||||
{{ 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() {
|
||||
$api.msg('该功能正在开发中,敬请期待后续更新!');
|
||||
}
|
||||
@@ -276,6 +298,11 @@ footer-height = 147rpx
|
||||
overflow:hidden; //超出的文本隐藏
|
||||
text-overflow:ellipsis; //溢出用省略号显示
|
||||
white-space:nowrap; //溢出不换行
|
||||
.drawer-row-content
|
||||
display: flex
|
||||
align-items: center
|
||||
justify-content: space-between
|
||||
width: 100%
|
||||
.drawer-row-title
|
||||
color: #A6A6A6;
|
||||
font-weight: 500;
|
||||
@@ -285,6 +312,7 @@ footer-height = 147rpx
|
||||
margin-top: 75rpx
|
||||
margin-bottom: 24rpx
|
||||
.drawer-row-list
|
||||
flex: 1
|
||||
height: 99rpx;
|
||||
line-height: 99rpx
|
||||
font-size: 42rpx
|
||||
@@ -293,6 +321,12 @@ footer-height = 147rpx
|
||||
font-weight: 500;
|
||||
color: #595959;
|
||||
padding: 0 36rpx
|
||||
.drawer-row-delete
|
||||
padding: 0 18rpx
|
||||
height: 99rpx
|
||||
display: flex
|
||||
align-items: center
|
||||
justify-content: center
|
||||
.drawer-row-active
|
||||
.drawer-row-list:active
|
||||
color: #333333;
|
||||
|
||||
@@ -1,7 +1,21 @@
|
||||
<template>
|
||||
<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切换 -->
|
||||
<view class="tab-container">
|
||||
<view class="tab-container" v-if="!isSelectMode">
|
||||
<view
|
||||
class="tab-item"
|
||||
:class="{ active: activeTab === 'policy' }"
|
||||
@@ -74,7 +88,19 @@
|
||||
:id="'msg-' + index"
|
||||
class="chat-item"
|
||||
: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="msg-filecontent" v-if="msg.files.length">
|
||||
<view
|
||||
@@ -199,7 +225,8 @@
|
||||
@confirm="sendMessage"
|
||||
:disabled="isTyping"
|
||||
:adjust-position="false"
|
||||
placeholder="请输入您的职位名称、薪资要求、岗位地址"
|
||||
placeholder="请输入您想找的岗位信息或就政策信息【比如:设计师、10000-12000、广州】【比如:今年喀
|
||||
什地区高校毕业生有什么就业政策】"
|
||||
v-show="!isVoice"
|
||||
/>
|
||||
<view
|
||||
@@ -386,6 +413,14 @@ const cancelThreshold = 100;
|
||||
const speechIndex = ref(0);
|
||||
const isAudioPermission = ref(false);
|
||||
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
|
||||
const voiceBtn = 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 = [
|
||||
'喀什地区有哪些薪资 12K 以上的岗位适合我?',
|
||||
'喀什地区 3 年工作经验能找到哪些 12K 以上的工作?',
|
||||
@@ -1473,4 +1593,92 @@ image-margin-top = 60rpx
|
||||
.tab-item:active {
|
||||
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>
|
||||
|
||||
@@ -5,8 +5,16 @@
|
||||
-->
|
||||
<template>
|
||||
<!-- @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);">
|
||||
<view style="padding: 40rpx 28rpx;">
|
||||
<scroll-view :scroll-y="true" class="container" :class="{'h5-pc-container': isH5}" :show-scrollbar="false">
|
||||
<!-- 自定义导航栏 -->
|
||||
<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 -->
|
||||
<view class="kinggang">
|
||||
<view @click="navTo('/packageA/pages/myResume/myResume')">
|
||||
@@ -31,70 +39,68 @@
|
||||
</view>
|
||||
</view>
|
||||
<!-- #endif -->
|
||||
<view class="showtab">
|
||||
<view class="tabItem" @click="changeType(1)">
|
||||
<image src="/packageRc/static/gw.png"/>
|
||||
<image v-show="tabType == 1" class="activeImg" src="/packageRc/static/activeTangle.png"/>
|
||||
<!-- 岗位类型切换 -->
|
||||
<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>推荐<text class="accent">岗位</text></view>
|
||||
</view>
|
||||
<view class="tabItem" @click="changeType(2)">
|
||||
<image src="/packageRc/static/zc.png"/>
|
||||
<image v-show="tabType == 2" class="activeImg" src="/packageRc/static/activeTangle.png"/>
|
||||
<view class="title-item" :class="{active: activeTitle == 2}" @click="activeTitle = 2,getJobList()">
|
||||
<view>热门<text class="accent">岗位</text></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="titles" style="justify-content: space-between;">
|
||||
<view class="title-item active"><view>政策专区</view></view>
|
||||
<view class="more-link" @click="toPolicyList">{{'查看更多 >'}}</view>
|
||||
</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 class="job-grid">
|
||||
<view v-for="(item, index) in jobList" :key="index" @click="nextDetail(item)" class="job-card-box">
|
||||
<view class="job-top">
|
||||
<view class="job-name">{{ item.jobTitle }}</view>
|
||||
<view class="job-salary">{{item.minSalary}}-{{item.maxSalary}}/月</view>
|
||||
</view>
|
||||
<view class="bottom-line">
|
||||
<view class="time"><uni-icons color="#A2A2A2" type="info" :size="uniIconSize"></uni-icons>发布日期:{{item.createTime}}</view>
|
||||
<view><uni-icons color="#A2A2A2" type="eye" :size="uniIconSize"></uni-icons>浏览量:{{item.viewNum || 0}}</view>
|
||||
<view class="job-tags">
|
||||
<view v-if="item.jobLocationAreaCode" class="tag"><dict-Label dictType="jobLocationAreaCode" :value="item.jobLocationAreaCode"></dict-Label></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>
|
||||
</template>
|
||||
</view>
|
||||
</view>
|
||||
</scroll-view>
|
||||
</template>
|
||||
@@ -110,11 +116,23 @@ isH5.value = true;
|
||||
uniIconSize.value = 20;
|
||||
// #endif
|
||||
|
||||
// 状态栏高度(用于自定义导航栏)
|
||||
const statusBarHeight = ref(0);
|
||||
try {
|
||||
const sysInfo = uni.getSystemInfoSync();
|
||||
statusBarHeight.value = sysInfo.statusBarHeight || 0;
|
||||
} catch(e) {}
|
||||
|
||||
|
||||
import { getPolicyList } from '@/packageRc/apiRc/policy';
|
||||
let policyList = ref([])
|
||||
function getPolicy() {
|
||||
getPolicyList({pageNum: 1, pageSize: 10,zclx:'1'}).then(res => {
|
||||
policyList.value = res.rows
|
||||
getPolicyList({pageNum: 1, pageSize: 4,zclx:'1'}).then(res => {
|
||||
if (res.code == 200) {
|
||||
policyList.value = res.rows
|
||||
} else {
|
||||
throw new Error();
|
||||
}
|
||||
})
|
||||
}
|
||||
let tabType = ref(1)
|
||||
@@ -131,9 +149,14 @@ let activeTab = ref(1)
|
||||
let activeTitle = ref(1)
|
||||
|
||||
function back() {
|
||||
uni.navigateBack({
|
||||
delta: 1
|
||||
})
|
||||
// uni.navigateBack({
|
||||
// delta: 1
|
||||
// })
|
||||
window.location.href='https://www.xjksly.cn/mechine-single-vue/'
|
||||
|
||||
// uni.reLaunch({
|
||||
// url: '/pages/index/index'
|
||||
// })
|
||||
}
|
||||
onMounted(()=>{
|
||||
getJobRecommed()
|
||||
@@ -178,7 +201,7 @@ const pageState = reactive({
|
||||
page: 0,
|
||||
total: 0,
|
||||
maxPage: 2,
|
||||
pageSize: 10,
|
||||
pageSize: 4,
|
||||
search: {
|
||||
order: 0,
|
||||
},
|
||||
@@ -196,8 +219,15 @@ function getJobRecommed(){
|
||||
type:pageState.type
|
||||
};
|
||||
$api.createRequest('/app/job/recommend', params).then((resData) => {
|
||||
jobList.value = resData.data
|
||||
pageState.total = 0;
|
||||
if (resData.code == 200 && resData.data.length) {
|
||||
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>
|
||||
@@ -259,22 +309,59 @@ function nextDetail(job) {
|
||||
}
|
||||
view{box-sizing: border-box;display: block;}
|
||||
.container{
|
||||
background-color: #F4F4F4;background-position: top center;background-size: 100% auto;
|
||||
height: 100vh;
|
||||
min-width: 100vw;
|
||||
padding-bottom: 0;
|
||||
background-repeat: no-repeat;
|
||||
background-color: #FFFFFF;
|
||||
min-height: 1920px;
|
||||
min-width: 1080px;
|
||||
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{
|
||||
display: flex;
|
||||
justify-content: space-around;
|
||||
align-items: center;
|
||||
padding: 16rpx 16rpx 32rpx 16rpx;
|
||||
font-size: 24rpx;
|
||||
padding: 24rpx 16rpx 48rpx 16rpx;
|
||||
font-size: 52rpx;
|
||||
background: #FFFFFF;
|
||||
border-radius: 16rpx;
|
||||
margin-bottom: 24rpx;
|
||||
border-radius: 20rpx;
|
||||
margin-bottom: 32rpx;
|
||||
>view{
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
@@ -282,58 +369,68 @@ view{box-sizing: border-box;display: block;}
|
||||
justify-content: space-around;
|
||||
}
|
||||
image{
|
||||
width: 78rpx;
|
||||
// margin-bottom: 15rpx;
|
||||
height: 78rpx;
|
||||
width: 160rpx;
|
||||
height: 160rpx;
|
||||
margin-bottom: 20rpx;
|
||||
}
|
||||
}
|
||||
.tabs{
|
||||
margin-bottom: 29rpx;
|
||||
|
||||
border-radius: 16rpx;
|
||||
display: flex;
|
||||
background: #fff;
|
||||
color: #878787;
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
.tab{
|
||||
width: 50%;
|
||||
border: 4rpx solid transparent;
|
||||
border-radius: 16rpx;
|
||||
line-height: 64rpx;
|
||||
position: relative;
|
||||
&.active{
|
||||
border: 4rpx solid #fff;
|
||||
color: #fff;
|
||||
background: linear-gradient(180deg, #79AFFF 1%, #A2B3FE 100%);
|
||||
box-shadow: 0px 4rpx 10rpx 0px rgba(40, 102, 194, 0.4);
|
||||
}
|
||||
}
|
||||
/* 调大上方选项卡的边距 */
|
||||
margin: 64rpx auto 64rpx;
|
||||
border-radius: 120rpx;
|
||||
display: flex;
|
||||
background: #F4F6F9;
|
||||
color: #878787;
|
||||
text-align: center;
|
||||
width: 80%;
|
||||
overflow: hidden;
|
||||
padding: 8rpx;
|
||||
box-sizing: border-box;
|
||||
.tab{
|
||||
flex: 1;
|
||||
line-height: 120rpx;
|
||||
position: relative;
|
||||
font-size: 72rpx;
|
||||
font-weight: 500;
|
||||
transition: all 0.25s;
|
||||
border-radius: 120rpx;
|
||||
&.active{
|
||||
color: #fff;
|
||||
background: #107AFD;
|
||||
box-shadow: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
.titles{
|
||||
display: flex;
|
||||
margin-bottom: 44rpx;
|
||||
/* 调大标题下边距 */
|
||||
margin-bottom: 72rpx;
|
||||
align-items: flex-end;
|
||||
.title-item{
|
||||
font-size: 32rpx;
|
||||
font-size: 120rpx;
|
||||
font-weight: bold;
|
||||
color: #282828;
|
||||
margin-right: 32rpx;
|
||||
margin-right: 56rpx;
|
||||
position: relative;
|
||||
>view{
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
padding: 0 16rpx;
|
||||
padding: 0 8rpx;
|
||||
.accent {
|
||||
color: #EC7737;
|
||||
margin-left: 4rpx;
|
||||
}
|
||||
}
|
||||
&.active::after{
|
||||
content: '';
|
||||
position: absolute;
|
||||
z-index: 1;
|
||||
bottom: -12rpx;
|
||||
left: 0;
|
||||
width: 120%;
|
||||
height: 24rpx;
|
||||
border-radius: 50px 0px 0px 50px;
|
||||
background: linear-gradient(90deg, #78AEFF 0%, rgba(120, 174, 255, 0.31) 52%, rgba(24, 116, 255, 0) 100%);
|
||||
bottom: -8rpx;
|
||||
left: 10%;
|
||||
width: 80%;
|
||||
height: 20rpx;
|
||||
border-radius: 50px;
|
||||
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%;
|
||||
margin: 0 auto;
|
||||
color: #333333;
|
||||
border-radius: 24rpx;
|
||||
border-radius: 12rpx;
|
||||
background: #FFFFFF;
|
||||
padding: 32rpx;
|
||||
margin-bottom: 24rpx;
|
||||
position: relative;
|
||||
/* 去掉阴影,保持扁平统一 */
|
||||
.sign{
|
||||
position: absolute;
|
||||
font-size: 28rpx;
|
||||
@@ -413,22 +511,191 @@ view{box-sizing: border-box;display: block;}
|
||||
margin: 0 auto;
|
||||
margin-bottom: 20rpx;
|
||||
}
|
||||
.showtab{
|
||||
.job-grid {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: space-between;
|
||||
margin-bottom: 40rpx;
|
||||
.tabItem{
|
||||
position: relative;
|
||||
width: calc(50% - 8rpx);
|
||||
height: 144rpx;
|
||||
/* 列表前边距调大 */
|
||||
margin-top: 48rpx;
|
||||
|
||||
.job-card-box {
|
||||
/* 缩小宽度比例以增加瀑布流列间距 */
|
||||
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;
|
||||
height: 18rpx;
|
||||
bottom: -24rpx;
|
||||
right: 50%;
|
||||
transform: translateX(50%);
|
||||
}
|
||||
|
||||
.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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -464,32 +731,35 @@ view{box-sizing: border-box;display: block;}
|
||||
|
||||
.tabs {
|
||||
margin-bottom: 80rpx;
|
||||
height: 120rpx;
|
||||
border-radius: 20rpx !important;
|
||||
background: #f8faff !important;
|
||||
box-shadow: 0px 4rpx 15rpx rgba(0, 0, 0, 0.04);
|
||||
background-color: #eee;
|
||||
border-radius: 60px;
|
||||
padding: 10px;
|
||||
.tab {
|
||||
width: 33.3% !important;
|
||||
line-height: 120rpx !important;
|
||||
font-size: 20px !important;
|
||||
border-radius: 16rpx !important;
|
||||
line-height: 180rpx !important;
|
||||
font-size: 36px !important;
|
||||
border-radius: 100rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.titles {
|
||||
margin-top: 40rpx;
|
||||
margin-bottom: 60rpx;
|
||||
margin-bottom: 60px;
|
||||
.title-item {
|
||||
font-size: 24px !important;
|
||||
font-size: 40px;
|
||||
font-weight: 600;
|
||||
margin-right: 100rpx !important;
|
||||
margin-right: 100px !important;
|
||||
>view {
|
||||
padding: 0 16rpx !important;
|
||||
}
|
||||
&::after {
|
||||
height: 24rpx !important;
|
||||
bottom: -12rpx !important;
|
||||
width: 110% !important;
|
||||
height: 20rpx !important;
|
||||
bottom: -16px !important;
|
||||
width: 20% !important;
|
||||
left: 40% !important;
|
||||
background: orange;
|
||||
border-radius: 0;
|
||||
|
||||
}
|
||||
}
|
||||
.more-link {
|
||||
|
||||
@@ -1,10 +1,14 @@
|
||||
<template>
|
||||
<view
|
||||
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
|
||||
class="input-outer-part"
|
||||
style="padding: 24rpx 32rpx 0; max-height: unset"
|
||||
@@ -17,7 +21,7 @@
|
||||
border="none"
|
||||
/>
|
||||
<img
|
||||
src="https://rc.jinan.gov.cn/qcwjyH5/static/images/person/search.png"
|
||||
src="/packageRc/static/dmsc/ss.png"
|
||||
class="search-icon"
|
||||
@click="search()"
|
||||
/>
|
||||
@@ -53,33 +57,22 @@
|
||||
@scrolltolower="getBottomList"
|
||||
:show-scrollbar="false"
|
||||
>
|
||||
<view
|
||||
style="margin-bottom: 24rpx; border-radius: 16rpx"
|
||||
class="policy-list"
|
||||
v-for="(item, index) in tableData"
|
||||
:key="index"
|
||||
@click="goPolicyDetail(item)"
|
||||
>
|
||||
<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 v-for="(item, index) in tableData" :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="bottom-line">
|
||||
<view>
|
||||
<uni-icons color="#A2A2A2" type="info" :size="uniIconSize"></uni-icons>
|
||||
发文日期:{{ item.publishTime }}
|
||||
</view>
|
||||
<view>
|
||||
<uni-icons color="#A2A2A2" type="eye" :size="uniIconSize"></uni-icons>
|
||||
浏览量:{{ item.viewNum || 0 }}
|
||||
<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 style="padding-bottom: 24rpx">
|
||||
<view style="padding-bottom: 24px">
|
||||
<img
|
||||
v-if="!total && !loading"
|
||||
src="https://rc.jinan.gov.cn/qcwjyH5/static/images/person/empty.png"
|
||||
@@ -90,11 +83,11 @@
|
||||
</view>
|
||||
<view
|
||||
v-else-if="showMorePage"
|
||||
style="text-align: center; color: #1a62ce; font-size: 24rpx"
|
||||
style="text-align: center; color: #1a62ce; font-size: 24px"
|
||||
>加载更多
|
||||
</view>
|
||||
<view
|
||||
style="text-align: center; color: #8e8e8e; font-size: 24rpx"
|
||||
style="text-align: center; color: #8e8e8e; font-size: 24px"
|
||||
v-else
|
||||
>没有更多数据了~</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) {
|
||||
// 获取此次提交前,旧的政策类型值
|
||||
const oldTypeL = this.queryParams.policyTypeL || "";
|
||||
@@ -291,20 +293,31 @@ export default {
|
||||
this.total = res.total;
|
||||
} else {
|
||||
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({
|
||||
title: res.msg || '获取列表失败',
|
||||
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>
|
||||
@@ -320,7 +333,7 @@ export default {
|
||||
}
|
||||
.page {
|
||||
background-color: #f4f4f4 !important;
|
||||
height: 100vh;
|
||||
height: 1920px;
|
||||
background-repeat: no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
@@ -330,7 +343,7 @@ export default {
|
||||
background: #ffffff;
|
||||
box-sizing: border-box;
|
||||
border: 1px solid #107afd;
|
||||
height: 64rpx;
|
||||
height: 120rpx;
|
||||
border-radius: 32rpx;
|
||||
padding: 0 32rpx;
|
||||
display: flex;
|
||||
@@ -340,8 +353,10 @@ export default {
|
||||
margin-top: 24rpx;
|
||||
|
||||
.search-icon {
|
||||
width: 40rpx;
|
||||
height: 40rpx;
|
||||
width: 40px;
|
||||
background: #107afd;
|
||||
padding: 10px;border-radius: 40px;
|
||||
height: 40px;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -718,7 +733,10 @@ export default {
|
||||
height: 48px !important;
|
||||
}
|
||||
.search-line {
|
||||
height: 80rpx !important;
|
||||
height: 80px !important;
|
||||
border-radius: 40px;
|
||||
padding: 0 20px!important;
|
||||
input{font-size: 24px!important;}
|
||||
}
|
||||
.policy-list .title image {
|
||||
width: 56rpx !important;
|
||||
@@ -726,8 +744,119 @@ export default {
|
||||
margin-right: 16rpx !important;
|
||||
}
|
||||
.loading-text {
|
||||
font-size: 20px !important;
|
||||
font-size: 26px !important;
|
||||
}
|
||||
}
|
||||
/* #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>
|
||||
|
||||
BIN
packageRc/static/dmsc/bj.png
Normal file
BIN
packageRc/static/dmsc/bj.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 26 KiB |
BIN
packageRc/static/dmsc/gs.png
Normal file
BIN
packageRc/static/dmsc/gs.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 611 B |
BIN
packageRc/static/dmsc/kpbj.png
Normal file
BIN
packageRc/static/dmsc/kpbj.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 29 KiB |
BIN
packageRc/static/dmsc/sj.png
Normal file
BIN
packageRc/static/dmsc/sj.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 911 B |
BIN
packageRc/static/dmsc/ss.png
Normal file
BIN
packageRc/static/dmsc/ss.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1007 B |
14
pages.json
14
pages.json
@@ -3,7 +3,8 @@
|
||||
{
|
||||
"path": "pages/index/index",
|
||||
"style": {
|
||||
"navigationBarTitleText": "喀什智慧就业平台"
|
||||
"navigationBarTitleText": "喀什智慧就业平台",
|
||||
"navigationStyle": "custom"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -79,7 +80,8 @@
|
||||
{
|
||||
"path": "pages/resume-guide/resume-guide",
|
||||
"style": {
|
||||
"navigationBarTitleText": "简历制作指导"
|
||||
"navigationBarTitleText": "简历制作指导",
|
||||
"navigationStyle": "custom"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -645,7 +647,10 @@
|
||||
{
|
||||
"path": "pages/index/index",
|
||||
"style": {
|
||||
"navigationBarTitleText": "高校毕业生智慧就业"
|
||||
"navigationBarTitleText": "高校毕业生智慧就业",
|
||||
"navigationBarBackgroundColor": "#107AFD",
|
||||
"navigationBarTextStyle": "white",
|
||||
"navigationStyle": "custom"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -723,7 +728,8 @@
|
||||
{
|
||||
"path": "pages/policy/policyList",
|
||||
"style": {
|
||||
"navigationBarTitleText": "政策专区"
|
||||
"navigationBarTitleText": "政策专区",
|
||||
"navigationStyle": "custom"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
||||
@@ -1,6 +1,16 @@
|
||||
<template>
|
||||
<view class="app-custom-root">
|
||||
<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">
|
||||
<IndexOne @onShowTabbar="changeShowTabbar" />
|
||||
@@ -23,6 +33,22 @@ import useUserStore from '@/stores/useUserStore';
|
||||
import { tabbarManager } from '@/utils/tabbarManager';
|
||||
const { unreadCount } = storeToRefs(useReadMsg());
|
||||
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) => {
|
||||
// useReadMsg().fetchMessages();
|
||||
});
|
||||
@@ -191,4 +217,32 @@ onShow(() => {
|
||||
background: #FFFFFF
|
||||
width: 4rpx
|
||||
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>
|
||||
|
||||
@@ -192,6 +192,8 @@ function close() {
|
||||
|
||||
function confirm() {
|
||||
useUserStore().logOut();
|
||||
// alert('退出登录成功');
|
||||
// window.location.reload();
|
||||
}
|
||||
|
||||
const isAbove90 = (percent) => parseFloat(percent) < 90;
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
<template>
|
||||
<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="page-header">
|
||||
@@ -91,7 +98,9 @@ const warnings = ref([
|
||||
{ title: '格式混乱', desc: '保持统一的字体、字号和排版风格' },
|
||||
{ title: '缺乏针对性', desc: '针对不同岗位调整简历内容' }
|
||||
]);
|
||||
|
||||
const navBack = () => {
|
||||
window.location.href = 'https://www.xjksly.cn/mechine-single-vue/';
|
||||
};
|
||||
// 开始制作简历
|
||||
const startCreateResume = () => {
|
||||
navTo('/packageA/pages/myResume/myResume');
|
||||
@@ -109,7 +118,37 @@ const viewExampleResume = () => {
|
||||
background: #FFFFFF;
|
||||
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 {
|
||||
text-align: center;
|
||||
margin-bottom: 42rpx;
|
||||
|
||||
@@ -72,6 +72,7 @@ const useUserStore = defineStore("user", () => {
|
||||
role.value = {}
|
||||
uni.removeStorageSync('userInfo')
|
||||
uni.removeStorageSync('token')
|
||||
uni.removeStorageSync('zkr-token')
|
||||
uni.removeStorageSync('Padmin-Token')
|
||||
// 如果需要显示登录弹窗,则通过事件通知页面显示微信登录弹窗
|
||||
if (showLoginModal) {
|
||||
|
||||
@@ -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 {
|
||||
messages,
|
||||
isTyping,
|
||||
@@ -348,7 +389,9 @@ const useChatGroupDBStore = defineStore("messageGroup", () => {
|
||||
changeDialogue,
|
||||
getStearm,
|
||||
getHistory,
|
||||
badFeedback
|
||||
badFeedback,
|
||||
deleteMessage,
|
||||
deleteSession
|
||||
};
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user