feat: adjust

This commit is contained in:
Mrxtyyp 2024-12-19 21:57:03 +08:00
parent f56dc58277
commit 777499854e
34 changed files with 8491 additions and 766 deletions

View File

@ -1,153 +1,158 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en" id="htmlRoot"> <html lang="en" id="htmlRoot">
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="renderer" content="webkit" /> <meta name="renderer" content="webkit" />
<meta <meta name="viewport"
name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=0" />
content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=0" <title>
/> <%= VITE_GLOB_APP_TITLE %>
<title><%= VITE_GLOB_APP_TITLE %></title> </title>
<link rel="icon" href="/favicon.ico" /> <link rel="icon" href="/favicon.ico" />
</head> </head>
<body> <body>
<div id="app"> <div id="app">
<style> <style>
html[data-theme='dark'] .app-loading { html[data-theme='dark'] .app-loading {
background-color: #2c344a; background-color: #2c344a;
}
html[data-theme='dark'] .app-loading .app-loading-title {
color: rgb(255 255 255 / 85%);
}
.app-loading {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
width: 100%;
height: 100%;
background-color: #f4f7f9;
}
.app-loading .app-loading-wrap {
display: flex;
position: absolute;
top: 50%;
left: 50%;
flex-direction: column;
align-items: center;
justify-content: center;
transform: translate3d(-50%, -50%, 0);
}
.app-loading .dots {
display: flex;
align-items: center;
justify-content: center;
padding: 98px;
}
.app-loading .app-loading-title {
display: flex;
align-items: center;
justify-content: center;
margin-top: 30px;
color: rgb(0 0 0 / 85%);
font-size: 30px;
}
.app-loading .app-loading-logo {
display: block;
width: 90px;
margin: 0 auto;
margin-bottom: 20px;
}
.dot {
display: inline-block;
position: relative;
box-sizing: border-box;
width: 48px;
height: 48px;
margin-top: 30px;
transform: rotate(45deg);
animation: ant-rotate 1.2s infinite linear;
font-size: 32px;
}
.dot i {
display: block;
position: absolute;
width: 20px;
height: 20px;
transform: scale(0.75);
transform-origin: 50% 50%;
animation: ant-spin-move 1s infinite linear alternate;
border-radius: 100%;
opacity: 0.3;
background-color: #0065cc;
}
.dot i:nth-child(1) {
top: 0;
left: 0;
}
.dot i:nth-child(2) {
top: 0;
right: 0;
animation-delay: 0.4s;
}
.dot i:nth-child(3) {
right: 0;
bottom: 0;
animation-delay: 0.8s;
}
.dot i:nth-child(4) {
bottom: 0;
left: 0;
animation-delay: 1.2s;
}
@keyframes ant-rotate {
to {
transform: rotate(405deg);
} }
}
@keyframes ant-rotate { html[data-theme='dark'] .app-loading .app-loading-title {
to { color: rgb(255 255 255 / 85%);
transform: rotate(405deg);
} }
}
@keyframes ant-spin-move { .app-loading {
to { display: flex;
opacity: 1; flex-direction: column;
align-items: center;
justify-content: center;
width: 100%;
height: 100%;
background-color: #f4f7f9;
} }
}
@keyframes ant-spin-move { .app-loading .app-loading-wrap {
to { display: flex;
opacity: 1; position: absolute;
top: 50%;
left: 50%;
flex-direction: column;
align-items: center;
justify-content: center;
transform: translate3d(-50%, -50%, 0);
} }
}
</style> .app-loading .dots {
<div class="app-loading"> display: flex;
<div class="app-loading-wrap"> align-items: center;
<img src="/resource/img/logo.png" class="app-loading-logo" alt="Logo" /> justify-content: center;
<div class="app-loading-dots"> padding: 98px;
<span class="dot dot-spin"><i></i><i></i><i></i><i></i></span> }
.app-loading .app-loading-title {
display: flex;
align-items: center;
justify-content: center;
margin-top: 30px;
color: rgb(0 0 0 / 85%);
font-size: 30px;
}
.app-loading .app-loading-logo {
display: block;
width: 200px;
margin: 0 auto;
margin-bottom: 20px;
}
.dot {
display: inline-block;
position: relative;
box-sizing: border-box;
width: 48px;
height: 48px;
margin-top: 30px;
transform: rotate(45deg);
animation: ant-rotate 1.2s infinite linear;
font-size: 32px;
}
.dot i {
display: block;
position: absolute;
width: 20px;
height: 20px;
transform: scale(0.75);
transform-origin: 50% 50%;
animation: ant-spin-move 1s infinite linear alternate;
border-radius: 100%;
opacity: 0.3;
background-color: #0065cc;
}
.dot i:nth-child(1) {
top: 0;
left: 0;
}
.dot i:nth-child(2) {
top: 0;
right: 0;
animation-delay: 0.4s;
}
.dot i:nth-child(3) {
right: 0;
bottom: 0;
animation-delay: 0.8s;
}
.dot i:nth-child(4) {
bottom: 0;
left: 0;
animation-delay: 1.2s;
}
@keyframes ant-rotate {
to {
transform: rotate(405deg);
}
}
@keyframes ant-rotate {
to {
transform: rotate(405deg);
}
}
@keyframes ant-spin-move {
to {
opacity: 1;
}
}
@keyframes ant-spin-move {
to {
opacity: 1;
}
}
</style>
<div class="app-loading">
<div class="app-loading-wrap">
<img src="/resource/img/logo.png" class="app-loading-logo" alt="Logo" />
<div class="app-loading-dots">
<span class="dot dot-spin"><i></i><i></i><i></i><i></i></span>
</div>
<!-- <div class="app-loading-title">
<%= VITE_GLOB_APP_TITLE %>
</div> -->
</div> </div>
<div class="app-loading-title"><%= VITE_GLOB_APP_TITLE %></div>
</div> </div>
</div> </div>
</div> <script type="module" src="/src/main.ts"></script>
<script type="module" src="/src/main.ts"></script>
</body> </body>
</html> </html>

View File

