feat: WWJCloud 企业级全栈框架 v0.3.5 完整更新

🚀 核心更新:
-  完善 NestJS 企业级架构设计
-  优化配置中心和基础设施层
-  增强第三方服务集成能力
-  完善多租户架构支持
- 🎯 对标 Java Spring Boot 和 PHP ThinkPHP

📦 新增文件:
- wwjcloud-nest 完整框架结构
- Docker 容器化配置
- 管理后台界面
- 数据库迁移脚本

🔑 Key: ebb38b43ec39f355f071294fd1cf9c42
This commit is contained in:
wanwu
2025-10-13 01:27:37 +08:00
parent 10bcd7f624
commit 1ed0085d15
1697 changed files with 260750 additions and 127 deletions

View File

@@ -0,0 +1,38 @@
{
"edit": "Edit",
"delete": "Delete",
"createTime": "Create Time",
"sort": "Sort",
"status": "Status",
"operation": "Operation",
"statusNormal": "Normal",
"statusDeactivate": "Deactivate",
"confirm": "Confirm",
"cancel": "Cancel",
"warning": "Warning",
"isShow": "Show or not",
"show": "show",
"hidden": "hidden",
"icon": "Icon",
"layout": {
"layoutSetting": "Layout configuration",
"darkMode": "Dark mode",
"themeColor": "Theme color"
},
"axios": {
"unknownError": "Unknown Error",
"400": "Wrong request ",
"401": "Please login again",
"403": "Access denied",
"404": "Request error, the resource was not found",
"405": "Request method not allowed",
"408": "Request timeout",
"500": "Server side error",
"501": "Network not implemented",
"502": "Network error",
"503": "Service unavailable",
"504": "Network Timeout",
"505": "The http version does not support the request",
"timeout": "Network request timeout!"
}
}

View File

@@ -0,0 +1,33 @@
import { createI18n } from "vue-i18n"
import Language from "./language"
import zhCn from "./zh-cn/common.json";
import en from "./en/common.json"
const addonZhCnCommon = import.meta.globEager('@/addon/**/lang/zh-cn/common.json')
const addonEnCommon = import.meta.globEager('@/addon/**/lang/en/common.json')
for (let key in addonZhCnCommon) {
Object.assign(zhCn, addonZhCnCommon[key].default)
}
for (let key in addonEnCommon) {
Object.assign(en, addonEnCommon[key].default)
}
//创建实例
let i18n = createI18n({
datetimeFormats: {},
numberFormats: {},
globalInjection: true, //是否全局注入
silentTranslationWarn: true,
messages: {
"zh-cn": zhCn,
en
},
silentFallbackWarn: true
});
const language = new Language(i18n);
export { language };
export default i18n;

View File

@@ -0,0 +1,21 @@
import i18n, { language } from "./i18n"
import useAppStore from '@/stores/modules/app'
const t = (message: string) => {
const route = useAppStore().route
const path = route.meta.view || route.path
const file = path == '/' ? 'index' : path.replace(/^(\/admin\/|\/site\/|\/)/, '').replaceAll('/', '.')
const key = `${file}.${message}`
return i18n.global.t(key) != key ? i18n.global.t(key) : i18n.global.t(message)
}
export { language, t }
export default {
install(app: any) {
//注册i18n
app.use(i18n);
}
};

View File

@@ -0,0 +1,66 @@
import { nextTick } from 'vue'
class Language {
private i18n: any;
private loadLocale: Array<string> = []; //已加载的语言
constructor(i18n: any) {
this.i18n = i18n
}
/**
*
* @param locale 设置语言
*/
public setI18nLanguage(locale: string) {
if (this.i18n.mode === 'legacy') {
this.i18n.global.locale = locale
} else {
this.i18n.global.locale = locale
}
let html = document.querySelector('html')
html && html.setAttribute('lang', locale)
}
/**
* 加载语言包
* @param app
* @param path
* @param locale
* @returns
*/
public async loadLocaleMessages(app: string, path: string, locale: string) {
try {
const file = path == '/' ? 'index' : path.replace(/^(\/admin\/|\/site\/|\/)/, '').replaceAll('/', '.')
// 引入语言包文件
const messages = await import(app ? `@/addon/${app}/lang/${locale}/${file}.json` : `@/app/lang/${locale}/${file}.json`)
let data: Record<string, string> = {}
Object.keys(messages.default).forEach(key => {
data[`${file}.${key}`] = messages.default[key]
})
// 查询插件的公共语言包
if (app) {
try {
const messagesCommon = await import( `@/${ app }/lang/${ locale }/common.json`);
Object.keys(messagesCommon.default).forEach(key => {
data[`${file}.${key}`] = messagesCommon.default[key]
})
} catch (e) {
// console.log('未找到插件公共语言包')
}
}
this.i18n.global.mergeLocaleMessage(locale, data)
this.setI18nLanguage(locale)
return nextTick()
} catch (e) {
this.setI18nLanguage(locale)
return nextTick()
}
}
}
export default Language

