This commit is contained in:
zhang zhuo 2026-01-10 13:53:41 +08:00
parent 7b70b95d49
commit 6b0b5dd84e
5 changed files with 136 additions and 54 deletions

97
LICENSE
View File

@ -1,21 +1,84 @@
MIT License Non-Commercial License with Commercial Authorization Required
非商业使用许可(商业使用需授权)
Copyright (c) 2025 leapy Copyright (c) 2026 Zhang Zhuo
All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all ========================
copies or substantial portions of the Software. 中文条款(具有法律效力)
========================
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 一、许可范围(非商业用途)
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 在遵守本许可条款的前提下,允许任何获得本软件及相关文档
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER (以下简称“软件”)的个人或组织,在非商业目的下:
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - 学习、研究、个人使用
SOFTWARE. - 非商业项目中使用、复制、修改本软件
- 在保留本许可与版权声明的前提下分发非商业版本
二、商业用途限制(必须获得授权)
未经版权所有者事先书面授权,严禁将本软件用于任何商业用途。
商业用途包括但不限于:
- 盈利性产品或服务
- 商业软件、SaaS 平台、企业系统集成
- 二次销售、出租、再授权
- 付费交付、商业解决方案
- 以本软件为核心或重要组成部分的商业行为
如需商业授权,请联系作者:
Email: cfn@leapy.cn
三、禁止行为
未经授权,您不得:
- 移除或修改版权声明
- 声称自己是原作者
- 将本软件作为闭源商业产品的一部分
- 直接或间接通过本软件获取商业收益
四、免责声明
本软件按“现状AS IS”提供
不附带任何明示或暗示的担保。
作者不对因使用本软件产生的任何损失承担责任。
========================
English Terms (Legally Binding)
========================
1. Grant of License (Non-Commercial Use)
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the "Software"),
to use, copy, modify, and distribute the Software
for non-commercial purposes only.
This permission is subject to the condition that the copyright notice
and this license are included in all copies of the Software.
2. Commercial Use Restriction
Any commercial use of the Software is strictly prohibited
without prior written permission from the copyright holder.
Commercial use includes, but is not limited to:
- Use in commercial products or services
- Integration into proprietary software or SaaS platforms
- Selling, sublicensing, or monetizing the Software
- Paid services or commercial delivery
For commercial licensing, please contact:
Email: cfn@leapy.cn
3. Disclaimer
THE SOFTWARE IS PROVIDED "AS IS",
WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY
ARISING FROM THE USE OF THE SOFTWARE.

View File