@ -0,0 +1,539 @@
{
"name": "@vben/stylelint-config",
"version": "1.0.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@vben/stylelint-config",
"version": "1.0.0",
"license": "MIT",
"devDependencies": {
"postcss": "^8.4.38",
"postcss-html": "^1.6.0",
"postcss-less": "^6.0.0",
"postcss-scss": "^4.0.9",
"prettier": "^3.2.5",
"stylelint": "^16.4.0",
"stylelint-config-property-sort-order-smacss": "^10.0.0",
"stylelint-config-recommended-scss": "^14.0.0",
"stylelint-config-recommended-vue": "^1.5.0",
"stylelint-config-standard": "^36.0.0",
"stylelint-config-standard-scss": "^13.1.0",
"stylelint-order": "^6.0.4",
"stylelint-prettier": "^5.0.0"
}
},
"../../node_modules/.pnpm/postcss-html@1.6.0/node_modules/postcss-html": {
"version": "1.6.0",
"dev": true,
"license": "MIT",
"dependencies": {
"htmlparser2": "^8.0.0",
"js-tokens": "^8.0.0",
"postcss": "^8.4.0",
"postcss-safe-parser": "^6.0.0"
},
"devDependencies": {
"@ota-meshi/eslint-plugin": "^0.15.0",
"autoprefixer": "^10.3.7",
"chai": "~4.3.4",
"codecov": "^3.8.3",
"eslint": "^8.0.1",
"eslint-config-prettier": "^8.3.0",
"eslint-plugin-eslint-comments": "^3.2.0",
"eslint-plugin-json-schema-validator": "^4.0.0",
"eslint-plugin-jsonc": "^2.0.0",
"eslint-plugin-n": "^16.6.2",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-node-dependencies": "^0.11.0",
"eslint-plugin-prettier": "^5.0.0",
"eslint-plugin-regexp": "^1.4.1",
"eslint-plugin-vue": "^9.0.0",
"eslint-plugin-yml": "^1.0.0",
"mocha": "^10.0.0",
"mocha-chai-jest-snapshot": "^1.1.3",
"nyc": "^15.1.0",
"postcss-less": "^6.0.0",
"postcss-scss": "^4.0.1",
"postcss-styl": "^0.12.0",
"prettier": "^3.0.0",
"stylelint": "^14.4.0",
"stylelint-config-standard": "^28.0.0",
"sugarss": "^4.0.1"
},
"engines": {
"node": "^12 || >=14"
}
},
"../../node_modules/.pnpm/postcss-less@6.0.0_postcss@8.4.38/node_modules/postcss-less": {
"version": "6.0.0",
"dev": true,
"license": "MIT",
"devDependencies": {
"@commitlint/cli": "^12.1.4",
"@commitlint/config-conventional": "^12.1.4",
"ava": "^3.15.0",
"cheerio": "^1.0.0-rc.10",
"eslint-config-shellscape": "^2.0.2",
"eslint-plugin-filenames": "^1.2.0",
"is-absolute-url": "^3.0.0",
"less": "^4.1.1",
"lint-staged": "^11.0.0",
"node-fetch": "^2.6.1",
"nyc": "^15.1.0",
"postcss": "^8.3.5",
"postcss-parser-tests": "^8.3.5",
"pre-commit": "^1.2.2",
"url-join": "^4.0.0"
},
"engines": {
"node": ">=12"
},
"peerDependencies": {
"postcss": "^8.3.5"
}
},
"../../node_modules/.pnpm/postcss-scss@4.0.9_postcss@8.4.38/node_modules/postcss-scss": {
"version": "4.0.9",
"dev": true,
"funding": [
{
"type": "opencollective",
"url": "https://opencollective.com/postcss/"
},
{
"type": "tidelift",
"url": "https://tidelift.com/funding/github/npm/postcss-scss"
},
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
"license": "MIT",
"engines": {
"node": ">=12.0"
},
"peerDependencies": {
"postcss": "^8.4.29"
}
},
"../../node_modules/.pnpm/postcss@8.4.38/node_modules/postcss": {
"version": "8.4.38",
"dev": true,
"funding": [
{
"type": "opencollective",
"url": "https://opencollective.com/postcss/"
},
{
"type": "tidelift",
"url": "https://tidelift.com/funding/github/npm/postcss"
},
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
"license": "MIT",
"dependencies": {
"nanoid": "^3.3.7",
"picocolors": "^1.0.0",
"source-map-js": "^1.2.0"
},
"engines": {
"node": "^10 || ^12 || >=14"
}
},
"../../node_modules/.pnpm/prettier@3.2.5/node_modules/prettier": {
"version": "3.2.5",
"dev": true,
"license": "MIT",
"bin": {
"prettier": "bin/prettier.cjs"
},
"engines": {
"node": ">=14"
},
"funding": {
"url": "https://github.com/prettier/prettier?sponsor=1"
}
},
"../../node_modules/.pnpm/stylelint-config-property-sort-order-smacss@10.0.0_stylelint@16.4.0_typescript@5.4.5_/node_modules/stylelint-config-property-sort-order-smacss": {
"version": "10.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"css-property-sort-order-smacss": "~2.2.0",
"stylelint-order": "^6.0.4"
},
"devDependencies": {
"coveralls": "^3.1.0",
"eslint": "^8.2.0",
"eslint-config-airbnb-base": "^15.0.0",
"eslint-config-prettier": "^9.0.0",
"eslint-plugin-import": "^2.25.2",
"jest": "^29.0.1",
"jest-light-runner": "^0.6.0",
"prettier": "^3.0.0",
"proxyquire": "^2.0.0",
"stylelint": "^14.0.0 || ^15.0.0 || ^16.0.0"
},
"engines": {
"node": ">=18.12.0"
},
"peerDependencies": {
"stylelint": "^14.0.0 || ^15.0.0 || ^16.0.0"
}
},
"../../node_modules/.pnpm/stylelint-config-recommended-scss@14.0.0_postcss@8.4.38_stylelint@16.4.0_typescript@5.4.5_/node_modules/stylelint-config-recommended-scss": {
"version": "14.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"postcss-scss": "^4.0.9",
"stylelint-config-recommended": "^14.0.0",
"stylelint-scss": "^6.0.0"
},
"devDependencies": {
"@stylelint/prettier-config": "^3.0.0",
"@stylelint/remark-preset": "^5.0.0",
"cross-env": "^7.0.3",
"eslint": "^8.55.0",
"eslint-config-stylelint": "^20.0.0",
"eslint-plugin-jest": "^27.6.0",
"jest": "^29.7.0",
"np": "^9.0.0",
"npm-run-all2": "^5.0.2",
"prettier": "^3.1.0",
"remark-cli": "^12.0.0",
"stylelint": "^16.0.2"
},
"engines": {
"node": ">=18.12.0"
},
"peerDependencies": {
"postcss": "^8.3.3",
"stylelint": "^16.0.2"
},
"peerDependenciesMeta": {
"postcss": {
"optional": true
}
}
},
"../../node_modules/.pnpm/stylelint-config-recommended-vue@1.5.0_postcss-html@1.6.0_stylelint@16.4.0_typescript@5.4.5_/node_modules/stylelint-config-recommended-vue": {
"version": "1.5.0",
"dev": true,
"license": "MIT",
"dependencies": {
"semver": "^7.3.5",
"stylelint-config-html": ">=1.0.0",
"stylelint-config-recommended": ">=6.0.0"
},
"devDependencies": {
"@ota-meshi/eslint-plugin": "^0.13.0",
"eslint": "^8.0.0",
"eslint-config-prettier": "^8.3.0",
"eslint-plugin-eslint-comments": "^3.2.0",
"eslint-plugin-json-schema-validator": "^4.0.0",
"eslint-plugin-jsonc": "^2.0.0",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-prettier": "^4.0.0",
"eslint-plugin-regexp": "^1.5.0",
"eslint-plugin-vue": "^9.0.0",
"eslint-plugin-yml": "^1.0.0",
"mocha": "^10.0.0",
"prettier": "^2.4.1",
"stylelint": "^15.0.0"
},
"engines": {
"node": "^12 || >=14"
},
"funding": {
"url": "https://github.com/sponsors/ota-meshi"
},
"peerDependencies": {
"postcss-html": "^1.0.0",
"stylelint": ">=14.0.0"
}
},
"../../node_modules/.pnpm/stylelint-config-standard-scss@13.1.0_postcss@8.4.38_stylelint@16.4.0_typescript@5.4.5_/node_modules/stylelint-config-standard-scss": {
"version": "13.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"stylelint-config-recommended-scss": "^14.0.0",
"stylelint-config-standard": "^36.0.0"
},
"devDependencies": {
"@stylelint/prettier-config": "^3.0.0",
"@stylelint/remark-preset": "^5.0.0",
"eslint": "^8.57.0",
"eslint-config-stylelint": "^21.0.0",
"np": "^10.0.2",
"npm-run-all2": "^5.0.2",
"prettier": "^3.2.5",
"remark-cli": "^12.0.0",
"stylelint": "^16.3.1"
},
"engines": {
"node": ">=18.12.0"
},
"peerDependencies": {
"postcss": "^8.3.3",
"stylelint": "^16.3.1"
},
"peerDependenciesMeta": {
"postcss": {
"optional": true
}
}
},
"../../node_modules/.pnpm/stylelint-config-standard@36.0.0_stylelint@16.4.0_typescript@5.4.5_/node_modules/stylelint-config-standard": {
"version": "36.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"stylelint-config-recommended": "^14.0.0"
},
"devDependencies": {
"@stylelint/prettier-config": "^3.0.0",
"@stylelint/remark-preset": "^5.0.0",
"eslint": "^8.56.0",
"eslint-config-stylelint": "^20.0.0",
"husky": "^8.0.3",
"lint-staged": "^15.2.0",
"np": "^9.2.0",
"npm-run-all": "^4.1.5",
"prettier": "^3.1.1",
"remark-cli": "^12.0.0",
"stylelint": "^16.1.0"
},
"engines": {
"node": ">=18.12.0"
},
"peerDependencies": {
"stylelint": "^16.1.0"
}
},
"../../node_modules/.pnpm/stylelint-order@6.0.4_stylelint@16.4.0_typescript@5.4.5_/node_modules/stylelint-order": {
"version": "6.0.4",
"dev": true,
"license": "MIT",
"dependencies": {
"postcss": "^8.4.32",
"postcss-sorting": "^8.0.2"
},
"devDependencies": {
"eslint": "^8.55.0",
"eslint-config-hudochenkov": "^9.0.0",
"eslint-config-prettier": "^9.1.0",
"husky": "^8.0.3",
"jest": "^29.7.0",
"jest-light-runner": "^0.6.0",
"jest-preset-stylelint": "^7.0.0",
"jest-watch-typeahead": "^2.2.2",
"lint-staged": "^15.2.0",
"postcss-html": "^1.5.0",
"postcss-less": "^6.0.0",
"postcss-styled-syntax": "^0.5.0",
"prettier": "~3.1.0",
"prettier-config-hudochenkov": "^0.4.0",
"stylelint": "^16.0.1"
},
"peerDependencies": {
"stylelint": "^14.0.0 || ^15.0.0 || ^16.0.1"
}
},
"../../node_modules/.pnpm/stylelint-prettier@5.0.0_prettier@3.2.5_stylelint@16.4.0_typescript@5.4.5_/node_modules/stylelint-prettier": {
"version": "5.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"prettier-linter-helpers": "^1.0.0"
},
"devDependencies": {
"eslint": "^8.44.0",
"eslint-config-prettier": "^9.0.0",
"eslint-plugin-n": "^16.3.1",
"eslint-plugin-prettier": "^5.0.0",
"postcss": "^8.4.25",
"postcss-html": "^1.5.0",
"postcss-markdown": "^1.2.0",
"postcss-scss": "^4.0.6",
"postcss-styled-syntax": "^0.5.0",
"postcss-syntax": "^0.36.2",
"prettier": "^3.0.0",
"prettier-plugin-astro": "^0.12.1",
"prettier-plugin-svelte": "^3.0.0",
"strip-ansi": "^7.1.0",
"stylelint": "^16.0.1",
"stylelint-test-rule-node": "^0.2.0",
"svelte": "^4.1.0",
"typescript": "5.3.2"
},
"engines": {
"node": ">=18.12.0"
},
"peerDependencies": {
"prettier": ">=3.0.0",
"stylelint": ">=16.0.0"
}
},
"../../node_modules/.pnpm/stylelint@16.4.0_typescript@5.4.5/node_modules/stylelint": {
"version": "16.4.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@csstools/css-parser-algorithms": "^2.6.1",
"@csstools/css-tokenizer": "^2.2.4",
"@csstools/media-query-list-parser": "^2.1.9",
"@csstools/selector-specificity": "^3.0.3",
"@dual-bundle/import-meta-resolve": "^4.0.0",
"balanced-match": "^2.0.0",
"colord": "^2.9.3",
"cosmiconfig": "^9.0.0",
"css-functions-list": "^3.2.2",
"css-tree": "^2.3.1",
"debug": "^4.3.4",
"fast-glob": "^3.3.2",
"fastest-levenshtein": "^1.0.16",
"file-entry-cache": "^8.0.0",
"global-modules": "^2.0.0",
"globby": "^11.1.0",
"globjoin": "^0.1.4",
"html-tags": "^3.3.1",
"ignore": "^5.3.1",
"imurmurhash": "^0.1.4",
"is-plain-object": "^5.0.0",
"known-css-properties": "^0.30.0",
"mathml-tag-names": "^2.1.3",
"meow": "^13.2.0",
"micromatch": "^4.0.5",
"normalize-path": "^3.0.0",
"picocolors": "^1.0.0",
"postcss": "^8.4.38",
"postcss-resolve-nested-selector": "^0.1.1",
"postcss-safe-parser": "^7.0.0",
"postcss-selector-parser": "^6.0.16",
"postcss-value-parser": "^4.2.0",
"resolve-from": "^5.0.0",
"string-width": "^4.2.3",
"strip-ansi": "^7.1.0",
"supports-hyperlinks": "^3.0.0",
"svg-tags": "^1.0.0",
"table": "^6.8.2",
"write-file-atomic": "^5.0.1"
},
"bin": {
"stylelint": "bin/stylelint.mjs"
},
"devDependencies": {
"@changesets/cli": "^2.27.1",
"@changesets/get-github-info": "^0.6.0",
"@jest/globals": "^29.7.0",
"@stylelint/prettier-config": "^3.0.0",
"@stylelint/remark-preset": "^5.0.0",
"@types/balanced-match": "^1.0.4",
"@types/css-tree": "^2.3.7",
"@types/debug": "^4.1.12",
"@types/file-entry-cache": "^5.0.4",
"@types/global-modules": "^2.0.2",
"@types/globjoin": "^0.1.2",
"@types/imurmurhash": "^0.1.4",
"@types/micromatch": "^4.0.7",
"@types/normalize-path": "^3.0.2",
"@types/postcss-less": "^4.0.6",
"@types/postcss-resolve-nested-selector": "^0.1.3",
"@types/postcss-safe-parser": "^5.0.4",
"@types/svg-tags": "^1.0.2",
"@types/write-file-atomic": "^4.0.3",
"benchmark": "^2.1.4",
"common-tags": "^1.8.2",
"deepmerge": "^4.3.1",
"eslint": "^8.57.0",
"eslint-config-stylelint": "^21.0.0",
"eslint-plugin-import": "^2.29.1",
"eslint-plugin-jest": "^28.2.0",
"husky": "^9.0.11",
"jest": "^29.7.0",
"jest-preset-stylelint": "^7.0.0",
"jest-watch-typeahead": "^2.2.2",
"lint-staged": "^15.2.2",
"np": "^10.0.5",
"npm-run-all": "^4.1.5",
"patch-package": "^8.0.0",
"postcss-html": "^1.6.0",
"postcss-import": "^16.1.0",
"postcss-less": "^6.0.0",
"postcss-sass": "^0.5.0",
"postcss-scss": "^4.0.9",
"remark-cli": "^12.0.0",
"rollup": "^4.16.3",
"sugarss": "^4.0.1",
"typescript": "^5.4.5"
},
"engines": {
"node": ">=18.12.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/stylelint"
}
},
"node_modules/postcss": {
"resolved": "../../node_modules/.pnpm/postcss@8.4.38/node_modules/postcss",
"link": true
},
"node_modules/postcss-html": {
"resolved": "../../node_modules/.pnpm/postcss-html@1.6.0/node_modules/postcss-html",
"link": true
},
"node_modules/postcss-less": {
"resolved": "../../node_modules/.pnpm/postcss-less@6.0.0_postcss@8.4.38/node_modules/postcss-less",
"link": true
},
"node_modules/postcss-scss": {
"resolved": "../../node_modules/.pnpm/postcss-scss@4.0.9_postcss@8.4.38/node_modules/postcss-scss",
"link": true
},
"node_modules/prettier": {
"resolved": "../../node_modules/.pnpm/prettier@3.2.5/node_modules/prettier",
"link": true
},
"node_modules/stylelint": {
"resolved": "../../node_modules/.pnpm/stylelint@16.4.0_typescript@5.4.5/node_modules/stylelint",
"link": true
},
"node_modules/stylelint-config-property-sort-order-smacss": {
"resolved": "../../node_modules/.pnpm/stylelint-config-property-sort-order-smacss@10.0.0_stylelint@16.4.0_typescript@5.4.5_/node_modules/stylelint-config-property-sort-order-smacss",
"link": true
},
"node_modules/stylelint-config-recommended-scss": {
"resolved": "../../node_modules/.pnpm/stylelint-config-recommended-scss@14.0.0_postcss@8.4.38_stylelint@16.4.0_typescript@5.4.5_/node_modules/stylelint-config-recommended-scss",
"link": true
},
"node_modules/stylelint-config-recommended-vue": {
"resolved": "../../node_modules/.pnpm/stylelint-config-recommended-vue@1.5.0_postcss-html@1.6.0_stylelint@16.4.0_typescript@5.4.5_/node_modules/stylelint-config-recommended-vue",
"link": true
},
"node_modules/stylelint-config-standard": {
"resolved": "../../node_modules/.pnpm/stylelint-config-standard@36.0.0_stylelint@16.4.0_typescript@5.4.5_/node_modules/stylelint-config-standard",
"link": true
},
"node_modules/stylelint-config-standard-scss": {
"resolved": "../../node_modules/.pnpm/stylelint-config-standard-scss@13.1.0_postcss@8.4.38_stylelint@16.4.0_typescript@5.4.5_/node_modules/stylelint-config-standard-scss",
"link": true
},
"node_modules/stylelint-order": {
"resolved": "../../node_modules/.pnpm/stylelint-order@6.0.4_stylelint@16.4.0_typescript@5.4.5_/node_modules/stylelint-order",
"link": true
},
"node_modules/stylelint-prettier": {
"resolved": "../../node_modules/.pnpm/stylelint-prettier@5.0.0_prettier@3.2.5_stylelint@16.4.0_typescript@5.4.5_/node_modules/stylelint-prettier",
"link": true
}
}
}

148
internal/ts-config/package-lock.json generated Normal file
View File

