feat: 一体机适配

This commit is contained in:
2025-12-15 15:11:11 +08:00
parent 4983d9cbc7
commit 330eec226f
36 changed files with 2863 additions and 376 deletions

11
App.vue
View File

@@ -10,7 +10,6 @@ usePageAnimation();
const appword = 'aKd20dbGdFvmuwrt'; // 固定值 const appword = 'aKd20dbGdFvmuwrt'; // 固定值
onLaunch((options) => { onLaunch((options) => {
uni.hideTabBar();
useDictStore().getDictData(); useDictStore().getDictData();
try { try {
getUserInfo(); getUserInfo();
@@ -131,6 +130,7 @@ function loginCallback(userInfo) {
@import '@/common/animation.css'; @import '@/common/animation.css';
@import '@/common/common.css'; @import '@/common/common.css';
/* 修改pages tabbar样式 H5才有效 */ /* 修改pages tabbar样式 H5才有效 */
.uni-tabbar .uni-tabbar__item:nth-child(4) .uni-tabbar__bd .uni-tabbar__icon { .uni-tabbar .uni-tabbar__item:nth-child(4) .uni-tabbar__bd .uni-tabbar__icon {
width: 108rpx !important; width: 108rpx !important;
@@ -163,15 +163,6 @@ uni-modal,
z-index: 998; z-index: 998;
} }
/* toast大小改为rpx */
uni-toast .uni-sample-toast {
width: 300rpx !important;
}
uni-toast .uni-simple-toast__text{
font-size: 30rpx !important;
padding: 15rpx 25rpx;
border-radius: 15rpx !important;
}
@font-face { @font-face {
font-family: DingTalk JinBuTi; font-family: DingTalk JinBuTi;

32
common/wide-screen.css Normal file
View File

@@ -0,0 +1,32 @@
/* toast大小改为rpx */
uni-toast .uni-sample-toast {
width: 300rpx !important;
}
uni-toast .uni-simple-toast__text {
font-size: 30rpx !important;
padding: 15rpx 25rpx !important;
border-radius: 15rpx !important;
}
uni-toast .uni-toast {
width: 160rpx !important;
padding: 15rpx 25rpx !important;
border-radius: 15rpx !important;
}
uni-toast .uni-toast__icon {
width: 45rpx !important;
height: 45rpx !important;
}
uni-toast .uni-toast__content {
font-size: 30rpx !important;
}
.uni-load-more{
height: 40rpx !important;
}
.uni-load-more svg{
height: 30rpx !important;
width: 30rpx !important;
}
.uni-load-more__text{
font-size: 30rpx !important;
}

View File

@@ -0,0 +1,664 @@
.uniui-cart-filled:before {
content: "\e6d0";
}
.uniui-gift-filled:before {
content: "\e6c4";
}
.uniui-color:before {
content: "\e6cf";
}
.uniui-wallet:before {
content: "\e6b1";
}
.uniui-settings-filled:before {
content: "\e6ce";
}
.uniui-auth-filled:before {
content: "\e6cc";
}
.uniui-shop-filled:before {
content: "\e6cd";
}
.uniui-staff-filled:before {
content: "\e6cb";
}
.uniui-vip-filled:before {
content: "\e6c6";
}
.uniui-plus-filled:before {
content: "\e6c7";
}
.uniui-folder-add-filled:before {
content: "\e6c8";
}
.uniui-color-filled:before {
content: "\e6c9";
}
.uniui-tune-filled:before {
content: "\e6ca";
}
.uniui-calendar-filled:before {
content: "\e6c0";
}
.uniui-notification-filled:before {
content: "\e6c1";
}
.uniui-wallet-filled:before {
content: "\e6c2";
}
.uniui-medal-filled:before {
content: "\e6c3";
}
.uniui-fire-filled:before {
content: "\e6c5";
}
.uniui-refreshempty:before {
content: "\e6bf";
}
.uniui-location-filled:before {
content: "\e6af";
}
.uniui-person-filled:before {
content: "\e69d";
}
.uniui-personadd-filled:before {
content: "\e698";
}
.uniui-arrowthinleft:before {
content: "\e6d2";
}
.uniui-arrowthinup:before {
content: "\e6d3";
}
.uniui-arrowthindown:before {
content: "\e6d4";
}
.uniui-back:before {
content: "\e6b9";
}
.uniui-forward:before {
content: "\e6ba";
}
.uniui-arrow-right:before {
content: "\e6bb";
}
.uniui-arrow-left:before {
content: "\e6bc";
}
.uniui-arrow-up:before {
content: "\e6bd";
}
.uniui-arrow-down:before {
content: "\e6be";
}
.uniui-arrowthinright:before {
content: "\e6d1";
}
.uniui-down:before {
content: "\e6b8";
}
.uniui-bottom:before {
content: "\e6b8";
}
.uniui-arrowright:before {
content: "\e6d5";
}
.uniui-right:before {
content: "\e6b5";
}
.uniui-up:before {
content: "\e6b6";
}
.uniui-top:before {
content: "\e6b6";
}
.uniui-left:before {
content: "\e6b7";
}
.uniui-arrowup:before {
content: "\e6d6";
}
.uniui-eye:before {
content: "\e651";
}
.uniui-eye-filled:before {
content: "\e66a";
}
.uniui-eye-slash:before {
content: "\e6b3";
}
.uniui-eye-slash-filled:before {
content: "\e6b4";
}
.uniui-info-filled:before {
content: "\e649";
}
.uniui-reload:before {
content: "\e6b2";
}
.uniui-micoff-filled:before {
content: "\e6b0";
}
.uniui-map-pin-ellipse:before {
content: "\e6ac";
}
.uniui-map-pin:before {
content: "\e6ad";
}
.uniui-location:before {
content: "\e6ae";
}
.uniui-starhalf:before {
content: "\e683";
}
.uniui-star:before {
content: "\e688";
}
.uniui-star-filled:before {
content: "\e68f";
}
.uniui-calendar:before {
content: "\e6a0";
}
.uniui-fire:before {
content: "\e6a1";
}
.uniui-medal:before {
content: "\e6a2";
}
.uniui-font:before {
content: "\e6a3";
}
.uniui-gift:before {
content: "\e6a4";
}
.uniui-link:before {
content: "\e6a5";
}
.uniui-notification:before {
content: "\e6a6";
}
.uniui-staff:before {
content: "\e6a7";
}
.uniui-vip:before {
content: "\e6a8";
}
.uniui-folder-add:before {
content: "\e6a9";
}
.uniui-tune:before {
content: "\e6aa";
}
.uniui-auth:before {
content: "\e6ab";
}
.uniui-person:before {
content: "\e699";
}
.uniui-email-filled:before {
content: "\e69a";
}
.uniui-phone-filled:before {
content: "\e69b";
}
.uniui-phone:before {
content: "\e69c";
}
.uniui-email:before {
content: "\e69e";
}
.uniui-personadd:before {
content: "\e69f";
}
.uniui-chatboxes-filled:before {
content: "\e692";
}
.uniui-contact:before {
content: "\e693";
}
.uniui-chatbubble-filled:before {
content: "\e694";
}
.uniui-contact-filled:before {
content: "\e695";
}
.uniui-chatboxes:before {
content: "\e696";
}
.uniui-chatbubble:before {
content: "\e697";
}
.uniui-upload-filled:before {
content: "\e68e";
}
.uniui-upload:before {
content: "\e690";
}
.uniui-weixin:before {
content: "\e691";
}
.uniui-compose:before {
content: "\e67f";
}
.uniui-qq:before {
content: "\e680";
}
.uniui-download-filled:before {
content: "\e681";
}
.uniui-pyq:before {
content: "\e682";
}
.uniui-sound:before {
content: "\e684";
}
.uniui-trash-filled:before {
content: "\e685";
}
.uniui-sound-filled:before {
content: "\e686";
}
.uniui-trash:before {
content: "\e687";
}
.uniui-videocam-filled:before {
content: "\e689";
}
.uniui-spinner-cycle:before {
content: "\e68a";
}
.uniui-weibo:before {
content: "\e68b";
}
.uniui-videocam:before {
content: "\e68c";
}
.uniui-download:before {
content: "\e68d";
}
.uniui-help:before {
content: "\e679";
}
.uniui-navigate-filled:before {
content: "\e67a";
}
.uniui-plusempty:before {
content: "\e67b";
}
.uniui-smallcircle:before {
content: "\e67c";
}
.uniui-minus-filled:before {
content: "\e67d";
}
.uniui-micoff:before {
content: "\e67e";
}
.uniui-closeempty:before {
content: "\e66c";
}
.uniui-clear:before {
content: "\e66d";
}
.uniui-navigate:before {
content: "\e66e";
}
.uniui-minus:before {
content: "\e66f";
}
.uniui-image:before {
content: "\e670";
}
.uniui-mic:before {
content: "\e671";
}
.uniui-paperplane:before {
content: "\e672";
}
.uniui-close:before {
content: "\e673";
}
.uniui-help-filled:before {
content: "\e674";
}
.uniui-paperplane-filled:before {
content: "\e675";
}
.uniui-plus:before {
content: "\e676";
}
.uniui-mic-filled:before {
content: "\e677";
}
.uniui-image-filled:before {
content: "\e678";
}
.uniui-locked-filled:before {
content: "\e668";
}
.uniui-info:before {
content: "\e669";
}
.uniui-locked:before {
content: "\e66b";
}
.uniui-camera-filled:before {
content: "\e658";
}
.uniui-chat-filled:before {
content: "\e659";
}
.uniui-camera:before {
content: "\e65a";
}
.uniui-circle:before {
content: "\e65b";
}
.uniui-checkmarkempty:before {
content: "\e65c";
}
.uniui-chat:before {
content: "\e65d";
}
.uniui-circle-filled:before {
content: "\e65e";
}
.uniui-flag:before {
content: "\e65f";
}
.uniui-flag-filled:before {
content: "\e660";
}
.uniui-gear-filled:before {
content: "\e661";
}
.uniui-home:before {
content: "\e662";
}
.uniui-home-filled:before {
content: "\e663";
}
.uniui-gear:before {
content: "\e664";
}
.uniui-smallcircle-filled:before {
content: "\e665";
}
.uniui-map-filled:before {
content: "\e666";
}
.uniui-map:before {
content: "\e667";
}
.uniui-refresh-filled:before {
content: "\e656";
}
.uniui-refresh:before {
content: "\e657";
}
.uniui-cloud-upload:before {
content: "\e645";
}
.uniui-cloud-download-filled:before {
content: "\e646";
}
.uniui-cloud-download:before {
content: "\e647";
}
.uniui-cloud-upload-filled:before {
content: "\e648";
}
.uniui-redo:before {
content: "\e64a";
}
.uniui-images-filled:before {
content: "\e64b";
}
.uniui-undo-filled:before {
content: "\e64c";
}
.uniui-more:before {
content: "\e64d";
}
.uniui-more-filled:before {
content: "\e64e";
}
.uniui-undo:before {
content: "\e64f";
}
.uniui-images:before {
content: "\e650";
}
.uniui-paperclip:before {
content: "\e652";
}
.uniui-settings:before {
content: "\e653";
}
.uniui-search:before {
content: "\e654";
}
.uniui-redo-filled:before {
content: "\e655";
}
.uniui-list:before {
content: "\e644";
}
.uniui-mail-open-filled:before {
content: "\e63a";
}
.uniui-hand-down-filled:before {
content: "\e63c";
}
.uniui-hand-down:before {
content: "\e63d";
}
.uniui-hand-up-filled:before {
content: "\e63e";
}
.uniui-hand-up:before {
content: "\e63f";
}
.uniui-heart-filled:before {
content: "\e641";
}
.uniui-mail-open:before {
content: "\e643";
}
.uniui-heart:before {
content: "\e639";
}
.uniui-loop:before {
content: "\e633";
}
.uniui-pulldown:before {
content: "\e632";
}
.uniui-scan:before {
content: "\e62a";
}
.uniui-bars:before {
content: "\e627";
}
.uniui-checkbox:before {
content: "\e62b";
}
.uniui-checkbox-filled:before {
content: "\e62c";
}
.uniui-shop:before {
content: "\e62f";
}
.uniui-headphones:before {
content: "\e630";
}
.uniui-cart:before {
content: "\e631";
}

View File

@@ -0,0 +1,664 @@
export type IconsData = {
id : string
name : string
font_family : string
css_prefix_text : string
description : string
glyphs : Array<IconsDataItem>
}
export type IconsDataItem = {
font_class : string
unicode : string
}
export const fontData = [
{
"font_class": "arrow-down",
"unicode": "\ue6be"
},
{
"font_class": "arrow-left",
"unicode": "\ue6bc"
},
{
"font_class": "arrow-right",
"unicode": "\ue6bb"
},
{
"font_class": "arrow-up",
"unicode": "\ue6bd"
},
{
"font_class": "auth",
"unicode": "\ue6ab"
},
{
"font_class": "auth-filled",
"unicode": "\ue6cc"
},
{
"font_class": "back",
"unicode": "\ue6b9"
},
{
"font_class": "bars",
"unicode": "\ue627"
},
{
"font_class": "calendar",
"unicode": "\ue6a0"
},
{
"font_class": "calendar-filled",
"unicode": "\ue6c0"
},
{
"font_class": "camera",
"unicode": "\ue65a"
},
{
"font_class": "camera-filled",
"unicode": "\ue658"
},
{
"font_class": "cart",
"unicode": "\ue631"
},
{
"font_class": "cart-filled",
"unicode": "\ue6d0"
},
{
"font_class": "chat",
"unicode": "\ue65d"
},
{
"font_class": "chat-filled",
"unicode": "\ue659"
},
{
"font_class": "chatboxes",
"unicode": "\ue696"
},
{
"font_class": "chatboxes-filled",
"unicode": "\ue692"
},
{
"font_class": "chatbubble",
"unicode": "\ue697"
},
{
"font_class": "chatbubble-filled",
"unicode": "\ue694"
},
{
"font_class": "checkbox",
"unicode": "\ue62b"
},
{
"font_class": "checkbox-filled",
"unicode": "\ue62c"
},
{
"font_class": "checkmarkempty",
"unicode": "\ue65c"
},
{
"font_class": "circle",
"unicode": "\ue65b"
},
{
"font_class": "circle-filled",
"unicode": "\ue65e"
},
{
"font_class": "clear",
"unicode": "\ue66d"
},
{
"font_class": "close",
"unicode": "\ue673"
},
{
"font_class": "closeempty",
"unicode": "\ue66c"
},
{
"font_class": "cloud-download",
"unicode": "\ue647"
},
{
"font_class": "cloud-download-filled",
"unicode": "\ue646"
},
{
"font_class": "cloud-upload",
"unicode": "\ue645"
},
{
"font_class": "cloud-upload-filled",
"unicode": "\ue648"
},
{
"font_class": "color",
"unicode": "\ue6cf"
},
{
"font_class": "color-filled",
"unicode": "\ue6c9"
},
{
"font_class": "compose",
"unicode": "\ue67f"
},
{
"font_class": "contact",
"unicode": "\ue693"
},
{
"font_class": "contact-filled",
"unicode": "\ue695"
},
{
"font_class": "down",
"unicode": "\ue6b8"
},
{
"font_class": "bottom",
"unicode": "\ue6b8"
},
{
"font_class": "download",
"unicode": "\ue68d"
},
{
"font_class": "download-filled",
"unicode": "\ue681"
},
{
"font_class": "email",
"unicode": "\ue69e"
},
{
"font_class": "email-filled",
"unicode": "\ue69a"
},
{
"font_class": "eye",
"unicode": "\ue651"
},
{
"font_class": "eye-filled",
"unicode": "\ue66a"
},
{
"font_class": "eye-slash",
"unicode": "\ue6b3"
},
{
"font_class": "eye-slash-filled",
"unicode": "\ue6b4"
},
{
"font_class": "fire",
"unicode": "\ue6a1"
},
{
"font_class": "fire-filled",
"unicode": "\ue6c5"
},
{
"font_class": "flag",
"unicode": "\ue65f"
},
{
"font_class": "flag-filled",
"unicode": "\ue660"
},
{
"font_class": "folder-add",
"unicode": "\ue6a9"
},
{
"font_class": "folder-add-filled",
"unicode": "\ue6c8"
},
{
"font_class": "font",
"unicode": "\ue6a3"
},
{
"font_class": "forward",
"unicode": "\ue6ba"
},
{
"font_class": "gear",
"unicode": "\ue664"
},
{
"font_class": "gear-filled",
"unicode": "\ue661"
},
{
"font_class": "gift",
"unicode": "\ue6a4"
},
{
"font_class": "gift-filled",
"unicode": "\ue6c4"
},
{
"font_class": "hand-down",
"unicode": "\ue63d"
},
{
"font_class": "hand-down-filled",
"unicode": "\ue63c"
},
{
"font_class": "hand-up",
"unicode": "\ue63f"
},
{
"font_class": "hand-up-filled",
"unicode": "\ue63e"
},
{
"font_class": "headphones",
"unicode": "\ue630"
},
{
"font_class": "heart",
"unicode": "\ue639"
},
{
"font_class": "heart-filled",
"unicode": "\ue641"
},
{
"font_class": "help",
"unicode": "\ue679"
},
{
"font_class": "help-filled",
"unicode": "\ue674"
},
{
"font_class": "home",
"unicode": "\ue662"
},
{
"font_class": "home-filled",
"unicode": "\ue663"
},
{
"font_class": "image",
"unicode": "\ue670"
},
{
"font_class": "image-filled",
"unicode": "\ue678"
},
{
"font_class": "images",
"unicode": "\ue650"
},
{
"font_class": "images-filled",
"unicode": "\ue64b"
},
{
"font_class": "info",
"unicode": "\ue669"
},
{
"font_class": "info-filled",
"unicode": "\ue649"
},
{
"font_class": "left",
"unicode": "\ue6b7"
},
{
"font_class": "link",
"unicode": "\ue6a5"
},
{
"font_class": "list",
"unicode": "\ue644"
},
{
"font_class": "location",
"unicode": "\ue6ae"
},
{
"font_class": "location-filled",
"unicode": "\ue6af"
},
{
"font_class": "locked",
"unicode": "\ue66b"
},
{
"font_class": "locked-filled",
"unicode": "\ue668"
},
{
"font_class": "loop",
"unicode": "\ue633"
},
{
"font_class": "mail-open",
"unicode": "\ue643"
},
{
"font_class": "mail-open-filled",
"unicode": "\ue63a"
},
{
"font_class": "map",
"unicode": "\ue667"
},
{
"font_class": "map-filled",
"unicode": "\ue666"
},
{
"font_class": "map-pin",
"unicode": "\ue6ad"
},
{
"font_class": "map-pin-ellipse",
"unicode": "\ue6ac"
},
{
"font_class": "medal",
"unicode": "\ue6a2"
},
{
"font_class": "medal-filled",
"unicode": "\ue6c3"
},
{
"font_class": "mic",
"unicode": "\ue671"
},
{
"font_class": "mic-filled",
"unicode": "\ue677"
},
{
"font_class": "micoff",
"unicode": "\ue67e"
},
{
"font_class": "micoff-filled",
"unicode": "\ue6b0"
},
{
"font_class": "minus",
"unicode": "\ue66f"
},
{
"font_class": "minus-filled",
"unicode": "\ue67d"
},
{
"font_class": "more",
"unicode": "\ue64d"
},
{
"font_class": "more-filled",
"unicode": "\ue64e"
},
{
"font_class": "navigate",
"unicode": "\ue66e"
},
{
"font_class": "navigate-filled",
"unicode": "\ue67a"
},
{
"font_class": "notification",
"unicode": "\ue6a6"
},
{
"font_class": "notification-filled",
"unicode": "\ue6c1"
},
{
"font_class": "paperclip",
"unicode": "\ue652"
},
{
"font_class": "paperplane",
"unicode": "\ue672"
},
{
"font_class": "paperplane-filled",
"unicode": "\ue675"
},
{
"font_class": "person",
"unicode": "\ue699"
},
{
"font_class": "person-filled",
"unicode": "\ue69d"
},
{
"font_class": "personadd",
"unicode": "\ue69f"
},
{
"font_class": "personadd-filled",
"unicode": "\ue698"
},
{
"font_class": "personadd-filled-copy",
"unicode": "\ue6d1"
},
{
"font_class": "phone",
"unicode": "\ue69c"
},
{
"font_class": "phone-filled",
"unicode": "\ue69b"
},
{
"font_class": "plus",
"unicode": "\ue676"
},
{
"font_class": "plus-filled",
"unicode": "\ue6c7"
},
{
"font_class": "plusempty",
"unicode": "\ue67b"
},
{
"font_class": "pulldown",
"unicode": "\ue632"
},
{
"font_class": "pyq",
"unicode": "\ue682"
},
{
"font_class": "qq",
"unicode": "\ue680"
},
{
"font_class": "redo",
"unicode": "\ue64a"
},
{
"font_class": "redo-filled",
"unicode": "\ue655"
},
{
"font_class": "refresh",
"unicode": "\ue657"
},
{
"font_class": "refresh-filled",
"unicode": "\ue656"
},
{
"font_class": "refreshempty",
"unicode": "\ue6bf"
},
{
"font_class": "reload",
"unicode": "\ue6b2"
},
{
"font_class": "right",
"unicode": "\ue6b5"
},
{
"font_class": "scan",
"unicode": "\ue62a"
},
{
"font_class": "search",
"unicode": "\ue654"
},
{
"font_class": "settings",
"unicode": "\ue653"
},
{
"font_class": "settings-filled",
"unicode": "\ue6ce"
},
{
"font_class": "shop",
"unicode": "\ue62f"
},
{
"font_class": "shop-filled",
"unicode": "\ue6cd"
},
{
"font_class": "smallcircle",
"unicode": "\ue67c"
},
{
"font_class": "smallcircle-filled",
"unicode": "\ue665"
},
{
"font_class": "sound",
"unicode": "\ue684"
},
{
"font_class": "sound-filled",
"unicode": "\ue686"
},
{
"font_class": "spinner-cycle",
"unicode": "\ue68a"
},
{
"font_class": "staff",
"unicode": "\ue6a7"
},
{
"font_class": "staff-filled",
"unicode": "\ue6cb"
},
{
"font_class": "star",
"unicode": "\ue688"
},
{
"font_class": "star-filled",
"unicode": "\ue68f"
},
{
"font_class": "starhalf",
"unicode": "\ue683"
},
{
"font_class": "trash",
"unicode": "\ue687"
},
{
"font_class": "trash-filled",
"unicode": "\ue685"
},
{
"font_class": "tune",
"unicode": "\ue6aa"
},
{
"font_class": "tune-filled",
"unicode": "\ue6ca"
},
{
"font_class": "undo",
"unicode": "\ue64f"
},
{
"font_class": "undo-filled",
"unicode": "\ue64c"
},
{
"font_class": "up",
"unicode": "\ue6b6"
},
{
"font_class": "top",
"unicode": "\ue6b6"
},
{
"font_class": "upload",
"unicode": "\ue690"
},
{
"font_class": "upload-filled",
"unicode": "\ue68e"
},
{
"font_class": "videocam",
"unicode": "\ue68c"
},
{
"font_class": "videocam-filled",
"unicode": "\ue689"
},
{
"font_class": "vip",
"unicode": "\ue6a8"
},
{
"font_class": "vip-filled",
"unicode": "\ue6c6"
},
{
"font_class": "wallet",
"unicode": "\ue6b1"
},
{
"font_class": "wallet-filled",
"unicode": "\ue6c2"
},
{
"font_class": "weibo",
"unicode": "\ue68b"
},
{
"font_class": "weixin",
"unicode": "\ue691"
}
] as IconsDataItem[]
// export const fontData = JSON.parse<IconsDataItem>(fontDataJson)

Binary file not shown.

View File

@@ -0,0 +1,110 @@
<template>
<!-- #ifdef APP-NVUE -->
<text :style="styleObj" class="my-icons" @click="_onClick">{{unicode}}</text>
<!-- #endif -->
<!-- #ifndef APP-NVUE -->
<text :style="styleObj" class="my-icons" :class="['uniui-'+type,customPrefix,customPrefix?type:'']" @click="_onClick">
<slot></slot>
</text>
<!-- #endif -->
</template>
<script>
import { fontData } from './my-icons_file_vue.js';
const getVal = (val) => {
const reg = /^[0-9]*$/g
return (typeof val === 'number' || reg.test(val)) ? val + 'rpx' : val;
}
// #ifdef APP-NVUE
var domModule = weex.requireModule('dom');
import iconUrl from './my-icons.ttf'
domModule.addRule('fontFace', {
'fontFamily': "my-icons",
'src': "url('" + iconUrl + "')"
});
// #endif
/**
* Icons 图标
* @description 用于展示 icons 图标
* @tutorial https://ext.dcloud.net.cn/plugin?id=28
* @property {Number} size 图标大小
* @property {String} type 图标图案,参考示例
* @property {String} color 图标颜色
* @property {String} customPrefix 自定义图标
* @event {Function} click 点击 Icon 触发事件
*/
export default {
name: 'my-icons',
emits: ['click'],
props: {
type: {
type: String,
default: ''
},
color: {
type: String,
default: '#333333'
},
size: {
type: [Number, String],
default: 16
},
customPrefix: {
type: String,
default: ''
},
fontFamily: {
type: String,
default: ''
}
},
data() {
return {
icons: fontData
}
},
computed: {
unicode() {
let code = this.icons.find(v => v.font_class === this.type)
if (code) {
return code.unicode
}
return ''
},
iconSize() {
return getVal(this.size)
},
styleObj() {
if (this.fontFamily !== '') {
return `color: ${this.color}; font-size: ${this.iconSize}; font-family: ${this.fontFamily};`
}
return `color: ${this.color}; font-size: ${this.iconSize};`
}
},
methods: {
_onClick() {
this.$emit('click')
}
}
}
</script>
<style lang="scss">
/* #ifndef APP-NVUE */
@import './my-icons.css';
@font-face {
font-family: my-icons;
src: url('./my-icons.ttf');
}
/* #endif */
.my-icons {
font-family: my-icons;
text-decoration: none;
text-align: center;
}
</style>

View File

@@ -0,0 +1,649 @@
export const fontData = [
{
"font_class": "arrow-down",
"unicode": "\ue6be"
},
{
"font_class": "arrow-left",
"unicode": "\ue6bc"
},
{
"font_class": "arrow-right",
"unicode": "\ue6bb"
},
{
"font_class": "arrow-up",
"unicode": "\ue6bd"
},
{
"font_class": "auth",
"unicode": "\ue6ab"
},
{
"font_class": "auth-filled",
"unicode": "\ue6cc"
},
{
"font_class": "back",
"unicode": "\ue6b9"
},
{
"font_class": "bars",
"unicode": "\ue627"
},
{
"font_class": "calendar",
"unicode": "\ue6a0"
},
{
"font_class": "calendar-filled",
"unicode": "\ue6c0"
},
{
"font_class": "camera",
"unicode": "\ue65a"
},
{
"font_class": "camera-filled",
"unicode": "\ue658"
},
{
"font_class": "cart",
"unicode": "\ue631"
},
{
"font_class": "cart-filled",
"unicode": "\ue6d0"
},
{
"font_class": "chat",
"unicode": "\ue65d"
},
{
"font_class": "chat-filled",
"unicode": "\ue659"
},
{
"font_class": "chatboxes",
"unicode": "\ue696"
},
{
"font_class": "chatboxes-filled",
"unicode": "\ue692"
},
{
"font_class": "chatbubble",
"unicode": "\ue697"
},
{
"font_class": "chatbubble-filled",
"unicode": "\ue694"
},
{
"font_class": "checkbox",
"unicode": "\ue62b"
},
{
"font_class": "checkbox-filled",
"unicode": "\ue62c"
},
{
"font_class": "checkmarkempty",
"unicode": "\ue65c"
},
{
"font_class": "circle",
"unicode": "\ue65b"
},
{
"font_class": "circle-filled",
"unicode": "\ue65e"
},
{
"font_class": "clear",
"unicode": "\ue66d"
},
{
"font_class": "close",
"unicode": "\ue673"
},
{
"font_class": "closeempty",
"unicode": "\ue66c"
},
{
"font_class": "cloud-download",
"unicode": "\ue647"
},
{
"font_class": "cloud-download-filled",
"unicode": "\ue646"
},
{
"font_class": "cloud-upload",
"unicode": "\ue645"
},
{
"font_class": "cloud-upload-filled",
"unicode": "\ue648"
},
{
"font_class": "color",
"unicode": "\ue6cf"
},
{
"font_class": "color-filled",
"unicode": "\ue6c9"
},
{
"font_class": "compose",
"unicode": "\ue67f"
},
{
"font_class": "contact",
"unicode": "\ue693"
},
{
"font_class": "contact-filled",
"unicode": "\ue695"
},
{
"font_class": "down",
"unicode": "\ue6b8"
},
{
"font_class": "bottom",
"unicode": "\ue6b8"
},
{
"font_class": "download",
"unicode": "\ue68d"
},
{
"font_class": "download-filled",
"unicode": "\ue681"
},
{
"font_class": "email",
"unicode": "\ue69e"
},
{
"font_class": "email-filled",
"unicode": "\ue69a"
},
{
"font_class": "eye",
"unicode": "\ue651"
},
{
"font_class": "eye-filled",
"unicode": "\ue66a"
},
{
"font_class": "eye-slash",
"unicode": "\ue6b3"
},
{
"font_class": "eye-slash-filled",
"unicode": "\ue6b4"
},
{
"font_class": "fire",
"unicode": "\ue6a1"
},
{
"font_class": "fire-filled",
"unicode": "\ue6c5"
},
{
"font_class": "flag",
"unicode": "\ue65f"
},
{
"font_class": "flag-filled",
"unicode": "\ue660"
},
{
"font_class": "folder-add",
"unicode": "\ue6a9"
},
{
"font_class": "folder-add-filled",
"unicode": "\ue6c8"
},
{
"font_class": "font",
"unicode": "\ue6a3"
},
{
"font_class": "forward",
"unicode": "\ue6ba"
},
{
"font_class": "gear",
"unicode": "\ue664"
},
{
"font_class": "gear-filled",
"unicode": "\ue661"
},
{
"font_class": "gift",
"unicode": "\ue6a4"
},
{
"font_class": "gift-filled",
"unicode": "\ue6c4"
},
{
"font_class": "hand-down",
"unicode": "\ue63d"
},
{
"font_class": "hand-down-filled",
"unicode": "\ue63c"
},
{
"font_class": "hand-up",
"unicode": "\ue63f"
},
{
"font_class": "hand-up-filled",
"unicode": "\ue63e"
},
{
"font_class": "headphones",
"unicode": "\ue630"
},
{
"font_class": "heart",
"unicode": "\ue639"
},
{
"font_class": "heart-filled",
"unicode": "\ue641"
},
{
"font_class": "help",
"unicode": "\ue679"
},
{
"font_class": "help-filled",
"unicode": "\ue674"
},
{
"font_class": "home",
"unicode": "\ue662"
},
{
"font_class": "home-filled",
"unicode": "\ue663"
},
{
"font_class": "image",
"unicode": "\ue670"
},
{
"font_class": "image-filled",
"unicode": "\ue678"
},
{
"font_class": "images",
"unicode": "\ue650"
},
{
"font_class": "images-filled",
"unicode": "\ue64b"
},
{
"font_class": "info",
"unicode": "\ue669"
},
{
"font_class": "info-filled",
"unicode": "\ue649"
},
{
"font_class": "left",
"unicode": "\ue6b7"
},
{
"font_class": "link",
"unicode": "\ue6a5"
},
{
"font_class": "list",
"unicode": "\ue644"
},
{
"font_class": "location",
"unicode": "\ue6ae"
},
{
"font_class": "location-filled",
"unicode": "\ue6af"
},
{
"font_class": "locked",
"unicode": "\ue66b"
},
{
"font_class": "locked-filled",
"unicode": "\ue668"
},
{
"font_class": "loop",
"unicode": "\ue633"
},
{
"font_class": "mail-open",
"unicode": "\ue643"
},
{
"font_class": "mail-open-filled",
"unicode": "\ue63a"
},
{
"font_class": "map",
"unicode": "\ue667"
},
{
"font_class": "map-filled",
"unicode": "\ue666"
},
{
"font_class": "map-pin",
"unicode": "\ue6ad"
},
{
"font_class": "map-pin-ellipse",
"unicode": "\ue6ac"
},
{
"font_class": "medal",
"unicode": "\ue6a2"
},
{
"font_class": "medal-filled",
"unicode": "\ue6c3"
},
{
"font_class": "mic",
"unicode": "\ue671"
},
{
"font_class": "mic-filled",
"unicode": "\ue677"
},
{
"font_class": "micoff",
"unicode": "\ue67e"
},
{
"font_class": "micoff-filled",
"unicode": "\ue6b0"
},
{
"font_class": "minus",
"unicode": "\ue66f"
},
{
"font_class": "minus-filled",
"unicode": "\ue67d"
},
{
"font_class": "more",
"unicode": "\ue64d"
},
{
"font_class": "more-filled",
"unicode": "\ue64e"
},
{
"font_class": "navigate",
"unicode": "\ue66e"
},
{
"font_class": "navigate-filled",
"unicode": "\ue67a"
},
{
"font_class": "notification",
"unicode": "\ue6a6"
},
{
"font_class": "notification-filled",
"unicode": "\ue6c1"
},
{
"font_class": "paperclip",
"unicode": "\ue652"
},
{
"font_class": "paperplane",
"unicode": "\ue672"
},
{
"font_class": "paperplane-filled",
"unicode": "\ue675"
},
{
"font_class": "person",
"unicode": "\ue699"
},
{
"font_class": "person-filled",
"unicode": "\ue69d"
},
{
"font_class": "personadd",
"unicode": "\ue69f"
},
{
"font_class": "personadd-filled",
"unicode": "\ue698"
},
{
"font_class": "personadd-filled-copy",
"unicode": "\ue6d1"
},
{
"font_class": "phone",
"unicode": "\ue69c"
},
{
"font_class": "phone-filled",
"unicode": "\ue69b"
},
{
"font_class": "plus",
"unicode": "\ue676"
},
{
"font_class": "plus-filled",
"unicode": "\ue6c7"
},
{
"font_class": "plusempty",
"unicode": "\ue67b"
},
{
"font_class": "pulldown",
"unicode": "\ue632"
},
{
"font_class": "pyq",
"unicode": "\ue682"
},
{
"font_class": "qq",
"unicode": "\ue680"
},
{
"font_class": "redo",
"unicode": "\ue64a"
},
{
"font_class": "redo-filled",
"unicode": "\ue655"
},
{
"font_class": "refresh",
"unicode": "\ue657"
},
{
"font_class": "refresh-filled",
"unicode": "\ue656"
},
{
"font_class": "refreshempty",
"unicode": "\ue6bf"
},
{
"font_class": "reload",
"unicode": "\ue6b2"
},
{
"font_class": "right",
"unicode": "\ue6b5"
},
{
"font_class": "scan",
"unicode": "\ue62a"
},
{
"font_class": "search",
"unicode": "\ue654"
},
{
"font_class": "settings",
"unicode": "\ue653"
},
{
"font_class": "settings-filled",
"unicode": "\ue6ce"
},
{
"font_class": "shop",
"unicode": "\ue62f"
},
{
"font_class": "shop-filled",
"unicode": "\ue6cd"
},
{
"font_class": "smallcircle",
"unicode": "\ue67c"
},
{
"font_class": "smallcircle-filled",
"unicode": "\ue665"
},
{
"font_class": "sound",
"unicode": "\ue684"
},
{
"font_class": "sound-filled",
"unicode": "\ue686"
},
{
"font_class": "spinner-cycle",
"unicode": "\ue68a"
},
{
"font_class": "staff",
"unicode": "\ue6a7"
},
{
"font_class": "staff-filled",
"unicode": "\ue6cb"
},
{
"font_class": "star",
"unicode": "\ue688"
},
{
"font_class": "star-filled",
"unicode": "\ue68f"
},
{
"font_class": "starhalf",
"unicode": "\ue683"
},
{
"font_class": "trash",
"unicode": "\ue687"
},
{
"font_class": "trash-filled",
"unicode": "\ue685"
},
{
"font_class": "tune",
"unicode": "\ue6aa"
},
{
"font_class": "tune-filled",
"unicode": "\ue6ca"
},
{
"font_class": "undo",
"unicode": "\ue64f"
},
{
"font_class": "undo-filled",
"unicode": "\ue64c"
},
{
"font_class": "up",
"unicode": "\ue6b6"
},
{
"font_class": "top",
"unicode": "\ue6b6"
},
{
"font_class": "upload",
"unicode": "\ue690"
},
{
"font_class": "upload-filled",
"unicode": "\ue68e"
},
{
"font_class": "videocam",
"unicode": "\ue68c"
},
{
"font_class": "videocam-filled",
"unicode": "\ue689"
},
{
"font_class": "vip",
"unicode": "\ue6a8"
},
{
"font_class": "vip-filled",
"unicode": "\ue6c6"
},
{
"font_class": "wallet",
"unicode": "\ue6b1"
},
{
"font_class": "wallet-filled",
"unicode": "\ue6c2"
},
{
"font_class": "weibo",
"unicode": "\ue68b"
},
{
"font_class": "weixin",
"unicode": "\ue691"
}
]
// export const fontData = JSON.parse<IconsDataItem>(fontDataJson)

View File

@@ -1,7 +1,7 @@
<template> <template>
<view class="expected-station"> <view class="expected-station">
<view class="sex-search" v-if="search"> <view class="sex-search" v-if="search">
<uni-icons class="iconsearch" type="search" size="20"></uni-icons> <my-icons class="iconsearch" type="search" size="40"></my-icons>
<input class="uni-input searchinput" confirm-type="search" /> <input class="uni-input searchinput" confirm-type="search" />
</view> </view>
<view class="sex-content"> <view class="sex-content">

View File

@@ -4,7 +4,7 @@
<!-- 头部 --> <!-- 头部 -->
<view class="modal-header"> <view class="modal-header">
<text class="back-btn" @click="handleClose"> <text class="back-btn" @click="handleClose">
<uni-icons type="left" size="24"></uni-icons> <my-icons type="left" size="48"></my-icons>
</text> </text>
<text class="modal-title">{{ title }}</text> <text class="modal-title">{{ title }}</text>
<view class="back-btn"></view> <view class="back-btn"></view>

View File

@@ -21,6 +21,12 @@
<script setup> <script setup>
import { ref, onMounted, computed } from 'vue'; import { ref, onMounted, computed } from 'vue';
import { useReadMsg } from '@/stores/useReadMsg'; import { useReadMsg } from '@/stores/useReadMsg';
import useScreenStore from '@/stores/useScreenStore'
const screenStore = useScreenStore()
const {isWideScreen} = screenStore
const props = defineProps({ const props = defineProps({
currentpage: { currentpage: {
type: Number, type: Number,
@@ -79,7 +85,7 @@ const tabbarList = computed(() => [
]); ]);
onMounted(() => { onMounted(() => {
uni.hideTabBar(); if(isWideScreen)uni.hideTabBar();
currentItem.value = props.currentpage; currentItem.value = props.currentpage;
}); });

View File

@@ -6,6 +6,10 @@ import {
watch watch
} from 'vue' } from 'vue'
import useScreenStore from '@/stores/useScreenStore'
const screenStore = useScreenStore()
export function useColumnCount(onChange = () => {}) { export function useColumnCount(onChange = () => {}) {
const columnCount = ref(0) const columnCount = ref(0)
const columnSpace = ref(2) const columnSpace = ref(2)
@@ -20,9 +24,12 @@ export function useColumnCount(onChange = () => {}) {
// } // }
// } // }
const calcColumn = () => { const calcColumn = () => {
const width = uni.getSystemInfoSync().windowWidth // const width = uni.getSystemInfoSync().windowWidth
const {foldFeature,foldCount} = screenStore
let count = 2 let count = 2
//折叠屏2*屏幕数量
if(foldFeature) count = foldCount * 2
else count = 2
// if (width >= 1000) { // if (width >= 1000) {
// count = 5 // count = 5
// } else if (width >= 750) { // } else if (width >= 750) {

View File

@@ -6,6 +6,7 @@ import {
import globalFunction from '@/common/globalFunction' import globalFunction from '@/common/globalFunction'
import '@/lib/string-similarity.min.js' import '@/lib/string-similarity.min.js'
import similarityJobs from '@/utils/similarity_Job.js'; import similarityJobs from '@/utils/similarity_Job.js';
import useScreenStore from './stores/useScreenStore'
// 组件 // 组件
import AppLayout from './components/AppLayout/AppLayout.vue'; import AppLayout from './components/AppLayout/AppLayout.vue';
@@ -22,6 +23,7 @@ import renderDeliveryRecord from '@/components/renderDeliveryRecord/renderDelive
import renderJobCollectionRecord from '@/components/renderJobCollectionRecord/renderJobCollectionRecord.vue'; import renderJobCollectionRecord from '@/components/renderJobCollectionRecord/renderJobCollectionRecord.vue';
import renderCompanyCollectionRecord from '@/components/renderCompanyCollectionRecord/renderCompanyCollectionRecord.vue'; import renderCompanyCollectionRecord from '@/components/renderCompanyCollectionRecord/renderCompanyCollectionRecord.vue';
import renderJobViewRecord from '@/components/renderJobViewRecord/renderJobViewRecord.vue'; import renderJobViewRecord from '@/components/renderJobViewRecord/renderJobViewRecord.vue';
import MyIcons from '@/components/My-icons/my-icons.vue';
// import Tabbar from '@/components/tabbar/midell-box.vue' // import Tabbar from '@/components/tabbar/midell-box.vue'
// 自动导入 directives 目录下所有指令 // 自动导入 directives 目录下所有指令
console.log(lightAppJssdk) console.log(lightAppJssdk)
@@ -33,8 +35,7 @@ import {
createSSRApp, createSSRApp,
} from 'vue' } from 'vue'
const foldFeature = window.visualViewport && 'segments' in window.visualViewport
console.log('是否支持多段屏幕:', foldFeature)
// 全局组件 // 全局组件
export function createApp() { export function createApp() {
@@ -53,6 +54,7 @@ export function createApp() {
app.component('renderJobCollectionRecord', renderJobCollectionRecord) //渲染岗位收藏记录 app.component('renderJobCollectionRecord', renderJobCollectionRecord) //渲染岗位收藏记录
app.component('renderCompanyCollectionRecord', renderCompanyCollectionRecord) //渲染公司收藏记录 app.component('renderCompanyCollectionRecord', renderCompanyCollectionRecord) //渲染公司收藏记录
app.component('renderJobViewRecord', renderJobViewRecord) //渲染岗位浏览记录 app.component('renderJobViewRecord', renderJobViewRecord) //渲染岗位浏览记录
app.component('MyIcons', MyIcons)
// app.component('tabbar-custom', Tabbar) // app.component('tabbar-custom', Tabbar)
for (const path in directives) { for (const path in directives) {
@@ -74,6 +76,9 @@ export function createApp() {
store.use(createUnistorage()); store.use(createUnistorage());
app.use(store); app.use(store);
// 初始化屏幕检测
const screenStore = useScreenStore()
screenStore.initScreenDetection()
return { return {
app, app,
Pinia Pinia

View File

@@ -18,7 +18,7 @@
</view> </view>
<view class="content-list"> <view class="content-list">
<view class="list-search"> <view class="list-search">
<uni-icons type="search" color="#333333" size="24"></uni-icons> <my-icons type="search" color="#333333" size="48"></my-icons>
<input <input
class="search-input" class="search-input"
v-model="inputVal" v-model="inputVal"

View File

@@ -9,7 +9,7 @@
<view class="collection-search"> <view class="collection-search">
<view class="search-content"> <view class="search-content">
<view class="header-input button-click"> <view class="header-input button-click">
<uni-icons class="iconsearch" color="#6A6A6A" type="search" size="22"></uni-icons> <my-icons class="iconsearch" color="#6A6A6A" type="search" size="44"></my-icons>
<input <input
class="input" class="input"
@confirm="searchCollection" @confirm="searchCollection"

View File

@@ -9,7 +9,7 @@
<view class="collection-search"> <view class="collection-search">
<view class="search-content"> <view class="search-content">
<view class="header-input button-click"> <view class="header-input button-click">
<uni-icons class="iconsearch" color="#6A6A6A" type="search" size="22"></uni-icons> <my-icons class="iconsearch" color="#6A6A6A" type="search" size="44"></my-icons>
<input <input
class="input" class="input"
@confirm="searchCollection" @confirm="searchCollection"

View File

@@ -8,7 +8,7 @@
<view class="card-subTitle">{{ item.subTitle }}</view> <view class="card-subTitle">{{ item.subTitle }}</view>
<view class="card-btns" v-if="item.noticeType === '2'" @click="seeBussiness(item)"> <view class="card-btns" v-if="item.noticeType === '2'" @click="seeBussiness(item)">
<view class="btns-text">立即查看</view> <view class="btns-text">立即查看</view>
<view class="btns-text"><uni-icons type="forward" color="#256bfa" size="18"></uni-icons></view> <view class="btns-text"><my-icons type="forward" color="#256bfa" size="32"></my-icons></view>
</view> </view>
</view> </view>
</view> </view>

View File

@@ -2,7 +2,7 @@
<div class="video-container"> <div class="video-container">
<view class="back-box" v-if="isMiniProgram"> <view class="back-box" v-if="isMiniProgram">
<view class="btn"> <view class="btn">
<uni-icons type="left" size="26" color="#FFFFFF" @click="navBack"></uni-icons> <my-icons type="left" size="52" color="#FFFFFF" @click="navBack"></my-icons>
</view> </view>
</view> </view>
<mTikTok :video-list="state.videoList" :pause-type="1" :controls="false" @loadMore="loadMore" @change="change"> <mTikTok :video-list="state.videoList" :pause-type="1" :controls="false" @loadMore="loadMore" @change="change">
@@ -15,7 +15,7 @@
</text> </text>
<view class="seedetail" @click="nextDetail"> <view class="seedetail" @click="nextDetail">
查看详情 查看详情
<uni-icons type="right" color="#FFFFFF" size="14"></uni-icons> <my-icons type="right" color="#FFFFFF" size="28"></my-icons>
</view> </view>
</view> </view>
</view> </view>

View File

@@ -228,6 +228,7 @@ const changeendTime = () => {
background: #f5f5f5; background: #f5f5f5;
padding: 20rpx; padding: 20rpx;
box-sizing: border-box; box-sizing: border-box;
font-size: 28rpx;
} }
} }

View File

@@ -12,7 +12,7 @@
</view> </view>
</view> </view>
<view class="header-input btn-feel"> <view class="header-input btn-feel">
<uni-icons class="iconsearch" color="#666666" type="search" size="18"></uni-icons> <my-icons class="iconsearch" color="#666666" type="search" size="32"></my-icons>
<input class="input" placeholder="招聘会" placeholder-class="inputplace" /> <input class="input" placeholder="招聘会" placeholder-class="inputplace" />
</view> </view>
<view class="header-date"> <view class="header-date">

View File

@@ -12,7 +12,7 @@
</view> </view>
</view> </view>
<view class="header-input btn-feel"> <view class="header-input btn-feel">
<uni-icons class="iconsearch" color="#666666" type="search" size="18"></uni-icons> <my-icons class="iconsearch" color="#666666" type="search" size="36"></my-icons>
<input <input
v-model="pageState.zphmc" v-model="pageState.zphmc"
confirm-type="search" confirm-type="search"
@@ -100,7 +100,7 @@
<empty v-if="!fairList.length" content="暂时没有结果,下一天也许就有惊喜"></empty> <empty v-if="!fairList.length" content="暂时没有结果,下一天也许就有惊喜"></empty>
</scroll-view> </scroll-view>
</view> </view>
<Tabbar :currentpage="1"></Tabbar> <Tabbar v-show="showTabbar" :currentpage="1"></Tabbar>
</view> </view>
</view> </view>
</template> </template>
@@ -114,6 +114,19 @@ import { storeToRefs } from 'pinia';
import config from '@/config'; import config from '@/config';
const { longitudeVal, latitudeVal } = storeToRefs(useLocationStore()); const { longitudeVal, latitudeVal } = storeToRefs(useLocationStore());
const { $api, navTo, cloneDeep, debounce } = inject('globalFunction'); const { $api, navTo, cloneDeep, debounce } = inject('globalFunction');
import useScreenStore from '@/stores/useScreenStore'
const screenStore = useScreenStore()
const showTabbar = ref(false)
watch(
() => screenStore.isWideScreen,
(newVal) => {
showTabbar.value = newVal
},
{ immediate: true }
)
const weekList = ref([]); const weekList = ref([]);
const fairList = ref([]); const fairList = ref([]);
const currentDay = ref({}); const currentDay = ref({});

View File

@@ -15,7 +15,7 @@
placeholder-class="input-placeholder" placeholder-class="input-placeholder"
placeholder="请输入搜索历史对话" placeholder="请输入搜索历史对话"
/> />
<uni-icons class="input-search" type="search" size="20"></uni-icons> <my-icons class="input-search" type="search" size="40"></my-icons>
</view> </view>
<scroll-view scroll-y :show-scrollbar="false" class="chat-scroll"> <scroll-view scroll-y :show-scrollbar="false" class="chat-scroll">
<view <view
@@ -63,7 +63,7 @@
<ai-paging ref="paging"></ai-paging> <ai-paging ref="paging"></ai-paging>
</view> </view>
<!-- 自定义tabbar --> <!-- 自定义tabbar -->
<view class="chatmain-footer" v-show="!isDrawerOpen"> <view class="chatmain-footer" v-show="!isDrawerOpen && showTabbar">
<Tabbar :currentpage="2"></Tabbar> <Tabbar :currentpage="2"></Tabbar>
</view> </view>
</view> </view>
@@ -71,7 +71,7 @@
</template> </template>
<script setup> <script setup>
import { ref, inject, nextTick, computed } from 'vue'; import { ref, inject, nextTick, computed,watch } from 'vue';
const { $api, navTo, insertSortData } = inject('globalFunction'); const { $api, navTo, insertSortData } = inject('globalFunction');
import { onLoad, onShow, onHide } from '@dcloudio/uni-app'; import { onLoad, onShow, onHide } from '@dcloudio/uni-app';
import Tabbar from '@/components/tabbar/midell-box.vue'; import Tabbar from '@/components/tabbar/midell-box.vue';
@@ -88,6 +88,20 @@ import config from '@/config';
const searchText = ref(''); const searchText = ref('');
const paging = ref(null); const paging = ref(null);
import useScreenStore from '@/stores/useScreenStore'
const screenStore = useScreenStore()
const showTabbar = ref(false)
watch(
() => screenStore.isWideScreen,
(newVal) => {
showTabbar.value = newVal
},
{ immediate: true }
)
// 实时过滤 // 实时过滤
const filteredList = computed(() => { const filteredList = computed(() => {
// console.log(tabeList.value); // console.log(tabeList.value);

View File

@@ -185,7 +185,7 @@
<!-- btn --> <!-- btn -->
<CollapseTransition :show="showfile"> <CollapseTransition :show="showfile">
<view class="area-tips"> <view class="area-tips">
<uni-icons type="info-filled" color="#ADADAD" size="15"></uni-icons> <my-icons type="info-filled" color="#ADADAD" size="30"></my-icons>
上传后自动解析简历内容 上传后自动解析简历内容
</view> </view>
<view class="area-file"> <view class="area-file">
@@ -233,7 +233,7 @@
<!-- <image class="file-icon" @click="jumpUrl(file)" :src=""></image> --> <!-- <image class="file-icon" @click="jumpUrl(file)" :src=""></image> -->
</view> </view>
<view class="file-del" catchtouchmove="true" @click="delfile(file)"> <view class="file-del" catchtouchmove="true" @click="delfile(file)">
<uni-icons type="closeempty" color="#FFFFFF" size="10"></uni-icons> <my-icons type="closeempty" color="#FFFFFF" size="20"></my-icons>
</view> </view>
</view> </view>
</view> </view>

View File

@@ -1,10 +1,10 @@
<template> <template>
<view class="container" id="pixi-box" ref="pixiContainerRef" :style="'transform:scale(' + scale + ')'"></view> <view class="container" id="pixi-box" ref="pixiContainerRef"></view>
</template> </template>
<script setup> <script setup>
import { onMounted, onUnmounted, ref, nextTick } from 'vue'; import { onMounted, onUnmounted, ref, nextTick } from "vue";
const emit = defineEmits(['tag-click']); const emit = defineEmits(["tag-click"]);
// DOM Ref // DOM Ref
const pixiContainerRef = ref(null); const pixiContainerRef = ref(null);
@@ -14,13 +14,11 @@ let app = null;
let tagsContainer = null; let tagsContainer = null;
let activeTagInstances = []; let activeTagInstances = [];
const scale = ref(0)
// 配置数据 // 配置数据
const mockTags = [ const mockTags = [
{ name: '医生', bgColor: 0x0069fe, fontColor: 0xffffff, size: 17, opacity: 1.0, angle: 0, radius: 0 }, { name: "医生", bgColor: 0x0069fe, fontColor: 0xffffff, size: 17, opacity: 1.0, angle: 0, radius: 0 },
{ {
name: '工程师', name: "工程师",
bgColor: 0x87e2ec, bgColor: 0x87e2ec,
fontColor: 0xffffff, fontColor: 0xffffff,
size: 14, size: 14,
@@ -30,7 +28,7 @@ const mockTags = [
tailRotation: Math.PI / 2, tailRotation: Math.PI / 2,
}, },
{ {
name: '建筑师', name: "建筑师",
bgColor: 0xffebeb, bgColor: 0xffebeb,
tailColor: 0xffe1e1, tailColor: 0xffe1e1,
fontColor: 0xff6969, fontColor: 0xff6969,
@@ -41,7 +39,7 @@ const mockTags = [
tailRotation: (3 * Math.PI) / 4, tailRotation: (3 * Math.PI) / 4,
}, },
{ {
name: '律师', name: "律师",
bgColor: 0x21ea85, bgColor: 0x21ea85,
fontColor: 0xffffff, fontColor: 0xffffff,
size: 15, size: 15,
@@ -51,7 +49,7 @@ const mockTags = [
tailRotation: (3 * Math.PI) / 4, tailRotation: (3 * Math.PI) / 4,
}, },
{ {
name: '记者', name: "记者",
bgColor: 0xebf3ff, bgColor: 0xebf3ff,
tailColor: 0xb9d3ff, tailColor: 0xb9d3ff,
fontColor: 0x1d71ef, fontColor: 0x1d71ef,
@@ -62,7 +60,7 @@ const mockTags = [
tailRotation: (3 * Math.PI) / 3.4, tailRotation: (3 * Math.PI) / 3.4,
}, },
{ {
name: '程序员', name: "程序员",
bgColor: 0xffd4b6, bgColor: 0xffd4b6,
fontColor: 0xffffff, fontColor: 0xffffff,
size: 14, size: 14,
@@ -72,7 +70,7 @@ const mockTags = [
tailRotation: (5 * Math.PI) / 4, tailRotation: (5 * Math.PI) / 4,
}, },
{ {
name: '摄影师', name: "摄影师",
bgColor: 0xd8e5fe, bgColor: 0xd8e5fe,
tailColor: 0xb9d3ff, tailColor: 0xb9d3ff,
fontColor: 0x1d71ef, fontColor: 0x1d71ef,
@@ -83,7 +81,7 @@ const mockTags = [
tailRotation: (3 * Math.PI) / 2, tailRotation: (3 * Math.PI) / 2,
}, },
{ {
name: '设计师', name: "设计师",
bgColor: 0xff9400, bgColor: 0xff9400,
fontColor: 0xffffff, fontColor: 0xffffff,
size: 14, size: 14,
@@ -93,7 +91,7 @@ const mockTags = [
tailRotation: (7 * Math.PI) / 4, tailRotation: (7 * Math.PI) / 4,
}, },
{ {
name: '心理咨询师', name: "心理咨询师",
bgColor: 0xebf3ff, bgColor: 0xebf3ff,
tailColor: 0xb9d3ff, tailColor: 0xb9d3ff,
fontColor: 0x1d71ef, fontColor: 0x1d71ef,
@@ -104,7 +102,7 @@ const mockTags = [
tailRotation: (3 * Math.PI) / 1.78, tailRotation: (3 * Math.PI) / 1.78,
}, },
{ {
name: '护士', name: "护士",
bgColor: 0xff6969, bgColor: 0xff6969,
fontColor: 0xffffff, fontColor: 0xffffff,
size: 15, size: 15,
@@ -114,7 +112,7 @@ const mockTags = [
tailRotation: Math.PI / 4, tailRotation: Math.PI / 4,
}, },
{ {
name: '会计', name: "会计",
bgColor: 0xfce9c9, bgColor: 0xfce9c9,
fontColor: 0xfbc55f, fontColor: 0xfbc55f,
size: 13, size: 13,
@@ -130,11 +128,11 @@ onMounted(async () => {
setTimeout(() => { setTimeout(() => {
initPixi(); initPixi();
}, 100); }, 100);
window.addEventListener('resize', handleResize); window.addEventListener("resize", handleResize);
}); });
onUnmounted(() => { onUnmounted(() => {
window.removeEventListener('resize', handleResize); window.removeEventListener("resize", handleResize);
if (app) { if (app) {
app.destroy(true, { children: true, texture: true, baseTexture: true }); app.destroy(true, { children: true, texture: true, baseTexture: true });
app = null; app = null;
@@ -143,7 +141,7 @@ onUnmounted(() => {
const getContainerDOM = () => { const getContainerDOM = () => {
const refVal = pixiContainerRef.value; const refVal = pixiContainerRef.value;
if (!refVal) return document.getElementById('pixi-box'); if (!refVal) return document.getElementById("pixi-box");
if (refVal.$el) return refVal.$el; if (refVal.$el) return refVal.$el;
return refVal; return refVal;
}; };
@@ -153,7 +151,7 @@ const clamp = (num, min, max) => Math.min(Math.max(num, min), max);
const initPixi = () => { const initPixi = () => {
const container = getContainerDOM(); const container = getContainerDOM();
if (!container) return; if (!container) return;
scale.value = Math.min(container.clientWidth / 300 , 1.5)
const width = container.clientWidth || 300; const width = container.clientWidth || 300;
const height = container.clientHeight || 300; const height = container.clientHeight || 300;
@@ -168,7 +166,7 @@ const initPixi = () => {
resolution: window.devicePixelRatio || 1, resolution: window.devicePixelRatio || 1,
autoDensity: true, autoDensity: true,
}); });
app.view.style.touchAction = 'auto'; app.view.style.touchAction = "auto";
container.appendChild(app.view); container.appendChild(app.view);
@@ -179,19 +177,18 @@ const initPixi = () => {
}; };
const renderScene = (sw, sh) => { const renderScene = (sw, sh) => {
let ratio = window.innerWidth / 400;
if (ratio < 1) ratio = 1;
tagsContainer.removeChildren(); tagsContainer.removeChildren();
activeTagInstances = []; activeTagInstances = [];
const baseSize = 375;
const scaleFactor = (Math.min(sw, sh) / baseSize) * 0.9;
mockTags.forEach((data, index) => { mockTags.forEach((data, index) => {
const scaledRadius = data.radius * (scaleFactor < 1 ? 1 : scaleFactor * 0.8); const scaledRadius = data.radius * ratio;
let x = sw / 2 + scaledRadius * Math.cos(data.angle); let x = sw / 2 + scaledRadius * Math.cos(data.angle);
let y = sh / 2 + scaledRadius * Math.sin(data.angle); let y = sh / 2 + scaledRadius * Math.sin(data.angle);
const tag = createTag(data, index); const tag = createTag(data, index, ratio);
tagsContainer.addChild(tag); tagsContainer.addChild(tag);
@@ -218,7 +215,7 @@ const renderScene = (sw, sh) => {
}; };
if (data.radius > 0) { if (data.radius > 0) {
const tail = createCometTail( data.tailColor || data.bgColor, data.tailRotation, tag.width); const tail = createCometTail(data.tailColor || data.bgColor, data.tailRotation, tag.width, ratio);
tag.addChildAt(tail, 0); tag.addChildAt(tail, 0);
tag.updateTail = () => tail.updateAnim(); tag.updateTail = () => tail.updateAnim();
} }
@@ -229,7 +226,6 @@ const renderScene = (sw, sh) => {
// 动画循环 // 动画循环
app.ticker.add(() => { app.ticker.add(() => {
const screenH = app.screen.height; const screenH = app.screen.height;
activeTagInstances.forEach((tag) => { activeTagInstances.forEach((tag) => {
const meta = tag.userData; const meta = tag.userData;
if (meta) { if (meta) {
@@ -249,24 +245,25 @@ const renderScene = (sw, sh) => {
}); });
}; };
const createTag = (tagData, index) => { const createTag = (tagData, index, ratio) => {
if (ratio > 1) ratio = ratio * 0.9;
const tagGroup = new PIXI.Container(); const tagGroup = new PIXI.Container();
tagGroup.eventMode = 'static'; tagGroup.eventMode = "static";
tagGroup.cursor = 'pointer'; tagGroup.cursor = "pointer";
tagGroup.on('pointertap', () => emit('tag-click', tagData)); tagGroup.on("pointertap", () => emit("tag-click", tagData));
const text = new PIXI.Text(tagData.name, { const text = new PIXI.Text(tagData.name, {
fontFamily: ['PingFang SC', 'Microsoft YaHei', 'Arial'], fontFamily: ["PingFang SC", "Microsoft YaHei", "Arial"],
fontSize: tagData.size, fontSize: tagData.size * ratio,
fill: tagData.fontColor, fill: tagData.fontColor,
padding: 4, padding: 4 * ratio,
resolution: 2, resolution: 2,
}); });
text.anchor.set(0.5); text.anchor.set(0.5);
const paddingH = 26; const paddingH = 26 * ratio;
const paddingV = 10; const paddingV = 10 * ratio;
let bgWidth = text.width + paddingH; let bgWidth = text.width + paddingH;
let bgHeight = text.height + paddingV; let bgHeight = text.height + paddingV;
@@ -283,14 +280,15 @@ const createTag = (tagData, index) => {
return tagGroup; return tagGroup;
}; };
const createCometTail = (bgColor, tailRotation, parentWidth) => { const createCometTail = (bgColor, tailRotation, parentWidth, ratio) => {
if (ratio > 1) ratio = ratio * 0.9;
const tailGroup = new PIXI.Container(); const tailGroup = new PIXI.Container();
const graphics = new PIXI.Graphics(); const graphics = new PIXI.Graphics();
tailGroup.addChild(graphics); tailGroup.addChild(graphics);
const baseLength = 45; const baseLength = 45 * ratio;
const startWidth = parentWidth * 0.6; const startWidth = parentWidth * 0.6;
const endWidth = 20; const endWidth = 20 * ratio;
let breathPhase = Math.random() * Math.PI * 2; let breathPhase = Math.random() * Math.PI * 2;
const breathSpeed = 0.04; const breathSpeed = 0.04;
@@ -337,35 +335,16 @@ const createCometTail = (bgColor, tailRotation, parentWidth) => {
const handleResize = () => { const handleResize = () => {
const container = getContainerDOM(); const container = getContainerDOM();
if (!app || !container) return; if (!app || !container) return;
app.destroy(true, { children: true, texture: true, baseTexture: true });
const w = container.clientWidth || 300; app = null;
const h = container.clientHeight || 300; initPixi()
app.renderer.resize(w, h);
activeTagInstances.forEach((tag) => {
const meta = tag.userData;
if (!meta) return;
let newX = w / 2 + meta.radius * Math.cos(meta.angle);
let newY = h / 2 + meta.radius * Math.sin(meta.angle);
const safeW = tag.width / 2 + 10;
const safeH = tag.height / 2 + 10;
meta.originalX = clamp(newX, safeW, w - safeW);
meta.originalY = clamp(newY, safeH, h - safeH);
meta.safeH = safeH; // 更新安全高度
tag.x = meta.originalX;
});
}; };
</script> </script>
<style scoped> <style scoped>
.container { .container {
width: 100%; width: 100%;
height: 500rpx; height: 100%;
position: relative; position: relative;
overflow: hidden; overflow: hidden;
color: #b9d3ff; color: #b9d3ff;

View File

@@ -3,7 +3,7 @@
<view class="nav-hidden hidden-animation" :class="{ 'hidden-height': isScrollingDown }"> <view class="nav-hidden hidden-animation" :class="{ 'hidden-height': isScrollingDown }">
<view class="container-search"> <view class="container-search">
<view class="search-input button-click" @click="navTo('/pages/search/search')"> <view class="search-input button-click" @click="navTo('/pages/search/search')">
<uni-icons class="iconsearch" color="#666666" type="search" size="18"></uni-icons> <my-icons class="iconsearch" color="#666666" type="search" size="32"></my-icons>
<text class="inpute">职位名称薪资要求等</text> <text class="inpute">职位名称薪资要求等</text>
</view> </view>
<!-- <view class="chart button-click">职业图谱</view> --> <!-- <view class="chart button-click">职业图谱</view> -->
@@ -42,7 +42,7 @@
</view> </view>
</scroll-view> </scroll-view>
<view class="jobs-add button-click" @click="navTo('/packageA/pages/addPosition/addPosition')"> <view class="jobs-add button-click" @click="navTo('/packageA/pages/addPosition/addPosition')">
<uni-icons class="iconsearch" color="#666D7F" type="plusempty" size="18"></uni-icons> <my-icons class="iconsearch" color="#666D7F" type="plusempty" size="32"></my-icons>
<text>添加</text> <text>添加</text>
</view> </view>
</view> </view>
@@ -121,7 +121,7 @@
</view> </view>
<!-- <view class="falls-card-matchingrate"> <!-- <view class="falls-card-matchingrate">
<view class=""><matchingDegree :job="job"></matchingDegree></view> <view class=""><matchingDegree :job="job"></matchingDegree></view>
<uni-icons type="star" size="30"></uni-icons> <my-icons type="star" size="60"></my-icons>
</view> --> </view> -->
</view> </view>
</view> </view>

View File

@@ -209,7 +209,7 @@
</view> </view>
<!-- <view class="falls-card-matchingrate"> <!-- <view class="falls-card-matchingrate">
<view class=""><matchingDegree :job="job"></matchingDegree></view> <view class=""><matchingDegree :job="job"></matchingDegree></view>
<uni-icons type="star" size="30"></uni-icons> <my-icons type="star" size="60"></my-icons>
</view> --> </view> -->
</view> </view>
<view v-if="!job.education" class="recommend-card" :class="{ isBut: job.isBut }"> <view v-if="!job.education" class="recommend-card" :class="{ isBut: job.isBut }">
@@ -541,6 +541,7 @@ function openFilter() {
} }
showFilter.value = false; showFilter.value = false;
getJobList('refresh'); getJobList('refresh');
emits('onShowTabbar', true);
}, },
cancel: () => { cancel: () => {
showFilter.value = false; showFilter.value = false;
@@ -1013,6 +1014,7 @@ defineExpose({ loadData });
top:0; top:0;
.match-item-container .match-item-container
width:100%; width:100%;
height:400rpx;
margin-top:30rpx; margin-top:30rpx;
position :relative; position :relative;
z-index:1 z-index:1

View File

@@ -23,7 +23,7 @@
</view> </view>
</scroll-view> </scroll-view>
<view class="jobs-add button-click" @click="navTo('/pages/search/search')"> <view class="jobs-add button-click" @click="navTo('/pages/search/search')">
<uni-icons class="iconsearch" color="#666D7F" type="search" size="18"></uni-icons> <my-icons class="iconsearch" color="#666D7F" type="search" size="36"></my-icons>
<text>搜索</text> <text>搜索</text>
</view> </view>
</view> </view>
@@ -55,7 +55,7 @@
<view class="title">{{ job.jobTitle }}</view> <view class="title">{{ job.jobTitle }}</view>
<view class="desc"> <view class="desc">
<image class="point3" src="/static/icon/point3.png"></image> <image class="point3" src="/static/icon/point3.png"></image>
<!-- <uni-icons type="location" size="14"></uni-icons> --> <!-- <my-icons type="location" size="28"></my-icons> -->
<view class="descText">{{ job.companyName }}</view> <view class="descText">{{ job.companyName }}</view>
</view> </view>
</view> </view>

View File

@@ -63,6 +63,12 @@ import { onLoad, onShow } from '@dcloudio/uni-app';
import IndexRefactor from './components/index-refactor.vue'; import IndexRefactor from './components/index-refactor.vue';
import IndexOne from './components/index-one.vue'; import IndexOne from './components/index-one.vue';
import IndexTwo from './components/index-two.vue'; import IndexTwo from './components/index-two.vue';
import useScreenStore from '@/stores/useScreenStore'
const screenStore = useScreenStore()
const {isWideScreen} = screenStore
const loadedMap = reactive([false, false]); const loadedMap = reactive([false, false]);
const swiperRefs = [ref(null), ref(null)]; const swiperRefs = [ref(null), ref(null)];
// const components = [IndexOne, IndexTwo]; // const components = [IndexOne, IndexTwo];
@@ -70,7 +76,7 @@ const components = [IndexRefactor, IndexTwo];
import { storeToRefs } from 'pinia'; import { storeToRefs } from 'pinia';
import { useReadMsg } from '@/stores/useReadMsg'; import { useReadMsg } from '@/stores/useReadMsg';
const { unreadCount } = storeToRefs(useReadMsg()); const { unreadCount } = storeToRefs(useReadMsg());
const showTabbar = ref(true); const showTabbar = ref(false);
const maskFristEntry = ref(false); const maskFristEntry = ref(false);
const disableTouch = ref(false); const disableTouch = ref(false);
@@ -78,14 +84,25 @@ const startPointX = ref(0);
const totalPage = 2; const totalPage = 2;
const THRESHOLD = 5; const THRESHOLD = 5;
watch(
() => screenStore.isWideScreen,
(newVal) => {
showTabbar.value = newVal
},
{ immediate: true }
)
onLoad(() => { onLoad(() => {
// 判断浏览器是否有 fristEntry 第一次进入 // 判断浏览器是否有 fristEntry 第一次进入
let fristEntry = uni.getStorageSync('fristEntry') === false ? false : true; // 默认未读 let fristEntry = uni.getStorageSync('fristEntry') === false ? false : true; // 默认未读
maskFristEntry.value = fristEntry maskFristEntry.value = fristEntry
// if (fristEntry) { if (fristEntry) {
// uni.hideTabBar(); if(!isWideScreen)uni.hideTabBar();
// } else showTabbar.value = false
}else{
if(isWideScreen)showTabbar.value = true
}
// 预加载较重页面 // 预加载较重页面
setTimeout(() => { setTimeout(() => {
uni.preloadPage({ url: '/packageA/pages/post/post' }); uni.preloadPage({ url: '/packageA/pages/post/post' });
@@ -146,7 +163,12 @@ function handleTouchMove(e) {
} }
function changeShowTabbar(val) { function changeShowTabbar(val) {
showTabbar.value = val; if(isWideScreen){
showTabbar.value=val
}else{
if(val)uni.showTabBar()
else uni.hideTabBar()
}
} }
//1 查看消息类型 //1 查看消息类型
@@ -201,12 +223,14 @@ function changeSwiperMsgType(e) {
function closeFristEntry() { function closeFristEntry() {
uni.setStorageSync('fristEntry', false); uni.setStorageSync('fristEntry', false);
maskFristEntry.value = false; maskFristEntry.value = false;
uni.showTabBar(); if(!isWideScreen)uni.showTabBar();
else showTabbar.value=true
} }
function goExperience() { function goExperience() {
closeFristEntry(); closeFristEntry();
uni.showTabBar(); if(!isWideScreen)uni.showTabBar();
else showTabbar.value = true
state.current = 1; state.current = 1;
} }
</script> </script>

View File

@@ -111,7 +111,7 @@
<SelectJobs ref="selectJobsModel"></SelectJobs> <SelectJobs ref="selectJobsModel"></SelectJobs>
<!-- 后门 --> <!-- 后门 -->
<view class="backdoor" @click="loginbackdoor"> <view class="backdoor" @click="loginbackdoor">
<uni-icons type="gift-filled" size="30"></uni-icons> <my-icons type="gift-filled" size="60"></my-icons>
</view> </view>
</AppLayout> </AppLayout>
</template> </template>

View File

@@ -62,7 +62,7 @@
<text class="left-text">素质测评</text> <text class="left-text">素质测评</text>
</view> </view>
<view class="row-right"> <view class="row-right">
<uni-icons color="#909090" type="right" size="14"></uni-icons> <my-icons color="#909090" type="right" size="28"></my-icons>
</view> </view>
</view> </view>
<view class="main-row btn-feel" @click="handleItemClick('模拟面试')"> <view class="main-row btn-feel" @click="handleItemClick('模拟面试')">
@@ -71,7 +71,7 @@
<text class="left-text">AI面试</text> <text class="left-text">AI面试</text>
</view> </view>
<view class="row-right"> <view class="row-right">
<uni-icons color="#909090" type="right" size="14"></uni-icons> <my-icons color="#909090" type="right" size="28"></my-icons>
</view> </view>
</view> </view>
<view class="main-row btn-feel"> <view class="main-row btn-feel">
@@ -96,7 +96,7 @@
</uni-popup> </uni-popup>
</view> </view>
<template #footer> <template #footer>
<Tabbar :currentpage="4"></Tabbar> <Tabbar v-show="showTabbar" :currentpage="4"></Tabbar>
</template> </template>
</AppLayout> </AppLayout>
</template> </template>
@@ -110,9 +110,25 @@ import FileUploader from '@/utils/FileUploader.js';
import config from '@/config'; import config from '@/config';
const { $api, navTo } = inject('globalFunction'); const { $api, navTo } = inject('globalFunction');
import useUserStore from '@/stores/useUserStore'; import useUserStore from '@/stores/useUserStore';
const popup = ref(null); const popup = ref(null);
const { userInfo, Completion, counts } = storeToRefs(useUserStore()); const { userInfo, Completion, counts } = storeToRefs(useUserStore());
import useScreenStore from '@/stores/useScreenStore'
const screenStore = useScreenStore()
const showTabbar = ref(false)
watch(
() => screenStore.isWideScreen,
(newVal) => {
showTabbar.value = newVal
},
{ immediate: true }
)
function logOut() { function logOut() {
popup.value.open(); popup.value.open();
} }

View File

@@ -40,7 +40,7 @@
</swiper> </swiper>
</view> </view>
<Tabbar :currentpage="3"></Tabbar> <Tabbar v-show="showTabbar" :currentpage="3"></Tabbar>
</view> </view>
</view> </view>
</template> </template>
@@ -58,6 +58,19 @@ import { storeToRefs } from 'pinia';
import { useReadMsg } from '@/stores/useReadMsg'; import { useReadMsg } from '@/stores/useReadMsg';
const { unreadCount } = storeToRefs(useReadMsg()); const { unreadCount } = storeToRefs(useReadMsg());
import useScreenStore from '@/stores/useScreenStore'
const screenStore = useScreenStore()
const showTabbar = ref(false)
watch(
() => screenStore.isWideScreen,
(newVal) => {
showTabbar.value = newVal
},
{ immediate: true }
)
const disableTouch = ref(false); const disableTouch = ref(false);
const startPointX = ref(0); const startPointX = ref(0);
const totalPage = 2; const totalPage = 2;

View File

@@ -5,7 +5,7 @@
<text>热门商圈</text> <text>热门商圈</text>
<text class="color_333333 button-click" @click="handleOpenBusinessDistrict"> <text class="color_333333 button-click" @click="handleOpenBusinessDistrict">
更多 更多
<uni-icons type="forward" color="#333333" size="14"></uni-icons> <my-icons type="forward" color="#333333" size="28"></my-icons>
</text> </text>
</view> </view>
<scroll-view class="scroll-head" :scroll-x="true" :scroll-into-view="activeTab" :show-scrollbar="false"> <scroll-view class="scroll-head" :scroll-x="true" :scroll-into-view="activeTab" :show-scrollbar="false">
@@ -46,7 +46,7 @@
</view> </view>
</scroll-view> </scroll-view>
<view class="jobs-add button-click" @click="navTo('/packageA/pages/addPosition/addPosition')"> <view class="jobs-add button-click" @click="navTo('/packageA/pages/addPosition/addPosition')">
<uni-icons class="iconsearch" color="#666D7F" type="plusempty" size="18"></uni-icons> <my-icons class="iconsearch" color="#666D7F" type="plusempty" size="36"></my-icons>
<text>添加</text> <text>添加</text>
</view> </view>
</view> </view>

View File

@@ -51,7 +51,7 @@
</view> </view>
</scroll-view> </scroll-view>
<view class="jobs-add button-click" @click="navTo('/packageA/pages/addPosition/addPosition')"> <view class="jobs-add button-click" @click="navTo('/packageA/pages/addPosition/addPosition')">
<uni-icons class="iconsearch" color="#666D7F" type="plusempty" size="18"></uni-icons> <my-icons class="iconsearch" color="#666D7F" type="plusempty" size="36"></my-icons>
<text>添加</text> <text>添加</text>
</view> </view>
</view> </view>

View File

@@ -72,7 +72,7 @@
</view> </view>
</scroll-view> </scroll-view>
<view class="jobs-add button-click" @click="navTo('/packageA/pages/addPosition/addPosition')"> <view class="jobs-add button-click" @click="navTo('/packageA/pages/addPosition/addPosition')">
<uni-icons class="iconsearch" color="#666D7F" type="plusempty" size="18"></uni-icons> <my-icons class="iconsearch" color="#666D7F" type="plusempty" size="36"></my-icons>
<text>添加</text> <text>添加</text>
</view> </view>
</view> </view>

View File

@@ -42,7 +42,7 @@
</view> </view>
</scroll-view> </scroll-view>
<view class="jobs-add button-click" @click="navTo('/packageA/pages/addPosition/addPosition')"> <view class="jobs-add button-click" @click="navTo('/packageA/pages/addPosition/addPosition')">
<uni-icons class="iconsearch" color="#666D7F" type="plusempty" size="18"></uni-icons> <my-icons class="iconsearch" color="#666D7F" type="plusempty" size="36"></my-icons>
<text>添加</text> <text>添加</text>
</view> </view>
</view> </view>

View File

@@ -9,13 +9,13 @@
@click="navBack" @click="navBack"
></image> ></image>
<view class="search-box"> <view class="search-box">
<uni-icons <my-icons
class="iconsearch" class="iconsearch"
color="#666666" color="#666666"
type="search" type="search"
size="18" size="36"
@confirm="searchCollection" @confirm="searchCollection"
></uni-icons> ></my-icons>
<input <input
class="inputed" class="inputed"
type="text" type="text"
@@ -73,7 +73,7 @@
<view class="content-top"> <view class="content-top">
<view class="top-left">历史搜索</view> <view class="top-left">历史搜索</view>
<view class="top-right button-click" @click="remove"> <view class="top-right button-click" @click="remove">
<uni-icons type="trash" color="#C1C1C1" size="20"></uni-icons> <my-icons type="trash" color="#C1C1C1" size="40"></my-icons>
</view> </view>
</view> </view>
<view class="content-history"> <view class="content-history">

297
stores/useScreenStore.js Normal file
View File

@@ -0,0 +1,297 @@
import { defineStore } from 'pinia';
import { ref, computed } from 'vue';
// 屏幕检测管理器类
class ScreenDetectionManager {
constructor() {
this.WIDE_SCREEN_CSS_ID = 'wide-screen-css';
this.WIDE_SCREEN_CSS_PATH = '../common/wide-screen.css';
this.resizeTimer = null;
this.resizeListeners = [];
this.cssLink = null;
}
// 获取屏幕宽度
getScreenWidth() {
if (typeof window === 'undefined') return 0;
// 优先使用 uni.getSystemInfo
if (typeof uni !== 'undefined' && uni.getSystemInfo) {
return new Promise((resolve) => {
uni.getSystemInfo({
success: (res) => {
const width = res.screenWidth || res.windowWidth || window.innerWidth;
resolve(width);
},
fail: () => {
resolve(this.getWindowWidth());
}
});
});
}
return Promise.resolve(this.getWindowWidth());
}
// 备用方案:使用 window 对象
getWindowWidth() {
if (typeof window === 'undefined') return 0;
return window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
}
// 检测折叠屏
checkVisualViewport() {
if (window.visualViewport?.segments?.length > 1) {
return {
foldable: true,
count: window.visualViewport.segments.length - 1
}
}
else {
return {
foldable: false,
count: 1
}
}
}
// 动态加载 CSS
loadWideScreenCSS() {
if (typeof window === 'undefined' || this.cssLink) return null;
try {
this.cssLink = document.createElement('link');
this.cssLink.id = this.WIDE_SCREEN_CSS_ID;
this.cssLink.rel = 'stylesheet';
this.cssLink.href = this.WIDE_SCREEN_CSS_PATH;
// 添加加载成功/失败监听
this.cssLink.onload = () => {
console.log('🎨 宽屏 CSS 文件加载成功');
};
this.cssLink.onerror = () => {
console.error('❌ 宽屏 CSS 文件加载失败');
this.cssLink = null;
};
document.head.appendChild(this.cssLink);
return this.cssLink;
} catch (error) {
console.error('加载 CSS 失败:', error);
this.cssLink = null;
return null;
}
}
// 移除 CSS
removeWideScreenCSS() {
if (this.cssLink && this.cssLink.parentNode) {
try {
this.cssLink.parentNode.removeChild(this.cssLink);
this.cssLink = null;
console.log('🗑️ 宽屏 CSS 文件已移除');
return true;
} catch (error) {
console.error('移除 CSS 失败:', error);
return false;
}
}
return false;
}
// 更新 CSS 状态
updateWideScreenCSS(isWideScreen) {
if (isWideScreen) {
return this.loadWideScreenCSS();
} else {
return this.removeWideScreenCSS();
}
}
//显示/隐藏默认tabbar
updateTabbar(isWideScreen){
if(isWideScreen) uni.hideTabBar()
else uni.showTabBar()
}
// 添加 resize 监听器
addResizeListener(callback, delay = 250) {
if (typeof window === 'undefined') return () => {};
const handler = () => {
clearTimeout(this.resizeTimer);
this.resizeTimer = setTimeout(() => {
callback();
}, delay);
};
window.addEventListener('resize', handler);
this.resizeListeners.push({ callback, handler });
// 返回清理函数
return () => this.removeResizeListener(callback);
}
// 移除 resize 监听器
removeResizeListener(callback) {
const index = this.resizeListeners.findIndex(item => item.callback === callback);
if (index > -1) {
const { handler } = this.resizeListeners[index];
window.removeEventListener('resize', handler);
this.resizeListeners.splice(index, 1);
}
}
}
// 创建屏幕状态 store
const useScreenStore = defineStore('screen', () => {
// 状态
const screenWidth = ref(0);
const isInitialized = ref(false);
const isLoading = ref(false);
const foldFeature = ref(false);
const foldCount = ref(0);
const isWideScreen = computed(() => {
return screenWidth.value > 1080;
});
// 添加屏幕分类的计算属性
const screenCategory = computed(() => {
const width = screenWidth.value;
if (width <= 768) return 'mobile';
if (width <= 1024) return 'tablet';
if (width <= 1440) return 'desktop';
return 'ultra-wide';
});
// 添加更多响应式计算属性
const isMobile = computed(() => screenCategory.value === 'mobile');
const isTablet = computed(() => screenCategory.value === 'tablet');
const isDesktop = computed(() => screenCategory.value === 'desktop' || screenCategory.value === 'ultra-wide');
// 管理器实例
const manager = new ScreenDetectionManager();
// 初始化屏幕检测
const initScreenDetection = async () => {
if (isLoading.value || isInitialized.value) return;
isLoading.value = true;
try {
// 检测屏幕状态
const width = await manager.getScreenWidth();
const { foldable, count } = manager.checkVisualViewport();
foldFeature.value = foldable;
foldCount.value = count;
screenWidth.value = width;
isInitialized.value = true;
console.log(`📱 屏幕检测完成: ${width}px, 宽屏: ${isWideScreen.value}`);
console.log(`是否为折叠屏: ${foldFeature.value},折叠屏数量:${foldCount.value}`);
// 根据状态加载或移除 CSS
manager.updateWideScreenCSS(isWideScreen.value);
manager.updateTabbar(isWideScreen.value);
// 设置 resize 监听
setupResizeListener();
return {
screenWidth: width,
isWideScreen: isWideScreen.value,
foldable,
count
};
} catch (error) {
console.error('初始化屏幕检测失败:', error);
return null;
} finally {
isLoading.value = false;
}
};
// 手动更新屏幕状态
const updateScreenStatus = async () => {
try {
const width = await manager.getScreenWidth();
const { foldable, count } = manager.checkVisualViewport();
// 保存旧状态
const oldWidth = screenWidth.value;
const oldIsWideScreen = isWideScreen.value;
const oldFoldable = foldFeature.value;
const oldFoldCount = foldCount.value;
// 更新状态
screenWidth.value = width;
foldFeature.value = foldable;
foldCount.value = count;
// 检查宽屏状态是否发生变化
if (oldIsWideScreen !== isWideScreen.value) {
console.log(`🔄 屏幕状态变化: ${oldIsWideScreen ? '宽屏' : '非宽屏'} -> ${isWideScreen.value ? '宽屏' : '非宽屏'}`);
console.log(`屏幕宽度变化: ${oldWidth}px -> ${width}px`);
manager.updateWideScreenCSS(isWideScreen.value);
manager.updateTabbar(isWideScreen.value);
}
// 检查折叠屏状态是否发生变化
if (oldFoldable !== foldable || oldFoldCount !== count) {
console.log(`折叠屏状态变化: ${oldFoldable ? '是' : '否'}->${foldable ? '是' : '否'}, 折叠数: ${oldFoldCount}->${count}`);
}
return {
screenWidth: width,
isWideScreen: isWideScreen.value,
foldable,
count
};
} catch (error) {
console.error('更新屏幕状态失败:', error);
return null;
}
};
// 设置 resize 监听
let cleanupResizeListener = () => {};
const setupResizeListener = () => {
if (typeof window === 'undefined') return;
cleanupResizeListener = manager.addResizeListener(async () => {
await updateScreenStatus();
}, 300);
};
// 手动触发屏幕检测
const detectScreen = () => {
return updateScreenStatus();
};
return {
// 状态
foldFeature,
foldCount,
screenWidth,
isInitialized,
isLoading,
// 响应式计算属性
isWideScreen,
screenCategory,
isMobile,
isTablet,
isDesktop,
// 方法
initScreenDetection,
updateScreenStatus,
detectScreen,
};
});
export default useScreenStore;