Merge branch 'main' into yxl
This commit is contained in:
BIN
common/.DS_Store
vendored
BIN
common/.DS_Store
vendored
Binary file not shown.
BIN
components/.DS_Store
vendored
BIN
components/.DS_Store
vendored
Binary file not shown.
@@ -111,7 +111,7 @@ const generateTabbarList = () => {
|
||||
// baseItems.splice(1, 0, {
|
||||
// id: 1,
|
||||
// text: '招聘会',
|
||||
// path: '/pages/careerfair/careerfair',
|
||||
// path: '/packageA/pages/careerfair/careerfair',
|
||||
// iconPath: '/static/tabbar/post.png',
|
||||
// selectedIconPath: '/static/tabbar/posted.png',
|
||||
// centerItem: false,
|
||||
@@ -124,7 +124,7 @@ const generateTabbarList = () => {
|
||||
baseItems.splice(1, 0, {
|
||||
id: 5,
|
||||
text: '招聘会',
|
||||
path: '/pages/careerfair/careerfair',
|
||||
path: '/packageA/pages/careerfair/careerfair',
|
||||
iconPath: '/static/tabbar/careerfair.png',
|
||||
selectedIconPath: '/static/tabbar/careerfaired.png',
|
||||
centerItem: false,
|
||||
@@ -178,7 +178,7 @@ const switchTab = (item, index) => {
|
||||
const loginRequiredPages = [
|
||||
'/packageA/pages/job/publishJob',
|
||||
'/pages/mine/mine',
|
||||
'/pages/mine/company-mine',
|
||||
'/packageA/pages/company-mine/company-mine',
|
||||
'/pages/msglog/msglog'
|
||||
];
|
||||
|
||||
@@ -245,7 +245,7 @@ const switchTab = (item, index) => {
|
||||
|
||||
if (userType === 0) {
|
||||
// 企业用户,跳转到企业我的页面
|
||||
targetPath = '/pages/mine/company-mine';
|
||||
targetPath = '/packageA/pages/company-mine/company-mine';
|
||||
} else {
|
||||
// 求职者或其他用户类型,跳转到普通我的页面
|
||||
targetPath = '/pages/mine/mine';
|
||||
|
||||
@@ -121,7 +121,7 @@ const generateTabbarList = () => {
|
||||
baseItems.splice(1, 0, {
|
||||
id: 1,
|
||||
text: '招聘会',
|
||||
path: '/pages/careerfair/careerfair',
|
||||
path: '/packageA/pages/careerfair/careerfair',
|
||||
iconPath: '../../static/tabbar/post.png',
|
||||
selectedIconPath: '../../static/tabbar/posted.png',
|
||||
centerItem: false,
|
||||
@@ -147,7 +147,7 @@ const changeItem = (item) => {
|
||||
// 判断是否为 TabBar 页面
|
||||
const tabBarPages = [
|
||||
'/pages/index/index',
|
||||
'/pages/careerfair/careerfair',
|
||||
'/packageA/pages/careerfair/careerfair',
|
||||
'/packageA/pages/chat/chat',
|
||||
'/pages/msglog/msglog',
|
||||
'/pages/mine/mine'
|
||||
|
||||
@@ -79,6 +79,7 @@
|
||||
<button
|
||||
class="auth-btn primary"
|
||||
open-type="getPhoneNumber"
|
||||
@tap="onPrepareWxAuth"
|
||||
@getphonenumber="getPhoneNumber"
|
||||
>
|
||||
<uni-icons type="phone" size="20" color="#FFFFFF"></uni-icons>
|
||||
@@ -126,6 +127,7 @@ import { ref, inject, onMounted } from 'vue';
|
||||
import useUserStore from '@/stores/useUserStore';
|
||||
import useDictStore from '@/stores/useDictStore';
|
||||
import { tabbarManager } from '@/utils/tabbarManager';
|
||||
import { prepareWxLoginCodeOnTap, consumeWxLoginCodeFromTap } from '@/utils/loginHelper';
|
||||
|
||||
const { $api } = inject('globalFunction');
|
||||
const { loginSetToken } = useUserStore();
|
||||
@@ -171,6 +173,7 @@ const open = () => {
|
||||
// 检查是否已同意协议
|
||||
const agreed = uni.getStorageSync('agreedToUserAgreement');
|
||||
agreedToAgreement.value = !!agreed;
|
||||
|
||||
};
|
||||
|
||||
// 关闭弹窗
|
||||
@@ -212,84 +215,92 @@ const validateRole = () => {
|
||||
return true;
|
||||
};
|
||||
|
||||
const getPhoneNumber = (e) => {
|
||||
console.log('获取手机号:', e);
|
||||
console.log('userType.value', userType.value)
|
||||
const onPrepareWxAuth = () => {
|
||||
if (!validateRole()) {
|
||||
return;
|
||||
}
|
||||
prepareWxLoginCodeOnTap().catch((err) => {
|
||||
console.error('预取微信登录凭证失败:', err);
|
||||
});
|
||||
};
|
||||
|
||||
// 验证角色、机构类型和隐私协议
|
||||
const getPhoneNumber = async (e) => {
|
||||
if (!validateRole()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (e.detail.errMsg === 'getPhoneNumber:ok') {
|
||||
uni.login({
|
||||
provider: 'weixin',
|
||||
success: (loginRes) => {
|
||||
console.log('微信登录code获取成功:', loginRes.code);
|
||||
const { encryptedData, iv } = e.detail;
|
||||
const code = loginRes.code; // 使用wx.login返回的code
|
||||
const { encryptedData, iv, code: wxPhoneCode } = e.detail;
|
||||
if (!encryptedData && !wxPhoneCode) {
|
||||
$api.msg('获取手机号失败');
|
||||
return;
|
||||
}
|
||||
|
||||
// 调用后端接口进行登录
|
||||
uni.showLoading({ title: '登录中...' });
|
||||
let loginCode = '';
|
||||
try {
|
||||
loginCode = await consumeWxLoginCodeFromTap();
|
||||
} catch (err) {
|
||||
console.error('获取微信登录凭证失败:', err);
|
||||
$api.msg('获取登录信息失败,请重试');
|
||||
return;
|
||||
}
|
||||
if (!loginCode) {
|
||||
$api.msg('登录凭证未就绪,请重新点击授权');
|
||||
return;
|
||||
}
|
||||
|
||||
$api.createRequest('/app/appLogin', {
|
||||
code,
|
||||
encryptedData,
|
||||
iv,
|
||||
userType: userType.value,
|
||||
orgType: orgType.value
|
||||
}, 'post').then((resData) => {
|
||||
uni.hideLoading();
|
||||
console.log(resData, 'resume.idCard');
|
||||
if (resData.token) {
|
||||
// 登录成功,存储token
|
||||
loginSetToken(resData.token).then((resume) => {
|
||||
// 更新用户类型到缓存
|
||||
if (resData.isCompanyUser !== undefined) {
|
||||
console.log(resData.isCompanyUser, 'resData.isCompanyUser');
|
||||
const userInfo = uni.getStorageSync('userInfo') || {};
|
||||
userInfo.isCompanyUser = Number(resData.isCompanyUser); // 0-企业用户,1-求职者
|
||||
uni.setStorageSync('userInfo', userInfo);
|
||||
}
|
||||
const requestParams = {
|
||||
code: loginCode,
|
||||
userType: userType.value,
|
||||
orgType: orgType.value
|
||||
};
|
||||
if (encryptedData && iv) {
|
||||
requestParams.encryptedData = encryptedData;
|
||||
requestParams.iv = iv;
|
||||
}
|
||||
if (wxPhoneCode) {
|
||||
requestParams.phoneCode = wxPhoneCode;
|
||||
}
|
||||
|
||||
$api.msg('登录成功');
|
||||
// 刷新tabbar以显示正确的用户类型
|
||||
tabbarManager.refreshTabBar();
|
||||
close();
|
||||
emit('success');
|
||||
uni.showLoading({ title: '登录中...' });
|
||||
try {
|
||||
const resData = await $api.createRequest('/app/appLogin', requestParams, 'post');
|
||||
if (resData.token) {
|
||||
await loginSetToken(resData.token).then((resume) => {
|
||||
if (resData.isCompanyUser !== undefined) {
|
||||
const userInfo = uni.getStorageSync('userInfo') || {};
|
||||
userInfo.isCompanyUser = Number(resData.isCompanyUser);
|
||||
uni.setStorageSync('userInfo', userInfo);
|
||||
}
|
||||
|
||||
// 根据用户类型跳转到不同的信息补全页面
|
||||
if (!resume.jobTitleId) {
|
||||
console.log(resume, 'resume.idCard');
|
||||
if (userType.value === 1 && !resData.idCard) {
|
||||
// 求职者跳转到个人信息补全页面
|
||||
uni.navigateTo({
|
||||
url: '/packageA/pages/complete-info/complete-info?step=1'
|
||||
});
|
||||
} else if (userType.value === 0 && !resData.idCard) {
|
||||
// 招聘者跳转到企业信息补全页面
|
||||
uni.navigateTo({
|
||||
url: '/packageA/pages/complete-info/company-info'
|
||||
});
|
||||
}
|
||||
}
|
||||
}).catch(() => {
|
||||
$api.msg('获取用户信息失败');
|
||||
});
|
||||
} else {
|
||||
// $api.msg('登录失败,请重试');
|
||||
$api.msg(resData.msg || '登录失败,请重试');
|
||||
}
|
||||
}).catch((err) => {
|
||||
uni.hideLoading();
|
||||
$api.msg(err.msg || '登录失败,请重试');
|
||||
});
|
||||
},
|
||||
fail: (err) => {
|
||||
console.error('获取微信登录code失败:', err);
|
||||
$api.msg('获取登录信息失败,请重试');
|
||||
}
|
||||
});
|
||||
$api.msg('登录成功');
|
||||
tabbarManager.refreshTabBar();
|
||||
close();
|
||||
emit('success');
|
||||
|
||||
if (!resume.jobTitleId) {
|
||||
if (userType.value === 1 && !resData.idCard) {
|
||||
uni.navigateTo({
|
||||
url: '/packageA/pages/complete-info/complete-info?step=1'
|
||||
});
|
||||
} else if (userType.value === 0 && !resData.idCard) {
|
||||
uni.navigateTo({
|
||||
url: '/packageA/pages/complete-info/company-info'
|
||||
});
|
||||
}
|
||||
}
|
||||
}).catch(() => {
|
||||
$api.msg('获取用户信息失败');
|
||||
});
|
||||
} else {
|
||||
$api.msg(resData.msg || '登录失败,请重试');
|
||||
}
|
||||
} catch (err) {
|
||||
console.error('微信登录请求异常:', err);
|
||||
$api.msg(err.message || err.msg || '登录失败,请重试');
|
||||
} finally {
|
||||
uni.hideLoading();
|
||||
}
|
||||
} else if (e.detail.errMsg === 'getPhoneNumber:fail user deny') {
|
||||
$api.msg('您取消了授权');
|
||||
} else {
|
||||
@@ -308,7 +319,7 @@ const wxLogin = () => {
|
||||
// H5端跳转到H5登录页面
|
||||
close();
|
||||
uni.navigateTo({
|
||||
url: '/pages/login/h5-login'
|
||||
url: '/packageA/pages/login/h5-login'
|
||||
});
|
||||
return;
|
||||
// #endif
|
||||
|
||||
@@ -85,7 +85,7 @@ export default {
|
||||
},
|
||||
shareConfig: {
|
||||
baseUrl: 'https://qd.zhaopinzao8dian.com',
|
||||
title: '找工作,用 AI 更高效|青岛市智能求职平台',
|
||||
title: '找工作,用 AI 更高效|喀什智能求职平台',
|
||||
desc: '融合海量岗位、智能简历匹配、竞争力分析,助你精准锁定理想职位!',
|
||||
imgUrl: 'https://qd.zhaopinzao8dian.com/file/csn/qd_shareLogo.jpg',
|
||||
},
|
||||
|
||||
BIN
hook/.DS_Store
vendored
BIN
hook/.DS_Store
vendored
Binary file not shown.
@@ -1,136 +0,0 @@
|
||||
import {
|
||||
ref,
|
||||
onBeforeUnmount,
|
||||
onMounted
|
||||
} from 'vue'
|
||||
import {
|
||||
onHide,
|
||||
onUnload
|
||||
} from '@dcloudio/uni-app'
|
||||
|
||||
|
||||
|
||||
export function useSpeechReader() {
|
||||
const isSpeaking = ref(false)
|
||||
const isPaused = ref(false)
|
||||
let utterance = null
|
||||
|
||||
const cleanMarkdown = (text) => {
|
||||
return formatTextForSpeech(text)
|
||||
}
|
||||
|
||||
const speak = (text, options = {
|
||||
lang: 'zh-CN',
|
||||
rate: 0.9,
|
||||
pitch: 1.2
|
||||
}) => {
|
||||
cancelAudio() // 重置之前的
|
||||
// const voices = speechSynthesis.getVoices()
|
||||
// const chineseVoices = voices.filter(v => v.lang.includes('zh'))
|
||||
const speechText = extractSpeechText(text);
|
||||
utterance = new SpeechSynthesisUtterance(speechText)
|
||||
// utterance.lang = options.lang || 'zh'
|
||||
utterance.rate = options.rate || 1
|
||||
utterance.pitch = options.pitch || 1.1 // 音调(0 - 2,偏高比较柔和)
|
||||
|
||||
utterance.onend = () => {
|
||||
isSpeaking.value = false
|
||||
isPaused.value = false
|
||||
}
|
||||
|
||||
speechSynthesis.speak(utterance)
|
||||
isSpeaking.value = true
|
||||
isPaused.value = false
|
||||
}
|
||||
|
||||
const pause = () => {
|
||||
if (isSpeaking.value && !isPaused.value) {
|
||||
speechSynthesis.pause()
|
||||
isPaused.value = true
|
||||
}
|
||||
}
|
||||
|
||||
const resume = () => {
|
||||
if (isSpeaking.value && isPaused.value) {
|
||||
speechSynthesis.resume()
|
||||
isPaused.value = false
|
||||
}
|
||||
}
|
||||
|
||||
const cancelAudio = () => {
|
||||
speechSynthesis.cancel()
|
||||
isSpeaking.value = false
|
||||
isPaused.value = false
|
||||
}
|
||||
// 页面刷新/关闭时
|
||||
onMounted(() => {
|
||||
if (typeof window !== 'undefined') {
|
||||
window.addEventListener('beforeunload', cancelAudio)
|
||||
}
|
||||
})
|
||||
|
||||
onBeforeUnmount(() => {
|
||||
cancelAudio()
|
||||
if (typeof window !== 'undefined') {
|
||||
window.removeEventListener('beforeunload', cancelAudio)
|
||||
}
|
||||
})
|
||||
|
||||
onHide(cancelAudio)
|
||||
onUnload(cancelAudio)
|
||||
|
||||
return {
|
||||
speak,
|
||||
pause,
|
||||
resume,
|
||||
cancelAudio,
|
||||
isSpeaking,
|
||||
isPaused,
|
||||
}
|
||||
}
|
||||
|
||||
function extractSpeechText(markdown) {
|
||||
const jobRegex = /``` job-json\s*({[\s\S]*?})\s*```/g;
|
||||
const jobs = [];
|
||||
let match;
|
||||
let lastJobEndIndex = 0;
|
||||
let firstJobStartIndex = -1;
|
||||
|
||||
// 提取岗位 json 数据及前后位置
|
||||
while ((match = jobRegex.exec(markdown)) !== null) {
|
||||
const jobStr = match[1];
|
||||
try {
|
||||
const job = JSON.parse(jobStr);
|
||||
jobs.push(job);
|
||||
if (firstJobStartIndex === -1) {
|
||||
firstJobStartIndex = match.index;
|
||||
}
|
||||
lastJobEndIndex = jobRegex.lastIndex;
|
||||
} catch (e) {
|
||||
console.warn('JSON 解析失败', e);
|
||||
}
|
||||
}
|
||||
|
||||
// 提取引导语(第一个 job-json 之前的文字)
|
||||
const guideText = firstJobStartIndex > 0 ?
|
||||
markdown.slice(0, firstJobStartIndex).trim() :
|
||||
'';
|
||||
|
||||
// 提取结束语(最后一个 job-json 之后的文字)
|
||||
const endingText = lastJobEndIndex < markdown.length ?
|
||||
markdown.slice(lastJobEndIndex).trim() :
|
||||
'';
|
||||
|
||||
// 岗位信息格式化为语音文本
|
||||
const jobTexts = jobs.map((job, index) => {
|
||||
return `第 ${index + 1} 个岗位,岗位名称是:${job.jobTitle},公司是:${job.companyName},薪资:${job.salary},地点:${job.location},学历要求:${job.education},经验要求:${job.experience}。`;
|
||||
});
|
||||
|
||||
// 拼接总语音内容
|
||||
const finalTextParts = [];
|
||||
if (guideText) finalTextParts.push(guideText);
|
||||
finalTextParts.push(...jobTexts);
|
||||
if (endingText) finalTextParts.push(endingText);
|
||||
|
||||
return finalTextParts.join('\n');
|
||||
}
|
||||
BIN
lib/.DS_Store
vendored
BIN
lib/.DS_Store
vendored
Binary file not shown.
10
lib/highlight/github-dark.min.css
vendored
10
lib/highlight/github-dark.min.css
vendored
@@ -1,10 +0,0 @@
|
||||
pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*!
|
||||
Theme: GitHub Dark
|
||||
Description: Dark theme as seen on github.com
|
||||
Author: github.com
|
||||
Maintainer: @Hirse
|
||||
Updated: 2021-05-15
|
||||
|
||||
Outdated base version: https://github.com/primer/github-syntax-dark
|
||||
Current colors taken from GitHub's CSS
|
||||
*/.hljs{color:#c9d1d9;background:#0d1117}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#ff7b72}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#d2a8ff}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-variable{color:#79c0ff}.hljs-meta .hljs-string,.hljs-regexp,.hljs-string{color:#a5d6ff}.hljs-built_in,.hljs-symbol{color:#ffa657}.hljs-code,.hljs-comment,.hljs-formula{color:#8b949e}.hljs-name,.hljs-quote,.hljs-selector-pseudo,.hljs-selector-tag{color:#7ee787}.hljs-subst{color:#c9d1d9}.hljs-section{color:#1f6feb;font-weight:700}.hljs-bullet{color:#f2cc60}.hljs-emphasis{color:#c9d1d9;font-style:italic}.hljs-strong{color:#c9d1d9;font-weight:700}.hljs-addition{color:#aff5b4;background-color:#033a16}.hljs-deletion{color:#ffdcd7;background-color:#67060c}
|
||||
BIN
packageA/.DS_Store
vendored
BIN
packageA/.DS_Store
vendored
Binary file not shown.
@@ -39,7 +39,7 @@
|
||||
|
||||
<script setup>
|
||||
import { computed, onMounted, inject, ref, watch, nextTick } from 'vue';
|
||||
import { parseMarkdown, codeDataList, jobCardsList } from '@/utils/markdownParser';
|
||||
import { parseMarkdown, codeDataList, jobCardsList } from '@/packageA/utils/markdownParser';
|
||||
const { navTo } = inject('globalFunction');
|
||||
const props = defineProps({
|
||||
content: {
|
||||
@@ -4,8 +4,7 @@ import {
|
||||
} from 'vue'
|
||||
import {
|
||||
$api,
|
||||
|
||||
} from '../common/globalFunction';
|
||||
} from '@/common/globalFunction';
|
||||
|
||||
import config from '@/config'
|
||||
|
||||
BIN
packageA/pages/.DS_Store
vendored
BIN
packageA/pages/.DS_Store
vendored
Binary file not shown.
@@ -83,7 +83,7 @@
|
||||
import { ref, inject, nextTick, computed, onMounted, onUnmounted } from 'vue';
|
||||
const { $api, navTo, insertSortData, config } = inject('globalFunction');
|
||||
import { onLoad, onShow, onHide } from '@dcloudio/uni-app';
|
||||
import useChatGroupDBStore from '@/stores/userChatGroupStore';
|
||||
import useChatGroupDBStore from '@/packageA/stores/userChatGroupStore';
|
||||
import useUserStore from '@/stores/useUserStore';
|
||||
import { tabbarManager } from '@/utils/tabbarManager';
|
||||
import aiPaging from './components/ai-paging.vue';
|
||||
@@ -122,7 +122,7 @@ onShow(() => {
|
||||
onMounted(() => {
|
||||
// 监听退出登录事件,显示微信登录弹窗
|
||||
uni.$on('showLoginModal', () => {
|
||||
uni.navigateTo({ url: '/pages/login/wx-login' });
|
||||
uni.navigateTo({ url: '/packageA/pages/login/wx-login' });
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -365,15 +365,15 @@ import {
|
||||
} from 'vue';
|
||||
import { storeToRefs } from 'pinia';
|
||||
// 移除重复导入,使用从globalFunction注入的config
|
||||
import useChatGroupDBStore from '@/stores/userChatGroupStore';
|
||||
import MdRender from '@/components/md-render/md-render.vue';
|
||||
import useChatGroupDBStore from '@/packageA/stores/userChatGroupStore';
|
||||
import MdRender from '@/packageA/components/md-render/md-render.vue';
|
||||
import PopupFeeBack from './popupbadFeeback.vue';
|
||||
import AudioWave from './AudioWave.vue';
|
||||
import WaveDisplay from './WaveDisplay.vue';
|
||||
import FileIcon from './fileIcon.vue';
|
||||
import FileText from './fileText.vue';
|
||||
import { useAudioRecorder } from '@/hook/useRealtimeRecorder.js';
|
||||
import { useTTSPlayer } from '@/hook/useTTSPlayer.js';
|
||||
import { useAudioRecorder } from '@/packageA/hook/useRealtimeRecorder.js';
|
||||
import { useTTSPlayer } from '@/packageA/hook/useTTSPlayer.js';
|
||||
import successIcon from '@/static/icon/success.png';
|
||||
// 全局
|
||||
const { $api, navTo, throttle, config } = inject('globalFunction');
|
||||
|
||||
@@ -152,7 +152,7 @@ function editInfo(type) {
|
||||
|
||||
function editContacts() {
|
||||
// 跳转到联系人编辑页面
|
||||
navTo('/pages/mine/edit-company-contacts');
|
||||
navTo('/packageA/pages/company-mine/edit-company-contacts');
|
||||
}
|
||||
|
||||
onShow(() => {
|
||||
@@ -176,7 +176,7 @@ const companyInfo = reactive({
|
||||
});
|
||||
|
||||
function goToCompanyInfo() {
|
||||
navTo('/pages/mine/company-info');
|
||||
navTo('/packageA/pages/company-mine/company-info');
|
||||
}
|
||||
function handleInstitutionClick(i){
|
||||
if(i==1){
|
||||
@@ -221,7 +221,7 @@ onMounted(() => {
|
||||
// 这里可以显示微信登录弹窗
|
||||
// 跳转到微信登录页面
|
||||
uni.navigateTo({
|
||||
url: '/pages/login/wx-login'
|
||||
url: '/packageA/pages/login/wx-login'
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -234,7 +234,7 @@
|
||||
<script setup>
|
||||
import { ref, reactive, computed, inject } from 'vue'
|
||||
import { onLoad } from '@dcloudio/uni-app'
|
||||
import AreaCascadePicker from '@/components/area-cascade-picker/area-cascade-picker.vue'
|
||||
import AreaCascadePicker from '@/packageA/components/area-cascade-picker/area-cascade-picker.vue'
|
||||
import SelectPopup from '@/components/selectPopup/selectPopup.vue'
|
||||
import useDictStore from '@/stores/useDictStore'
|
||||
import useUserStore from '@/stores/useUserStore'
|
||||
|
||||
@@ -185,7 +185,7 @@
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import signDialog from '@/components/jobfair/signDialog.vue';
|
||||
import signDialog from '@/packageA/components/jobfair/signDialog.vue';
|
||||
import config from "@/config.js"
|
||||
import {
|
||||
reactive,
|
||||
|
||||
@@ -219,7 +219,7 @@ const handleLogin = async () => {
|
||||
// 跳转到身份证号码登录页面
|
||||
const goToIdCardLogin = () => {
|
||||
uni.navigateTo({
|
||||
url: '/pages/login/id-card-login'
|
||||
url: '/packageA/pages/login/id-card-login'
|
||||
})
|
||||
}
|
||||
|
||||
@@ -83,6 +83,7 @@
|
||||
<button
|
||||
class="auth-btn primary"
|
||||
open-type="getPhoneNumber"
|
||||
@tap="onPrepareWxAuth"
|
||||
@getphonenumber="onWxGetPhoneNumber"
|
||||
>
|
||||
<uni-icons type="phone" size="20" color="#FFFFFF"></uni-icons>
|
||||
@@ -127,6 +128,7 @@ import { ref, inject, onMounted, computed } from 'vue';
|
||||
import { onLoad } from '@dcloudio/uni-app';
|
||||
import useUserStore from '@/stores/useUserStore';
|
||||
import useDictStore from '@/stores/useDictStore';
|
||||
import { prepareWxLoginCodeOnTap, consumeWxLoginCodeFromTap } from '@/utils/loginHelper';
|
||||
|
||||
const { $api } = inject('globalFunction');
|
||||
const userStore = useUserStore();
|
||||
@@ -229,96 +231,103 @@ const validateForm = () => {
|
||||
return true;
|
||||
};
|
||||
|
||||
// 微信小程序授权前的检查
|
||||
const checkBeforeWxAuth = (e) => {
|
||||
// 验证表单
|
||||
// 点击授权按钮时立即获取 wx.login code(tap 早于 getPhoneNumber 弹窗,保证 session 一致)
|
||||
const onPrepareWxAuth = () => {
|
||||
if (!validateForm()) {
|
||||
// 阻止微信授权流程
|
||||
if (e && e.preventDefault) {
|
||||
e.preventDefault();
|
||||
}
|
||||
return false;
|
||||
} else {
|
||||
console.log('Validation passed, allowing wx auth');
|
||||
return;
|
||||
}
|
||||
prepareWxLoginCodeOnTap().catch((err) => {
|
||||
console.error('预取微信登录凭证失败:', err);
|
||||
});
|
||||
};
|
||||
|
||||
// 微信获取手机号
|
||||
// 微信获取手机号(使用本次点击时预取的 login code,避免 session_key 与 encryptedData 不匹配)
|
||||
const onWxGetPhoneNumber = async (e) => {
|
||||
const { encryptedData, iv } = e.detail;
|
||||
// 使用通用验证函数
|
||||
if (!validateForm()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (e.detail.errMsg === 'getPhoneNumber:ok') {
|
||||
uni.login({
|
||||
provider: 'weixin',
|
||||
success: (loginRes) => {
|
||||
const code = loginRes.code;
|
||||
const { encryptedData, iv, code: wxPhoneCode } = e.detail;
|
||||
if (!encryptedData && !wxPhoneCode) {
|
||||
uni.showToast({ title: '获取手机号失败', icon: 'none', duration: 2000 });
|
||||
return;
|
||||
}
|
||||
|
||||
// 调用接口 /app/appWxphoneSmsCode
|
||||
uni.showLoading({ title: '获取验证码中...' });
|
||||
let loginCode = '';
|
||||
try {
|
||||
loginCode = await consumeWxLoginCodeFromTap();
|
||||
} catch (err) {
|
||||
console.error('获取微信登录凭证失败:', err);
|
||||
uni.showToast({
|
||||
title: '获取登录信息失败,请重试',
|
||||
icon: 'none',
|
||||
duration: 2000
|
||||
});
|
||||
return;
|
||||
}
|
||||
if (!loginCode) {
|
||||
uni.showToast({
|
||||
title: '登录凭证未就绪,请重新点击授权',
|
||||
icon: 'none',
|
||||
duration: 2000
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
// 根据用户类型构建参数
|
||||
const requestParams = {
|
||||
code,
|
||||
encryptedData,
|
||||
iv,
|
||||
uni.showLoading({ title: '获取验证码中...' });
|
||||
|
||||
const requestParams = {
|
||||
code: loginCode,
|
||||
userType: userType.value
|
||||
};
|
||||
if (encryptedData && iv) {
|
||||
requestParams.encryptedData = encryptedData;
|
||||
requestParams.iv = iv;
|
||||
}
|
||||
if (wxPhoneCode) {
|
||||
requestParams.phoneCode = wxPhoneCode;
|
||||
}
|
||||
if (userType.value === 0) {
|
||||
requestParams.orgType = orgType.value;
|
||||
}
|
||||
|
||||
try {
|
||||
const resData = await $api.createRequest('/app/appWxphoneSmsCode', requestParams, 'post');
|
||||
const possiblePhoneFields = ['phone', 'mobile', 'phoneNumber', 'tel', 'mobilePhone'];
|
||||
let phoneValue = '';
|
||||
for (const field of possiblePhoneFields) {
|
||||
if (resData[field]) {
|
||||
phoneValue = resData[field];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (resData.code === 200 || resData.success) {
|
||||
const params = {
|
||||
phone: phoneValue || '',
|
||||
openid: resData.openid || '',
|
||||
unionid: resData.unionid || '',
|
||||
userType: userType.value
|
||||
};
|
||||
// 只有单位用户才传递机构类型
|
||||
if (userType.value === 0) {
|
||||
requestParams.orgType = orgType.value;
|
||||
params.orgType = orgType.value;
|
||||
}
|
||||
|
||||
$api.createRequest('/app/appWxphoneSmsCode', requestParams, 'post').then((resData) => {
|
||||
uni.hideLoading();
|
||||
// 检查可能的手机号字段
|
||||
const possiblePhoneFields = ['phone', 'mobile', 'phoneNumber', 'tel', 'mobilePhone'];
|
||||
let phoneValue = '';
|
||||
for (const field of possiblePhoneFields) {
|
||||
if (resData[field]) {
|
||||
phoneValue = resData[field];
|
||||
console.log(`从接口返回中找到手机号字段 "${field}": ${phoneValue}`);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (resData.code === 200 || resData.success) {
|
||||
// 跳转到短信验证页面,传递参数
|
||||
const params = {
|
||||
phone: phoneValue || '', // 接口返回的手机号
|
||||
openid: resData.openid || '',
|
||||
unionid: resData.unionid || '',
|
||||
userType: userType.value
|
||||
};
|
||||
// 只有单位用户才传递机构类型
|
||||
if (userType.value === 0) {
|
||||
params.orgType = orgType.value;
|
||||
}
|
||||
|
||||
uni.navigateTo({
|
||||
url: '/pages/login/sms-verify?' + Object.keys(params)
|
||||
.map(key => `${key}=${encodeURIComponent(params[key])}`)
|
||||
.join('&')
|
||||
});
|
||||
} else {
|
||||
$api.msg(resData.msg || '获取验证码失败');
|
||||
}
|
||||
}).catch((err) => {
|
||||
uni.hideLoading();
|
||||
$api.msg(err.msg || '获取验证码失败,请重试');
|
||||
});
|
||||
},
|
||||
fail: (err) => {
|
||||
uni.showToast({
|
||||
title: '获取登录信息失败,请重试',
|
||||
icon: 'none',
|
||||
duration: 2000
|
||||
uni.navigateTo({
|
||||
url: '/packageA/pages/login/sms-verify?' + Object.keys(params)
|
||||
.map(key => `${key}=${encodeURIComponent(params[key])}`)
|
||||
.join('&')
|
||||
});
|
||||
} else {
|
||||
console.error('获取验证码接口失败:', resData);
|
||||
$api.msg(resData.msg || '获取验证码失败');
|
||||
}
|
||||
});
|
||||
} catch (err) {
|
||||
console.error('获取验证码请求异常:', err);
|
||||
$api.msg(err.message || err.msg || '获取验证码失败,请重试');
|
||||
} finally {
|
||||
uni.hideLoading();
|
||||
}
|
||||
} else if (e.detail.errMsg === 'getPhoneNumber:fail user deny') {
|
||||
uni.showToast({
|
||||
title: '您取消了授权',
|
||||
@@ -344,7 +353,7 @@ const wxLogin = () => {
|
||||
// #ifdef H5
|
||||
// H5端跳转到H5登录页面
|
||||
uni.navigateTo({
|
||||
url: '/pages/login/h5-login'
|
||||
url: '/packageA/pages/login/h5-login'
|
||||
});
|
||||
return;
|
||||
// #endif
|
||||
@@ -494,7 +503,7 @@ const testLogin = () => {
|
||||
});
|
||||
};
|
||||
|
||||
// 页面加载时获取字典数据
|
||||
// 页面加载时获取字典数据(wx.login 改在点击授权按钮时获取,避免 session 过期或不一致)
|
||||
onLoad(() => {
|
||||
getOrgTypeDict();
|
||||
});
|
||||
@@ -14,7 +14,7 @@ const { $api, navTo, navBack, vacanciesTo } = inject('globalFunction');
|
||||
import { storeToRefs } from 'pinia';
|
||||
import useLocationStore from '@/stores/useLocationStore';
|
||||
import { usePagination } from '@/packageA/hook/usePagination';
|
||||
import { jobMoreMap } from '@/utils/markdownParser';
|
||||
import { jobMoreMap } from '@/utils/jobMoreMap.js';
|
||||
const { longitudeVal, latitudeVal } = storeToRefs(useLocationStore());
|
||||
const loadmoreRef = ref(null);
|
||||
|
||||
|
||||
BIN
packageA/pages/post/.DS_Store
vendored
BIN
packageA/pages/post/.DS_Store
vendored
Binary file not shown.
@@ -256,6 +256,7 @@ import dictLabel from '@/components/dict-Label/dict-Label.vue';
|
||||
import RadarMap from './component/radarMap.vue';
|
||||
import { storeToRefs } from 'pinia';
|
||||
import useUserStore from '@/stores/useUserStore';
|
||||
import { checkLoginAndNavigate } from '@/utils/loginHelper';
|
||||
const { userInfo } = storeToRefs(useUserStore());
|
||||
// 与首页一致的用户类型获取:优先store,兜底缓存
|
||||
const currentUserType = computed(() => {
|
||||
@@ -445,9 +446,7 @@ function getCompetivetuveness(encryptJobId) {
|
||||
|
||||
// 申请岗位
|
||||
function jobApply() {
|
||||
const tokenValue = uni.getStorageSync('token') || '';
|
||||
if (!tokenValue) {
|
||||
$api.msg('请您先登录');
|
||||
if (!checkLoginAndNavigate({ content: '投递简历请先登录' })) {
|
||||
return;
|
||||
}
|
||||
// 显示确认弹窗
|
||||
@@ -502,6 +501,9 @@ function cancelApply() {
|
||||
|
||||
// 取消/收藏岗位
|
||||
function jobCollection() {
|
||||
if (!checkLoginAndNavigate({ content: '收藏请先登录' })) {
|
||||
return;
|
||||
}
|
||||
const encryptJobId = jobIdRef.value;
|
||||
if (jobInfo.value.isCollection) {
|
||||
$api.createRequest(`/app/job/collection/${encryptJobId}`, {}, 'DELETE').then((resData) => {
|
||||
|
||||
@@ -99,7 +99,7 @@ const startCreateResume = () => {
|
||||
|
||||
// 查看简历示例
|
||||
const viewExampleResume = () => {
|
||||
navTo('/pages/resume-guide/resume-example');
|
||||
navTo('/packageA/pages/resume-guide/resume-example');
|
||||
};
|
||||
</script>
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
import { inject, ref, reactive } from 'vue';
|
||||
import { onLoad, onShow } from '@dcloudio/uni-app';
|
||||
const { $api, navBack, navTo } = inject('globalFunction');
|
||||
import mTikTok from '@/components/TikTok/TikTok.vue';
|
||||
import mTikTok from '@/packageA/components/TikTok/TikTok.vue';
|
||||
import useUserStore from '@/stores/useUserStore';
|
||||
import { useRecommedIndexedDBStore } from '@/stores/useRecommedIndexedDBStore.js';
|
||||
const recommedIndexDb = useRecommedIndexedDBStore();
|
||||
|
||||
@@ -6,21 +6,21 @@ import {
|
||||
ref,
|
||||
toRaw
|
||||
} from 'vue'
|
||||
import baseDB from './BaseDBStore';
|
||||
import baseDB from '@/stores/BaseDBStore';
|
||||
import {
|
||||
msg,
|
||||
CloneDeep,
|
||||
$api,
|
||||
formatDate,
|
||||
insertSortData
|
||||
} from '../common/globalFunction';
|
||||
} from '@/common/globalFunction';
|
||||
import {
|
||||
UUID
|
||||
} from '../lib/uuid-min';
|
||||
import config from '../config';
|
||||
} from '@/lib/uuid-min';
|
||||
import config from '@/config';
|
||||
import {
|
||||
clearJobMoreMap
|
||||
} from '@/utils/markdownParser';
|
||||
} from '@/utils/jobMoreMap.js';
|
||||
|
||||
const useChatGroupDBStore = defineStore("messageGroup", () => {
|
||||
const tableName = ref('messageGroup')
|
||||
@@ -1,10 +1,10 @@
|
||||
import MarkdownIt from '@/lib/markdown-it.min.js';
|
||||
import hljs from "@/lib/highlight/highlight-uni.min.js";
|
||||
import parseHtml from '@/lib/html-parser.js';
|
||||
// import DOMPurify from '@/lib/dompurify@3.2.4es.js';
|
||||
import MarkdownIt from '@/packageA/lib/markdown-it.min.js';
|
||||
import hljs from '@/packageA/lib/highlight/highlight-uni.min.js';
|
||||
import parseHtml from '@/packageA/lib/html-parser.js';
|
||||
import { jobMoreMap } from '@/utils/jobMoreMap.js';
|
||||
|
||||
export { jobMoreMap } from '@/utils/jobMoreMap.js';
|
||||
export let codeDataList = []
|
||||
export let jobMoreMap = new Map()
|
||||
export let jobCardsList = []
|
||||
|
||||
const md = new MarkdownIt({
|
||||
@@ -141,10 +141,6 @@ function safeExtractJson(text) {
|
||||
return null;
|
||||
}
|
||||
|
||||
export function clearJobMoreMap() { // 切换对话清空
|
||||
jobMoreMap.clear()
|
||||
}
|
||||
|
||||
export function parseMarkdown(content) {
|
||||
if (!content) {
|
||||
return [] //处理特殊情况,比如网络异常导致的响应的 content 的值为空
|
||||
@@ -70,7 +70,7 @@
|
||||
import testHead from "@/packageCa/testReport/components/testHead.vue"
|
||||
import contrastBox from "@/packageCa/testReport/components/contrastBox.vue"
|
||||
import api from "@/packageCa/apiCa/testManage.js";
|
||||
import theme from '@/uni_modules/lime-echart/static/walden.json';
|
||||
import theme from '@/packageCa/uni_modules/lime-echart/static/walden.json';
|
||||
const echarts = require('../utilCa/echarts.min.js');
|
||||
import * as echarts1 from '../utilCa/echarts.min';
|
||||
// // 注册主题
|
||||
|
||||
@@ -240,9 +240,9 @@
|
||||
import testHead from "@/packageCa/testReport/components/testHead.vue"
|
||||
import contrastBox from "@/packageCa/testReport/components/contrastBox.vue"
|
||||
import api from "@/packageCa/apiCa/testManage.js";
|
||||
import theme from '@/uni_modules/lime-echart/static/walden.json';
|
||||
import theme from '@/packageCa/uni_modules/lime-echart/static/walden.json';
|
||||
const echarts = require('../utilCa/echarts.min.js');
|
||||
// import * as echarts from '@/uni_modules/lime-echart/static/echarts.min';
|
||||
// import * as echarts from '@/packageCa/uni_modules/lime-echart/static/echarts.min';
|
||||
// // 注册主题
|
||||
// echarts.registerTheme('theme', theme);
|
||||
|
||||
|
||||
@@ -110,9 +110,9 @@
|
||||
import contrastBox from "@/packageCa/testReport/components/contrastBox.vue"
|
||||
import api from "@/packageCa/apiCa/testManage.js"
|
||||
import wayData from "./multipleAbilityData.json";
|
||||
import theme from '@/uni_modules/lime-echart/static/walden.json';
|
||||
import theme from '@/packageCa/uni_modules/lime-echart/static/walden.json';
|
||||
const echarts = require('../utilCa/echarts.min.js');
|
||||
// import * as echarts from '@/uni_modules/lime-echart/static/echarts.min';
|
||||
// import * as echarts from '@/packageCa/uni_modules/lime-echart/static/echarts.min';
|
||||
// // 注册主题
|
||||
// echarts.registerTheme('theme', theme);
|
||||
export default {
|
||||
|
||||
@@ -397,9 +397,9 @@
|
||||
import contrastBox from "@/packageCa/testReport/components/contrastBox.vue"
|
||||
import opts from "./chartOpts.js"
|
||||
import api from "@/packageCa/apiCa/testManage.js";
|
||||
import theme from '@/uni_modules/lime-echart/static/walden.json';
|
||||
import theme from '@/packageCa/uni_modules/lime-echart/static/walden.json';
|
||||
const echarts = require('../utilCa/echarts.min.js');
|
||||
// import * as echarts from '@/uni_modules/lime-echart/static/echarts.min';
|
||||
// import * as echarts from '@/packageCa/uni_modules/lime-echart/static/echarts.min';
|
||||
// // 注册主题
|
||||
// echarts.registerTheme('theme', theme);
|
||||
export default {
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
import testHead from "@/packageCa/testReport/components/testHead.vue"
|
||||
import contrastBox from "@/packageCa/testReport/components/contrastBox.vue"
|
||||
import api from "@/packageCa/apiCa/testManage.js";
|
||||
import theme from '@/uni_modules/lime-echart/static/walden.json';
|
||||
import theme from '@/packageCa/uni_modules/lime-echart/static/walden.json';
|
||||
const echarts = require('../utilCa/echarts.min.js');
|
||||
// // 注册主题
|
||||
// echarts.registerTheme('theme', theme);
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
:style="canvasStyle"
|
||||
:webview-styles="webviewStyles"
|
||||
ref="webview"
|
||||
src="/uni_modules/lime-echart/static/uvue.html?v=1"
|
||||
src="/packageCa/uni_modules/lime-echart/static/uvue.html?v=1"
|
||||
@pagefinish="finished = true"
|
||||
@onPostMessage="onMessage"
|
||||
></web-view>
|
||||
@@ -19,7 +19,7 @@
|
||||
<script>
|
||||
// nvue 不需要引入
|
||||
// #ifdef VUE2
|
||||
import * as echarts from '@/uni_modules/lime-echart/static/echarts.min';
|
||||
import * as echarts from '@/packageCa/uni_modules/lime-echart/static/echarts.min';
|
||||
// #endif
|
||||
// #ifdef VUE3
|
||||
// #ifdef MP
|
||||
@@ -43,7 +43,7 @@
|
||||
this.$store.dispatch('LogOut').then((res) => {
|
||||
this.closeExitPopup()
|
||||
uni.navigateTo({
|
||||
url: '/pages/login/login-one'
|
||||
url: '/packageA/pages/login/wx-login'
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
@@ -674,7 +674,7 @@ const getCompanyInfo = () => {
|
||||
|
||||
// 跳转到企业信息详情页面
|
||||
const goToCompanyInfo = () => {
|
||||
navTo("/pages/mine/company-info");
|
||||
navTo("/packageA/pages/company-mine/company-info");
|
||||
};
|
||||
|
||||
// 组件初始化时加载数据
|
||||
@@ -870,22 +870,22 @@ function nextDetail(job) {
|
||||
function navToService(serviceType) {
|
||||
// 根据服务类型跳转到不同页面
|
||||
const serviceRoutes = {
|
||||
"service-guidance": "/pages/service/guidance",
|
||||
"public-recruitment": "/pages/service/public-recruitment",
|
||||
"service-guidance": "/packageA/pages/service/guidance",
|
||||
"public-recruitment": "/packageA/pages/service/public-recruitment",
|
||||
"resume-creation": "/packageA/pages/myResume/myResume",
|
||||
"labor-policy": "/pages/service/labor-policy",
|
||||
"skill-training": "/pages/service/skill-training",
|
||||
// 'skill-evaluation': '/pages/service/skill-evaluation',
|
||||
"question-bank": "/pages/service/question-bank",
|
||||
"quality-assessment": "/pages/service/quality-assessment",
|
||||
"labor-policy": "/packageA/pages/service/labor-policy",
|
||||
"skill-training": "/packageA/pages/service/skill-training",
|
||||
// 'skill-evaluation': '/packageA/pages/service/skill-evaluation',
|
||||
"question-bank": "/packageA/pages/service/question-bank",
|
||||
"quality-assessment": "/packageA/pages/service/quality-assessment",
|
||||
"ai-interview": "/packageA/pages/chat/chat",
|
||||
"job-search": "/pages/search/search",
|
||||
"career-planning": "/pages/service/career-planning",
|
||||
"salary-query": "/pages/service/salary-query",
|
||||
"company-info": "/pages/service/company-info",
|
||||
"interview-tips": "/pages/service/interview-tips",
|
||||
"employment-news": "/pages/service/employment-news",
|
||||
"more-services": "/pages/service/more-services",
|
||||
"career-planning": "/packageA/pages/service/career-planning",
|
||||
"salary-query": "/packageA/pages/service/salary-query",
|
||||
"company-info": "/packageA/pages/service/company-info",
|
||||
"interview-tips": "/packageA/pages/service/interview-tips",
|
||||
"employment-news": "/packageA/pages/service/employment-news",
|
||||
"more-services": "/packageA/pages/service/more-services",
|
||||
"skill-evaluation": "/packageB/train/index",
|
||||
};
|
||||
|
||||
|
||||
@@ -674,7 +674,7 @@ const getCompanyInfo = () => {
|
||||
|
||||
// 跳转到企业信息详情页面
|
||||
const goToCompanyInfo = () => {
|
||||
navTo("/pages/mine/company-info");
|
||||
navTo("/packageA/pages/company-mine/company-info");
|
||||
};
|
||||
|
||||
// 组件初始化时加载数据
|
||||
@@ -870,22 +870,22 @@ function nextDetail(job) {
|
||||
function navToService(serviceType) {
|
||||
// 根据服务类型跳转到不同页面
|
||||
const serviceRoutes = {
|
||||
"service-guidance": "/pages/service/guidance",
|
||||
"public-recruitment": "/pages/service/public-recruitment",
|
||||
"service-guidance": "/packageA/pages/service/guidance",
|
||||
"public-recruitment": "/packageA/pages/service/public-recruitment",
|
||||
"resume-creation": "/packageA/pages/myResume/myResume",
|
||||
"labor-policy": "/pages/service/labor-policy",
|
||||
"skill-training": "/pages/service/skill-training",
|
||||
// 'skill-evaluation': '/pages/service/skill-evaluation',
|
||||
"question-bank": "/pages/service/question-bank",
|
||||
"quality-assessment": "/pages/service/quality-assessment",
|
||||
"labor-policy": "/packageA/pages/service/labor-policy",
|
||||
"skill-training": "/packageA/pages/service/skill-training",
|
||||
// 'skill-evaluation': '/packageA/pages/service/skill-evaluation',
|
||||
"question-bank": "/packageA/pages/service/question-bank",
|
||||
"quality-assessment": "/packageA/pages/service/quality-assessment",
|
||||
"ai-interview": "/packageA/pages/chat/chat",
|
||||
"job-search": "/pages/search/search",
|
||||
"career-planning": "/pages/service/career-planning",
|
||||
"salary-query": "/pages/service/salary-query",
|
||||
"company-info": "/pages/service/company-info",
|
||||
"interview-tips": "/pages/service/interview-tips",
|
||||
"employment-news": "/pages/service/employment-news",
|
||||
"more-services": "/pages/service/more-services",
|
||||
"career-planning": "/packageA/pages/service/career-planning",
|
||||
"salary-query": "/packageA/pages/service/salary-query",
|
||||
"company-info": "/packageA/pages/service/company-info",
|
||||
"interview-tips": "/packageA/pages/service/interview-tips",
|
||||
"employment-news": "/packageA/pages/service/employment-news",
|
||||
"more-services": "/packageA/pages/service/more-services",
|
||||
"skill-evaluation": "/packageB/train/index",
|
||||
};
|
||||
|
||||
|
||||
189
pages.json
189
pages.json
@@ -9,12 +9,6 @@
|
||||
// #endif
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/city-select/index",
|
||||
"style": {
|
||||
"navigationBarTitleText": "选择城市"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/mine/mine",
|
||||
"style": {
|
||||
@@ -27,99 +21,11 @@
|
||||
"navigationBarTitleText": "消息"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/msglog/messageDetail",
|
||||
"style": {
|
||||
"navigationBarTitleText": "消息详情"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/careerfair/careerfair",
|
||||
"style": {
|
||||
"navigationBarTitleText": "招聘会"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/search/search",
|
||||
"style": {
|
||||
"navigationBarTitleText": "搜索职位"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/service/career-planning",
|
||||
"style": {
|
||||
"navigationBarTitleText": "职业规划推荐",
|
||||
"navigationBarTitleTextSize": "30rpx",
|
||||
"navigationStyle": "custom"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/mine/company-mine",
|
||||
"style": {
|
||||
"navigationBarTitleText": "我的"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/mine/company-info",
|
||||
"style": {
|
||||
"navigationBarTitleText": "企业信息"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/mine/edit-company-contacts",
|
||||
"style": {
|
||||
"navigationBarTitleText": "编辑联系人"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/login/h5-login",
|
||||
"style": {
|
||||
"navigationBarTitleText": "登录",
|
||||
"navigationStyle": "custom"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/login/id-card-login",
|
||||
"style": {
|
||||
"navigationBarTitleText": "社保登录",
|
||||
"navigationStyle": "custom"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/login/wx-login",
|
||||
"style": {
|
||||
"navigationBarTitleText": "登录"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/login/sms-verify",
|
||||
"style": {
|
||||
"navigationBarTitleText": "短信验证"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/resume-guide/resume-guide",
|
||||
"style": {
|
||||
"navigationBarTitleText": "简历制作指导"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/resume-guide/resume-example",
|
||||
"style": {
|
||||
"navigationBarTitleText": "简历示例"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/service/salary-info",
|
||||
"style": {
|
||||
"navigationBarTitleText": "薪酬信息"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/service/guidance",
|
||||
"style": {
|
||||
"navigationBarTitleText": "服务指导"
|
||||
}
|
||||
}
|
||||
],
|
||||
"subpackages": [
|
||||
@@ -352,6 +258,100 @@
|
||||
"navigationBarTextStyle": "white",
|
||||
"enablePullDownRefresh": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/careerfair/careerfair",
|
||||
"style": {
|
||||
"navigationBarTitleText": "招聘会"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/msglog/messageDetail",
|
||||
"style": {
|
||||
"navigationBarTitleText": "消息详情"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/city-select/index",
|
||||
"style": {
|
||||
"navigationBarTitleText": "选择城市"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/login/h5-login",
|
||||
"style": {
|
||||
"navigationBarTitleText": "登录",
|
||||
"navigationStyle": "custom"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/login/id-card-login",
|
||||
"style": {
|
||||
"navigationBarTitleText": "社保登录",
|
||||
"navigationStyle": "custom"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/login/wx-login",
|
||||
"style": {
|
||||
"navigationBarTitleText": "登录"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/login/sms-verify",
|
||||
"style": {
|
||||
"navigationBarTitleText": "短信验证"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/resume-guide/resume-guide",
|
||||
"style": {
|
||||
"navigationBarTitleText": "简历制作指导"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/resume-guide/resume-example",
|
||||
"style": {
|
||||
"navigationBarTitleText": "简历示例"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/service/career-planning",
|
||||
"style": {
|
||||
"navigationBarTitleText": "职业规划推荐",
|
||||
"navigationBarTitleTextSize": "30rpx",
|
||||
"navigationStyle": "custom"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/service/salary-info",
|
||||
"style": {
|
||||
"navigationBarTitleText": "薪酬信息"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/service/guidance",
|
||||
"style": {
|
||||
"navigationBarTitleText": "服务指导"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/company-mine/company-mine",
|
||||
"style": {
|
||||
"navigationBarTitleText": "我的"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/company-mine/company-info",
|
||||
"style": {
|
||||
"navigationBarTitleText": "企业信息"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/company-mine/edit-company-contacts",
|
||||
"style": {
|
||||
"navigationBarTitleText": "编辑联系人"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -922,6 +922,7 @@
|
||||
"^AppLayout$": "@/components/AppLayout/AppLayout.vue",
|
||||
"^CustomTabBar$": "@/components/CustomTabBar/CustomTabBar.vue",
|
||||
"^UserTypeSwitcher$": "@/components/UserTypeSwitcher/UserTypeSwitcher.vue",
|
||||
"^l-echart$": "@/packageCa/uni_modules/lime-echart/components/l-echart/l-echart.vue",
|
||||
"^CollapseTransition$": "@/components/CollapseTransition/CollapseTransition.vue",
|
||||
"^NoBouncePage$": "@/components/NoBouncePage/NoBouncePage.vue",
|
||||
"^TikTok$": "@/components/TikTok/TikTok.vue",
|
||||
|
||||
BIN
pages/.DS_Store
vendored
BIN
pages/.DS_Store
vendored
Binary file not shown.
@@ -78,7 +78,7 @@
|
||||
<!-- <view class="h5-action-btn press-button" @click="handleH5SalaryClick">
|
||||
<view class="btn-text">薪酬信息</view>
|
||||
</view> -->
|
||||
<view class="h5-action-btn press-button" @click="handelGoResumeGuide()">
|
||||
<view class="h5-action-btn press-button" @click="handleServiceClick('resume-creation')">
|
||||
<view class="btn-text">简历指导</view>
|
||||
</view>
|
||||
|
||||
@@ -262,7 +262,7 @@
|
||||
<uni-icons class="iconsearch" color="#666D7F" type="plusempty" size="18"></uni-icons>
|
||||
<text>添加</text>
|
||||
</view>
|
||||
<view class="jobs-add button-click" @click="navTo('/pages/city-select/index')" style="padding-right:0;">
|
||||
<view class="jobs-add button-click" @click="navTo('/packageA/pages/city-select/index')" style="padding-right:0;">
|
||||
<text>{{ selectedCity.name || '地区' }}</text>
|
||||
<image class="right-sx" :class="{ active: showFilter }" src="@/static/icon/shaixun.png"></image>
|
||||
</view>
|
||||
@@ -757,7 +757,7 @@ const helpTaskClick = () =>{
|
||||
//招聘会模块跳转
|
||||
const handleJobFairClick = () => {
|
||||
if (checkLogin()) {
|
||||
navTo('/pages/careerfair/careerfair');
|
||||
navTo('/packageA/pages/careerfair/careerfair');
|
||||
}
|
||||
};
|
||||
const list = ref([]);
|
||||
@@ -851,7 +851,7 @@ const getCompanyInfo = () => {
|
||||
|
||||
// 跳转到企业信息详情页面
|
||||
const goToCompanyInfo = () => {
|
||||
navTo('/pages/mine/company-info');
|
||||
navTo('/packageA/pages/company-mine/company-info');
|
||||
};
|
||||
|
||||
|
||||
@@ -861,7 +861,7 @@ onMounted(() => {
|
||||
getCompanyInfo();
|
||||
// pageNull.value = 0;
|
||||
uni.$on('showLoginModal', () => {
|
||||
uni.navigateTo({ url: '/pages/login/wx-login' });
|
||||
uni.navigateTo({ url: '/packageA/pages/login/wx-login' });
|
||||
pageNull.value = 0;
|
||||
});
|
||||
});
|
||||
@@ -875,7 +875,7 @@ onMounted(() => {
|
||||
// 绑定新的监听
|
||||
uni.$on('showLoginModal', () => {
|
||||
console.log('收到showLoginModal事件,打开登录弹窗');
|
||||
uni.navigateTo({ url: '/pages/login/wx-login' });
|
||||
uni.navigateTo({ url: '/packageA/pages/login/wx-login' });
|
||||
pageNull.value = 0;
|
||||
});
|
||||
|
||||
@@ -937,18 +937,8 @@ const handleLoginSuccess = () => {
|
||||
// onLoad 函数已移至下方,包含筛选参数处理
|
||||
|
||||
// 处理附近工作点击
|
||||
const handleNearbyClick = (options ) => {
|
||||
// #ifdef MP-WEIXIN
|
||||
if (checkLogin()) {
|
||||
navTo('/packageA/pages/nearby/nearby');
|
||||
}
|
||||
// #endif
|
||||
// #ifdef H5
|
||||
const token = options.token || uni.getStorageSync('zkr-token');
|
||||
if (token) {
|
||||
navTo('/packageA/pages/nearby/nearby');
|
||||
}
|
||||
// #endif
|
||||
const handleNearbyClick = () => {
|
||||
navTo('/packageA/pages/nearby/nearby');
|
||||
};
|
||||
const handleNoticeClick = () =>{
|
||||
if (checkLogin()) {
|
||||
@@ -976,20 +966,12 @@ function handleInstitutionClick(type){
|
||||
}
|
||||
// 处理服务功能点击
|
||||
const handleServiceClick = (serviceType) => {
|
||||
if (checkLogin()) {
|
||||
const noLoginRequired = ['resume-creation'];
|
||||
if (noLoginRequired.includes(serviceType) || checkLogin()) {
|
||||
navToService(serviceType);
|
||||
}
|
||||
};
|
||||
// H5的简历指导跳转
|
||||
const handelGoResumeGuide = () => {
|
||||
const token = uni.getStorageSync('zkr-token');
|
||||
// myToken.value = token;
|
||||
if (token) {
|
||||
// navTo()
|
||||
navTo('/pages/resume-guide/resume-guide');
|
||||
}
|
||||
|
||||
}
|
||||
// 处理直播按钮点击
|
||||
const handleLiveClick = () => {
|
||||
// #ifdef MP-WEIXIN
|
||||
@@ -1021,7 +1003,7 @@ const handleLiveClick = () => {
|
||||
|
||||
// 处理薪酬信息点击
|
||||
const handleSalaryInfoClick = () => {
|
||||
navTo('/pages/service/salary-info');
|
||||
navTo('/packageA/pages/service/salary-info');
|
||||
};
|
||||
|
||||
const handleH5SalaryClick = () => {
|
||||
@@ -1108,23 +1090,23 @@ function nextDetail(job) {
|
||||
function navToService(serviceType) {
|
||||
// 根据服务类型跳转到不同页面
|
||||
const serviceRoutes = {
|
||||
'service-guidance': '/pages/service/guidance',
|
||||
'public-recruitment': '/pages/service/public-recruitment',
|
||||
'resume-creation': '/pages/resume-guide/resume-guide',
|
||||
'service-guidance': '/packageA/pages/service/guidance',
|
||||
'public-recruitment': '/packageA/pages/service/public-recruitment',
|
||||
'resume-creation': '/packageA/pages/resume-guide/resume-guide',
|
||||
'labor-policy': '/packageRc/pages/policy/policyList',
|
||||
'skill-training': '/packageB/train/video/videoList',
|
||||
'skill-evaluation': '/packageB/train/index',
|
||||
// 'skill-evaluation': '/pages/service/skill-evaluation',
|
||||
'question-bank': '/pages/service/question-bank',
|
||||
// 'skill-evaluation': '/packageA/pages/service/skill-evaluation',
|
||||
'question-bank': '/packageA/pages/service/question-bank',
|
||||
// 'quality-assessment': '/packageCa/search/search',
|
||||
// 'ai-interview': '/packageA/pages/chat/chat',
|
||||
'job-search': '/pages/search/search',
|
||||
'career-planning': '/pages/service/career-planning',
|
||||
'salary-query': '/pages/service/salary-query',
|
||||
'company-info': '/pages/service/company-info',
|
||||
'interview-tips': '/pages/service/interview-tips',
|
||||
'employment-news': '/pages/service/employment-news',
|
||||
'more-services': '/pages/service/more-services',
|
||||
'career-planning': '/packageA/pages/service/career-planning',
|
||||
'salary-query': '/packageA/pages/service/salary-query',
|
||||
'company-info': '/packageA/pages/service/company-info',
|
||||
'interview-tips': '/packageA/pages/service/interview-tips',
|
||||
'employment-news': '/packageA/pages/service/employment-news',
|
||||
'more-services': '/packageA/pages/service/more-services',
|
||||
};
|
||||
if((serviceType=='skill-training'||serviceType=='skill-evaluation')&&!uni.getStorageSync('userInfo').idCard){
|
||||
$api.msg('请先完善信息');
|
||||
|
||||
@@ -242,7 +242,7 @@ onMounted(() => {
|
||||
// 这里可以显示微信登录弹窗
|
||||
// 跳转到微信登录页面
|
||||
uni.navigateTo({
|
||||
url: '/pages/login/wx-login'
|
||||
url: '/packageA/pages/login/wx-login'
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -274,7 +274,7 @@ function getUserstatistics() {
|
||||
function seeDetail() {
|
||||
if (userType === 0) {
|
||||
// 企业用户跳转到企业信息页面
|
||||
navTo('/pages/mine/company-info');
|
||||
navTo('/packageA/pages/company-mine/company-info');
|
||||
} else {
|
||||
// 求职者用户跳转到简历页面
|
||||
navTo('/packageA/pages/myResume/myResume');
|
||||
|
||||
@@ -70,7 +70,7 @@ onMounted(() => {
|
||||
|
||||
// 监听退出登录事件,显示微信登录弹窗
|
||||
uni.$on('showLoginModal', () => {
|
||||
uni.navigateTo({ url: '/pages/login/wx-login' });
|
||||
uni.navigateTo({ url: '/packageA/pages/login/wx-login' });
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -76,7 +76,7 @@ async function loadData() {
|
||||
|
||||
function seeDetail(item, index) {
|
||||
uni.setStorageSync('currentMessageDetail', item);
|
||||
navTo('/pages/msglog/messageDetail');
|
||||
navTo('/packageA/pages/msglog/messageDetail');
|
||||
}
|
||||
|
||||
defineExpose({ loadData });
|
||||
|
||||
@@ -74,7 +74,7 @@ async function loadData() {
|
||||
|
||||
function seeDetail(item) {
|
||||
uni.setStorageSync('currentMessageDetail', item);
|
||||
navTo('/pages/msglog/messageDetail');
|
||||
navTo('/packageA/pages/msglog/messageDetail');
|
||||
}
|
||||
|
||||
defineExpose({ loadData });
|
||||
|
||||
@@ -76,13 +76,13 @@ const getCurrentTypeLabel = () => {
|
||||
|
||||
const goToCompanyMine = () => {
|
||||
uni.navigateTo({
|
||||
url: '/pages/mine/company-mine'
|
||||
url: '/packageA/pages/company-mine/company-mine'
|
||||
});
|
||||
};
|
||||
|
||||
const goToCompanyInfo = () => {
|
||||
uni.navigateTo({
|
||||
url: '/pages/mine/company-info'
|
||||
url: '/packageA/pages/company-mine/company-info'
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
@@ -26,7 +26,20 @@
|
||||
"compileType": "miniprogram",
|
||||
"simulatorPluginLibVersion": {},
|
||||
"packOptions": {
|
||||
"ignore": [],
|
||||
"ignore": [
|
||||
{
|
||||
"type": "suffix",
|
||||
"value": ".DS_Store"
|
||||
},
|
||||
{
|
||||
"type": "file",
|
||||
"value": "static/iconfont/demo_index.html"
|
||||
},
|
||||
{
|
||||
"type": "file",
|
||||
"value": "static/iconfont/demo.css"
|
||||
}
|
||||
],
|
||||
"include": []
|
||||
},
|
||||
"appid": "wx4aa34488b965a331",
|
||||
|
||||
BIN
static/.DS_Store
vendored
BIN
static/.DS_Store
vendored
Binary file not shown.
BIN
static/font/.DS_Store
vendored
BIN
static/font/.DS_Store
vendored
Binary file not shown.
BIN
static/gif/.DS_Store
vendored
BIN
static/gif/.DS_Store
vendored
Binary file not shown.
BIN
static/icon/.DS_Store
vendored
BIN
static/icon/.DS_Store
vendored
Binary file not shown.
@@ -1,539 +0,0 @@
|
||||
/* Logo 字体 */
|
||||
@font-face {
|
||||
font-family: "iconfont logo";
|
||||
src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834');
|
||||
src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'),
|
||||
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'),
|
||||
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'),
|
||||
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg');
|
||||
}
|
||||
|
||||
.logo {
|
||||
font-family: "iconfont logo";
|
||||
font-size: 160px;
|
||||
font-style: normal;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
/* tabs */
|
||||
.nav-tabs {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.nav-tabs .nav-more {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
height: 42px;
|
||||
line-height: 42px;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
#tabs {
|
||||
border-bottom: 1px solid #eee;
|
||||
}
|
||||
|
||||
#tabs li {
|
||||
cursor: pointer;
|
||||
width: 100px;
|
||||
height: 40px;
|
||||
line-height: 40px;
|
||||
text-align: center;
|
||||
font-size: 16px;
|
||||
border-bottom: 2px solid transparent;
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
margin-bottom: -1px;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
|
||||
#tabs .active {
|
||||
border-bottom-color: #f00;
|
||||
color: #222;
|
||||
}
|
||||
|
||||
.tab-container .content {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* 页面布局 */
|
||||
.main {
|
||||
padding: 30px 100px;
|
||||
width: 960px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.main .logo {
|
||||
color: #333;
|
||||
text-align: left;
|
||||
margin-bottom: 30px;
|
||||
line-height: 1;
|
||||
height: 110px;
|
||||
margin-top: -50px;
|
||||
overflow: hidden;
|
||||
*zoom: 1;
|
||||
}
|
||||
|
||||
.main .logo a {
|
||||
font-size: 160px;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.helps {
|
||||
margin-top: 40px;
|
||||
}
|
||||
|
||||
.helps pre {
|
||||
padding: 20px;
|
||||
margin: 10px 0;
|
||||
border: solid 1px #e7e1cd;
|
||||
background-color: #fffdef;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.icon_lists {
|
||||
width: 100% !important;
|
||||
overflow: hidden;
|
||||
*zoom: 1;
|
||||
}
|
||||
|
||||
.icon_lists li {
|
||||
width: 100px;
|
||||
margin-bottom: 10px;
|
||||
margin-right: 20px;
|
||||
text-align: center;
|
||||
list-style: none !important;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.icon_lists li .code-name {
|
||||
line-height: 1.2;
|
||||
}
|
||||
|
||||
.icon_lists .icon {
|
||||
display: block;
|
||||
height: 100px;
|
||||
line-height: 100px;
|
||||
font-size: 42px;
|
||||
margin: 10px auto;
|
||||
color: #333;
|
||||
-webkit-transition: font-size 0.25s linear, width 0.25s linear;
|
||||
-moz-transition: font-size 0.25s linear, width 0.25s linear;
|
||||
transition: font-size 0.25s linear, width 0.25s linear;
|
||||
}
|
||||
|
||||
.icon_lists .icon:hover {
|
||||
font-size: 100px;
|
||||
}
|
||||
|
||||
.icon_lists .svg-icon {
|
||||
/* 通过设置 font-size 来改变图标大小 */
|
||||
width: 1em;
|
||||
/* 图标和文字相邻时,垂直对齐 */
|
||||
vertical-align: -0.15em;
|
||||
/* 通过设置 color 来改变 SVG 的颜色/fill */
|
||||
fill: currentColor;
|
||||
/* path 和 stroke 溢出 viewBox 部分在 IE 下会显示
|
||||
normalize.css 中也包含这行 */
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.icon_lists li .name,
|
||||
.icon_lists li .code-name {
|
||||
color: #666;
|
||||
}
|
||||
|
||||
/* markdown 样式 */
|
||||
.markdown {
|
||||
color: #666;
|
||||
font-size: 14px;
|
||||
line-height: 1.8;
|
||||
}
|
||||
|
||||
.highlight {
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.markdown img {
|
||||
vertical-align: middle;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.markdown h1 {
|
||||
color: #404040;
|
||||
font-weight: 500;
|
||||
line-height: 40px;
|
||||
margin-bottom: 24px;
|
||||
}
|
||||
|
||||
.markdown h2,
|
||||
.markdown h3,
|
||||
.markdown h4,
|
||||
.markdown h5,
|
||||
.markdown h6 {
|
||||
color: #404040;
|
||||
margin: 1.6em 0 0.6em 0;
|
||||
font-weight: 500;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.markdown h1 {
|
||||
font-size: 28px;
|
||||
}
|
||||
|
||||
.markdown h2 {
|
||||
font-size: 22px;
|
||||
}
|
||||
|
||||
.markdown h3 {
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.markdown h4 {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.markdown h5 {
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.markdown h6 {
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.markdown hr {
|
||||
height: 1px;
|
||||
border: 0;
|
||||
background: #e9e9e9;
|
||||
margin: 16px 0;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.markdown p {
|
||||
margin: 1em 0;
|
||||
}
|
||||
|
||||
.markdown>p,
|
||||
.markdown>blockquote,
|
||||
.markdown>.highlight,
|
||||
.markdown>ol,
|
||||
.markdown>ul {
|
||||
width: 80%;
|
||||
}
|
||||
|
||||
.markdown ul>li {
|
||||
list-style: circle;
|
||||
}
|
||||
|
||||
.markdown>ul li,
|
||||
.markdown blockquote ul>li {
|
||||
margin-left: 20px;
|
||||
padding-left: 4px;
|
||||
}
|
||||
|
||||
.markdown>ul li p,
|
||||
.markdown>ol li p {
|
||||
margin: 0.6em 0;
|
||||
}
|
||||
|
||||
.markdown ol>li {
|
||||
list-style: decimal;
|
||||
}
|
||||
|
||||
.markdown>ol li,
|
||||
.markdown blockquote ol>li {
|
||||
margin-left: 20px;
|
||||
padding-left: 4px;
|
||||
}
|
||||
|
||||
.markdown code {
|
||||
margin: 0 3px;
|
||||
padding: 0 5px;
|
||||
background: #eee;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.markdown strong,
|
||||
.markdown b {
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.markdown>table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0px;
|
||||
empty-cells: show;
|
||||
border: 1px solid #e9e9e9;
|
||||
width: 95%;
|
||||
margin-bottom: 24px;
|
||||
}
|
||||
|
||||
.markdown>table th {
|
||||
white-space: nowrap;
|
||||
color: #333;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.markdown>table th,
|
||||
.markdown>table td {
|
||||
border: 1px solid #e9e9e9;
|
||||
padding: 8px 16px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.markdown>table th {
|
||||
background: #F7F7F7;
|
||||
}
|
||||
|
||||
.markdown blockquote {
|
||||
font-size: 90%;
|
||||
color: #999;
|
||||
border-left: 4px solid #e9e9e9;
|
||||
padding-left: 0.8em;
|
||||
margin: 1em 0;
|
||||
}
|
||||
|
||||
.markdown blockquote p {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.markdown .anchor {
|
||||
opacity: 0;
|
||||
transition: opacity 0.3s ease;
|
||||
margin-left: 8px;
|
||||
}
|
||||
|
||||
.markdown .waiting {
|
||||
color: #ccc;
|
||||
}
|
||||
|
||||
.markdown h1:hover .anchor,
|
||||
.markdown h2:hover .anchor,
|
||||
.markdown h3:hover .anchor,
|
||||
.markdown h4:hover .anchor,
|
||||
.markdown h5:hover .anchor,
|
||||
.markdown h6:hover .anchor {
|
||||
opacity: 1;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.markdown>br,
|
||||
.markdown>p>br {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
|
||||
.hljs {
|
||||
display: block;
|
||||
background: white;
|
||||
padding: 0.5em;
|
||||
color: #333333;
|
||||
overflow-x: auto;
|
||||
}
|
||||
|
||||
.hljs-comment,
|
||||
.hljs-meta {
|
||||
color: #969896;
|
||||
}
|
||||
|
||||
.hljs-string,
|
||||
.hljs-variable,
|
||||
.hljs-template-variable,
|
||||
.hljs-strong,
|
||||
.hljs-emphasis,
|
||||
.hljs-quote {
|
||||
color: #df5000;
|
||||
}
|
||||
|
||||
.hljs-keyword,
|
||||
.hljs-selector-tag,
|
||||
.hljs-type {
|
||||
color: #a71d5d;
|
||||
}
|
||||
|
||||
.hljs-literal,
|
||||
.hljs-symbol,
|
||||
.hljs-bullet,
|
||||
.hljs-attribute {
|
||||
color: #0086b3;
|
||||
}
|
||||
|
||||
.hljs-section,
|
||||
.hljs-name {
|
||||
color: #63a35c;
|
||||
}
|
||||
|
||||
.hljs-tag {
|
||||
color: #333333;
|
||||
}
|
||||
|
||||
.hljs-title,
|
||||
.hljs-attr,
|
||||
.hljs-selector-id,
|
||||
.hljs-selector-class,
|
||||
.hljs-selector-attr,
|
||||
.hljs-selector-pseudo {
|
||||
color: #795da3;
|
||||
}
|
||||
|
||||
.hljs-addition {
|
||||
color: #55a532;
|
||||
background-color: #eaffea;
|
||||
}
|
||||
|
||||
.hljs-deletion {
|
||||
color: #bd2c00;
|
||||
background-color: #ffecec;
|
||||
}
|
||||
|
||||
.hljs-link {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
/* 代码高亮 */
|
||||
/* PrismJS 1.15.0
|
||||
https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */
|
||||
/**
|
||||
* prism.js default theme for JavaScript, CSS and HTML
|
||||
* Based on dabblet (http://dabblet.com)
|
||||
* @author Lea Verou
|
||||
*/
|
||||
code[class*="language-"],
|
||||
pre[class*="language-"] {
|
||||
color: black;
|
||||
background: none;
|
||||
text-shadow: 0 1px white;
|
||||
font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
|
||||
text-align: left;
|
||||
white-space: pre;
|
||||
word-spacing: normal;
|
||||
word-break: normal;
|
||||
word-wrap: normal;
|
||||
line-height: 1.5;
|
||||
|
||||
-moz-tab-size: 4;
|
||||
-o-tab-size: 4;
|
||||
tab-size: 4;
|
||||
|
||||
-webkit-hyphens: none;
|
||||
-moz-hyphens: none;
|
||||
-ms-hyphens: none;
|
||||
hyphens: none;
|
||||
}
|
||||
|
||||
pre[class*="language-"]::-moz-selection,
|
||||
pre[class*="language-"] ::-moz-selection,
|
||||
code[class*="language-"]::-moz-selection,
|
||||
code[class*="language-"] ::-moz-selection {
|
||||
text-shadow: none;
|
||||
background: #b3d4fc;
|
||||
}
|
||||
|
||||
pre[class*="language-"]::selection,
|
||||
pre[class*="language-"] ::selection,
|
||||
code[class*="language-"]::selection,
|
||||
code[class*="language-"] ::selection {
|
||||
text-shadow: none;
|
||||
background: #b3d4fc;
|
||||
}
|
||||
|
||||
@media print {
|
||||
|
||||
code[class*="language-"],
|
||||
pre[class*="language-"] {
|
||||
text-shadow: none;
|
||||
}
|
||||
}
|
||||
|
||||
/* Code blocks */
|
||||
pre[class*="language-"] {
|
||||
padding: 1em;
|
||||
margin: .5em 0;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
:not(pre)>code[class*="language-"],
|
||||
pre[class*="language-"] {
|
||||
background: #f5f2f0;
|
||||
}
|
||||
|
||||
/* Inline code */
|
||||
:not(pre)>code[class*="language-"] {
|
||||
padding: .1em;
|
||||
border-radius: .3em;
|
||||
white-space: normal;
|
||||
}
|
||||
|
||||
.token.comment,
|
||||
.token.prolog,
|
||||
.token.doctype,
|
||||
.token.cdata {
|
||||
color: slategray;
|
||||
}
|
||||
|
||||
.token.punctuation {
|
||||
color: #999;
|
||||
}
|
||||
|
||||
.namespace {
|
||||
opacity: .7;
|
||||
}
|
||||
|
||||
.token.property,
|
||||
.token.tag,
|
||||
.token.boolean,
|
||||
.token.number,
|
||||
.token.constant,
|
||||
.token.symbol,
|
||||
.token.deleted {
|
||||
color: #905;
|
||||
}
|
||||
|
||||
.token.selector,
|
||||
.token.attr-name,
|
||||
.token.string,
|
||||
.token.char,
|
||||
.token.builtin,
|
||||
.token.inserted {
|
||||
color: #690;
|
||||
}
|
||||
|
||||
.token.operator,
|
||||
.token.entity,
|
||||
.token.url,
|
||||
.language-css .token.string,
|
||||
.style .token.string {
|
||||
color: #9a6e3a;
|
||||
background: hsla(0, 0%, 100%, .5);
|
||||
}
|
||||
|
||||
.token.atrule,
|
||||
.token.attr-value,
|
||||
.token.keyword {
|
||||
color: #07a;
|
||||
}
|
||||
|
||||
.token.function,
|
||||
.token.class-name {
|
||||
color: #DD4A68;
|
||||
}
|
||||
|
||||
.token.regex,
|
||||
.token.important,
|
||||
.token.variable {
|
||||
color: #e90;
|
||||
}
|
||||
|
||||
.token.important,
|
||||
.token.bold {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.token.italic {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.token.entity {
|
||||
cursor: help;
|
||||
}
|
||||
@@ -1,418 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8"/>
|
||||
<title>iconfont Demo</title>
|
||||
<link rel="shortcut icon" href="//img.alicdn.com/imgextra/i4/O1CN01Z5paLz1O0zuCC7osS_!!6000000001644-55-tps-83-82.svg" type="image/x-icon"/>
|
||||
<link rel="icon" type="image/svg+xml" href="//img.alicdn.com/imgextra/i4/O1CN01Z5paLz1O0zuCC7osS_!!6000000001644-55-tps-83-82.svg"/>
|
||||
<link rel="stylesheet" href="https://g.alicdn.com/thx/cube/1.3.2/cube.min.css">
|
||||
<link rel="stylesheet" href="demo.css">
|
||||
<link rel="stylesheet" href="iconfont.css">
|
||||
<script src="iconfont.js"></script>
|
||||
<!-- jQuery -->
|
||||
<script src="https://a1.alicdn.com/oss/uploads/2018/12/26/7bfddb60-08e8-11e9-9b04-53e73bb6408b.js"></script>
|
||||
<!-- 代码高亮 -->
|
||||
<script src="https://a1.alicdn.com/oss/uploads/2018/12/26/a3f714d0-08e6-11e9-8a15-ebf944d7534c.js"></script>
|
||||
<style>
|
||||
.main .logo {
|
||||
margin-top: 0;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.main .logo a {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.main .logo .sub-title {
|
||||
margin-left: 0.5em;
|
||||
font-size: 22px;
|
||||
color: #fff;
|
||||
background: linear-gradient(-45deg, #3967FF, #B500FE);
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="main">
|
||||
<h1 class="logo"><a href="https://www.iconfont.cn/" title="iconfont 首页" target="_blank">
|
||||
<img width="200" src="https://img.alicdn.com/imgextra/i3/O1CN01Mn65HV1FfSEzR6DKv_!!6000000000514-55-tps-228-59.svg">
|
||||
|
||||
</a></h1>
|
||||
<div class="nav-tabs">
|
||||
<ul id="tabs" class="dib-box">
|
||||
<li class="dib active"><span>Unicode</span></li>
|
||||
<li class="dib"><span>Font class</span></li>
|
||||
<li class="dib"><span>Symbol</span></li>
|
||||
</ul>
|
||||
|
||||
<a href="https://www.iconfont.cn/manage/index?manage_type=myprojects&projectId=5044714" target="_blank" class="nav-more">查看项目</a>
|
||||
|
||||
</div>
|
||||
<div class="tab-container">
|
||||
<div class="content unicode" style="display: block;">
|
||||
<ul class="icon_lists dib-box">
|
||||
|
||||
<li class="dib">
|
||||
<span class="icon iconfont"></span>
|
||||
<div class="name">gxbys</div>
|
||||
<div class="code-name">&#xe63f;</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<span class="icon iconfont"></span>
|
||||
<div class="name">个人中心</div>
|
||||
<div class="code-name">&#xe60f;</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<span class="icon iconfont"></span>
|
||||
<div class="name">素质测评</div>
|
||||
<div class="code-name">&#xe607;</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<span class="icon iconfont"></span>
|
||||
<div class="name">智能AI</div>
|
||||
<div class="code-name">&#xe887;</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<span class="icon iconfont"></span>
|
||||
<div class="name">技能培训</div>
|
||||
<div class="code-name">&#xe614;</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<span class="icon iconfont"></span>
|
||||
<div class="name">政策</div>
|
||||
<div class="code-name">&#xe61d;</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<span class="icon iconfont"></span>
|
||||
<div class="name">题库和考试</div>
|
||||
<div class="code-name">&#xe67f;</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<span class="icon iconfont"></span>
|
||||
<div class="name">技能评价</div>
|
||||
<div class="code-name">&#xe723;</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<span class="icon iconfont"></span>
|
||||
<div class="name">简历</div>
|
||||
<div class="code-name">&#xe61c;</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<span class="icon iconfont"></span>
|
||||
<div class="name">政府楼</div>
|
||||
<div class="code-name">&#xe7e9;</div>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
<div class="article markdown">
|
||||
<h2 id="unicode-">Unicode 引用</h2>
|
||||
<hr>
|
||||
|
||||
<p>Unicode 是字体在网页端最原始的应用方式,特点是:</p>
|
||||
<ul>
|
||||
<li>支持按字体的方式去动态调整图标大小,颜色等等。</li>
|
||||
<li>默认情况下不支持多色,直接添加多色图标会自动去色。</li>
|
||||
</ul>
|
||||
<blockquote>
|
||||
<p>注意:新版 iconfont 支持两种方式引用多色图标:SVG symbol 引用方式和彩色字体图标模式。(使用彩色字体图标需要在「编辑项目」中开启「彩色」选项后并重新生成。)</p>
|
||||
</blockquote>
|
||||
<p>Unicode 使用步骤如下:</p>
|
||||
<h3 id="-font-face">第一步:拷贝项目下面生成的 <code>@font-face</code></h3>
|
||||
<pre><code class="language-css"
|
||||
>@font-face {
|
||||
font-family: 'iconfont';
|
||||
src: url('iconfont.woff2?t=1761826914823') format('woff2'),
|
||||
url('iconfont.woff?t=1761826914823') format('woff'),
|
||||
url('iconfont.ttf?t=1761826914823') format('truetype');
|
||||
}
|
||||
</code></pre>
|
||||
<h3 id="-iconfont-">第二步:定义使用 iconfont 的样式</h3>
|
||||
<pre><code class="language-css"
|
||||
>.iconfont {
|
||||
font-family: "iconfont" !important;
|
||||
font-size: 16px;
|
||||
font-style: normal;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
</code></pre>
|
||||
<h3 id="-">第三步:挑选相应图标并获取字体编码,应用于页面</h3>
|
||||
<pre>
|
||||
<code class="language-html"
|
||||
><span class="iconfont">&#x33;</span>
|
||||
</code></pre>
|
||||
<blockquote>
|
||||
<p>"iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。</p>
|
||||
</blockquote>
|
||||
</div>
|
||||
</div>
|
||||
<div class="content font-class">
|
||||
<ul class="icon_lists dib-box">
|
||||
|
||||
<li class="dib">
|
||||
<span class="icon iconfont icon-Graduation-simple-"></span>
|
||||
<div class="name">
|
||||
gxbys
|
||||
</div>
|
||||
<div class="code-name">.icon-Graduation-simple-
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<span class="icon iconfont icon-gerenzhongxin"></span>
|
||||
<div class="name">
|
||||
个人中心
|
||||
</div>
|
||||
<div class="code-name">.icon-gerenzhongxin
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<span class="icon iconfont icon-suzhicepingtiku"></span>
|
||||
<div class="name">
|
||||
素质测评
|
||||
</div>
|
||||
<div class="code-name">.icon-suzhicepingtiku
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<span class="icon iconfont icon-ai"></span>
|
||||
<div class="name">
|
||||
智能AI
|
||||
</div>
|
||||
<div class="code-name">.icon-ai
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<span class="icon iconfont icon-jinengpeixun"></span>
|
||||
<div class="name">
|
||||
技能培训
|
||||
</div>
|
||||
<div class="code-name">.icon-jinengpeixun
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<span class="icon iconfont icon-zhengce"></span>
|
||||
<div class="name">
|
||||
政策
|
||||
</div>
|
||||
<div class="code-name">.icon-zhengce
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<span class="icon iconfont icon-chengjifuben"></span>
|
||||
<div class="name">
|
||||
题库和考试
|
||||
</div>
|
||||
<div class="code-name">.icon-chengjifuben
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<span class="icon iconfont icon-jinengpingjia"></span>
|
||||
<div class="name">
|
||||
技能评价
|
||||
</div>
|
||||
<div class="code-name">.icon-jinengpingjia
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<span class="icon iconfont icon-jianli"></span>
|
||||
<div class="name">
|
||||
简历
|
||||
</div>
|
||||
<div class="code-name">.icon-jianli
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<span class="icon iconfont icon-zhengfulou"></span>
|
||||
<div class="name">
|
||||
政府楼
|
||||
</div>
|
||||
<div class="code-name">.icon-zhengfulou
|
||||
</div>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
<div class="article markdown">
|
||||
<h2 id="font-class-">font-class 引用</h2>
|
||||
<hr>
|
||||
|
||||
<p>font-class 是 Unicode 使用方式的一种变种,主要是解决 Unicode 书写不直观,语意不明确的问题。</p>
|
||||
<p>与 Unicode 使用方式相比,具有如下特点:</p>
|
||||
<ul>
|
||||
<li>相比于 Unicode 语意明确,书写更直观。可以很容易分辨这个 icon 是什么。</li>
|
||||
<li>因为使用 class 来定义图标,所以当要替换图标时,只需要修改 class 里面的 Unicode 引用。</li>
|
||||
</ul>
|
||||
<p>使用步骤如下:</p>
|
||||
<h3 id="-fontclass-">第一步:引入项目下面生成的 fontclass 代码:</h3>
|
||||
<pre><code class="language-html"><link rel="stylesheet" href="./iconfont.css">
|
||||
</code></pre>
|
||||
<h3 id="-">第二步:挑选相应图标并获取类名,应用于页面:</h3>
|
||||
<pre><code class="language-html"><span class="iconfont icon-xxx"></span>
|
||||
</code></pre>
|
||||
<blockquote>
|
||||
<p>"
|
||||
iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。</p>
|
||||
</blockquote>
|
||||
</div>
|
||||
</div>
|
||||
<div class="content symbol">
|
||||
<ul class="icon_lists dib-box">
|
||||
|
||||
<li class="dib">
|
||||
<svg class="icon svg-icon" aria-hidden="true">
|
||||
<use xlink:href="#icon-Graduation-simple-"></use>
|
||||
</svg>
|
||||
<div class="name">gxbys</div>
|
||||
<div class="code-name">#icon-Graduation-simple-</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<svg class="icon svg-icon" aria-hidden="true">
|
||||
<use xlink:href="#icon-gerenzhongxin"></use>
|
||||
</svg>
|
||||
<div class="name">个人中心</div>
|
||||
<div class="code-name">#icon-gerenzhongxin</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<svg class="icon svg-icon" aria-hidden="true">
|
||||
<use xlink:href="#icon-suzhicepingtiku"></use>
|
||||
</svg>
|
||||
<div class="name">素质测评</div>
|
||||
<div class="code-name">#icon-suzhicepingtiku</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<svg class="icon svg-icon" aria-hidden="true">
|
||||
<use xlink:href="#icon-ai"></use>
|
||||
</svg>
|
||||
<div class="name">智能AI</div>
|
||||
<div class="code-name">#icon-ai</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<svg class="icon svg-icon" aria-hidden="true">
|
||||
<use xlink:href="#icon-jinengpeixun"></use>
|
||||
</svg>
|
||||
<div class="name">技能培训</div>
|
||||
<div class="code-name">#icon-jinengpeixun</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<svg class="icon svg-icon" aria-hidden="true">
|
||||
<use xlink:href="#icon-zhengce"></use>
|
||||
</svg>
|
||||
<div class="name">政策</div>
|
||||
<div class="code-name">#icon-zhengce</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<svg class="icon svg-icon" aria-hidden="true">
|
||||
<use xlink:href="#icon-chengjifuben"></use>
|
||||
</svg>
|
||||
<div class="name">题库和考试</div>
|
||||
<div class="code-name">#icon-chengjifuben</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<svg class="icon svg-icon" aria-hidden="true">
|
||||
<use xlink:href="#icon-jinengpingjia"></use>
|
||||
</svg>
|
||||
<div class="name">技能评价</div>
|
||||
<div class="code-name">#icon-jinengpingjia</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<svg class="icon svg-icon" aria-hidden="true">
|
||||
<use xlink:href="#icon-jianli"></use>
|
||||
</svg>
|
||||
<div class="name">简历</div>
|
||||
<div class="code-name">#icon-jianli</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<svg class="icon svg-icon" aria-hidden="true">
|
||||
<use xlink:href="#icon-zhengfulou"></use>
|
||||
</svg>
|
||||
<div class="name">政府楼</div>
|
||||
<div class="code-name">#icon-zhengfulou</div>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
<div class="article markdown">
|
||||
<h2 id="symbol-">Symbol 引用</h2>
|
||||
<hr>
|
||||
|
||||
<p>这是一种全新的使用方式,应该说这才是未来的主流,也是平台目前推荐的用法。相关介绍可以参考这篇<a href="">文章</a>
|
||||
这种用法其实是做了一个 SVG 的集合,与另外两种相比具有如下特点:</p>
|
||||
<ul>
|
||||
<li>支持多色图标了,不再受单色限制。</li>
|
||||
<li>通过一些技巧,支持像字体那样,通过 <code>font-size</code>, <code>color</code> 来调整样式。</li>
|
||||
<li>兼容性较差,支持 IE9+,及现代浏览器。</li>
|
||||
<li>浏览器渲染 SVG 的性能一般,还不如 png。</li>
|
||||
</ul>
|
||||
<p>使用步骤如下:</p>
|
||||
<h3 id="-symbol-">第一步:引入项目下面生成的 symbol 代码:</h3>
|
||||
<pre><code class="language-html"><script src="./iconfont.js"></script>
|
||||
</code></pre>
|
||||
<h3 id="-css-">第二步:加入通用 CSS 代码(引入一次就行):</h3>
|
||||
<pre><code class="language-html"><style>
|
||||
.icon {
|
||||
width: 1em;
|
||||
height: 1em;
|
||||
vertical-align: -0.15em;
|
||||
fill: currentColor;
|
||||
overflow: hidden;
|
||||
}
|
||||
</style>
|
||||
</code></pre>
|
||||
<h3 id="-">第三步:挑选相应图标并获取类名,应用于页面:</h3>
|
||||
<pre><code class="language-html"><svg class="icon" aria-hidden="true">
|
||||
<use xlink:href="#icon-xxx"></use>
|
||||
</svg>
|
||||
</code></pre>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
$(document).ready(function () {
|
||||
$('.tab-container .content:first').show()
|
||||
|
||||
$('#tabs li').click(function (e) {
|
||||
var tabContent = $('.tab-container .content')
|
||||
var index = $(this).index()
|
||||
|
||||
if ($(this).hasClass('active')) {
|
||||
return
|
||||
} else {
|
||||
$('#tabs li').removeClass('active')
|
||||
$(this).addClass('active')
|
||||
|
||||
tabContent.hide().eq(index).fadeIn()
|
||||
}
|
||||
})
|
||||
})
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
File diff suppressed because one or more lines are too long
BIN
static/tabbar/.DS_Store
vendored
BIN
static/tabbar/.DS_Store
vendored
Binary file not shown.
BIN
stores/.DS_Store
vendored
BIN
stores/.DS_Store
vendored
Binary file not shown.
@@ -1,7 +1,6 @@
|
||||
// BaseStore.js - 基础Store类
|
||||
import IndexedDBHelper from '@/common/IndexedDBHelper.js'
|
||||
import UniStorageHelper from '../common/UniStorageHelper'
|
||||
import useChatGroupDBStore from './userChatGroupStore'
|
||||
import config from '@/config'
|
||||
|
||||
|
||||
@@ -54,6 +53,7 @@ class BaseStore {
|
||||
unique: false
|
||||
}]
|
||||
}]).then(async () => {
|
||||
const { default: useChatGroupDBStore } = await import('@/packageA/stores/userChatGroupStore.js')
|
||||
useChatGroupDBStore().init()
|
||||
this.isDBReady = true
|
||||
});
|
||||
|
||||
BIN
uni_modules/.DS_Store
vendored
BIN
uni_modules/.DS_Store
vendored
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user