@ -0,0 +1,148 @@
{
"name": "@vben/ts-config",
"version": "1.0.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@vben/ts-config",
"version": "1.0.0",
"license": "MIT",
"dependencies": {
"@types/node": "^20.12.7",
"vite": "^5.2.10"
}
},
"../../node_modules/.pnpm/@types+node@20.12.7/node_modules/@types/node": {
"version": "20.12.7",
"license": "MIT",
"dependencies": {
"undici-types": "~5.26.4"
}
},
"../../node_modules/.pnpm/vite@5.2.10_@types+node@20.12.7_less@4.2.0_sass@1.75.0_terser@5.19.3/node_modules/vite": {
"version": "5.2.10",
"license": "MIT",
"dependencies": {
"esbuild": "^0.20.1",
"postcss": "^8.4.38",
"rollup": "^4.13.0"
},
"bin": {
"vite": "bin/vite.js"
},
"devDependencies": {
"@ampproject/remapping": "^2.3.0",
"@babel/parser": "^7.24.4",
"@jridgewell/trace-mapping": "^0.3.25",
"@polka/compression": "^1.0.0-next.25",
"@rollup/plugin-alias": "^5.1.0",
"@rollup/plugin-commonjs": "^25.0.7",
"@rollup/plugin-dynamic-import-vars": "^2.1.2",
"@rollup/plugin-json": "^6.1.0",
"@rollup/plugin-node-resolve": "15.2.3",
"@rollup/plugin-typescript": "^11.1.6",
"@rollup/pluginutils": "^5.1.0",
"@types/escape-html": "^1.0.4",
"@types/pnpapi": "^0.0.5",
"acorn": "^8.11.3",
"acorn-walk": "^8.3.2",
"artichokie": "^0.2.0",
"cac": "^6.7.14",
"chokidar": "^3.6.0",
"connect": "^3.7.0",
"convert-source-map": "^2.0.0",
"cors": "^2.8.5",
"cross-spawn": "^7.0.3",
"debug": "^4.3.4",
"dep-types": "link:./src/types",
"dotenv": "^16.4.5",
"dotenv-expand": "^11.0.6",
"es-module-lexer": "^1.5.0",
"escape-html": "^1.0.3",
"estree-walker": "^3.0.3",
"etag": "^1.8.1",
"fast-glob": "^3.3.2",
"http-proxy": "^1.18.1",
"launch-editor-middleware": "^2.6.1",
"lightningcss": "^1.24.1",
"magic-string": "^0.30.9",
"micromatch": "^4.0.5",
"mlly": "^1.6.1",
"mrmime": "^2.0.0",
"open": "^8.4.2",
"parse5": "^7.1.2",
"pathe": "^1.1.2",
"periscopic": "^4.0.2",
"picocolors": "^1.0.0",
"picomatch": "^2.3.1",
"postcss-import": "^16.1.0",
"postcss-load-config": "^4.0.2",
"postcss-modules": "^6.0.0",
"resolve.exports": "^2.0.2",
"rollup-plugin-dts": "^6.1.0",
"rollup-plugin-esbuild": "^6.1.1",
"rollup-plugin-license": "^3.3.1",
"sass": "^1.74.1",
"sirv": "^2.0.4",
"source-map-support": "^0.5.21",
"strip-ansi": "^7.1.0",
"strip-literal": "^2.1.0",
"tsconfck": "^3.0.3",
"tslib": "^2.6.2",
"types": "link:./types",
"ufo": "^1.5.3",
"ws": "^8.16.0"
},
"engines": {
"node": "^18.0.0 || >=20.0.0"
},
"funding": {
"url": "https://github.com/vitejs/vite?sponsor=1"
},
"optionalDependencies": {
"fsevents": "~2.3.3"
},
"peerDependencies": {
"@types/node": "^18.0.0 || >=20.0.0",
"less": "*",
"lightningcss": "^1.21.0",
"sass": "*",
"stylus": "*",
"sugarss": "*",
"terser": "^5.4.0"
},
"peerDependenciesMeta": {
"@types/node": {
"optional": true
},
"less": {
"optional": true
},
"lightningcss": {
"optional": true
},
"sass": {
"optional": true
},
"stylus": {
"optional": true
},
"sugarss": {
"optional": true
},
"terser": {
"optional": true
}
}
},
"node_modules/@types/node": {
"resolved": "../../node_modules/.pnpm/@types+node@20.12.7/node_modules/@types/node",
"link": true
},
"node_modules/vite": {
"resolved": "../../node_modules/.pnpm/vite@5.2.10_@types+node@20.12.7_less@4.2.0_sass@1.75.0_terser@5.19.3/node_modules/vite",
"link": true
}
}
}

1050
internal/vite-config/package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,223 @@
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.modifierNames = exports.foregroundColorNames = exports.default = exports.colorNames = exports.backgroundColorNames = void 0;const ANSI_BACKGROUND_OFFSET = 10;
const wrapAnsi16 = (offset = 0) => (code) => `\u001B[${code + offset}m`;
const wrapAnsi256 = (offset = 0) => (code) => `\u001B[${38 + offset};5;${code}m`;
const wrapAnsi16m = (offset = 0) => (red, green, blue) => `\u001B[${38 + offset};2;${red};${green};${blue}m`;
const styles = {
modifier: {
reset: [0, 0],
// 21 isn't widely supported and 22 does the same thing
bold: [1, 22],
dim: [2, 22],
italic: [3, 23],
underline: [4, 24],
overline: [53, 55],
inverse: [7, 27],
hidden: [8, 28],
strikethrough: [9, 29]
},
color: {
black: [30, 39],
red: [31, 39],
green: [32, 39],
yellow: [33, 39],
blue: [34, 39],
magenta: [35, 39],
cyan: [36, 39],
white: [37, 39],
// Bright color
blackBright: [90, 39],
gray: [90, 39], // Alias of `blackBright`
grey: [90, 39], // Alias of `blackBright`
redBright: [91, 39],
greenBright: [92, 39],
yellowBright: [93, 39],
blueBright: [94, 39],
magentaBright: [95, 39],
cyanBright: [96, 39],
whiteBright: [97, 39]
},
bgColor: {
bgBlack: [40, 49],
bgRed: [41, 49],
bgGreen: [42, 49],
bgYellow: [43, 49],
bgBlue: [44, 49],
bgMagenta: [45, 49],
bgCyan: [46, 49],
bgWhite: [47, 49],
// Bright color
bgBlackBright: [100, 49],
bgGray: [100, 49], // Alias of `bgBlackBright`
bgGrey: [100, 49], // Alias of `bgBlackBright`
bgRedBright: [101, 49],
bgGreenBright: [102, 49],
bgYellowBright: [103, 49],
bgBlueBright: [104, 49],
bgMagentaBright: [105, 49],
bgCyanBright: [106, 49],
bgWhiteBright: [107, 49]
}
};
const modifierNames = Object.keys(styles.modifier);exports.modifierNames = modifierNames;
const foregroundColorNames = Object.keys(styles.color);exports.foregroundColorNames = foregroundColorNames;
const backgroundColorNames = Object.keys(styles.bgColor);exports.backgroundColorNames = backgroundColorNames;
const colorNames = [...foregroundColorNames, ...backgroundColorNames];exports.colorNames = colorNames;
function assembleStyles() {
const codes = new Map();
for (const [groupName, group] of Object.entries(styles)) {
for (const [styleName, style] of Object.entries(group)) {
styles[styleName] = {
open: `\u001B[${style[0]}m`,
close: `\u001B[${style[1]}m`
};
group[styleName] = styles[styleName];
codes.set(style[0], style[1]);
}
Object.defineProperty(styles, groupName, {
value: group,
enumerable: false
});
}
Object.defineProperty(styles, 'codes', {
value: codes,
enumerable: false
});
styles.color.close = '\u001B[39m';
styles.bgColor.close = '\u001B[49m';
styles.color.ansi = wrapAnsi16();
styles.color.ansi256 = wrapAnsi256();
styles.color.ansi16m = wrapAnsi16m();
styles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);
styles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);
styles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);
// From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js
Object.defineProperties(styles, {
rgbToAnsi256: {
value(red, green, blue) {
// We use the extended greyscale palette here, with the exception of
// black and white. normal palette only has 4 greyscale shades.
if (red === green && green === blue) {
if (red < 8) {
return 16;
}
if (red > 248) {
return 231;
}
return Math.round((red - 8) / 247 * 24) + 232;
}
return 16 +
36 * Math.round(red / 255 * 5) +
6 * Math.round(green / 255 * 5) +
Math.round(blue / 255 * 5);
},
enumerable: false
},
hexToRgb: {
value(hex) {
const matches = /[a-f\d]{6}|[a-f\d]{3}/i.exec(hex.toString(16));
if (!matches) {
return [0, 0, 0];
}
let [colorString] = matches;
if (colorString.length === 3) {
colorString = [...colorString].map((character) => character + character).join('');
}
const integer = Number.parseInt(colorString, 16);
return [
/* eslint-disable no-bitwise */
integer >> 16 & 0xFF,
integer >> 8 & 0xFF,
integer & 0xFF
/* eslint-enable no-bitwise */];
},
enumerable: false
},
hexToAnsi256: {
value: (hex) => styles.rgbToAnsi256(...styles.hexToRgb(hex)),
enumerable: false
},
ansi256ToAnsi: {
value(code) {
if (code < 8) {
return 30 + code;
}
if (code < 16) {
return 90 + (code - 8);
}
let red;
let green;
let blue;
if (code >= 232) {
red = ((code - 232) * 10 + 8) / 255;
green = red;
blue = red;
} else {
code -= 16;
const remainder = code % 36;
red = Math.floor(code / 36) / 5;
green = Math.floor(remainder / 6) / 5;
blue = remainder % 6 / 5;
}
const value = Math.max(red, green, blue) * 2;
if (value === 0) {
return 30;
}
// eslint-disable-next-line no-bitwise
let result = 30 + (Math.round(blue) << 2 | Math.round(green) << 1 | Math.round(red));
if (value === 2) {
result += 60;
}
return result;
},
enumerable: false
},
rgbToAnsi: {
value: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),
enumerable: false
},
hexToAnsi: {
value: (hex) => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),
enumerable: false
}
});
return styles;
}
const ansiStyles = assembleStyles();var _default =
ansiStyles;exports.default = _default; /* v7-28b0a5febe3644a0 */

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,94 @@
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.isIgnoredByIgnoreFilesSync = exports.isIgnoredByIgnoreFiles = exports.isGitIgnoredSync = exports.isGitIgnored = exports.GITIGNORE_FILES_PATTERN = void 0;var _nodeProcess = _interopRequireDefault(require("node:process"));
var _nodeFs = _interopRequireDefault(require("node:fs"));
var _nodePath = _interopRequireDefault(require("node:path"));
var _fastGlob = _interopRequireDefault(require("fast-glob"));
var _ignore = _interopRequireDefault(require("ignore"));
var _slash = _interopRequireDefault(require("slash"));
var _utilities = require("./utilities.js");function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}
const ignoreFilesGlobOptions = {
ignore: [
'**/node_modules',
'**/flow-typed',
'**/coverage',
'**/.git'],
absolute: true,
dot: true
};
const GITIGNORE_FILES_PATTERN = '**/.gitignore';exports.GITIGNORE_FILES_PATTERN = GITIGNORE_FILES_PATTERN;
const applyBaseToPattern = (pattern, base) => (0, _utilities.isNegativePattern)(pattern) ?
'!' + _nodePath.default.posix.join(base, pattern.slice(1)) :
_nodePath.default.posix.join(base, pattern);
const parseIgnoreFile = (file, cwd) => {
const base = (0, _slash.default)(_nodePath.default.relative(cwd, _nodePath.default.dirname(file.filePath)));
return file.content.
split(/\r?\n/).
filter((line) => line && !line.startsWith('#')).
map((pattern) => applyBaseToPattern(pattern, base));
};
const toRelativePath = (fileOrDirectory, cwd) => {
cwd = (0, _slash.default)(cwd);
if (_nodePath.default.isAbsolute(fileOrDirectory)) {
if ((0, _slash.default)(fileOrDirectory).startsWith(cwd)) {
return _nodePath.default.relative(cwd, fileOrDirectory);
}
throw new Error(`Path ${fileOrDirectory} is not in cwd ${cwd}`);
}
return fileOrDirectory;
};
const getIsIgnoredPredicate = (files, cwd) => {
const patterns = files.flatMap((file) => parseIgnoreFile(file, cwd));
const ignores = (0, _ignore.default)().add(patterns);
return (fileOrDirectory) => {
fileOrDirectory = (0, _utilities.toPath)(fileOrDirectory);
fileOrDirectory = toRelativePath(fileOrDirectory, cwd);
return fileOrDirectory ? ignores.ignores((0, _slash.default)(fileOrDirectory)) : false;
};
};
const normalizeOptions = (options = {}) => ({
cwd: (0, _utilities.toPath)(options.cwd) || _nodeProcess.default.cwd(),
suppressErrors: Boolean(options.suppressErrors),
deep: typeof options.deep === 'number' ? options.deep : Number.POSITIVE_INFINITY
});
const isIgnoredByIgnoreFiles = async (patterns, options) => {
const { cwd, suppressErrors, deep } = normalizeOptions(options);
const paths = await (0, _fastGlob.default)(patterns, { cwd, suppressErrors, deep, ...ignoreFilesGlobOptions });
const files = await Promise.all(
paths.map(async (filePath) => ({
filePath,
content: await _nodeFs.default.promises.readFile(filePath, 'utf8')
}))
);
return getIsIgnoredPredicate(files, cwd);
};exports.isIgnoredByIgnoreFiles = isIgnoredByIgnoreFiles;
const isIgnoredByIgnoreFilesSync = (patterns, options) => {
const { cwd, suppressErrors, deep } = normalizeOptions(options);
const paths = _fastGlob.default.sync(patterns, { cwd, suppressErrors, deep, ...ignoreFilesGlobOptions });
const files = paths.map((filePath) => ({
filePath,
content: _nodeFs.default.readFileSync(filePath, 'utf8')
}));
return getIsIgnoredPredicate(files, cwd);
};exports.isIgnoredByIgnoreFilesSync = isIgnoredByIgnoreFilesSync;
const isGitIgnored = (options) => isIgnoredByIgnoreFiles(GITIGNORE_FILES_PATTERN, options);exports.isGitIgnored = isGitIgnored;
const isGitIgnoredSync = (options) => isIgnoredByIgnoreFilesSync(GITIGNORE_FILES_PATTERN, options);exports.isGitIgnoredSync = isGitIgnoredSync; /* v7-0eff28242bf3ace2 */

View File