View File

@@ -0,0 +1,223 @@
{
"edit": "编辑",
"delete": "删除",
"info": "详情",
"createTime": "创建时间",
"sort": "排序",
"status": "状态",
"operation": "操作",
"more": "更多",
"statusNormal": "正常",
"statusDeactivate": "停用",
"startUsing": "启用",
"confirm": "确认",
"save": "保存",
"back": "返回",
"cancel": "取消",
"search": "搜索",
"reset": "重置",
"refresh": "刷新",
"refreshSuccess": "刷新成功",
"select": "选择",
"export": "导出列表",
"exportPlaceholder": "确定要导出数据吗?",
"exportTip": "批量导出数据",
"exportConfirm": "确定并导出",
"warning": "提示",
"isShow": "是否显示",
"show": "显示",
"hidden": "隐藏",
"icon": "图标",
"userName": "用户名",
"headImg": "头像",
"accountNumber": "账号",
"accountSettings": "账号设置",
"realName": "名称",
"realNamePlaceholder": "请输入用户名称",
"password": "密码",
"confirmPassword": "确认密码",
"image": "图片",
"video": "视频",
"rename": "重命名",
"lookOver": "查看",
"selectAll": "全选",
"yes": "是",
"no": "否",
"copy": "复制",
"complete": "完成",
"copySuccess": "复制成功",
"notSupportCopy": "浏览器不支持一键复制,请手动进行复制",
"selectPlaceholder": "全部",
"provincePlaceholder": "请选择省",
"cityPlaceholder": "请选择市",
"districtPlaceholder": "请选择区/县",
"emptyData": "暂无数据",
"emptyQrCode": "暂无二维码",
"fileErr": "无法显示",
"upload": {
"root": "上传",
"selectimage": "选择图片",
"selectvideo": "选择视频",
"selecticon": "选择图标",
"selectnews": "选择图文",
"uploadimage": "上传图片",
"uploadvideo": "上传视频",
"addAttachmentCategory": "添加分组",
"attachmentCategoryPlaceholder": "请输入分组名称",
"attachmentEmpty": "暂无附件,请点击上传按钮上传",
"iconEmpty": "暂无图标",
"deleteCategoryTips": "确定要删除该分组吗?",
"deleteAttachmentTips": "确定要删除所选附件吗?如所选附件已被使用删除将会受到影响,请谨慎操作!",
"move": "移动",
"moveCategory": "移动分组",
"moveTo": "移动至",
"placeholderimageName": "请输入图片名称",
"placeholdervideoName": "请输入视频名称",
"placeholdericonName": "请输入图标名称",
"success": "上传成功",
"triggerUpperLimit": "可选数量已达上限",
"mediaEmpty": "暂无素材,请点击上传按钮上传"
},
"tabs": {
"closeLeft": "关闭左侧",
"closeRight": "关闭右侧",
"closeOther": "关闭其他"
},
"layout": {
"layoutSetting": "主题设置",
"darkMode": "黑暗模式",
"sidebarMode": "主题风格",
"themeColor": "主题颜色",
"detectionLoginOperation": "确定",
"detectionLoginContent": "已检测到有其他账号登录,需要刷新后才能继续操作。",
"detectionLoginTip": "提示",
"layoutStyle": "布局风格",
"tab": "开启标签栏"
},
"axios": {
"unknownError": "未知错误",
"400": "错误的请求",
"401": "请重新登录",
"403": "拒绝访问",
"404": "请求错误",
"405": "请求方法未允许",
"408": "请求超时",
"409": "请求跨域",
"500": "服务器端出错,错误原因:",
"501": "网络未实现",
"502": "网络错误",
"503": "服务不可用",
"504": "网络超时",
"505": "http版本不支持该请求",
"timeout": "网络请求超时!",
"requestError": "请求错误",
"errNetwork": "网络请求错误",
"baseUrlError": " 接口请求错误,请检查VITE_APP_BASE_URL参数配置或者伪静态配置, <a style='text-decoration: underline;' href='https://www.kancloud.cn/niucloud/niucloud-admin-develop/3213750' target='blank'>点击查看相关手册</a>"
},
"linkPlaceholder": "请选择跳转链接",
"selectLinkTips": "链接选择",
"diyLinkName": "链接名称",
"diyLinkNamePlaceholder": "请输入链接名称",
"diyLinkNameNotEmpty": "链接名称不能为空",
"diyLinkUrl": "跳转路径",
"diyLinkUrlPlaceholder": "请输入跳转路径",
"diyLinkUrlNotEmpty": "跳转路径不能为空",
"diyAppletId": "小程序AppID",
"diyAppletIdPlaceholder": "请输入要打开的小程序的appid",
"diyAppletIdNotEmpty": "小程序AppID不能为空",
"diyAppletPage": "小程序路径",
"diyAppletPagePlaceholder": "请输入要打开的小程序路径",
"diyAppletPageNotEmpty": "小程序路径不能为空",
"diyMakePhone": "电话号码",
"diyMakePhonePlaceholder": "请输入电话号码",
"diyMakePhoneNotEmpty": "电话号码不能为空",
"returnToPreviousPage": "返回",
"preview": "预览",
"emptyApp": "暂未安装任何应用",
"newInfo": "最新消息",
"visitWap": "访问店铺",
"mapSetting": "地图设置",
"mapKey": "腾讯地图KEY",
"indexTemplate": "首页模版",
"indexSwitch": "切换首页",
"indexWarning": "你确定要切换首页吗?",
"originalPassword": "原始密码",
"newPassword": "新密码",
"passwordCopy": "确认密码",
"passwordTip": "修改密码时必填.不修改密码时留空",
"originalPasswordPlaceholder": "请输入原始密码",
"passwordPlaceholder": "请输入新密码",
"originalPasswordHint": "原始密码不能为空",
"newPasswordHint": "请输入确认密码",
"doubleCipherHint": "两次新密码不同",
"confirmPasswordError": "两次新密码不同",
"upgrade": {
"upgradeButton": "立即升级",
"title": "升级",
"upgradingTips": "有正在执行的升级任务,",
"clickView": "点击查看",
"dirPermission": "目录读写权限",
"path": "路径",
"demand": "要求",
"readable": "可读",
"write": "可写",
"upgradeSuccess": "升级成功",
"localBuild": "本地编译",
"cloudBuild": "重试",
"rollback": "回滚",
"showDialogCloseTips": "升级任务尚未完成,关闭将取消升级,是否要继续关闭?",
"upgradeCompleteTips": "升级完成后还必须要重新编译admin wap web端以免影响到程序正常运行。",
"upgradeTips": "应用和插件升级时,系统会自动备份当前程序及数据库。升级功能不会造成您当前程序的损坏或者数据的丢失,请放心使用,但是升级过程可能会因为兼容性等各种原因出现意外的升级错误,当出现错误时,系统将会自动回退上一版本!若回退失败,请参考链接<a href='https://www.kancloud.cn/niushop/niushop_v6/3228611' target='_blank' class='text-primary'> https://www.kancloud.cn/niushop/niushop_v6/3228611 </a>手动回退上一版本!",
"knownToKnow": "我已知晓,不需要再次提示",
"cloudBuildErrorTips": "一键云编译队列任务过多,请等待几分钟后重试!",
"isNeedBackup": "是否需要备份",
"isNeedBackupTips": "检测到已存在备份,此次升级是否需要备份,不需要备份在升级出现异常时将会恢复最近的一次备份。",
"isNeedBackupBtn": "查看备份记录",
"option": "选项",
"isNeedCloudbuild": "是否需要云编译",
"cloudbuildTips": "此次升级的同时是否需要进行云编译"
},
"cloudbuild": {
"title": "云编译",
"executingTips": "有正在执行的编译任务,",
"clickView": "点击查看",
"dirPermission": "目录读写权限",
"path": "路径",
"demand": "要求",
"readable": "可读",
"write": "可写",
"cloudbuildSuccess": "编译完成",
"showDialogCloseTips": "编译任务尚未完成,关闭将取消编译,是否要继续关闭?"
},
"formSelectContentTitle": "表单名称",
"formSelectContentTitlePlaceholder": "请输入表单名称",
"formSelectContentTypeName": "表单类型",
"formSelectContentTypeNamePlaceholder": "请选择表单类型",
"formSelectContentTypeAll": "全部",
"formSelectContentTips": "请选择表单",
"appName": "应用名/版本信息",
"appIdentification": "应用标识",
"introduction": "简介",
"type": "类型",
"localAppText": "插件管理",
"upgrade2": "升级",
"installLabel": "已安装",
"uninstalledLabel": "未安装",
"buyLabel": "已购买",
"cloudBuild": "云编译",
"newVersion": "最新版本",
"tipText": "标识指开发应用或插件的文件夹名称",
"gxx": "更新信息",
"return": "返回",
"nextStep": "下一步",
"prev": "上一步",
"viewUpgradeContent": "查看升级内容",
"testDirectoryPermissions": "检测目录权限",
"backupFiles": "备份文件",
"startUpgrade": "开始升级",
"upgradeEnd": "升级完成",
"cloudBuildTips": "是否要进行云编译该操作可能会影响到正在访问的客户是否要继续操作?",
"promoteUrl": "推广链接",
"downLoadQRCode": "下载二维码",
"configureFailed": "配置失败"
}