icssoa 2 месяцев назад
Родитель
Сommit
35d6cacb02
100 измененных файлов с 5997 добавлено и 6107 удалено
  1. 0 0
      .cool/animation/index.ts
  2. 42 0
      .cool/bootstrap.ts
  3. 0 1
      .cool/ctx/index.ts
  4. 0 0
      .cool/data/pca.json
  5. 11 2
      .cool/hooks/cache.ts
  6. 0 0
      .cool/hooks/index.ts
  7. 1 2
      .cool/hooks/long-press.ts
  8. 0 0
      .cool/hooks/pager.ts
  9. 0 0
      .cool/hooks/parent.ts
  10. 0 0
      .cool/hooks/refs.ts
  11. 1 1
      .cool/hooks/wx.ts
  12. BIN
      .cool/icons/iconfont.zip
  13. 2 0
      .cool/icons/iconfont/index.scss
  14. 1 2
      .cool/icons/iconfont/index.ts
  15. 0 0
      .cool/icons/index.scss
  16. 0 0
      .cool/icons/index.ts
  17. BIN
      .cool/icons/remixicon.zip
  18. 0 0
      .cool/icons/remixicon/index.scss
  19. 0 0
      .cool/icons/remixicon/index.ts
  20. 20 0
      .cool/index.scss
  21. 14 0
      .cool/index.ts
  22. 112 0
      .cool/locale/index.ts
  23. 15 0
      .cool/page/index.ts
  24. 1 3
      .cool/router/index.ts
  25. 0 353
      .cool/scripts/icon.js
  26. 0 0
      .cool/scroller/index.ts
  27. 1 1
      .cool/service/index.ts
  28. 0 0
      .cool/store/dict.ts
  29. 0 0
      .cool/store/index.ts
  30. 1 1
      .cool/store/user.ts
  31. 0 0
      .cool/theme/index.ts
  32. 23 0
      .cool/types/config.ts
  33. 3 0
      .cool/types/index.ts
  34. 0 0
      .cool/types/page.ts
  35. 5 2
      .cool/types/uni-app.d.ts
  36. 0 0
      .cool/types/user.ts
  37. 0 0
      .cool/upload/index.ts
  38. 0 0
      .cool/utils/comm.ts
  39. 0 0
      .cool/utils/day.ts
  40. 0 0
      .cool/utils/device.ts
  41. 0 0
      .cool/utils/file.ts
  42. 1 0
      .cool/utils/index.ts
  43. 0 124
      .cool/utils/parse.ts
  44. 0 0
      .cool/utils/path.ts
  45. 2 2
      .cool/utils/rect.ts
  46. 0 0
      .cool/utils/storage.ts
  47. 0 0
      .cool/utils/tailwind.ts
  48. 69 0
      .cool/utils/unit.ts
  49. 9 0
      .hbuilderx/launch.json
  50. 6 2
      .vscode/settings.json
  51. 3 3
      .vscode/template.code-snippets
  52. 1 31
      App.uvue
  53. 1 1
      README.md
  54. 2 2
      components/locale-set.uvue
  55. 2 2
      components/size-set.uvue
  56. 0 83
      components/tabbar.uvue
  57. 1 1
      config/dev.ts
  58. 2 25
      config/index.ts
  59. 1 1
      config/prod.ts
  60. 0 46
      cool/index.ts
  61. BIN
      docs/logo.png
  62. 0 0
      icons/RemixIcon_Collection_2509090754.remixicon
  63. BIN
      icons/iconfont.zip
  64. 0 2
      icons/iconfont/index.scss
  65. BIN
      icons/remixicon.zip
  66. 0 149
      locale/index.ts
  67. 354 382
      locales/en.json
  68. 403 395
      locales/es.json
  69. 823 719
      locales/fr.json
  70. 1222 1118
      locales/ja.json
  71. 1140 1064
      locales/ko.json
  72. 218 154
      locales/zh-cn.json
  73. 1338 1194
      locales/zh-tw.json
  74. 0 4
      main.ts
  75. 11 11
      manifest.json
  76. 3 13
      package.json
  77. 7 11
      pages.json
  78. 3 12
      pages/demo/basic/button.uvue
  79. 9 11
      pages/demo/basic/icon.uvue
  80. 9 5
      pages/demo/basic/image.uvue
  81. 1 1
      pages/demo/basic/tag.uvue
  82. 14 42
      pages/demo/basic/text.uvue
  83. 2 2
      pages/demo/components/goods-item.uvue
  84. 1 1
      pages/demo/components/item.uvue
  85. 1 5
      pages/demo/components/tips.uvue
  86. 2 2
      pages/demo/data/avatar.uvue
  87. 5 6
      pages/demo/data/banner.uvue
  88. 1 2
      pages/demo/data/draggable.uvue
  89. 12 38
      pages/demo/data/filter-bar.uvue
  90. 1 2
      pages/demo/data/list-view-refresh.uvue
  91. 1 1
      pages/demo/data/list-view.uvue
  92. 7 4
      pages/demo/data/list.uvue
  93. 6 6
      pages/demo/data/marquee.uvue
  94. 4 14
      pages/demo/data/pagination.uvue
  95. 4 4
      pages/demo/data/read-more.uvue
  96. 18 18
      pages/demo/data/timeline.uvue
  97. 3 3
      pages/demo/data/tree.uvue
  98. 4 4
      pages/demo/data/waterfall.uvue
  99. 5 5
      pages/demo/feedback/action-sheet.uvue
  100. 12 12
      pages/demo/feedback/confirm.uvue

+ 0 - 0
cool/animation/index.ts → .cool/animation/index.ts


+ 42 - 0
.cool/bootstrap.ts

@@ -0,0 +1,42 @@
+import { watch } from "vue";
+import { scroller } from "./scroller";
+import { initTheme, setH5 } from "./theme";
+import { locale } from "./locale";
+import { updateTitle } from "./page";
+
+export function coolPlugin(app: VueApp) {
+	app.mixin({
+		onPageScroll(e) {
+			scroller.emit(e.scrollTop);
+		},
+		onShow() {
+			// 更新标题
+			updateTitle();
+
+			// #ifdef H5
+			setTimeout(() => {
+				setH5();
+			}, 0);
+			// #endif
+
+			// 触发 onShow 事件
+			uni.$emit("page.onShow");
+		},
+		onLoad() {
+			// 监听语言切换,更新标题
+			watch(locale, () => {
+				updateTitle();
+			});
+
+			// 触发 onLoad 事件
+			uni.$emit("page.onLoad");
+		},
+		onHide() {
+			// 触发 onHide 事件
+			uni.$emit("page.onHide");
+		}
+	});
+
+	// 初始化应用主题
+	initTheme();
+}

+ 0 - 1
cool/ctx/index.ts → .cool/ctx/index.ts

@@ -45,7 +45,6 @@ export type Ctx = {
 	theme: UTSJSONObject;
 	tabBar: TabBar;
 	subPackages: SubPackage[];
-	SAFE_CHAR_MAP_LOCALE: string[][];
 	color: UTSJSONObject;
 };
 

+ 0 - 0
data/pca.json → .cool/data/pca.json


+ 11 - 2
cool/hooks/cache.ts → .cool/hooks/cache.ts

@@ -1,5 +1,6 @@
 import { reactive, watch } from "vue";
 import { isDark } from "../theme";