@ -0,0 +1,224 @@
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.isDynamicPattern = exports.globbySync = exports.globbyStream = exports.globby = exports.generateGlobTasksSync = exports.generateGlobTasks = void 0;Object.defineProperty(exports, "isGitIgnored", { enumerable: true, get: function () {return _ignore.isGitIgnored;} });Object.defineProperty(exports, "isGitIgnoredSync", { enumerable: true, get: function () {return _ignore.isGitIgnoredSync;} });var _nodeFs = _interopRequireDefault(require("node:fs"));
var _nodePath = _interopRequireDefault(require("node:path"));
var _merge = _interopRequireDefault(require("merge2"));
var _fastGlob = _interopRequireDefault(require("fast-glob"));
var _dirGlob = _interopRequireDefault(require("dir-glob"));
var _ignore = require("./ignore.js");
var _utilities = require("./utilities.js");function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}
const assertPatternsInput = (patterns) => {
if (patterns.some((pattern) => typeof pattern !== 'string')) {
throw new TypeError('Patterns must be a string or an array of strings');
}
};
const toPatternsArray = (patterns) => {
patterns = [...new Set([patterns].flat())];
assertPatternsInput(patterns);
return patterns;
};
const checkCwdOption = (options) => {
if (!options.cwd) {
return;
}
let stat;
try {
stat = _nodeFs.default.statSync(options.cwd);
} catch {
return;
}
if (!stat.isDirectory()) {
throw new Error('The `cwd` option must be a path to a directory');
}
};
const normalizeOptions = (options = {}) => {
options = {
...options,
ignore: options.ignore || [],
expandDirectories: options.expandDirectories === undefined ?
true :
options.expandDirectories,
cwd: (0, _utilities.toPath)(options.cwd)
};
checkCwdOption(options);
return options;
};
const normalizeArguments = (fn) => async (patterns, options) => fn(toPatternsArray(patterns), normalizeOptions(options));
const normalizeArgumentsSync = (fn) => (patterns, options) => fn(toPatternsArray(patterns), normalizeOptions(options));
const getIgnoreFilesPatterns = (options) => {
const { ignoreFiles, gitignore } = options;
const patterns = ignoreFiles ? toPatternsArray(ignoreFiles) : [];
if (gitignore) {
patterns.push(_ignore.GITIGNORE_FILES_PATTERN);
}
return patterns;
};
const getFilter = async (options) => {
const ignoreFilesPatterns = getIgnoreFilesPatterns(options);
return createFilterFunction(
ignoreFilesPatterns.length > 0 && (await (0, _ignore.isIgnoredByIgnoreFiles)(ignoreFilesPatterns, options))
);
};
const getFilterSync = (options) => {
const ignoreFilesPatterns = getIgnoreFilesPatterns(options);
return createFilterFunction(
ignoreFilesPatterns.length > 0 && (0, _ignore.isIgnoredByIgnoreFilesSync)(ignoreFilesPatterns, options)
);
};
const createFilterFunction = (isIgnored) => {
const seen = new Set();
return (fastGlobResult) => {
const path = fastGlobResult.path || fastGlobResult;
const pathKey = _nodePath.default.normalize(path);
const seenOrIgnored = seen.has(pathKey) || isIgnored && isIgnored(path);
seen.add(pathKey);
return !seenOrIgnored;
};
};
const unionFastGlobResults = (results, filter) => results.flat().filter((fastGlobResult) => filter(fastGlobResult));
const unionFastGlobStreams = (streams, filter) => (0, _merge.default)(streams).pipe(new _utilities.FilterStream((fastGlobResult) => filter(fastGlobResult)));
const convertNegativePatterns = (patterns, options) => {
const tasks = [];
while (patterns.length > 0) {
const index = patterns.findIndex((pattern) => (0, _utilities.isNegativePattern)(pattern));
if (index === -1) {
tasks.push({ patterns, options });
break;
}
const ignorePattern = patterns[index].slice(1);
for (const task of tasks) {
task.options.ignore.push(ignorePattern);
}
if (index !== 0) {
tasks.push({
patterns: patterns.slice(0, index),
options: {
...options,
ignore: [
...options.ignore,
ignorePattern]
}
});
}
patterns = patterns.slice(index + 1);
}
return tasks;
};
const getDirGlobOptions = (options, cwd) => ({
...(cwd ? { cwd } : {}),
...(Array.isArray(options) ? { files: options } : options)
});
const generateTasks = async (patterns, options) => {
const globTasks = convertNegativePatterns(patterns, options);
const { cwd, expandDirectories } = options;
if (!expandDirectories) {
return globTasks;
}
const patternExpandOptions = getDirGlobOptions(expandDirectories, cwd);
const ignoreExpandOptions = cwd ? { cwd } : undefined;
return Promise.all(
globTasks.map(async (task) => {
let { patterns, options } = task;
[
patterns,
options.ignore] =
await Promise.all([
(0, _dirGlob.default)(patterns, patternExpandOptions),
(0, _dirGlob.default)(options.ignore, ignoreExpandOptions)]
);
return { patterns, options };
})
);
};
const generateTasksSync = (patterns, options) => {
const globTasks = convertNegativePatterns(patterns, options);
const { cwd, expandDirectories } = options;
if (!expandDirectories) {
return globTasks;
}
const patternExpandOptions = getDirGlobOptions(expandDirectories, cwd);
const ignoreExpandOptions = cwd ? { cwd } : undefined;
return globTasks.map((task) => {
let { patterns, options } = task;
patterns = _dirGlob.default.sync(patterns, patternExpandOptions);
options.ignore = _dirGlob.default.sync(options.ignore, ignoreExpandOptions);
return { patterns, options };
});
};
const globby = normalizeArguments(async (patterns, options) => {
const [
tasks,
filter] =
await Promise.all([
generateTasks(patterns, options),
getFilter(options)]
);
const results = await Promise.all(tasks.map((task) => (0, _fastGlob.default)(task.patterns, task.options)));
return unionFastGlobResults(results, filter);
});exports.globby = globby;
const globbySync = normalizeArgumentsSync((patterns, options) => {
const tasks = generateTasksSync(patterns, options);
const filter = getFilterSync(options);
const results = tasks.map((task) => _fastGlob.default.sync(task.patterns, task.options));
return unionFastGlobResults(results, filter);
});exports.globbySync = globbySync;
const globbyStream = normalizeArgumentsSync((patterns, options) => {
const tasks = generateTasksSync(patterns, options);
const filter = getFilterSync(options);
const streams = tasks.map((task) => _fastGlob.default.stream(task.patterns, task.options));
return unionFastGlobStreams(streams, filter);
});exports.globbyStream = globbyStream;
const isDynamicPattern = normalizeArgumentsSync(
(patterns, options) => patterns.some((pattern) => _fastGlob.default.isDynamicPattern(pattern, options))
);exports.isDynamicPattern = isDynamicPattern;
const generateGlobTasks = normalizeArguments(generateTasks);exports.generateGlobTasks = generateGlobTasks;
const generateGlobTasksSync = normalizeArgumentsSync(generateTasksSync);exports.generateGlobTasksSync = generateGlobTasksSync; /* v7-5fbae7b710226867 */

View File

@ -0,0 +1,17 @@
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.toPath = exports.isNegativePattern = exports.FilterStream = void 0;var _nodeUrl = require("node:url");
var _nodeStream = require("node:stream");
const toPath = (urlOrPath) => urlOrPath instanceof URL ? (0, _nodeUrl.fileURLToPath)(urlOrPath) : urlOrPath;exports.toPath = toPath;
class FilterStream extends _nodeStream.Transform {
constructor(filter) {
super({
objectMode: true,
transform(data, encoding, callback) {
callback(undefined, filter(data) ? data : undefined);
}
});
}
}exports.FilterStream = FilterStream;
const isNegativePattern = (pattern) => pattern[0] === '!';exports.isNegativePattern = isNegativePattern; /* v7-259a918aa3543465 */

View File

@ -0,0 +1,122 @@
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.default = prettyBytes;const BYTE_UNITS = [
'B',
'kB',
'MB',
'GB',
'TB',
'PB',
'EB',
'ZB',
'YB'];
const BIBYTE_UNITS = [
'B',
'KiB',
'MiB',
'GiB',
'TiB',
'PiB',
'EiB',
'ZiB',
'YiB'];
const BIT_UNITS = [
'b',
'kbit',
'Mbit',
'Gbit',
'Tbit',
'Pbit',
'Ebit',
'Zbit',
'Ybit'];
const BIBIT_UNITS = [
'b',
'kibit',
'Mibit',
'Gibit',
'Tibit',
'Pibit',
'Eibit',
'Zibit',
'Yibit'];
/*
Formats the given number using `Number#toLocaleString`.
- If locale is a string, the value is expected to be a locale-key (for example: `de`).
- If locale is true, the system default locale is used for translation.
- If no value for locale is specified, the number is returned unmodified.
*/
const toLocaleString = (number, locale, options) => {
let result = number;
if (typeof locale === 'string' || Array.isArray(locale)) {
result = number.toLocaleString(locale, options);
} else if (locale === true || options !== undefined) {
result = number.toLocaleString(undefined, options);
}
return result;
};
function prettyBytes(number, options) {
if (!Number.isFinite(number)) {
throw new TypeError(`Expected a finite number, got ${typeof number}: ${number}`);
}
options = {
bits: false,
binary: false,
space: true,
...options
};
const UNITS = options.bits ?
options.binary ? BIBIT_UNITS : BIT_UNITS :
options.binary ? BIBYTE_UNITS : BYTE_UNITS;
const separator = options.space ? ' ' : '';
if (options.signed && number === 0) {
return ` 0${separator}${UNITS[0]}`;
}
const isNegative = number < 0;
const prefix = isNegative ? '-' : options.signed ? '+' : '';
if (isNegative) {
number = -number;
}
let localeOptions;
if (options.minimumFractionDigits !== undefined) {
localeOptions = { minimumFractionDigits: options.minimumFractionDigits };
}
if (options.maximumFractionDigits !== undefined) {
localeOptions = { maximumFractionDigits: options.maximumFractionDigits, ...localeOptions };
}
if (number < 1) {
const numberString = toLocaleString(number, options.locale, localeOptions);
return prefix + numberString + separator + UNITS[0];
}
const exponent = Math.min(Math.floor(options.binary ? Math.log(number) / Math.log(1024) : Math.log10(number) / 3), UNITS.length - 1);
number /= (options.binary ? 1024 : 1000) ** exponent;
if (!localeOptions) {
number = number.toPrecision(3);
}
const numberString = toLocaleString(Number(number), options.locale, localeOptions);
const unit = UNITS[exponent];
return prefix + numberString + separator + unit;
} /* v7-a4da9a491bb897bd */

View File

@ -0,0 +1,10 @@
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.default = slash;function slash(path) {
const isExtendedLengthPath = /^\\\\\?\\/.test(path);
const hasNonAscii = /[^\u0000-\u0080]+/.test(path); // eslint-disable-line no-control-regex
if (isExtendedLengthPath || hasNonAscii) {
return path;
}
return path.replace(/\\/g, '/');
} /* v7-56da1c6249207534 */

View File