@ -150,6 +150,16 @@
请升级浏览器版本,或更换现代浏览器,如果你使用的是双核浏览器,请切换到极速/高速模式。</p> 请升级浏览器版本,或更换现代浏览器,如果你使用的是双核浏览器,请切换到极速/高速模式。</p>
</div> </div>
<script type="text/javascript"> <script type="text/javascript">
const text = `%VITE_APP_TITLE%`
const container = document.querySelector('.app-loading__title')
text.split('').forEach((char, index) => {
const span = document.createElement('span')
span.innerText = char
// 控制每个字的延迟,形成依次跳动
span.style.animationDelay = `${index * 0.16}s`
container.appendChild(span)
})
function getBrowerInfo() { function getBrowerInfo() {
var userAgent = window.navigator.userAgent; var userAgent = window.navigator.userAgent;
var browerInfo = { var browerInfo = {
@ -201,16 +211,6 @@
document.getElementById('versionCheck-type').innerHTML = getBrowerInfo().type; document.getElementById('versionCheck-type').innerHTML = getBrowerInfo().type;
document.getElementById('versionCheck-version').innerHTML = getBrowerInfo().version; document.getElementById('versionCheck-version').innerHTML = getBrowerInfo().version;
} }
const text = `%VITE_APP_TITLE%`
const container = document.querySelector('.app-loading__title')
text.split('').forEach((char, index) => {
const span = document.createElement('span')
span.innerText = char
// 控制每个字的延迟,形成依次跳动
span.style.animationDelay = `${index * 0.16}s`
container.appendChild(span)
})
</script> </script>
<script type="module" src="/src/main.ts"></script> <script type="module" src="/src/main.ts"></script>
</html> </html>

View File

@ -11,38 +11,38 @@
}, },
"dependencies": { "dependencies": {
"@element-plus/icons-vue": "^2.3.2", "@element-plus/icons-vue": "^2.3.2",
"@logicflow/core": "^2.2.0-alpha.0", "@logicflow/core": "^2.1.7",
"@logicflow/extension": "^2.2.0-alpha.0", "@logicflow/extension": "2.1.9",
"@logicflow/layout": "^2.1.0-alpha.0", "@logicflow/layout": "^2.0.7",
"@wangeditor/editor": "^5.1.23", "@wangeditor/editor": "^5.1.23",
"@wangeditor/editor-for-vue": "^5.1.12", "@wangeditor/editor-for-vue": "^5.1.12",
"axios": "1.12.0", "axios": "1.13.2",
"cron-parser": "^4.9", "cron-parser": "^5.4.0",
"cropperjs": "^1.6.2", "cropperjs": "^1.6.2",
"crypto-js": "^4.2.0", "crypto-js": "^4.2.0",
"dayjs": "^1.11.18", "dayjs": "^1.11.19",
"echarts": "^6.0.0", "echarts": "^6.0.0",
"element-plus": "2.11.3", "element-plus": "2.13.0",
"highlight.js": "^11.11.1", "highlight.js": "^11.11.1",
"image-conversion": "^2.1.1", "image-conversion": "^2.1.1",
"nprogress": "^0.2.0", "nprogress": "^0.2.0",
"pinia": "^3.0.3", "pinia": "^3.0.4",
"pinia-plugin-persistedstate": "^4.3.0", "pinia-plugin-persistedstate": "^4.7.1",
"sortablejs": "^1.15.6", "sortablejs": "^1.15.6",
"vue": "^3.5.22", "vue": "^3.5.26",
"vue-i18n": "^11.1.12", "vue-i18n": "^11.2.8",
"vue-router": "^4.5.1", "vue-router": "^4.6.4",
"vuedraggable": "^4.1.0", "vuedraggable": "^4.1.0",
"xgplayer": "^3.0.22", "xgplayer": "^3.0.23",
"xgplayer-hls": "^3.0.22" "xgplayer-hls": "^3.0.23"
}, },
"devDependencies": { "devDependencies": {
"@types/node": "^24.9.1", "@types/node": "^25.0.3",
"@vitejs/plugin-vue": "^5.2.4", "@vitejs/plugin-vue": "^6.0.3",
"eslint": "^9.27.0", "eslint": "^9.39.2",
"sass": "^1.89.0", "sass": "^1.97.2",
"typescript": "^5.8.3", "typescript": "^5.9.3",
"vite": "7.1.11" "vite": "7.3.1"
}, },
"license": "MIT" "license": "SEE LICENSE IN LICENSE"
} }

View File

@ -129,6 +129,9 @@ const tools = {
} }
return fmt; return fmt;
}, },
randomUUIDString: function (len = 16) {
return crypto.randomUUID().replace(/-/g, '').slice(0, len)
},
makeTreeData: function (data, pid = 0, key = "id", parent = "parent_id") { makeTreeData: function (data, pid = 0, key = "id", parent = "parent_id") {
const arr = []; const arr = [];
for (let item of data) { for (let item of data) {

View File

@ -1,17 +1,33 @@
{ {
"compilerOptions": { "compilerOptions": {
"target": "ESNext",
"useDefineForClassFields": true,
"module": "ESNext", "module": "ESNext",
"moduleResolution": "node", "moduleResolution": "Bundler",
"types": [ "lib": [
"node" "ESNext",
"DOM"
], ],
"baseUrl": "./", "jsx": "preserve",
"strict": true,
"skipLibCheck": true,
"types": [
"node",
"vite/client"
],
"baseUrl": ".",
"paths": { "paths": {
"@/*": [ "@/*": [
"src/*" "src/*"
] ]
}, },
"esModuleInterop": true, "esModuleInterop": true,
"allowSyntheticDefaultImports": true "allowSyntheticDefaultImports": true,
} "ignoreDeprecations": "6.0"
},
"include": [
"src/**/*.ts",
"src/**/*.tsx",
"src/**/*.vue"
]
} }