@duxweb/dvha-pro 1.0.47 → 1.0.49

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/dist/cjs/component.cjs +1 -1
  2. package/dist/cjs/dvha-pro.css +1 -1
  3. package/dist/cjs/index.cjs +1 -1
  4. package/dist/cjs/langs/en-US.json.cjs +1 -1
  5. package/dist/cjs/langs/zh-CN.json.cjs +1 -1
  6. package/dist/cjs/pages/authLayout.cjs +1 -1
  7. package/dist/cjs/pages/layout/page.cjs +1 -1
  8. package/dist/cjs/pages/layout/tab.cjs +1 -1
  9. package/dist/cjs/pages/menu/avatar.cjs +1 -1
  10. package/dist/cjs/pages/menu/button.cjs +1 -1
  11. package/dist/cjs/pages/menu/dark.cjs +1 -0
  12. package/dist/cjs/pages/menu/menuApp.cjs +1 -0
  13. package/dist/cjs/pages/menu/menuMain.cjs +1 -0
  14. package/dist/cjs/pages/menu/mobile.cjs +1 -1
  15. package/dist/cjs/pages/menu/notice.cjs +1 -0
  16. package/dist/cjs/pages/pageException.cjs +1 -0
  17. package/dist/cjs/pages/pageStatus.cjs +1 -1
  18. package/dist/cjs/theme/uno.css.cjs +20 -4
  19. package/dist/esm/component.js +1 -1
  20. package/dist/esm/dvha-pro.css +1 -1
  21. package/dist/esm/index.js +115 -109
  22. package/dist/esm/langs/en-US.json.js +1 -1
  23. package/dist/esm/langs/zh-CN.json.js +2 -2
  24. package/dist/esm/pages/authLayout.js +20 -17
  25. package/dist/esm/pages/layout/page.js +1 -1
  26. package/dist/esm/pages/layout/tab.js +2 -2
  27. package/dist/esm/pages/menu/avatar.js +83 -71
  28. package/dist/esm/pages/menu/button.js +12 -13
  29. package/dist/esm/pages/menu/dark.js +54 -0
  30. package/dist/esm/pages/menu/menuApp.js +207 -0
  31. package/dist/esm/pages/menu/{main.js → menuMain.js} +46 -41
  32. package/dist/esm/pages/menu/mobile.js +16 -13
  33. package/dist/esm/pages/menu/notice.js +205 -0
  34. package/dist/esm/pages/pageException.js +45 -0
  35. package/dist/esm/pages/pageStatus.js +1 -1
  36. package/dist/esm/theme/uno.css.js +20 -4
  37. package/dist/types/index.d.ts +0 -1
  38. package/dist/types/main.d.ts +12 -0
  39. package/dist/types/pages/index.d.ts +1 -0
  40. package/dist/types/pages/menu/avatar.d.ts +18 -0
  41. package/dist/types/pages/menu/button.d.ts +9 -9
  42. package/dist/types/pages/menu/dark.d.ts +2 -0
  43. package/dist/types/pages/menu/index.d.ts +4 -1
  44. package/dist/types/pages/menu/{main.d.ts → menuApp.d.ts} +1 -1
  45. package/dist/types/pages/menu/menuMain.d.ts +22 -0
  46. package/dist/types/pages/menu/notice.d.ts +14 -0
  47. package/dist/types/pages/pageException.d.ts +1 -0
  48. package/package.json +3 -3
  49. package/dist/cjs/pages/menu/main.cjs +0 -1