@ -0,0 +1,225 @@
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.Chalk = void 0;Object.defineProperty(exports, "backgroundColorNames", { enumerable: true, get: function () {return _index.backgroundColorNames;} });Object.defineProperty(exports, "backgroundColors", { enumerable: true, get: function () {return _index.backgroundColorNames;} });exports.chalkStderr = void 0;Object.defineProperty(exports, "colorNames", { enumerable: true, get: function () {return _index.colorNames;} });Object.defineProperty(exports, "colors", { enumerable: true, get: function () {return _index.colorNames;} });exports.default = void 0;Object.defineProperty(exports, "foregroundColorNames", { enumerable: true, get: function () {return _index.foregroundColorNames;} });Object.defineProperty(exports, "foregroundColors", { enumerable: true, get: function () {return _index.foregroundColorNames;} });Object.defineProperty(exports, "modifierNames", { enumerable: true, get: function () {return _index.modifierNames;} });Object.defineProperty(exports, "modifiers", { enumerable: true, get: function () {return _index.modifierNames;} });exports.supportsColorStderr = exports.supportsColor = void 0;var _ansiStyles = _interopRequireDefault(require("#ansi-styles"));
var _supportsColor = _interopRequireDefault(require("#supports-color"));
var _utilities = require("./utilities.js");
var _index = require("./vendor/ansi-styles/index.js");function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}const { stdout: stdoutColor, stderr: stderrColor } = _supportsColor.default;exports.supportsColorStderr = stderrColor;exports.supportsColor = stdoutColor;const GENERATOR = Symbol('GENERATOR');const STYLER = Symbol('STYLER');const IS_EMPTY = Symbol('IS_EMPTY'); // `supportsColor.level` → `ansiStyles.color[name]` mapping
const levelMapping = ['ansi', 'ansi', 'ansi256', 'ansi16m'];const styles = Object.create(null);const applyOptions = (object, options = {}) => {if (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {throw new Error('The `level` option should be an integer from 0 to 3');} // Detect level if not set manually
const colorLevel = stdoutColor ? stdoutColor.level : 0;object.level = options.level === undefined ? colorLevel : options.level;};class Chalk {constructor(options) {// eslint-disable-next-line no-constructor-return
return chalkFactory(options);}}exports.Chalk = Chalk;const chalkFactory = (options) => {const chalk = (...strings) => strings.join(' ');applyOptions(chalk, options);Object.setPrototypeOf(chalk, createChalk.prototype);return chalk;};function createChalk(options) {return chalkFactory(options);}Object.setPrototypeOf(createChalk.prototype, Function.prototype);for (const [styleName, style] of Object.entries(_ansiStyles.default)) {styles[styleName] = { get() {const builder = createBuilder(this, createStyler(style.open, style.close, this[STYLER]), this[IS_EMPTY]);Object.defineProperty(this, styleName, { value: builder });return builder;} };}styles.visible = { get() {const builder = createBuilder(this, this[STYLER], true);Object.defineProperty(this, 'visible', { value: builder });return builder;} };const getModelAnsi = (model, level, type, ...arguments_) => {if (model === 'rgb') {if (level === 'ansi16m') {return _ansiStyles.default[type].ansi16m(...arguments_);}if (level === 'ansi256') {return _ansiStyles.default[type].ansi256(_ansiStyles.default.rgbToAnsi256(...arguments_));}return _ansiStyles.default[type].ansi(_ansiStyles.default.rgbToAnsi(...arguments_));}if (model === 'hex') {return getModelAnsi('rgb', level, type, ..._ansiStyles.default.hexToRgb(...arguments_));}return _ansiStyles.default[type][model](...arguments_);};const usedModels = ['rgb', 'hex', 'ansi256'];for (const model of usedModels) {styles[model] = { get() {const { level } = this;return function (...arguments_) {const styler = createStyler(getModelAnsi(model, levelMapping[level], 'color', ...arguments_), _ansiStyles.default.color.close, this[STYLER]);return createBuilder(this, styler, this[IS_EMPTY]);};} };const bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);styles[bgModel] = { get() {const { level } = this;return function (...arguments_) {const styler = createStyler(getModelAnsi(model, levelMapping[level], 'bgColor', ...arguments_), _ansiStyles.default.bgColor.close, this[STYLER]);return createBuilder(this, styler, this[IS_EMPTY]);};} };}const proto = Object.defineProperties(() => {}, { ...styles, level: { enumerable: true, get() {return this[GENERATOR].level;}, set(level) {this[GENERATOR].level = level;} } });const createStyler = (open, close, parent) => {let openAll;let closeAll;if (parent === undefined) {openAll = open;closeAll = close;} else {openAll = parent.openAll + open;closeAll = close + parent.closeAll;}return { open, close, openAll, closeAll, parent };};const createBuilder = (self, _styler, _isEmpty) => {// Single argument is hot path, implicit coercion is faster than anything
// eslint-disable-next-line no-implicit-coercion
const builder = (...arguments_) => applyStyle(builder, arguments_.length === 1 ? '' + arguments_[0] : arguments_.join(' ')); // We alter the prototype because we must return a function, but there is
// no way to create a function with a different prototype
Object.setPrototypeOf(builder, proto);builder[GENERATOR] = self;builder[STYLER] = _styler;builder[IS_EMPTY] = _isEmpty;return builder;};const applyStyle = (self, string) => {if (self.level <= 0 || !string) {return self[IS_EMPTY] ? '' : string;}let styler = self[STYLER];if (styler === undefined) {return string;}const { openAll, closeAll } = styler;if (string.includes('\u001B')) {while (styler !== undefined) {// Replace any instances already present with a re-opening code
// otherwise only the part of the string until said closing code
// will be colored, and the rest will simply be 'plain'.
string = (0, _utilities.stringReplaceAll)(string, styler.close, styler.open);styler = styler.parent;}} // We can move both next actions out of loop, because remaining actions in loop won't have
// any/visible effect on parts we add here. Close the styling before a linebreak and reopen
// after next line to fix a bleed issue on macOS: https://github.com/chalk/chalk/pull/92
const lfIndex = string.indexOf('\n');if (lfIndex !== -1) {string = (0, _utilities.stringEncaseCRLFWithFirstIndex)(string, closeAll, openAll, lfIndex);}return openAll + string + closeAll;};Object.defineProperties(createChalk.prototype, styles);const chalk = createChalk();const chalkStderr = createChalk({ level: stderrColor ? stderrColor.level : 0 });exports.chalkStderr = chalkStderr;var _default =
chalk;exports.default = _default; /* v7-ee09f19624a0936b */

View File

@ -0,0 +1,33 @@
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.stringEncaseCRLFWithFirstIndex = stringEncaseCRLFWithFirstIndex;exports.stringReplaceAll = stringReplaceAll; // TODO: When targeting Node.js 16, use `String.prototype.replaceAll`.
function stringReplaceAll(string, substring, replacer) {
let index = string.indexOf(substring);
if (index === -1) {
return string;
}
const substringLength = substring.length;
let endIndex = 0;
let returnValue = '';
do {
returnValue += string.slice(endIndex, index) + substring + replacer;
endIndex = index + substringLength;
index = string.indexOf(substring, endIndex);
} while (index !== -1);
returnValue += string.slice(endIndex);
return returnValue;
}
function stringEncaseCRLFWithFirstIndex(string, prefix, postfix, index) {
let endIndex = 0;
let returnValue = '';
do {
const gotCR = string[index - 1] === '\r';
returnValue += string.slice(endIndex, gotCR ? index - 1 : index) + prefix + (gotCR ? '\r\n' : '\n') + postfix;
endIndex = index + 1;
index = string.indexOf('\n', endIndex);
} while (index !== -1);
returnValue += string.slice(endIndex);
return returnValue;
} /* v7-255e1aba69efb0ea */

View File

@ -0,0 +1,10 @@
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0;var _unbuild = require("unbuild");var _default =
(0, _unbuild.defineBuildConfig)({
clean: true,
entries: ['src/index'],
declaration: true,
rollup: {
emitCJS: true
}
});exports.default = _default; /* v7-e617738d05bbbbdb */

View File

@ -0,0 +1,182 @@
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.createSupportsColor = createSupportsColor;exports.default = void 0;var _nodeProcess = _interopRequireDefault(require("node:process"));
var _nodeOs = _interopRequireDefault(require("node:os"));
var _nodeTty = _interopRequireDefault(require("node:tty"));function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}
// From: https://github.com/sindresorhus/has-flag/blob/main/index.js
/// function hasFlag(flag, argv = globalThis.Deno?.args ?? process.argv) {
function hasFlag(flag, argv = globalThis.Deno ? globalThis.Deno.args : _nodeProcess.default.argv) {
const prefix = flag.startsWith('-') ? '' : flag.length === 1 ? '-' : '--';
const position = argv.indexOf(prefix + flag);
const terminatorPosition = argv.indexOf('--');
return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);
}
const { env } = _nodeProcess.default;
let flagForceColor;
if (
hasFlag('no-color') ||
hasFlag('no-colors') ||
hasFlag('color=false') ||
hasFlag('color=never'))
{
flagForceColor = 0;
} else if (
hasFlag('color') ||
hasFlag('colors') ||
hasFlag('color=true') ||
hasFlag('color=always'))
{
flagForceColor = 1;
}
function envForceColor() {
if ('FORCE_COLOR' in env) {
if (env.FORCE_COLOR === 'true') {
return 1;
}
if (env.FORCE_COLOR === 'false') {
return 0;
}
return env.FORCE_COLOR.length === 0 ? 1 : Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3);
}
}
function translateLevel(level) {
if (level === 0) {
return false;
}
return {
level,
hasBasic: true,
has256: level >= 2,
has16m: level >= 3
};
}
function _supportsColor(haveStream, { streamIsTTY, sniffFlags = true } = {}) {
const noFlagForceColor = envForceColor();
if (noFlagForceColor !== undefined) {
flagForceColor = noFlagForceColor;
}
const forceColor = sniffFlags ? flagForceColor : noFlagForceColor;
if (forceColor === 0) {
return 0;
}
if (sniffFlags) {
if (hasFlag('color=16m') ||
hasFlag('color=full') ||
hasFlag('color=truecolor')) {
return 3;
}
if (hasFlag('color=256')) {
return 2;
}
}
// Check for Azure DevOps pipelines.
// Has to be above the `!streamIsTTY` check.
if ('TF_BUILD' in env && 'AGENT_NAME' in env) {
return 1;
}
if (haveStream && !streamIsTTY && forceColor === undefined) {
return 0;
}
const min = forceColor || 0;
if (env.TERM === 'dumb') {
return min;
}
if (_nodeProcess.default.platform === 'win32') {
// Windows 10 build 10586 is the first Windows release that supports 256 colors.
// Windows 10 build 14931 is the first release that supports 16m/TrueColor.
const osRelease = _nodeOs.default.release().split('.');
if (
Number(osRelease[0]) >= 10 &&
Number(osRelease[2]) >= 10_586)
{
return Number(osRelease[2]) >= 14_931 ? 3 : 2;
}
return 1;
}
if ('CI' in env) {
if ('GITHUB_ACTIONS' in env || 'GITEA_ACTIONS' in env) {
return 3;
}
if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'BUILDKITE', 'DRONE'].some((sign) => sign in env) || env.CI_NAME === 'codeship') {
return 1;
}
return min;
}
if ('TEAMCITY_VERSION' in env) {
return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;
}
if (env.COLORTERM === 'truecolor') {
return 3;
}
if (env.TERM === 'xterm-kitty') {
return 3;
}
if ('TERM_PROGRAM' in env) {
const version = Number.parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);
switch (env.TERM_PROGRAM) {
case 'iTerm.app':{
return version >= 3 ? 3 : 2;
}
case 'Apple_Terminal':{
return 2;
}
// No default
}
}
if (/-256(color)?$/i.test(env.TERM)) {
return 2;
}
if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {
return 1;
}
if ('COLORTERM' in env) {
return 1;
}
return min;
}
function createSupportsColor(stream, options = {}) {
const level = _supportsColor(stream, {
streamIsTTY: stream && stream.isTTY,
...options
});
return translateLevel(level);
}
const supportsColor = {
stdout: createSupportsColor({ isTTY: _nodeTty.default.isatty(1) }),
stderr: createSupportsColor({ isTTY: _nodeTty.default.isatty(2) })
};var _default =
supportsColor;exports.default = _default; /* v7-75cc7f0b87ad9e85 */

View File

@ -0,0 +1,10 @@
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0;var _unbuild = require("unbuild");var _default =
(0, _unbuild.defineBuildConfig)({
clean: true,
entries: ['src/index'],
declaration: true,
rollup: {
emitCJS: true
}
});exports.default = _default; /* v7-e617738d05bbbbdb */

13
packages/types/package-lock.json generated Normal file
View File

@ -0,0 +1,13 @@
{
"name": "@vben/types",
"version": "1.0.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@vben/types",
"version": "1.0.0",
"license": "MIT"
}
}
}

BIN
public/.DS_Store vendored Normal file

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 17 KiB

BIN
public/resource/img/.DS_Store vendored Normal file

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 35 KiB

BIN
src/assets/images/logo1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View File

@ -53,7 +53,7 @@
font-size: 14px; font-size: 14px;
img { img {
width: @logo-width; // width: @logo-width;
height: @logo-width; height: @logo-width;
margin-right: 2px; margin-right: 2px;
} }

View File

@ -179,9 +179,11 @@
&-logo { &-logo {
height: @header-height; height: @header-height;
padding: 10px 4px 10px 10px; padding: 10px 4px 10px 10px;
// add
justify-content: center;
img { img {
width: @logo-width; // width: @logo-width;
height: @logo-width; height: @logo-width;
} }
} }

View File

@ -53,7 +53,7 @@
}, },
]" ]"
> >
<span class="text"> {{ title }}</span> <span class="text">{{ title }}</span>
<Icon <Icon
:size="16" :size="16"
:icon="getMixSideFixed ? 'ri:pushpin-2-fill' : 'ri:pushpin-2-line'" :icon="getMixSideFixed ? 'ri:pushpin-2-fill' : 'ri:pushpin-2-line'"
@ -368,7 +368,7 @@
padding-left: 0 !important; padding-left: 0 !important;
img { img {
width: @logo-width; // width: @logo-width;
height: @logo-width; height: @logo-width;
} }
} }

View File

