Initial import of frappe sunderer app

This commit is contained in:
microYF
2026-04-23 14:45:47 +00:00
parent 283972860c
commit 0f323e8d41
17 changed files with 3239 additions and 469 deletions
-4
View File
@@ -1087,7 +1087,6 @@
"resolved": "https://registry.npmmirror.com/css-render/-/css-render-0.15.14.tgz", "resolved": "https://registry.npmmirror.com/css-render/-/css-render-0.15.14.tgz",
"integrity": "sha512-9nF4PdUle+5ta4W5SyZdLCCmFd37uVimSjg1evcTqKJCyvCEEj12WKzOSBNak6r4im4J4iYXKH1OWpUV5LBYFg==", "integrity": "sha512-9nF4PdUle+5ta4W5SyZdLCCmFd37uVimSjg1evcTqKJCyvCEEj12WKzOSBNak6r4im4J4iYXKH1OWpUV5LBYFg==",
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"@emotion/hash": "~0.8.0", "@emotion/hash": "~0.8.0",
"csstype": "~3.0.5" "csstype": "~3.0.5"
@@ -1110,7 +1109,6 @@
"resolved": "https://registry.npmmirror.com/date-fns/-/date-fns-4.1.0.tgz", "resolved": "https://registry.npmmirror.com/date-fns/-/date-fns-4.1.0.tgz",
"integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==",
"license": "MIT", "license": "MIT",
"peer": true,
"funding": { "funding": {
"type": "github", "type": "github",
"url": "https://github.com/sponsors/kossnocorp" "url": "https://github.com/sponsors/kossnocorp"
@@ -1747,7 +1745,6 @@
"integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"esbuild": "^0.21.3", "esbuild": "^0.21.3",
"postcss": "^8.4.43", "postcss": "^8.4.43",
@@ -1819,7 +1816,6 @@
"resolved": "https://registry.npmjs.org/vue/-/vue-3.5.26.tgz", "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.26.tgz",
"integrity": "sha512-SJ/NTccVyAoNUJmkM9KUqPcYlY+u8OVL1X5EW9RIs3ch5H2uERxyyIUI4MRxVCSOiEcupX9xNGde1tL9ZKpimA==", "integrity": "sha512-SJ/NTccVyAoNUJmkM9KUqPcYlY+u8OVL1X5EW9RIs3ch5H2uERxyyIUI4MRxVCSOiEcupX9xNGde1tL9ZKpimA==",
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"@vue/compiler-dom": "3.5.26", "@vue/compiler-dom": "3.5.26",
"@vue/compiler-sfc": "3.5.26", "@vue/compiler-sfc": "3.5.26",
@@ -80,13 +80,13 @@ const menuOptions = [
label: 'Dashboard', label: 'Dashboard',
key: 'dashboard', key: 'dashboard',
icon: renderIcon(BookIcon), icon: renderIcon(BookIcon),
props: { onClick: () => router.push('/app/dashboard') } props: { onClick: () => router.push('/sundererapp/dashboard') }
}, },
{ {
label: 'Users', label: 'Users',
key: 'users', key: 'users',
icon: renderIcon(PersonIcon), icon: renderIcon(PersonIcon),
props: { onClick: () => router.push('/app/users') } props: { onClick: () => router.push('/sundererapp/users') }
}, },
// 添加更多菜单项... // 添加更多菜单项...
] ]
@@ -72,7 +72,7 @@ const setupPassword = async () => {
return return
} }
const response = await fetch('http://172.25.162.172:8000/api/method/frappe.core.doctype.user.user.update_password', { const response = await fetch('/api/method/frappe.core.doctype.user.user.update_password', {
method: 'POST', method: 'POST',
credentials: 'include', credentials: 'include',
headers: { 'Content-Type': 'application/json' }, headers: { 'Content-Type': 'application/json' },
@@ -75,7 +75,7 @@ async function handleLogin() {
} }
// 跳转到 Frappe 后台 // 跳转到 Frappe 后台
window.location.href = 'http://172.25.162.172:8000/app' window.location.href = '/sundererapp'
} catch (err) { } catch (err) {
error.value = err.message error.value = err.message
} finally { } finally {
+4 -4
View File
@@ -24,13 +24,13 @@ export default defineConfig({
manifest: true, manifest: true,
rollupOptions: { rollupOptions: {
output: { output: {
entryFileNames: 'js/[name].[hash].js', entryFileNames: 'js/index.js',
chunkFileNames: 'js/[name].[hash].js', chunkFileNames: 'js/[name].js',
assetFileNames: (assetInfo) => { assetFileNames: (assetInfo) => {
if (assetInfo.name.endsWith('.css')) { if (assetInfo.name.endsWith('.css')) {
return 'css/[name].[hash].[ext]'; return 'css/index.css';
} }
return 'assets/[name].[hash].[ext]'; return 'assets/[name][extname]';
} }
} }
} }
+3 -3
View File
@@ -42,9 +42,9 @@ export default defineConfig({
format: 'umd', // 设置输出格式为 UMD format: 'umd', // 设置输出格式为 UMD
name: 'SundererApp', // 指定全局变量名,构建后应用会挂载到 window.IncreaseAccApp name: 'SundererApp', // 指定全局变量名,构建后应用会挂载到 window.IncreaseAccApp
// 可以保留 hash 以利用缓存,但 UMD 通常用于简单场景,可选 // 可以保留 hash 以利用缓存,但 UMD 通常用于简单场景,可选
entryFileNames: 'js/sundererapp.[hash].js', // 例如: increaseacc.js (或 [name].[hash].js) entryFileNames: 'js/sundererapp.js', // 例如: increaseacc.js (或 [name].[hash].js)
chunkFileNames: 'js/sundererapp.[hash].js', chunkFileNames: 'js/[name].js',
assetFileNames: 'js/sundererapp.[hash].[ext]', // 例如: increaseacc.css (或 [name].[hash].[ext]) assetFileNames: 'assets/[name][extname]', // 例如: increaseacc.css (或 [name].[hash].[ext])
// UMD 格式可能需要外部依赖,如果 Vue 是全局引入的,需要声明 // UMD 格式可能需要外部依赖,如果 Vue 是全局引入的,需要声明
// globals: { // globals: {
// vue: 'Vue' // 假设 Vue 已通过 script 标签全局引入 // vue: 'Vue' // 假设 Vue 已通过 script 标签全局引入
File diff suppressed because one or more lines are too long
+24 -2
View File
@@ -1,11 +1,33 @@
{ {
"index.html": { "index.html": {
"file": "js/index.c1R21Jxr.js", "file": "js/index.js",
"name": "index", "name": "index",
"src": "index.html", "src": "index.html",
"isEntry": true, "isEntry": true,
"dynamicImports": [
"src/views/sundererapp/DashboardView.vue",
"src/views/sundererapp/UsersView.vue"
],
"css": [ "css": [
"css/index.CJO3dQ9s.css" "css/index.css"
]
},
"src/views/sundererapp/DashboardView.vue": {
"file": "js/DashboardView.js",
"name": "DashboardView",
"src": "src/views/sundererapp/DashboardView.vue",
"isDynamicEntry": true,
"imports": [
"index.html"
]
},
"src/views/sundererapp/UsersView.vue": {
"file": "js/UsersView.js",
"name": "UsersView",
"src": "src/views/sundererapp/UsersView.vue",
"isDynamicEntry": true,
"imports": [
"index.html"
] ]
} }
} }
File diff suppressed because one or more lines are too long
+2 -2
View File
@@ -5,8 +5,8 @@
<link rel="icon" type="image/svg+xml" href="/assets/sunderer_app/dist/icon3.svg" /> <link rel="icon" type="image/svg+xml" href="/assets/sunderer_app/dist/icon3.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>决裂者终端用户中心</title> <title>决裂者终端用户中心</title>
<script type="module" crossorigin src="/assets/sunderer_app/dist/js/index.c1R21Jxr.js"></script> <script type="module" crossorigin src="/assets/sunderer_app/dist/js/index.js"></script>
<link rel="stylesheet" crossorigin href="/assets/sunderer_app/dist/css/index.CJO3dQ9s.css"> <link rel="stylesheet" crossorigin href="/assets/sunderer_app/dist/css/index.css">
</head> </head>
<body> <body>
<div id="app"></div> <div id="app"></div>
+1
View File
@@ -0,0 +1 @@
import{c as l,a as e,b as c,w as o,r as a,o as d,d as _}from"./index.js";const u={__name:"DashboardView",setup(i){return(p,t)=>{const n=a("n-h2"),s=a("n-statistic"),r=a("n-card");return d(),l("div",null,[e(n,null,{default:o(()=>[...t[0]||(t[0]=[_("Dashboard",-1)])]),_:1}),t[1]||(t[1]=c("p",null,"Welcome to your admin dashboard!",-1)),e(r,{title:"Quick Stats",style:{"margin-top":"20px"}},{default:o(()=>[e(s,{label:"Total Users",value:"12345"})]),_:1})])}}};export{u as default};
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -16,6 +16,6 @@
<!-- 构建后文件会出现在 sunderer_app/public/ 目录下,例如: sundererapp.a1b2c3d4.js --> <!-- 构建后文件会出现在 sunderer_app/public/ 目录下,例如: sundererapp.a1b2c3d4.js -->
<!-- 所以这里的 src 应该是 /sundererapp.[hash].js --> <!-- 所以这里的 src 应该是 /sundererapp.[hash].js -->
<!-- 注意:你需要将 [hash] 替换为实际构建后生成的哈希值 --> <!-- 注意:你需要将 [hash] 替换为实际构建后生成的哈希值 -->
<script src="/assets/sunderer_app/SundererPage/js/sundererapp.BRnFqPg_.js"></script> <script src="/assets/sunderer_app/SundererPage/js/sundererapp.js"></script>
</body> </body>
</html> </html>
+2 -2
View File
@@ -5,8 +5,8 @@
<link rel="icon" type="image/svg+xml" href="/assets/sunderer_app/dist/icon3.svg" /> <link rel="icon" type="image/svg+xml" href="/assets/sunderer_app/dist/icon3.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>决裂者终端用户中心</title> <title>决裂者终端用户中心</title>
<script type="module" crossorigin src="/assets/sunderer_app/dist/js/index.c1R21Jxr.js"></script> <script type="module" crossorigin src="/assets/sunderer_app/dist/js/index.js"></script>
<link rel="stylesheet" crossorigin href="/assets/sunderer_app/dist/css/index.CJO3dQ9s.css"> <link rel="stylesheet" crossorigin href="/assets/sunderer_app/dist/css/index.css">
</head> </head>
<body> <body>
<div id="app"></div> <div id="app"></div>
+1 -1
View File
@@ -16,6 +16,6 @@
<!-- 构建后文件会出现在 sunderer_app/public/ 目录下,例如: sundererapp.a1b2c3d4.js --> <!-- 构建后文件会出现在 sunderer_app/public/ 目录下,例如: sundererapp.a1b2c3d4.js -->
<!-- 所以这里的 src 应该是 /sundererapp.[hash].js --> <!-- 所以这里的 src 应该是 /sundererapp.[hash].js -->
<!-- 注意:你需要将 [hash] 替换为实际构建后生成的哈希值 --> <!-- 注意:你需要将 [hash] 替换为实际构建后生成的哈希值 -->
<script src="/assets/sunderer_app/SundererPage/js/sundererapp.BRnFqPg_.js"></script> <script src="/assets/sunderer_app/SundererPage/js/sundererapp.js"></script>
</body> </body>
</html> </html>