From bd678b0112be4c55a9698dbdc808318d33460179 Mon Sep 17 00:00:00 2001 From: owenchen Date: Wed, 14 Oct 2026 14:48:29 +0800 Subject: [PATCH] ow --- .../youjiala/src/common/http.interceptor.ts | 9 - .../file-breadcrumb/file-breadcrumb.vue | 203 ++++++++++ .../file-grid-list/file-grid-list.vue | 269 +++++++++++++ .../file-tab-filter/file-tab-filter.vue | 121 ++++++ .../float-add-btn/float-add-btn.vue | 39 ++ .../components/page-navbar/page-navbar.vue | 120 ++++++ .../components/quick-entry/quick-entry.vue | 77 ++++ .../components/search-input/search-input.vue | 78 ++++ uniapp/youjiala/src/composables/index.ts | 2 + .../youjiala/src/composables/useDmsFiles.ts | 286 ++++++++++++++ .../src/composables/useThemeGradient.ts | 48 +++ .../youjiala/src/data/custom/fileBrowser.ts | 47 +++ uniapp/youjiala/src/locale/lang/en-US.json | 35 ++ uniapp/youjiala/src/locale/lang/zh-CN.json | 35 ++ uniapp/youjiala/src/md/theme.md | 82 ++++ uniapp/youjiala/src/pages.json | 10 +- uniapp/youjiala/src/pages/login/login.vue | 17 +- uniapp/youjiala/src/pages/tab/file.vue | 364 ++++++++++++++++-- uniapp/youjiala/src/pages/tab/mine.vue | 165 +++++++- uniapp/youjiala/src/router/nav-guard.ts | 22 +- uniapp/youjiala/src/router/routes.ts | 20 +- uniapp/youjiala/src/static/logo.png | Bin 15206 -> 63640 bytes 22 files changed, 1968 insertions(+), 81 deletions(-) create mode 100644 uniapp/youjiala/src/components/file-breadcrumb/file-breadcrumb.vue create mode 100644 uniapp/youjiala/src/components/file-grid-list/file-grid-list.vue create mode 100644 uniapp/youjiala/src/components/file-tab-filter/file-tab-filter.vue create mode 100644 uniapp/youjiala/src/components/float-add-btn/float-add-btn.vue create mode 100644 uniapp/youjiala/src/components/page-navbar/page-navbar.vue create mode 100644 uniapp/youjiala/src/components/quick-entry/quick-entry.vue create mode 100644 uniapp/youjiala/src/components/search-input/search-input.vue create mode 100644 uniapp/youjiala/src/composables/useDmsFiles.ts create mode 100644 uniapp/youjiala/src/composables/useThemeGradient.ts create mode 100644 uniapp/youjiala/src/data/custom/fileBrowser.ts create mode 100644 uniapp/youjiala/src/md/theme.md diff --git a/uniapp/youjiala/src/common/http.interceptor.ts b/uniapp/youjiala/src/common/http.interceptor.ts index 273bfa2..943a61b 100644 --- a/uniapp/youjiala/src/common/http.interceptor.ts +++ b/uniapp/youjiala/src/common/http.interceptor.ts @@ -69,15 +69,6 @@ export function clearLoginState() { uni.removeStorageSync(JWT_STORAGE_KEY); } -/** - * 是否已有登录会话:只认请求层的 AccessToken(令牌唯一来源,与 nav-guard 口径一致)。 - * 不在此判过期——AccessToken 过期时请求层会拿 RefreshToken 自动续期,续期失败再 goLogin 退回登录页, - * 所以"登录过"就足以决定冷启动是否直接进 dashboard。 - */ -export function hasLoginSession(): boolean { - return !!getJwtInfo()?.AccessToken; -} - function getToken(): string { return getJwtInfo()?.AccessToken ?? ""; } diff --git a/uniapp/youjiala/src/components/file-breadcrumb/file-breadcrumb.vue b/uniapp/youjiala/src/components/file-breadcrumb/file-breadcrumb.vue new file mode 100644 index 0000000..165f5c2 --- /dev/null +++ b/uniapp/youjiala/src/components/file-breadcrumb/file-breadcrumb.vue @@ -0,0 +1,203 @@ + + + + + diff --git a/uniapp/youjiala/src/components/file-grid-list/file-grid-list.vue b/uniapp/youjiala/src/components/file-grid-list/file-grid-list.vue new file mode 100644 index 0000000..4a33618 --- /dev/null +++ b/uniapp/youjiala/src/components/file-grid-list/file-grid-list.vue @@ -0,0 +1,269 @@ + + + + + diff --git a/uniapp/youjiala/src/components/file-tab-filter/file-tab-filter.vue b/uniapp/youjiala/src/components/file-tab-filter/file-tab-filter.vue new file mode 100644 index 0000000..b40d97a --- /dev/null +++ b/uniapp/youjiala/src/components/file-tab-filter/file-tab-filter.vue @@ -0,0 +1,121 @@ + + + + + diff --git a/uniapp/youjiala/src/components/float-add-btn/float-add-btn.vue b/uniapp/youjiala/src/components/float-add-btn/float-add-btn.vue new file mode 100644 index 0000000..24e4f81 --- /dev/null +++ b/uniapp/youjiala/src/components/float-add-btn/float-add-btn.vue @@ -0,0 +1,39 @@ + + + + + diff --git a/uniapp/youjiala/src/components/page-navbar/page-navbar.vue b/uniapp/youjiala/src/components/page-navbar/page-navbar.vue new file mode 100644 index 0000000..972ad29 --- /dev/null +++ b/uniapp/youjiala/src/components/page-navbar/page-navbar.vue @@ -0,0 +1,120 @@ + + + + + diff --git a/uniapp/youjiala/src/components/quick-entry/quick-entry.vue b/uniapp/youjiala/src/components/quick-entry/quick-entry.vue new file mode 100644 index 0000000..5682de4 --- /dev/null +++ b/uniapp/youjiala/src/components/quick-entry/quick-entry.vue @@ -0,0 +1,77 @@ + + + + + diff --git a/uniapp/youjiala/src/components/search-input/search-input.vue b/uniapp/youjiala/src/components/search-input/search-input.vue new file mode 100644 index 0000000..72a1d91 --- /dev/null +++ b/uniapp/youjiala/src/components/search-input/search-input.vue @@ -0,0 +1,78 @@ + + + + + diff --git a/uniapp/youjiala/src/composables/index.ts b/uniapp/youjiala/src/composables/index.ts index cfbeaa6..497993d 100644 --- a/uniapp/youjiala/src/composables/index.ts +++ b/uniapp/youjiala/src/composables/index.ts @@ -2,4 +2,6 @@ export * from "./useAdminList"; export * from "./useAdminMenu"; export * from "./useAdminPick"; export * from "./useAuthGuard"; +export * from "./useDmsFiles"; export * from "./useLang"; +export * from "./useThemeGradient"; diff --git a/uniapp/youjiala/src/composables/useDmsFiles.ts b/uniapp/youjiala/src/composables/useDmsFiles.ts new file mode 100644 index 0000000..63c5a82 --- /dev/null +++ b/uniapp/youjiala/src/composables/useDmsFiles.ts @@ -0,0 +1,286 @@ +/** + * 文件页数据源:复刻旧 WebVue DmsFileEnquiry.vue 的调用链(D:\Docker\WebVue\src\views\master) + * + * 1. FindDmsFolders() -> SelectOption[]:rps[0] 是空占位项,rps[1] 才是根目录「我的网盘」, + * 旧页面 rootPath = rps[1].BindValue 的取值习惯原样保留; + * 2. FindBySearchCriteria(criteria):Filter = [FilePath single 当前目录], + * 路径为空则不挂 FilePath 过滤查全量(旧 onSearchByFilePath 对空 rootPath 的分支); + * 有关键字再追加 [OrgFileName text contain](旧 onSearchByName 的两段过滤); + * limit 给 999999 一次拉全(旧页面同值,目录场景不分页); + * 3. 结果文件夹置顶(旧页面 orderBy IsDirectoryIndc desc)。 + * + * 目录导航:点文件夹把该记录的 FileName 当作新的 FilePath 重查(旧 onOpenFolder -> + * onChangeFolder),pathStack 记录面包屑供返回;类型判定优先看后端 FileCategory + * (P/V/A/D/L,见 FileTypePolicy 常量),缺省时按扩展名兜底(fileTypePolicy)。 + */ +import type { DmsFileUploadViewDisplayData } from "@/data/auto/dmsFileUploadViewDisplayData"; +import type { FileItem, FileKind, PathNode } from "@/data/custom/fileBrowser"; +import { useLocale } from "uview-pro"; +import { computed, ref } from "vue"; +import { DmsFileSearchCriteria } from "@/data/auto/dmsFileSearchCriteria"; +import { DmsFileUploadViewDisplayData as UploadView } from "@/data/auto/dmsFileUploadViewDisplayData"; +import { SearchFilter } from "@/data/auto/searchFilter"; +import fileTypePolicy, { FileTypePolicy } from "@/policy/custom/fileTypePolicy"; +import dmsFileService from "@/service/master/dmsFileService"; + +/** 目录场景一次拉全,与旧页面 pagingParams.pageSize 同值 */ +const FIND_LIMIT = 999999; + +/** FileCategory 编码 -> 页面分类;缺省或未知编码走扩展名兜底 */ +function kindOf(record: DmsFileUploadViewDisplayData): FileKind { + if (record.IsDirectoryIndc === "Y") { + return "folder"; + } + switch (record.FileCategory) { + case FileTypePolicy.PHOTO: + return "image"; + case FileTypePolicy.VIDEO: + return "video"; + case FileTypePolicy.AUDIO: + return "audio"; + case FileTypePolicy.DOCUMENT: + case FileTypePolicy.LYRIC: + return "document"; + } + const key = record.OrderKey || record.OrgFileName || ""; + if (fileTypePolicy.isImage(key)) { + return "image"; + } + if (fileTypePolicy.isVideo(key)) { + return "video"; + } + if (fileTypePolicy.isAudio(key)) { + return "audio"; + } + return "document"; +} + +/** 兼容 "2026-05-13 08:17:00" 这类 iOS Date 解析失败的格式 */ +function parseTime(value: Date | string | undefined): number { + if (!value) { + return 0; + } + if (value instanceof Date) { + return value.getTime(); + } + const normalized = value + .replace(/-/g, "/") + .replace(/\.\d+Z?$/, "") + .replace(/T/, " ") + .replace(/Z$/, ""); + const time = new Date(normalized).getTime(); + return Number.isNaN(time) ? 0 : time; +} + +/** 字节数 -> 可读大小文案;0/缺省返回空串(文件夹不显示大小) */ +function formatSize(bytes: number | undefined): string { + if (!bytes || bytes <= 0) { + return ""; + } + const units = ["B", "KB", "MB", "GB", "TB"]; + let value = bytes; + let i = 0; + while (value >= 1024 && i < units.length - 1) { + value /= 1024; + i += 1; + } + return `${i === 0 ? value : value.toFixed(1)} ${units[i]}`; +} + +export function useDmsFiles() { + const { t } = useLocale(); + + const files = ref([]); + /** FileId -> 原始记录:预览/下载/删除等后续动作要拿全字段 */ + const records = ref(new Map()); + const loading = ref(false); + const errorText = ref(""); + const rootPath = ref(""); + const currPath = ref(""); + const pathStack = ref([]); + + /** 是否在根目录:决定导航栏返回箭头是「退目录」还是「退页面」 */ + const atRoot = computed(() => pathStack.value.length <= 1); + + function toFileItem(record: DmsFileUploadViewDisplayData): FileItem { + const time = parseTime(record.CreatedDatetime); + const date = time ? new Date(time) : null; + const now = new Date(); + const pad = (n: number) => String(n).padStart(2, "0"); + let modifiedAt = ""; + if (date) { + // 今天的条目显示「今天 HH:mm」,其余显示日期(网盘习惯);if/else 写法防编辑器折行 + if (date.toDateString() === now.toDateString()) { + modifiedAt = `${t("FilePage.todayLabel")} ${pad(date.getHours())}:${pad(date.getMinutes())}`; + } else { + modifiedAt = `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}`; + } + } + return { + id: record.FileId, + name: record.OrgFileName || record.FileName, + kind: kindOf(record), + // 卡片元数据不显示用户:文件夹 sizeText 为空只剩时间,文件显示大小+时间 + // FileSize 单位是 KB(旧系统 DmsFileEnquiry 下载缓冲 (FileSize+1)*1024 字节佐证),先换算成字节 + sizeText: formatSize( + record.FileSize ? record.FileSize * 1024 : undefined, + ), + modifiedAt, + sortTime: time, + path: record.FileName, + }; + } + + function buildCriteria(path: string, keyword: string): DmsFileSearchCriteria { + const criteria = new DmsFileSearchCriteria(); + const filters: SearchFilter[] = []; + + // 旧 onSearchByFilePath 语义:路径为空(本地库 FindDmsFolders 只回一条空 BindValue 时) + // 不挂 FilePath 过滤、照常查询全量,而不是当错误处理 + if (path) { + const pathFilter = new SearchFilter(); + pathFilter.Column = UploadView.DB_FILE_PATH; + pathFilter.Type = "SingleSelection"; + pathFilter.Operator = "single"; + pathFilter.Value = path; + filters.push(pathFilter); + } + + if (keyword.trim()) { + const nameFilter = new SearchFilter(); + nameFilter.Column = UploadView.DB_ORG_FILE_NAME; + nameFilter.Type = "text"; + nameFilter.Operator = "contain"; + nameFilter.Value = keyword.trim(); + filters.push(nameFilter); + } + + criteria.Filter = filters; + criteria.limit = FIND_LIMIT; + criteria.page = 1; + criteria.GridColumns = []; + return criteria; + } + + /** 查一个目录;path 为空查全量(旧 onSearchByFilePath 空路径语义),keyword 非空时服务端按名称 contain 过滤 */ + async function loadFolder(path: string, keyword = ""): Promise { + loading.value = true; + errorText.value = ""; + try { + const data = await dmsFileService.FindBySearchCriteria( + buildCriteria(path, keyword), + ); + const rows = data?.Datas ?? []; + // 文件夹置顶(旧页面 orderBy IsDirectoryIndc desc),组内保持后端顺序; + // for-of 而非单参数箭头:编辑器格式化会反复加回 (r) => 括号,与 arrow-parens 对撞 + const dirs: DmsFileUploadViewDisplayData[] = []; + const others: DmsFileUploadViewDisplayData[] = []; + for (const row of rows) { + if (row.IsDirectoryIndc === "Y") { + dirs.push(row); + } else { + others.push(row); + } + } + const sorted = [...dirs, ...others]; + files.value = sorted.map(toFileItem); + const nextRecords = new Map(); + for (const row of sorted) { + nextRecords.set(row.FileId, row); + } + records.value = nextRecords; + currPath.value = path; + } catch (error: any) { + // 错误提示已由 http.interceptor 统一 toast,这里只留页面内可见的失败态 + files.value = []; + records.value = new Map(); + errorText.value = error?.message || t("FilePage.loadFailed"); + } finally { + loading.value = false; + } + } + + /** 初始化:拉目录树拿根路径,再查根目录(旧 onMounted -> initBindOption -> onSearchByFilePath) */ + async function init(): Promise { + loading.value = true; + errorText.value = ""; + try { + const options = (await dmsFileService.FindDmsFolders()) ?? []; + // rps[0] 是空占位项,rps[1] 才是根目录「我的网盘」,与旧页面取值一致; + // 本地库实测只回一条 [{DisplayName:"我的网盘", BindValue:""}]——旧系统对此不视为错误: + // 根面包屑无条件放入(value 可为空),空根路径走 loadFolder("") 查全量 + const root = options.length > 1 ? options[1] : options[0]; + rootPath.value = root?.BindValue ?? ""; + pathStack.value = [ + { + value: rootPath.value, + displayName: root?.DisplayName || t("FilePage.myCloud"), + }, + ]; + await loadFolder(rootPath.value); + } catch (error: any) { + errorText.value = error?.message || t("FilePage.loadFailed"); + } finally { + loading.value = false; + } + } + + /** 点文件夹下钻;非文件夹返回 false 交给页面处理打开动作 */ + async function openFolder(file: FileItem): Promise { + if (file.kind !== "folder" || !file.path) { + return false; + } + pathStack.value.push({ value: file.path, displayName: file.name }); + await loadFolder(file.path); + return true; + } + + /** 返回上一级目录;已在根目录返回 false 交给页面处理退出 */ + async function back(): Promise { + if (pathStack.value.length <= 1) { + return false; + } + pathStack.value.pop(); + const prev = pathStack.value[pathStack.value.length - 1]; + await loadFolder(prev.value); + return true; + } + + /** 服务端按名称搜索当前目录(关键字清空即重查全目录) */ + async function search(keyword: string): Promise { + await loadFolder(currPath.value, keyword); + } + + /** 面包屑跳转:截断到第 index 层并查该层;已在该层则忽略 */ + async function goTo(index: number): Promise { + if (index < 0 || index >= pathStack.value.length - 1) { + return; + } + pathStack.value = pathStack.value.slice(0, index + 1); + await loadFolder(pathStack.value[index].value); + } + + /** 失败重试:还停在当前目录就重查目录,初始化失败则整个链路重来 */ + async function retry(): Promise { + if (currPath.value) { + await loadFolder(currPath.value); + return; + } + await init(); + } + + return { + files, + records, + loading, + errorText, + pathStack, + atRoot, + init, + openFolder, + back, + goTo, + search, + retry, + }; +} diff --git a/uniapp/youjiala/src/composables/useThemeGradient.ts b/uniapp/youjiala/src/composables/useThemeGradient.ts new file mode 100644 index 0000000..8d9d28b --- /dev/null +++ b/uniapp/youjiala/src/composables/useThemeGradient.ts @@ -0,0 +1,48 @@ +import { useTheme } from "uview-pro"; +import { computed } from "vue"; + +/** + * 主题渐变 composable:把 uView Pro 当前主题的 primary 派生成页面底渐变。 + * 背景:文件页等页面头部各块已透明化,页面底用「主题色混白」的三段纵向渐变 + * 承接主题切换(mine 页 setTheme 后无需刷新即联动);混白而非固定色值, + * 保证任意主题下都是同色系浅底,白卡与文字对比天然保持。 + * 用法:const { themeBackground } = useThemeGradient(); + * + * 浓度档可经 options 覆盖(如弹窗想更淡:{ top: 0.15, ... }),默认 25%/14%/5%。 + */ + +/** 渐变三段的主题色浓度(0-1,越大越浓),按 0% / 40% / 100% 三个停靠点铺 */ +export interface ThemeGradientOptions { + /** 顶部浓度,默认 0.25 */ + top?: number; + /** 40% 高度处浓度,默认 0.14 */ + middle?: number; + /** 底部浓度,默认 0.05 */ + bottom?: number; +} + +/** uView 出厂蓝,仅作 currentTheme 尚未就绪时的兜底(正常初始化后不会被读到) */ +const FALLBACK_PRIMARY = "#2979ff"; + +/** 主题 primary 按比例混入白色(ratio 为主题色占比),得到同色系浅色 rgb() */ +export function mixWithWhite(hex: string, ratio: number): string { + const n = hex.replace("#", ""); + const channel = (start: number) => + Number.parseInt(n.slice(start, start + 2), 16); + const mix = (c: number) => Math.round(c * ratio + 255 * (1 - ratio)); + return `rgb(${mix(channel(0))}, ${mix(channel(2))}, ${mix(channel(4))})`; +} + +export function useThemeGradient(options: ThemeGradientOptions = {}) { + const { top = 0.25, middle = 0.14, bottom = 0.05 } = options; + // currentTheme 是包级单例 ref:任意页 setTheme,这里即时重算 + const { currentTheme } = useTheme(); + + /** 页面底渐变(180deg 纵向),直接绑到内联 style 的 background */ + const themeBackground = computed(() => { + const primary = currentTheme.value?.color?.primary ?? FALLBACK_PRIMARY; + return `linear-gradient(180deg, ${mixWithWhite(primary, top)} 0%, ${mixWithWhite(primary, middle)} 40%, ${mixWithWhite(primary, bottom)} 100%)`; + }); + + return { currentTheme, themeBackground }; +} diff --git a/uniapp/youjiala/src/data/custom/fileBrowser.ts b/uniapp/youjiala/src/data/custom/fileBrowser.ts new file mode 100644 index 0000000..8a5d144 --- /dev/null +++ b/uniapp/youjiala/src/data/custom/fileBrowser.ts @@ -0,0 +1,47 @@ +/** + * 文件浏览页的数据契约:页面持有数据与状态,六个展示组件只吃 props。 + * 展示字段(sizeText / modifiedAt)由页面格式化成最终文案,组件不再二次加工。 + */ + +/** 分类标签的取值:全部 / 图片 / 视频 / 文档 / 音频 */ +export type FileCategory = "all" | "image" | "video" | "document" | "audio"; + +/** 单个条目的类型:四种文件 + 文件夹 */ +export type FileKind = Exclude | "folder"; + +export interface FileItem { + id: number; + name: string; + kind: FileKind; + /** 文件大小文案(如「2.9 MB」);文件夹为空串——卡片不显示大小也不显示用户 */ + sizeText: string; + /** 修改时间展示文案(今天 / 具体日期),仅用于显示 */ + modifiedAt: string; + /** 可排序的时间戳(毫秒):展示文案没法比大小,排序用它 */ + sortTime: number; + /** DMS 记录的 FileName:文件夹点它下钻(当作下次查询的 FilePath),文件留作下载/预览键 */ + path: string; +} + +/** 快捷功能入口的单项:图标 + 渐变底色,页面给什么画什么 */ +export interface QuickEntryItem { + key: string; + label: string; + icon: string; + bgFrom: string; + bgTo: string; +} + +/** 分类标签单项 */ +export interface FileTabItem { + key: FileCategory; + label: string; +} + +/** 面包屑/目录栈单项:从根到当前目录 */ +export interface PathNode { + /** 查询用的 FilePath 值 */ + value: string; + /** 展示名(根为「我的网盘」,其余为文件夹 OrgFileName) */ + displayName: string; +} diff --git a/uniapp/youjiala/src/locale/lang/en-US.json b/uniapp/youjiala/src/locale/lang/en-US.json index a1354e4..2ba676e 100644 --- a/uniapp/youjiala/src/locale/lang/en-US.json +++ b/uniapp/youjiala/src/locale/lang/en-US.json @@ -14,6 +14,41 @@ "share": "Share", "mine": "Me" }, + "MinePage": { + "title": "Me", + "themeTitle": "Theme Color", + "themeHint": "Component colors update instantly on switch and the choice is remembered", + "darkTitle": "Dark Mode", + "darkAuto": "Follow System", + "darkLight": "Light", + "darkDark": "Dark", + "currentTheme": "Current Theme" + }, + "FilePage": { + "title": "Files", + "searchPlaceholder": "Search", + "recent": "Recent", + "favorite": "Favorites", + "downloaded": "Downloaded", + "team": "Team Files", + "shared": "Shared", + "catAll": "All", + "catImage": "Images", + "catVideo": "Videos", + "catDocument": "Docs", + "catAudio": "Audio", + "emptyText": "No matching files", + "sortTimeDesc": "Newest first", + "sortTimeAsc": "Oldest first", + "sortName": "Sort by name", + "selectedCount": "{count} selected", + "todoTip": "Coming soon", + "todayLabel": "Today", + "myCloud": "My Cloud", + "loading": "Loading…", + "loadFailed": "Failed to load, please retry", + "retryBut": "Retry" + }, "AdminPage": { "filterBut": "Filter", "filterTitle": "Filter Conditions", diff --git a/uniapp/youjiala/src/locale/lang/zh-CN.json b/uniapp/youjiala/src/locale/lang/zh-CN.json index 4f1cecd..65321a1 100644 --- a/uniapp/youjiala/src/locale/lang/zh-CN.json +++ b/uniapp/youjiala/src/locale/lang/zh-CN.json @@ -14,6 +14,41 @@ "share": "共享", "mine": "我的" }, + "MinePage": { + "title": "我的", + "themeTitle": "主题颜色", + "themeHint": "切换后组件配色即时更新,选择会被记住", + "darkTitle": "深色模式", + "darkAuto": "跟随系统", + "darkLight": "浅色", + "darkDark": "深色", + "currentTheme": "当前主题" + }, + "FilePage": { + "title": "文件", + "searchPlaceholder": "搜索", + "recent": "最近访问", + "favorite": "收藏", + "downloaded": "已下载", + "team": "团队文件", + "shared": "共享文件", + "catAll": "全部", + "catImage": "图片", + "catVideo": "视频", + "catDocument": "文档", + "catAudio": "音频", + "emptyText": "没有匹配的文件", + "sortTimeDesc": "按修改时间降序", + "sortTimeAsc": "按修改时间升序", + "sortName": "按名称排序", + "selectedCount": "已选 {count} 项", + "todoTip": "功能开发中,敬请期待", + "todayLabel": "今天", + "myCloud": "我的云盘", + "loading": "加载中…", + "loadFailed": "加载失败,请重试", + "retryBut": "重试" + }, "AdminPage": { "filterBut": "筛选", "filterTitle": "筛选条件", diff --git a/uniapp/youjiala/src/md/theme.md b/uniapp/youjiala/src/md/theme.md new file mode 100644 index 0000000..669e13c --- /dev/null +++ b/uniapp/youjiala/src/md/theme.md @@ -0,0 +1,82 @@ +# uView Pro 主题系统与渐变底接线 + +适用范围:`src/common/uview-pro.theme.ts`(主题定义)、`src/main.ts`(注册)、`src/composables/useThemeGradient.ts`(渐变派生)、`src/pages/tab/mine.vue`(切换入口)、文件页等使用主题渐变底的页面。 +路由与权限见 [page-routing.md](./page-routing.md)、[permission.md](./permission.md);环境变量见 [environment.md](./environment.md)。 + +--- + +## 1. 主题从哪来:定义 → 注册 → 使用 + +- **定义**:`src/common/uview-pro.theme.ts` 导出主题数组,每项 `{ name, label, color }`;`color` 必含 `primary/error/warning/success/info`,`*Light/*Dark/*Disabled` 可缺(库有 `applyColorFallbacks` 自动派生)。当前四套:`purple 霞光紫 / green 清翠绿 / orange 暖阳橙 / dark 午夜蓝`。 +- **注册**:`main.ts` 装插件时一次性传入,改默认主题或增删主题都只动这两个文件: + +```text +app.use(uViewPro, { + theme: { + themes, // 来自 common/uview-pro.theme.ts + defaultTheme: "green", // 冷启动且 Storage 无记录时用它 + defaultDarkMode: "light", + }, + ... +}); +``` + +- **使用**:组件配色走 CSS 变量 `--u-type-primary`(注入在 `:root`),或 JS 里读 `useTheme().currentTheme`。 + +## 2. 切换与持久化:不要自建 store + +```text +const { themes, currentTheme, setTheme, darkMode, setDarkMode, isInDarkMode } = useTheme(); +setTheme("orange"); // 切换 + 写 Storage('uview-pro-theme') +setDarkMode("auto"); // 'auto' | 'light' | 'dark',写 Storage('uview-pro-dark-mode') +``` + +要点(均为库行为,实测确认): + +- `useTheme()` 的 `currentTheme/darkMode` 是**包级单例 ref**:任何页面调用拿到的都是同一份,mine 页切主题、文件页渐变即时联动,**无需刷新、无需事件总线**; +- 持久化由库自动完成(Storage 键 `uview-pro-theme`、`uview-pro-dark-mode`),冷启动 `initTheme` 自动恢复,**页面层不要再包一层 Pinia store**; +- `themes` 列表 = **内置 defaultThemes 与自定义主题合并**(`config-provider.normalizeThemes` 的 `mergeThemes`),所以 mine 页会多渲染一个出厂「默认蓝 #2979ff」色点——这是库设计,不是 bug;只想要自定义 4 套的话按 `name` 过滤即可。 + +## 3. 深色模式的生效层级 + +`setDarkMode("dark")` 实测:`html` 类切到 `u-theme-dark`、`body` 背景变暗、`--u-type-primary` 重算为暗色降饱和变体。 + +已知小瑕疵:`.u-config-provider` 元素自身的 `u-theme-light` 类**不跟随**切换(uView Pro 内部响应性缺口,仅该类,不影响变量与 html/body 层生效)。 + +注意:本项目自定义样式大量写死色值(文件页白卡、`#2b8fff` 强调色等),**页面不会自动变暗**;要让整页跟随暗黑,需要把关键色逐个改走 `--u-type-*` 变量,属独立改造任务。 + +## 4. 渐变底:useThemeGradient(多页共用) + +文件页头部各块(navbar/面包屑/搜索/快捷入口/分类条)已透明化,页面底用「主题色混白」的纵向渐变承接主题色。派生逻辑在 `src/composables/useThemeGradient.ts`,规则: + +- `mixWithWhite(primary, ratio)`:主题 primary 按占比混白,`c*ratio + 255*(1-ratio)`,输出 `rgb()`; +- 三段停靠:顶部 25% 浓度 → 40% 高度 14% → 底部 5%(`linear-gradient(180deg, ...)`),保证任意主题都是同色系浅底,白卡与文字对比天然保持; +- 浓度可覆盖:`useThemeGradient({ top: 0.15, middle: 0.08, bottom: 0.03 })`。 + +新页面接入只要两行: + +```text +const { themeBackground } = useThemeGradient(); + + +``` + +实测对照(顶部 = primary 混白 25%):green `#059669` → `rgb(193,229,218)`;purple `#7c3aed` → `rgb(222,206,251)`;dark `#0b3d91` → `rgb(194,207,228)`。 + +历史备注:文件页渐变曾经是写死的 `#b8e5fd → #eaf7fe`(蓝色系),不随主题;现已全部由本 composable 接管,**不要再在页面里加固定渐变覆盖**。 + +## 5. mine 页设置入口 + +`src/pages/tab/mine.vue` 两张卡片: + +- **主题颜色**:遍历 `useTheme().themes` 渲染色点(背景取 `theme.color.primary`,选中打勾),点击 `setTheme(theme.name)`; +- **深色模式**:跟随系统/浅色/深色三段胶囊,点击 `setDarkMode(mode)`;`DarkMode` 类型顶层未导出,页面内以同构字面量联合 `"auto" | "light" | "dark"` 声明。 + +词条在语言包 `MinePage` 块(`src/locale/lang/zh-CN.json` / `en-US.json`);主题 `label`(霞光紫等)来自 `uview-pro.theme.ts`,是中文写死的——若要随语言切换需给主题加双 label 字段,暂未做。 + +## 6. 新增/修改主题的固定步骤 + +1. 在 `common/uview-pro.theme.ts` 数组增删一项(`name` 必须全局唯一,是 Storage 持久化的键值); +2. 如需换默认主题,改 `main.ts` 的 `defaultTheme`; +3. 无需动 mine 页——色点列表由 `themes` 响应式驱动; +4. 验证:`npx vue-tsc --noEmit -p tsconfig.json` 退出码 0 + 浏览器实测 mine 切换 → 文件页渐变联动 → F5 持久化。 diff --git a/uniapp/youjiala/src/pages.json b/uniapp/youjiala/src/pages.json index f0ac1a4..f4fb31a 100644 --- a/uniapp/youjiala/src/pages.json +++ b/uniapp/youjiala/src/pages.json @@ -1,13 +1,15 @@ { "pages": [ - // 入口页在 H5 渲染在根路径;/login、/dashboard 等短地址由 router/h5-clean-url 运行时追加路由记录 + // 入口页在 H5 渲染在根路径(当前入口=dashboard 首页,未登录由页面级守卫 useAuthGuard 送去登录页); + // /login、/dashboard 等短地址由 router/h5-clean-url 运行时追加路由记录 // 新增页面须同步登记 router/routes.ts 的 PAGE_PATHS,否则只有真实路径可访问 - { - "path": "pages/login/login" - }, + // 注意:换入口页须同步 routes.ts 里 "/" 的页面归属(resolvePageName) { "path": "pages/dashboard/dashboard" }, + { + "path": "pages/login/login" + }, // 错误页:H5 短地址由 CLEAN_PATH_OVERRIDES 指定为 /error/page40x,与旧 WebVue 地址一致 { "path": "pages/error/page401" diff --git a/uniapp/youjiala/src/pages/login/login.vue b/uniapp/youjiala/src/pages/login/login.vue index 0b438d7..407db62 100644 --- a/uniapp/youjiala/src/pages/login/login.vue +++ b/uniapp/youjiala/src/pages/login/login.vue @@ -4,10 +4,10 @@ // 加密已抽到 @/common/pwd-crypto(wxmp-rsa 纯 JS 实现,H5/小程序/App 全端可用) import type { LoginData } from "@/data/auto/loginData"; import type { LoginProfile } from "@/data/auto/loginProfile"; -import { onLoad, onShow } from "@dcloudio/uni-app"; +import { onLoad } from "@dcloudio/uni-app"; import { useLocale } from "uview-pro"; import { computed, ref } from "vue"; -import { backendLocale, baseUrl, hasLoginSession } from "@/common/http.interceptor"; +import { backendLocale, baseUrl } from "@/common/http.interceptor"; import { encryptLoginPassword } from "@/common/pwd-crypto"; import { LoginData as LoginDataClass } from "@/data/auto/loginData"; import { reloadLocales } from "@/locale"; @@ -36,17 +36,10 @@ onLoad((options) => { }); /** - * 冷启动直接落在登录入口且本地已有登录会话 → 自动进 dashboard, - * 省掉"明明登录过还闪一下登录页"。令牌若已过期,dashboard 首个请求会触发请求层用 - * RefreshToken 自动续期;续期失败再 goLogin 退回本页,不会卡在受保护页里。 - * 被"有意送回登录页"的场景(401 去登录 / 403 重新登录)不必再设豁免: - * goLoginWithRedirect 已先清登录态,此刻 hasLoginSession 必为假,表单正常展示。 + * 已登录访问 /login 不再自动放行进 dashboard——本页是"切换账号"的唯一入口, + * 自动跳走会让用户够不到登录表单。旧令牌在 Login 成功后被 updateLoginProfile 覆盖; + * 由守卫送回本页的场景 goLoginWithRedirect 已先 clearLoginState,会话本就是干净的。 */ -onShow(() => { - if (hasLoginSession()) { - uni.reLaunch({ url: redirectUrl.value }); - } -}); // 登录页中英文切换:走 uView Pro 语言包(t / setLocale),语言包 name 为 zh-CN / en-US const { t, setLocale, currentLocale } = useLocale(); diff --git a/uniapp/youjiala/src/pages/tab/file.vue b/uniapp/youjiala/src/pages/tab/file.vue index dfbb9bf..214e3ae 100644 --- a/uniapp/youjiala/src/pages/tab/file.vue +++ b/uniapp/youjiala/src/pages/tab/file.vue @@ -1,44 +1,360 @@ diff --git a/uniapp/youjiala/src/pages/tab/mine.vue b/uniapp/youjiala/src/pages/tab/mine.vue index 308d4e6..1b3a7cf 100644 --- a/uniapp/youjiala/src/pages/tab/mine.vue +++ b/uniapp/youjiala/src/pages/tab/mine.vue @@ -1,43 +1,172 @@ diff --git a/uniapp/youjiala/src/router/nav-guard.ts b/uniapp/youjiala/src/router/nav-guard.ts index b3958e5..a37be95 100644 --- a/uniapp/youjiala/src/router/nav-guard.ts +++ b/uniapp/youjiala/src/router/nav-guard.ts @@ -34,6 +34,7 @@ function isLoggedIn(): boolean { * * 顺序即语义:地址不存在(404) -> 没登录(401) -> 没权限(403) * 403 必须排在 401 之后:未登录时权限档案多半也是空的,先给 401 才谈得上"去登录" + * 注意 error401 只是"没令牌"的判定结果,落点由 dispatchBlocked 决定(直接去登录页,不经过 401 页) */ function evaluate(url: string): ErrorPageName | null { const name: PageName | null = resolvePageName(url); @@ -52,6 +53,20 @@ function evaluate(url: string): ErrorPageName | null { return null; } +/** + * 被拦地址的统一分派: + * - 没令牌(401) → 直接去登录表单(goLoginWithRedirect 带 redirect,登录成功回原页), + * 不再多一跳 401 错误页——首页场景下"未登录=去登录",401 页保留给手动访问 /error/page401 等场景; + * - 其余(403 等)→ 对应错误页 + */ +function dispatchBlocked(blocked: ErrorPageName, from: string): void { + if (blocked === "error401") { + goLoginWithRedirect(from); + return; + } + jumpToError(blocked, from); +} + /** 跳错误页;redirectTo 保住返回栈("返回上一页"还有内容),页面栈为空时退化成 reLaunch */ function jumpToError(blocked: ErrorPageName, from: string): void { const url = errorPageUrl(blocked, from); @@ -81,7 +96,7 @@ export function ensureCurrentPageAuthorized(): boolean { } // getCurrentPages 只会给出真实路径,而 ?from= 是给用户看的:换成当前端的地址形态 const name = resolvePageName(path); - jumpToError(blocked, name ? pageUrl(name) : path); + dispatchBlocked(blocked, name ? pageUrl(name) : path); return false; } @@ -95,7 +110,7 @@ export function setupNavGuard(): void { if (!blocked) { return true; } - jumpToError(blocked, url); + dispatchBlocked(blocked, url); // 取消本次导航 return false; }, @@ -128,8 +143,7 @@ export function setupUnknownPathFallback(): void { * redirect 与 from 一样不做预编码,理由见 routes.ts 的 errorPageUrl * * 进登录页前先清登录态:走到这里都是"有意去登录/换号"(401 去登录、403 重新登录), - * 旧会话整体作废——否则登录页的冷启动自动放行(hasLoginSession)会把这个还带着令牌的 - * 用户直接弹回原页,403"重新登录"根本够不到登录表单。 + * 旧会话整体作废,登录页始终是干净的换号入口(登录页已不再自动放行跳转,清态是进一步兜底)。 */ export function goLoginWithRedirect(from?: string): void { clearLoginState(); diff --git a/uniapp/youjiala/src/router/routes.ts b/uniapp/youjiala/src/router/routes.ts index 17f0f62..490b457 100644 --- a/uniapp/youjiala/src/router/routes.ts +++ b/uniapp/youjiala/src/router/routes.ts @@ -71,11 +71,11 @@ export const PAGE_PERMISSIONS: Partial> = { // 底部导航 5 个 tab:真实权限尚未定义,按当前要求统一用 UserOperation 占位。 // 注意 dashboard 也被登记后,登录落地页(首页)会开始按 UserOperation 做路由级校验; // 路由级是 fail-open(档案缺失/为空时放行),真正的边界仍在后端。 - dashboard: "UserOperation", - fileTab: "UserOperation", - mediaTab: "UserOperation", - shareTab: "UserOperation", - mineTab: "UserOperation", + dashboard: "DmsFile", + fileTab: "DmsFile", + mediaTab: "DmsFile", + shareTab: "DmsFile", + mineTab: "DmsFile", }; /** @@ -147,12 +147,13 @@ export function resolvePageName(url: string): PageName | null { } const path = normalizePath(url); const names = Object.keys(PAGE_PATHS) as PageName[]; - // "/" 是 H5 入口页(登录页)的路由 path,不对应任何字面配置 + // "/" 是 H5 入口页的路由 path,不对应任何字面配置——指向 pages.json 的第一个页面(当前为 dashboard)。 + // 换入口页必须两处同步改:pages.json 的 pages 顺序 + 这里,否则未登录判断/redirect 校验会认错页面 if (path === "/") { - return "login"; + return "dashboard"; } const hit = names.find( - name => path === toRealPath(name) || path === toCleanPath(name), + (name) => path === toRealPath(name) || path === toCleanPath(name), ); return hit ?? null; } @@ -190,8 +191,7 @@ export function decodeQueryPath(value: unknown): string { } try { return decodeURIComponent(raw); - } - catch { + } catch { return raw; } } diff --git a/uniapp/youjiala/src/static/logo.png b/uniapp/youjiala/src/static/logo.png index ffeb00e38dfcfa770c431e2b1d9df0a174269fa9..a4a1d104a6f992057f6f73f7b7e9d620873f0d43 100644 GIT binary patch literal 63640 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 R&9wjk002ovPDHLkV1mk62OR(a literal 15206 zcmV-sJDJ3ZP)BP_}BXXp2F|5=Kqn${guoAQLyLO>;2T^ z_MYARJ&f*W!|q+l?UdK}derlY()EYI`ah51-tGNy!|g?$`C+>0s><-mM+_S)fVk~%sp!q(_)(GJ0df2lmHi2Z{tSx$GQa$+;`t7Y{58Y+1%Uh@qW;6( z_9m+R8JYe8aQ^~&`vP|U9iaUKdj2M+{}7J;9Gw5r?)bsm`ql0Emcsfrzy1Pj|E}Qu z#NGTZv;R27{4clvJIMYMlKu#W`zo#fE3*7CyZ@EL{sMFVBCr1{u>V81{Vlit2!s9{ ztNk{}`~hkCA*KH^yZe;D{5He>9I*b>@cadR{{waT#p3?Z;rT1B`!0(A6R7>N1jV_!E`*lEnNNef%@B|01XVvE%+Ih5j(Z{+Pl35|8>azyBV9{vxOO z7Oelj+4liy{h!AE6nXy4;`}VT`X zx&O!D_#v+N)bjQuwf_o)_Q2ow*6aE*$MufE{xZMz4t4)Py8f8Q{~w+C4|eo9y#F<} z|2o3{8khMqt^YE%`zg2hF24REv-&fU|1!tr2o&PtM{Vk#Xz32G_ zZ1W3&?Vrs3qsR3hh2==c_Sp3P&*c6ekMWMl|A)l?43704dF(Wg`D)JfCz|m$t?Wm& z_c5&YM6l_x)cX~%_$iJ1sm=Gf+y4-AezERPyyrBd<}ZTg zJAH_=Uu4(d%gcL)cPB8*KM-@LZsg;gxaUp{V|2|#K>s#0000ybW%=J00|^1 z88ZG_Y&`rB{YiLf{blKW{^k9V+N6p7d(i&*+{sG(*vOdq{+s#Lx4*Kku9*Gl+T*(P z;j+@xebFTK001}HNkl9u0A=vP@cg zLOq9xF!ak2&!HFFu9JE)C5wqj8(5Il z3r$D{u40JNgGpe}b=SR^4`Pvk(IUPSWoga=%gotsb#V#N;)p-cLIr-?`hGAQLekFK ztBXQJsbHkc%A~E2+t=0~f(mK9cJaSs*`4%QD|Vlxb$dMi-tP8qid|R?FJfMV_B7Vp zy-L!w=I3SmwDSWHpT&&C(O#%j()V@ZzqK#N9gB&xn9IfGDvZ*=D7g#zG)+ol%6(n$ z_JPM@)p{L;!@CSo#^c<2@9b50ydc42{q*X4ps3nxnw3&Uqr+^Z2eC-gJ}s8Ol>5iC zSV)J%q1kkuMd!x)_k7OTux9*3O|;pTaeHmc?ou+h6o7_7yH- z9GNe`%ZbIB#v-mhyp~2wVx*2optcBDED;}K&%tmF(NsC>Nai2?QjwJ8s;Y8C+T8q} zs2?m=!d2{X?-#&kMiUb$0T*UDYq4#!*{q!^ia5-h8_U1UnO$g7aTvyRX*SfYS|6l+Xco4#FSovHi!xg- zE5wU)(HBNA3Qpjxi?PZG+9;w-iq+%<4!l@GUG-r_Vh}6pBI`hECyWZphFjU%a7n%I z-{YLoRkiA2Np3g$@jUPIzMhq;GnoLFF-Y*-RUsJ85qV>4d8Yc=fjkSa+ziu!l|s*?v~mGH5Y*;-@>S*%g>Mjvnk7S#c=TCLz1_9aZlqyEnJoop#;LSg?GkCRUE>xo&)x1mCy0XhnTXm=xW7q1 zl2QBjTTP^ABN29`qO3BVJQ@h3%LJ082-aI6AGb&gQi+Q`eU4kO;uIhO7YeOna;|j{ z!CMsB3jbD>*-$H6Er-~txj?|&RVk1|c>vfPxEFgpTGh%_t+N<76>3Y zJ9wE07{xf5_IdwytI0LV5L->gy(}GUGP4Rn$!y?4%>ikLpM{I?83>U~_6*Vb7zV2m zmRLa)$jX>-)c)mG)2BnxY2loQ^2u-VEC`MS0yQav_t!8+U4?ky#NPjPG<+h z;Ha5~$!ewG3%A-oJRl_o77UZ-%1#+Zp0-_MCpbj{*fXzxVa2x-XQ4=rJB%(*!+M=mS z==ur1Ha5?qXG0jvA0@3&Y0<4AG_TF$K`@k^_7F5=qnu2hYRES$S>EjLW+$wzKLIk&bP9!7daKm8DPkx)eY9Td{E2vVnnk zEC#vjw0Ti}Iwu#(>&jPu!88ObkYOe%+-hRMNU3!4*iYSw#J%a$F^o~Qs6-cSZRMj_ zQq2XDN>Q;}3bjTv9n{}HfJI2aAd!e>M=J8xZnxV!GHekP!w|4`ydK*LSTl$k(F1bn z*X})cr!Q8>C7MKQTU0L;>!MrMvPvO28N0Y-S6T6AY7NUKi8$_M{~)k=Z6ty57{DMV z0RvJXBcs+wS_HwYg%Ux_PLbPq)>NrrBs8~s!?9ZnaZ#xgZFNu{;8@#^P_`T^CCzae zebF>lXCppe&=(Av8!rTs$#2sK+2P|R=oeOHLV-+`c=)QzvJqp0#q6*+9QE~$ z;cysS8;ILG?F0p^vH_b7UhxZaiY@XU(O`YyD+-|y&}ltI7Pe{p0`Uldb?@2rwH)1; zo4A_NLE@LEBDD=QA&yH%!byXqa2o41Y{b{l(A4B`0Gq>MZZrcM_pN^b&FXX!k?8_~ zb3kT8GJdP|!2#LKgPBmL@Uxl~7xte#AVqRHW?Kqihlpbpsc3=_DpI}^N6#D$2hIdC z2K)w5iJ}Uye8vVO127BFSuFL9je#Twd5pX6-?u|1kqp5|htRZ*$aDT3n8x5k9^?WR zpvqmwM9iOi;!`qt;>Q`&(-2C&^7CAF5Df(hXecTto-0p=qv!quTTNOq@#CXMuii{7 zL9h+Sx+|oLv59D+I+uqsL(&)s1i6g5bm-v90&GJ~O%0L}I5S}*WOu^J44}oKK7h;4 zXVPZN83tU~kNjt~99f}35RKsBE%Lj0luY~h==Qq(+pfHsj5D@#!@pZ4nrt1%nVsOZ{%g;X6=}*9HfG%znC)cE$V<$d(qwLdVG1 z0oyxLkj*5C$dV_^`}TWRmQX(b%aHIUpGXE08sl z7ZT84|3D+2Kk3Wo&$qW-xw-E8@ketB*uzb?9z1@${>Tv)kNaYYBsxgpi?y{|YHMo| z3_UA=866Nt%kGUEH}2c_BnkZ(kKKO?HG-lE7*9siEiL3WCbtMs6u^)Q1yIkxBC?k$0 zb)<~w3v;|_V%fxk&gO^(35I0Dkj(LYp5L>-4KF&r%Q{PV@yYjjzR&Z2TG7Dz80sAr z6}skKMqu5mv)5be>Mq`>tn@#4KQ;0)%#Ddz0Wgu6wndR8AoLSw zCpwJA@;6U=OOR?de`Fz{k#1d2|dTWuXO4G=At?T8Ecw+gKLW-OW4SA=yVQ8 z`MDp1P>+~u=r!=m~+F^lg8Q8Kws4sQT_)>3dZCe6MNdXw9*Za!KZ$sL5mi=jBL)|lf zUUI>5`dU7BZp`DyF^Y|_hzuJDb`X@}p+kv~#iE0Zdu`?AH}9a;eDDlQ@B&8TGF;$6 z`ZFg#hQhR8kD-ec8H88P$NdvJw#+dF)+H*mq_l5qT7pwjssV;#{5Gs>gj8YQ?sd>-JIgAFtK&n?jQbtY`B(9I7xbDK9TMIk_ypEZzxGIlATw7{?=8jW)+E z_#!kRb3i(y(XzL=hFXou4q`V}VEGGJnG13yMdX-uY!QR)(FFJ8b}%4(u&*DZ#)nD+ zr)$S^rcQajI;%kvgMFL$;w?@EH!?Dk%JTB^oK8RFLP=6Nif5W-GSMVK4sn|qEk=jU z;jr0?Ybg4+VPN|R4M75@lvXX^R->tg+$YPV$5^jHM$-+!iBE-x4;Bc8mIUA%bG4pQ z{k*zCb1bsw=sNfA-5GH=^2*9e^777t${DZMy9jJKz~(~JS&|^X7DrA+bQl^9TxO%W zyygisEGK~Sw8kdL?ojFgYvn0if{(0E-9{4B-*|m%kg?Vc?7E>gR=pRzutz z_l+AM6R>35i2vppxab9;-*^U@t-z?y7|aYXBcb7e1_ilb-@e>^KH`CRe*_mv7D!(E zn}X5D503Q+tH&av0{|QUmuv8d+UmD!3kwU=(+vhUfn}7G5Lr@EGD*;2nM=S#93W~R zR^v?NK9QM0W!`Hvf~Qu4`E0~(PD8Ws@T`Ay^g2dqoq!KJr~ zj$T=R;>3E80nD92V32?b8BH^(MUi?!Q=^*pe2t927|o2OzlNvUHi~@_$TYCbOqC)) zYwp>slb`GpT7_MT^}oPme~K!-bt$bVd+BPcHQj1;y9?cJcS(sBjZHmsK>$NV3K)w# zBg=rsY!)5J7|Nofk!B;bryP*^uubZZdMs0kew8h2D^gKeHf#SUdqvn_f#1MdcNka; zw~nS2rEX72v07nSI#pykz_`r-#*#i0Fqvj68o>w+cLH_Y*=T_fir7TT%N;uNUdU#v z;oAYo)XhMe4OF0$5D~Ij>N@xEdPT)?lw!E4*bJ=W2;8f@2aX;+dh6E3i%bSI7KdZf z?-Am3xm1GC3!|+N&!`*|NE{(ptz=fC(O8@!U$%jahMG^3F;f#&Bpo2P^2ut}{_F25 z>=hNmJBJI#ORy*c&2`P|6|h@bSy=#6WNtV53}{-P37J#xqHGi}NWf$Rp=#7ZUvUW- z3er(r^MOqB1n>DW!6j>PQ?z{SScrZ6mznF=?RI;`@lKIpu2g|g?+#iOMgfbsE(0tr zt*EFd^@^1QENI6LkO523Fwy*eexP=#c}Cx`3}ArMR*>1;XF5%061bFVYM#;?Yn~vo zKNtPR(rm-M=Our_*krE&);s(0X&uZqG0@KK5gNz?LDLr^n<0nH|;G5Z2j#jIp1#(|5Qj(||!T7TJ3U50- z1k`*JxJ==KMU3E2Gsqq8#kDm#IXN@dp1-h?9AmQ7)U5236oY}mG9V_CPGirs9i(w{ zUAy+cfu)O~)YQ~$E6IRLgff2XGrw$CkdSdXl4Mk)7|AmWVt->Ir9P2SukrRs z{f4o|yYVU})38=~g7;r-rHqGN1U6qB3s>z&^d`5wr@h{F3wK?na-;-VxfB9e+Ldet zW@rRs2^jRJXOLJ%d!qtN#G_{ddW}8fx-RlZ5vsC?{ep3$l!Cs$vv@@p{y-wMyo-d?YQ6Uj;-8%aR3} z`hUFIckvm)z{+ICGsFK1TLf2!ST)uelw4k5ae<+Quq+l67-WZ)%nzeLHY70o5*W{n zA`=)5SQ53(l1%%25*KtQ&p!M9Jv2T(?yuP2HxJzZekyfJ9ouzT#xTcO$4RB)aiT>5 z@zGzz!2{G4D(FXM-VJTKGq8Fm%n_5YJnBXWI`bgqs#)f zVCC~#r&F^n*R=^|+b&=^1rr%MBV=Kc#gxp0ZP-rv9X2E|i9ApDgh^zVA$vLX=;V_7~gFp&`~rd)oQ$TkUV$Oq$3VE{wb1STI> z?9a;N$l%a$ zppi`?1F_7Eupz2}&}fB_Y;#&@?DA9vJjJx$zG2w#a3G^rqrWR2{cG5lnSo%XYQbg0 zr(iC@I08dd(^oL07i`UMFnOX@Fa$Frekf8i1pS^^c+qu1t9auY!-nS$d-%TDzCBuT z>$ub@)e)kpl9?viSVp~(k7~G1Xc$}wSh`>u#yv!4Mjk-ahZU-5)c5r|WYu)Gv1ZJ9 zzCyvC&KcI6em~RRK3cWyP6w*GWg84LO$|%YVvGvxxU5C*(F_fri>6`SJAJ_PVnmKn zq-KDjH}2v<)oiu~Hrz6;j|_wB&#-xa3ClM5AC2>JltdyChhZjnM_G&{11uKPFqR>{ zu73(LMB2W<=-CW3DcTm6?dOrIkj*yn=AId?R^1xGLg*cHg)MpbKDqkp;B>S7;&|TG zG{78&;gwItwd}-R4FEFi)bvX>o!3><p~Ze1=e1h{%%Py^8|zXU2AOIf0y|6{L}Z|$ zWW8W=pZ^OC-z-RHsefQ|1*4|JlL2gX`#E5NK!0Hf`eSi>xJpNK&5jrpZyctz$g*Ex zh=w5|gG)s!wpL(>8izrny0scZ8>n272(kJPBO1$a2Z5rU8jG9wzaBhzpw2TIKM?5d z07kNehIMUT1M$OnYDA>r7ZvOnE(scqM!UEvR;ieIhhda1EYLq#lENSHWYdi`!Fbg% zN)J#oCkNLQpVD_y@-&Un>Nl92)B+okz9`GlgY796Ap;C)v|7cHSojv+H`6c(#$niS zpJ13i6%2nX>_VrSZsDy&gTygyIFM0LFjOqsg?Wt;{R1$B4r+Z!Q^~N?dcjDx8RdGt zJr>3L1(yf2`wH6y7)K3mgP2US*~Y+zsA;+mT%4&Xf_1lq4x$a=%% zyAq9Jarfa^B5@hlDid^`07f#@tvBq$zr$#od7tx;Y=4^e06K9#mn-2Wbz&l)7Z)On z@wD9R{Mzzmo5?|aieW<{Td%72dd-uu0|zc&zI^xY#KaV24mLAjv>g4-12132b{?G# z48fEQmk+iDed{&OPBWjYmCFWXaZi?@#fZS>lleZKK95&dCN<-4+7672JURr|y?ggG z46*FK!}uy}7gRdw3)|H3c{pr3rco~E@{^Nsb(n>@<)da4p-BTlSmyt}gzESMdw4PK zenPB!2ue0N>A@_5+5Ly%g~-Pt^!R=OfvkP|{;f(Cv#^t&niLqz5{SSkdLZ`60()tLmAoiRD=Z#5SkGcbu0^sQ<6kCos4A02+GiagFs~mC;=tZFcP$+(2+}OWz3-6 zrm5^%Yj5~C2F58X?d?RDnTUsX?X@r8+Uo;N$R?MAR!~wT&y_OLna$t=3@n4@M5D4< z&lWiQ>0Vqd6mDYITAutuC1CFW_O^h@2vgmmV2|z>u=Ri`lI3FeckKkVYvGb5OJ01j zu&}DR!2=n`!wwh+R-{JckRd-X)a&7rV6}iXeL7&60)9CM%IiXf6MGBv$E+!z~)|h^}4msqHTat7y}mKsSdjbxQr_I zTPO|#Oj4l%i^1}#Tw)nqfaN=2IOc%q7yD2m;Eg6=g=9YkL&mt|3AZj;vM{+EFt`NlnY5~^Woxoz zq|HZVWeIS_$McC&Ra8`f)i9+&$O;Myn9VE}x-?a=7J&5#b}3j~R7$jblLVQc{X+2$ zz0OQgo_2Z4MfP`dWmq{+E9{J~t3*0dUt(F1{jX(-CJRwiYeAY)1Ph#}^1JprybY$J8#! za9ZPWovSymFHB1lzXWWKW)CyQ0Q>mkk5{f-*+9URNG#@r<%DH|Mj3kr|88kk7F-Gz z;Wl8F>wdV{KUcSQ9Dn?LxMCCxG`QsGsCeIw4SeM>%z|BqunVs^pQTk;)zO15I(PNg zh72?(D;l&d0!A<*1T90tQpRJ%@6Uk=`Qgf(seP0JCWkF2LT&sjdzlHAt%NI`RP% zu0$7>0Y+V6_Md`%7BJXkB9XJqX`;N1wu9Y8qc`JORd*!z3^L`iU@;l8`OqAYfn<3tY$n+x$@bD~};M*{-J5ZME80NL)2n=bP)nQ>?9h~Ys!g^~tL{7O`=KEQ7K zBiI9hfWgJ(Wx%e=yUT((J+&BWqj%$&E`m`v7i1QUFoa9Mkd85vJpik2Z*OXO0bfN@3zm@%yQk6@2FU{b@)T2Y4B%{K=G_Mm`4CKdB}0(R=5ew}o8?_qUsxVFp6 z12P9J@p9u>v2yWgTM8KRlnR$SPF5N@yMo8~-8>&zUnYYrBZI-Ymtz3=f!Q_i1Nim9 zje&saGEs^Z@JqlZ-nH?JApgSQ@w>O|+2dq;&G%-#SelsVI0hDIwRiJ}$@g%@>s77R z5rh4&5sd@vZ2{}%;z@MhV4nddTvQKy@WI1x`~|SQyonRlv5Af64cfb{^Z3yUwgnN3 z=%kan!RBKbn<_~in(o_(MNRmUJ>2Za+^xYQgZ8Rz9Z{d3sD|N~F$}QmKEXgzus7b= zwCS&aO~WfJVeTp5oOKu3qmLGuV@Dr% z99+moqJYJ~l>`^hs{w-x0f%2P39_vr#XH?Vd*zPmB02D|TzmsO&ri3>!+=2u*k>ZZ zZsf&1^ES;Juw#?E!AKrLH7zY|)@9TDV$r$A4w{fTxr3yxn|lEZ?FA;8qbNGTTix0= z!bYKgXrEAD>VOH?9de(+f<4yTF~jx7D!4WU0(PAr7+japZ)(<+zn<9lt%~y?+aiXo zX;^__SzZSW`Fw2#ikX)Qt;nWL zfE^JKm^M!#4%1*un>OpRi5tiF`3-1Taz1D{W(-p>Eocz1%F4F3HWP@Rth?JfI)cZM z3;R&enELbtN)a5x&^>_l=@?vxAO5Pa%?lh13D~r}G`aUR@iKb9AK6dC%rnM9rV9@R zE0Qg6wt!V)m;obqv~>grUpVBjzP|?zdRTWTm^h|bs1L^;|Nen*R}qFt!5$tM*oh8U znm9(Xm&J!9{f!$>?e9|7u+zsLcao4XJp< zi6R4bydT(CvIzbFt^mQP;`R$gay^pj>%1$ktm&7GHcqFFJqgDIth5)H&SU6qxI*Z~ z(2uwZ>Z`8isZ=)@0*p{h2h7QeWc@F{e0>v!DO7-9U#B)Wzn&`5 z*w0WKYp1c&M3>C13TDXQ3Jw`ZN436nsBo3~isT^2=6VH#%YvD0i_B)f?bz`gV1YY! z^skNOHIo;z$%M<0VHlE<*Sy9~+Vl1MBOwbs^FR~JJjH5$dJNbRDTOaFFt)K>!rSq~V78895{k~0s$uDI>D-+pU) zp=rlgt00>fDA>@B#&V9?uDePq?r;q-$e=X9lq+sM4!*)>Ru-LLh~yZFXmW43P6j40Tauv_^qkwg%|w6<`Ibl zTq_Pezq#gGL^)dCEHq8YCR*X#^^HG|zG!IwzyC3i5sk&6KES5lQQr|VuKy?;G%C2G zwlu*N1DFrfGL)+l0hW}V{oXyRQ>{iJx(&!a!TZO4u#F$*xr{6dlUwY@R0j$1>H|8#05iIKw` zxMbL$Ia+{gsweLo zZv2@rd-j=b8}LGq}L!nOg(cTRRjCEWQ9X56d>qdq}}nJxrgHfr7o~ z%1mvnnLO*dWYRryz~Dg&i0-7%Gks?R6`8ZGHd;&O1S~{-bp|WAhS>e%YtE)Mxp3>DX3gGx21XPsX+lnVMv=NCn6fK2#N$m z^QkJOok1vb-(m&J4qeRe)-|cIeEp1D1x&dl9ZkF zo~zi)tTX%8=K*_D#}{N!^?)%olQ-l&=YfGOXXqw{U7eR_(RzWw#B~R0MAE$M>bZAb z{Yp#oujdUc9$7!N?v#=UDSeQ%p_RCV*eU zHSkc(PM0VrDaG9I3cD5syUWaCK&fS14$y$S;nEh$qn34!CLRY6g{^W991)p9Vfr2fT%jyCa$_Y#E+SHc2%H%BIuxu)ny-dv9LNdTA46ujbG8bL_3AmygnE zY*oN-U>i;-;+Rg8m#1sDi$&AdrCw?FWPl-YO!~}1gdlrG3fr1HJ3E6B8@ouo|2;=)s< zy|Do!C&J=@;nzAu%~bfZt-DSi9^{V|yi4qw5*C*mm!e?NmJF=mII9u%;G!!fh0aU&@7&XU||BYZAxc zA|#LcGGHtxd4#%pz%l^SwrG$|2aTp~b{2bu9&Zj9p(s%6q;qfquheMmIA8SRNh^1v zFtDOZqQX)VQY@ASE~)<(vyiLEQ*kL*{uU<3UJDjql#42BSt~wawk-m7)Q*61hJVYP z@0O=0xdbd9$B>fc(#j4r?QGBT_Z6gI$b_Pb+F!XQTtLm`ib*TbBq_!W3nLxMpOQBc z1j_@MsYEB)3s=H{|CZULQkZrgCyZ)k%9QVWG^lTg>H4^_4ii?QE zcc{qV6StOl1Wa!w!ezkJv>QktHxP*!wzVK!M0pq&8>dVWCjL_c7Oi03QreOM<>G!W zSd;X~PpFW71!5p#zqi~}Yh_R1| z3rz{D(9#a7nI&l$!xBm(<)q$I(lEEN{KXfSAi&f%ZM191Zbk2J{_(z-H=O+UqR?4Y z@s^#+;v`mzeqeE8m#O3hE!9e}SS!j1yCHm%NV#a4M&>|anF1 zgtuUbd@miuC_^Uzk){pdno>bd43mTy<<>X^3@*6>88zkV=Blcy!Zblc77Z*5HUqHr zo6jG03@Ls;DQFyTC-7zCSVoM_(C_3ZnOdedZ2(&vPCxi=Fa(%pc&kk6fdvdKGCgFN zmYXYqsMmWu72$%FCZe35d>9KExzXMVRWSNujvst$@hf|iNM)2o{xS0 z8rq4hzxA8**y8P11)as)tcqRp6I~fBI~LjG0h&m`ESd&j=JB3d6Y*#AQk8_l#Asx6X*2p&c>LAjR)z9XT?D$BY>a2ZARzCr*@O zz}8wShT8NepPWQIl09^cL1o27MkV7<0V5Rgi}4i^p;&dza4A@oa@pjOEL}{6?HbNI z*8hC&FmmC37oDmh3w>K}yXEE>0VadY0fX$`@C8g`fT12TGKb+p3Pv%$kaS$RM0X-{t3m6cbH{)1TdnQ|*@`$Z{k z!Fm!f$1%7ROm0YpWpafDv>v-ua3R1%U{y5Ky$jdOImkLzC4+1s0&E87ZKlomMgRP( zpm~WQZzjl*`vKGWQ60w+T$wpJDTvV%m1);hYM6r-hHwlpqENVI&J-$9HZg>Nm(Qo1&&!vG70@U~Szp z6RBYq%qIKf7Yk?4ex3nF&bWkJ_%CVbS@k<};+_o8WPaAM1(!&`oVt8Ok5hXJ#>!=(CIfPqH3fB)z49JT%z;=Pg` zyLM*s4iKB|*LH)+e#DcN1sB3Lue%qPN+1kZm_))-Yq&i-lkBmcjMkidpTK&P?5C@~2(^!xh=_ zdm)1h0VbCaX*venq6D{F!9E6y*;%+O7*`@$bS&Y`%O@Uo$bT zE(2zR(Z^E_!00x%h>L$}8C(ixXXiBGdWQBpX`5HGia#(EH1hnNnI_-Iv7(XL&9!V7eRuOv!q2 z$tsaow(lN4>^~n|{_!Yp`XfJPhNYx%Ow6O#YQ1Z;)P|yf>HA(v4HyD!rfAO|$h2F* z=GEg*3_9dM(_zC;r(z>2EGo`$?F~l#8beIV9o+O{alnjYG~C&|T8ifmL=75wersl! ztfqr8YpAT4+fUVeCw?#wIj8XHX zjX&`~N%8wCw}DKPeeEB?=;s&D))_Lx^==hdzn**QfsSQnwcuT~o)V8<5VK%KE(t{* z8)htuh=*&