@ -1,181 +1,181 @@
export default { export default {
api: { api: {
operationSuccess: 'Operation Success', operationSuccess: 'Operation Success',
operationFailed: 'Operation failed', operationFailed: 'Operation failed',
errorTip: 'Error Tip', errorTip: 'Error Tip',
successTip: 'Success Tip', successTip: 'Success Tip',
errorMessage: 'The operation failed, the system is abnormal!', errorMessage: 'The operation failed, the system is abnormal!',
timeoutMessage: 'Login timed out, please log in again!', timeoutMessage: 'Login timed out, please log in again!',
apiTimeoutMessage: 'The interface request timed out, please refresh the page and try again!', apiTimeoutMessage: 'The interface request timed out, please refresh the page and try again!',
apiRequestFailed: 'The interface request failed, please try again later!', apiRequestFailed: 'The interface request failed, please try again later!',
networkException: 'network anomaly', networkException: 'network anomaly',
networkExceptionMsg: networkExceptionMsg:
'Please check if your network connection is normal! The network is abnormal', 'Please check if your network connection is normal! The network is abnormal',
refreshBrowser: 'The network is busy now, please press F5 to refresh your browser', refreshBrowser: 'The network is busy now, please press F5 to refresh your browser',
errMsg401: 'The user does not have permission (token, user name, password error)!', errMsg401: 'The user does not have permission (token, user name, password error)!',
errMsg403: 'The user is authorized, but access is forbidden!', errMsg403: 'The user is authorized, but access is forbidden!',
errMsg404: 'Network request error, the resource was not found!', errMsg404: 'Network request error, the resource was not found!',
errMsg405: 'Network request error, request method not allowed!', errMsg405: 'Network request error, request method not allowed!',
errMsg408: 'Network request timed out!', errMsg408: 'Network request timed out!',
errMsg500: 'Server error, please contact the administrator!', errMsg500: 'Server error, please contact the administrator!',
errMsg501: 'The network is not implemented!', errMsg501: 'The network is not implemented!',
errMsg502: 'Network Error!', errMsg502: 'Network Error!',
errMsg503: 'The service is unavailable, the server is temporarily overloaded or maintained!', errMsg503: 'The service is unavailable, the server is temporarily overloaded or maintained!',
errMsg504: 'Network timeout!', errMsg504: 'Network timeout!',
errMsg505: 'The http version does not support the request!', errMsg505: 'The http version does not support the request!',
}, },
app: { app: {
logoutTip: 'Reminder', logoutTip: 'Reminder',
logoutMessage: 'Confirm to exit the system?', logoutMessage: 'Confirm to exit the system?',
menuLoading: 'Menu loading...', menuLoading: 'Menu loading...',
}, },
errorLog: { errorLog: {
tableTitle: 'Error log list', tableTitle: 'Error log list',
tableColumnType: 'Type', tableColumnType: 'Type',
tableColumnDate: 'Time', tableColumnDate: 'Time',
tableColumnFile: 'File', tableColumnFile: 'File',
tableColumnMsg: 'Error message', tableColumnMsg: 'Error message',
tableColumnStackMsg: 'Stack info', tableColumnStackMsg: 'Stack info',
tableActionDesc: 'Details', tableActionDesc: 'Details',
modalTitle: 'Error details', modalTitle: 'Error details',
fireVueError: 'Fire vue error', fireVueError: 'Fire vue error',
fireResourceError: 'Fire resource error', fireResourceError: 'Fire resource error',
fireAjaxError: 'Fire ajax error', fireAjaxError: 'Fire ajax error',
enableMessage: 'Only effective when useErrorHandle=true in `/src/settings/projectSetting.ts`.', enableMessage: 'Only effective when useErrorHandle=true in `/src/settings/projectSetting.ts`.',
}, },
exception: { exception: {
backLogin: 'Back Login', backLogin: 'Back Login',
backHome: 'Back Home', backHome: 'Back Home',
subTitle403: "Sorry, you don't have access to this page.", subTitle403: "Sorry, you don't have access to this page.",
subTitle404: 'Sorry, the page you visited does not exist.', subTitle404: 'Sorry, the page you visited does not exist.',
subTitle500: 'Sorry, the server is reporting an error.', subTitle500: 'Sorry, the server is reporting an error.',
noDataTitle: 'No data on the current page.', noDataTitle: 'No data on the current page.',
networkErrorTitle: 'Network Error', networkErrorTitle: 'Network Error',
networkErrorSubTitle: networkErrorSubTitle:
'SorryYour network connection has been disconnected, please check your network!', 'SorryYour network connection has been disconnected, please check your network!',
}, },
lock: { lock: {
unlock: 'Click to unlock', unlock: 'Click to unlock',
alert: 'Lock screen password error', alert: 'Lock screen password error',
backToLogin: 'Back to login', backToLogin: 'Back to login',
entry: 'Enter the system', entry: 'Enter the system',
placeholder: 'Please enter the lock screen password or user password', placeholder: 'Please enter the lock screen password or user password',
}, },
login: { login: {
captcha: 'Verification code', captcha: 'Verification code',
backSignIn: 'Back sign in', backSignIn: 'Back sign in',
mobileSignInFormTitle: 'Mobile sign in', mobileSignInFormTitle: 'Mobile sign in',
qrSignInFormTitle: 'Qr sign in', qrSignInFormTitle: 'Qr sign in',
emailFormTitle: 'Email sign in', emailFormTitle: 'Email sign in',
signInFormTitle: 'Sign in', signInFormTitle: 'Sign in',
signUpFormTitle: 'Sign up', signUpFormTitle: 'Sign up',
forgetFormTitle: 'Reset password', forgetFormTitle: 'Reset password',
signInTitle: 'Provide next-generation intelligent ERP system software for enterprises', signInTitle: 'Provide next-generation intelligent ERP system software for enterprises',
signInDesc: '© 2023-2033 Wan Sen ERP - All Right Reserved', signInDesc: '© 2023-2033 曲和科技 - All Right Reserved',
policy: 'I agree, to the WanSer ERP System Privacy Policy', policy: 'I agree, to the WanSer ERP System Privacy Policy',
scanSign: `scanning the code to complete the login`, scanSign: `scanning the code to complete the login`,
loginButton: 'Sign in', loginButton: 'Sign in',
registerButton: 'Sign up', registerButton: 'Sign up',
rememberMe: 'Remember me', rememberMe: 'Remember me',
forgetPassword: 'Forget Password?', forgetPassword: 'Forget Password?',
otherSignIn: 'Sign in with', otherSignIn: 'Sign in with',
// notify // notify
loginSuccessTitle: 'Login successful', loginSuccessTitle: 'Login successful',
loginSuccessDesc: 'Welcome back', loginSuccessDesc: 'Welcome back',
// placeholder // placeholder
accountPlaceholder: 'Please input username', accountPlaceholder: 'Please input username',
passwordPlaceholder: 'Please input password', passwordPlaceholder: 'Please input password',
captchaPlaceholder: 'Please input verification code', captchaPlaceholder: 'Please input verification code',
correctMobilePlaceholder: 'Please enter the correct phone number', correctMobilePlaceholder: 'Please enter the correct phone number',
correctEmailPlaceholder: 'Please enter the correct email address', correctEmailPlaceholder: 'Please enter the correct email address',
smsPlaceholder: 'Please input sms code', smsPlaceholder: 'Please input sms code',
mobilePlaceholder: 'Please input mobile', mobilePlaceholder: 'Please input mobile',
emailPlaceholder: 'Please input email', emailPlaceholder: 'Please input email',
policyPlaceholder: 'Register after checking', policyPlaceholder: 'Register after checking',
diffPwd: 'The two passwords are inconsistent', diffPwd: 'The two passwords are inconsistent',
userName: 'Username', userName: 'Username',
password: 'Password', password: 'Password',
confirmPassword: 'Confirm Password', confirmPassword: 'Confirm Password',
newPassword: 'New Password', newPassword: 'New Password',
updatePassword: 'Change Password', updatePassword: 'Change Password',
email: 'Email', email: 'Email',
emailCode: 'Email code', emailCode: 'Email code',
smsCode: 'SMS code', smsCode: 'SMS code',
mobile: 'Mobile', mobile: 'Mobile',
}, },
user: { user: {
userList: 'User Table', userList: 'User Table',
name: 'Nick Name', name: 'Nick Name',
status: 'Status', status: 'Status',
roleName: 'Role Name', roleName: 'Role Name',
department: 'Department', department: 'Department',
remake: 'Remark', remake: 'Remark',
addAccount: 'Add Account', addAccount: 'Add Account',
editAccount: 'Edit Account', editAccount: 'Edit Account',
notAllowAddUser: 'The current tenant has reached the maximum number of users that can be added', notAllowAddUser: 'The current tenant has reached the maximum number of users that can be added',
// user table list action // user table list action
viewUserDetails: 'View User Details', viewUserDetails: 'View User Details',
editUserProfile: 'Edit User Profile', editUserProfile: 'Edit User Profile',
resetUserPassword: 'Reset User Password', resetUserPassword: 'Reset User Password',
confirmPasswordReset: 'Are you sure to reset the password to 123456', confirmPasswordReset: 'Are you sure to reset the password to 123456',
deleteUserAccount: 'Delete User Account' deleteUserAccount: 'Delete User Account'
}, },
tenant: { tenant: {
tenantList: 'Tenant List', tenantList: 'Tenant List',
addTenant: 'Add Tenant', addTenant: 'Add Tenant',
editTenant: 'Edit Tenant', editTenant: 'Edit Tenant',
deleteTenant: 'Delete Tenant', deleteTenant: 'Delete Tenant',
form: { form: {
name: 'Tenant Name', name: 'Tenant Name',
status: 'Status', status: 'Status',
free: 'Free Tenant', free: 'Free Tenant',
pay: 'Pay Tenant', pay: 'Pay Tenant',
type: 'Type', type: 'Type',
remark: 'Remark', remark: 'Remark',
userNumLimit: 'User Number Limit', userNumLimit: 'User Number Limit',
expireTime: 'Expire Time', expireTime: 'Expire Time',
noticeOne: 'Please default to select the tenant administrator role', noticeOne: 'Please default to select the tenant administrator role',
noticeTwo: 'If not filled in, the default password is 123456', noticeTwo: 'If not filled in, the default password is 123456',
noticeThree: 'Cannot enter a username with admin', noticeThree: 'Cannot enter a username with admin',
noticeFour: 'After expiration, all users under the tenant are unable to login and use the system', noticeFour: 'After expiration, all users under the tenant are unable to login and use the system',
}
},
table: {
add: 'Add Data',
edit: 'Edit Data',
delete: 'Delete Data',
batchDelete: 'Batch Delete Data',
exportData: 'Export Data',
approve: 'Receipt Approval',
reject: 'Receipt Rejection',
audited: 'Audited',
unaudited: 'Unaudited',
viewReceiptDetails: 'View Receipt Detail',
confirmDelete: 'Are you sure to delete this data?',
confirmExport: 'Confirm Export',
confirmExportTextOne: 'Export',
confirmExportTextTwo: 'Data loading, please be patient',
confirmExportTextThree: 'If you need to export detailed data (which may take a long time), please check the box below.',
confirmExportTextFour: 'Need to export detailed data',
type: 'Type',
subType: 'Sub Type',
},
modal: {
cover: 'Yes',
cancel: 'No',
},
language: {
enUS: 'English',
zhCN: '简体中文',
} }
},
table: {
add: 'Add Data',
edit: 'Edit Data',
delete: 'Delete Data',
batchDelete: 'Batch Delete Data',
exportData: 'Export Data',
approve: 'Receipt Approval',
reject: 'Receipt Rejection',
audited: 'Audited',
unaudited: 'Unaudited',
viewReceiptDetails: 'View Receipt Detail',
confirmDelete: 'Are you sure to delete this data?',
confirmExport: 'Confirm Export',
confirmExportTextOne: 'Export',
confirmExportTextTwo: 'Data loading, please be patient',
confirmExportTextThree: 'If you need to export detailed data (which may take a long time), please check the box below.',
confirmExportTextFour: 'Need to export detailed data',
type: 'Type',
subType: 'Sub Type',
},
modal: {
cover: 'Yes',
cancel: 'No',
},
language: {
enUS: 'English',
zhCN: '简体中文',
}
}; };

View File

