diff --git a/env/.env b/env/.env index a2bda3b..dc452bf 100644 --- a/env/.env +++ b/env/.env @@ -19,14 +19,14 @@ VITE_APP_PUBLIC_BASE=/ # 默认后台请求地址 # 不同命令会按 mode 叠加读取 .env.development / .env.test / .env.production。 # 微信小程序如果没有配置下面的专用地址,也会回退使用这个值。 -VITE_SERVER_BASEURL='' +VITE_UNI_HALO_BASEURL='' # 备注:如果后台带统一前缀,则也要加到后面,eg: https://blog.xiaoxiaomo.cn/api # 微信小程序专用后台请求地址,按微信开发者工具 envVersion 区分。 -# 不配置时会回退使用 VITE_SERVER_BASEURL。 -# VITE_SERVER_BASEURL__WEIXIN_DEVELOP = 'https://dev.xxx.com' -# VITE_SERVER_BASEURL__WEIXIN_TRIAL = 'https://trial.xxx.com' -# VITE_SERVER_BASEURL__WEIXIN_RELEASE = 'https://prod.xxx.com' +# 不配置时会回退使用 VITE_UNI_HALO_BASEURL。 +# VITE_UNI_HALO_BASEURL__WEIXIN_DEVELOP = 'https://dev.xxx.com' +# VITE_UNI_HALO_BASEURL__WEIXIN_TRIAL = 'https://trial.xxx.com' +# VITE_UNI_HALO_BASEURL__WEIXIN_RELEASE = 'https://prod.xxx.com' # h5是否需要配置代理 VITE_APP_PROXY_ENABLE=false @@ -34,7 +34,7 @@ VITE_APP_PROXY_ENABLE=false VITE_APP_PROXY_PREFIX='/dev-api' # 第二个请求地址 (目前alova中可以使用) -VITE_SERVER_BASEURL_SECONDARY='https://blog.xiaoxiaomo.cn' +VITE_UNI_HALO_BASEURL_SECONDARY='https://blog.xiaoxiaomo.cn' # 认证模式,'single' | 'double' ==> 单token | 双token VITE_AUTH_MODE='single' diff --git a/env/.env.development b/env/.env.development index 287405a..78c92e0 100644 --- a/env/.env.development +++ b/env/.env.development @@ -6,4 +6,4 @@ VITE_DELETE_CONSOLE=false VITE_SHOW_SOURCEMAP=false # development mode 后台请求地址 -VITE_SERVER_BASEURL='https://www.yijunzhao.cn' +VITE_UNI_HALO_BASEURL='https://www.yijunzhao.cn' diff --git a/env/.env.production b/env/.env.production index 9a234e9..82f9901 100644 --- a/env/.env.production +++ b/env/.env.production @@ -6,4 +6,4 @@ VITE_DELETE_CONSOLE=true VITE_SHOW_SOURCEMAP=false # production mode 后台请求地址 -# VITE_SERVER_BASEURL = 'https://prod.xxx.com' +# VITE_UNI_HALO_BASEURL = 'https://prod.xxx.com' diff --git a/env/.env.test b/env/.env.test index 557ad61..9f701ca 100644 --- a/env/.env.test +++ b/env/.env.test @@ -6,4 +6,4 @@ VITE_DELETE_CONSOLE=false VITE_SHOW_SOURCEMAP=false # test mode 后台请求地址 -# VITE_SERVER_BASEURL = 'https://test.xxx.com' +# VITE_UNI_HALO_BASEURL = 'https://test.xxx.com' diff --git a/src/api/halo-base/stats.ts b/src/api/halo-base/stats.ts index b1c4d75..9bad7b1 100644 --- a/src/api/halo-base/stats.ts +++ b/src/api/halo-base/stats.ts @@ -12,7 +12,7 @@ export interface SiteStatsVo { * 获取站点统计信息 * @returns 站点统计信息 */ -export function getSiteStats() { +export function querySiteStats() { return http.Get(`/apis/api.halo.run/v1alpha1/stats/-`, { meta: { isHalo: true }, }) diff --git a/src/components/c-template.vue b/src/components/c-template.vue new file mode 100644 index 0000000..11a872a --- /dev/null +++ b/src/components/c-template.vue @@ -0,0 +1,9 @@ + + + diff --git a/src/components/home/uh-profile-card.vue b/src/components/home/uh-profile-card.vue new file mode 100644 index 0000000..91fc246 --- /dev/null +++ b/src/components/home/uh-profile-card.vue @@ -0,0 +1,72 @@ + + + + + diff --git a/src/components/home/uh-recommend-category.vue b/src/components/home/uh-recommend-category.vue new file mode 100644 index 0000000..30233d8 --- /dev/null +++ b/src/components/home/uh-recommend-category.vue @@ -0,0 +1,76 @@ + + + diff --git a/src/components/post-card/post-card.vue b/src/components/uh-post-card/uh-post-card.vue similarity index 100% rename from src/components/post-card/post-card.vue rename to src/components/uh-post-card/uh-post-card.vue diff --git a/src/env.d.ts b/src/env.d.ts index b1a4533..5bd20f0 100644 --- a/src/env.d.ts +++ b/src/env.d.ts @@ -14,13 +14,13 @@ interface ImportMetaEnv { /** 服务端口号 */ readonly VITE_SERVER_PORT: string /** 后台接口地址 */ - readonly VITE_SERVER_BASEURL: string - /** 微信小程序开发版后台接口地址,不配置则使用 VITE_SERVER_BASEURL */ - readonly VITE_SERVER_BASEURL__WEIXIN_DEVELOP?: string - /** 微信小程序体验版后台接口地址,不配置则使用 VITE_SERVER_BASEURL */ - readonly VITE_SERVER_BASEURL__WEIXIN_TRIAL?: string - /** 微信小程序正式版后台接口地址,不配置则使用 VITE_SERVER_BASEURL */ - readonly VITE_SERVER_BASEURL__WEIXIN_RELEASE?: string + readonly VITE_UNI_HALO_BASEURL: string + /** 微信小程序开发版后台接口地址,不配置则使用 VITE_UNI_HALO_BASEURL */ + readonly VITE_UNI_HALO_BASEURL__WEIXIN_DEVELOP?: string + /** 微信小程序体验版后台接口地址,不配置则使用 VITE_UNI_HALO_BASEURL */ + readonly VITE_UNI_HALO_BASEURL__WEIXIN_TRIAL?: string + /** 微信小程序正式版后台接口地址,不配置则使用 VITE_UNI_HALO_BASEURL */ + readonly VITE_UNI_HALO_BASEURL__WEIXIN_RELEASE?: string /** H5是否需要代理 */ readonly VITE_APP_PROXY_ENABLE: 'true' | 'false' /** H5是否需要代理,需要的话有个前缀 */ diff --git a/src/http/alova.ts b/src/http/alova.ts index ad7cba5..61efe22 100644 --- a/src/http/alova.ts +++ b/src/http/alova.ts @@ -9,8 +9,8 @@ import { ContentTypeEnum, ResultEnum, ShowMessage } from './tools/enum' // 配置动态Tag export const API_DOMAINS = { - DEFAULT: import.meta.env.VITE_SERVER_BASEURL, - SECONDARY: import.meta.env.VITE_SERVER_BASEURL_SECONDARY, + DEFAULT: import.meta.env.VITE_UNI_HALO_BASEURL, + SECONDARY: import.meta.env.VITE_UNI_HALO_BASEURL_SECONDARY, } /** diff --git a/src/pages/home/home.vue b/src/pages/home/home.vue new file mode 100644 index 0000000..71b23cc --- /dev/null +++ b/src/pages/home/home.vue @@ -0,0 +1,228 @@ + + + + + diff --git a/src/pages/index/index.vue b/src/pages/index/index.vue index 4a600aa..994ad0f 100644 --- a/src/pages/index/index.vue +++ b/src/pages/index/index.vue @@ -1,314 +1,25 @@ - - diff --git a/src/store/config.ts b/src/store/config.ts index 4f042b4..4b67515 100644 --- a/src/store/config.ts +++ b/src/store/config.ts @@ -4,7 +4,7 @@ import type { IUniHaloConfig } from '@/api/halo-plugin/uni-halo' import { deepMerge } from '@/utils/base/deepMerge' const defaultConfig: IUniHaloConfig = { - baseURL: import.meta.env.VITE_SERVER_BASEURL, + baseURL: import.meta.env.VITE_UNI_HALO_BASEURL, } const ConfigsStoreKey = 'UNI_HALO_CONFIG' diff --git a/src/tabbar/config.ts b/src/tabbar/config.ts index c3cb8eb..d504d0b 100644 --- a/src/tabbar/config.ts +++ b/src/tabbar/config.ts @@ -42,7 +42,7 @@ export const nativeTabbarList: NativeTabBarItem[] = [ export const customTabbarList: CustomTabBarItem[] = [ { text: '%tabbar.home%', - pagePath: 'pages/index/index', + pagePath: 'pages/home/home', iconType: 'uiLib', icon: 'home', }, diff --git a/src/utils/base/digital.ts b/src/utils/base/digital.ts new file mode 100644 index 0000000..fcc1041 --- /dev/null +++ b/src/utils/base/digital.ts @@ -0,0 +1,31 @@ +/** + * 数字单位格式化 k / w / m / b + * @param num 数字/数字字符串 + * @param decimal 保留小数位数,默认 1 + * @returns 格式化结果 + */ +export function formatNumberUnit(num: number | string, decimal = 1): string { + const n = Number(num) + if (Number.isNaN(n)) + return '0' + + // 单位映射:阈值 / 除数 / 单位 + const units = [ + { threshold: 1e9, divisor: 1e9, unit: 'b' }, + { threshold: 1e6, divisor: 1e6, unit: 'm' }, + { threshold: 1e4, divisor: 1e4, unit: 'w' }, + { threshold: 1e3, divisor: 1e3, unit: 'k' }, + ] + + for (const item of units) { + if (n >= item.threshold) { + const val = n / item.divisor + const fixedVal = val.toFixed(decimal) + // 去掉末尾 .0 + return fixedVal.replace(/\.0$/, '') + item.unit + } + } + + // 小于 1000 直接返回 + return String(n) +} diff --git a/src/utils/base/test.ts b/src/utils/base/test.ts index 96a185f..6392261 100644 --- a/src/utils/base/test.ts +++ b/src/utils/base/test.ts @@ -1,3 +1,11 @@ +/** + * 验证URL格式 + */ +function url(value: string): boolean { + const urlRegex = /^(?:https?:)?\/\/(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}(?::\d+)?(?:\/\S*)?$/ + return urlRegex.test(value.trim()) +} + /** * 验证电子邮箱格式 */ @@ -223,6 +231,7 @@ function string(value: any) { } export default { + url, email, mobile, date, diff --git a/src/utils/imageHelper.ts b/src/utils/imageHelper.ts new file mode 100644 index 0000000..dcd8096 --- /dev/null +++ b/src/utils/imageHelper.ts @@ -0,0 +1,14 @@ +import { completeUrl } from '@/utils/url' +import { getRandomUrl } from '@/utils/randomResources' + +/** + * 图片封面处理 + * @param cover 图片封面 + * @returns 处理后的图片封面 + */ +export function cover(cover: string) { + if (cover.trim()) { + return completeUrl(cover) + } + return getRandomUrl() +} diff --git a/src/utils/index.ts b/src/utils/index.ts index 99136f9..ab0dbf5 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -138,12 +138,12 @@ export function isCurrentPageTabbar() { */ export function getEnvBaseUrl() { // 请求基准地址 - let baseUrl = import.meta.env.VITE_SERVER_BASEURL + let baseUrl = import.meta.env.VITE_UNI_HALO_BASEURL // # 有些同学可能需要在微信小程序里面根据 develop、trial、release 分别设置上传地址,参考代码如下。 - const VITE_SERVER_BASEURL__WEIXIN_DEVELOP = 'https://ukw0y1.laf.run' - const VITE_SERVER_BASEURL__WEIXIN_TRIAL = 'https://ukw0y1.laf.run' - const VITE_SERVER_BASEURL__WEIXIN_RELEASE = 'https://ukw0y1.laf.run' + const VITE_UNI_HALO_BASEURL__WEIXIN_DEVELOP = 'https://ukw0y1.laf.run' + const VITE_UNI_HALO_BASEURL__WEIXIN_TRIAL = 'https://ukw0y1.laf.run' + const VITE_UNI_HALO_BASEURL__WEIXIN_RELEASE = 'https://ukw0y1.laf.run' // 微信小程序端环境区分 if (isMpWeixin) { @@ -153,13 +153,13 @@ export function getEnvBaseUrl() { switch (envVersion) { case 'develop': - baseUrl = VITE_SERVER_BASEURL__WEIXIN_DEVELOP || baseUrl + baseUrl = VITE_UNI_HALO_BASEURL__WEIXIN_DEVELOP || baseUrl break case 'trial': - baseUrl = VITE_SERVER_BASEURL__WEIXIN_TRIAL || baseUrl + baseUrl = VITE_UNI_HALO_BASEURL__WEIXIN_TRIAL || baseUrl break case 'release': - baseUrl = VITE_SERVER_BASEURL__WEIXIN_RELEASE || baseUrl + baseUrl = VITE_UNI_HALO_BASEURL__WEIXIN_RELEASE || baseUrl break } } diff --git a/src/utils/randomResources.ts b/src/utils/randomResources.ts index ca07d91..f0da009 100644 --- a/src/utils/randomResources.ts +++ b/src/utils/randomResources.ts @@ -22,7 +22,7 @@ export function getPicsum(width: number = 800, height?: number) { /** * 获取随机图片URL - * @param type 图片类型 + * @param type 图片类型 默认pc * @returns 随机图片URL */ export function getRandomUrl(type?: randomUrlKeys) { diff --git a/src/utils/uploadFile.ts b/src/utils/uploadFile.ts index 71848a2..ee1456b 100644 --- a/src/utils/uploadFile.ts +++ b/src/utils/uploadFile.ts @@ -19,7 +19,7 @@ */ export const uploadFileUrl = { /** 用户头像上传地址 */ - USER_AVATAR: `${import.meta.env.VITE_SERVER_BASEURL}/user/avatar`, + USER_AVATAR: `${import.meta.env.VITE_UNI_HALO_BASEURL}/user/avatar`, } /** diff --git a/src/utils/url.ts b/src/utils/url.ts index 89c856c..e894657 100644 --- a/src/utils/url.ts +++ b/src/utils/url.ts @@ -1,13 +1,16 @@ -const HALO_BASEURL = import.meta.env.VITE_SERVER_BASEURL +import test from '@/utils/base/test' + +const UNI_HALO_BASEURL = import.meta.env.VITE_UNI_HALO_BASEURL /** -* Complete the URL with the base URL -* @param url The URL to be completed -* @returns The completed URL -*/ -export function completeUrl (url: string): string { - if (url.startsWith('http://') || url.startsWith('https://')) { - return url - } - return HALO_BASEURL + url -} \ No newline at end of file + * 补全URL + * @description 如果URL以http://或https://开头,则直接返回URL;否则,在URL前添加HALO_BASEURL + * @param url URL字符串 + * @returns 补全后的URL字符串 + */ +export function completeUrl(url: string): string { + if (test.url(url)) { + return url + } + return UNI_HALO_BASEURL + url +} diff --git a/vite.config.ts b/vite.config.ts index b8bce8f..f09e64f 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -57,7 +57,7 @@ export default defineConfig(({ command, mode }) => { const localEnv = loadEnv(mode, envDir, '') const { VITE_APP_PORT, - VITE_SERVER_BASEURL, + VITE_UNI_HALO_BASEURL, VITE_APP_TITLE, VITE_DELETE_CONSOLE, VITE_APP_PUBLIC_BASE, @@ -191,7 +191,7 @@ export default defineConfig(({ command, mode }) => { proxy: JSON.parse(VITE_APP_PROXY_ENABLE) ? { [VITE_APP_PROXY_PREFIX]: { - target: VITE_SERVER_BASEURL, + target: VITE_UNI_HALO_BASEURL, changeOrigin: true, // 后端有/api前缀则不做处理,没有则需要去掉 rewrite: path =>