diff --git a/.env b/.env
index 6346846..afb72e4 100644
--- a/.env
+++ b/.env
@@ -20,9 +20,9 @@ VITE_APP_DOCALERT_ENABLE=true
VITE_APP_BAIDU_CODE = a1ff8825baa73c3a78eb96aa40325abc
# 默认账户密码
-VITE_APP_DEFAULT_LOGIN_TENANT = 芋道源码
-VITE_APP_DEFAULT_LOGIN_USERNAME = admin
-VITE_APP_DEFAULT_LOGIN_PASSWORD = admin123
+# VITE_APP_DEFAULT_LOGIN_TENANT = keyLove
+# VITE_APP_DEFAULT_LOGIN_USERNAME = admin
+# VITE_APP_DEFAULT_LOGIN_PASSWORD = admin123
# API 加解密
VITE_APP_API_ENCRYPT_ENABLE = true
diff --git a/.env.local b/.env.local
index 3dbd234..bb43774 100644
--- a/.env.local
+++ b/.env.local
@@ -5,6 +5,7 @@ VITE_DEV=true
# 请求路径
VITE_BASE_URL='http://192.168.2.22:48081'
+# VITE_BASE_URL='https://admin-xtm9a.loveamorkey.com'
# 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持 S3 服务
VITE_UPLOAD_TYPE=server
@@ -28,7 +29,7 @@ VITE_BASE_PATH=/
VITE_MALL_H5_DOMAIN='http://localhost:3000'
# 验证码的开关
-VITE_APP_CAPTCHA_ENABLE=false
+VITE_APP_CAPTCHA_ENABLE=true
# GoView域名
VITE_GOVIEW_URL='http://127.0.0.1:3000'
\ No newline at end of file
diff --git a/.env.prod b/.env.prod
index ca7cb8e..0f13d6c 100644
--- a/.env.prod
+++ b/.env.prod
@@ -4,8 +4,8 @@ NODE_ENV=production
VITE_DEV=false
# 请求路径
-VITE_BASE_URL='http://localhost:48080'
-
+# VITE_BASE_URL='http://localhost:48080'
+VITE_BASE_URL='https://admin-xtm9a.loveamorkey.com'
# 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持S3服务
VITE_UPLOAD_TYPE=server
diff --git a/src/api/keyboard/aicompanion/index.ts b/src/api/keyboard/aicompanion/index.ts
index b776f92..2d9166b 100644
--- a/src/api/keyboard/aicompanion/index.ts
+++ b/src/api/keyboard/aicompanion/index.ts
@@ -1,16 +1,25 @@
import request from '@/config/axios'
import type { Dayjs } from 'dayjs';
+/** AI陪聊角色国际化表,用于存储不同语言下的角色名称、一句话描述和详细介绍信息 */
+export interface AiCompanionI18n {
+ id: number; // 主键ID
+ companionId?: number; // 陪聊角色主表ID,对应 keyboard_ai_companion.id
+ locale?: string; // 语言标识,如 zh-CN、en-US、ja-JP
+ name?: string; // 角色名称(多语言)
+ shortDesc: string; // 一句话人设描述(多语言)
+ introText: string; // 角色详细介绍文案(多语言)
+ createdAt?: string | Dayjs; // 创建时间
+ updatedAt?: string | Dayjs; // 更新时间
+}
+
/** AI陪聊角色表,用于定义恋爱/陪伴型虚拟角色的基础信息与人设信息 */
export interface AiCompanion {
id: number; // 陪聊角色唯一ID
- name?: string; // 角色名称(展示用,如:Katie Leona)
avatarUrl: string; // 角色头像URL,用于列表页和聊天页
coverImageUrl: string; // 角色封面图URL,用于角色详情页
gender: string; // 角色性别(male / female / other)
ageRange: string; // 角色年龄段描述(如:20s、25-30)
- shortDesc: string; // 一句话人设描述,用于卡片或列表展示
- introText: string; // 角色详细介绍文案,用于角色详情页
personalityTags: object; // 角色性格标签数组(如:温柔、黏人、治愈)
speakingStyle: string; // 角色说话风格(如:撒娇型、理性型、活泼型)
systemPrompt?: string; // AI系统Prompt,定义角色核心人设,仅供模型使用
@@ -60,5 +69,36 @@ export const AiCompanionApi = {
// 导出AI陪聊角色表,用于定义恋爱/陪伴型虚拟角色的基础信息与人设 Excel
exportAiCompanion: async (params) => {
return await request.download({ url: `/keyboard/ai-companion/export-excel`, params })
+ },
+
+// ==================== 子表(AI陪聊角色国际化表,用于存储不同语言下的角色名称、一句话描述和详细介绍) ====================
+
+ // 获得AI陪聊角色国际化表,用于存储不同语言下的角色名称、一句话描述和详细介绍分页
+ getAiCompanionI18nPage: async (params) => {
+ return await request.get({ url: `/keyboard/ai-companion/ai-companion-i18n/page`, params })
+ },
+ // 新增AI陪聊角色国际化表,用于存储不同语言下的角色名称、一句话描述和详细介绍
+ createAiCompanionI18n: async (data: AiCompanionI18n) => {
+ return await request.post({ url: `/keyboard/ai-companion/ai-companion-i18n/create`, data })
+ },
+
+ // 修改AI陪聊角色国际化表,用于存储不同语言下的角色名称、一句话描述和详细介绍
+ updateAiCompanionI18n: async (data: AiCompanionI18n) => {
+ return await request.put({ url: `/keyboard/ai-companion/ai-companion-i18n/update`, data })
+ },
+
+ // 删除AI陪聊角色国际化表,用于存储不同语言下的角色名称、一句话描述和详细介绍
+ deleteAiCompanionI18n: async (id: number) => {
+ return await request.delete({ url: `/keyboard/ai-companion/ai-companion-i18n/delete?id=` + id })
+ },
+
+ /** 批量删除AI陪聊角色国际化表,用于存储不同语言下的角色名称、一句话描述和详细介绍 */
+ deleteAiCompanionI18nList: async (ids: number[]) => {
+ return await request.delete({ url: `/keyboard/ai-companion/ai-companion-i18n/delete-list?ids=${ids.join(',')}` })
+ },
+
+ // 获得AI陪聊角色国际化表,用于存储不同语言下的角色名称、一句话描述和详细介绍
+ getAiCompanionI18n: async (id: number) => {
+ return await request.get({ url: `/keyboard/ai-companion/ai-companion-i18n/get?id=` + id })
}
}
\ No newline at end of file
diff --git a/src/api/keyboard/appversions/index.ts b/src/api/keyboard/appversions/index.ts
new file mode 100644
index 0000000..6fa7e2f
--- /dev/null
+++ b/src/api/keyboard/appversions/index.ts
@@ -0,0 +1,61 @@
+import request from '@/config/axios'
+import type { Dayjs } from 'dayjs';
+
+/** App 版本发布与更新检查表:区分 Android/iOS、渠道,支持最低支持版本与强更策略。信息 */
+export interface AppVersions {
+ id: number; // 主键,自增版本记录ID。
+ appId?: string; // 应用标识(支持多App/多包名场景);单App可固定为 main。
+ platform?: string; // 平台:android 或 ios(用 CHECK 约束限制取值)。
+ channel?: string; // 渠道标识:如 official / huawei / xiaomi / testflight 等,用于区分不同分发包。
+ versionName?: string; // 展示用版本号(语义版本字符串),如 1.2.3。
+ versionCode?: number; // 比较用版本号(整数递增):Android 对应 versionCode;iOS 建议维护同样的递增值以便比较。
+ buildNumber: string; // iOS 可选构建号(例如 CFBundleVersion),通常为字符串;用于追溯构建或与CI编号对齐。
+ minSupportedCode?: number; // 最低支持版本号(整数):客户端 version_code 低于该值必须更新/可拒绝继续使用。
+ isForceUpdate?: boolean; // 是否强制更新:当客户端未达到最新版本且此字段为 true,可要求强更(即使 >= min_supported_code)。
+ isActive?: boolean; // 是否生效:true 表示该版本记录可用于对外更新检查;false 用于下架/撤回。
+ releaseNotes: string; // 更新说明(展示给用户的版本更新内容)。
+ downloadUrl: string; // 下载链接:Android 可为 apk 直链/市场 scheme;iOS 通常为 App Store 链接或统一跳转页。
+ storeUrl: string; // 应用市场/商店页面链接(可选,若 download_url 已覆盖可不填)。
+ metadata?: object; // 扩展元数据(JSON):如包大小、md5、签名信息、最低系统版本等。
+ releasedAt?: string | Dayjs; // 发布时间(对外宣布/上线时间),用于展示与排序。
+ createdAt?: string | Dayjs; // 记录创建时间。
+ updatedAt?: string | Dayjs; // 记录更新时间(建议配合触发器自动维护)。
+ }
+
+// App 版本发布与更新检查表:区分 Android/iOS、渠道,支持最低支持版本与强更策略。 API
+export const AppVersionsApi = {
+ // 查询App 版本发布与更新检查表:区分 Android/iOS、渠道,支持最低支持版本与强更策略。分页
+ getAppVersionsPage: async (params: any) => {
+ return await request.get({ url: `/keyboard/app-versions/page`, params })
+ },
+
+ // 查询App 版本发布与更新检查表:区分 Android/iOS、渠道,支持最低支持版本与强更策略。详情
+ getAppVersions: async (id: number) => {
+ return await request.get({ url: `/keyboard/app-versions/get?id=` + id })
+ },
+
+ // 新增App 版本发布与更新检查表:区分 Android/iOS、渠道,支持最低支持版本与强更策略。
+ createAppVersions: async (data: AppVersions) => {
+ return await request.post({ url: `/keyboard/app-versions/create`, data })
+ },
+
+ // 修改App 版本发布与更新检查表:区分 Android/iOS、渠道,支持最低支持版本与强更策略。
+ updateAppVersions: async (data: AppVersions) => {
+ return await request.put({ url: `/keyboard/app-versions/update`, data })
+ },
+
+ // 删除App 版本发布与更新检查表:区分 Android/iOS、渠道,支持最低支持版本与强更策略。
+ deleteAppVersions: async (id: number) => {
+ return await request.delete({ url: `/keyboard/app-versions/delete?id=` + id })
+ },
+
+ /** 批量删除App 版本发布与更新检查表:区分 Android/iOS、渠道,支持最低支持版本与强更策略。 */
+ deleteAppVersionsList: async (ids: number[]) => {
+ return await request.delete({ url: `/keyboard/app-versions/delete-list?ids=${ids.join(',')}` })
+ },
+
+ // 导出App 版本发布与更新检查表:区分 Android/iOS、渠道,支持最低支持版本与强更策略。 Excel
+ exportAppVersions: async (params) => {
+ return await request.download({ url: `/keyboard/app-versions/export-excel`, params })
+ }
+}
\ No newline at end of file
diff --git a/src/api/keyboard/character/index.ts b/src/api/keyboard/character/index.ts
index f2670c6..928ae88 100644
--- a/src/api/keyboard/character/index.ts
+++ b/src/api/keyboard/character/index.ts
@@ -1,6 +1,17 @@
import request from '@/config/axios'
import type { Dayjs } from 'dayjs';
+/** 键盘人设国际化内容信息 */
+export interface CharacterI18n {
+ id: number; // 主键 Id
+ characterId?: number; // 角色主表id
+ locale?: string; // 语言标识,如 zh-CN/en-US/ja-JP
+ characterName: string; // 标题
+ characterBackground: string; // 背景描述
+ createdAt: string | Dayjs; // 创建时间
+ updatedAt: string | Dayjs; // 更新时间
+}
+
/** 键盘人设信息 */
export interface Character {
id: number; // 主键 Id
@@ -51,5 +62,36 @@ export const CharacterApi = {
// 导出键盘人设 Excel
exportCharacter: async (params) => {
return await request.download({ url: `/keyboard/character/export-excel`, params })
+ },
+
+// ==================== 子表(键盘人设国际化内容) ====================
+
+ // 获得键盘人设国际化内容分页
+ getCharacterI18nPage: async (params) => {
+ return await request.get({ url: `/keyboard/character/character-i18n/page`, params })
+ },
+ // 新增键盘人设国际化内容
+ createCharacterI18n: async (data: CharacterI18n) => {
+ return await request.post({ url: `/keyboard/character/character-i18n/create`, data })
+ },
+
+ // 修改键盘人设国际化内容
+ updateCharacterI18n: async (data: CharacterI18n) => {
+ return await request.put({ url: `/keyboard/character/character-i18n/update`, data })
+ },
+
+ // 删除键盘人设国际化内容
+ deleteCharacterI18n: async (id: number) => {
+ return await request.delete({ url: `/keyboard/character/character-i18n/delete?id=` + id })
+ },
+
+ /** 批量删除键盘人设国际化内容 */
+ deleteCharacterI18nList: async (ids: number[]) => {
+ return await request.delete({ url: `/keyboard/character/character-i18n/delete-list?ids=${ids.join(',')}` })
+ },
+
+ // 获得键盘人设国际化内容
+ getCharacterI18n: async (id: number) => {
+ return await request.get({ url: `/keyboard/character/character-i18n/get?id=` + id })
}
}
\ No newline at end of file
diff --git a/src/api/keyboard/characteri18n/index.ts b/src/api/keyboard/characteri18n/index.ts
new file mode 100644
index 0000000..57a14ff
--- /dev/null
+++ b/src/api/keyboard/characteri18n/index.ts
@@ -0,0 +1,53 @@
+import request from '@/config/axios'
+import type { Dayjs } from 'dayjs';
+
+/** 键盘人设国际化内容信息 */
+export interface CharacterI18n {
+ id: number; // 主键 Id
+ characterId?: number; // 角色主表id
+ locale?: string; // 语言标识,如 zh-CN/en-US/ja-JP
+ characterName: string; // 标题
+ characterBackground: string; // 背景描述
+ prompt: string; // 人设提示词
+ emoji: string; // emoji 标签
+ createdAt: string | Dayjs; // 创建时间
+ updatedAt: string | Dayjs; // 更新时间
+ }
+
+// 键盘人设国际化内容 API
+export const CharacterI18nApi = {
+ // 查询键盘人设国际化内容分页
+ getCharacterI18nPage: async (params: any) => {
+ return await request.get({ url: `/keyboard/character-i18n/page`, params })
+ },
+
+ // 查询键盘人设国际化内容详情
+ getCharacterI18n: async (id: number) => {
+ return await request.get({ url: `/keyboard/character-i18n/get?id=` + id })
+ },
+
+ // 新增键盘人设国际化内容
+ createCharacterI18n: async (data: CharacterI18n) => {
+ return await request.post({ url: `/keyboard/character-i18n/create`, data })
+ },
+
+ // 修改键盘人设国际化内容
+ updateCharacterI18n: async (data: CharacterI18n) => {
+ return await request.put({ url: `/keyboard/character-i18n/update`, data })
+ },
+
+ // 删除键盘人设国际化内容
+ deleteCharacterI18n: async (id: number) => {
+ return await request.delete({ url: `/keyboard/character-i18n/delete?id=` + id })
+ },
+
+ /** 批量删除键盘人设国际化内容 */
+ deleteCharacterI18nList: async (ids: number[]) => {
+ return await request.delete({ url: `/keyboard/character-i18n/delete-list?ids=${ids.join(',')}` })
+ },
+
+ // 导出键盘人设国际化内容 Excel
+ exportCharacterI18n: async (params) => {
+ return await request.download({ url: `/keyboard/character-i18n/export-excel`, params })
+ }
+}
\ No newline at end of file
diff --git a/src/api/keyboard/tag/index.ts b/src/api/keyboard/tag/index.ts
index d09bef8..1f9627e 100644
--- a/src/api/keyboard/tag/index.ts
+++ b/src/api/keyboard/tag/index.ts
@@ -1,10 +1,19 @@
import request from '@/config/axios'
import type { Dayjs } from 'dayjs';
+/** 人设标签国际化信息 */
+export interface TagI18n {
+ id: number; // 主键 Id
+ tagId?: number; // 标签主表ID,对应 keyboard_tag.id
+ locale?: string; // 语言标识,如 zh-CN、en-US、ja-JP
+ tagName?: string; // 标签名称(多语言)
+ createdAt: string | Dayjs; // 创建时间
+ updatedAt: string | Dayjs; // 更新时间
+}
+
/** 人设标签信息 */
export interface Tag {
id: number; // 主键 Id
- tagName: string; // 标签名
createdAt: string | Dayjs; // 创建时间
updatedAt: string | Dayjs; // 更新时间
}
@@ -44,5 +53,36 @@ export const TagApi = {
// 导出人设标签 Excel
exportTag: async (params) => {
return await request.download({ url: `/keyboard/tag/export-excel`, params })
+ },
+
+// ==================== 子表(人设标签国际化) ====================
+
+ // 获得人设标签国际化分页
+ getTagI18nPage: async (params) => {
+ return await request.get({ url: `/keyboard/tag/tag-i18n/page`, params })
+ },
+ // 新增人设标签国际化
+ createTagI18n: async (data: TagI18n) => {
+ return await request.post({ url: `/keyboard/tag/tag-i18n/create`, data })
+ },
+
+ // 修改人设标签国际化
+ updateTagI18n: async (data: TagI18n) => {
+ return await request.put({ url: `/keyboard/tag/tag-i18n/update`, data })
+ },
+
+ // 删除人设标签国际化
+ deleteTagI18n: async (id: number) => {
+ return await request.delete({ url: `/keyboard/tag/tag-i18n/delete?id=` + id })
+ },
+
+ /** 批量删除人设标签国际化 */
+ deleteTagI18nList: async (ids: number[]) => {
+ return await request.delete({ url: `/keyboard/tag/tag-i18n/delete-list?ids=${ids.join(',')}` })
+ },
+
+ // 获得人设标签国际化
+ getTagI18n: async (id: number) => {
+ return await request.get({ url: `/keyboard/tag/tag-i18n/get?id=` + id })
}
}
\ No newline at end of file
diff --git a/src/api/keyboard/warningmessage/index.ts b/src/api/keyboard/warningmessage/index.ts
new file mode 100644
index 0000000..286a8d4
--- /dev/null
+++ b/src/api/keyboard/warningmessage/index.ts
@@ -0,0 +1,49 @@
+import request from '@/config/axios'
+import type { Dayjs } from 'dayjs';
+
+/** 用户注销提示信息信息 */
+export interface WarningMessage {
+ id: number; // 主键
+ locale: string; // 地区
+ content: string; // 正文
+ updatedAt: string | Dayjs; // 更新时间
+ created: string | Dayjs; // 创建时间
+ }
+
+// 用户注销提示信息 API
+export const WarningMessageApi = {
+ // 查询用户注销提示信息分页
+ getWarningMessagePage: async (params: any) => {
+ return await request.get({ url: `/keyboard/warning-message/page`, params })
+ },
+
+ // 查询用户注销提示信息详情
+ getWarningMessage: async (id: number) => {
+ return await request.get({ url: `/keyboard/warning-message/get?id=` + id })
+ },
+
+ // 新增用户注销提示信息
+ createWarningMessage: async (data: WarningMessage) => {
+ return await request.post({ url: `/keyboard/warning-message/create`, data })
+ },
+
+ // 修改用户注销提示信息
+ updateWarningMessage: async (data: WarningMessage) => {
+ return await request.put({ url: `/keyboard/warning-message/update`, data })
+ },
+
+ // 删除用户注销提示信息
+ deleteWarningMessage: async (id: number) => {
+ return await request.delete({ url: `/keyboard/warning-message/delete?id=` + id })
+ },
+
+ /** 批量删除用户注销提示信息 */
+ deleteWarningMessageList: async (ids: number[]) => {
+ return await request.delete({ url: `/keyboard/warning-message/delete-list?ids=${ids.join(',')}` })
+ },
+
+ // 导出用户注销提示信息 Excel
+ exportWarningMessage: async (params) => {
+ return await request.download({ url: `/keyboard/warning-message/export-excel`, params })
+ }
+}
\ No newline at end of file
diff --git a/src/components/DiyEditor/components/mobile/UserCard/index.vue b/src/components/DiyEditor/components/mobile/UserCard/index.vue
index 14b447c..203657f 100644
--- a/src/components/DiyEditor/components/mobile/UserCard/index.vue
+++ b/src/components/DiyEditor/components/mobile/UserCard/index.vue
@@ -5,13 +5,11 @@