@ -1,174 +1,174 @@
export default { export default {
api: { api: {
operationSuccess: '操作成功', operationSuccess: '操作成功',
operationFailed: '操作失败', operationFailed: '操作失败',
errorTip: '错误提示', errorTip: '错误提示',
successTip: '成功提示', successTip: '成功提示',
errorMessage: '操作失败,系统异常!', errorMessage: '操作失败,系统异常!',
timeoutMessage: '登录超时,请重新登录!', timeoutMessage: '登录超时,请重新登录!',
apiTimeoutMessage: '接口请求超时,请刷新页面重试!', apiTimeoutMessage: '接口请求超时,请刷新页面重试!',
apiRequestFailed: '请求出错,请稍候重试', apiRequestFailed: '请求出错,请稍候重试',
networkException: '网络异常', networkException: '网络异常',
networkExceptionMsg: '网络异常,请检查您的网络连接是否正常!', networkExceptionMsg: '网络异常,请检查您的网络连接是否正常!',
refreshBrowser: '网络当前繁忙请按F5刷新浏览器', refreshBrowser: '网络当前繁忙请按F5刷新浏览器',
errMsg401: '用户没有权限(令牌、用户名、密码错误)!', errMsg401: '用户没有权限(令牌、用户名、密码错误)!',
errMsg403: '用户得到授权,但是访问是被禁止的。!', errMsg403: '用户得到授权,但是访问是被禁止的。!',
errMsg404: '网络请求错误,未找到该资源!', errMsg404: '网络请求错误,未找到该资源!',
errMsg405: '网络请求错误,请求方法未允许!', errMsg405: '网络请求错误,请求方法未允许!',
errMsg408: '网络请求超时!', errMsg408: '网络请求超时!',
errMsg500: '服务器错误,请联系管理员!', errMsg500: '服务器错误,请联系管理员!',
errMsg501: '网络未实现!', errMsg501: '网络未实现!',
errMsg502: '网络错误!', errMsg502: '网络错误!',
errMsg503: '服务不可用,服务器暂时过载或维护!', errMsg503: '服务不可用,服务器暂时过载或维护!',
errMsg504: '网络超时!', errMsg504: '网络超时!',
errMsg505: 'http版本不支持该请求!', errMsg505: 'http版本不支持该请求!',
}, },
app: { logoutTip: '温馨提醒', logoutMessage: '是否确认退出系统?', menuLoading: '菜单加载中...' }, app: { logoutTip: '温馨提醒', logoutMessage: '是否确认退出系统?', menuLoading: '菜单加载中...' },
errorLog: { errorLog: {
tableTitle: '错误日志列表', tableTitle: '错误日志列表',
tableColumnType: '类型', tableColumnType: '类型',
tableColumnDate: '时间', tableColumnDate: '时间',
tableColumnFile: '文件', tableColumnFile: '文件',
tableColumnMsg: '错误信息', tableColumnMsg: '错误信息',
tableColumnStackMsg: 'stack信息', tableColumnStackMsg: 'stack信息',
tableActionDesc: '详情', tableActionDesc: '详情',
modalTitle: '错误详情', modalTitle: '错误详情',
fireVueError: '点击触发vue错误', fireVueError: '点击触发vue错误',
fireResourceError: '点击触发资源加载错误', fireResourceError: '点击触发资源加载错误',
fireAjaxError: '点击触发ajax错误', fireAjaxError: '点击触发ajax错误',
enableMessage: '只在`/src/settings/projectSetting.ts` 内的useErrorHandle=true时生效.', enableMessage: '只在`/src/settings/projectSetting.ts` 内的useErrorHandle=true时生效.',
}, },
exception: { exception: {
backLogin: '返回登录', backLogin: '返回登录',
backHome: '返回首页', backHome: '返回首页',
subTitle403: '抱歉,您无权访问此页面。', subTitle403: '抱歉,您无权访问此页面。',
subTitle404: '抱歉,您访问的页面不存在。', subTitle404: '抱歉,您访问的页面不存在。',
subTitle500: '抱歉,服务器报告错误。', subTitle500: '抱歉,服务器报告错误。',
noDataTitle: '当前页无数据', noDataTitle: '当前页无数据',
networkErrorTitle: '网络错误', networkErrorTitle: '网络错误',
networkErrorSubTitle: '抱歉,您的网络连接已断开,请检查您的网络!', networkErrorSubTitle: '抱歉,您的网络连接已断开,请检查您的网络!',
}, },
lock: { lock: {
unlock: '点击解锁', unlock: '点击解锁',
alert: '锁屏密码错误', alert: '锁屏密码错误',
backToLogin: '返回登录', backToLogin: '返回登录',
entry: '进入系统', entry: '进入系统',
placeholder: '请输入锁屏密码或者用户密码', placeholder: '请输入锁屏密码或者用户密码',
}, },
login: { login: {
captcha: '验证码', captcha: '验证码',
backSignIn: '返回', backSignIn: '返回',
signInFormTitle: '登录', signInFormTitle: '登录',
mobileSignInFormTitle: '手机登录', mobileSignInFormTitle: '手机登录',
qrSignInFormTitle: '扫码登录', qrSignInFormTitle: '扫码登录',
emailFormTitle: '邮箱登录', emailFormTitle: '邮箱登录',
signUpFormTitle: '注册租户', signUpFormTitle: '注册租户',
forgetFormTitle: '重置密码', forgetFormTitle: '重置密码',
signInTitle: '为企业提供下一代智能ERP系统软件', signInTitle: '为企业提供下一代智能ERP系统软件',
signInDesc: '© 2023-2033 Wan Sen ERP - All Right Reserved 版权所有', signInDesc: '© 2023-2033 曲和科技 - All Right Reserved 版权所有',
policy: '我同意《万森ERP系统》隐私政策', policy: '我同意《万森ERP系统》隐私政策',
scanSign: `扫码后点击"确认",即可完成登录`, scanSign: `扫码后点击"确认",即可完成登录`,
loginButton: '登录', loginButton: '登录',
registerButton: '注册租户', registerButton: '注册租户',
rememberMe: '记住我', rememberMe: '记住我',
forgetPassword: '忘记密码?', forgetPassword: '忘记密码?',
otherSignIn: '其他登录方式', otherSignIn: '其他登录方式',
// notify // notify
loginSuccessTitle: '登录成功', loginSuccessTitle: '登录成功',
loginSuccessDesc: '欢迎回来', loginSuccessDesc: '欢迎回来',
// placeholder // placeholder
accountPlaceholder: '请输入账号', accountPlaceholder: '请输入账号',
passwordPlaceholder: '请输入密码', passwordPlaceholder: '请输入密码',
captchaPlaceholder: '请输入验证码', captchaPlaceholder: '请输入验证码',
smsPlaceholder: '请输入验证码', smsPlaceholder: '请输入验证码',
mobilePlaceholder: '请输入手机号码', mobilePlaceholder: '请输入手机号码',
emailPlaceholder: '请输入邮箱地址', emailPlaceholder: '请输入邮箱地址',
policyPlaceholder: '勾选后才能注册', policyPlaceholder: '勾选后才能注册',
diffPwd: '两次输入密码不一致', diffPwd: '两次输入密码不一致',
correctMobilePlaceholder: '请输入正确的手机号码', correctMobilePlaceholder: '请输入正确的手机号码',
correctEmailPlaceholder: '请输入正确的邮箱地址', correctEmailPlaceholder: '请输入正确的邮箱地址',
userName: '账号', userName: '账号',
password: '密码', password: '密码',
confirmPassword: '确认密码', confirmPassword: '确认密码',
newPassword: '新密码', newPassword: '新密码',
updatePassword: '修改密码', updatePassword: '修改密码',
email: '邮箱', email: '邮箱',
emailCode: '邮箱验证码', emailCode: '邮箱验证码',
smsCode: '短信验证码', smsCode: '短信验证码',
mobile: '手机号码', mobile: '手机号码',
}, },
user: { user: {
userList: '用户列表', userList: '用户列表',
name: '昵称', name: '昵称',
status: '用户状态', status: '用户状态',
roleName: '角色', roleName: '角色',
department: '所属部门', department: '所属部门',
remake: '备注', remake: '备注',
addAccount: '新增账户', addAccount: '新增账户',
editAccount: '编辑账户', editAccount: '编辑账户',
notAllowAddUser: '当前租户可添加的用户数量已达上限', notAllowAddUser: '当前租户可添加的用户数量已达上限',
// 用户数据表格操作 // 用户数据表格操作
viewUserDetails: '查看用户详情', viewUserDetails: '查看用户详情',
editUserProfile: '编辑用户资料', editUserProfile: '编辑用户资料',
resetUserPassword: '重置密码', resetUserPassword: '重置密码',
confirmPasswordReset: '确定重置密码为123456吗', confirmPasswordReset: '确定重置密码为123456吗',
deleteUserAccount: '删除账号' deleteUserAccount: '删除账号'
}, },
tenant: { tenant: {
tenantList: '租户列表', tenantList: '租户列表',
addTenant: '新增租户', addTenant: '新增租户',
editTenant: '编辑租户', editTenant: '编辑租户',
deleteTenant: '删除租户', deleteTenant: '删除租户',
form: { form: {
name: '租户名称', name: '租户名称',
status: '租户状态', status: '租户状态',
free: '免费租户', free: '免费租户',
pay: '付费租户', pay: '付费租户',
type: '租户类型', type: '租户类型',
remark: '备注', remark: '备注',
userNumLimit: '用户数量限制', userNumLimit: '用户数量限制',
expireTime: '到期时间', expireTime: '到期时间',
noticeOne: '请默认选择租户管理员角色', noticeOne: '请默认选择租户管理员角色',
noticeTwo: '如果不填写则默认密码为123456', noticeTwo: '如果不填写则默认密码为123456',
noticeThree: '不能输入带有admin的用户名', noticeThree: '不能输入带有admin的用户名',
noticeFour: '到期后租户下的所有用户无法登录使用系统', noticeFour: '到期后租户下的所有用户无法登录使用系统',
}
},
table: {
add: '新增',
edit: '编辑',
delete: '删除',
batchDelete: '批量删除',
exportData: '导出数据',
approve: '审核',
reject: '驳回',
audited: '已审核',
unaudited: '未审核',
viewReceiptDetails: '查看单据详情',
confirmDelete: '是否确认删除数据?',
confirmExport: '确认导出',
confirmExportTextOne: '导出',
confirmExportTextTwo: '数据加载中,请耐心等待。',
confirmExportTextThree: '如果您需要导出详细数据(可能需要很长时间),请勾选下面的框。',
confirmExportTextFour: '需要导出详细数据',
type: '类型',
subType: '子类型',
},
modal: {
cover: '确认',
cancel: '取消',
},
language: {
enUS: 'English',
zhCN: '简体中文',
} }
},
table: {
add: '新增',
edit: '编辑',
delete: '删除',
batchDelete: '批量删除',
exportData: '导出数据',
approve: '审核',
reject: '驳回',
audited: '已审核',
unaudited: '未审核',
viewReceiptDetails: '查看单据详情',
confirmDelete: '是否确认删除数据?',
confirmExport: '确认导出',
confirmExportTextOne: '导出',
confirmExportTextTwo: '数据加载中,请耐心等待。',
confirmExportTextThree: '如果您需要导出详细数据(可能需要很长时间),请勾选下面的框。',
confirmExportTextFour: '需要导出详细数据',
type: '类型',
subType: '子类型',
},
modal: {
cover: '确认',
cancel: '取消',
},
language: {
enUS: 'English',
zhCN: '简体中文',
}
}; };

View File

@ -1,144 +1,144 @@
interface GroupItem { interface GroupItem {
title: string; title: string;
icon: string; icon: string;
color: string; color: string;
desc: string; desc: string;
date: string; date: string;
group: string; group: string;
} }
interface NavItem { interface NavItem {
title: string; title: string;
icon: string; icon: string;
color: string; color: string;
} }
interface DynamicInfoItem { interface DynamicInfoItem {
avatar: string; avatar: string;
name: string; name: string;
date: string; date: string;
desc: string; desc: string;
} }
export const navItems: NavItem[] = [ export const navItems: NavItem[] = [
{ {
title: '首页', title: '首页',
icon: 'ion:home-outline', icon: 'ion:home-outline',
color: '#1fdaca', color: '#1fdaca',
}, },
{ {
title: '仪表盘', title: '仪表盘',
icon: 'ion:grid-outline', icon: 'ion:grid-outline',
color: '#bf0c2c', color: '#bf0c2c',
}, },
{ {
title: 'OA内部办公系统', title: 'OA办公系统',
icon: 'ion:layers-outline', icon: 'ion:layers-outline',
color: '#e18525', color: '#e18525',
}, },
{ {
title: '系统管理', title: '系统管理',
icon: 'ion:settings-outline', icon: 'ion:settings-outline',
color: '#3fb27f', color: '#3fb27f',
}, },
{ {
title: '权限管理', title: '权限管理',
icon: 'ion:key-outline', icon: 'ion:key-outline',
color: '#4daf1bc9', color: '#4daf1bc9',
}, },
{ {
title: '报表查询', title: '报表查询',
icon: 'ion:bar-chart-outline', icon: 'ion:bar-chart-outline',
color: '#00d8ff', color: '#00d8ff',
}, },
]; ];
export const dynamicInfoItems: DynamicInfoItem[] = [ export const dynamicInfoItems: DynamicInfoItem[] = [
{ {
avatar: 'dynamic-avatar-1|svg', avatar: 'dynamic-avatar-1|svg',
name: '小李', name: '小李',
date: '刚刚', date: '刚刚',
desc: `在 <a>A仓库</a> 采购了100个零件 <a>H3C</a>`, desc: `在 <a>A仓库</a> 采购了100个零件 <a>H3C</a>`,
}, },
{ {
avatar: 'dynamic-avatar-2|svg', avatar: 'dynamic-avatar-2|svg',
name: '艾文', name: '艾文',
date: '1个小时前', date: '1个小时前',
desc: `关注了 <a>小李</a> `, desc: `关注了 <a>小李</a> `,
}, },
{ {
avatar: 'dynamic-avatar-3|svg', avatar: 'dynamic-avatar-3|svg',
name: '克里斯', name: '克里斯',
date: '1天前', date: '1天前',
desc: `发布了 <a>本月采购物料表</a> `, desc: `发布了 <a>本月采购物料表</a> `,
}, },
{ {
avatar: 'dynamic-avatar-4|svg', avatar: 'dynamic-avatar-4|svg',
name: '赵伟', name: '赵伟',
date: '2天前', date: '2天前',
desc: `发表文章 <a>企业如何集成GPT微调模型配合ERP使用</a> `, desc: `发表文章 <a>企业如何集成GPT微调模型配合ERP使用</a> `,
}, },
{ {
avatar: 'dynamic-avatar-5|svg', avatar: 'dynamic-avatar-5|svg',
name: '皮特', name: '皮特',
date: '3天前', date: '3天前',
desc: `回复了 <a>赵伟</a> 的问题 <a>如何让用户能直接微调模型?</a>`, desc: `回复了 <a>赵伟</a> 的问题 <a>如何让用户能直接微调模型?</a>`,
}, },
{ {
avatar: 'dynamic-avatar-6|svg', avatar: 'dynamic-avatar-6|svg',
name: '杰克', name: '杰克',
date: '1周前', date: '1周前',
desc: `添加了会员 <a>检测公司的会员</a> `, desc: `添加了会员 <a>检测公司的会员</a> `,
}, },
]; ];
export const groupItems: GroupItem[] = [ export const groupItems: GroupItem[] = [
{ {
title: 'WanSen ERP Core', title: 'WanSen ERP Core',
icon: 'carbon:logo-github', icon: 'carbon:logo-github',
color: '', color: '',
desc: 'ERP系统的API', desc: 'ERP系统的API',
group: '万森智能开源组', group: '万森智能开源组',
date: '2023-09-28', date: '2023-09-28',
}, },
{ {
title: 'WanSen ERP', title: 'WanSen ERP',
icon: 'ion:logo-vue', icon: 'ion:logo-vue',
color: '#3fb27f', color: '#3fb27f',
desc: '该项目使用了Vue3+Vite+Ant-Design', desc: '该项目使用了Vue3+Vite+Ant-Design',
group: '前端开发小组', group: '前端开发小组',
date: '2023-09-28', date: '2023-09-28',
}, },
{ {
title: 'Html 5', title: 'Html 5',
icon: 'ion:logo-html5', icon: 'ion:logo-html5',
color: '#e18525', color: '#e18525',
desc: '该项目也使用了HTML5', desc: '该项目也使用了HTML5',
group: '前端开发小组', group: '前端开发小组',
date: '2023-10-01', date: '2023-10-01',
}, },
{ {
title: 'Angular', title: 'Angular',
icon: 'ion:logo-angular', icon: 'ion:logo-angular',
color: '#bf0c2c', color: '#bf0c2c',
desc: '设计新的页面交互', desc: '设计新的页面交互',
group: 'UI组', group: 'UI组',
date: '2023-10-01', date: '2023-10-01',
}, },
{ {
title: 'React', title: 'React',
icon: 'bx:bxl-react', icon: 'bx:bxl-react',
color: '#00d8ff', color: '#00d8ff',
desc: '下一步计划支持React重构', desc: '下一步计划支持React重构',
group: '前端开发小组', group: '前端开发小组',
date: '2023-10-02', date: '2023-10-02',
}, },
{ {
title: 'JavaScript', title: 'JavaScript',
icon: 'ion:logo-javascript', icon: 'ion:logo-javascript',
color: '#EBD94E', color: '#EBD94E',
desc: '我们也可使用javascript进行重写', desc: '我们也可使用javascript进行重写',
group: '前端开发小组', group: '前端开发小组',
date: '2023-10-03', date: '2023-10-03',
}, },
]; ];

