refactor: 品牌改名为汇账 Ledgerly,包名与工程标识统一为 ledgerly
- Java 包名由 cn.rosercode.finance 改为 cn.rosercode.ledgerly,主类 FinanceApplication 更名为 LedgerlyApplication - Gradle 项目名、spring.application.name 与日志文件名统一为 ledgerly - 前端界面文案、页面标题、登录注册标题、README 与 Knife4j 标题更新为汇账 / Ledgerly - 前端本地存储键前缀由 finance. 改为 ledgerly.,并新增旧键自动迁移避免老用户偏好丢失 - 运行目录系统属性与环境变量改为 ledgerly.home / LEDGERLY_HOME - 部署编排、启动脚本、容器名、SQLite 默认路径与构建产物名同步改为 ledgerly
This commit is contained in:
@@ -28,7 +28,7 @@ const hasPassword = ref(false)
|
||||
// 表单数据
|
||||
const form = ref({
|
||||
type: 'SQLITE' as DatabaseType,
|
||||
sqlitePath: 'data/finance.db',
|
||||
sqlitePath: 'data/ledgerly.db',
|
||||
host: 'localhost',
|
||||
port: 3306,
|
||||
database: '',
|
||||
@@ -45,7 +45,7 @@ async function loadStatus() {
|
||||
if (data?.configured) {
|
||||
form.value.type = data.type
|
||||
if (data.type === 'SQLITE') {
|
||||
form.value.sqlitePath = data.sqlitePath || 'data/finance.db'
|
||||
form.value.sqlitePath = data.sqlitePath || 'data/ledgerly.db'
|
||||
} else {
|
||||
form.value.host = data.host || 'localhost'
|
||||
form.value.port = data.port || 3306
|
||||
|
||||
@@ -14,7 +14,7 @@ import { STORAGE_KEYS } from '../utils/storageKeys'
|
||||
import { usePageSizeOptions } from '../composables/usePageSizeOptions'
|
||||
import { useTablePageSize } from '../composables/useTablePageSize'
|
||||
|
||||
/** 关系类型偏好存储键(界面偏好统一以 finance. 前缀命名) */
|
||||
/** 关系类型偏好存储键(界面偏好统一以 ledgerly. 前缀命名) */
|
||||
const RELATION_TYPE_KEY = STORAGE_KEYS.transactionRelationType
|
||||
|
||||
const props = defineProps<{
|
||||
|
||||
@@ -49,7 +49,7 @@ export default {
|
||||
|
||||
// 登录页
|
||||
login: {
|
||||
title: { zh: '收支管理系统 - 登录', en: 'Finance Manager - Sign In', ja: '収支管理システム - ログイン' },
|
||||
title: { zh: '汇账 - 登录', en: 'Ledgerly - Sign In', ja: 'Ledgerly - ログイン' },
|
||||
username: { zh: '用户名', en: 'Username', ja: 'ユーザー名' },
|
||||
password: { zh: '密码', en: 'Password', ja: 'パスワード' },
|
||||
usernamePlaceholder: { zh: '请输入用户名', en: 'Enter your username', ja: 'ユーザー名を入力してください' },
|
||||
@@ -64,7 +64,7 @@ export default {
|
||||
|
||||
// 注册页
|
||||
register: {
|
||||
title: { zh: '收支管理系统 - 注册', en: 'Finance Manager - Sign Up', ja: '収支管理システム - 新規登録' },
|
||||
title: { zh: '汇账 - 注册', en: 'Ledgerly - Sign Up', ja: 'Ledgerly - 新規登録' },
|
||||
username: { zh: '用户名', en: 'Username', ja: 'ユーザー名' },
|
||||
nickname: { zh: '昵称', en: 'Nickname', ja: 'ニックネーム' },
|
||||
password: { zh: '密码', en: 'Password', ja: 'パスワード' },
|
||||
@@ -85,7 +85,7 @@ export default {
|
||||
|
||||
// 主布局
|
||||
layout: {
|
||||
appTitle: { zh: '收支管理', en: 'Finance Manager', ja: '収支管理' },
|
||||
appTitle: { zh: '汇账', en: 'Ledgerly', ja: 'Ledgerly' },
|
||||
appSubtitle: { zh: '个人财务管理', en: 'Personal Finance', ja: '個人財務管理' },
|
||||
dashboard: { zh: '统计面板', en: 'Dashboard', ja: 'ダッシュボード' },
|
||||
transactions: { zh: '收支记录', en: 'Transactions', ja: '収支記録' },
|
||||
@@ -113,7 +113,7 @@ export default {
|
||||
configFile: { zh: '配置文件', en: 'Config file', ja: '設定ファイル' },
|
||||
type: { zh: '数据库类型', en: 'Database type', ja: 'データベースの種類' },
|
||||
sqlitePath: { zh: '数据库文件', en: 'Database file', ja: 'データベースファイル' },
|
||||
sqlitePathPlaceholder: { zh: '例如 data/finance.db', en: 'e.g. data/finance.db', ja: '例:data/finance.db' },
|
||||
sqlitePathPlaceholder: { zh: '例如 data/ledgerly.db', en: 'e.g. data/ledgerly.db', ja: '例:data/ledgerly.db' },
|
||||
sqliteHint: { zh: 'SQLite 为本地单文件数据库,路径相对于服务运行目录;建议使用 data 目录并做好持久化挂载。', en: 'SQLite is a single local file; the path is relative to the server working directory. Use a data directory with persistent storage.', ja: 'SQLite はローカルの単一ファイルです。パスはサーバーの作業ディレクトリからの相対パスです。data ディレクトリと永続化ストレージの利用を推奨します。' },
|
||||
sqlitePathRequired: { zh: '请填写 SQLite 数据库文件路径', en: 'Please enter the SQLite database file path', ja: 'SQLite データベースファイルのパスを入力してください' },
|
||||
mysqlRequired: { zh: '请填写主机地址、数据库名与用户名', en: 'Please fill in host, database and username', ja: 'ホスト、データベース名、ユーザー名を入力してください' },
|
||||
|
||||
@@ -4,7 +4,7 @@ import { ref } from 'vue'
|
||||
import { getUserInfo } from '../api/user'
|
||||
import { readString, removeKey, writeString } from '../utils/storage'
|
||||
|
||||
/** 登录令牌存储键(认证凭据,不属于界面偏好,不纳入 finance. 前缀) */
|
||||
/** 登录令牌存储键(认证凭据,不属于界面偏好,不纳入 ledgerly. 前缀) */
|
||||
const TOKEN_KEY = 'token'
|
||||
|
||||
export const useUserStore = defineStore('user', () => {
|
||||
|
||||
@@ -1,48 +1,64 @@
|
||||
// 本地存储键常量:界面/用户偏好统一以 finance. 前缀命名,作为唯一来源供路由与各页面复用
|
||||
// 本地存储键常量:界面/用户偏好统一以 ledgerly. 前缀命名,作为唯一来源供路由与各页面复用
|
||||
import { migrateKey } from './storage'
|
||||
|
||||
/** 当前使用的本地存储键 */
|
||||
export const STORAGE_KEYS = {
|
||||
// 语言偏好
|
||||
locale: 'finance.locale',
|
||||
locale: 'ledgerly.locale',
|
||||
// 邮箱账单页标签页
|
||||
emailBillTab: 'finance.emailBill.tab',
|
||||
emailBillTab: 'ledgerly.emailBill.tab',
|
||||
// 系统日志页标签页
|
||||
logsTab: 'finance.logs.tab',
|
||||
logsTab: 'ledgerly.logs.tab',
|
||||
// 账单导入的账单类型
|
||||
billImportBillType: 'finance.billImport.billType',
|
||||
billImportBillType: 'ledgerly.billImport.billType',
|
||||
// 统计面板偏好
|
||||
dashboardPrefs: 'finance.dashboard.prefs',
|
||||
dashboardPrefs: 'ledgerly.dashboard.prefs',
|
||||
// 统计面板 AI 查询历史
|
||||
dashboardAiSearchHistory: 'finance.dashboard.aiSearchHistory',
|
||||
dashboardAiSearchHistory: 'ledgerly.dashboard.aiSearchHistory',
|
||||
// 统计面板 AI 查询浮窗位置尺寸
|
||||
dashboardAiQueryWindow: 'finance.dashboard.aiQueryWindow',
|
||||
dashboardAiQueryWindow: 'ledgerly.dashboard.aiQueryWindow',
|
||||
// 收支记录 AI 建议范围
|
||||
transactionAiScope: 'finance.transaction.aiScope',
|
||||
transactionAiScope: 'ledgerly.transaction.aiScope',
|
||||
// 收支记录 AI 记账方式
|
||||
transactionAiRecordTab: 'finance.transaction.aiRecordTab',
|
||||
transactionAiRecordTab: 'ledgerly.transaction.aiRecordTab',
|
||||
// 收支记录备注关键词历史
|
||||
transactionRemarkHistory: 'finance.transaction.remarkHistory',
|
||||
transactionRemarkHistory: 'ledgerly.transaction.remarkHistory',
|
||||
// 收支记录筛选偏好(收支记录页与统计面板共用)
|
||||
transactionFilterPrefs: 'finance.transaction.filterPrefs',
|
||||
transactionFilterPrefs: 'ledgerly.transaction.filterPrefs',
|
||||
// 各表格每页大小偏好(聚合 JSON,按表格键区分,本机记忆)
|
||||
paginationTablePageSizes: 'finance.pagination.tablePageSizes',
|
||||
paginationTablePageSizes: 'ledgerly.pagination.tablePageSizes',
|
||||
// 账单关系类型
|
||||
transactionRelationType: 'finance.transaction.relationType',
|
||||
transactionRelationType: 'ledgerly.transaction.relationType',
|
||||
// 收支记录 AI 查询历史
|
||||
transactionAiQueryHistory: 'finance.transaction.aiQueryHistory',
|
||||
transactionAiQueryHistory: 'ledgerly.transaction.aiQueryHistory',
|
||||
// 收支记录 AI 查询浮窗位置尺寸
|
||||
transactionAiQueryWindow: 'finance.transaction.aiQueryWindow',
|
||||
transactionAiQueryWindow: 'ledgerly.transaction.aiQueryWindow',
|
||||
// 内容区滚动位置(sessionStorage,按路由拼接后缀)
|
||||
scrollPrefix: 'finance.scroll.',
|
||||
scrollPrefix: 'ledgerly.scroll.',
|
||||
} as const
|
||||
|
||||
/** 历史遗留的存储键(未带 finance. 前缀),首次读取时迁移到新键 */
|
||||
/** 历史遗留的存储键(未带前缀),首次读取时迁移到新键 */
|
||||
export const LEGACY_STORAGE_KEYS = {
|
||||
locale: 'locale',
|
||||
emailBillTab: 'emailBill.tab',
|
||||
logsTab: 'logs.tab',
|
||||
} as const
|
||||
|
||||
/** 当前存储键前缀 */
|
||||
const CURRENT_PREFIX = 'ledgerly.'
|
||||
/** 上一代存储键前缀(品牌改名前的 finance.) */
|
||||
const LEGACY_PREFIX = 'finance.'
|
||||
|
||||
/** 模块加载时迁移上一代 finance.* 偏好键到 ledgerly.*,保证老用户偏好不丢失 */
|
||||
function migrateLegacyPrefixedKeys(): void {
|
||||
Object.values(STORAGE_KEYS).forEach((key) => {
|
||||
if (!key.startsWith(CURRENT_PREFIX)) return
|
||||
migrateKey(LEGACY_PREFIX + key.slice(CURRENT_PREFIX.length), key)
|
||||
})
|
||||
}
|
||||
|
||||
migrateLegacyPrefixedKeys()
|
||||
|
||||
/** 生成指定路由的滚动位置存储键 */
|
||||
export function scrollKey(path: string): string {
|
||||
return `${STORAGE_KEYS.scrollPrefix}${path}`
|
||||
|
||||
Reference in New Issue
Block a user