+import { router } from "../router";
 
 type CacheData = {
 	key: number;
@@ -10,16 +11,24 @@ type UseCache = {
 };
 
 export const useCache = (source: () => any[]): UseCache => {
+	const id = router.path();
+
 	const cache = reactive<CacheData>({
 		key: 0
 	});
 
+	const update = () => {
+		if (id == router.path()) {
+			cache.key++;
+		}
+	};
+
 	watch(source, () => {
-		cache.key++;
+		update();
 	});
 
 	watch(isDark, () => {
-		cache.key++;
+		update();
 	});
 
 	return {

+ 0 - 0
cool/hooks/index.ts → .cool/hooks/index.ts


+ 1 - 2
cool/hooks/long-press.ts → .cool/hooks/long-press.ts

@@ -1,4 +1,3 @@
-import { vibrate } from "@/uni_modules/cool-vibrate";
 import { onUnmounted, ref, type Ref } from "vue";
 
 // 长按触发延迟时间,单位毫秒
@@ -66,7 +65,7 @@ export const useLongPress = (): UseLongPress => {
 		// @ts-ignore
 		pressTimer = setTimeout(() => {
 			// 震动
-			vibrate(1);
+			uni.$emit("cool.vibrate");
 
 			// 设置长按状态
 			isPressing.value = true;

+ 0 - 0
cool/hooks/pager.ts → .cool/hooks/pager.ts


+ 0 - 0
cool/hooks/parent.ts → .cool/hooks/parent.ts


+ 0 - 0
cool/hooks/refs.ts → .cool/hooks/refs.ts


+ 1 - 1
cool/hooks/wx.ts → .cool/hooks/wx.ts

@@ -1,7 +1,7 @@
 import { ref } from "vue";
 import { assign, getUrlParam, storage } from "../utils";
 import { request } from "../service";
-import { t } from "@/locale";
+import { t } from "../locale";
 import { config } from "@/config";
 
 // #ifdef H5

BIN
.cool/icons/iconfont.zip


Разница между файлами не показана из-за своего большого размера
+ 2 - 0
.cool/icons/iconfont/index.scss


+ 1 - 2
icons/iconfont/index.ts → .cool/icons/iconfont/index.ts

@@ -1,6 +1,5 @@
 export const iconfont = {
-	"back": "e6db",
-	"yue": "e6bb",
+	"empty": "e656",
 	"wancheng": "e6bc",
 	"shibai": "e6bd",
 	"bofang": "e6be",

+ 0 - 0
icons/index.scss → .cool/icons/index.scss


+ 0 - 0
icons/index.ts → .cool/icons/index.ts


BIN
.cool/icons/remixicon.zip


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
.cool/icons/remixicon/index.scss


+ 0 - 0
icons/remixicon/index.ts → .cool/icons/remixicon/index.ts


+ 20 - 0
.cool/index.scss

@@ -0,0 +1,20 @@
+/* @tailwind base; */
+@tailwind components;
+@tailwind utilities;
+
+@import "./icons/index.scss";
+
+.uni-tabbar {
+	// #ifdef H5
+	display: none;
+	// #endif
+
+	.uni-tabbar__icon {
+		margin-top: 0;
+	}
+}
+
+.uni-toast {
+	border-radius: 32rpx;
+	background-color: rgba(0, 0, 0, 0.8) !important;
+}

+ 14 - 0
.cool/index.ts

@@ -0,0 +1,14 @@
+export * from "./animation";
+export * from "./ctx";
+export * from "./hooks";
+export * from "./router";
+export * from "./scroller";
+export * from "./service";
+export * from "./store";
+export * from "./theme";
+export * from "./upload";
+export * from "./utils";
+export * from "./types";
+export * from "./icons";
+export * from "./page";
+export * from "./locale";

+ 112 - 0
.cool/locale/index.ts

@@ -0,0 +1,112 @@
+import { isNull, forInObject, storage } from "../utils";
+import { ref } from "vue";
+
+// 解析语言包
+function parse(val: string[][]) {
+	const isCustom = val.length == 1 && val[0].length == 1;
+
+	if (!isCustom) {
+		return val;
+	}
+
+	return val[0][0].split("<__&__>").map((e) => e.split("<__=__>"));
+}
+
+// 语言包映射对象
+const messages = {};
+
+// 当前语言
+export const locale = ref<string>("");
+
+// 默认语言
+export const defaultLocale = ref<string>("none");
+
+// 设置当前语言
+export const setLocale = (value: string) => {
+	locale.value = value;
+
+	// 设置缓存
+	storage.set("locale", value, 0);
+};
+
+// 获取当前语言
+export const getLocale = (): string => {
+	let value = storage.get("locale") as string;
+
+	if (value == "") {
+		if (defaultLocale.value != "none") {
+			value = defaultLocale.value;
+		} else {
+			// #ifdef APP
+			// @ts-ignore
+			value = uni.getDeviceInfo().osLanguage as string;
+			// #endif
+
+			// #ifndef APP
+			value = uni.getLocale();
+			// #endif
+		}
+	}
+
+	return value;
+};
+
+// 追加数据
+export const appendLocale = (name: string, data: string[][]) => {
+	if (messages[name] == null) {
+		messages[name] = [] as string[][];
+	}
+
+	(messages[name] as string[][]).unshift(...parse(data));
+};
+
+// 不带参数的翻译方法
+export const t = (name: string) => {
+	let data = messages[locale.value] as string[][] | null;
+
+	if (data == null) {
+		return name;
+	}
+
+	let text = data.find((e) => e[0] == name)?.[1];
+
+	if (text == null || text == "") {
+		text = name;
+	}
+
+	return text;
+};
+
+// 带参数的翻译方法
+export const $t = (name: string, data: any) => {
+	let text = t(name);
+
+	// 替换参数
+	if (!isNull(data)) {
+		forInObject(data, (value, key) => {
+			if (typeof value === "number") {
+				value = value.toString();
+			}
+
+			text = text.replaceAll(`{${key}}`, value as string);
+		});
+	}
+
+	return text;
+};
+
+// 初始化语言设置
+export function initLocale(value: string) {
+	// 设置默认语言
+	defaultLocale.value = value;
+
+	// 设置当前语言
+	locale.value = getLocale();
+
+	// #ifndef APP
+	// 监听语言切换事件,自动更新 locale
+	uni.onLocaleChange((res) => {
+		setLocale(res.locale!);
+	});
+	// #endif
+}

+ 15 - 0
.cool/page/index.ts

@@ -0,0 +1,15 @@
+import { router } from "../router";
+import { t } from "../locale";
+
+// 更新标题
+export function updateTitle() {
+	const style = router.route()?.style;
+
+	if (style != null) {
+		if (style.navigationBarTitleText != null) {
+			uni.setNavigationBarTitle({
+				title: t(style.navigationBarTitleText as string)
+			});
+		}
+	}
+}

+ 1 - 3
cool/router/index.ts → .cool/router/index.ts

@@ -10,9 +10,7 @@ import {
 	toArray,
 	map,
 	debounce,
-	nth,
-	assign,
-	parse
+	nth
 } from "../utils";
 
 // 路由信息类型

+ 0 - 353
.cool/scripts/icon.js

@@ -1,353 +0,0 @@
-const fs = require("fs");
-const path = require("path");
-const AdmZip = require("adm-zip");
-
-// 输出目录(可通过命令行参数配置:node icon.js dist/icons)
-// 也可以按需直接修改这里的默认值
-const outputDir = process.argv[2] || "icons";
-
-// 清理所有临时文件
-function cleanupTempDir() {
-	const tempDir = path.join(".cool", "temp");
-	if (fs.existsSync(tempDir)) {
-		try {
-			fs.rmSync(tempDir, { recursive: true, force: true });
-		} catch (error) {
-			console.warn(`❌ 清理临时目录失败: ${tempDir}`, error);
-		}
-	}
-}
-
-// 确保临时目录存在
-function ensureTempDir() {
-	const tempDir = path.join(".cool", "temp");
-	if (!fs.existsSync(tempDir)) {
-		fs.mkdirSync(tempDir, { recursive: true });
-	}
-}
-
-// 创建输出目录和子目录
-function ensureDistDir(folderName = "") {
-	const iconsPath = folderName ? path.join(outputDir, folderName) : outputDir;
-	if (!fs.existsSync(iconsPath)) {
-		fs.mkdirSync(iconsPath, { recursive: true });
-	}
-}
-
-// 读取zip文件列表
-function getZipFiles() {
-	const iconsDir = path.join(".cool", "icons");
-	if (!fs.existsSync(iconsDir)) {
-		console.error(`❌ 目录不存在: ${iconsDir}`);
-		return [];
-	}
-
-	return fs.readdirSync(iconsDir).filter((item) => {
-		const filePath = path.join(iconsDir, item);
-		const stats = fs.statSync(filePath);
-		return stats.isFile() && item.endsWith(".zip");
-	});
-}
-
-// 解压zip文件到临时目录
-function extractZipFile(zipPath, folderName) {
-	try {
-		const zip = new AdmZip(zipPath);
-		const tempDir = path.join(".cool", "temp", folderName);
-
-		// 确保临时目录存在
-		if (!fs.existsSync(tempDir)) {
-			fs.mkdirSync(tempDir, { recursive: true });
-		}
-
-		// 解压到临时目录
-		zip.extractAllTo(tempDir, true);
-
-		// 检查是否有额外的顶层文件夹
-		const extractedItems = fs.readdirSync(tempDir);
-
-		// 如果只有一个项目且是文件夹,则可能是额外的包装文件夹
-		if (extractedItems.length === 1) {
-			const singleItem = extractedItems[0];
-			const singleItemPath = path.join(tempDir, singleItem);
-			const stats = fs.statSync(singleItemPath);
-
-			if (stats.isDirectory()) {
-				// 检查这个文件夹是否包含我们需要的文件
-				const innerItems = fs.readdirSync(singleItemPath);
-				const hasIconFiles = innerItems.some(
-					(item) =>
-						item.endsWith(".ttf") || item.endsWith(".json") || item.endsWith(".css")
-				);
-
-				if (hasIconFiles) {
-					return singleItemPath;
-				}
-			}
-		}
-
-		return tempDir;
-	} catch (error) {
-		console.error(`❌ 解压失败: ${zipPath}`, error);
-		return null;
-	}
-}
-
-// 将TTF文件转换为base64
-function ttfToBase64(ttfPath) {
-	try {
-		const ttfBuffer = fs.readFileSync(ttfPath);
-		return ttfBuffer.toString("base64");
-	} catch (error) {
-		console.error(`❌ 读取TTF文件失败: ${ttfPath}`, error);
-		return null;
-	}
-}
-
-// 生成TypeScript文件
-function generateTypeScript(originalFolderName, camelCaseName, iconData, iconPrefix) {
-	const tsContent = `export const ${camelCaseName} = {\n${iconData
-		.map((item) => `\t"${iconPrefix}${item.name}": "${item.unicode}"`)
-		.join(",\n")}\n};\n`;
-
-	const outputPath = path.join(outputDir, originalFolderName, "index.ts");
-	fs.writeFileSync(outputPath, tsContent);
-}
-
-// 生成SCSS文件
-function generateSCSS(originalFolderName, base64Data) {
-	const scssContent = `@font-face {\n\tfont-family: "${toCamelCase(originalFolderName)}";\n\tsrc: url("data:font/ttf;base64,${base64Data}") format("woff");\n}\n`;
-
-	const outputPath = path.join(outputDir, originalFolderName, "index.scss");
-	fs.writeFileSync(outputPath, scssContent);
-}
-
-// 从CSS文件提取图标数据(用于remixicon等)
-function extractIconsFromCSS(cssPath) {
-	try {
-		const cssContent = fs.readFileSync(cssPath, "utf8");
-		const iconData = [];
-
-		// 匹配CSS中的图标规则,例如:.ri-home-line:before { content: "\ee2b"; }
-		const regex = /\.ri-([^:]+):before\s*{\s*content:\s*"\\([^"]+)"/g;
-		let match;
-
-		while ((match = regex.exec(cssContent)) !== null) {
-			const iconName = match[1];
-			const unicode = match[2];
-
-			iconData.push({
-				name: iconName,
-				unicode: unicode
-			});
-		}
-
-		return iconData;
-	} catch (error) {
-		console.error(`❌ 读取CSS文件失败: ${cssPath}`, error);
-		return [];
-	}
-}
-
-// 读取和处理图标数据
-function processIconData(jsonPath) {
-	try {
-		const jsonData = JSON.parse(fs.readFileSync(jsonPath, "utf8"));
-		return jsonData.glyphs.map((item) => ({
-			name: item.font_class,
-			unicode: item.unicode
-		}));
-	} catch (error) {
-		console.error(`❌ 读取JSON文件失败: ${jsonPath}`, error);
-		return [];
-	}
-}
-
-// 读取iconfont图标前缀
-function getIconPrefix(jsonPath) {
-	try {
-		const jsonData = JSON.parse(fs.readFileSync(jsonPath, "utf8"));
-		return jsonData.css_prefix_text;
-	} catch (error) {
-		console.error(`❌ 读取JSON文件失败: ${jsonPath}`, error);
-		return [];
-	}
-}
-
-// 将连字符转换为驼峰命名的函数
-function toCamelCase(str) {
-	return str.replace(/-([a-z])/g, (match, letter) => letter.toUpperCase());
-}
-
-// 处理单个zip文件
-function processZipFile(zipFileName) {
-	const originalFolderName = path.basename(zipFileName, ".zip");
-	const folderName = toCamelCase(originalFolderName); // 转换为驼峰命名用于变量名
-	const zipPath = path.join(".cool", "icons", zipFileName);
-
-	// 解压zip文件 (使用原始文件夹名称)
-	const tempDir = extractZipFile(zipPath, originalFolderName);
-	if (!tempDir) {
-		return null;
-	}
-
-	// 图标库名称
-	const ptName = ["iconfont", "remixicon"];
-
-	// 获取文件路径
-	const getFilePath = (ext) => {
-		let filePath = null;
-		for (const name of ptName) {
-			const tempPath = path.join(tempDir, `${name}.${ext}`);
-			if (fs.existsSync(tempPath)) {
-				filePath = tempPath;
-				break;
-			}
-		}
-		return filePath;
-	};
-
-	// 在解压后的目录中查找文件
-	const jsonPath = getFilePath("json");
-	const cssPath = getFilePath("css");
-	const ttfPath = getFilePath("ttf");
-
-	if (!ttfPath) {
-		console.warn(`⚠️跳过 ${folderName}: 缺少 TTF 文件`);
-		return null;
-	}
-
-	let iconData = [];
-
-	let iconPrefix = "";
-
-	// 优先使用JSON文件
-	if (jsonPath) {
-		iconData = processIconData(jsonPath);
-		if (originalFolderName !== "iconfont") {
-			iconPrefix = getIconPrefix(jsonPath);
-		}
-	}
-	// 如果没有则尝试CSS文件
-	else if (cssPath) {
-		iconData = extractIconsFromCSS(cssPath);
-	} else {
-		console.warn(`⚠️ 跳过 ${folderName}: 缺少 ${jsonPath} 或 ${cssPath}`);
-		return null;
-	}
-
-	if (iconData.length === 0) {
-		console.warn(`⚠️ ${folderName}: 没有找到图标数据`);
-		return null;
-	}
-
-	console.log(`✅ ${zipFileName} 找到 ${iconData.length} 个图标`);
-
-	// 转换TTF为base64
-	const base64Data = ttfToBase64(ttfPath);
-	if (!base64Data) {
-		console.error(`❌ ${folderName}: TTF转换失败`);
-		return null;
-	}
-
-	// 为该文件夹创建icons子目录 (使用原始文件夹名称)
-	ensureDistDir(originalFolderName);
-
-	// 生成TypeScript文件 (使用驼峰命名作为变量名,原始名称作为路径)
-	generateTypeScript(originalFolderName, folderName, iconData, iconPrefix);
-
-	// 生成SCSS文件 (使用原始名称作为路径和字体名称)
-	generateSCSS(originalFolderName, base64Data);
-
-	return { originalName: originalFolderName, camelName: folderName };
-}
-
-// 生成主index.ts文件
-function generateIndexTS(actualFolders) {
-	const imports = actualFolders
-		.map((folder) => {
-			const camelName = toCamelCase(folder);
-			return `import { ${camelName} } from "./${folder}";`;
-		})
-		.join("\n");
-
-	const exports = `export const icons = {\n${actualFolders
-		.map((folder) => `\t${toCamelCase(folder)}`)
-		.join(",\n")}\n};\n`;
-
-	const content = `${imports}\n\n${exports}`;
-	fs.writeFileSync(path.join(outputDir, "index.ts"), content);
-}
-
-// 生成主index.scss文件
-function generateIndexSCSS(actualFolders) {
-	const imports = actualFolders.map((folder) => `@import "./${folder}/index.scss";`).join("\n");
-
-	fs.writeFileSync(path.join(outputDir, "index.scss"), imports + "\n");
-}
-
-// 扫描icons目录下的实际文件夹
-function getActualIconFolders() {
-	const iconsDir = outputDir;
-	if (!fs.existsSync(iconsDir)) {
-		return [];
-	}
-
-	return fs.readdirSync(iconsDir).filter((item) => {
-		const itemPath = path.join(iconsDir, item);
-		const stats = fs.statSync(itemPath);
-		return stats.isDirectory();
-	});
-}
-
-// 主函数
-function main() {
-	console.log("🚀 开始处理字体文件...\n");
-
-	// 确保临时目录存在
-	ensureTempDir();
-
-	// 确保icons目录存在
-	ensureDistDir();
-
-	try {
-		// 获取所有zip文件
-		const zipFiles = getZipFiles();
-
-		// 处理每个zip文件
-		const processedFolders = [];
-		for (const zipFile of zipFiles) {
-			const result = processZipFile(zipFile);
-			if (result) {
-				processedFolders.push(result);
-			}
-		}
-
-		// 扫描icons目录下的实际文件夹
-		const actualFolders = getActualIconFolders();
-
-		if (actualFolders.length > 0) {
-			// 生成主index文件
-			generateIndexTS(actualFolders);
-			generateIndexSCSS(actualFolders);
-		}
-
-		if (processedFolders.length > 0) {
-			const folderNames = processedFolders.map((f) =>
-				typeof f === "string" ? f : f.originalName
-			);
-			console.log(
-				`\n🎉 成功处理了 ${processedFolders.length} 个字体包: ${folderNames.join(", ")}`
-			);
-		}
-	} catch (error) {
-		console.error("❌ 脚本执行出错:", error);
-	} finally {
-		cleanupTempDir();
-	}
-}
-
-// 运行脚本
-if (require.main === module) {
-	main();
-}

+ 0 - 0
cool/scroller/index.ts → .cool/scroller/index.ts


+ 1 - 1
cool/service/index.ts → .cool/service/index.ts

@@ -1,5 +1,5 @@
 import { isDev, ignoreTokens, config } from "@/config";
-import { locale, t } from "@/locale";
+import { locale, t } from "../locale";
 import { isNull, isObject, parse, storage } from "../utils";
 import { useStore } from "../store";
 

+ 0 - 0
cool/store/dict.ts → .cool/store/dict.ts


+ 0 - 0
cool/store/index.ts → .cool/store/index.ts


+ 1 - 1
cool/store/user.ts → .cool/store/user.ts

@@ -2,7 +2,7 @@ import { computed, ref } from "vue";
 import { forInObject, isNull, isObject, parse, storage } from "../utils";
 import { router } from "../router";
 import { request } from "../service";
-import type { UserInfo } from "@/types";
+import type { UserInfo } from "../types";
 
 export type Token = {
 	token: string; // 访问token

+ 0 - 0
cool/theme/index.ts → .cool/theme/index.ts


+ 23 - 0
.cool/types/config.ts

@@ -0,0 +1,23 @@
+// 微信配置
+export type WxConfig = {
+	debug: boolean;
+};
+
+// 应用配置
+export type Config = {
+	name: string; // 应用名称
+	locale?: string; // 应用语言
+	website: string; // 官网地址
+	host: string; // 主机地址
+	baseUrl: string; // 基础路径
+	showDarkButton: boolean; // 是否显示暗色模式切换按钮
+	isCustomTabBar: boolean; // 是否自定义 tabBar
+	backTop: boolean; // 是否显示回到顶部按钮
+	wx: WxConfig; // 微信配置
+};
+
+// 插件配置
+export type PluginConfig = {
+	options?: UTSJSONObject;
+	install(app: VueApp): UTSJSONObject | void;
+};

+ 3 - 0
.cool/types/index.ts

@@ -0,0 +1,3 @@
+export * from "./user";
+export * from "./page";
+export * from "./config";

+ 0 - 0
cool/types/index.ts → .cool/types/page.ts


+ 5 - 2
types/uni-app.d.ts → .cool/types/uni-app.d.ts

@@ -10,6 +10,11 @@ declare module "@/uni_modules/cool-open-web" {
 
 declare type Theme = "light" | "dark";
 
+declare interface VueApp {
+	use(plugin: any): void;
+	[key: string]: any;
+};
+
 declare interface Uni {
 	setAppTheme(options: {
 		theme: "auto" | Theme;
@@ -479,8 +484,6 @@ declare interface CanvasContext extends HTMLCanvasElement {
 
 declare type Image = HTMLImageElement;
 
-declare type VueApp = any;
-
 declare interface UniNativeViewElement extends UniElement {
 	bindAndroidView(view: any): void;
 	bindIOSView(): void;

+ 0 - 0
types/index.ts → .cool/types/user.ts


+ 0 - 0
cool/upload/index.ts → .cool/upload/index.ts


+ 0 - 0
cool/utils/comm.ts → .cool/utils/comm.ts


+ 0 - 0
cool/utils/day.ts → .cool/utils/day.ts


+ 0 - 0
cool/utils/device.ts → .cool/utils/device.ts


+ 0 - 0
cool/utils/file.ts → .cool/utils/file.ts


+ 1 - 0
cool/utils/index.ts → .cool/utils/index.ts

@@ -7,3 +7,4 @@ export * from "./parse";
 export * from "./path";
 export * from "./rect";
 export * from "./storage";
+export * from "./unit";

+ 0 - 124
cool/utils/parse.ts → .cool/utils/parse.ts

@@ -118,127 +118,3 @@ export function parseToObject<T>(data: T): UTSJSONObject {
 	return JSON.parse(JSON.stringify(data || {})) as UTSJSONObject;
 	// #endif
 }
-
-/**
- * 将rpx单位转换为px单位
- * @param rpx 要转换的rpx值
- * @returns 转换后的px值
- * @example
- */
-export const rpx2px = (rpx: number): number => {
-	let px: number;
-
-	// #ifdef MP
-	px = rpx / (750 / uni.getWindowInfo().windowWidth);
-	// #endif
-
-	// #ifndef MP
-	px = uni.rpx2px(rpx);
-	// #endif
-
-	return px;
-};
-
-/**
- * 将px单位转换为rpx单位
- * @param px 要转换的px值
- * @returns 转换后的rpx值
- * @example
- */
-export const px2rpx = (px: number): number => {
-	return px / rpx2px(1);
-};
-
-/**
- * 将数值或字符串转换为rpx单位的字符串
- * @param val 要转换的值,可以是数字或字符串
- * @returns 转换后的rpx单位字符串
- * @example
- * parseRpx(10) // 返回 '10rpx'
- * parseRpx('10rpx') // 返回 '10rpx'
- * parseRpx('10px') // 返回 '10px'
- */
-export const parseRpx = (val: number | string): string => {
-	if (typeof val == "number") {
-		return val + "rpx";
-	}
-
-	return val;
-};
-
-/**
- * 示例: 获取数值部分
- * @example
- * getNum("10rpx") // 返回 10
- * getNum("10px")  // 返回 10
- * getNum("10")    // 返回 10
- * getNum("-5.5px") // 返回 -5.5
- * @param val - 输入值,例如 "10rpx"、"10px"、"10"
- * @returns number - 返回提取的数值
- */
-export const getNum = (val: string): number => {
-	// 使用正则提取数字部分,支持小数和负数
-	const match = val.match(/-?\d+(\.\d+)?/);
-	return match != null ? parseFloat(match[0] ?? "0") : 0;
-};
-
-/**
- * 示例: 获取单位
- * @example
- * getUnit("10rpx") // 返回 "rpx"
- * getUnit("10px")  // 返回 "px"
- * @param val - 输入值,例如 "10rpx"、"10px"
- * @returns string - 返回单位字符串,如 "rpx" 或 "px"
- */
-export const getUnit = (val: string): string => {
-	const num = getNum(val);
-	return val.replace(`${num}`, "");
-};
-
-/**
- * 示例: 转换为 rpx 值
- * @example
- * getRpx("10rpx") // 返回 10
- * getRpx("10px")  // 返回 px2rpx(10)
- * getRpx(10)      // 返回 10
- * @param val - 输入值,可以是 "10rpx"、"10px" 或数字 10
- * @returns number - 返回对应的 rpx 数值
- */
-export const getRpx = (val: number | string): number => {
-	if (typeof val == "number") {
-		return val;
-	}
-
-	const num = getNum(val);
-	const unit = getUnit(val);
-
-	if (unit == "px") {
-		return px2rpx(num);
-	}
-
-	return num;
-};
-
-/**
- * 示例: 转换为 px 值
- * @example
- * getPx("10rpx") // 返回 rpx2px(10)
- * getPx("10px")  // 返回 10
- * getPx(10)      // 返回 rpx2px(10)
- * @param val - 输入值,可以是 "10rpx"、"10px" 或数字 10
- * @returns number - 返回对应的 px 数值
- */
-export const getPx = (val: string | number) => {
-	if (typeof val == "number") {
-		return rpx2px(val);
-	}
-
-	const num = getNum(val);
-	const unit = getUnit(val);
-
-	if (unit == "rpx") {
-		return rpx2px(num);
-	}
-
-	return num;
-};

+ 0 - 0
cool/utils/path.ts → .cool/utils/path.ts


+ 2 - 2
cool/utils/rect.ts → .cool/utils/rect.ts

@@ -2,7 +2,7 @@ import { config } from "@/config";
 import { router } from "../router";
 import { isH5, isHarmony } from "./device";
 import { ctx } from "../ctx";
-import { getPx } from "./parse";
+import { getNum } from "./unit";
 
 /**
  * 是否需要计算 tabBar 高度
@@ -58,7 +58,7 @@ export function getSafeAreaHeight(type: "top" | "bottom") {
  * @returns tabBar 高度
  */
 export function getTabBarHeight() {
-	let h = ctx.tabBar.height == null ? 50 : getPx(ctx.tabBar.height!);
+	let h = ctx.tabBar.height == null ? 50 : getNum(ctx.tabBar.height!);
 
 	if (hasCustomTabBar()) {
 		h += getSafeAreaHeight("bottom");

+ 0 - 0
cool/utils/storage.ts → .cool/utils/storage.ts


+ 0 - 0
cool/utils/tailwind.ts → .cool/utils/tailwind.ts


+ 69 - 0
.cool/utils/unit.ts

@@ -0,0 +1,69 @@
+/**
+ * 将rpx转换为px
+ * @param rpx - 输入值
+ * @returns number - 返回对应的px值
+ */
+export const rpx2px = (rpx: number): number => {
+	let px: number;
+
+	// #ifdef MP
+	px = rpx / (750 / uni.getWindowInfo().windowWidth);
+	// #endif
+
+	// #ifndef MP
+	px = uni.rpx2px(rpx);
+	// #endif
+
+	return px;
+};
+
+/**
+ * 将px转换为rpx
+ * @param px - 输入值
+ * @returns number - 返回对应的rpx值
+ */
+export const px2rpx = (px: number): number => {
+	return px / rpx2px(1);
+};
+
+/**
+ * 将数值或字符串转换为对应的单位
+ * @param val - 输入值,例如 10、"10rpx"、"10px"
+ * @returns string - 返回对应的单位
+ */
+export const getUnit = (val: string | number | null): string | null => {
+	if (val != null) {
+		if (typeof val == "string") {
+			const num = parseFloat(val);
+			const unit = val.replace(`${num}`, "");
+
+			if (unit == "rpx") {
+				return `${rpx2px(num)}px`;
+			} else if (unit == "%") {
+				return `${num}%`;
+			} else {
+				return `${num}px`;
+			}
+		} else {
+			return `${val}px`;
+		}
+	}
+
+	return null;
+};
+
+/**
+ * 示例: 获取数值部分
+ * @example
+ * getNum("10rpx") // 返回 10
+ * getNum("10px")  // 返回 10
+ * getNum("10")    // 返回 10
+ * getNum("-5.5px") // 返回 -5.5
+ * @param val - 输入值,例如 "10rpx"、"10px"、"10"
+ * @returns number - 返回提取的数值
+ */
+export const getNum = (val: string): number => {
+	// 使用正则提取数字部分,支持小数和负数
+	const match = val.match(/-?\d+(\.\d+)?/);
+	return match != null ? parseFloat(match[0] ?? "0") : 0;
+};

+ 9 - 0
.hbuilderx/launch.json

@@ -9,6 +9,15 @@
             "customPlaygroundType" : "local",
             "playground" : "custom",
             "type" : "uni-app:app-android"
+        },
+        {
+            "bundleId" : "com.zyys.zy",
+            "certificateFile" : "/Users/jiangshuai/Desktop/coding/zyys/zyys/doc/ios/证书.p12",
+            "certificateProfileFile" : "/Users/jiangshuai/Desktop/coding/zyys/zyys/doc/ios/zy.mobileprovision",
+            "customPlaygroundType" : "device",
+            "playground" : "standard",
+            "runSignStatus" : 0,
+            "type" : "uni-app:app-ios"
         }
     ]
 }

+ 6 - 2
.vscode/settings.json

@@ -10,7 +10,11 @@
 	"[uvue]": {
 		"editor.defaultFormatter": "esbenp.prettier-vscode"
 	},
-	"prettier.documentSelectors": ["**/*.uvue", "**/*.uts", "**/*.ts"],
+	"prettier.documentSelectors": [
+		"**/*.uvue",
+		"**/*.uts",
+		"**/*.ts"
+	],
 	"prettier.requireConfig": true,
 	"[ets]": {
 		"editor.defaultFormatter": "NailyZero.vscode-naily-ets"
@@ -19,4 +23,4 @@
 	"[xml]": {
 		"editor.defaultFormatter": "redhat.vscode-xml"
 	}
-}
+}

+ 3 - 3
.vscode/template.code-snippets

@@ -12,7 +12,7 @@
 			"</template>",
 			"",
 			"<script lang=\"ts\" setup>",
-			"import { router } from \"@/cool\";",
+			"import { router } from \"@/.cool\";",
 			"",
 			"</script>",
 			"",
@@ -35,7 +35,7 @@
 			"",
 			"<script lang=\"ts\" setup>",
 			"import { ref } from \"vue\";",
-			"import { router } from \"@/cool\";",
+			"import { router } from \"@/.cool\";",
 			"",
 			"// 是否可见",
 			"const visible = ref(false);",
@@ -90,7 +90,7 @@
 			"",
 			"<script lang=\"ts\" setup>",
 			"import { ref } from \"vue\";",
-			"import { usePager, request } from \"@/cool\";",
+			"import { usePager, request } from \"@/.cool\";",
 			"import { useUi } from \"@/uni_modules/cool-ui\";",
 			"",
 			"const ui = useUi();",

+ 1 - 31
App.uvue

@@ -1,11 +1,5 @@
 <script lang="ts">
-import { useStore } from "@/cool";
-
-// #ifdef H5
-import TouchEmulator from "hammer-touchemulator";
-// 模拟移动端调试的触摸事件
-TouchEmulator();
-// #endif
+import { useStore } from "./.cool";
 
 export default {
 	onLaunch: function () {
@@ -28,27 +22,3 @@ export default {
 	}
 };
 </script>
-
-<style lang="scss">
-@import url("static/index.scss");
-@import url("icons/index.scss");
-
-.safe-area-top {
-	margin-top: env(safe-area-inset-top);
-}
-
-.uni-tabbar {
-	// #ifdef H5
-	display: none;
-	// #endif
-
-	.uni-tabbar__icon {
-		margin-top: 0;
-	}
-}
-
-.uni-toast {
-	border-radius: 32rpx;
-	background-color: rgba(0, 0, 0, 0.8) !important;
-}
-</style>

+ 1 - 1
README.md

@@ -40,7 +40,7 @@ Cool Unix 是一个高效的项目脚手架。它内置了 UI 组件库、Servic
 
 ```html
 <script setup lang="ts">
-	import { $t, t } from "@/uni_modules/cool-ui";
+	import { $t, t } from "@/.cool";
 	import { useUi } from "@/uni_modules/cool-ui";
 
 	const ui = useUi();

+ 2 - 2
components/locale-set.uvue

@@ -11,7 +11,7 @@
 </template>
 
 <script setup lang="ts">
-import { locale, setLocale, t } from "@/locale";
+import { locale, setLocale, t } from "@/.cool";
 import { useUi, type ClSelectOption } from "@/uni_modules/cool-ui";
 import { ref } from "vue";
 
@@ -52,7 +52,7 @@ const options = [
 const selectRef = ref<ClSelectComponentPublicInstance | null>(null);
 
 // 当前语言
-const active = ref(locale.value);
+const active = ref<string>(locale.value);
 
 // 打开
 function open() {

+ 2 - 2
components/size-set.uvue

@@ -11,7 +11,7 @@
 			<view class="px-3 absolute top-0 left-0 z-10">
 				<cl-text
 					:style="{
-						fontSize: 28 * size + 'rpx'
+						fontSize: 14 * size + 'px'
 					}"
 					>{{ t("这是一段示例文字,用于预览不同字号的效果。") }}</cl-text
 				>
@@ -21,7 +21,7 @@
 </template>
 
 <script setup lang="ts">
-import { t } from "@/locale";
+import { t } from "@/.cool";
 import { type ClSelectOption } from "@/uni_modules/cool-ui";
 import { config } from "@/uni_modules/cool-ui/config";
 import { ref } from "vue";

+ 0 - 83
components/tabbar.uvue

@@ -1,83 +0,0 @@
-<template>
-	<cl-footer
-		:pt="{
-			content: {
-				className: '!p-0 h-[60px]'
-			}
-		}"
-	>
-		<view class="custom-tabbar" :class="{ 'is-dark': isDark }">
-			<view
-				class="custom-tabbar-item"
-				v-for="item in list"
-				:key="item.pagePath"
-				@tap="router.to(item.pagePath)"
-			>
-				<cl-image
-					:src="path == item.pagePath ? item.icon2 : item.icon"
-					:height="56"
-					:width="56"
-				></cl-image>
-
-				<cl-text
-					v-if="item.text != null"
-					:pt="{
-						className: parseClass([
-							'text-xs mt-1',
-							[path == item.pagePath, 'text-primary-500', 'text-surface-400']
-						])
-					}"
-					>{{ t(item.text!) }}</cl-text
-				>
-			</view>
-		</view>
-	</cl-footer>
-</template>
-
-<script setup lang="ts">
-import { ctx, isDark, parseClass, router } from "@/cool";
-import { t } from "@/locale";
-import { computed } from "vue";
-
-defineOptions({
-	name: "custom-tabbar"
-});
-
-type Item = {
-	icon: string;
-	icon2: string;
-	pagePath: string;
-	text: string | null;
-};
-
-const path = computed(() => router.path());
-
-// tabbar 列表
-const list = computed<Item[]>(() => {
-	return (ctx.tabBar.list ?? []).map((e) => {
-		return {
-			icon: e.iconPath!,
-			icon2: e.selectedIconPath!,
-			pagePath: e.pagePath,
-			text: t(e.text?.replaceAll("%", "")!)
-		} as Item;
-	});
-});
-
-// 隐藏原生 tabBar
-// #ifndef MP
-if (ctx.tabBar.list != null) {
-	uni.hideTabBar();
-}
-// #endif
-</script>
-
-<style lang="scss" scoped>
-.custom-tabbar {
-	@apply flex flex-row items-center flex-1;
-
-	&-item {
-		@apply flex flex-col items-center justify-center flex-1;
-	}
-}
-</style>

+ 1 - 1
config/dev.ts

@@ -1,4 +1,4 @@
-import { get } from "@/cool";
+import { get } from "@/.cool";
 import { proxy, value } from "./proxy";
 
 export const dev = () => {

+ 2 - 25
config/index.ts

@@ -1,4 +1,4 @@
-import { isMp } from "@/cool";
+import { isMp, type Config } from "@/.cool";
 import { dev } from "./dev";
 import { prod } from "./prod";
 
@@ -8,30 +8,10 @@ export const isDev = process.env.NODE_ENV == "development";
 // 忽略 token 校验的接口路径
 export const ignoreTokens: string[] = [];
 
-// 微信配置
-type WxConfig = {
-	debug: boolean;
-};
-
-// 配置类型定义
-type Config = {
-	name: string; // 应用名称
-	version: string; // 应用版本
-	locale: string; // 应用语言
-	website: string; // 官网地址
-	host: string; // 主机地址
-	baseUrl: string; // 基础路径
-	showDarkButton: boolean; // 是否显示暗色模式切换按钮
-	isCustomTabBar: boolean; // 是否自定义 tabBar
-	backTop: boolean; // 是否显示回到顶部按钮
-	wx: WxConfig; // 微信配置
-};
-
 // 根据环境导出最终配置
 export const config = {
 	name: "Cool Unix",
-	version: "1.0.0",
-	locale: "zh",
+	locale: "zh-tw",
 	website: "https://cool-js.com",
 	showDarkButton: isMp() ? false : true,
 	isCustomTabBar: true,
@@ -41,6 +21,3 @@ export const config = {
 	},
 	...(isDev ? dev() : prod())
 } as Config;
-
-// 导出代理相关配置
-export * from "./proxy";

+ 1 - 1
config/prod.ts

@@ -1,4 +1,4 @@
-import { get } from "@/cool";
+import { get } from "@/.cool";
 import { proxy } from "./proxy";
 
 export const prod = () => {

+ 0 - 46
cool/index.ts

@@ -1,46 +0,0 @@
-import { watch } from "vue";
-import { scroller } from "./scroller";
-import { initTheme, setH5 } from "./theme";
-import { initLocale, locale, updateTitle } from "@/locale";
-import "@/uni_modules/cool-ui";
-
-export function cool(app: VueApp) {
-	app.mixin({
-		onPageScroll(e) {
-			scroller.emit(e.scrollTop);
-		},
-		onShow() {
-			// 更新标题
-			updateTitle();
-
-			// #ifdef H5
-			setTimeout(() => {
-				setH5();
-			}, 0);
-			// #endif
-		},
-		onLoad() {
-			// 监听语言切换,更新标题
-			watch(locale, () => {
-				updateTitle();
-			});
-		}
-	});
-
-	initTheme();
-	initLocale();
-
-	console.log(app);
-}
-
-export * from "./animation";
-export * from "./ctx";
-export * from "./hooks";
-export * from "./router";
-export * from "./scroller";
-export * from "./service";
-export * from "./store";
-export * from "./theme";
-export * from "./upload";
-export * from "./utils";
-export * from "./types";


+ 0 - 0
.cool/remixicon/RemixIcon_Collection_2509090754.remixicon → icons/RemixIcon_Collection_2509090754.remixicon


BIN
icons/iconfont.zip


Разница между файлами не показана из-за своего большого размера
+ 0 - 2
icons/iconfont/index.scss


BIN
icons/remixicon.zip


+ 0 - 149
locale/index.ts

@@ -1,149 +0,0 @@
-import { isNull, forInObject, isEmpty, storage, router } from "@/cool";
-import { ref } from "vue";
-import zhcn from "./zh-cn.json";
-import zhtw from "./zh-tw.json";
-import en from "./en.json";
-import es from "./es.json";
-import ja from "./ja.json";
-import ko from "./ko.json";
-import fr from "./fr.json";
-import { config } from "@/config";
-
-// 解析语言包
-function parse(val: string[][]) {
-	const isCustom = val.length == 1 && val[0].length == 1;
-
-	if (!isCustom) {
-		return val;
-	}
-
-	return val[0][0].split("<__&__>").map((e) => e.split("<__=__>"));
-}
-
-/**
- * 语言包映射对象,包含所有已支持的语言。
- * 如需新增语言,只需新建对应的 xx.json 文件并在此处引入即可。
- */
-const messages = {
-	"zh-cn": parse(zhcn),
-	"zh-tw": parse(zhtw),
-	en: parse(en),
-	es: parse(es),
-	ja: parse(ja),
-	ko: parse(ko),
-	fr: parse(fr)
-};
-
-// 当前语言,默认中文
-export const locale = ref<string>("");
-
-// 设置当前语言
-export const setLocale = (value: string) => {
-	locale.value = value;
-
-	// #ifdef APP
-	// APP 环境下,存储语言到本地
-	storage.set("locale", value, 0);
-	// #endif
-
-	// #ifndef APP
-	// 其他环境下,直接设置全局语言
-	uni.setLocale(value);
-	// #endif
-};
-
-// 获取当前语言
-export const getLocale = (): string => {
-	let value: string;
-
-	// #ifdef APP
-	// APP 环境下,优先从本地存储获取
-	const _locale = storage.get("locale") as string | null;
-
-	if (_locale != null && !isEmpty(_locale)) {
-		value = _locale;
-	} else {
-		// @ts-ignore
-		value = uni.getDeviceInfo().osLanguage as string;
-	}
-
-	// #endif
-
-	// #ifndef APP
-	// 其他环境下,直接获取全局语言
-	value = uni.getLocale();
-	// #endif
-
-	if (isNull(value) || isEmpty(value)) {
-		value = config.locale;
-	}
-
-	return value;
-};
-
-// 追加数据
-export const appendLocale = (name: string, data: string[][]) => {
-	if (messages[name] != null) {
-		(messages[name] as string[][]).unshift(...parse(data));
-	}
-};
-
-// 不带参数的翻译方法
-export const t = (name: string) => {
-	let data = messages[locale.value] as string[][] | null;
-
-	if (data == null) {
-		return name;
-	}
-
-	let text = data.find((e) => e[0] == name)?.[1];
-
-	if (text == null || text == "") {
-		text = name;
-	}
-
-	return text;
-};
-
-// 带参数的翻译方法
-export const $t = (name: string, data: any) => {
-	let text = t(name);
-
-	// 替换参数
-	if (!isNull(data)) {
-		forInObject(data, (value, key) => {
-			if (typeof value === "number") {
-				value = value.toString();
-			}
-
-			text = text.replaceAll(`{${key}}`, value as string);
-		});
-	}
-
-	return text;
-};
-
-// 初始化语言设置
-export const initLocale = () => {
-	locale.value = getLocale();
-
-	// #ifndef APP
-	// 监听语言切换事件,自动更新 locale
-	uni.onLocaleChange((res) => {
-		setLocale(res.locale!);
-	});
-	// #endif
-};
-
-// 更新标题
-export function updateTitle() {
-	const style = router.route()?.style;
-
-	if (style != null) {
-		if (style.navigationBarTitleText != null) {
-			uni.setNavigationBarTitle({
-				title: t(style.navigationBarTitleText as string)
-			});
-		}
-	}
-}

Разница между файлами не показана из-за своего большого размера
+ 354 - 382
locales/en.json


Разница между файлами не показана из-за своего большого размера
+ 403 - 395
locales/es.json


Разница между файлами не показана из-за своего большого размера
+ 823 - 719
locales/fr.json


Разница между файлами не показана из-за своего большого размера
+ 1222 - 1118
locales/ja.json


Разница между файлами не показана из-за своего большого размера
+ 1140 - 1064
locales/ko.json


+ 218 - 154
locale/zh-cn.json → locales/zh-cn.json

@@ -116,6 +116,38 @@
     ""
   ],
   [
+    "获取短信验证码",
+    ""
+  ],
+  [
+    "验证码",
+    ""
+  ],
+  [
+    "发送短信",
+    ""
+  ],
+  [
+    "{n}s后重新获取",
+    ""
+  ],
+  [
+    "获取验证码",
+    ""
+  ],
+  [
+    "短信已发送,请查收",
+    ""
+  ],
+  [
+    "请填写验证码",
+    ""
+  ],
+  [
+    "请填写正确的手机号格式",
+    ""
+  ],
+  [
     "提示",
     ""
   ],
@@ -148,11 +180,11 @@
     ""
   ],
   [
-    "手机登录",
+    "您好,欢迎登录!",
     ""
   ],
   [
-    "未注册的手机号登录成功后将自动注册",
+    "首次登录将自动为您完成注册",
     ""
   ],
   [
@@ -324,7 +356,7 @@
     ""
   ],
   [
-    "联系客服",
+    "联系我们",
     ""
   ],
   [
@@ -352,6 +384,14 @@
     ""
   ],
   [
+    "社交",
+    ""
+  ],
+  [
+    "帖子详情",
+    ""
+  ],
+  [
     "商城",
     ""
   ],
@@ -612,6 +652,10 @@
     ""
   ],
   [
+    "底部导航栏",
+    ""
+  ],
+  [
     "数据展示",
     ""
   ],
@@ -740,6 +784,10 @@
     ""
   ],
   [
+    "选座",
+    ""
+  ],
+  [
     "该功能正在开发中",
     ""
   ],
@@ -864,6 +912,50 @@
     ""
   ],
   [
+    "水印文本",
+    ""
+  ],
+  [
+    "透明度",
+    ""
+  ],
+  [
+    "旋转角度",
+    ""
+  ],
+  [
+    "水印宽度",
+    ""
+  ],
+  [
+    "水印高度",
+    ""
+  ],
+  [
+    "水平间距",
+    ""
+  ],
+  [
+    "垂直间距",
+    ""
+  ],
+  [
+    "字体粗细",
+    ""
+  ],
+  [
+    "图片保护",
+    ""
+  ],
+  [
+    "正常",
+    ""
+  ],
+  [
+    "加粗",
+    ""
+  ],
+  [
     "点击触发",
     ""
   ],
@@ -916,6 +1008,30 @@
     ""
   ],
   [
+    "分享文本",
+    ""
+  ],
+  [
+    "分享图片",
+    ""
+  ],
+  [
+    "分享文件",
+    ""
+  ],
+  [
+    "分享链接",
+    ""
+  ],
+  [
+    "确认选座后将无法修改,是否确认?",
+    ""
+  ],
+  [
+    "选座成功",
+    ""
+  ],
+  [
     "添加LOGO",
     ""
   ],
@@ -1040,6 +1156,26 @@
     ""
   ],
   [
+    "ID",
+    ""
+  ],
+  [
+    "用户信息",
+    ""
+  ],
+  [
+    "跳转",
+    ""
+  ],
+  [
+    "带参数",
+    ""
+  ],
+  [
+    "需登录",
+    ""
+  ],
+  [
     "标题",
     ""
   ],
@@ -1056,6 +1192,10 @@
     ""
   ],
   [
+    "禁用返回按钮",
+    ""
+  ],
+  [
     "自定义返回路径",
     ""
   ],
@@ -1096,6 +1236,22 @@
     ""
   ],
   [
+    "首页",
+    ""
+  ],
+  [
+    "音乐",
+    ""
+  ],
+  [
+    "睡眠",
+    ""
+  ],
+  [
+    "我的",
+    ""
+  ],
+  [
     "取消订单",
     ""
   ],
@@ -1156,7 +1312,7 @@
     ""
   ],
   [
-    "上传证件照",
+    "上传您的证件照",
     ""
   ],
   [
@@ -1272,6 +1428,10 @@
     ""
   ],
   [
+    "空数据",
+    ""
+  ],
+  [
     "时",
     ""
   ],
@@ -1376,6 +1536,14 @@
     ""
   ],
   [
+    "保留精度",
+    ""
+  ],
+  [
+    "精度",
+    ""
+  ],
+  [
     "左图标",
     ""
   ],
@@ -1580,6 +1748,10 @@
     ""
   ],
   [
+    "开始 / 结束",
+    ""
+  ],
+  [
     "禁用部分日期",
     ""
   ],
@@ -1712,11 +1884,19 @@
     ""
   ],
   [
-    "确定要删除吗?",
+    "您即将进行一个重要操作,是否确认继续?",
+    ""
+  ],
+  [
+    "操作确认",
     ""
   ],
   [
-    "确定要删除吗?3秒后自动关闭",
+    "您确认要执行删除操作吗?删除后将无法恢复。",
+    ""
+  ],
+  [
+    "您确定要执行删除操作吗?3秒后自动关闭",
     ""
   ],
   [
@@ -1816,47 +1996,51 @@
     ""
   ],
   [
-    "开通账号",
+    "注册账户",
     ""
   ],
   [
-    "赠送500元",
+    "新用户立享500元体验金",
     ""
   ],
   [
-    "完成实名认证",
+    "实名认证通过",
     ""
   ],
   [
-    "通过身份认证",
+    "身份认证成功,开启安全保障",
     ""
   ],
   [
-    "绑定银行卡",
+    "银行卡绑定完成",
     ""
   ],
   [
-    "绑定招商银行储蓄卡",
+    "成功绑定招商银行储蓄卡,畅享无忧交易",
     ""
   ],
   [
-    "首次充值",
+    "首次资金充值",
     ""
   ],
   [
-    "充值1000元",
+    "充值1000元资金到账,准备投资",
     ""
   ],
   [
-    "完成首笔交易",
+    "完成首笔投资",
     ""
   ],
   [
-    "优选灵活配置混合A",
+    "优选灵活配置混合A基金",
     ""
   ],
   [
-    "1000元起",
+    "起投金额1000元",
+    ""
+  ],
+  [
+    "立即申购",
     ""
   ],
   [
@@ -1864,6 +2048,10 @@
     ""
   ],
   [
+    "动态内容",
+    ""
+  ],
+  [
     "自定义高度",
     ""
   ],
@@ -2148,66 +2336,6 @@
     ""
   ],
   [
-    "无权限",
-    ""
-  ],
-  [
-    "服务异常",
-    ""
-  ],
-  [
-    "请在微信浏览器中打开",
-    ""
-  ],
-  [
-    "已取消支付",
-    ""
-  ],
-  [
-    "支付失败",
-    ""
-  ],
-  [
-    "授权信息仅用于用户登录",
-    ""
-  ],
-  [
-    "登录授权失败",
-    ""
-  ],
-  [
-    "获取短信验证码",
-    ""
-  ],
-  [
-    "验证码",
-    ""
-  ],
-  [
-    "发送短信",
-    ""
-  ],
-  [
-    "{n}s后重新获取",
-    ""
-  ],
-  [
-    "获取验证码",
-    ""
-  ],
-  [
-    "短信已发送,请查收",
-    ""
-  ],
-  [
-    "请填写验证码",
-    ""
-  ],
-  [
-    "请填写正确的手机号格式",
-    ""
-  ],
-  [
     "全局字号",
     ""
   ],
@@ -2352,6 +2480,10 @@
     ""
   ],
   [
+    "Tabbar 底部导航栏",
+    ""
+  ],
+  [
     "List 列表",
     ""
   ],
@@ -2460,6 +2592,10 @@
     ""
   ],
   [
+    "Watermark 水印",
+    ""
+  ],
+  [
     "DayUts 日期",
     ""
   ],
@@ -2488,95 +2624,23 @@
     ""
   ],
   [
-    "编辑地址",
-    ""
-  ],
-  [
-    "cool-unix",
+    "Router 路由",
     ""
   ],
   [
-    "首页",
+    "Share 分享",
     ""
   ],
   [
-    "我的",
-    ""
-  ],
-  [
-    "这是一段需要保护的内容",
-    ""
-  ],
-  [
-    "水印会覆盖在内容上方,防止内容被盗用",
-    ""
-  ],
-  [
-    "可自定义的水印内容区域",
-    ""
-  ],
-  [
-    "水印文本",
-    ""
-  ],
-  [
-    "字体大小",
-    ""
-  ],
-  [
-    "透明度",
-    ""
-  ],
-  [
-    "旋转角度",
-    ""
-  ],
-  [
-    "水印宽度",
+    "SelectSeat 座位选择",
     ""
   ],
   [
-    "水印高度",
-    ""
-  ],
-  [
-    "水平间距",
-    ""
-  ],
-  [
-    "垂直间距",
-    ""
-  ],
-  [
-    "字体粗细",
-    ""
-  ],
-  [
-    "正常",
-    ""
-  ],
-  [
-    "加粗",
-    ""
-  ],
-  [
-    "多行文本水印",
-    ""
-  ],
-  [
-    "重要文档",
-    ""
-  ],
-  [
-    "这是一份重要的文档内容,需要添加水印保护。",
-    ""
-  ],
-  [
-    "水印可以防止内容被未授权的复制和传播。",
+    "编辑地址",
     ""
   ],
   [
-    "图片保护",
+    "cool-unix",
     ""
   ]
 ]

+ 1338 - 1194
locale/zh-tw.json → locales/zh-tw.json

@@ -1,371 +1,407 @@
 [
   [
-    "Animation 动画",
-    "動畫"
+    "cool-unix",
+    "酷 Unix"
   ],
   [
-    "编辑地址",
-    "編輯地址"
+    "指定秒",
+    "指定秒"
   ],
   [
-    "cool-unix",
-    "cool-unix"
+    "完成后提示",
+    "完成後提示"
   ],
   [
-    "首页",
-    "首頁"
+    "3秒后开始倒计时",
+    "3秒後開始倒計時"
   ],
   [
-    "我的",
-    "我的"
+    "结合按钮",
+    "結合按鈕"
   ],
   [
-    "开发中,敬请期待",
-    "開發中,敬請期待"
+    "购买",
+    "購買"
   ],
   [
-    "基础组件",
-    "基礎組件"
+    "消息",
+    "消息"
   ],
   [
-    "文本",
-    "文本"
+    "结合图片",
+    "結合圖片"
   ],
   [
-    "按钮",
-    "按鈕"
+    "结合图标",
+    "結合圖標"
   ],
   [
-    "图片",
-    "圖片"
+    "水印文本",
+    "水印文本"
   ],
   [
-    "图标",
-    "圖標"
+    "透明度",
+    "透明度"
   ],
   [
-    "标签",
-    "標籤"
+    "旋转角度",
+    "旋轉角度"
   ],
   [
-    "表单组件",
-    "表單組件"
+    "水印宽度",
+    "水印寬度"
   ],
   [
-    "表单验证",
-    "表單驗證"
+    "水印高度",
+    "水印高度"
   ],
   [
-    "输入框",
-    "輸入框"
+    "水平间距",
+    "水平間距"
   ],
   [
-    "文本域",
-    "文本域"
+    "垂直间距",
+    "垂直間距"
   ],
   [
-    "计数器",
-    "計數器"
+    "字体粗细",
+    "字體粗細"
   ],
   [
-    "口令输入",
-    "口令輸入"
+    "图片保护",
+    "圖片保護"
   ],
   [
-    "键盘",
-    "鍵盤"
+    "正常",
+    "正常"
   ],
   [
-    "单选框",
-    "單選框"
+    "加粗",
+    "加粗"
   ],
   [
-    "多选框",
-    "多選框"
+    "点击触发",
+    "點擊觸發"
   ],
   [
-    "开关",
-    "開關"
+    "已阅读并同意",
+    "已閱讀並同意"
   ],
   [
-    "评分",
-    "評分"
+    "用户协议",
+    "用戶協議"
   ],
   [
-    "滑块",
-    "滑塊"
+    "隐私政策",
+    "隱私政策"
   ],
   [
-    "选择器",
-    "選擇器"
+    "请先阅读并同意《用户协议》和《隐私政策》",
+    "請先閱讀並同意《用戶協議》和《隱私政策》"
   ],
   [
-    "其他",
-    "其他"
+    "我的昵称",
+    "我的暱稱"
   ],
   [
-    "文件管理",
-    "文件管理"
+    "简介",
+    "簡介"
   ],
   [
-    "该模板正在开发中",
-    "該模板正在開發中"
+    "介绍一下自己",
+    "介紹一下自己"
   ],
   [
-    "未登录",
-    "未登錄"
+    "性别",
+    "性別"
   ],
   [
-    "总点击",
-    "總點擊"
+    "编辑性别",
+    "編輯性別"
   ],
   [
-    "",
-    ""
+    "生日",
+    "生日"
   ],
   [
-    "收藏",
-    "收藏"
+    "选择生日",
+    "選擇生日"
   ],
   [
-    "粉丝",
-    "粉絲"
+    "地区",
+    "地區"
   ],
   [
-    "接单模式",
-    "接單模式"
+    "选择所在的地区",
+    "選擇所在的地區"
   ],
   [
-    "已关闭",
-    "已關閉"
+    "选择性别",
+    "選擇性別"
   ],
   [
-    "消息通知",
-    "消息通知"
+    "保密",
+    "保密"
   ],
   [
-    "待支付",
-    "待支付"
+    "",
+    ""
   ],
   [
-    "未发货",
-    "未發貨"
+    "",
+    ""
   ],
   [
-    "已发货",
-    "已發貨"
+    "性别设置成功",
+    "性別設置成功"
   ],
   [
-    "售后 / 退款",
-    "售後 / 退款"
+    "生日设置成功",
+    "生日設置成功"
   ],
   [
-    "我的钱包",
-    "我的錢包"
+    "地区设置成功",
+    "地區設置成功"
   ],
   [
-    "数据看板",
-    "數據看板"
+    "商品详情",
+    "商品詳情"
   ],
   [
-    "历史记录",
-    "歷史記錄"
+    "商品列表、筛选",
+    "商品列表、篩選"
   ],
   [
-    "邀请好友",
-    "邀請好友"
+    "购物车",
+    "購物車"
   ],
   [
-    "设置",
-    "設置"
+    "订单列表、详情",
+    "訂單列表、詳情"
   ],
   [
-    "左间隔",
-    "左間隔"
+    "收货地址",
+    "收貨地址"
   ],
   [
-    "右移动",
-    "右移動"
+    "聊天",
+    "聊天"
   ],
   [
-    "左移动",
-    "左移動"
+    "对话列表、历史记录",
+    "對話列表、歷史記錄"
   ],
   [
-    "多个数据",
-    "多個數據"
+    "流式回复",
+    "流式回覆"
   ],
   [
-    "点击收起",
-    "點擊收起"
+    "语言合成",
+    "語言合成"
   ],
   [
-    "点击展开",
-    "點擊展開"
+    "语音识别",
+    "語音識別"
   ],
   [
-    "ref 方式调用",
-    "ref方式調用"
+    "其他",
+    "其他"
   ],
   [
-    "自定义图标、文字、大小",
-    "自定義圖標、文字、大小"
+    "文件管理",
+    "文件管理"
   ],
   [
-    "上传证件照",
-    "上傳證件照"
+    "该模板正在开发中",
+    "該模板正在開發中"
   ],
   [
-    "多选",
-    "多選"
+    "未登录",
+    "未登錄"
   ],
   [
-    "限制 3 个",
-    "限制3個"
+    "总点击",
+    "總點擊"
   ],
   [
-    "边框",
-    "邊框"
+    "",
+    ""
   ],
   [
-    "显示字数",
-    "顯示字數"
+    "收藏",
+    "收藏"
   ],
   [
-    "自动增高",
-    "自動增高"
+    "粉丝",
+    "粉絲"
   ],
   [
-    "其他颜色",
-    "其他顏色"
+    "接单模式",
+    "接單模式"
   ],
   [
-    "大一点",
-    "大一點"
+    "已关闭",
+    "已關閉"
   ],
   [
-    "正方形",
-    "正方形"
+    "手机号格式不正确",
+    "手機號格式不正確"
   ],
   [
-    "范围选择",
-    "範圍選擇"
+    "详细地址不能为空",
+    "詳細地址不能為空"
   ],
   [
-    "显示值",
-    "顯示值"
+    "所在地区不能为空",
+    "所在地區不能為空"
   ],
   [
-    "步长10",
-    "步長10"
+    "保存中",
+    "保存中"
   ],
   [
-    "转动图片",
-    "轉動圖片"
+    "开启通知",
+    "開啟通知"
   ],
   [
-    "验证通过",
-    "驗證通過"
+    "通用设置",
+    "通用設置"
   ],
   [
-    "验证失败",
-    "驗證失敗"
+    "通知设置",
+    "通知設置"
   ],
   [
-    "操作",
-    "操作"
+    "隐私设置",
+    "隱私設置"
   ],
   [
-    "清空",
-    "清空"
+    "关于{name}",
+    "關於{name}"
   ],
   [
-    "预览",
-    "預覽"
+    "联系我们",
+    "聯繫我們"
   ],
   [
-    "设置高度",
-    "設置高度"
+    "退出登录",
+    "退出登錄"
   ],
   [
-    "毛笔效果",
-    "毛筆效果"
+    "确定退出登录吗?",
+    "確定退出登錄嗎?"
   ],
   [
-    "添加LOGO",
-    "添加LOGO"
+    "深色模式",
+    "深色模式"
   ],
   [
-    "圆角定位点",
-    "圓角定位點"
+    "多语言",
+    "多語言"
   ],
   [
-    "内间距",
-    "內間距"
+    "字体大小",
+    "字體大小"
   ],
   [
-    "导出图片",
-    "導出圖片"
+    "访问官网",
+    "訪問官網"
   ],
   [
-    "矩形",
-    "矩形"
+    "社交",
+    "社交"
   ],
   [
-    "",
-    ""
+    "帖子详情",
+    "帖子詳情"
   ],
   [
-    "线性",
-    "線性"
+    "商城",
+    "商城"
   ],
   [
-    "小方格",
-    "小方格"
+    "商品分类",
+    "商品分類"
   ],
   [
-    "格式化",
-    "格式化"
+    "数字输入",
+    "數字輸入"
   ],
   [
-    "添加",
-    "添加"
+    "密码输入",
+    "密碼輸入"
   ],
   [
-    "减去",
-    "減去"
+    "可清除",
+    "可清除"
   ],
   [
-    "获取某个单位的开始时间",
-    "獲取某個單位的開始時間"
+    "左右插槽",
+    "左右插槽"
   ],
   [
-    "签名",
-    "簽名"
+    "保留精度",
+    "保留精度"
   ],
   [
-    "图片裁剪",
-    "圖片裁剪"
+    "精度",
+    "精度"
   ],
   [
-    "Canvas",
-    "Canvas"
+    "左图标",
+    "左圖標"
   ],
   [
-    "富文本",
-    "富文本"
+    "右图标",
+    "右圖標"
   ],
   [
-    "该功能正在开发中",
-    "該功能正在開發中"
+    "自动聚焦",
+    "自動聚焦"
   ],
   [
-    "圆形",
-    "圓形"
+    "长度为6",
+    "長度為6"
   ],
   [
-    "组合",
-    "組合"
+    "步进为10",
+    "步進為10"
+  ],
+  [
+    "最小为10",
+    "最小為10"
+  ],
+  [
+    "最大为50",
+    "最大為50"
+  ],
+  [
+    "可以小数",
+    "可以小數"
+  ],
+  [
+    "可以输入",
+    "可以輸入"
+  ],
+  [
+    "用户名",
+    "用戶名"
+  ],
+  [
+    "请输入用户名",
+    "請輸入用戶名"
+  ],
+  [
+    "邮箱",
+    "郵箱"
+  ],
+  [
+    "请输入邮箱地址",
+    "請輸入郵箱地址"
+  ],
+  [
+    "动态验证",
+    "動態驗證"
   ],
   [
     "基础用法",
@@ -448,216 +484,276 @@
     "指定分鐘"
   ],
   [
-    "指定秒",
-    "指定秒"
+    "消息通知",
+    "消息通知"
   ],
   [
-    "完成后提示",
-    "完成後提示"
+    "待支付",
+    "待支付"
   ],
   [
-    "3秒后开始倒计时",
-    "3秒後開始倒計時"
+    "未发货",
+    "未發貨"
   ],
   [
-    "结合按钮",
-    "結合按鈕"
+    "已发货",
+    "已發貨"
   ],
   [
-    "购买",
-    "購買"
+    "售后 / 退款",
+    "售後 / 退款"
   ],
   [
-    "消息",
-    "消息"
+    "我的钱包",
+    "我的錢包"
   ],
   [
-    "结合图片",
-    "結合圖片"
+    "数据看板",
+    "數據看板"
   ],
   [
-    "结合图标",
-    "結合圖標"
+    "历史记录",
+    "歷史記錄"
   ],
   [
-    "点击触发",
-    "點擊觸發"
+    "邀请好友",
+    "邀請好友"
   ],
   [
-    "不同大小",
-    "不同大小"
+    "设置",
+    "設置"
   ],
   [
-    "不同颜色",
-    "不同顏色"
+    "开发中,敬请期待",
+    "開發中,敬請期待"
   ],
   [
-    "使用base64",
-    "使用base64"
+    "基础组件",
+    "基礎組件"
   ],
   [
-    "没有错误提示",
-    "沒有錯誤提示"
+    "文本",
+    "文本"
   ],
   [
-    "已阅读并同意",
-    "已閱讀並同意"
+    "按钮",
+    "按鈕"
   ],
   [
-    "用户协议",
-    "用戶協議"
+    "图片",
+    "圖片"
   ],
   [
-    "隐私政策",
-    "隱私政策"
+    "图标",
+    "圖標"
   ],
   [
-    "请先阅读并同意《用户协议》和《隐私政策》",
-    "請先閱讀並同意《用戶協議》和《隱私政策》"
+    "标签",
+    "標籤"
   ],
   [
-    "我的昵称",
-    "我的暱稱"
+    "表单组件",
+    "表單組件"
   ],
   [
-    "简介",
-    "簡介"
+    "表单验证",
+    "表單驗證"
   ],
   [
-    "介绍一下自己",
-    "介紹一下自己"
+    "输入框",
+    "輸入框"
   ],
   [
-    "性别",
-    "性別"
+    "不同大小",
+    "不同大小"
   ],
   [
-    "编辑性别",
-    "編輯性別"
+    "不同颜色",
+    "不同顏色"
   ],
   [
-    "生日",
-    "生日"
+    "使用base64",
+    "使用base64"
   ],
   [
-    "选择生日",
-    "選擇生日"
+    "没有错误提示",
+    "沒有錯誤提示"
   ],
   [
-    "地区",
-    "地區"
+    "转动图片",
+    "轉動圖片"
   ],
   [
-    "选择所在的地区",
-    "選擇所在的地區"
+    "验证通过",
+    "驗證通過"
   ],
   [
-    "选择性别",
-    "選擇性別"
+    "验证失败",
+    "驗證失敗"
   ],
   [
-    "保密",
-    "保密"
+    "操作",
+    "操作"
   ],
   [
-    "",
-    ""
+    "清空",
+    "清空"
   ],
   [
-    "",
-    ""
+    "预览",
+    "預覽"
   ],
   [
-    "性别设置成功",
-    "性別設置成功"
+    "设置高度",
+    "設置高度"
   ],
   [
-    "生日设置成功",
-    "生日設置成功"
+    "毛笔效果",
+    "毛筆效果"
   ],
   [
-    "地区设置成功",
-    "地區設置成功"
+    "分享文本",
+    "分享文本"
   ],
   [
-    "关于{name}",
-    "關於{name}"
+    "分享图片",
+    "分享圖片"
   ],
   [
-    "联系客服",
-    "聯繫客服"
+    "分享文件",
+    "分享文件"
   ],
   [
-    "退出登录",
-    "退出登入"
+    "分享链接",
+    "分享鏈接"
   ],
   [
-    "确定退出登录吗?",
-    "確定退出登入嗎?"
+    "确认选座后将无法修改,是否确认?",
+    "確認選座後將無法修改,是否確認?"
   ],
   [
-    "深色模式",
-    "深色模式"
+    "选座成功",
+    "選座成功"
   ],
   [
-    "多语言",
-    "多語言"
+    "添加LOGO",
+    "添加LOGO"
   ],
   [
-    "字体大小",
-    "字體大小"
+    "圆角定位点",
+    "圓角定位點"
   ],
   [
-    "访问官网",
-    "訪問官網"
+    "倒计时",
+    "倒計時"
   ],
   [
-    "商城",
-    "商城"
+    "数字滚动",
+    "數字滾動"
   ],
   [
-    "商品分类",
-    "商品分類"
+    "进度条",
+    "進度條"
   ],
   [
-    "商品详情",
-    "商品詳情"
+    "圆形进度条",
+    "圓形進度條"
   ],
   [
-    "商品列表、筛选",
-    "商品列表、篩選"
+    "骨架图",
+    "骨架圖"
   ],
   [
-    "购物车",
-    "購物車"
+    "加载更多",
+    "加載更多"
   ],
   [
-    "订单列表、详情",
-    "訂單列表、詳情"
+    "反馈组件",
+    "反饋組件"
   ],
   [
-    "收货地址",
-    "收貨地址"
+    "操作菜单",
+    "操作菜單"
   ],
   [
-    "聊天",
-    "聊天"
+    "弹窗",
+    "彈窗"
   ],
   [
-    "对话列表、历史记录",
-    "對話列表、歷史記錄"
+    "确认框",
+    "確認框"
   ],
   [
-    "流式回复",
-    "流式回覆"
+    "提示框",
+    "提示框"
   ],
   [
-    "语言合成",
-    "語言合成"
+    "签名",
+    "簽名"
   ],
   [
-    "语音识别",
-    "語音識別"
+    "水印",
+    "水印"
+  ],
+  [
+    "图片裁剪",
+    "圖片裁剪"
+  ],
+  [
+    "Canvas",
+    "Canvas"
+  ],
+  [
+    "富文本",
+    "富文本"
+  ],
+  [
+    "选座",
+    "選座"
+  ],
+  [
+    "该功能正在开发中",
+    "該功能正在開發中"
+  ],
+  [
+    "圆形",
+    "圓形"
+  ],
+  [
+    "组合",
+    "組合"
+  ],
+  [
+    "昵称",
+    "暱稱"
+  ],
+  [
+    "点击输入昵称",
+    "點擊輸入暱稱"
+  ],
+  [
+    "取消",
+    "取消"
+  ],
+  [
+    "请上传头像",
+    "請上傳頭像"
+  ],
+  [
+    "登录中",
+    "登錄中"
+  ],
+  [
+    "您好,欢迎登录!",
+    "您好,歡迎登錄!"
+  ],
+  [
+    "首次登录将自动为您完成注册",
+    "首次登錄將自動為您完成註冊"
+  ],
+  [
+    "请输入手机号",
+    "請輸入手機號"
   ],
   [
     "请输入验证码",
@@ -665,7 +761,7 @@
   ],
   [
     "登录",
-    "登"
+    "登"
   ],
   [
     "购物车 ({num})",
@@ -708,1795 +804,1843 @@
     "刪除成功"
   ],
   [
-    "请先选择商品",
-    "請先選擇商品"
-  ],
-  [
-    "确定删除选中的商品吗?",
-    "確定刪除選中的商品嗎?"
-  ],
-  [
-    "您需支付 {price} 元,请确认支付",
-    "您需支付 {price} 元,請確認支付"
-  ],
-  [
-    "支付成功",
-    "支付成功"
-  ],
-  [
-    "已设为默认",
-    "已設為預設"
-  ],
-  [
-    "设为默认",
-    "設為預設"
+    "打开日历长列表",
+    "打開日曆長列表"
   ],
   [
-    "修改",
-    "修改"
+    "日历面板",
+    "日曆面板"
   ],
   [
-    "添加地址",
-    "新增地址"
+    "自定义文案和颜色",
+    "自定義文案和顏色"
   ],
   [
-    "密码输入",
-    "密碼輸入"
+    "显示头",
+    "顯示頭"
   ],
   [
-    "可清除",
-    "可清除"
+    "显示星期",
+    "顯示星期"
   ],
   [
-    "左右插槽",
-    "左右插槽"
+    "显示其他月份",
+    "顯示其他月份"
   ],
   [
-    "左图标",
-    "左圖示"
+    "不同位置",
+    "不同位置"
   ],
   [
-    "右图标",
-    "右圖示"
+    "顶部",
+    "頂部"
   ],
   [
-    "自动聚焦",
-    "自動聚焦"
+    "中间",
+    "中間"
   ],
   [
-    "长度为6",
-    "長度為6"
+    "底部",
+    "底部"
   ],
   [
-    "步进为10",
-    "步進為10"
+    "不同类型",
+    "不同類型"
   ],
   [
-    "最小为10",
-    "最小為10"
+    "成功",
+    "成功"
   ],
   [
-    "最大为50",
-    "最大為50"
+    "失败",
+    "失敗"
   ],
   [
-    "可以小数",
-    "可以小數"
+    "警告",
+    "警告"
   ],
   [
-    "可以输入",
-    "可以輸入"
+    "问题",
+    "問題"
   ],
   [
-    "用户名",
-    "使用者名稱"
+    "停止",
+    "停止"
   ],
   [
-    "请输入用户名",
-    "請輸入使用者名稱"
+    "自定义图标",
+    "自定義圖標"
   ],
   [
-    "邮箱",
-    "電子郵件"
+    "只存在一个",
+    "只存在一個"
   ],
   [
-    "请输入邮箱地址",
-    "請輸入電子郵件地址"
+    "不同位置提示",
+    "不同位置提示"
   ],
   [
-    "动态验证",
-    "動態驗證"
+    "不同类型提示",
+    "不同類型提示"
   ],
   [
     "联系人",
-    "聯人"
+    "聯人"
   ],
   [
     "添加联系人",
-    "新增聯絡人"
+    "添加聯繫人"
   ],
   [
     "身高",
     "身高"
   ],
   [
-    "微信",
-    "微信"
+    "体重",
+    "體重"
   ],
   [
-    "父子关联",
-    "父子關聯"
+    "所在地区",
+    "所在地區"
   ],
   [
-    "选中值",
-    "選中值"
+    "出生年月",
+    "出生年月"
   ],
   [
-    "选中操作",
-    "選中操作"
+    "个人简介",
+    "個人簡介"
   ],
   [
-    "选中部分节点",
-    "選中部分節點"
+    "请输入个人简介",
+    "請輸入個人簡介"
   ],
   [
-    "获取选中节点",
-    "獲取選中節點"
+    "公开状态",
+    "公開狀態"
   ],
   [
-    "获取半选节点",
-    "獲取半選節點"
+    "重置",
+    "重置"
   ],
   [
-    "清空选中",
-    "清空選中"
+    "提交",
+    "提交"
   ],
   [
-    "展开操作",
-    "展開操作"
+    "未知",
+    "未知"
   ],
   [
-    "展开部分节点",
-    "展開部分節點"
+    "篮球",
+    "籃球"
   ],
   [
-    "获取展开节点",
-    "獲取展開節點"
+    "足球",
+    "足球"
   ],
   [
-    "展开所有",
-    "展開所有"
+    "羽毛球",
+    "羽毛球"
   ],
   [
-    "收起所有",
-    "收起所有"
+    "乒乓球",
+    "乒乓球"
   ],
   [
-    "开通账号",
-    "開通帳號"
+    "游泳",
+    "游泳"
   ],
   [
-    "赠送500元",
-    "贈送500元"
+    "用户名不能为空",
+    "用戶名不能為空"
   ],
   [
-    "完成实名认证",
-    "完成實名認證"
+    "用户名长度在3-20个字符之间",
+    "用戶名長度在3-20個字符之間"
   ],
   [
-    "通过身份证认证",
-    "通過身份證認證"
+    "邮箱不能为空",
+    "郵箱不能為空"
   ],
   [
-    "绑定银行卡",
-    "绑定銀行卡"
+    "暂停",
+    "暫停"
   ],
   [
-    "绑定招商银行储蓄卡",
-    "绑定招商銀行儲蓄卡"
+    "内容靠左",
+    "內容靠左"
   ],
   [
-    "首次充值",
-    "首次充值"
+    "QQ",
+    "QQ"
   ],
   [
-    "滑块大点",
-    "滑塊大一點"
+    "带箭头",
+    "帶箭頭"
   ],
   [
-    "换个颜色",
-    "換個顏色"
+    "余额",
+    "餘額"
   ],
   [
-    "最大50",
-    "最大50"
+    "带图片",
+    "帶圖片"
   ],
   [
-    "自定义触发器",
-    "自定義觸發器"
+    "神仙都没用",
+    "神仙都沒用"
   ],
   [
-    "打开选择器",
-    "打開選擇器"
+    "折叠",
+    "摺疊"
   ],
   [
-    "多列",
-    "多列"
+    "可滑动",
+    "可滑動"
   ],
   [
-    "通过 children 配置多级数据,并使用 column-count 参数指定显示的列数",
-    "通過 children 配置多級數據,並使用 column-count 參數指定顯示的列數"
+    "左滑编辑",
+    "左滑編輯"
   ],
   [
-    "弹窗中使用",
-    "彈窗中使用"
+    "编辑",
+    "編輯"
   ],
   [
-    "打开",
-    "打開"
+    "右滑删除",
+    "右滑刪除"
   ],
   [
-    "选择地区",
-    "選擇地區"
+    "账号",
+    "帳號"
   ],
   [
-    "绑定值",
-    "绑定值"
+    "我的订单",
+    "我的訂單"
   ],
   [
-    "下一步",
-    "下一步"
+    "我的收藏",
+    "我的收藏"
   ],
   [
-    "确定",
-    "確定"
+    "筛选",
+    "篩選"
   ],
   [
-    "关闭",
-    "關閉"
+    "长按项即可拖动排序",
+    "長按項即可拖動排序"
   ],
   [
-    "显示取消按钮",
-    "顯示取消按鈕"
+    "单列排序",
+    "單列排序"
   ],
   [
-    "修改按钮文案",
-    "修改按鈕文案"
+    "不需要长按",
+    "不需要長按"
   ],
   [
-    "显示绑定值",
-    "顯示绑定值"
+    "结合列表使用",
+    "結合列表使用"
   ],
   [
-    "",
-    ""
+    "左间隔",
+    "左間隔"
   ],
   [
-    "时:分",
-    "時:分"
+    "右移动",
+    "右移動"
   ],
   [
-    "时:分:秒",
-    "時:分:秒"
+    "左移动",
+    "左移動"
   ],
   [
-    "显示星期",
-    "顯示星期"
+    "多个数据",
+    "多個數據"
   ],
   [
-    "显示其他月份",
-    "顯示其他月份"
+    "点击收起",
+    "點擊收起"
   ],
   [
-    "不同位置",
-    "不同位置"
+    "点击展开",
+    "點擊展開"
   ],
   [
-    "顶部",
-    "頂部"
+    "ref 方式调用",
+    "ref方式調用"
   ],
   [
-    "中间",
-    "中間"
+    "自定义图标、文字、大小",
+    "自定義圖標、文字、大小"
   ],
   [
-    "底部",
-    "底部"
+    "请上传您的证件照",
+    "請上傳您的證件照"
   ],
   [
-    "不同类型",
-    "不同類型"
+    "多选",
+    "多選"
   ],
   [
-    "成功",
-    "成功"
+    "限制 3 个",
+    "限制3個"
   ],
   [
-    "失败",
-    "失敗"
+    "边框",
+    "邊框"
   ],
   [
-    "警告",
-    "警告"
+    "显示字数",
+    "顯示字數"
   ],
   [
-    "问题",
-    "問題"
+    "自动增高",
+    "自動增高"
   ],
   [
-    "停止",
-    "停止"
+    "其他颜色",
+    "其他顏色"
   ],
   [
-    "自定义图标",
-    "自定義圖標"
+    "大一点",
+    "大一點"
   ],
   [
-    "只存在一个",
-    "只存在一個"
+    "正方形",
+    "正方形"
   ],
   [
-    "不同位置提示",
-    "不同位置提示"
+    "范围选择",
+    "範圍選擇"
   ],
   [
-    "不同类型提示",
-    "不同類型提示"
+    "显示值",
+    "顯示值"
   ],
   [
-    "带图标提示",
-    "帶圖標提示"
+    "步长10",
+    "步長10"
   ],
   [
-    "移除其他已存在的提示",
-    "移除其他已存在的提示"
+    "多列排序",
+    "多列排序"
   ],
   [
-    "打开弹窗",
-    "打開彈窗"
+    "结合图片使用",
+    "結合圖片使用"
   ],
   [
-    "设置宽度 80%",
-    "設置寬度 80%"
+    "禁用手势",
+    "禁用手勢"
   ],
   [
-    "Badge 角标",
-    "徽章角標"
+    "自定义样式2",
+    "自定義樣式2"
   ],
   [
-    "NoticeBar 通知栏",
-    "通知欄"
+    "无图片",
+    "無圖片"
   ],
   [
-    "Countdown 倒计时",
-    "倒計時"
+    "圆角",
+    "圓角"
   ],
   [
-    "Progress 进度条",
-    "進度條"
+    "自定义大小",
+    "自定義大小"
   ],
   [
-    "ProgressCircle 圆形进度条",
-    "圓形進度條"
+    "省略号",
+    "省略號"
   ],
   [
-    "Skeleton 骨架图",
-    "骨架圖"
+    "多行省略号",
+    "多行省略號"
   ],
   [
-    "LoadMore 加载更多",
-    "加載更多"
+    "金额",
+    "金額"
   ],
   [
-    "RollingNumber 数字滚动",
-    "數字滾動"
+    "手机号脱敏",
+    "手機號脫敏"
   ],
   [
-    "ActionSheet 操作菜单",
-    "操作菜單"
+    "姓名脱敏",
+    "姓名脫敏"
   ],
   [
-    "Popup 弹窗",
-    "彈窗"
+    "邮箱脱敏",
+    "郵箱脫敏"
   ],
   [
-    "Confirm 确认框",
-    "確認框"
+    "银行卡脱敏",
+    "銀行卡脫敏"
   ],
   [
-    "Toast 提示框",
-    "提示框"
+    "自定义脱敏字符",
+    "自定義脫敏字符"
   ],
   [
-    "QRCode 二维码",
-    "二維碼"
+    "主要",
+    "主要"
   ],
   [
-    "Sign 签名",
-    "簽名"
+    "危险",
+    "危險"
   ],
   [
-    "DayUts 日期",
-    "日期"
+    "信息",
+    "信息"
   ],
   [
-    "Vibrate 震动",
-    "震動"
+    "邮件",
+    "郵件"
   ],
   [
-    "Cropper 图片裁剪",
-    "圖片裁剪"
+    "文件",
+    "文件"
   ],
   [
-    "Canvas 画布",
-    "畫布"
+    "内间距",
+    "內間距"
   ],
   [
-    "SVG 图标",
-    "SVG圖標"
+    "导出图片",
+    "導出圖片"
   ],
   [
-    "SlideVerify 滑动验证",
-    "滑動驗證"
+    "矩形",
+    "矩形"
   ],
   [
-    "充值1000元",
-    "充值1000元"
+    "",
+    ""
   ],
   [
-    "完成首笔交易",
-    "完成首筆交易"
+    "线性",
+    "線性"
   ],
   [
-    "优选灵活配置混合A",
-    "優選靈活配置混合A"
+    "小方格",
+    "小方格"
   ],
   [
-    "1000元起",
-    "1000元起"
+    "格式化",
+    "格式化"
   ],
   [
-    "禁用切换按钮",
-    "禁用切換按鈕"
+    "添加",
+    "添加"
   ],
   [
-    "自定义高度",
-    "自定義高度"
+    "减去",
+    "減去"
   ],
   [
-    "多页数",
-    "多頁數"
+    "获取某个单位的开始时间",
+    "獲取某個單位的開始時間"
   ],
   [
-    "上一页",
-    "上一頁"
+    "获取某个单位的结束时间",
+    "獲取某個單位的結束時間"
   ],
   [
-    "下一页",
-    "下一頁"
+    "是否同一天",
+    "是否同一天"
   ],
   [
-    "横向滚动",
-    "橫向滾動"
+    "是否早于",
+    "是否早於"
   ],
   [
-    "纵向滚动",
-    "縱向滾動"
+    "是否晚于",
+    "是否晚於"
   ],
   [
-    "快一点",
-    "快一點"
+    "差值",
+    "差值"
   ],
   [
-    "暂停",
-    "暫停"
+    "差值(单位)",
+    "差值(單位)"
   ],
   [
-    "内容靠左",
-    "內容靠左"
+    "选择图片",
+    "選擇圖片"
   ],
   [
-    "QQ",
-    "QQ"
+    "可调节裁剪框大小",
+    "可調節裁剪框大小"
   ],
   [
-    "带箭头",
-    "帶箭頭"
+    "预览图片",
+    "預覽圖片"
   ],
   [
-    "余额",
-    "餘額"
+    "保存图片",
+    "保存圖片"
   ],
   [
-    "带图片",
-    "帶圖片"
+    "LoadMore 加载更多",
+    "載入更多"
   ],
   [
-    "神仙都没用",
-    "神仙都沒用"
+    "RollingNumber 数字滚动",
+    "數字滾動"
   ],
   [
-    "折叠",
-    "摺疊"
+    "ActionSheet 操作菜单",
+    "操作菜單"
   ],
   [
-    "设置大小",
-    "設置大小"
+    "Popup 弹窗",
+    "彈窗"
   ],
   [
-    "集成 iconfont 与 remixicon 图标库,展示部分示例",
-    "集成 iconfont 與 remixicon 圖標庫,展示部分示例"
+    "Confirm 确认框",
+    "確認框"
   ],
   [
-    "iconfont",
-    "iconfont"
+    "Toast 提示框",
+    "提示框"
   ],
   [
-    "remixicon",
-    "remixicon"
+    "QRCode 二维码",
+    "二維碼"
   ],
   [
-    "复制成功",
-    "複製成功"
+    "Sign 签名",
+    "簽名"
   ],
   [
-    "普通",
-    "普通"
+    "Watermark 水印",
+    "水印"
   ],
   [
-    "浅色",
-    "淺色"
+    "DayUts 日期",
+    "日期"
   ],
   [
-    "深色",
-    "深色"
+    "Vibrate 震动",
+    "震動"
   ],
   [
-    "只显示图标",
-    "只顯示圖標"
+    "Cropper 图片裁剪",
+    "圖片裁剪"
   ],
   [
-    "文本模式",
-    "文本模式"
+    "Canvas 画布",
+    "畫布"
   ],
   [
-    "带边框",
-    "帶邊框"
+    "SVG 图标",
+    "SVG圖標"
   ],
   [
-    "圆角按钮",
-    "圓角按鈕"
+    "SlideVerify 滑动验证",
+    "滑動驗證"
   ],
   [
-    "带左侧图标",
-    "帶左側圖標"
+    "Animation 动画",
+    "動畫"
   ],
   [
-    "",
-    ""
+    "Router 路由",
+    "路由"
   ],
   [
-    "默认",
-    "默認"
+    "Share 分享",
+    "分享"
   ],
   [
-    "",
-    ""
+    "SelectSeat 座位选择",
+    "座位選擇"
   ],
   [
-    "无权限",
-    "無權限"
+    "编辑地址",
+    "編輯地址"
   ],
   [
-    "服务异常",
-    "服務異常"
+    "请先选择商品",
+    "請先選擇商品"
   ],
   [
-    "请在微信浏览器中打开",
-    "請在微信瀏覽器中打開"
+    "确定删除选中的商品吗?",
+    "確定刪除選中的商品嗎?"
   ],
   [
-    "已取消支付",
-    "已取消支付"
+    "您需支付 {price} 元,请确认支付",
+    "您需支付 {price} 元,請確認支付"
   ],
   [
-    "跑马灯",
-    "跑馬燈"
+    "支付成功",
+    "支付成功"
   ],
   [
-    "分页",
-    "分頁"
+    "已设为默认",
+    "已設為默認"
   ],
   [
-    "时间轴",
-    "時間軸"
+    "设为默认",
+    "設為默認"
+  ],
+  [
+    "修改",
+    "修改"
+  ],
+  [
+    "添加地址",
+    "添加地址"
+  ],
+  [
+    "删除地址后无法恢复,确认要删除该地址吗?",
+    "刪除地址後無法恢復,確認要刪除該地址嗎?"
+  ],
+  [
+    "加载中",
+    "加載中"
+  ],
+  [
+    "收货人",
+    "收貨人"
+  ],
+  [
+    "请输入收货人姓名",
+    "請輸入收貨人姓名"
+  ],
+  [
+    "手机号",
+    "手機號"
+  ],
+  [
+    "选择省市区",
+    "選擇省市區"
+  ],
+  [
+    "详细地址",
+    "詳細地址"
+  ],
+  [
+    "小区楼栋、门牌号、村等",
+    "小區樓棟、門牌號、村等"
+  ],
+  [
+    "默认地址",
+    "默認地址"
+  ],
+  [
+    "保存",
+    "保存"
+  ],
+  [
+    "收货人不能为空",
+    "收貨人不能為空"
+  ],
+  [
+    "手机号不能为空",
+    "手機號不能為空"
+  ],
+  [
+    "自定义标题内容",
+    "自定義標題內容"
+  ],
+  [
+    "显示滑块",
+    "顯示滑塊"
   ],
   [
-    "拖拽",
-    "拖拽"
+    "添加间距",
+    "添加間距"
   ],
   [
-    "筛选栏",
-    "篩選欄"
+    "横向填充",
+    "橫向填充"
   ],
   [
-    "树形结构",
-    "樹形結構"
+    "适用于标签数量不多的情况",
+    "適用於標籤數量不多的情況"
   ],
   [
-    "状态组件",
-    "狀態組件"
+    "居中",
+    "居中"
   ],
   [
-    "角标",
-    "角標"
+    "单个禁用",
+    "單個禁用"
   ],
   [
-    "通知栏",
-    "通知欄"
+    "显示下划线",
+    "顯示下劃線"
   ],
   [
-    "倒计时",
-    "倒計時"
+    "禁用",
+    "禁用"
   ],
   [
-    "数字滚动",
-    "數字滾動"
+    "首页",
+    "首頁"
   ],
   [
-    "进度条",
-    "進度條"
+    "音乐",
+    "音樂"
   ],
   [
-    "圆形进度条",
-    "圓形進度條"
+    "睡眠",
+    "睡眠"
   ],
   [
-    "骨架图",
-    "骨架圖"
+    "我的",
+    "我的"
   ],
   [
-    "加载更多",
-    "加載更多"
+    "取消订单",
+    "取消訂單"
   ],
   [
-    "反馈组件",
-    "反饋組件"
+    "立即购买",
+    "立即購買"
   ],
   [
-    "操作菜单",
-    "操作菜單"
+    "确认收货",
+    "確認收貨"
   ],
   [
-    "弹窗",
-    "彈窗"
+    "评价",
+    "評價"
   ],
   [
-    "确认框",
-    "確認框"
+    "禁用状态,无法拖拽",
+    "禁用狀態,無法拖拽"
   ],
   [
-    "提示框",
-    "提示框"
+    "不吸附边缘,任意位置可拖拽",
+    "不吸附邊緣,任意位置可拖拽"
   ],
   [
-    "多行省略号",
-    "多行省略號"
+    "这是一个提示",
+    "這是一個提示"
   ],
   [
-    "金额",
-    "金額"
+    "带左侧图标",
+    "帶左側圖標"
   ],
   [
-    "手机号脱敏",
-    "手機號脫敏"
+    "",
+    ""
   ],
   [
-    "姓名脱敏",
-    "姓名脫敏"
+    "默认",
+    "默認"
   ],
   [
-    "邮箱脱敏",
-    "郵箱脫敏"
+    "",
+    ""
   ],
   [
-    "银行卡脱敏",
-    "銀行卡脫敏"
+    "全局字号",
+    "全局字號"
   ],
   [
-    "自定义脱敏字符",
-    "自定義脫敏字符"
+    "这是一段示例文字,用于预览不同字号的效果。",
+    "這是一段示例文字,用於預覽不同字號的效果。"
   ],
   [
-    "主要",
-    "主要"
+    "默认 1.0",
+    "默認 1.0"
   ],
   [
-    "危险",
-    "危險"
+    "切换语言",
+    "切換語言"
   ],
   [
-    "信息",
-    "信息"
+    "切换中",
+    "切換中"
   ],
   [
-    "邮件",
-    "郵件"
+    "模板",
+    "模板"
   ],
   [
-    "文件",
-    "文件"
+    "编辑资料",
+    "編輯資料"
   ],
   [
-    "可关闭",
-    "可關閉"
+    "Text 文本",
+    "Text 文本"
   ],
   [
-    "镂空",
-    "鏤空"
+    "Button 按钮",
+    "Button 按鈕"
   ],
   [
-    "自定义无圆角",
-    "自定義無圓角"
+    "Image 图片",
+    "Image 圖片"
   ],
   [
-    "不同裁剪",
-    "不同裁剪"
+    "Icon 图标",
+    "Icon 圖標"
   ],
   [
-    "点击可预览",
-    "點擊可預覽"
+    "Tag 标签",
+    "Tag 標籤"
   ],
   [
-    "失败时显示",
-    "失敗時顯示"
+    "Form 表单验证",
+    "Form 表單驗證"
   ],
   [
-    "自定义圆角",
-    "自定義圓角"
+    "Input 输入框",
+    "Input 輸入框"
   ],
   [
-    "设置颜色",
-    "設置顏色"
+    "Textarea 文本域",
+    "Textarea 文本域"
   ],
   [
-    "体重不能为空",
-    "體重不能為空"
+    "InputNumber 计数器",
+    "InputNumber 計數器"
   ],
   [
-    "体重在40-100kg之间",
-    "體重在40-100kg之間"
+    "文本域",
+    "文本域"
   ],
   [
-    "标签不能为空",
-    "標籤不能為空"
+    "计数器",
+    "計數器"
   ],
   [
-    "标签最多选择2个",
-    "標籤最多選擇2個"
+    "口令输入",
+    "口令輸入"
   ],
   [
-    "性别不能为空",
-    "性別不能為空"
+    "键盘",
+    "鍵盤"
   ],
   [
-    "出生年月不能为空",
-    "出生年月不能為空"
+    "单选框",
+    "單選框"
   ],
   [
-    "出生年月不大于2010-01-01",
-    "出生年月不大於2010-01-01"
+    "多选框",
+    "多選框"
   ],
   [
-    "联系人不能为空",
-    "聯繫人不能為空"
+    "开关",
+    "開關"
   ],
   [
-    "提交成功",
-    "提交成功"
+    "评分",
+    "評分"
   ],
   [
-    "单个 true / false",
-    "單個true / false"
+    "滑块",
+    "滑塊"
   ],
   [
-    "带索引、地区选择",
-    "帶索引、地區選擇"
+    "选择",
+    "選擇"
   ],
   [
-    "换个分隔符",
-    "換個分隔符"
+    "日期选择器",
+    "日期選擇器"
   ],
   [
-    "列表高度小一点",
-    "列表高度小一點"
+    "时间选择器",
+    "時間選擇器"
   ],
   [
-    "范围选",
-    "範圍選"
+    "级联选择器",
+    "級聯選擇器"
   ],
   [
-    "禁用部分日期",
-    "禁用部分日期"
+    "文件上传",
+    "文件上傳"
   ],
   [
-    "日历长列表",
-    "日曆長列表"
+    "日历",
+    "日曆"
   ],
   [
-    "打开日历长列表",
-    "打開日曆長列表"
+    "布局组件",
+    "布局組件"
   ],
   [
-    "日历面板",
-    "日曆面板"
+    "弹性布局",
+    "彈性布局"
   ],
   [
-    "自定义文案和颜色",
-    "自定義文案和顏色"
+    "标签页",
+    "標簽頁"
   ],
   [
-    "显示头",
-    "顯示頭"
+    "折叠面板",
+    "折疊面板"
   ],
   [
-    "可滑动",
-    "可滑動"
+    "吸顶",
+    "吸頂"
   ],
   [
-    "左滑编辑",
-    "左滑編輯"
+    "导航栏",
+    "導航欄"
   ],
   [
-    "编辑",
-    "編輯"
+    "底部视图",
+    "底部視圖"
   ],
   [
-    "右滑删除",
-    "右滑刪除"
+    "悬浮视图",
+    "懸浮視圖"
   ],
   [
-    "账号",
-    "帳號"
+    "底部导航栏",
+    "底部導航欄"
   ],
   [
-    "我的订单",
-    "我的訂單"
+    "数据展示",
+    "數據展示"
   ],
   [
-    "我的收藏",
-    "我的收藏"
+    "查看更多",
+    "查看更多"
   ],
   [
-    "筛选",
-    "篩選"
+    "列表",
+    "列表"
   ],
   [
-    "长按项即可拖动排序",
-    "長按項即可拖動排序"
+    "列表视图",
+    "列表視圖"
   ],
   [
-    "单列排序",
-    "單列排序"
+    "列表刷新",
+    "列表刷新"
   ],
   [
-    "不需要长按",
-    "不需要長按"
+    "瀑布流",
+    "瀑布流"
+  ],
+  [
+    "轮播图",
+    "輪播圖"
   ],
   [
-    "结合列表使用",
-    "結合列表使用"
+    "跑马灯",
+    "跑馬燈"
   ],
   [
-    "多列排序",
-    "多列排序"
+    "分页",
+    "分頁"
   ],
   [
-    "结合图片使用",
-    "結合圖片使用"
+    "时间轴",
+    "時間軸"
   ],
   [
-    "禁用手势",
-    "禁用手勢"
+    "拖拽",
+    "拖拽"
   ],
   [
-    "自定义样式2",
-    "自定義樣式2"
+    "筛选栏",
+    "篩選欄"
   ],
   [
-    "无图片",
-    "無圖片"
+    "树形结构",
+    "樹形結構"
   ],
   [
-    "圆角",
-    "圓角"
+    "状态组件",
+    "狀態組件"
   ],
   [
-    "自定义大小",
-    "自定義大小"
+    "角标",
+    "角標"
   ],
   [
-    "省略号",
-    "省略號"
+    "通知栏",
+    "通知欄"
   ],
   [
-    "删除地址后无法恢复,确认要删除该地址吗?",
-    "刪除地址後無法恢復,確認要刪除該地址嗎?"
+    "InputOtp 口令输入",
+    "輸入Otp口令輸入"
   ],
   [
-    "加载中",
-    "加載中"
+    "Keyboard 键盘",
+    "鍵盤"
   ],
   [
-    "收货人",
-    "收貨人"
+    "Radio 单选框",
+    "單選框"
   ],
   [
-    "请输入收货人姓名",
-    "請輸入收貨人姓名"
+    "Checkbox 多选框",
+    "多選框"
   ],
   [
-    "手机号",
-    "手機號"
+    "Switch 开关",
+    "開關"
   ],
   [
-    "选择省市区",
-    "選擇省市區"
+    "Rate 评分",
+    "評分"
   ],
   [
-    "详细地址",
-    "詳細地址"
+    "Slider 滑块",
+    "滑塊"
   ],
   [
-    "小区楼栋、门牌号、村等",
-    "小區樓棟、門牌號、村等"
+    "Select 选择器",
+    "選擇器"
   ],
   [
-    "默认地址",
-    "默認地址"
+    "SelectDate 日期选择器",
+    "日期選擇器"
   ],
   [
-    "保存",
-    "保存"
+    "SelectTime 时间选择器",
+    "時間選擇器"
   ],
   [
-    "收货人不能为空",
-    "收貨人不能為空"
+    "Cascader 级联选择器",
+    "級聯選擇器"
   ],
   [
-    "手机号不能为空",
-    "手機號不能為空"
+    "Upload 文件上传",
+    "文件上傳"
   ],
   [
-    "手机号格式不正确",
-    "手機號格式不正確"
+    "Calendar 日历",
+    "日曆"
   ],
   [
-    "详细地址不能为空",
-    "詳細地址不能為空"
+    "Flex 弹性布局",
+    "彈性布局"
   ],
   [
-    "所在地区不能为空",
-    "所在地區不能為空"
+    "Tabs 标签页",
+    "標籤頁"
   ],
   [
-    "保存中",
-    "保存中"
+    "Collapse 折叠面板",
+    "折疊面板"
   ],
   [
-    "开启通知",
-    "開啟通知"
+    "Sticky 吸顶",
+    "吸頂"
   ],
   [
-    "通用设置",
-    "通用設置"
+    "TopBar 导航栏",
+    "導航欄"
   ],
   [
-    "通知设置",
-    "通知設置"
+    "FloatView 悬浮视图",
+    "懸浮視圖"
   ],
   [
-    "隐私设置",
-    "隱私設置"
+    "Footer 底部视图",
+    "底部視圖"
   ],
   [
-    "支付失败",
-    "支付失敗"
+    "滑块大点",
+    "滑塊大點"
   ],
   [
-    "授权信息仅用于用户登录",
-    "授權資訊僅用於用戶登錄"
+    "换个颜色",
+    "換個顏色"
   ],
   [
-    "登录授权失败",
-    "登錄授權失敗"
+    "最大50",
+    "最大50"
   ],
   [
-    "获取短信验证码",
-    "獲取短信驗證碼"
+    "自定义触发器",
+    "自定義觸發器"
   ],
   [
-    "验证码",
-    "驗證碼"
+    "打开选择器",
+    "打開選擇器"
   ],
   [
-    "发送短信",
-    "發送短信"
+    "多列",
+    "多列"
   ],
   [
-    "{n}s后重新获取",
-    "{n}s後重新獲取"
+    "通过 children 配置多级数据,并使用 column-count 参数指定显示的列数",
+    "通過 children 配置多級數據,並使用 column-count 參數指定顯示的列數"
   ],
   [
-    "获取验证码",
-    "獲取驗證碼"
+    "弹窗中使用",
+    "彈窗中使用"
   ],
   [
-    "短信已发送,请查收",
-    "短信已發送,請查收"
+    "打开",
+    "打開"
   ],
   [
-    "请填写验证码",
-    "請填寫驗證碼"
+    "选择地区",
+    "選擇地區"
   ],
   [
-    "请填写正确的手机号格式",
-    "請填寫正確的手機號格式"
+    "绑定值",
+    "绑定值"
   ],
   [
-    "全局字号",
-    "全局字號"
+    "下一步",
+    "下一步"
   ],
   [
-    "这是一段示例文字,用于预览不同字号的效果。",
-    "這是一段示例文字,用於預覽不同字號的效果。"
+    "确定",
+    "確定"
   ],
   [
-    "默认 1.0",
-    "默認1.0"
+    "关闭",
+    "關閉"
   ],
   [
-    "切换语言",
-    "切換語言"
+    "显示取消按钮",
+    "顯示取消按鈕"
   ],
   [
-    "切换中",
-    "切換中"
+    "修改按钮文案",
+    "修改按鈕文案"
   ],
   [
-    "模板",
-    "模板"
+    "显示绑定值",
+    "顯示绑定值"
   ],
   [
-    "编辑资料",
-    "編輯資料"
+    "空数据",
+    "空數據"
   ],
   [
-    "Text 文本",
-    "Text文本"
+    "",
+    ""
   ],
   [
-    "Button 按钮",
-    "Button按鈕"
+    "时:分",
+    "時:分"
   ],
   [
-    "插槽",
-    "插槽"
+    "删除好友会同时删除所有聊天记录",
+    "刪除好友會同時刪除所有聊天記錄"
   ],
   [
-    "使用 PT 自定义颜色",
-    "使用PT自定義顏色"
+    "删除好友",
+    "刪除好友"
   ],
   [
-    "自定义返回图标",
-    "自定義返回圖示"
+    "确定要删除好友吗?",
+    "確定要刪除好友嗎?"
   ],
   [
-    "自定义返回路径",
-    "自定義返回路徑"
+    "点我关闭",
+    "點我關閉"
   ],
   [
-    "自定义标题内容",
-    "自定義標題內容"
+    "确定要关闭吗?",
+    "確定要關閉嗎?"
   ],
   [
-    "显示滑块",
-    "顯示滑塊"
+    "支付宝",
+    "支付寶"
   ],
   [
-    "添加间距",
-    "添加間距"
+    "微信",
+    "微信"
   ],
   [
-    "横向填充",
-    "橫向填充"
+    "父子关联",
+    "父子關聯"
   ],
   [
-    "适用于标签数量不多的情况",
-    "適用於標籤數量不多的情況"
+    "选中值",
+    "選中值"
   ],
   [
-    "居中",
-    "居中"
+    "选中操作",
+    "選中操作"
   ],
   [
-    "单个禁用",
-    "單個禁用"
+    "选中部分节点",
+    "選中部分節點"
   ],
   [
-    "显示下划线",
-    "顯示下劃線"
+    "获取选中节点",
+    "獲取選中節點"
   ],
   [
-    "禁用",
-    "禁用"
+    "获取半选节点",
+    "獲取半選節點"
   ],
   [
-    "取消订单",
-    "取消訂單"
+    "清空选中",
+    "清空選中"
   ],
   [
-    "立即购买",
-    "立即購買"
+    "展开操作",
+    "展開操作"
   ],
   [
-    "确认收货",
-    "確認收貨"
+    "展开部分节点",
+    "展開部分節點"
   ],
   [
-    "评价",
-    "評價"
+    "获取展开节点",
+    "獲取展開節點"
   ],
   [
-    "禁用状态,无法拖拽",
-    "禁用狀態,無法拖拽"
+    "展开所有",
+    "展開所有"
   ],
   [
-    "不吸附边缘,任意位置可拖拽",
-    "不吸附邊緣,任意位置可拖拽"
+    "收起所有",
+    "收起所有"
   ],
   [
-    "这是一个提示",
-    "這是一個提示"
+    "注册账户",
+    "註冊帳戶"
   ],
   [
-    "标签格式化",
-    "標籤格式化"
+    "本页面内容由 canvas 渲染生成,是否立即预览图片效果?",
+    "本頁面內容由 canvas 渲染生成,是否立即預覽圖片效果?"
   ],
   [
-    "固定开始、结束日期",
-    "固定開始、結束日期"
+    "基础动画",
+    "基礎動畫"
   ],
   [
-    "自定义快捷选项",
-    "自定義快捷選項"
+    "淡入淡出",
+    "淡入淡出"
   ],
   [
-    "只读",
-    "唯讀"
+    "播放动画",
+    "播放動畫"
   ],
   [
-    "显示分数",
-    "顯示分數"
+    "滑入",
+    "滑入"
   ],
   [
-    "允许半星",
-    "允許半星"
+    "旋转翻转",
+    "旋轉翻轉"
   ],
   [
-    "换个图标",
-    "換個圖標"
+    "摇摆抖动",
+    "搖擺抖動"
   ],
   [
-    "纵向排列",
-    "縱向排列"
+    "特殊效果",
+    "特殊效果"
   ],
   [
-    "换个样式",
-    "換個樣式"
+    "组合动画",
+    "組合動畫"
   ],
   [
-    "不显示图标",
-    "不顯示圖標"
+    "ID",
+    "ID"
   ],
   [
-    "其他样式",
-    "其他樣式"
+    "用户信息",
+    "用戶信息"
   ],
   [
-    "数字键盘",
-    "數字鍵盤"
+    "跳转",
+    "跳轉"
   ],
   [
-    "打开键盘",
-    "打開鍵盤"
+    "带参数",
+    "帶參數"
   ],
   [
-    "是否显示输入值",
-    "是否顯示輸入值"
+    "需登录",
+    "需登錄"
   ],
   [
-    "输入即绑定",
-    "輸入即绑定"
+    "标题",
+    "標題"
   ],
   [
-    "身份证键盘",
-    "身份證鍵盤"
+    "插槽",
+    "插槽"
   ],
   [
-    "密码键盘",
-    "密碼鍵盤"
+    "使用 PT 自定义颜色",
+    "使用 PT 自定義顏色"
   ],
   [
-    "是否加密",
-    "是否加密"
+    "自定义返回图标",
+    "自定義返回圖標"
   ],
   [
-    "车牌号键盘",
-    "車牌號鍵盤"
+    "禁用返回按钮",
+    "禁用返回按鈕"
   ],
   [
-    "数字输入",
-    "數字輸入"
+    "自定义返回路径",
+    "自定義返回路徑"
   ],
   [
-    "Flex 弹性布局",
-    "Flex 彈性布局"
+    "头像上传成功",
+    "頭像上傳成功"
   ],
   [
-    "Tabs 标签页",
-    "Tabs 標籤頁"
+    "编辑昵称",
+    "編輯暱稱"
   ],
   [
-    "Collapse 折叠面板",
-    "Collapse 摺疊面板"
+    "请输入昵称",
+    "請輸入暱稱"
   ],
   [
-    "Sticky 吸顶",
-    "Sticky 吸頂"
+    "请设置2-20个字符,不包括@<>/等无效字符",
+    "請設置2-20個字符,不包括@<>/等無效字符"
   ],
   [
-    "TopBar 导航栏",
-    "TopBar 導航欄"
+    "确认",
+    "確認"
   ],
   [
-    "FloatView 悬浮视图",
-    "FloatView 懸浮視圖"
+    "昵称长度需在2-20个字符之间",
+    "暱稱長度需在2-20個字符之間"
   ],
   [
-    "Footer 底部视图",
-    "Footer 底部視圖"
+    "昵称不能包含@<>/等特殊字符",
+    "暱稱不能包含@<>/等特殊字符"
   ],
   [
-    "List 列表",
-    "List 列表"
+    "编辑简介",
+    "編輯簡介"
   ],
   [
-    "ListView 列表视图",
-    "ListView 列表視圖"
+    "简介不能为空",
+    "簡介不能為空"
   ],
   [
-    "ListViewRefresh 列表刷新",
-    "ListViewRefresh 列表刷新"
+    "获取短信验证码",
+    "獲取短信驗證碼"
   ],
   [
-    "Waterfall 瀑布流",
-    "Waterfall 瀑布流"
+    "验证码",
+    "驗證碼"
   ],
   [
-    "Banner 轮播图",
-    "Banner 輪播圖"
+    "发送短信",
+    "發送短信"
   ],
   [
-    "Marquee 跑马灯",
-    "Marquee 跑馬燈"
+    "{n}s后重新获取",
+    "{n}s後重新獲取"
   ],
   [
-    "Pagination 分页",
-    "Pagination 分頁"
+    "获取验证码",
+    "獲取驗證碼"
   ],
   [
-    "Timeline 时间轴",
-    "Timeline 時間軸"
+    "短信已发送,请查收",
+    "短信已發送,請查收"
   ],
   [
-    "Avatar 头像",
-    "Avatar 頭像"
+    "请填写验证码",
+    "請填寫驗證碼"
   ],
   [
-    "ReadMore 查看更多",
-    "ReadMore 查看更多"
+    "请填写正确的手机号格式",
+    "請填寫正確的手機號格式"
   ],
   [
-    "Draggable 拖拽",
-    "Draggable 拖曳"
+    "提示",
+    "提示"
   ],
   [
-    "FilterBar 筛选栏",
-    "FilterBar 篩選欄"
+    "为提供更好的服务,我们邀请您填写昵称、头像等公开信息",
+    "為提供更好的服務,我們邀請您填寫暱稱、頭像等公開信息"
   ],
   [
-    "Tree 树形结构",
-    "Tree 樹形結構"
+    "头像",
+    "頭像"
   ],
   [
-    "无头",
-    "無頭"
+    "邮箱格式不正确",
+    "郵箱格式不正確"
   ],
   [
-    "左侧",
-    "左側"
+    "身高不能为空",
+    "身高不能為空"
   ],
   [
-    "右侧",
-    "右側"
+    "身高在160-190cm之间",
+    "身高在160 - 190cm之間"
   ],
   [
-    "隐藏取消按钮",
-    "隱藏取消按鈕"
+    "体重不能为空",
+    "體重不能為空"
   ],
   [
-    "自定义文本",
-    "自定義文本"
+    "体重在40-100kg之间",
+    "體重在40 - 100kg之間"
   ],
   [
-    "关闭前钩子",
-    "關閉前鉤子"
+    "标签不能为空",
+    "標籤不能為空"
   ],
   [
-    "显示时长",
-    "顯示時長"
+    "标签最多选择2个",
+    "標籤最多選擇2個"
   ],
   [
-    "确定要删除吗?",
-    "確定要刪除嗎?"
+    "性别不能为空",
+    "性別不能為空"
   ],
   [
-    "确定要删除吗?3秒后自动关闭",
-    "確定要刪除嗎?3秒後自動關閉"
+    "出生年月不能为空",
+    "出生年月不能為空"
   ],
   [
-    "带标题、描述",
-    "帶標題、描述"
+    "出生年月不大于2010-01-01",
+    "出生年月不大於2010-01-01"
   ],
   [
-    "无法点击遮罩关闭",
-    "無法點擊遮罩關閉"
+    "联系人不能为空",
+    "聯繫人不能為空"
   ],
   [
-    "不需要取消按钮",
-    "不需要取消按鈕"
+    "提交成功",
+    "提交成功"
   ],
   [
-    "插槽用法",
-    "插槽用法"
+    "单个 true / false",
+    "單個true / false"
   ],
   [
-    "反馈",
-    "反饋"
+    "带索引、地区选择",
+    "帶索引、地區選擇"
   ],
   [
-    "删除好友会同时删除所有聊天记录",
-    "刪除好友會同時刪除所有聊天記錄"
+    "换个分隔符",
+    "換個分隔符"
   ],
   [
-    "删除好友",
-    "刪除好友"
+    "列表高度小一点",
+    "列表高度小一點"
   ],
   [
-    "确定要删除好友吗?",
-    "確定要刪除好友嗎?"
+    "范围选",
+    "範圍選"
   ],
   [
-    "点我关闭",
-    "點我關閉"
+    "开始 / 结束",
+    "開始 / 結束"
   ],
   [
-    "确定要关闭吗?",
-    "確定要關閉嗎?"
+    "禁用部分日期",
+    "禁用部分日期"
   ],
   [
-    "支付宝",
-    "支付寶"
+    "日历长列表",
+    "日曆長列表"
   ],
   [
-    "头像上传成功",
-    "頭像上傳成功"
+    "可关闭",
+    "可關閉"
   ],
   [
-    "编辑昵称",
-    "編輯暱稱"
+    "镂空",
+    "鏤空"
   ],
   [
-    "请输入昵称",
-    "請輸入暱稱"
+    "自定义无圆角",
+    "自定義無圓角"
   ],
   [
-    "请设置2-20个字符,不包括@<>/等无效字符",
-    "請設置2-20個字元,不包括@<>/等無效字元"
+    "不同裁剪",
+    "不同裁剪"
   ],
   [
-    "确认",
-    "確認"
+    "点击可预览",
+    "點擊可預覽"
   ],
   [
-    "昵称长度需在2-20个字符之间",
-    "暱稱長度需在2-20個字元之間"
+    "失败时显示",
+    "失敗時顯示"
   ],
   [
-    "昵称不能包含@<>/等特殊字符",
-    "暱稱不能包含@<>/等特殊字元"
+    "自定义圆角",
+    "自定義圓角"
   ],
   [
-    "编辑简介",
-    "編輯簡介"
+    "设置颜色",
+    "設置顏色"
   ],
   [
-    "简介不能为空",
-    "簡介不能為空"
+    "设置大小",
+    "設置大小"
   ],
   [
-    "提示",
-    "提示"
+    "集成 iconfont 与 remixicon 图标库,展示部分示例",
+    "集成iconfont與remixicon圖標庫,展示部分示例"
   ],
   [
-    "为提供更好的服务,我们邀请您填写昵称、头像等公开信息",
-    "為提供更好的服務,我們邀請您填寫暱稱、頭像等公開資訊"
+    "iconfont",
+    "iconfont"
   ],
   [
-    "头像",
-    "頭像"
+    "remixicon",
+    "remixicon"
   ],
   [
-    "昵称",
-    "暱稱"
+    "复制成功",
+    "複製成功"
   ],
   [
-    "点击输入昵称",
-    "點擊輸入暱稱"
+    "普通",
+    "普通"
   ],
   [
-    "取消",
-    "取消"
+    "浅色",
+    "淺色"
   ],
-  [
-    "请上传头像",
-    "請上傳頭像"
+  [
+    "深色",
+    "深色"
   ],
   [
-    "登录中",
-    "登錄中"
+    "只显示图标",
+    "只顯示圖標"
   ],
   [
-    "手机登录",
-    "手機登錄"
+    "文本模式",
+    "文本模式"
   ],
   [
-    "未注册的手机号登录成功后将自动注册",
-    "未註冊的手機號登錄成功後將自動註冊"
+    "带边框",
+    "帶邊框"
   ],
   [
-    "请输入手机号",
-    "請輸入手機號"
+    "圆角按钮",
+    "圓角按鈕"
   ],
   [
-    "Image 图片",
-    "影像 圖片"
+    "Tabbar 底部导航栏",
+    "Tabbar底部導航欄"
   ],
   [
-    "Icon 图标",
-    "圖示 圖標"
+    "List 列表",
+    "List列表"
   ],
   [
-    "Tag 标签",
-    "標籤 標籤"
+    "ListView 列表视图",
+    "ListView列表視圖"
   ],
   [
-    "Form 表单验证",
-    "表單驗證 表單驗證"
+    "ListViewRefresh 列表刷新",
+    "ListViewRefresh列表刷新"
   ],
   [
-    "Input 输入框",
-    "輸入框 輸入框"
+    "Waterfall 瀑布流",
+    "Waterfall瀑布流"
   ],
   [
-    "Textarea 文本域",
-    "文本域 文本域"
+    "Banner 轮播图",
+    "Banner輪播圖"
   ],
   [
-    "InputNumber 计数器",
-    "計數器 計數器"
+    "Marquee 跑马灯",
+    "Marquee跑馬燈"
   ],
   [
-    "InputOtp 口令输入",
-    "口令輸入 口令輸入"
+    "Pagination 分页",
+    "Pagination分頁"
   ],
   [
-    "Keyboard 键盘",
-    "鍵盤 鍵盤"
+    "Timeline 时间轴",
+    "Timeline時間軸"
   ],
   [
-    "Radio 单选框",
-    "單選框 單選框"
+    "Avatar 头像",
+    "Avatar頭像"
   ],
   [
-    "Checkbox 多选框",
-    "多選框 多選框"
+    "ReadMore 查看更多",
+    "ReadMore查看更多"
   ],
   [
-    "Switch 开关",
-    "開關 開關"
+    "Draggable 拖拽",
+    "Draggable拖拽"
   ],
   [
-    "Rate 评分",
-    "評分 評分"
+    "FilterBar 筛选栏",
+    "FilterBar篩選欄"
   ],
   [
-    "Slider 滑块",
-    "滑塊 滑塊"
+    "Tree 树形结构",
+    "Tree樹形結構"
   ],
   [
-    "Select 选择器",
-    "選擇器 選擇器"
+    "Badge 角标",
+    "Badge角標"
   ],
   [
-    "SelectDate 日期选择器",
-    "日期選擇器 日期選擇器"
+    "NoticeBar 通知栏",
+    "NoticeBar通知欄"
   ],
   [
-    "SelectTime 时间选择器",
-    "時間選擇器 時間選擇器"
+    "Countdown 倒计时",
+    "Countdown倒計時"
   ],
   [
-    "Cascader 级联选择器",
-    "級聯選擇器 級聯選擇器"
+    "Progress 进度条",
+    "Progress進度條"
   ],
   [
-    "Upload 文件上传",
-    "文件上傳 文件上傳"
+    "ProgressCircle 圆形进度条",
+    "ProgressCircle圓形進度條"
   ],
   [
-    "Calendar 日历",
-    "日曆 日曆"
+    "Skeleton 骨架图",
+    "Skeleton骨架圖"
   ],
   [
-    "体重",
-    "體重"
+    "新用户立享500元体验金",
+    "新用戶立享500元體驗金"
   ],
   [
-    "所在地区",
-    "所在地區"
+    "实名认证通过",
+    "實名認證通過"
   ],
   [
-    "出生年月",
-    "出生年月"
+    "身份认证成功,开启安全保障",
+    "身份認證成功,開啟安全保障"
   ],
   [
-    "个人简介",
-    "個人簡介"
+    "银行卡绑定完成",
+    "銀行卡绑定完成"
   ],
   [
-    "请输入个人简介",
-    "請輸入個人簡介"
+    "成功绑定招商银行储蓄卡,畅享无忧交易",
+    "成功绑定招商銀行儲蓄卡,暢享無憂交易"
   ],
   [
-    "公开状态",
-    "公開狀態"
+    "首次资金充值",
+    "首次資金充值"
   ],
   [
-    "重置",
-    "重置"
+    "充值1000元资金到账,准备投资",
+    "充值1000元資金到账,準備投資"
   ],
   [
-    "提交",
-    "提交"
+    "完成首笔投资",
+    "完成首筆投資"
   ],
   [
-    "未知",
-    "未知"
+    "优选灵活配置混合A基金",
+    "優選靈活配置混合A基金"
   ],
   [
-    "篮球",
-    "籃球"
+    "起投金额1000元",
+    "起投金額1000元"
   ],
   [
-    "足球",
-    "足球"
+    "立即申购",
+    "立即申購"
   ],
   [
-    "羽毛球",
-    "羽毛球"
+    "禁用切换按钮",
+    "禁用切換按鈕"
   ],
   [
-    "乒乓球",
-    "乒乓球"
+    "动态内容",
+    "動態內容"
   ],
   [
-    "游泳",
-    "游泳"
+    "自定义高度",
+    "自定義高度"
   ],
   [
-    "用户名不能为空",
-    "用戶名不能為空"
+    "多页数",
+    "多頁數"
   ],
   [
-    "用户名长度在3-20个字符之间",
-    "用戶名長度在3-20個字符之間"
+    "上一页",
+    "上一頁"
   ],
   [
-    "邮箱不能为空",
-    "郵箱不能為空"
+    "下一页",
+    "下一頁"
   ],
   [
-    "邮箱格式不正确",
-    "郵箱格式不正確"
+    "横向滚动",
+    "横向滾動"
   ],
   [
-    "身高不能为空",
-    "身高不能為空"
+    "纵向滚动",
+    "纵向滾動"
   ],
   [
-    "身高在160-190cm之间",
-    "身高在160-190cm之間"
+    "快一点",
+    "快一點"
   ],
   [
-    "日期选择器",
-    "日期選擇器"
+    "时:分:秒",
+    "時:分:秒"
   ],
   [
-    "时间选择器",
-    "時間選擇器"
+    "标签格式化",
+    "標籤格式化"
   ],
   [
-    "级联选择器",
-    "級聯選擇器"
+    "固定开始、结束日期",
+    "固定開始、結束日期"
   ],
   [
-    "文件上传",
-    "文件上傳"
+    "自定义快捷选项",
+    "自定義快捷選項"
   ],
   [
-    "日历",
-    "日曆"
+    "只读",
+    "唯讀"
   ],
   [
-    "布局组件",
-    "布局組件"
+    "显示分数",
+    "顯示分數"
   ],
   [
-    "弹性布局",
-    "彈性布局"
+    "允许半星",
+    "允許半星"
   ],
   [
-    "标签页",
-    "標籤頁"
+    "换个图标",
+    "換個圖標"
   ],
   [
-    "折叠面板",
-    "折疊面板"
+    "纵向排列",
+    "縱向排列"
   ],
   [
-    "吸顶",
-    "吸頂"
+    "换个样式",
+    "換個樣式"
   ],
   [
-    "导航栏",
-    "導航欄"
+    "不显示图标",
+    "不顯示圖標"
   ],
   [
-    "底部视图",
-    "底部視圖"
+    "其他样式",
+    "其他樣式"
   ],
   [
-    "悬浮视图",
-    "懸浮視圖"
+    "数字键盘",
+    "數字鍵盤"
   ],
   [
-    "数据展示",
-    "數據展示"
+    "打开键盘",
+    "打開鍵盤"
   ],
   [
-    "查看更多",
-    "查看更多"
+    "是否显示输入值",
+    "是否顯示輸入值"
   ],
   [
-    "列表",
-    "列表"
+    "输入即绑定",
+    "輸入即绑定"
   ],
   [
-    "列表视图",
-    "列表視圖"
+    "身份证键盘",
+    "身份證鍵盤"
   ],
   [
-    "列表刷新",
-    "列表刷新"
+    "密码键盘",
+    "密碼鍵盤"
   ],
   [
-    "瀑布流",
-    "瀑布流"
+    "是否加密",
+    "是否加密"
   ],
   [
-    "轮播图",
-    "輪播圖"
+    "车牌号键盘",
+    "車牌號鍵盤"
   ],
   [
-    "获取某个单位的结束时间",
-    "獲取某個單位的結束時間"
+    "带图标提示",
+    "帶圖標提示"
   ],
   [
-    "是否同一天",
-    "是否同一天"
+    "移除其他已存在的提示",
+    "移除其他已存在的提示"
   ],
   [
-    "是否早于",
-    "是否早於"
+    "打开弹窗",
+    "打開彈窗"
   ],
   [
-    "是否晚于",
-    "是否晚於"
+    "设置宽度 80%",
+    "設置寬度80%"
   ],
   [
-    "差值",
-    "差值"
+    "无头",
+    "無頭"
   ],
   [
-    "差值(单位)",
-    "差值(單位)"
+    "左侧",
+    "左側"
   ],
   [
-    "选择图片",
-    "選擇圖片"
+    "右侧",
+    "右側"
   ],
   [
-    "可调节裁剪框大小",
-    "可調節裁剪框大小"
+    "隐藏取消按钮",
+    "隱藏取消按鈕"
   ],
   [
-    "预览图片",
-    "預覽圖片"
+    "自定义文本",
+    "自定義文本"
   ],
   [
-    "保存图片",
-    "保存圖片"
+    "关闭前钩子",
+    "關閉前钩子"
   ],
   [
-    "本页面内容由 canvas 渲染生成,是否立即预览图片效果?",
-    "本頁面內容由 canvas 渲染生成,是否立即預覽圖片效果?"
+    "显示时长",
+    "顯示時長"
   ],
   [
-    "基础动画",
-    "基礎動畫"
+    "您即将进行一个重要操作,是否确认继续?",
+    "您即將進行一個重要操作,是否確認繼續?"
   ],
   [
-    "淡入淡出",
-    "淡入淡出"
+    "操作确认",
+    "操作確認"
   ],
   [
-    "播放动画",
-    "播放動畫"
+    "您确认要执行删除操作吗?删除后将无法恢复。",
+    "您確認要執行刪除操作嗎?刪除後將無法恢復。"
   ],
   [
-    "滑入",
-    "滑入"
+    "您确定要执行删除操作吗?3秒后自动关闭",
+    "您確定要執行刪除操作嗎?3秒後自動關閉"
   ],
   [
-    "旋转翻转",
-    "旋轉翻轉"
+    "带标题、描述",
+    "帶標題、描述"
   ],
   [
-    "摇摆抖动",
-    "搖摆抖動"
+    "无法点击遮罩关闭",
+    "無法點擊遮罩關閉"
   ],
   [
-    "特殊效果",
-    "特殊效果"
+    "不需要取消按钮",
+    "不需要取消按鈕"
   ],
   [
-    "组合动画",
-    "組合動畫"
+    "插槽用法",
+    "插槽用法"
   ],
   [
-    "标题",
-    "標題"
+    "反馈",
+    "反饋"
   ]
 ]

+ 0 - 4
main.ts

@@ -1,13 +1,9 @@
 import { createSSRApp } from "vue";
-import { cool } from "./cool";
 import App from "./App.uvue";
-import "./router";
 
 export function createApp() {
 	const app = createSSRApp(App);
 
-	cool(app);
-
 	return {
 		app
 	};

+ 11 - 11
manifest.json

@@ -50,16 +50,16 @@
 	},
 	"app-harmony": {
 		"distribute": {
-			"bundleName": "com.cool.unix",
+			"bundleName": "cool.unix.demo",
 			"signingConfigs": {
 				"default": {
-					"certpath": "/Users/icssoa/Library/Application Support/HBuilder X/extensions/launcher/agc-certs/1749115146522.cer",
+					"certpath": "/Users/icssoa/Library/Application Support/HBuilder X/extensions/launcher/agc-certs/1761881606984.cer",
 					"keyAlias": "debugKey",
-					"keyPassword": "0000001B0CD2170B509D76F6435F878B7ED2FE2E3EA6E7454E26523487B093238D4F7C8B7033D30DE80163",
-					"profile": "/Users/icssoa/Library/Application Support/HBuilder X/extensions/launcher/agc-certs/1749115146522.p7b",
+					"keyPassword": "0000001B6F06517858019F05761FA6ED2A0253C5F0CC9B6A4283D24BA6EA2EDCA6DDED661284493269A46C",
+					"profile": "/Users/icssoa/Library/Application Support/HBuilder X/extensions/launcher/agc-certs/1768193325463.p7b",
 					"signAlg": "SHA256withECDSA",
-					"storeFile": "/Users/icssoa/Library/Application Support/HBuilder X/extensions/launcher/agc-certs/1749115146522.p12",
-					"storePassword": "0000001B0CD2170B509D76F6435F878B7ED2FE2E3EA6E7454E26523487B093238D4F7C8B7033D30DE80163"
+					"storeFile": "/Users/icssoa/Library/Application Support/HBuilder X/extensions/launcher/agc-certs/1761881606984.p12",
+					"storePassword": "0000001B6F06517858019F05761FA6ED2A0253C5F0CC9B6A4283D24BA6EA2EDCA6DDED661284493269A46C"
 				}
 			},
 			"icons": {
@@ -72,10 +72,10 @@
 		"distribute": {
 			"modules": {},
 			"icons": {
-				"hdpi": "docs/logo.png",
-				"xhdpi": "docs/logo.png",
-				"xxhdpi": "docs/logo.png",
-				"xxxhdpi": "docs/logo.png"
+				"hdpi": "static/logo.png",
+				"xhdpi": "static/logo.png",
+				"xxhdpi": "static/logo.png",
+				"xxxhdpi": "static/logo.png"
 			},
 			"splashScreens": {
 				"default": {}
@@ -91,4 +91,4 @@
 			"splashScreens": {}
 		}
 	}
-}
+}

+ 3 - 13
package.json

@@ -1,30 +1,20 @@
 {
 	"name": "cool-unix",
-	"version": "8.0.33",
+	"version": "8.1.0",
 	"license": "MIT",
-	"scripts": {
-		"build-ui": "node ./uni_modules/cool-ui/scripts/generate-types.js",
-		"build-icon": "node ./.cool/scripts/icon.js"
-	},
 	"dependencies": {
 		"hammer-touchemulator": "^0.0.2",
 		"vue": "^3.5.13",
 		"weixin-js-sdk": "^1.6.5"
 	},
 	"devDependencies": {
-		"@babel/parser": "^7.27.5",
-		"@babel/types": "^7.27.6",
-		"@cool-vue/ai": "^1.1.7",
-		"@cool-vue/vite-plugin": "^8.2.20",
+		"@cool-vue/unix": "1.1.0-beta.1",
 		"@dcloudio/types": "^3.4.16",
 		"@types/node": "^24.0.15",
-		"@vue/compiler-sfc": "^3.5.16",
 		"@vue/tsconfig": "^0.7.0",
-		"adm-zip": "^0.5.16",
-		"autoprefixer": "^10.4.21",
 		"postcss": "^8.5.3",
 		"prettier": "^3.5.3",
 		"tailwindcss": "3.4.17",
 		"vite": "^6.3.5"
 	}
-}
+}

+ 7 - 11
pages.json

@@ -58,15 +58,6 @@
 					"meta": {
 						"isAuth": true
 					}
-				},
-				{
-					"path": "cs",
-					"style": {
-						"navigationBarTitleText": "联系客服"
-					},
-					"meta": {
-						"isAuth": true
-					}
 				}
 			]
 		},
@@ -287,6 +278,12 @@
 					}
 				},
 				{
+					"path": "layout/tabbar",
+					"style": {
+						"navigationBarTitleText": "Tabbar 底部导航栏"
+					}
+				},
+				{
 					"path": "data/list",
 					"style": {
 						"navigationBarTitleText": "List 列表"
@@ -550,8 +547,7 @@
 				{
 					"path": "shop/address",
 					"style": {
-						"navigationBarTitleText": "收货地址",
-						"enablePullDownRefresh": true
+						"navigationBarTitleText": "收货地址"
 					},
 					"meta": {
 						"isAuth": true

+ 3 - 12
pages/demo/basic/button.uvue

@@ -10,9 +10,7 @@
 					<cl-button type="primary">{{ t("主要") }}</cl-button>
 					<cl-button type="success">{{ t("成功") }}</cl-button>
 					<cl-button type="warn">{{ t("警告") }}</cl-button>
-				</view>
 
-				<view class="flex flex-row mb-2 overflow-visible">
 					<cl-button type="error">{{ t("危险") }}</cl-button>
 					<cl-button type="info">{{ t("信息") }}</cl-button>
 				</view>
@@ -41,7 +39,7 @@
 						:rounded="isRounded"
 						:loading="isLoading"
 						:disabled="isDisabled"
-						:icon="isIcon ? 'edit-fill' : ''"
+						:icon="isIcon ? 'send-plane-fill' : ''"
 						:color="isColor ? '#4286e0' : ''"
 						:pt="{
 							className: parseClass([
@@ -56,13 +54,7 @@
 
 				<cl-list border>
 					<view class="p-2">
-						<cl-tabs
-							v-model="size"
-							:height="66"
-							:list="sizeOptions"
-							show-slider
-							fill
-						></cl-tabs>
+						<cl-tabs v-model="size" :list="sizeOptions" show-slider fill></cl-tabs>
 					</view>
 
 					<cl-list-item :label="t('文本模式')">
@@ -102,8 +94,7 @@
 import { ref } from "vue";
 import DemoItem from "../components/item.uvue";
 import type { ClButtonType, ClTabsItem, Size } from "@/uni_modules/cool-ui";
-import { parseClass } from "@/cool";
-import { t } from "@/locale";
+import { parseClass, t } from "@/.cool";
 
 const type = ref<ClButtonType>("primary");
 

+ 9 - 11
pages/demo/basic/icon.uvue

@@ -15,10 +15,10 @@
 
 			<demo-item :label="t('设置大小')">
 				<view class="flex flex-row">
-					<cl-icon name="heart-fill" class="mr-2" :size="50"></cl-icon>
-					<cl-icon name="heart-fill" class="mr-2" :size="40"></cl-icon>
-					<cl-icon name="heart-fill" class="mr-2" :size="30"></cl-icon>
-					<cl-icon name="heart-fill" class="mr-2" :size="20"></cl-icon>
+					<cl-icon name="heart-fill" class="mr-2" :size="26"></cl-icon>
+					<cl-icon name="heart-fill" class="mr-2" :size="22"></cl-icon>
+					<cl-icon name="heart-fill" class="mr-2" :size="18"></cl-icon>
+					<cl-icon name="heart-fill" class="mr-2" :size="14"></cl-icon>
 				</view>
 			</demo-item>
 
@@ -30,12 +30,12 @@
 				<cl-row :gutter="10">
 					<cl-col :span="4" v-for="item in iconfont" :key="item">
 						<view
-							class="flex flex-col items-center justify-center h-[100rpx] rounded-lg"
+							class="flex flex-col items-center justify-center h-[50px] rounded-lg"
 							hover-class="opacity-60"
 							:hover-stay-time="250"
 							@tap="copy(item)"
 						>
-							<cl-icon :name="item"></cl-icon>
+							<cl-icon :name="item" :size="16"></cl-icon>
 						</view>
 					</cl-col>
 				</cl-row>
@@ -45,12 +45,12 @@
 				<cl-row :gutter="10">
 					<cl-col :span="4" v-for="item in remixicon" :key="item">
 						<view
-							class="flex flex-col items-center justify-center h-[100rpx]"
+							class="flex flex-col items-center justify-center h-[50px]"
 							hover-class="opacity-60"
 							:hover-stay-time="250"
 							@tap="copy(item)"
 						>
-							<cl-icon :name="item"></cl-icon>
+							<cl-icon :name="item" :size="16"></cl-icon>
 						</view>
 					</cl-col>
 				</cl-row>
@@ -62,10 +62,8 @@
 <script lang="ts" setup>
 import { ref } from "vue";
 import DemoItem from "../components/item.uvue";
-import { icons } from "@/icons";
-import { forInObject, keys } from "@/cool";
+import { forInObject, keys, icons, t } from "@/.cool";
 import { useUi } from "@/uni_modules/cool-ui";
-import { t } from "@/locale";
 
 const ui = useUi();
 

+ 9 - 5
pages/demo/basic/image.uvue

@@ -10,8 +10,9 @@
 					<view class="flex flex-col items-center justify-center">
 						<cl-image :src="url" mode="aspectFill"></cl-image>
 						<cl-text
+							:size="12"
 							:pt="{
-								className: 'text-sm mt-1'
+								className: 'mt-1'
 							}"
 							>aspectFill</cl-text
 						>
@@ -20,8 +21,9 @@
 					<view class="flex flex-col items-center justify-center">
 						<cl-image :src="url" mode="aspectFit"></cl-image>
 						<cl-text
+							:size="12"
 							:pt="{
-								className: 'text-sm mt-1'
+								className: 'mt-1'
 							}"
 							>aspectFit</cl-text
 						>
@@ -30,8 +32,9 @@
 					<view class="flex flex-col items-center justify-center">
 						<cl-image :src="url" mode="heightFix"></cl-image>
 						<cl-text
+							:size="12"
 							:pt="{
-								className: 'text-sm mt-1'
+								className: 'mt-1'
 							}"
 							>heightFix</cl-text
 						>
@@ -40,8 +43,9 @@
 					<view class="flex flex-col items-center justify-center">
 						<cl-image :src="url" mode="scaleToFill"></cl-image>
 						<cl-text
+							:size="12"
 							:pt="{
-								className: 'text-sm mt-1'
+								className: 'mt-1'
 							}"
 							>scaleToFill</cl-text
 						>
@@ -110,7 +114,7 @@
 <script lang="ts" setup>
 import { ref } from "vue";
 import DemoItem from "../components/item.uvue";
-import { t } from "@/locale";
+import { t } from "@/.cool";
 
 const url = ref("https://unix.cool-js.com/images/demo/avatar.jpg");
 </script>

+ 1 - 1
pages/demo/basic/tag.uvue

@@ -68,5 +68,5 @@
 
 <script lang="ts" setup>
 import DemoItem from "../components/item.uvue";
-import { t } from "@/locale";
+import { t } from "@/.cool";
 </script>

+ 14 - 42
pages/demo/basic/text.uvue

@@ -6,19 +6,19 @@
 			</demo-item>
 
 			<demo-item :label="t('自定义颜色')">
-				<cl-text color="primary" :pt="{ className: 'mb-1' }"
+				<cl-text color="primary" :pt="{ className: 'mb-2' }"
 					>明月松间照,清泉石上流。</cl-text
 				>
-				<cl-text color="error" :pt="{ className: 'mb-1' }"
+				<cl-text color="error" :pt="{ className: 'mb-2' }"
 					>举头望明月,低头思故乡。</cl-text
 				>
-				<cl-text color="success" :pt="{ className: 'mb-1' }"
+				<cl-text color="success" :pt="{ className: 'mb-2' }"
 					>春眠不觉晓,处处闻啼鸟。</cl-text
 				>
-				<cl-text color="warn" :pt="{ className: 'mb-1' }"
+				<cl-text color="warn" :pt="{ className: 'mb-2' }"
 					>劝君更尽一杯酒,西出阳关无故人。</cl-text
 				>
-				<cl-text color="info" :pt="{ className: 'mb-1' }"
+				<cl-text color="info" :pt="{ className: 'mb-2' }"
 					>孤帆远影碧空尽,唯见长江天际流。</cl-text
 				>
 				<cl-text
@@ -42,42 +42,7 @@
 			</demo-item>
 
 			<demo-item :label="t('字体大小')">
-				<cl-text
-					:pt="{
-						className: 'text-xs'
-					}"
-					>text-xs</cl-text
-				>
-				<cl-text
-					:pt="{
-						className: 'text-sm'
-					}"
-					>text-sm</cl-text
-				>
-				<cl-text
-					:pt="{
-						className: 'text-md'
-					}"
-					>text-md</cl-text
-				>
-				<cl-text
-					:pt="{
-						className: 'text-lg'
-					}"
-					>text-lg</cl-text
-				>
-				<cl-text
-					:pt="{
-						className: 'text-xl'
-					}"
-					>text-xl</cl-text
-				>
-			</demo-item>
-
-			<demo-item :label="t('自定义尺寸')">
-				<cl-text :size="20">20rpx</cl-text>
-				<cl-text size="30rpx">30rpx</cl-text>
-				<cl-text size="15px">15px</cl-text>
+				<cl-text v-for="i in 6" :key="i" :size="11 + i">{{ i + 11 }}px</cl-text>
 			</demo-item>
 
 			<demo-item :label="t('金额')">
@@ -103,11 +68,18 @@
 			<demo-item :label="t('自定义脱敏字符')">
 				<cl-text type="phone" value="13800138000" mask mask-char="~"></cl-text>
 			</demo-item>
+
+			<demo-item :label="t('自定义图标')">
+				<view class="flex flex-row items-center">
+					<cl-icon name="fire-line" :pt="{ className: 'mr-1' }"></cl-icon>
+					<cl-text>云想衣裳花想容,春风拂槛露华浓。</cl-text>
+				</view>
+			</demo-item>
 		</view>
 	</cl-page>
 </template>
 
 <script lang="ts" setup>
-import { t } from "@/locale";
+import { t } from "@/.cool";
 import DemoItem from "../components/item.uvue";
 </script>

+ 2 - 2
pages/demo/components/goods-item.uvue

@@ -1,7 +1,7 @@
 <template>
 	<view class="p-3 pb-0">
 		<view class="w-full p-3 bg-white rounded-xl dark:bg-surface-800">
-			<cl-image :src="item?.image" mode="aspectFill" width="100%" height="280rpx"></cl-image>
+			<cl-image :src="item?.image" mode="aspectFill" width="100%" height="140px"></cl-image>
 			<cl-text :pt="{ className: 'mt-2' }">{{ item?.title }}</cl-text>
 		</view>
 	</view>
@@ -9,7 +9,7 @@
 
 <script lang="ts" setup>
 import { computed } from "vue";
-import { parse } from "@/cool";
+import { parse } from "@/.cool";
 
 defineOptions({
 	name: "goods-item"

+ 1 - 1
pages/demo/components/item.uvue

@@ -1,6 +1,6 @@
 <template>
 	<view class="demo-item dark:!bg-surface-800">
-		<cl-text :pt="{ className: 'text-sm text-surface-400 mb-2' }" v-if="label != ''">{{
+		<cl-text :size="12" :pt="{ className: 'text-surface-400 mb-2' }" v-if="label != ''">{{
 			label
 		}}</cl-text>
 

+ 1 - 5
pages/demo/components/tips.uvue

@@ -1,10 +1,6 @@
 <template>
 	<view class="bg-surface-100 dark:!bg-surface-700 rounded-lg p-3 mb-3">
-		<cl-text
-			:pt="{
-				className: 'text-sm'
-			}"
-		>
+		<cl-text :size="12">
 			<slot></slot>
 		</cl-text>
 	</view>

+ 2 - 2
pages/demo/data/avatar.uvue

@@ -18,7 +18,7 @@
 
 			<demo-item :label="t('自定义大小')">
 				<cl-avatar
-					:size="120"
+					:size="60"
 					src="https://unix.cool-js.com/images/demo/avatar.jpg"
 				></cl-avatar>
 			</demo-item>
@@ -27,6 +27,6 @@
 </template>
 
 <script lang="ts" setup>
-import { t } from "@/locale";
+import { t } from "@/.cool";
 import DemoItem from "../components/item.uvue";
 </script>

+ 5 - 6
pages/demo/data/banner.uvue

@@ -13,9 +13,9 @@
 				<cl-banner
 					:list="list"
 					:pt="{
-						className: 'mx-[-12rpx] !rounded-none',
+						className: 'mx-[-6px] !rounded-none',
 						item: {
-							className: parseClass(['scale-y-80 !px-[12rpx]'])
+							className: parseClass(['scale-y-80 !px-[6px]'])
 						},
 						itemActive: {
 							className: parseClass(['!scale-y-100'])
@@ -33,9 +33,9 @@
 				<cl-banner
 					:list="list"
 					:pt="{
-						className: 'mx-[-12rpx]',
+						className: 'mx-[-6px]',
 						item: {
-							className: parseClass(['px-[12rpx]'])
+							className: parseClass(['px-[6px]'])
 						}
 					}"
 					:next-margin="40"
@@ -46,10 +46,9 @@
 </template>
 
 <script lang="ts" setup>
-import { t } from "@/locale";
 import DemoItem from "../components/item.uvue";
 import { ref } from "vue";
-import { parseClass } from "@/cool";
+import { parseClass, t } from "@/.cool";
 
 const list = ref<string[]>([
 	"https://unix.cool-js.com/images/demo/bg1.png",

+ 1 - 2
pages/demo/data/draggable.uvue

@@ -94,10 +94,9 @@
 </template>
 
 <script lang="ts" setup>
-import { t } from "@/locale";
 import DemoItem from "../components/item.uvue";
 import { ref } from "vue";
-import { isDark, parseClass } from "@/cool";
+import { isDark, parseClass, t } from "@/.cool";
 
 // list:李白《将进酒》
 const list = ref<UTSJSONObject[]>([

+ 12 - 38
pages/demo/data/filter-bar.uvue

@@ -10,7 +10,7 @@
 						:value="1"
 						:options="coreOptions"
 						:pt="{
-							className: 'w-[220rpx] !flex-none'
+							className: 'w-[110px] !flex-none'
 						}"
 						@change="onOptionsChange"
 					></cl-filter-item>
@@ -43,13 +43,13 @@
 			</demo-item>
 
 			<demo-item>
-				<cl-text pre-wrap :pt="{ className: 'text-sm p-2' }">{{
+				<cl-text pre-wrap :pt="{ className: 'p-2' }">{{
 					JSON.stringify(filterForm, null, 4)
 				}}</cl-text>
 			</demo-item>
 
 			<demo-item>
-				<cl-text pre-wrap :pt="{ className: 'text-sm p-2' }">{{
+				<cl-text pre-wrap :pt="{ className: 'p-2' }">{{
 					JSON.stringify(searchForm, null, 4)
 				}}</cl-text>
 			</demo-item>
@@ -82,10 +82,7 @@
 													searchForm.dis.includes(item.value),
 													`${isDark ? '!bg-surface-700' : '!bg-white'} !border-primary-500`
 												]
-											]),
-											label: {
-												className: 'text-sm'
-											}
+											])
 										}"
 									></cl-checkbox>
 								</cl-col>
@@ -145,10 +142,7 @@
 													searchForm.brand.includes(item.value),
 													`${isDark ? '!bg-surface-700' : '!bg-white'} !border-primary-500`
 												]
-											]),
-											label: {
-												className: 'text-sm'
-											}
+											])
 										}"
 									></cl-checkbox>
 								</cl-col>
@@ -175,10 +169,7 @@
 													searchForm.memory == item.value,
 													`${isDark ? '!bg-surface-700' : '!bg-white'} !border-primary-500`
 												]
-											]),
-											label: {
-												className: 'text-sm'
-											}
+											])
 										}"
 									></cl-radio>
 								</cl-col>
@@ -205,10 +196,7 @@
 													searchForm.color == item.value,
 													`${isDark ? '!bg-surface-700' : '!bg-white'} !border-primary-500`
 												]
-											]),
-											label: {
-												className: 'text-sm'
-											}
+											])
 										}"
 									></cl-radio>
 								</cl-col>
@@ -218,23 +206,10 @@
 				</scroll-view>
 
 				<view class="flex flex-row p-3">
-					<cl-button
-						type="info"
-						text
-						border
-						:pt="{
-							className: 'flex-1'
-						}"
-						@tap="closeFilter"
-						>{{ t("取消") }}</cl-button
-					>
-					<cl-button
-						:pt="{
-							className: 'flex-1'
-						}"
-						@tap="submit"
-						>{{ t("确定") }}</cl-button
-					>
+					<cl-button size="large" type="info" text border fluid @tap="closeFilter">{{
+						t("取消")
+					}}</cl-button>
+					<cl-button size="large" fluid @tap="submit">{{ t("确定") }}</cl-button>
 				</view>
 
 				<cl-safe-area type="bottom"></cl-safe-area>
@@ -244,11 +219,10 @@
 </template>
 
 <script lang="ts" setup>
-import { t } from "@/locale";
 import DemoItem from "../components/item.uvue";
 import { reactive, ref } from "vue";
 import { useUi, type ClSelectOption } from "@/uni_modules/cool-ui";
-import { isDark, parseClass } from "@/cool";
+import { isDark, parseClass, t } from "@/.cool";
 
 const ui = useUi();
 

+ 1 - 2
pages/demo/data/list-view-refresh.uvue

@@ -33,9 +33,8 @@
 <script lang="ts" setup>
 import { useUi } from "@/uni_modules/cool-ui";
 import { ref } from "vue";
-import { usePager } from "@/cool";
+import { usePager, t } from "@/.cool";
 import GoodsItem from "../components/goods-item.uvue";
-import { t } from "@/locale";
 
 const ui = useUi();
 

+ 1 - 1
pages/demo/data/list-view.uvue

@@ -30,7 +30,7 @@
 </template>
 
 <script lang="ts" setup>
-import { request } from "@/cool";
+import { request } from "@/.cool";
 import DemoItem from "../components/item.uvue";
 import { useListView, useUi, type ClListViewItem } from "@/uni_modules/cool-ui";
 import { ref } from "vue";

+ 7 - 4
pages/demo/data/list.uvue

@@ -40,6 +40,9 @@
 						image: {
 							width: 48,
 							height: 48
+						},
+						label: {
+							size: 16
 						}
 					}"
 					:label="t('神仙都没用')"
@@ -66,7 +69,7 @@
 						<view
 							class="bg-green-500 w-20 h-full flex flex-row items-center justify-center"
 						>
-							<text class="text-white text-md">{{ t("编辑") }}</text>
+							<cl-text color="white">{{ t("编辑") }}</cl-text>
 						</view>
 					</template>
 				</cl-list-item>
@@ -77,7 +80,7 @@
 							class="bg-red-500 w-20 h-full flex flex-row items-center justify-center"
 							@tap="onDelete"
 						>
-							<text class="text-white text-md">{{ t("删除") }}</text>
+							<cl-text color="white">{{ t("删除") }}</cl-text>
 						</view>
 					</template>
 				</cl-list-item>
@@ -90,7 +93,7 @@
 			</demo-item>
 
 			<demo-item :label="t('列表')">
-				<cl-list border>
+				<cl-list border title="我的列表">
 					<cl-list-item :label="t('我的订单')" hoverable> </cl-list-item>
 					<cl-list-item :label="t('我的收藏')" hoverable> </cl-list-item>
 					<cl-list-item :label="t('我的钱包')" hoverable> </cl-list-item>
@@ -101,7 +104,7 @@
 </template>
 
 <script lang="ts" setup>
-import { t } from "@/locale";
+import { t } from "@/.cool";
 import DemoItem from "../components/item.uvue";
 import { useUi } from "@/uni_modules/cool-ui";
 import { ref } from "vue";

+ 6 - 6
pages/demo/data/marquee.uvue

@@ -5,10 +5,10 @@
 				<cl-marquee
 					:list="list"
 					direction="horizontal"
-					:item-height="200"
-					:item-width="360"
+					:item-height="100"
+					:item-width="180"
 					:pt="{
-						className: 'h-[200rpx] rounded-xl'
+						className: 'h-[100px] rounded-xl'
 					}"
 				></cl-marquee>
 			</demo-item>
@@ -18,10 +18,10 @@
 					ref="marqueeRef"
 					:list="list"
 					direction="vertical"
-					:item-height="260"
+					:item-height="130"
 					:duration="isSpeed ? 2000 : 5000"
 					:pt="{
-						className: 'h-[500rpx] rounded-xl'
+						className: 'h-[250px] rounded-xl'
 					}"
 				></cl-marquee>
 
@@ -46,7 +46,7 @@
 
 <script lang="ts" setup>
 import DemoItem from "../components/item.uvue";
-import { t } from "@/locale";
+import { t } from "@/.cool";
 import { ref } from "vue";
 
 const marqueeRef = ref<ClMarqueeComponentPublicInstance | null>(null);

+ 4 - 14
pages/demo/data/pagination.uvue

@@ -15,7 +15,7 @@
 					:total="100"
 					:pt="{
 						item: {
-							className: '!rounded-none !mx-[2rpx]'
+							className: '!rounded-none !mx-[1px]'
 						}
 					}"
 				>
@@ -36,21 +36,11 @@
 					}"
 				>
 					<template #prev>
-						<cl-text
-							:pt="{
-								className: 'text-sm'
-							}"
-							>{{ t("上一页") }}</cl-text
-						>
+						<cl-text :size="12">{{ t("上一页") }}</cl-text>
 					</template>
 
 					<template #next>
-						<cl-text
-							:pt="{
-								className: 'text-sm'
-							}"
-							>{{ t("下一页") }}</cl-text
-						>
+						<cl-text :size="12">{{ t("下一页") }}</cl-text>
 					</template>
 				</cl-pagination>
 			</demo-item>
@@ -60,7 +50,7 @@
 
 <script lang="ts" setup>
 import { ref } from "vue";
-import { t } from "@/locale";
+import { t } from "@/.cool";
 import DemoItem from "../components/item.uvue";
 
 const page1 = ref(1);

+ 4 - 4
pages/demo/data/read-more.uvue

@@ -33,20 +33,20 @@
 						class="flex flex-row items-center justify-center h-14"
 						v-if="content == ''"
 					>
-						<cl-loading :size="32"></cl-loading>
+						<cl-loading></cl-loading>
 					</view>
 				</cl-read-more>
 			</demo-item>
 
 			<demo-item :label="t('自定义高度')">
-				<cl-read-more :height="300">
+				<cl-read-more :height="150">
 					<cl-text>
 						云想衣裳花想容,春风拂槛露华浓。若非群玉山头见,会向瑶台月下逢。
 						一枝红艳露凝香,云雨巫山枉断肠。借问汉宫谁得似?可怜飞燕倚新妆。
 					</cl-text>
 
 					<cl-image
-						:height="300"
+						:height="150"
 						width="100%"
 						:pt="{
 							className: 'my-3'
@@ -64,7 +64,7 @@
 </template>
 
 <script lang="ts" setup>
-import { t } from "@/locale";
+import { t } from "@/.cool";
 import DemoItem from "../components/item.uvue";
 import { ref } from "vue";
 import { useUi } from "@/uni_modules/cool-ui";

+ 18 - 18
pages/demo/data/timeline.uvue

@@ -5,56 +5,56 @@
 				<cl-timeline>
 					<cl-timeline-item
 						icon="account-box-line"
-						:title="t('开通账号')"
+						:title="t('注册账户')"
 						date="2025-01-01"
-						:content="t('赠送500元')"
+						:content="t('新用户立享500元体验金')"
 					>
 					</cl-timeline-item>
 
 					<cl-timeline-item
 						icon="id-card-line"
-						:title="t('完成实名认证')"
+						:title="t('实名认证通过')"
 						date="2025-01-02"
-						:content="t('通过身份认证')"
+						:content="t('身份认证成功,开启安全保障')"
 					>
 					</cl-timeline-item>
 
 					<cl-timeline-item
 						icon="bank-card-line"
-						:title="t('绑定银行卡')"
+						:title="t('银行卡绑定完成')"
 						date="2025-01-03"
-						:content="t('绑定招商银行储蓄卡')"
+						:content="t('成功绑定招商银行储蓄卡,畅享无忧交易')"
 					>
 					</cl-timeline-item>
 
 					<cl-timeline-item
 						icon="money-cny-box-line"
-						:title="t('首次充值')"
+						:title="t('首次资金充值')"
 						date="2025-01-04"
-						:content="t('充值1000元')"
+						:content="t('充值1000元资金到账,准备投资')"
 					>
 					</cl-timeline-item>
 
 					<cl-timeline-item
 						icon="checkbox-line"
-						:title="t('完成首笔交易')"
+						:title="t('完成首笔投资')"
 						date="2025-01-05"
 						:hide-line="true"
 					>
 						<view class="flex flex-row mb-3 mt-1">
-							<cl-image
-								src="https://unix.cool-js.com/images/demo/bg1.png"
-							></cl-image>
+							<cl-image src="https://unix.cool-js.com/images/demo/bg1.png"></cl-image>
 
 							<view class="flex-1 px-3">
-								<cl-text>{{ t("优选灵活配置混合A") }}</cl-text>
+								<cl-text>{{ t("优选灵活配置混合A基金") }}</cl-text>
 
-								<cl-text class="mr-5 mt-1 text-sm">{{ t("1000元起") }}</cl-text>
+								<cl-text :size="12" color="info" class="mr-5 mt-1">{{
+									t("起投金额1000元")
+								}}</cl-text>
 
 								<view class="flex flex-row mt-2 items-center">
-									<cl-button size="small" type="light">{{
-										t("立即购")
-									}}</cl-button>
+									<cl-button size="small" type="light">
+										{{ t("立即购") }}
+									</cl-button>
 								</view>
 							</view>
 						</view>
@@ -66,6 +66,6 @@
 </template>
 
 <script lang="ts" setup>
-import { t } from "@/locale";
+import { t } from "@/.cool";
 import DemoItem from "../components/item.uvue";
 </script>

+ 3 - 3
pages/demo/data/tree.uvue

@@ -43,7 +43,7 @@
 					<cl-text
 						v-if="halfCheckedKeys.length > 0"
 						:pt="{
-							className: 'text-sm p-2'
+							className: 'p-2'
 						}"
 						>{{ halfCheckedKeys.join("、") }}</cl-text
 					>
@@ -65,7 +65,7 @@
 					<cl-text
 						v-if="expandedKeys.length > 0"
 						:pt="{
-							className: 'text-sm p-2'
+							className: 'p-2'
 						}"
 						>{{ expandedKeys.join("、") }}</cl-text
 					>
@@ -85,7 +85,7 @@
 
 <script lang="ts" setup>
 import DemoItem from "../components/item.uvue";
-import { t } from "@/locale";
+import { t } from "@/.cool";
 import { ref } from "vue";
 import { useTree, useUi, type ClTreeItem } from "@/uni_modules/cool-ui";
 

+ 4 - 4
pages/demo/data/waterfall.uvue

@@ -1,9 +1,9 @@
 <template>
 	<cl-page back-top>
 		<view class="py-2">
-			<cl-waterfall ref="waterfallRef" :column="2" :gutter="16">
+			<cl-waterfall ref="waterfallRef" :column="2">
 				<template #item="{ item, index }">
-					<view class="bg-white mb-3 rounded-xl dark:!bg-gray-800 relative">
+					<view class="bg-white mb-2 rounded-xl dark:!bg-gray-800 relative">
 						<image
 							:src="item['image']"
 							mode="widthFix"
@@ -27,7 +27,7 @@
 
 							<cl-row class="mt-2" :pt="{ className: 'justify-end items-center' }">
 								<cl-icon name="heart-line"></cl-icon>
-								<cl-text :pt="{ className: 'text-sm ml-1' }">{{
+								<cl-text :size="12" :pt="{ className: 'ml-1' }">{{
 									item["likeCount"]
 								}}</cl-text>
 							</cl-row>
@@ -42,7 +42,7 @@
 </template>
 
 <script lang="ts" setup>
-import { random } from "@/cool";
+import { random } from "@/.cool";
 import { onMounted, ref } from "vue";
 
 const waterfallRef = ref<ClWaterfallComponentPublicInstance | null>(null);

+ 5 - 5
pages/demo/feedback/action-sheet.uvue

@@ -35,10 +35,10 @@
 			ref="actionSheetRef6"
 			:pt="{
 				list: {
-					className: 'flex-row mx-[-10rpx]'
+					className: 'flex-row mx-[-5px]'
 				},
 				item: {
-					className: 'flex-1 mx-[10rpx] !rounded-xl'
+					className: 'flex-1 mx-[5px] !rounded-xl'
 				}
 			}"
 		>
@@ -56,8 +56,8 @@
 
 			<template #item="{ item }">
 				<view class="flex flex-col justify-center items-center">
-					<cl-icon :name="item.icon" :size="46"></cl-icon>
-					<cl-text :pt="{ className: 'text-sm mt-1' }">{{ item.label }}</cl-text>
+					<cl-icon :name="item.icon" :size="23"></cl-icon>
+					<cl-text :pt="{ className: 'mt-1' }">{{ item.label }}</cl-text>
 				</view>
 			</template>
 		</cl-action-sheet>
@@ -65,7 +65,7 @@
 </template>
 
 <script lang="ts" setup>
-import { t } from "@/locale";
+import { t } from "@/.cool";
 import DemoItem from "../components/item.uvue";
 import { ref } from "vue";
 import { useUi, type ClActionSheetOptions } from "@/uni_modules/cool-ui";

+ 12 - 12
pages/demo/feedback/confirm.uvue

@@ -25,7 +25,7 @@
 </template>
 
 <script lang="ts" setup>
-import { t } from "@/locale";
+import { t } from "@/.cool";
 import DemoItem from "../components/item.uvue";
 import { useUi } from "@/uni_modules/cool-ui";
 
@@ -33,8 +33,8 @@ const ui = useUi();
 
 function openPopup() {
 	ui.showConfirm({
-		title: t("提示"),
-		message: t("确定要删除吗?"),
+		title: t("温馨提示"),
+		message: t("您即将进行一个重要操作,是否确认继续?"),
 		callback(action) {
 			if (action == "confirm") {
 				ui.showToast({
@@ -51,25 +51,25 @@ function openPopup() {
 
 function openPopup2() {
 	ui.showConfirm({
-		title: t("提示"),
-		message: t("确定要删除吗?"),
+		title: t("温馨提示"),
+		message: t("您即将进行一个重要操作,是否确认继续?"),
 		showCancel: false
 	});
 }
 
 function openPopup3() {
 	ui.showConfirm({
-		title: t("提示"),
-		message: t("确定要删除吗?"),
-		cancelText: t("关闭"),
+		title: t("操作确认"),
+		message: t("您确认要执行删除操作吗?删除后将无法恢复。"),
+		cancelText: t("取消"),
 		confirmText: t("下一步")
 	});
 }
 
 function openPopup4() {
 	ui.showConfirm({
-		title: t("提示"),
-		message: t("确定要删除吗?"),
+		title: t("温馨提示"),
+		message: t("您即将进行一个重要操作,是否确认继续?"),
 		beforeClose: (action, { close, showLoading, hideLoading }) => {
 			if (action == "confirm") {
 				showLoading();
@@ -86,8 +86,8 @@ function openPopup4() {
 
 function openPopup5() {
 	ui.showConfirm({
-		title: t("提示"),
-		message: t("确定要删除吗?3秒后自动关闭"),
+		title: t("温馨提示"),
+		message: t("确定要执行删除操作吗?3秒后自动关闭"),
 		duration: 3000
 	});
 }

Некоторые файлы не были показаны из-за большого количества измененных файлов