View File

@ -1,9 +1,9 @@
<template> <template>
<PageWrapper> <PageWrapper>
<template #headerContent> <WorkbenchHeader /> </template> <template #headerContent><WorkbenchHeader /></template>
<div class="lg:flex"> <div class="lg:flex">
<div class="lg:w-7/10 w-full !mr-4 enter-y"> <div class="lg:w-7/10 w-full !mr-4 enter-y">
<ProjectCard :loading="loading" class="enter-y" /> <!-- <ProjectCard :loading="loading" class="enter-y" /> -->
<DynamicInfo :loading="loading" class="!my-4 enter-y" /> <DynamicInfo :loading="loading" class="!my-4 enter-y" />
</div> </div>
<div class="lg:w-3/10 w-full enter-y"> <div class="lg:w-3/10 w-full enter-y">

View File

@ -3,9 +3,9 @@
<div class="flex items-center absolute right-4 top-4"> <div class="flex items-center absolute right-4 top-4">
<AppDarkModeToggle class="enter-x mr-2" v-if="!sessionTimeout" /> <AppDarkModeToggle class="enter-x mr-2" v-if="!sessionTimeout" />
<AppLocalePicker <AppLocalePicker
class="text-white enter-x xl:text-gray-600" class="text-white enter-x xl:text-gray-600"
:show-text="false" :show-text="false"
v-if="!sessionTimeout && showLocale" v-if="!sessionTimeout && showLocale"
/> />
</div> </div>
@ -19,12 +19,12 @@
<AppLogo class="-enter-x" /> <AppLogo class="-enter-x" />
<div class="my-auto"> <div class="my-auto">
<img <img
:alt="title" :alt="title"
src="../../../assets/svg/login-box-bg.svg" src="../../../assets/svg/login-box-bg.svg"
class="w-1/2 -mt-16 -enter-x" class="w-1/2 -mt-16 -enter-x"
/> />
<div class="mt-10 font-medium text-white -enter-x"> <div class="mt-10 font-medium text-white -enter-x">
<span class="inline-block mt-4 text-3xl"> {{ t('sys.login.signInTitle') }}</span> <span class="inline-block mt-4 text-3xl">{{ t('sys.login.signInTitle') }}</span>
</div> </div>
<div class="mt-5 font-normal text-white dark:text-gray-500 -enter-x"> <div class="mt-5 font-normal text-white dark:text-gray-500 -enter-x">
{{ t('sys.login.signInDesc') }} {{ t('sys.login.signInDesc') }}
@ -33,8 +33,8 @@
</div> </div>
<div class="flex w-full h-full py-5 xl:h-auto xl:py-0 xl:my-0 xl:w-6/12"> <div class="flex w-full h-full py-5 xl:h-auto xl:py-0 xl:my-0 xl:w-6/12">
<div <div
:class="`${prefixCls}-form`" :class="`${prefixCls}-form`"
class="relative w-full px-5 py-8 mx-auto my-auto rounded-md shadow-md xl:ml-16 xl:bg-transparent sm:px-8 xl:p-4 xl:shadow-none sm:w-3/4 lg:w-2/4 xl:w-auto enter-x" class="relative w-full px-5 py-8 mx-auto my-auto rounded-md shadow-md xl:ml-16 xl:bg-transparent sm:px-8 xl:p-4 xl:shadow-none sm:w-3/4 lg:w-2/4 xl:w-auto enter-x"
> >
<LoginForm /> <LoginForm />
<ForgetPasswordForm /> <ForgetPasswordForm />
@ -49,175 +49,175 @@
</div> </div>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { computed } from 'vue'; import { computed } from 'vue';
import { AppLogo, AppLocalePicker, AppDarkModeToggle } from '/@/components/Application'; import { AppLogo, AppLocalePicker, AppDarkModeToggle } from '/@/components/Application';
import LoginForm from './LoginForm.vue'; import LoginForm from './LoginForm.vue';
import ForgetPasswordForm from './ForgetPasswordForm.vue'; import ForgetPasswordForm from './ForgetPasswordForm.vue';
import RegisterForm from './RegisterForm.vue'; import RegisterForm from './RegisterForm.vue';
import MobileForm from './MobileForm.vue'; import MobileForm from './MobileForm.vue';
import QrCodeForm from './QrCodeForm.vue'; import QrCodeForm from './QrCodeForm.vue';
import { useGlobSetting } from '/@/hooks/setting'; import { useGlobSetting } from '/@/hooks/setting';
import { useI18n } from '/@/hooks/web/useI18n'; import { useI18n } from '/@/hooks/web/useI18n';
import { useDesign } from '/@/hooks/web/useDesign'; import { useDesign } from '/@/hooks/web/useDesign';
import { useLocaleStore } from '/@/store/modules/locale'; import { useLocaleStore } from '/@/store/modules/locale';
import EmailForm from "@/views/sys/login/EmailForm.vue"; import EmailForm from '@/views/sys/login/EmailForm.vue';
defineProps({ defineProps({
sessionTimeout: { sessionTimeout: {
type: Boolean, type: Boolean,
}, },
}); });
const globSetting = useGlobSetting(); const globSetting = useGlobSetting();
const { prefixCls } = useDesign('login'); const { prefixCls } = useDesign('login');
const { t } = useI18n(); const { t } = useI18n();
const localeStore = useLocaleStore(); const localeStore = useLocaleStore();
const showLocale = localeStore.getShowPicker; const showLocale = localeStore.getShowPicker;
const title = computed(() => globSetting?.title ?? ''); const title = computed(() => globSetting?.title ?? '');
</script> </script>
<style lang="less"> <style lang="less">
@prefix-cls: ~'@{namespace}-login'; @prefix-cls: ~'@{namespace}-login';
@logo-prefix-cls: ~'@{namespace}-app-logo'; @logo-prefix-cls: ~'@{namespace}-app-logo';
@countdown-prefix-cls: ~'@{namespace}-countdown-input'; @countdown-prefix-cls: ~'@{namespace}-countdown-input';
@dark-bg: #293146; @dark-bg: #293146;
html[data-theme='dark'] {
.@{prefix-cls} {
background-color: @dark-bg;
&::before {
background-image: url('/@/assets/svg/login-bg-dark.svg');
}
.ant-input,
.ant-input-password {
background-color: #232a3b;
}
.ant-btn:not(.ant-btn-link):not(.ant-btn-primary) {
border: 1px solid #4a5569;
}
&-form {
background: transparent !important;
}
.app-iconify {
color: #fff;
}
}
input.fix-auto-fill,
.fix-auto-fill input {
-webkit-text-fill-color: #c9d1d9 !important;
box-shadow: inherit !important;
}
}
html[data-theme='dark'] {
.@{prefix-cls} { .@{prefix-cls} {
background-color: @dark-bg; min-height: 100%;
overflow: hidden;
&::before { background-color: #fff;
background-image: url('/@/assets/svg/login-bg-dark.svg'); color: @text-color;
}
.ant-input,
.ant-input-password {
background-color: #232a3b;
}
.ant-btn:not(.ant-btn-link):not(.ant-btn-primary) {
border: 1px solid #4a5569;
}
&-form {
background: transparent !important;
}
.app-iconify {
color: #fff;
}
}
input.fix-auto-fill,
.fix-auto-fill input {
-webkit-text-fill-color: #c9d1d9 !important;
box-shadow: inherit !important;
}
}
.@{prefix-cls} {
min-height: 100%;
overflow: hidden;
background-color: #fff;
color: @text-color;
@media (max-width: @screen-xl) {
background-color: #293146;
.@{prefix-cls}-form {
background-color: #fff;
color: @text-color;
}
}
&::before {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
margin-left: -48%;
background-image: url('/@/assets/svg/login-bg.svg');
background-repeat: no-repeat;
background-position: 100%;
background-size: auto 100%;
@media (max-width: @screen-xl) { @media (max-width: @screen-xl) {
display: none; background-color: #293146;
}
}
.@{logo-prefix-cls} { .@{prefix-cls}-form {
position: absolute; background-color: #fff;
top: 12px; color: @text-color;
height: 30px; }
&__title {
color: #fff;
font-size: 16px;
} }
img { &::before {
width: 32px; content: '';
} position: absolute;
} top: 0;
left: 0;
width: 100%;
height: 100%;
margin-left: -48%;
background-image: url('/@/assets/svg/login-bg.svg');
background-repeat: no-repeat;
background-position: 100%;
background-size: auto 100%;
@media (max-width: @screen-xl) {
display: none;
}
}
.container {
.@{logo-prefix-cls} { .@{logo-prefix-cls} {
display: flex; position: absolute;
width: 60%; top: 25px;
height: 80px; height: 30px;
&__title { &__title {
color: #fff; color: #fff;
font-size: 24px; font-size: 16px;
} }
img { img {
width: 48px; width: 65px;
} }
} }
}
&-sign-in-way { .container {
.anticon { .@{logo-prefix-cls} {
color: #888; display: flex;
font-size: 22px; width: 60%;
cursor: pointer; height: 80px;
&:hover { &__title {
color: @primary-color; color: #fff;
font-size: 24px;
}
img {
width: 65px;
}
} }
} }
}
input:not([type='checkbox']) { &-sign-in-way {
min-width: 360px; .anticon {
color: #888;
font-size: 22px;
cursor: pointer;
@media (max-width: @screen-xl) { &:hover {
min-width: 320px; color: @primary-color;
}
}
} }
@media (max-width: @screen-lg) { input:not([type='checkbox']) {
min-width: 260px; min-width: 360px;
@media (max-width: @screen-xl) {
min-width: 320px;
}
@media (max-width: @screen-lg) {
min-width: 260px;
}
@media (max-width: @screen-md) {
min-width: 240px;
}
@media (max-width: @screen-sm) {
min-width: 160px;
}
} }
@media (max-width: @screen-md) { .@{countdown-prefix-cls} input {
min-width: 240px; min-width: unset;
} }
@media (max-width: @screen-sm) { .ant-divider-inner-text {
min-width: 160px; color: @text-color-secondary;
font-size: 12px;
} }
} }
.@{countdown-prefix-cls} input {
min-width: unset;
}
.ant-divider-inner-text {
color: @text-color-secondary;
font-size: 12px;
}
}
</style> </style>

View File

@ -1,31 +1,33 @@
import { defineApplicationConfig } from '@vben/vite-config'; import { defineApplicationConfig } from '@vben/vite-config';
export default defineApplicationConfig({ export default defineApplicationConfig({
overrides: { overrides: {
optimizeDeps: { optimizeDeps: {
include: [ include: [
'echarts/core', 'echarts/core',
'echarts/charts', 'echarts/charts',
'echarts/components', 'echarts/components',
'echarts/renderers', 'echarts/renderers',
'qrcode', 'qrcode',
'@iconify/iconify', '@iconify/iconify',
'ant-design-vue/es/locale/zh_CN', 'ant-design-vue/es/locale/zh_CN',
'ant-design-vue/es/locale/en_US', 'ant-design-vue/es/locale/en_US',
], ],
}, },
server: { server: {
port: 3000, port: 3000,
proxy: { proxy: {
'/erp-api': { '/erp-api': {
target: 'http://localhost:8088', target: 'http://58.49.150.163:8088',
changeOrigin: true, // target: 'https://eairp.cn',
ws: true,
// rewrite: (path) => path.replace(/^\/api/, ''),
// only https
} changeOrigin: true,
}, ws: true,
// rewrite: (path) => path.replace(/^\/api/, ''),
// only https
}
},
},
}, },
},
}); });