@@ -1,4 +1,4 @@
1
- const e = { search: "搜索", empty: "暂无数据", menu: "菜单", theme: "主题", dark: "暗色模式", light: "亮色模式", back: "返回", loading: "加载中...", success: "操作成功", error: "操作失败", unknownError: "未知错误", keyword: "请输入关键字", preview: "预览" }, t = { tab: { lock: "锁定", closeOther: "关闭其他", closeLeft: "关闭左侧", closeRight: "关闭右侧" }, dialog: { confirm: { title: "确定", content: "确定要确认吗?" }, cancel: { title: "取消", content: "确定要取消吗?" }, success: { title: "成功", content: "您的操作已成功" }, error: { title: "错误", content: "您的操作已失败" }, prompt: { title: "提示" } }, button: { confirm: "确定", cancel: "取消", submit: "提交", reset: "重置", delete: "删除", search: "查询", advanced: "高级", export: "导出", import: "导入", autoRefresh: "自动刷新", filter: "筛选", refresh: "刷新", select: "选择", create: "新建", download: "下载", rename: "重命名", preview: "预览", sideLeft: "左侧", sideRight: "右侧" }, form: { edit: "编辑", create: "新增", success: "保存成功", error: "保存失败" }, list: { selectAll: "全选", columnSetting: "列设置", selectedItems: "选中项: {num}", total: "共 {total} 条", batchTitle: "批量操作确认", batchContent: "确定要执行此批量操作吗?" }, editor: { placeholder: "请输入内容" }, upload: { fileManager: "文件管理器", uploadFile: "上传文件", cancel: "取消", delete: "删除", error: "上传失败", empty: "暂无文件", desc: "点击或拖拽文件到此区域", dropHere: "拖拽文件到此处", allFormats: "支持任意格式文件", supportFormats: "支持 {formats} 格式文件", maxSize: "最大文件大小: {size}MB", success: "上传成功", failed: "上传失败", fileExtension: "{ext}文件", status: { pending: "待上传", uploading: "上传中", success: "已上传", cancelled: "已取消", error: "失败" }, file: { name: "文件名", size: "大小", type: "类型", status: "状态" }, actions: "操作", selectUpload: { clickOrDrag: "点击选择文件或拖拽到此处", selectedFiles: "已选择 {count} 个文件", multipleSupport: "支持多文件选择", defaultDesc: "支持上传指定类型文件", acceptDesc: "仅支持上传 {accept} 格式文件", maxFiles: "最多 {max} 个文件" } }, uploadManage: { title: "文件管理", all: "全部", image: "图片", media: "媒体", docs: "文档", upload: "上传", empty: "暂无文件", emptyDesc: "暂无更多文件,请先上传文件", back: "返回上一级", parentLevel: "上一级", namePlaceholder: "请输入名称", createError: "创建失败", editError: "修改失败", delError: "删除失败", delTitle: "确认删除", delDesc: "确定要删除选中的文件吗?删除后不可恢复。" }, crop: { title: "裁剪", select: "选择", confirm: "确认" }, stats: { realTimeData: "实时数据" }, data: { selectTitle: "请选择数据" }, menu: { language: "语言", chinese: "中文", english: "English", color: "颜色", primaryColor: "主题色", neutralColor: "中性色", theme: "主题", followSystem: "跟随系统", lightMode: "亮色", darkMode: "暗色", logout: "退出登录" }, iconPicker: { title: "图标选择" }, designEditor: { layout: "布局", all: "全部", grid: { label: "网格", title: "网格设置", columns: "列数", spacing: "间距", columnsPlaceholder: "请输入列数", spacingPlaceholder: "请输入间距" } }, flowEditor: { properties: "属性", nodeInfo: "节点信息", nodeConfig: "节点配置", label: "标签", description: "描述", descriptionPlaceholder: "请输入节点描述", selectNodeOrEdge: "选择节点或连接线进行配置", edgeSettings: "连接线设置", edgeDescription: "配置节点间的连接属性", editJSON: "编辑JSON", saveFlow: "保存流程", clearFlow: "清空流程", flowCleared: "流程已清空", flowSaved: "流程数据已保存", editFlowJSON: "编辑流程 JSON", deleteEdge: "删除连接线", edgeDeleted: "连接线已删除", from: "从", to: "到", connectionType: "连接类型", pass: "通过", reject: "退回", categories: { start: "开始", process: "处理", condition: "条件", end: "结束" }, nodes: { start: { label: "开始", description: "流程的起始节点" }, end: { label: "结束", description: "流程的结束节点" } }, fieldTypes: { text: "文本", number: "数字", boolean: "布尔", date: "日期", array: "数组", object: "对象" }, toolbar: { releaseToAdd: "释放以添加节点" }, setting: { operations: "操作", node: "节点", connection: "连接" }, nodeCard: { delete: "删除", copy: "复制" }, jsonEditor: { copiedToClipboard: "已复制到剪贴板", dataApplied: "数据已应用到流程", jsonFormatError: "JSON 格式错误" }, processNode: { label: "处理", description: "通用处理节点" }, startNode: { label: "开始", description: "流程的起始节点", configTitle: "开始节点配置" } }, formEditor: { config: "组件配置", options: "选项配置", data: "数据", common: { componentConfig: "组件配置", optionConfig: "选项配置", optionData: "选项数据", dataConfig: "数据配置", dataEdit: "数据编辑", label: "标签", disabled: "禁用", clearable: "可清除", readonly: "只读", showCount: "显示字数", placeholder: "占位符", prefix: "前缀", suffix: "后缀", status: "状态", defaultValue: "默认值", minLength: "最小长度", maxLength: "最大长度", minValue: "最小值", maxValue: "最大值", labelField: "标签字段", valueField: "值字段", optionLabel: "选项标签", optionValue: "选项值", dataInterface: "数据接口", multiple: "多选", cascade: "级联", showPath: "显示路径", minCount: "最小数量", maxCount: "最大数量", uploadUrl: "上传地址", showAlpha: "显示透明度", timeFormat: "时间格式", hour12: "12小时制", dateType: "日期类型", inputType: "输入类型", formDirection: "表单方向", leftAlign: "左对齐", topAlign: "上对齐", settingAlign: "设置布局", pageAlign: "页面布局", name: "名称", desc: "描述" }, setting: { title: "表单设置" }, validation: "验证规则", componentConfig: "组件配置", input: { label: "文本", types: { text: "文本", textarea: "多行文本", password: "密码" } }, inputNumber: { label: "数字" }, select: { label: "选择", configDesc: "配置选项数据" }, radio: { label: "单选", configDesc: "配置单选框选项数据" }, checkbox: { label: "复选", configDesc: "配置复选框选项数据" }, switch: { label: "开关" }, date: { label: "日期", placeholder: "选择日期", dateType: "日期类型", date: "日期", daterange: "日期范围", datetime: "日期时间", datetimerange: "日期时间范围", month: "月份", monthrange: "月份范围", year: "年份", yearrange: "年份范围", quarter: "季度", quarterrange: "季度范围", week: "周" }, time: { label: "时间", placeholder: "选择时间", timeFormat: "格式", use12Hours: "12小时制" }, color: { label: "颜色", showAlpha: "显示透明度" }, cascader: { label: "级联", desc: "级联选择器选项数据,格式为 JSON 数组", configDesc: "配置选项", optionDesc: "JSON 数组格式", optionsDescription: "配置级联选择器选项数据", cascade: "级联", showPath: "显示路径" }, cascaderAsync: { label: "级联", dataApi: "数据接口", apiPlaceholder: "输入接口地址", cascade: "级联", showPath: "显示路径" }, dynamicInput: { label: "动态" }, editor: { label: "编辑器", placeholder: "输入内容", uploadUrlDesc: "编辑器图片上传地址" }, aiEditor: { label: "编辑器", uploadUrl: "上传地址", uploadUrlFeedback: "编辑器图片上传地址" }, sider: { name: "滑块", step: "步长", min: "最小", max: "最大" }, dynamicTags: { name: "标签", max: "最大数量" }, mentionAsync: { name: "提及", clearable: "可清除", path: "数据接口", labelField: "标签字段", valueField: "值字段" }, region: { name: "地区", Path: "数据接口", labelField: "标签字段", valueField: "值字段" }, selectAsync: { name: "选择", pagination: "分页", path: "数据接口", labelField: "标签字段", valueField: "值字段", imageField: "图片字段", descField: "描述字段" }, transferAsync: { name: "穿梭框" }, treeSelect: { name: "树选择" }, treeSelectAsync: { name: "异步树选择", path: "数据接口", labelField: "标签字段", keyField: "键字段" }, tree: { disabled: "禁用" }, groups: { form: "表单", select: "选择器", async: "异步" }, imageUpload: { label: "图片上传", maxSize: "最大文件大小(MB)", maxSizePlaceholder: "请输入最大文件大小", maxNumPlaceholder: "请输入最大文件数量", manager: "文件管理器" }, fileUpload: { label: "文件上传", accept: "接受文件类型", acceptPlaceholder: "请输入接受的文件类型,如:image/*,video/*", maxSize: "最大文件大小(MB)", maxSizePlaceholder: "请输入最大文件大小", maxNumPlaceholder: "请输入最大文件数量", manager: "文件管理器" }, main: { label: "主要内容", categories: { form: "表单", select: "选择器", async: "异步" }, actions: { jsonOutput: "Json 输出", save: "保存" } } } }, a = { table: { exportSuccess: "导出数据成功", exportProgress: "导出数据中, 请稍后...", exportFailed: "导出数据失败", exportSuccessContent: "成功导出 {count} 条数据", exportProgressContent: "第 {page} 页数据", exportFailedContent: "导出数据失败:{error}", importSuccess: "导入数据成功", importProgress: "导入数据中, 请稍后...", importFailed: "导入数据失败", importSuccessContent: "成功导入 {count} 条数据", importProgressContent: "{processed} / {total} 条数据", importFailedContent: "导入数据失败:{error}", saveSuccess: "保存成功", copySuccess: "复制成功", copyFailed: "复制失败" }, download: { failed: "下载失败" } }, l = { 400: { title: "400", desc: "请求错误" }, 401: { title: "401", desc: "您没有权限访问该页面" }, 403: { title: "403", desc: "您没有权限访问该页面" }, 404: { title: "404", desc: "页面不存在" }, 500: { title: "500", desc: "服务器错误" }, empty: { title: "暂无数据", desc: "暂无更多数据,请先创建数据" }, loading: { title: "加载中", desc: "数据正在加载中,请稍后..." }, login: { success: "登录成功", error: "登录失败,请检查用户名和密码", placeholder: { username: "请输入用户名", password: "请输入密码" }, buttons: { login: "登录" } } }, o = { "zh-CN": "中文", "en-US": "English", "ja-JP": "日本語", "ko-KR": "한국어", "ru-RU": "Русский" }, r = {
1
+ const e = { search: "搜索", empty: "暂无数据", menu: "菜单", theme: "主题", dark: "暗色模式", light: "亮色模式", back: "返回", loading: "加载中...", success: "操作成功", error: "操作失败", unknownError: "未知错误", keyword: "请输入关键字", preview: "预览" }, t = { tab: { lock: "锁定", closeOther: "关闭其他", closeLeft: "关闭左侧", closeRight: "关闭右侧" }, dialog: { confirm: { title: "确定", content: "确定要确认吗?" }, cancel: { title: "取消", content: "确定要取消吗?" }, success: { title: "成功", content: "您的操作已成功" }, error: { title: "错误", content: "您的操作已失败" }, prompt: { title: "提示" } }, button: { confirm: "确定", cancel: "取消", submit: "提交", reset: "重置", delete: "删除", search: "查询", advanced: "高级", export: "导出", import: "导入", autoRefresh: "自动刷新", filter: "筛选", refresh: "刷新", select: "选择", create: "新建", download: "下载", rename: "重命名", preview: "预览", sideLeft: "左侧", sideRight: "右侧" }, form: { edit: "编辑", create: "新增", success: "保存成功", error: "保存失败" }, list: { selectAll: "全选", columnSetting: "列设置", selectedItems: "选中项: {num}", total: "共 {total} 条", batchTitle: "批量操作确认", batchContent: "确定要执行此批量操作吗?" }, editor: { placeholder: "请输入内容" }, upload: { fileManager: "文件管理器", uploadFile: "上传文件", cancel: "取消", delete: "删除", error: "上传失败", empty: "暂无文件", desc: "点击或拖拽文件到此区域", dropHere: "拖拽文件到此处", allFormats: "支持任意格式文件", supportFormats: "支持 {formats} 格式文件", maxSize: "最大文件大小: {size}MB", success: "上传成功", failed: "上传失败", fileExtension: "{ext}文件", status: { pending: "待上传", uploading: "上传中", success: "已上传", cancelled: "已取消", error: "失败" }, file: { name: "文件名", size: "大小", type: "类型", status: "状态" }, actions: "操作", selectUpload: { clickOrDrag: "点击选择文件或拖拽到此处", selectedFiles: "已选择 {count} 个文件", multipleSupport: "支持多文件选择", defaultDesc: "支持上传指定类型文件", acceptDesc: "仅支持上传 {accept} 格式文件", maxFiles: "最多 {max} 个文件" } }, uploadManage: { title: "文件管理", all: "全部", image: "图片", media: "媒体", docs: "文档", upload: "上传", empty: "暂无文件", emptyDesc: "暂无更多文件,请先上传文件", back: "返回上一级", parentLevel: "上一级", namePlaceholder: "请输入名称", createError: "创建失败", editError: "修改失败", delError: "删除失败", delTitle: "确认删除", delDesc: "确定要删除选中的文件吗?删除后不可恢复。" }, crop: { title: "裁剪", select: "选择", confirm: "确认" }, stats: { realTimeData: "实时数据" }, data: { selectTitle: "请选择数据" }, menu: { language: "语言", chinese: "中文", english: "English", color: "颜色", primaryColor: "主题色", neutralColor: "中性色", theme: "主题", followSystem: "跟随系统", lightMode: "亮色", darkMode: "暗色", logout: "退出登录", notice: "通知", noNotice: "暂无通知", markAllRead: "一键已读", viewAllNotices: "查看全部消息", themeToggle: "主题切换" }, iconPicker: { title: "图标选择" }, designEditor: { layout: "布局", all: "全部", grid: { label: "网格", title: "网格设置", columns: "列数", spacing: "间距", columnsPlaceholder: "请输入列数", spacingPlaceholder: "请输入间距" } }, flowEditor: { properties: "属性", nodeInfo: "节点信息", nodeConfig: "节点配置", label: "标签", description: "描述", descriptionPlaceholder: "请输入节点描述", selectNodeOrEdge: "选择节点或连接线进行配置", edgeSettings: "连接线设置", edgeDescription: "配置节点间的连接属性", editJSON: "编辑JSON", saveFlow: "保存流程", clearFlow: "清空流程", flowCleared: "流程已清空", flowSaved: "流程数据已保存", editFlowJSON: "编辑流程 JSON", deleteEdge: "删除连接线", edgeDeleted: "连接线已删除", from: "从", to: "到", connectionType: "连接类型", pass: "通过", reject: "退回", categories: { start: "开始", process: "处理", condition: "条件", end: "结束" }, nodes: { start: { label: "开始", description: "流程的起始节点" }, end: { label: "结束", description: "流程的结束节点" } }, fieldTypes: { text: "文本", number: "数字", boolean: "布尔", date: "日期", array: "数组", object: "对象" }, toolbar: { releaseToAdd: "释放以添加节点" }, setting: { operations: "操作", node: "节点", connection: "连接" }, nodeCard: { delete: "删除", copy: "复制" }, jsonEditor: { copiedToClipboard: "已复制到剪贴板", dataApplied: "数据已应用到流程", jsonFormatError: "JSON 格式错误" }, processNode: { label: "处理", description: "通用处理节点" }, startNode: { label: "开始", description: "流程的起始节点", configTitle: "开始节点配置" } }, formEditor: { config: "组件配置", options: "选项配置", data: "数据", common: { componentConfig: "组件配置", optionConfig: "选项配置", optionData: "选项数据", dataConfig: "数据配置", dataEdit: "数据编辑", label: "标签", disabled: "禁用", clearable: "可清除", readonly: "只读", showCount: "显示字数", placeholder: "占位符", prefix: "前缀", suffix: "后缀", status: "状态", defaultValue: "默认值", minLength: "最小长度", maxLength: "最大长度", minValue: "最小值", maxValue: "最大值", labelField: "标签字段", valueField: "值字段", optionLabel: "选项标签", optionValue: "选项值", dataInterface: "数据接口", multiple: "多选", cascade: "级联", showPath: "显示路径", minCount: "最小数量", maxCount: "最大数量", uploadUrl: "上传地址", showAlpha: "显示透明度", timeFormat: "时间格式", hour12: "12小时制", dateType: "日期类型", inputType: "输入类型", formDirection: "表单方向", leftAlign: "左对齐", topAlign: "上对齐", settingAlign: "设置布局", pageAlign: "页面布局", name: "名称", desc: "描述" }, setting: { title: "表单设置" }, validation: "验证规则", componentConfig: "组件配置", input: { label: "文本", types: { text: "文本", textarea: "多行文本", password: "密码" } }, inputNumber: { label: "数字" }, select: { label: "选择", configDesc: "配置选项数据" }, radio: { label: "单选", configDesc: "配置单选框选项数据" }, checkbox: { label: "复选", configDesc: "配置复选框选项数据" }, switch: { label: "开关" }, date: { label: "日期", placeholder: "选择日期", dateType: "日期类型", date: "日期", daterange: "日期范围", datetime: "日期时间", datetimerange: "日期时间范围", month: "月份", monthrange: "月份范围", year: "年份", yearrange: "年份范围", quarter: "季度", quarterrange: "季度范围", week: "周" }, time: { label: "时间", placeholder: "选择时间", timeFormat: "格式", use12Hours: "12小时制" }, color: { label: "颜色", showAlpha: "显示透明度" }, cascader: { label: "级联", desc: "级联选择器选项数据,格式为 JSON 数组", configDesc: "配置选项", optionDesc: "JSON 数组格式", optionsDescription: "配置级联选择器选项数据", cascade: "级联", showPath: "显示路径" }, cascaderAsync: { label: "级联", dataApi: "数据接口", apiPlaceholder: "输入接口地址", cascade: "级联", showPath: "显示路径" }, dynamicInput: { label: "动态" }, editor: { label: "编辑器", placeholder: "输入内容", uploadUrlDesc: "编辑器图片上传地址" }, aiEditor: { label: "编辑器", uploadUrl: "上传地址", uploadUrlFeedback: "编辑器图片上传地址" }, sider: { name: "滑块", step: "步长", min: "最小", max: "最大" }, dynamicTags: { name: "标签", max: "最大数量" }, mentionAsync: { name: "提及", clearable: "可清除", path: "数据接口", labelField: "标签字段", valueField: "值字段" }, region: { name: "地区", Path: "数据接口", labelField: "标签字段", valueField: "值字段" }, selectAsync: { name: "选择", pagination: "分页", path: "数据接口", labelField: "标签字段", valueField: "值字段", imageField: "图片字段", descField: "描述字段" }, transferAsync: { name: "穿梭框" }, treeSelect: { name: "树选择" }, treeSelectAsync: { name: "异步树选择", path: "数据接口", labelField: "标签字段", keyField: "键字段" }, tree: { disabled: "禁用" }, groups: { form: "表单", select: "选择器", async: "异步" }, imageUpload: { label: "图片上传", maxSize: "最大文件大小(MB)", maxSizePlaceholder: "请输入最大文件大小", maxNumPlaceholder: "请输入最大文件数量", manager: "文件管理器" }, fileUpload: { label: "文件上传", accept: "接受文件类型", acceptPlaceholder: "请输入接受的文件类型,如:image/*,video/*", maxSize: "最大文件大小(MB)", maxSizePlaceholder: "请输入最大文件大小", maxNumPlaceholder: "请输入最大文件数量", manager: "文件管理器" }, main: { label: "主要内容", categories: { form: "表单", select: "选择器", async: "异步" }, actions: { jsonOutput: "Json 输出", save: "保存" } } } }, a = { table: { exportSuccess: "导出数据成功", exportProgress: "导出数据中, 请稍后...", exportFailed: "导出数据失败", exportSuccessContent: "成功导出 {count} 条数据", exportProgressContent: "第 {page} 页数据", exportFailedContent: "导出数据失败:{error}", importSuccess: "导入数据成功", importProgress: "导入数据中, 请稍后...", importFailed: "导入数据失败", importSuccessContent: "成功导入 {count} 条数据", importProgressContent: "{processed} / {total} 条数据", importFailedContent: "导入数据失败:{error}", saveSuccess: "保存成功", copySuccess: "复制成功", copyFailed: "复制失败" }, download: { failed: "下载失败" } }, l = { 400: { title: "400", desc: "请求错误" }, 401: { title: "401", desc: "您没有权限访问该页面" }, 403: { title: "403", desc: "您没有权限访问该页面" }, 404: { title: "404", desc: "页面不存在" }, 500: { title: "500", desc: "服务器错误" }, empty: { title: "暂无数据", desc: "暂无更多数据,请先创建数据" }, loading: { title: "加载中", desc: "数据正在加载中,请稍后..." }, exception: { title: "系统异常", desc: "系统发生异常,具体原因请查看控制台" }, login: { success: "登录成功", error: "登录失败,请检查用户名和密码", placeholder: { username: "请输入用户名", password: "请输入密码" }, buttons: { login: "登录" } } }, o = { "zh-CN": "中文", "en-US": "English", "ja-JP": "日本語", "ko-KR": "한국어", "ru-RU": "Русский" }, i = {
2
2
  common: e,
3
3
  components: t,
4
4
  hooks: a,
@@ -8,7 +8,7 @@ const e = { search: "搜索", empty: "暂无数据", menu: "菜单", theme: "主
8
8
  export {
9
9
  e as common,
10
10
  t as components,
11
- r as default,
11
+ i as default,
12
12
  a as hooks,
13
13
  o as locale,
14
14
  l as pages
@@ -1,6 +1,6 @@
1
- import { defineComponent as t, createVNode as o } from "vue";
2
- import { OverlaysProvider as m } from "@overlastic/vue";
3
- import "@duxweb/dvha-core";
1
+ import { defineComponent as m, createVNode as o } from "vue";
2
+ import { useManage as i } from "@duxweb/dvha-core";
3
+ import { OverlaysProvider as p } from "@overlastic/vue";
4
4
  import "naive-ui";
5
5
  import "vue-router";
6
6
  import "clsx";
@@ -21,11 +21,12 @@ import "vue-cropper";
21
21
  import "jinrishici";
22
22
  import "lodash-es";
23
23
  import "vue-draggable-plus";
24
- import { DuxGlobalLayout as i } from "./layout/global.js";
25
- import { DuxLayoutPage as p } from "./layout/page.js";
26
- import { DuxMenuCmd as l } from "./menu/cmd.js";
27
- import { DuxMenuMain as e } from "./menu/main.js";
28
- import { DuxMobileMenu as u } from "./menu/mobile.js";
24
+ import { DuxGlobalLayout as l } from "./layout/global.js";
25
+ import { DuxLayoutPage as e } from "./layout/page.js";
26
+ import { DuxMenuCmd as n } from "./menu/cmd.js";
27
+ import { DuxMenuApp as u } from "./menu/menuApp.js";
28
+ import { DuxMenuMain as a } from "./menu/menuMain.js";
29
+ import { DuxMobileMenu as f } from "./menu/mobile.js";
29
30
  import "./page404.js";
30
31
  import "short-unique-id";
31
32
  import "aieditor";
@@ -40,24 +41,26 @@ import "../components/posterEditor/elements/index.js";
40
41
  import "fabric";
41
42
  import "dayjs";
42
43
  import "@tanstack/vue-query";
43
- import { useUI as n } from "../hooks/ui.js";
44
- const $ = /* @__PURE__ */ t({
44
+ import { useUI as s } from "../hooks/ui.js";
45
+ const mo = /* @__PURE__ */ m({
45
46
  name: "DuxAuthLayout",
46
47
  setup() {
47
48
  const {
48
49
  menuCollapsed: r
49
- } = n();
50
- return () => o(i, null, {
51
- default: () => [o(m, null, {
50
+ } = s(), t = i();
51
+ return () => o(l, null, {
52
+ default: () => [o(p, null, {
52
53
  default: () => [o("div", {
53
54
  class: "h-screen w-screen flex relative"
54
- }, [o("div", {
55
- class: ["flex-none transition-all", "hidden lg:block app-menu", r.value ? "w-120px" : "w-200px"]
56
- }, [o(e, null, null)]), o(p, null, null)]), o(l, null, null), o(u, null, null)]
55
+ }, [t.config.theme?.layout === "menu" && o("div", {
56
+ class: ["flex-none transition-all", "hidden lg:block", r.value ? "w-120px" : "w-200px"]
57
+ }, [o(a, null, null)]), (!t.config.theme?.layout || t.config.theme?.layout === "app") && o("div", {
58
+ class: ["flex-none transition-all", "hidden lg:block"]
59
+ }, [o(u, null, null)]), o(e, null, null)]), o(n, null, null), o(f, null, null)]
57
60
  })]
58
61
  });
59
62
  }
60
63
  });
61
64
  export {
62
- $ as DuxAuthLayout
65
+ mo as DuxAuthLayout
63
66
  };
@@ -101,7 +101,7 @@ const It = /* @__PURE__ */ l({
101
101
  }, [m.title]), t("div", null, [t(x, {
102
102
  collapsed: !0
103
103
  }, null)])]), t("div", {
104
- class: "flex-1 py-2"
104
+ class: "flex-1 py-2 min-w-0"
105
105
  }, [t(g, null, null)])]), t("div", {
106
106
  class: "flex-1 min-h-0 mr-2 ml-2 mb-2 lg:ml-0"
107
107
  }, [t(c, null, null)])]);
@@ -61,7 +61,7 @@ const I = /* @__PURE__ */ f({
61
61
  class: "app-page-tabs",
62
62
  barWidth: 100
63
63
  }, r.value), {
64
- default: () => [p?.value?.map((e) => t(N, {
64
+ default: () => p?.value?.map((e) => t(N, {
65
65
  key: e.path,
66
66
  name: e.path || ""
67
67
  }, {
@@ -80,7 +80,7 @@ const I = /* @__PURE__ */ f({
80
80
  }, [t("div", {
81
81
  class: "i-tabler:x size-4"
82
82
  }, null)])])])]
83
- }))]
83
+ }))
84
84
  }), t(O, {
85
85
  trigger: "manual",
86
86
  x: l.x,
@@ -1,9 +1,9 @@
1
- import { defineComponent as A, computed as d, createVNode as e } from "vue";
2
- import { useI18n as v, useManage as L, useLogout as R, useTheme as I, useGetAuth as S } from "@duxweb/dvha-core";
1
+ import { defineComponent as L, computed as b, createVNode as e } from "vue";
2
+ import { useI18n as f, useManage as S, useLogout as A, useTheme as R, useGetAuth as I } from "@duxweb/dvha-core";
3
3
  import { NDropdown as B } from "naive-ui";
4
4
  import { useRouter as N } from "vue-router";
5
5
  import "clsx";
6
- import { DuxAvatar as f } from "../../components/widget/avatar.js";
6
+ import { DuxAvatar as g } from "../../components/widget/avatar.js";
7
7
  import "vue-echarts";
8
8
  import "@overlastic/vue";
9
9
  import "dayjs";
@@ -51,7 +51,7 @@ import "unocss/preset-wind4";
51
51
  import "@vee-validate/i18n/dist/locale/en.json";
52
52
  import "@vee-validate/i18n/dist/locale/zh_CN.json";
53
53
  import "vee-validate";
54
- import G from "./button.js";
54
+ import j from "./button.js";
55
55
  import "vue-command-palette";
56
56
  import "../page404.js";
57
57
  import "short-unique-id";
@@ -62,77 +62,85 @@ import "@vue-flow/background";
62
62
  import "@iconify-json/tabler/icons.json";
63
63
  import "../../components/posterEditor/elements/index.js";
64
64
  import "fabric";
65
- const Ke = /* @__PURE__ */ A({
65
+ const Ke = /* @__PURE__ */ L({
66
66
  name: "DuxMenuAvatar",
67
67
  props: {
68
68
  collapsed: {
69
69
  type: Boolean,
70
70
  default: !1
71
+ },
72
+ btnClass: {
73
+ type: String,
74
+ default: ""
75
+ },
76
+ btnLabelClass: {
77
+ type: String,
78
+ default: ""
71
79
  }
72
80
  },
73
- setup(g) {
81
+ setup(s) {
74
82
  const {
75
- t
76
- } = v(), s = v(), b = N(), {
77
- config: h,
78
- getRoutePath: y
79
- } = L(), {
80
- mutate: k
81
- } = R(), {
82
- mode: m,
83
- primaryColors: x,
83
+ t: o
84
+ } = f(), m = f(), v = N(), {
85
+ config: y,
86
+ getRoutePath: h
87
+ } = S(), {
88
+ mutate: x
89
+ } = A(), {
90
+ mode: p,
91
+ primaryColors: k,
84
92
  neutralColors: C,
85
- colorMapping: u,
86
- setColor: c,
87
- setMode: M
88
- } = I(), l = (o, r) => e("div", {
93
+ colorMapping: c,
94
+ setColor: d,
95
+ setMode: w
96
+ } = R(), l = (t, r) => e("div", {
89
97
  class: "flex gap-2 items-center w-30"
90
98
  }, [e("div", {
91
99
  class: "flex-1 min-w-0"
92
- }, [o]), e("div", null, [r && e("div", {
100
+ }, [t]), e("div", null, [r && e("div", {
93
101
  class: "i-tabler:check"
94
- }, null)])]), a = (o) => e("div", {
95
- class: `${o} size-4`
96
- }, null), w = d(() => {
97
- const o = h.userMenus?.map((r) => ({
98
- label: t(r.label || "", {}, r.label),
102
+ }, null)])]), i = (t) => e("div", {
103
+ class: `${t} size-4`
104
+ }, null), M = b(() => {
105
+ const t = y.userMenus?.map((r) => ({
106
+ label: o(r.label || "", {}, r.label),
99
107
  key: r.key,
100
- icon: () => a(r.icon),
108
+ icon: () => i(r.icon),
101
109
  path: r.path
102
110
  }));
103
- return o?.length > 0 ? [...o, {
111
+ return t?.length > 0 ? [...t, {
104
112
  type: "divider"
105
113
  }] : [];
106
- }), i = S(), z = d(() => [{
114
+ }), a = I(), z = b(() => [{
107
115
  key: "header",
108
116
  type: "render",
109
117
  render: () => e("div", {
110
118
  class: "flex gap-2 px-3 pb-1 pt-1 items-center "
111
- }, [e(f, {
119
+ }, [e(g, {
112
120
  round: !0,
113
121
  size: 28,
114
- src: i.info?.avatar
122
+ src: a.info?.avatar
115
123
  }, null), e("div", {
116
124
  class: "flex flex-col"
117
125
  }, [e("div", {
118
126
  class: "text-sm font-medium"
119
- }, [i.info?.nickname]), e("div", {
127
+ }, [a.info?.nickname]), e("div", {
120
128
  class: "text-xs text-muted"
121
- }, [i.info?.username])])])
129
+ }, [a.info?.username])])])
122
130
  }, {
123
131
  type: "divider"
124
- }, ...w.value, {
125
- label: t("components.menu.language"),
132
+ }, ...M.value, {
133
+ label: o("components.menu.language"),
126
134
  key: "locale",
127
- icon: () => a("i-tabler:language"),
128
- children: [...(s.getLocales() || []).map((o) => ({
129
- label: () => l(t(`locale.${o}`), s.getLocale() === o),
130
- key: `locale.${o}`
135
+ icon: () => i("i-tabler:language"),
136
+ children: [...(m.getLocales() || []).map((t) => ({
137
+ label: () => l(o(`locale.${t}`), m.getLocale() === t),
138
+ key: `locale.${t}`
131
139
  }))]
132
140
  }, {
133
- label: t("components.menu.color"),
141
+ label: o("components.menu.color"),
134
142
  key: "color",
135
- icon: () => a("i-tabler:palette"),
143
+ icon: () => i("i-tabler:palette"),
136
144
  children: [{
137
145
  label: () => e("div", {
138
146
  class: "flex gap-2 items-center w-30"
@@ -141,18 +149,18 @@ const Ke = /* @__PURE__ */ A({
141
149
  style: {
142
150
  backgroundColor: "rgb(var(--ui-color-primary))"
143
151
  }
144
- }, null), e("div", null, [t("components.menu.primaryColor")])]),
152
+ }, null), e("div", null, [o("components.menu.primaryColor")])]),
145
153
  key: "color.primary",
146
- children: x.value?.map((o) => ({
154
+ children: k.value?.map((t) => ({
147
155
  label: () => l(e("div", {
148
156
  class: "flex gap-2 items-center"
149
157
  }, [e("div", {
150
158
  class: "size-2 rounded-full",
151
159
  style: {
152
- backgroundColor: `rgb(var(--base-color-${o}-500))`
160
+ backgroundColor: `rgb(var(--base-color-${t}-500))`
153
161
  }
154
- }, null), e("div", null, [o])]), u.value.primary === o),
155
- key: `color.primary.${o}`
162
+ }, null), e("div", null, [t])]), c.value.primary === t),
163
+ key: `color.primary.${t}`
156
164
  }))
157
165
  }, {
158
166
  label: () => e("div", {
@@ -162,63 +170,63 @@ const Ke = /* @__PURE__ */ A({
162
170
  style: {
163
171
  backgroundColor: "rgb(var(--ui-color-gray-600))"
164
172
  }
165
- }, null), e("div", null, [t("components.menu.neutralColor")])]),
173
+ }, null), e("div", null, [o("components.menu.neutralColor")])]),
166
174
  key: "color.neutral",
167
- children: C.value?.map((o) => ({
175
+ children: C.value?.map((t) => ({
168
176
  label: () => l(e("div", {
169
177
  class: "flex gap-2 items-center"
170
178
  }, [e("div", {
171
179
  class: "size-2 rounded-full",
172
180
  style: {
173
- backgroundColor: `rgb(var(--base-color-${o}-600))`
181
+ backgroundColor: `rgb(var(--base-color-${t}-600))`
174
182
  }
175
- }, null), e("div", null, [o])]), u.value.gray === o),
176
- key: `color.neutral.${o}`
183
+ }, null), e("div", null, [t])]), c.value.gray === t),
184
+ key: `color.neutral.${t}`
177
185
  }))
178
186
  }]
179
187
  }, {
180
- label: t("components.menu.theme"),
188
+ label: o("components.menu.theme"),
181
189
  key: "theme",
182
- icon: () => a("i-tabler:brightness-half"),
190
+ icon: () => i("i-tabler:brightness-half"),
183
191
  children: [{
184
- label: () => l(t("components.menu.followSystem"), m.value === "auto"),
192
+ label: () => l(o("components.menu.followSystem"), p.value === "auto"),
185
193
  key: "theme.auto"
186
194
  }, {
187
- label: () => l(t("components.menu.lightMode"), m.value === "light"),
195
+ label: () => l(o("components.menu.lightMode"), p.value === "light"),
188
196
  key: "theme.light"
189
197
  }, {
190
- label: () => l(t("components.menu.darkMode"), m.value === "dark"),
198
+ label: () => l(o("components.menu.darkMode"), p.value === "dark"),
191
199
  key: "theme.dark"
192
200
  }]
193
201
  }, {
194
202
  type: "divider"
195
203
  }, {
196
- label: t("components.menu.logout"),
204
+ label: o("components.menu.logout"),
197
205
  key: "logout",
198
- icon: () => a("i-tabler:logout")
206
+ icon: () => i("i-tabler:logout")
199
207
  }]);
200
- function $(o, r) {
201
- const p = o.lastIndexOf("."), [D, n] = p === -1 ? [o, ""] : [o.substring(0, p), o.substring(p + 1)];
208
+ function $(t, r) {
209
+ const u = t.lastIndexOf("."), [D, n] = u === -1 ? [t, ""] : [t.substring(0, u), t.substring(u + 1)];
202
210
  switch (D) {
203
211
  case "locale":
204
- s.changeLocale(n);
212
+ m.changeLocale(n);
205
213
  break;
206
214
  case "color.primary":
207
- c("primary", n);
215
+ d("primary", n);
208
216
  break;
209
217
  case "color.neutral":
210
- c("gray", n);
218
+ d("gray", n);
211
219
  break;
212
220
  case "theme":
213
- M(n);
221
+ w(n);
214
222
  break;
215
223
  case "logout":
216
- k();
224
+ x();
217
225
  break;
218
226
  default:
219
227
  if (!r?.path)
220
228
  return;
221
- b.push(y(r.path));
229
+ v.push(h(r.path));
222
230
  }
223
231
  }
224
232
  return () => e(B, {
@@ -228,22 +236,26 @@ const Ke = /* @__PURE__ */ A({
228
236
  onSelect: $,
229
237
  width: 200
230
238
  }, {
231
- default: () => [e(G, {
232
- collapsed: g.collapsed
239
+ default: () => [e(j, {
240
+ class: s.btnClass,
241
+ labelClass: s.btnLabelClass,
242
+ collapsed: s.collapsed
233
243
  }, {
234
- icon: () => e(f, {
244
+ icon: () => e(g, {
235
245
  class: "group-hover:shadow-lg",
236
246
  round: !0,
237
247
  size: 28,
238
- src: i.info?.avatar
248
+ src: a.info?.avatar
239
249
  }, null),
240
250
  default: () => e("div", {
251
+ class: "flex justify-between"
252
+ }, [e("div", {
241
253
  class: "flex flex-col"
242
254
  }, [e("div", {
243
255
  class: "text-sm font-medium"
244
- }, [i.info?.nickname]), e("div", {
256
+ }, [a.info?.nickname]), e("div", {
245
257
  class: "text-xs text-muted"
246
- }, [i.info?.username])])
258
+ }, [a.info?.username])])])
247
259
  })]
248
260
  });
249
261
  }
@@ -1,4 +1,4 @@
1
- import { defineComponent as e, createVNode as p } from "vue";
1
+ import { defineComponent as p, createVNode as i } from "vue";
2
2
  import "@duxweb/dvha-core";
3
3
  import "naive-ui";
4
4
  import "vue-router";
@@ -60,13 +60,17 @@ import "fabric";
60
60
  import "dayjs";
61
61
  import "@tanstack/vue-query";
62
62
  import { useUI as m } from "../../hooks/ui.js";
63
- const vt = /* @__PURE__ */ e({
63
+ const dt = /* @__PURE__ */ p({
64
64
  name: "DuxMenuButton",
65
65
  props: {
66
66
  class: {
67
67
  type: String,
68
68
  default: ""
69
69
  },
70
+ labelClass: {
71
+ type: String,
72
+ default: ""
73
+ },
70
74
  onClick: {
71
75
  type: Function,
72
76
  default: () => {
@@ -75,29 +79,24 @@ const vt = /* @__PURE__ */ e({
75
79
  collapsed: {
76
80
  type: Boolean,
77
81
  default: !0
78
- },
79
- inverted: {
80
- type: Boolean,
81
- default: !1
82
82
  }
83
83
  },
84
84
  setup(t, {
85
85
  slots: o
86
86
  }) {
87
87
  const {
88
- menuCollapsed: r,
89
- menuMobileCollapsed: i
88
+ menuCollapsed: r
90
89
  } = m();
91
- return () => p("div", {
90
+ return () => i("div", {
92
91
  onClick: () => {
93
92
  t.onClick?.();
94
93
  },
95
- class: ["flex items-center gap-1 justify-center py-1 px-2 cursor-pointer gap-2", t.class, r.value && !i.value ? "group" : "hover:shadow-xs hover:bg-default flex-1 w-full", t.inverted ? "transition-all duration-300 bg-inverted/5 rounded-full hover:bg-default hover:shadow-xs" : " rounded-md"]
96
- }, [o.icon?.(), t.collapsed === !1 && !r.value && !i.value && p("div", {
97
- class: ["overflow-hidden ease-in-out whitespace-nowrap text-left min-w-0 flex-1", t.inverted ? "text-default" : ""]
94
+ class: ["flex items-center gap-1 justify-center py-1 px-2 cursor-pointer gap-2 flex-1 w-full", t.class]
95
+ }, [o.icon?.(), t.collapsed === !1 && !r.value && i("div", {
96
+ class: ["overflow-hidden ease-in-out whitespace-nowrap text-left min-w-0 flex-1", t.labelClass]
98
97
  }, [o.default?.()])]);
99
98
  }
100
99
  });
101
100
  export {
102
- vt as default
101
+ dt as default
103
102
  };
@@ -0,0 +1,54 @@
1
+ import { defineComponent as i, computed as u, createVNode as e } from "vue";
2
+ import { useI18n as s, useTheme as m } from "@duxweb/dvha-core";
3
+ import { NTooltip as c, NButton as d } from "naive-ui";
4
+ const f = /* @__PURE__ */ i({
5
+ name: "DuxMenuDark",
6
+ setup() {
7
+ const {
8
+ t
9
+ } = s(), {
10
+ mode: l,
11
+ setMode: a
12
+ } = m(), o = u(() => {
13
+ const n = {
14
+ auto: {
15
+ icon: "i-tabler:device-desktop",
16
+ label: t("components.menu.followSystem", "Follow System"),
17
+ nextMode: "light"
18
+ },
19
+ light: {
20
+ icon: "i-tabler:sun",
21
+ label: t("components.menu.lightMode", "Light"),
22
+ nextMode: "dark"
23
+ },
24
+ dark: {
25
+ icon: "i-tabler:moon",
26
+ label: t("components.menu.darkMode", "Dark"),
27
+ nextMode: "auto"
28
+ }
29
+ };
30
+ return n[l.value] || n.auto;
31
+ }), r = () => {
32
+ a(o.value.nextMode);
33
+ };
34
+ return () => e(c, {
35
+ trigger: "hover",
36
+ placement: "right"
37
+ }, {
38
+ default: () => o.value.label,
39
+ trigger: () => e(d, {
40
+ quaternary: !0,
41
+ onClick: r
42
+ }, {
43
+ icon: () => e("div", {
44
+ class: "transition-all text-muted p-2 hover:text-white"
45
+ }, [e("div", {
46
+ class: `${o.value.icon} size-5`
47
+ }, null)])
48
+ })
49
+ });
50
+ }
51
+ });
52
+ export {
53
+ f as default
54
+ };