修复已知bug
优化代码生成器
优化安装引导
This commit is contained in:
wangchen147 2023-12-21 17:32:26 +08:00
parent ef01fcf32f
commit f4f9f311cb
496 changed files with 1690 additions and 1438 deletions

View File

@ -38,10 +38,10 @@ niucloud-admin是一款快速开发通用管理后台框架前端采用最新
| [论坛地址](https://www.niucloud.com/bbs)
### 演示地址
- 站点后台演示网址:[<a href='http://demo-saas.site.niucloud.com/site' target="_blank"> 查看 </a>]
<a href='http://demo-saas.site.niucloud.com/site' target="_blank">http://demo-saas.site.niucloud.com/site 账号admin 密码123456
- 平台后台演示网址:[<a href='http://demo-saas.site.niucloud.com/admin/' target="_blank"> 查看 </a>]
<a href='http://demo-saas.site.niucloud.com/admin/' target="_blank">http://demo-saas.site.niucloud.com/admin/ 账号admin 密码123456
- 站点后台演示网址:[<a href='https://demo.niucloud.com/site/' target="_blank"> 查看 </a>]
<a href='https://demo.niucloud.com/site/' target="_blank">https://demo.niucloud.com/site/ 账号test 密码123456
- 平台后台演示网址:[<a href='https://demo.niucloud.com/admin/' target="_blank"> 查看 </a>]
<a href='https://demo.niucloud.com/admin/' target="_blank">https://demo.niucloud.com/admin/ 账号admin 密码123456
### 开源使用须知

461
admin/package-lock.json generated
View File

@ -8,48 +8,51 @@
"name": "admin",
"version": "1.0.0",
"dependencies": {
"@element-plus/icons-vue": "^2.0.10",
"@highlightjs/vue-plugin": "^2.1.0",
"@vueuse/core": "^9.12.0",
"@wangeditor/editor": "^5.1.23",
"@wangeditor/editor-for-vue": "^5.1.12",
"axios": "^1.4.0",
"crypto-js": "^4.1.1",
"css-color-function": "^1.3.3",
"echarts": "^5.4.1",
"element-plus": "^2.2.29",
"nprogress": "^0.2.0",
"pinia": "^2.0.30",
"qrcode": "^1.5.1",
"sass": "^1.58.0",
"sortablejs": "^1.15.0",
"vue": "^3.2.45",
"vue-i18n": "^9.2.2",
"vue-jsonp": "^2.0.0",
"vue-router": "^4.1.6",
"vue-web-terminal": "^3.1.7",
"vue3-video-play": "^1.3.1-beta.6"
"@element-plus/icons-vue": "2.0.10",
"@highlightjs/vue-plugin": "2.1.0",
"@types/lodash-es": "4.17.6",
"@vueuse/core": "9.12.0",
"@wangeditor/editor": "5.1.23",
"@wangeditor/editor-for-vue": "5.1.12",
"axios": "1.4.0",
"crypto-js": "4.1.1",
"css-color-function": "1.3.3",
"echarts": "5.4.1",
"element-plus": "2.2.29",
"highlight.js": "11.0.1",
"lodash-es": "4.17.21",
"nprogress": "0.2.0",
"pinia": "2.0.30",
"qrcode": "1.5.1",
"sass": "1.58.0",
"sortablejs": "1.15.0",
"vue": "3.2.45",
"vue-i18n": "9.2.2",
"vue-jsonp": "2.0.0",
"vue-router": "4.1.6",
"vue-web-terminal": "3.1.7",
"vue3-video-play": "1.3.1-beta.6"
},
"devDependencies": {
"@tailwindcss/line-clamp": "^0.4.2",
"@types/qrcode": "^1.5.0",
"@types/sortablejs": "^1.15.0",
"@typescript-eslint/eslint-plugin": "^5.53.0",
"@vitejs/plugin-vue": "^4.0.0",
"autoprefixer": "^10.4.13",
"eslint": "^8.34.0",
"eslint-config-standard-with-typescript": "^34.0.0",
"eslint-plugin-import": "^2.27.5",
"eslint-plugin-n": "^15.6.1",
"eslint-plugin-promise": "^6.1.1",
"eslint-plugin-vue": "^9.9.0",
"postcss": "^8.4.21",
"tailwindcss": "^3.2.4",
"typescript": "^4.9.5",
"unplugin-auto-import": "^0.13.0",
"unplugin-vue-components": "^0.23.0",
"vite": "^4.1.0",
"vue-tsc": "^1.0.24"
"@tailwindcss/line-clamp": "0.4.2",
"@types/qrcode": "1.5.0",
"@types/sortablejs": "1.15.0",
"@typescript-eslint/eslint-plugin": "5.53.0",
"@vitejs/plugin-vue": "4.0.0",
"autoprefixer": "10.4.13",
"eslint": "8.34.0",
"eslint-config-standard-with-typescript": "34.0.0",
"eslint-plugin-import": "2.27.5",
"eslint-plugin-n": "15.6.1",
"eslint-plugin-promise": "6.1.1",
"eslint-plugin-vue": "9.9.0",
"postcss": "8.4.21",
"tailwindcss": "3.2.4",
"typescript": "4.9.5",
"unplugin-auto-import": "0.13.0",
"unplugin-vue-components": "0.23.0",
"vite": "4.1.0",
"vue-tsc": "1.0.24"
}
},
"node_modules/@ampproject/remapping": {
@ -1516,6 +1519,7 @@
"version": "3.2.47",
"resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.47.tgz",
"integrity": "sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig==",
"dev": true,
"dependencies": {
"@babel/parser": "^7.16.4",
"@vue/shared": "3.2.47",
@ -1527,6 +1531,7 @@
"version": "3.2.47",
"resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.47.tgz",
"integrity": "sha512-dBBnEHEPoftUiS03a4ggEig74J2YBZ2UIeyfpcRM2tavgMWo4bsEfgCGsu+uJIL/vax9S+JztH8NmQerUo7shQ==",
"dev": true,
"dependencies": {
"@vue/compiler-core": "3.2.47",
"@vue/shared": "3.2.47"
@ -1536,6 +1541,7 @@
"version": "3.2.47",
"resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.2.47.tgz",
"integrity": "sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ==",
"dev": true,
"dependencies": {
"@babel/parser": "^7.16.4",
"@vue/compiler-core": "3.2.47",
@ -1553,6 +1559,7 @@
"version": "3.2.47",
"resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.2.47.tgz",
"integrity": "sha512-wVXC+gszhulcMD8wpxMsqSOpvDZ6xKXSVWkf50Guf/S+28hTAXPDYRTbLQ3EDkOP5Xz/+SY37YiwDquKbJOgZw==",
"dev": true,
"dependencies": {
"@vue/compiler-dom": "3.2.47",
"@vue/shared": "3.2.47"
@ -1567,6 +1574,7 @@
"version": "3.2.47",
"resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.47.tgz",
"integrity": "sha512-7khqQ/75oyyg+N/e+iwV6lpy1f5wq759NdlS1fpAhFXa8VeAIKGgk2E/C4VF59lx5b+Ezs5fpp/5WsRYXQiKxQ==",
"dev": true,
"dependencies": {
"@vue/shared": "3.2.47"
}
@ -1575,6 +1583,7 @@
"version": "3.2.47",
"resolved": "https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.2.47.tgz",
"integrity": "sha512-m8lGXw8rdnPVVIdIFhf0LeQ/ixyHkH5plYuS83yop5n7ggVJU+z5v0zecwEnX7fa7HNLBhh2qngJJkxpwEEmYA==",
"dev": true,
"dependencies": {
"@babel/parser": "^7.16.4",
"@vue/compiler-core": "3.2.47",
@ -1584,40 +1593,93 @@
}
},
"node_modules/@vue/runtime-core": {
"version": "3.2.47",
"resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.2.47.tgz",
"integrity": "sha512-RZxbLQIRB/K0ev0K9FXhNbBzT32H9iRtYbaXb0ZIz2usLms/D55dJR2t6cIEUn6vyhS3ALNvNthI+Q95C+NOpA==",
"version": "3.2.45",
"resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.2.45.tgz",
"integrity": "sha512-gzJiTA3f74cgARptqzYswmoQx0fIA+gGYBfokYVhF8YSXjWTUA2SngRzZRku2HbGbjzB6LBYSbKGIaK8IW+s0A==",
"dependencies": {
"@vue/reactivity": "3.2.47",
"@vue/shared": "3.2.47"
"@vue/reactivity": "3.2.45",
"@vue/shared": "3.2.45"
}
},
"node_modules/@vue/runtime-dom": {
"version": "3.2.47",
"resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.2.47.tgz",
"integrity": "sha512-ArXrFTjS6TsDei4qwNvgrdmHtD930KgSKGhS5M+j8QxXrDJYLqYw4RRcDy1bz1m1wMmb6j+zGLifdVHtkXA7gA==",
"node_modules/@vue/runtime-core/node_modules/@vue/reactivity": {
"version": "3.2.45",
"resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.45.tgz",
"integrity": "sha512-PRvhCcQcyEVohW0P8iQ7HDcIOXRjZfAsOds3N99X/Dzewy8TVhTCT4uXpAHfoKjVTJRA0O0K+6QNkDIZAxNi3A==",
"dependencies": {
"@vue/runtime-core": "3.2.47",
"@vue/shared": "3.2.47",
"@vue/shared": "3.2.45"
}
},
"node_modules/@vue/runtime-core/node_modules/@vue/shared": {
"version": "3.2.45",
"resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.2.45.tgz",
"integrity": "sha512-Ewzq5Yhimg7pSztDV+RH1UDKBzmtqieXQlpTVm2AwraoRL/Rks96mvd8Vgi7Lj+h+TH8dv7mXD3FRZR3TUvbSg=="
},
"node_modules/@vue/runtime-dom": {
"version": "3.2.45",
"resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.2.45.tgz",
"integrity": "sha512-cy88YpfP5Ue2bDBbj75Cb4bIEZUMM/mAkDMfqDTpUYVgTf/kuQ2VQ8LebuZ8k6EudgH8pYhsGWHlY0lcxlvTwA==",
"dependencies": {
"@vue/runtime-core": "3.2.45",
"@vue/shared": "3.2.45",
"csstype": "^2.6.8"
}
},
"node_modules/@vue/runtime-dom/node_modules/@vue/shared": {
"version": "3.2.45",
"resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.2.45.tgz",
"integrity": "sha512-Ewzq5Yhimg7pSztDV+RH1UDKBzmtqieXQlpTVm2AwraoRL/Rks96mvd8Vgi7Lj+h+TH8dv7mXD3FRZR3TUvbSg=="
},
"node_modules/@vue/server-renderer": {
"version": "3.2.47",
"resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.2.47.tgz",
"integrity": "sha512-dN9gc1i8EvmP9RCzvneONXsKfBRgqFeFZLurmHOveL7oH6HiFXJw5OGu294n1nHc/HMgTy6LulU/tv5/A7f/LA==",
"version": "3.2.45",
"resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.2.45.tgz",
"integrity": "sha512-ebiMq7q24WBU1D6uhPK//2OTR1iRIyxjF5iVq/1a5I1SDMDyDu4Ts6fJaMnjrvD3MqnaiFkKQj+LKAgz5WIK3g==",
"dependencies": {
"@vue/compiler-ssr": "3.2.47",
"@vue/shared": "3.2.47"
"@vue/compiler-ssr": "3.2.45",
"@vue/shared": "3.2.45"
},
"peerDependencies": {
"vue": "3.2.47"
"vue": "3.2.45"
}
},
"node_modules/@vue/server-renderer/node_modules/@vue/compiler-core": {
"version": "3.2.45",
"resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.45.tgz",
"integrity": "sha512-rcMj7H+PYe5wBV3iYeUgbCglC+pbpN8hBLTJvRiK2eKQiWqu+fG9F+8sW99JdL4LQi7Re178UOxn09puSXvn4A==",
"dependencies": {
"@babel/parser": "^7.16.4",
"@vue/shared": "3.2.45",
"estree-walker": "^2.0.2",
"source-map": "^0.6.1"
}
},
"node_modules/@vue/server-renderer/node_modules/@vue/compiler-dom": {
"version": "3.2.45",
"resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.45.tgz",
"integrity": "sha512-tyYeUEuKqqZO137WrZkpwfPCdiiIeXYCcJ8L4gWz9vqaxzIQRccTSwSWZ/Axx5YR2z+LvpUbmPNXxuBU45lyRw==",
"dependencies": {
"@vue/compiler-core": "3.2.45",
"@vue/shared": "3.2.45"
}
},
"node_modules/@vue/server-renderer/node_modules/@vue/compiler-ssr": {
"version": "3.2.45",
"resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.2.45.tgz",
"integrity": "sha512-6BRaggEGqhWht3lt24CrIbQSRD5O07MTmd+LjAn5fJj568+R9eUD2F7wMQJjX859seSlrYog7sUtrZSd7feqrQ==",
"dependencies": {
"@vue/compiler-dom": "3.2.45",
"@vue/shared": "3.2.45"
}
},
"node_modules/@vue/server-renderer/node_modules/@vue/shared": {
"version": "3.2.45",
"resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.2.45.tgz",
"integrity": "sha512-Ewzq5Yhimg7pSztDV+RH1UDKBzmtqieXQlpTVm2AwraoRL/Rks96mvd8Vgi7Lj+h+TH8dv7mXD3FRZR3TUvbSg=="
},
"node_modules/@vue/shared": {
"version": "3.2.47",
"resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.2.47.tgz",
"integrity": "sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ=="
"integrity": "sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ==",
"dev": true
},
"node_modules/@vueuse/core": {
"version": "9.12.0",
@ -3934,10 +3996,9 @@
}
},
"node_modules/highlight.js": {
"version": "11.9.0",
"resolved": "https://registry.npmmirror.com/highlight.js/-/highlight.js-11.9.0.tgz",
"integrity": "sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw==",
"peer": true,
"version": "11.0.1",
"resolved": "https://registry.npmmirror.com/highlight.js/-/highlight.js-11.0.1.tgz",
"integrity": "sha512-EqYpWyTF2s8nMfttfBA2yLKPNoZCO33pLS4MnbXQ4hECf1TKujCt1Kq7QAdrio7roL4+CqsfjqwYj4tYgq0pJQ==",
"engines": {
"node": ">=12.0.0"
}
@ -6114,9 +6175,9 @@
"dev": true
},
"node_modules/vite": {
"version": "4.1.1",
"resolved": "https://registry.npmmirror.com/vite/-/vite-4.1.1.tgz",
"integrity": "sha512-LM9WWea8vsxhr782r9ntg+bhSFS06FJgCvvB0+8hf8UWtvaiDagKYWXndjfX6kGl74keHJUcpzrQliDXZlF5yg==",
"version": "4.1.0",
"resolved": "https://registry.npmmirror.com/vite/-/vite-4.1.0.tgz",
"integrity": "sha512-YoUKE/9bbK4C8ZeSYMDDEF8H5aypmWUq4WisftDhntR1gkI2zt2SGT/5Wd2xu6ZoVXkCyO3U4844KWG9e4nFoQ==",
"dev": true,
"dependencies": {
"esbuild": "^0.16.14",
@ -6163,15 +6224,15 @@
}
},
"node_modules/vue": {
"version": "3.2.47",
"resolved": "https://registry.npmmirror.com/vue/-/vue-3.2.47.tgz",
"integrity": "sha512-60188y/9Dc9WVrAZeUVSDxRQOZ+z+y5nO2ts9jWXSTkMvayiWxCWOWtBQoYjLeccfXkiiPZWAHcV+WTPhkqJHQ==",
"version": "3.2.45",
"resolved": "https://registry.npmmirror.com/vue/-/vue-3.2.45.tgz",
"integrity": "sha512-9Nx/Mg2b2xWlXykmCwiTUCWHbWIj53bnkizBxKai1g61f2Xit700A1ljowpTIM11e3uipOeiPcSqnmBg6gyiaA==",
"dependencies": {
"@vue/compiler-dom": "3.2.47",
"@vue/compiler-sfc": "3.2.47",
"@vue/runtime-dom": "3.2.47",
"@vue/server-renderer": "3.2.47",
"@vue/shared": "3.2.47"
"@vue/compiler-dom": "3.2.45",
"@vue/compiler-sfc": "3.2.45",
"@vue/runtime-dom": "3.2.45",
"@vue/server-renderer": "3.2.45",
"@vue/shared": "3.2.45"
}
},
"node_modules/vue-eslint-parser": {
@ -6295,6 +6356,69 @@
"vue-json-viewer": "^3.0.4"
}
},
"node_modules/vue/node_modules/@vue/compiler-core": {
"version": "3.2.45",
"resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.45.tgz",
"integrity": "sha512-rcMj7H+PYe5wBV3iYeUgbCglC+pbpN8hBLTJvRiK2eKQiWqu+fG9F+8sW99JdL4LQi7Re178UOxn09puSXvn4A==",
"dependencies": {
"@babel/parser": "^7.16.4",
"@vue/shared": "3.2.45",
"estree-walker": "^2.0.2",
"source-map": "^0.6.1"
}
},
"node_modules/vue/node_modules/@vue/compiler-dom": {
"version": "3.2.45",
"resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.45.tgz",
"integrity": "sha512-tyYeUEuKqqZO137WrZkpwfPCdiiIeXYCcJ8L4gWz9vqaxzIQRccTSwSWZ/Axx5YR2z+LvpUbmPNXxuBU45lyRw==",
"dependencies": {
"@vue/compiler-core": "3.2.45",
"@vue/shared": "3.2.45"
}
},
"node_modules/vue/node_modules/@vue/compiler-sfc": {
"version": "3.2.45",
"resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.2.45.tgz",
"integrity": "sha512-1jXDuWah1ggsnSAOGsec8cFjT/K6TMZ0sPL3o3d84Ft2AYZi2jWJgRMjw4iaK0rBfA89L5gw427H4n1RZQBu6Q==",
"dependencies": {
"@babel/parser": "^7.16.4",
"@vue/compiler-core": "3.2.45",
"@vue/compiler-dom": "3.2.45",
"@vue/compiler-ssr": "3.2.45",
"@vue/reactivity-transform": "3.2.45",
"@vue/shared": "3.2.45",
"estree-walker": "^2.0.2",
"magic-string": "^0.25.7",
"postcss": "^8.1.10",
"source-map": "^0.6.1"
}
},
"node_modules/vue/node_modules/@vue/compiler-ssr": {
"version": "3.2.45",
"resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.2.45.tgz",
"integrity": "sha512-6BRaggEGqhWht3lt24CrIbQSRD5O07MTmd+LjAn5fJj568+R9eUD2F7wMQJjX859seSlrYog7sUtrZSd7feqrQ==",
"dependencies": {
"@vue/compiler-dom": "3.2.45",
"@vue/shared": "3.2.45"
}
},
"node_modules/vue/node_modules/@vue/reactivity-transform": {
"version": "3.2.45",
"resolved": "https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.2.45.tgz",
"integrity": "sha512-BHVmzYAvM7vcU5WmuYqXpwaBHjsS8T63jlKGWVtHxAHIoMIlmaMyurUSEs1Zcg46M4AYT5MtB1U274/2aNzjJQ==",
"dependencies": {
"@babel/parser": "^7.16.4",
"@vue/compiler-core": "3.2.45",
"@vue/shared": "3.2.45",
"estree-walker": "^2.0.2",
"magic-string": "^0.25.7"
}
},
"node_modules/vue/node_modules/@vue/shared": {
"version": "3.2.45",
"resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.2.45.tgz",
"integrity": "sha512-Ewzq5Yhimg7pSztDV+RH1UDKBzmtqieXQlpTVm2AwraoRL/Rks96mvd8Vgi7Lj+h+TH8dv7mXD3FRZR3TUvbSg=="
},
"node_modules/vue3-video-play": {
"version": "1.3.1-beta.6",
"resolved": "https://registry.npmmirror.com/vue3-video-play/-/vue3-video-play-1.3.1-beta.6.tgz",
@ -7617,6 +7741,7 @@
"version": "3.2.47",
"resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.47.tgz",
"integrity": "sha512-p4D7FDnQb7+YJmO2iPEv0SQNeNzcbHdGByJDsT4lynf63AFkOTFN07HsiRSvjGo0QrxR/o3d0hUyNCUnBU2Tig==",
"dev": true,
"requires": {
"@babel/parser": "^7.16.4",
"@vue/shared": "3.2.47",
@ -7628,6 +7753,7 @@
"version": "3.2.47",
"resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.47.tgz",
"integrity": "sha512-dBBnEHEPoftUiS03a4ggEig74J2YBZ2UIeyfpcRM2tavgMWo4bsEfgCGsu+uJIL/vax9S+JztH8NmQerUo7shQ==",
"dev": true,
"requires": {
"@vue/compiler-core": "3.2.47",
"@vue/shared": "3.2.47"
@ -7637,6 +7763,7 @@
"version": "3.2.47",
"resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.2.47.tgz",
"integrity": "sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ==",
"dev": true,
"requires": {
"@babel/parser": "^7.16.4",
"@vue/compiler-core": "3.2.47",
@ -7654,6 +7781,7 @@
"version": "3.2.47",
"resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.2.47.tgz",
"integrity": "sha512-wVXC+gszhulcMD8wpxMsqSOpvDZ6xKXSVWkf50Guf/S+28hTAXPDYRTbLQ3EDkOP5Xz/+SY37YiwDquKbJOgZw==",
"dev": true,
"requires": {
"@vue/compiler-dom": "3.2.47",
"@vue/shared": "3.2.47"
@ -7668,6 +7796,7 @@
"version": "3.2.47",
"resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.47.tgz",
"integrity": "sha512-7khqQ/75oyyg+N/e+iwV6lpy1f5wq759NdlS1fpAhFXa8VeAIKGgk2E/C4VF59lx5b+Ezs5fpp/5WsRYXQiKxQ==",
"dev": true,
"requires": {
"@vue/shared": "3.2.47"
}
@ -7676,6 +7805,7 @@
"version": "3.2.47",
"resolved": "https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.2.47.tgz",
"integrity": "sha512-m8lGXw8rdnPVVIdIFhf0LeQ/ixyHkH5plYuS83yop5n7ggVJU+z5v0zecwEnX7fa7HNLBhh2qngJJkxpwEEmYA==",
"dev": true,
"requires": {
"@babel/parser": "^7.16.4",
"@vue/compiler-core": "3.2.47",
@ -7685,37 +7815,96 @@
}
},
"@vue/runtime-core": {
"version": "3.2.47",
"resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.2.47.tgz",
"integrity": "sha512-RZxbLQIRB/K0ev0K9FXhNbBzT32H9iRtYbaXb0ZIz2usLms/D55dJR2t6cIEUn6vyhS3ALNvNthI+Q95C+NOpA==",
"version": "3.2.45",
"resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.2.45.tgz",
"integrity": "sha512-gzJiTA3f74cgARptqzYswmoQx0fIA+gGYBfokYVhF8YSXjWTUA2SngRzZRku2HbGbjzB6LBYSbKGIaK8IW+s0A==",
"requires": {
"@vue/reactivity": "3.2.47",
"@vue/shared": "3.2.47"
"@vue/reactivity": "3.2.45",
"@vue/shared": "3.2.45"
},
"dependencies": {
"@vue/reactivity": {
"version": "3.2.45",
"resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.45.tgz",
"integrity": "sha512-PRvhCcQcyEVohW0P8iQ7HDcIOXRjZfAsOds3N99X/Dzewy8TVhTCT4uXpAHfoKjVTJRA0O0K+6QNkDIZAxNi3A==",
"requires": {
"@vue/shared": "3.2.45"
}
},
"@vue/shared": {
"version": "3.2.45",
"resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.2.45.tgz",
"integrity": "sha512-Ewzq5Yhimg7pSztDV+RH1UDKBzmtqieXQlpTVm2AwraoRL/Rks96mvd8Vgi7Lj+h+TH8dv7mXD3FRZR3TUvbSg=="
}
}
},
"@vue/runtime-dom": {
"version": "3.2.47",
"resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.2.47.tgz",
"integrity": "sha512-ArXrFTjS6TsDei4qwNvgrdmHtD930KgSKGhS5M+j8QxXrDJYLqYw4RRcDy1bz1m1wMmb6j+zGLifdVHtkXA7gA==",
"version": "3.2.45",
"resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.2.45.tgz",
"integrity": "sha512-cy88YpfP5Ue2bDBbj75Cb4bIEZUMM/mAkDMfqDTpUYVgTf/kuQ2VQ8LebuZ8k6EudgH8pYhsGWHlY0lcxlvTwA==",
"requires": {
"@vue/runtime-core": "3.2.47",
"@vue/shared": "3.2.47",
"@vue/runtime-core": "3.2.45",
"@vue/shared": "3.2.45",
"csstype": "^2.6.8"
},
"dependencies": {
"@vue/shared": {
"version": "3.2.45",
"resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.2.45.tgz",
"integrity": "sha512-Ewzq5Yhimg7pSztDV+RH1UDKBzmtqieXQlpTVm2AwraoRL/Rks96mvd8Vgi7Lj+h+TH8dv7mXD3FRZR3TUvbSg=="
}
}
},
"@vue/server-renderer": {
"version": "3.2.47",
"resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.2.47.tgz",
"integrity": "sha512-dN9gc1i8EvmP9RCzvneONXsKfBRgqFeFZLurmHOveL7oH6HiFXJw5OGu294n1nHc/HMgTy6LulU/tv5/A7f/LA==",
"version": "3.2.45",
"resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.2.45.tgz",
"integrity": "sha512-ebiMq7q24WBU1D6uhPK//2OTR1iRIyxjF5iVq/1a5I1SDMDyDu4Ts6fJaMnjrvD3MqnaiFkKQj+LKAgz5WIK3g==",
"requires": {
"@vue/compiler-ssr": "3.2.47",
"@vue/shared": "3.2.47"
"@vue/compiler-ssr": "3.2.45",
"@vue/shared": "3.2.45"
},
"dependencies": {
"@vue/compiler-core": {
"version": "3.2.45",
"resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.45.tgz",
"integrity": "sha512-rcMj7H+PYe5wBV3iYeUgbCglC+pbpN8hBLTJvRiK2eKQiWqu+fG9F+8sW99JdL4LQi7Re178UOxn09puSXvn4A==",
"requires": {
"@babel/parser": "^7.16.4",
"@vue/shared": "3.2.45",
"estree-walker": "^2.0.2",
"source-map": "^0.6.1"
}
},
"@vue/compiler-dom": {
"version": "3.2.45",
"resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.45.tgz",
"integrity": "sha512-tyYeUEuKqqZO137WrZkpwfPCdiiIeXYCcJ8L4gWz9vqaxzIQRccTSwSWZ/Axx5YR2z+LvpUbmPNXxuBU45lyRw==",
"requires": {
"@vue/compiler-core": "3.2.45",
"@vue/shared": "3.2.45"
}
},
"@vue/compiler-ssr": {
"version": "3.2.45",
"resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.2.45.tgz",
"integrity": "sha512-6BRaggEGqhWht3lt24CrIbQSRD5O07MTmd+LjAn5fJj568+R9eUD2F7wMQJjX859seSlrYog7sUtrZSd7feqrQ==",
"requires": {
"@vue/compiler-dom": "3.2.45",
"@vue/shared": "3.2.45"
}
},
"@vue/shared": {
"version": "3.2.45",
"resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.2.45.tgz",
"integrity": "sha512-Ewzq5Yhimg7pSztDV+RH1UDKBzmtqieXQlpTVm2AwraoRL/Rks96mvd8Vgi7Lj+h+TH8dv7mXD3FRZR3TUvbSg=="
}
}
},
"@vue/shared": {
"version": "3.2.47",
"resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.2.47.tgz",
"integrity": "sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ=="
"integrity": "sha512-BHGyyGN3Q97EZx0taMQ+OLNuZcW3d37ZEVmEAyeoA9ERdGvm9Irc/0Fua8SNyOtV1w6BS4q25wbMzJujO9HIfQ==",
"dev": true
},
"@vueuse/core": {
"version": "9.12.0",
@ -9565,10 +9754,9 @@
"dev": true
},
"highlight.js": {
"version": "11.9.0",
"resolved": "https://registry.npmmirror.com/highlight.js/-/highlight.js-11.9.0.tgz",
"integrity": "sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw==",
"peer": true
"version": "11.0.1",
"resolved": "https://registry.npmmirror.com/highlight.js/-/highlight.js-11.0.1.tgz",
"integrity": "sha512-EqYpWyTF2s8nMfttfBA2yLKPNoZCO33pLS4MnbXQ4hECf1TKujCt1Kq7QAdrio7roL4+CqsfjqwYj4tYgq0pJQ=="
},
"hls.js": {
"version": "1.3.4",
@ -11295,9 +11483,9 @@
"dev": true
},
"vite": {
"version": "4.1.1",
"resolved": "https://registry.npmmirror.com/vite/-/vite-4.1.1.tgz",
"integrity": "sha512-LM9WWea8vsxhr782r9ntg+bhSFS06FJgCvvB0+8hf8UWtvaiDagKYWXndjfX6kGl74keHJUcpzrQliDXZlF5yg==",
"version": "4.1.0",
"resolved": "https://registry.npmmirror.com/vite/-/vite-4.1.0.tgz",
"integrity": "sha512-YoUKE/9bbK4C8ZeSYMDDEF8H5aypmWUq4WisftDhntR1gkI2zt2SGT/5Wd2xu6ZoVXkCyO3U4844KWG9e4nFoQ==",
"dev": true,
"requires": {
"esbuild": "^0.16.14",
@ -11308,15 +11496,80 @@
}
},
"vue": {
"version": "3.2.47",
"resolved": "https://registry.npmmirror.com/vue/-/vue-3.2.47.tgz",
"integrity": "sha512-60188y/9Dc9WVrAZeUVSDxRQOZ+z+y5nO2ts9jWXSTkMvayiWxCWOWtBQoYjLeccfXkiiPZWAHcV+WTPhkqJHQ==",
"version": "3.2.45",
"resolved": "https://registry.npmmirror.com/vue/-/vue-3.2.45.tgz",
"integrity": "sha512-9Nx/Mg2b2xWlXykmCwiTUCWHbWIj53bnkizBxKai1g61f2Xit700A1ljowpTIM11e3uipOeiPcSqnmBg6gyiaA==",
"requires": {
"@vue/compiler-dom": "3.2.47",
"@vue/compiler-sfc": "3.2.47",
"@vue/runtime-dom": "3.2.47",
"@vue/server-renderer": "3.2.47",
"@vue/shared": "3.2.47"
"@vue/compiler-dom": "3.2.45",
"@vue/compiler-sfc": "3.2.45",
"@vue/runtime-dom": "3.2.45",
"@vue/server-renderer": "3.2.45",
"@vue/shared": "3.2.45"
},
"dependencies": {
"@vue/compiler-core": {
"version": "3.2.45",
"resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.2.45.tgz",
"integrity": "sha512-rcMj7H+PYe5wBV3iYeUgbCglC+pbpN8hBLTJvRiK2eKQiWqu+fG9F+8sW99JdL4LQi7Re178UOxn09puSXvn4A==",
"requires": {
"@babel/parser": "^7.16.4",
"@vue/shared": "3.2.45",
"estree-walker": "^2.0.2",
"source-map": "^0.6.1"
}
},
"@vue/compiler-dom": {
"version": "3.2.45",
"resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.2.45.tgz",
"integrity": "sha512-tyYeUEuKqqZO137WrZkpwfPCdiiIeXYCcJ8L4gWz9vqaxzIQRccTSwSWZ/Axx5YR2z+LvpUbmPNXxuBU45lyRw==",
"requires": {
"@vue/compiler-core": "3.2.45",
"@vue/shared": "3.2.45"
}
},
"@vue/compiler-sfc": {
"version": "3.2.45",
"resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.2.45.tgz",
"integrity": "sha512-1jXDuWah1ggsnSAOGsec8cFjT/K6TMZ0sPL3o3d84Ft2AYZi2jWJgRMjw4iaK0rBfA89L5gw427H4n1RZQBu6Q==",
"requires": {
"@babel/parser": "^7.16.4",
"@vue/compiler-core": "3.2.45",
"@vue/compiler-dom": "3.2.45",
"@vue/compiler-ssr": "3.2.45",
"@vue/reactivity-transform": "3.2.45",
"@vue/shared": "3.2.45",
"estree-walker": "^2.0.2",
"magic-string": "^0.25.7",
"postcss": "^8.1.10",
"source-map": "^0.6.1"
}
},
"@vue/compiler-ssr": {
"version": "3.2.45",
"resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.2.45.tgz",
"integrity": "sha512-6BRaggEGqhWht3lt24CrIbQSRD5O07MTmd+LjAn5fJj568+R9eUD2F7wMQJjX859seSlrYog7sUtrZSd7feqrQ==",
"requires": {
"@vue/compiler-dom": "3.2.45",
"@vue/shared": "3.2.45"
}
},
"@vue/reactivity-transform": {
"version": "3.2.45",
"resolved": "https://registry.npmmirror.com/@vue/reactivity-transform/-/reactivity-transform-3.2.45.tgz",
"integrity": "sha512-BHVmzYAvM7vcU5WmuYqXpwaBHjsS8T63jlKGWVtHxAHIoMIlmaMyurUSEs1Zcg46M4AYT5MtB1U274/2aNzjJQ==",
"requires": {
"@babel/parser": "^7.16.4",
"@vue/compiler-core": "3.2.45",
"@vue/shared": "3.2.45",
"estree-walker": "^2.0.2",
"magic-string": "^0.25.7"
}
},
"@vue/shared": {
"version": "3.2.45",
"resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.2.45.tgz",
"integrity": "sha512-Ewzq5Yhimg7pSztDV+RH1UDKBzmtqieXQlpTVm2AwraoRL/Rks96mvd8Vgi7Lj+h+TH8dv7mXD3FRZR3TUvbSg=="
}
}
},
"vue-eslint-parser": {

View File

@ -9,47 +9,50 @@
"preview": "vite preview"
},
"dependencies": {
"@element-plus/icons-vue": "^2.0.10",
"@highlightjs/vue-plugin": "^2.1.0",
"@vueuse/core": "^9.12.0",
"@wangeditor/editor": "^5.1.23",
"@wangeditor/editor-for-vue": "^5.1.12",
"axios": "^1.4.0",
"crypto-js": "^4.1.1",
"css-color-function": "^1.3.3",
"echarts": "^5.4.1",
"element-plus": "^2.2.29",
"nprogress": "^0.2.0",
"pinia": "^2.0.30",
"qrcode": "^1.5.1",
"sass": "^1.58.0",
"sortablejs": "^1.15.0",
"vue": "^3.2.45",
"vue-i18n": "^9.2.2",
"vue-router": "^4.1.6",
"vue-web-terminal": "^3.1.7",
"vue3-video-play": "^1.3.1-beta.6",
"vue-jsonp": "^2.0.0"
"@element-plus/icons-vue": "2.0.10",
"@highlightjs/vue-plugin": "2.1.0",
"@vueuse/core": "9.12.0",
"@wangeditor/editor": "5.1.23",
"@wangeditor/editor-for-vue": "5.1.12",
"@types/lodash-es": "4.17.6",
"axios": "1.4.0",
"crypto-js": "4.1.1",
"css-color-function": "1.3.3",
"echarts": "5.4.1",
"element-plus": "2.2.29",
"nprogress": "0.2.0",
"pinia": "2.0.30",
"qrcode": "1.5.1",
"sass": "1.58.0",
"sortablejs": "1.15.0",
"vue": "3.2.45",
"vue-i18n": "9.2.2",
"vue-router": "4.1.6",
"vue-web-terminal": "3.1.7",
"vue3-video-play": "1.3.1-beta.6",
"vue-jsonp": "2.0.0",
"lodash-es": "4.17.21",
"highlight.js": "11.0.1"
},
"devDependencies": {
"@tailwindcss/line-clamp": "^0.4.2",
"@types/qrcode": "^1.5.0",
"@types/sortablejs": "^1.15.0",
"@typescript-eslint/eslint-plugin": "^5.53.0",
"@vitejs/plugin-vue": "^4.0.0",
"autoprefixer": "^10.4.13",
"eslint": "^8.34.0",
"eslint-config-standard-with-typescript": "^34.0.0",
"eslint-plugin-import": "^2.27.5",
"eslint-plugin-n": "^15.6.1",
"eslint-plugin-promise": "^6.1.1",
"eslint-plugin-vue": "^9.9.0",
"postcss": "^8.4.21",
"tailwindcss": "^3.2.4",
"typescript": "^4.9.5",
"unplugin-auto-import": "^0.13.0",
"unplugin-vue-components": "^0.23.0",
"vite": "^4.1.0",
"vue-tsc": "^1.0.24"
"@tailwindcss/line-clamp": "0.4.2",
"@types/qrcode": "1.5.0",
"@types/sortablejs": "1.15.0",
"@typescript-eslint/eslint-plugin": "5.53.0",
"@vitejs/plugin-vue": "4.0.0",
"autoprefixer": "10.4.13",
"eslint": "8.34.0",
"eslint-config-standard-with-typescript": "34.0.0",
"eslint-plugin-import": "2.27.5",
"eslint-plugin-n": "15.6.1",
"eslint-plugin-promise": "6.1.1",
"eslint-plugin-vue": "9.9.0",
"postcss": "8.4.21",
"tailwindcss": "3.2.4",
"typescript": "4.9.5",
"unplugin-auto-import": "0.13.0",
"unplugin-vue-components": "0.23.0",
"vite": "4.1.0",
"vue-tsc": "1.0.24"
}
}

View File

@ -48,3 +48,12 @@ export function getModuleVersion() {
export function downloadVersion(params: Record<string, any>) {
return request.post(`addon/download/${params.addon}`, params, { showSuccessMessage: true })
}
/**
*
* @param params
* @returns
*/
export function getFrameworkNewVersion() {
return request.get(`niucloud/framework/newversion`)
}

View File

@ -38,6 +38,14 @@ export function editSite(params: Record<string, any>) {
return request.put(`site/site/${params.site_id}`, params, { showSuccessMessage: true })
}
/**
*
* @param siteId
*/
export function deleteSite(siteId: number) {
return request.delete(`site/site/${siteId}`)
}
/**
*
* @param params

View File

@ -128,6 +128,15 @@ export function getAddonMenu(key: any) {
return request.get(`sys/menu/addon_menu/${key}`)
}
/**
*
* @param key
*/
export function getMenuByTypeDir(key: any = 'system') {
return request.get(`sys/menu/dir/${key}`)
}
/***************************************************** 站点菜单 ****************************************************/
/**

View File

@ -19,5 +19,6 @@
"placeholderOtherPage": "请选择一个页面",
"developTitle": "开发环境配置",
"wapDomain": "wap域名WAP_DOMAIN",
"wapDomainPlaceholder": "请输入wap域名"
}
"wapDomainPlaceholder": "请输入wap域名",
"settingTips": "点击查看如何配置"
}

View File

@ -67,5 +67,7 @@
"addonUninstall": "插件卸载",
"appIdentification":"应用标识",
"tipText":"标识指开发应用或插件的文件夹名称",
"uninstallTips": "卸载插件将会移除admin web uni-app目录下该插件的内容是否要继续进行卸载"
}
"uninstallTips": "卸载插件将会移除admin web uni-app目录下该插件的内容是否要继续进行卸载",
"upgrade": "升级",
"newVersion": "最新版本"
}

View File

@ -44,5 +44,6 @@
"manager": "站点管理员",
"managerPlaceholder": "请选择站点管理员",
"newAddManager": "新增管理员",
"edit": "编辑"
"edit": "编辑",
"siteDeleteTips": "确定要删除该站点吗?该操作将删除该站点和站点相关数据,该操作无法退回,确定要继续删除吗?"
}

View File

@ -14,7 +14,10 @@
<text class="mb-[10px]">{{ t('wapDomain') }}</text>
<el-input v-model="wapDomain" :placeholder="t('wapDomainPlaceholder')" clearable/>
</div>
<el-button type="primary" @click="saveDomain()">{{ t('confirm') }}</el-button>
<div class="flex">
<el-button type="primary" @click="saveDomain()">{{ t('confirm') }}</el-button>
<el-button type="primary" @click="settingTips()" plain>{{ t('settingTips') }}</el-button>
</div>
</div>
</div>
@ -233,6 +236,10 @@
}, 100 * 3);
}
const settingTips = () => {
window.open('https://www.kancloud.cn/niucloud/niucloud-admin-develop/3213393')
}
const setDomain = (key: string) => {
page[key].use_template.wapPreview = page[key].wapUrl + page[key].use_template.url;
page[key].timeIframe = new Date().getTime();

View File

@ -140,7 +140,12 @@ const toLinkFn = (link)=>{
*/
const addonList = ref([])
getInstalledAddonList().then(({ data }) => {
addonList.value = data
const apps = []
Object.keys(data).forEach(key => {
const addon = data[key]
addon.type == 'app' && apps.push(addon)
})
addonList.value = apps
}).catch()
const handleChick = () => {

View File

@ -119,6 +119,7 @@
v-if="row.status == 1 || row.status == 3">{{ row.status == 1 ? t('closeTxt') : t('openTxt')
}}</el-button>
<el-button type="primary" link @click="editEvent(row)">{{ t('edit') }}</el-button>
<el-button type="primary" link @click="deleteEvent(row)">{{ t('delete') }}</el-button>
<el-button type="primary" link @click="urlEvent(row)">{{ t('url') }}</el-button>
<el-button type="primary" link @click="infoEvent(row)">{{ t('info') }}</el-button>
</template>
@ -141,12 +142,13 @@
import { reactive, ref } from 'vue'
import { img } from '@/utils/common'
import { t } from '@/lang'
import { getSiteList, getSiteGroupAll, getStatusList, closeSite, openSite } from '@/app/api/site'
import { FormInstance } from 'element-plus'
import { getSiteList, getSiteGroupAll, getStatusList, closeSite, openSite, deleteSite } from '@/app/api/site'
import {ElMessageBox, FormInstance} from 'element-plus'
import { useRouter, useRoute } from 'vue-router'
import EditSite from '@/app/views/site/components/edit-site.vue'
import { getInstalledAddonList } from '@/app/api/addon'
import { CollectionTag } from '@element-plus/icons-vue'
import {deleteMenu} from "@/app/api/sys";
const route = useRoute()
const pageName = route.meta.title
@ -285,7 +287,7 @@ const editEvent = (data: any) => {
* @param data
*/
const toSiteLink = (data: any) => {
// window.localStorage.setItem('site.siteId', data.site_id)
window.localStorage.setItem('site.siteId', data.site_id)
window.open(`${location.origin}/site/`)
}
@ -301,6 +303,21 @@ const openClose = (i, site_id) => {
})
}
}
const deleteEvent = (data: any) => {
ElMessageBox.confirm(t('siteDeleteTips'), t('warning'),
{
confirmButtonText: t('confirm'),
cancelButtonText: t('cancel'),
type: 'warning'
}
).then(() => {
deleteSite(data.site_id).then(res => {
loadSiteList()
}).catch(() => {
})
})
}
</script>
<style lang="scss" scoped>

View File

@ -16,7 +16,7 @@
</el-select>
</el-form-item>
<el-form-item :label="t('associatedModel')" prop="model">
<el-select :placeholder="t('associatedModelPlaceholder')" v-model="formData.model" class="input-width">
<el-select :placeholder="t('associatedModelPlaceholder')" v-model="formData.model" class="input-width" filterable>
<el-option v-for="item in modelList" :label="item" :value="item" :key="item" />
</el-select>
</el-form-item>
@ -121,13 +121,13 @@ const getAddonDevelopFn = async () => {
let { data } = await getAddonDevelop({})
addonLst.value = [{ title: "系统", key: "system" }]
addonLst.value.push(...data)
getGeneratorAllModelFn({addon:'system'})
getGeneratorAllModelFn({addon:'system'})
}
getAddonDevelopFn()
//
const addonChange =(val:any)=>{
formData.value.model = ''
getGeneratorAllModelFn({addon:val})
getGeneratorAllModelFn({addon:val})
}
const beforeClose=(next:any)=>{
formRef.value?.clearValidate()

View File

@ -34,6 +34,8 @@
class="input-width" />
<p class="text-[12px] text-[#a9a9a9] leading-normal mt-[5px]">
生成代码所属功能模块对应路由名称例如会员模块充值模块订单模块等</p>
<p class="text-[12px] text-[#a9a9a9] leading-normal mt-[5px]">
命名规范小写多个单词使用下划线连接,例如: memberarticle_category</p>
</div>
</el-form-item>
@ -43,8 +45,9 @@
class="input-width" />
<p class="text-[12px] text-[#a9a9a9] leading-normal mt-[5px]">
生成代码所属文件名称controllermodelservice等类型文件名</p>
<p class="text-[12px] text-[#a9a9a9] leading-normal mt-[5px]">
命名规范小写多个单词使用下划线连接,例如: article_category</p>
</div>
</el-form-item>
</el-form>
</el-tab-pane>
@ -216,6 +219,7 @@
<p class="text-[12px] text-[#a9a9a9] leading-normal mt-[5px]">列表排序规则</p>
</div>
</el-form-item>
<el-form-item :label="t('menuType')">
<!-- <div>
@ -225,11 +229,11 @@
</el-radio-group>
<p class="text-[12px] text-[#a9a9a9] leading-normal mt-[5px]">自动构建自动执行生成菜单sql手动添加自行添加菜单</p>
</div> -->
<el-tree-select class="input-width" v-if="formData.addon_name != ''"
v-model="formData.parent_menu" :props="{ label: 'menu_name', value: 'menu_key' }"
<el-tree-select class="input-width" v-if="formData.addon_name != ''" clearable
v-model="formData.parent_menu" :props="{ label: 'menu_name', value: 'menu_key' }"
:data="addonMenuList" check-strictly :render-after-expand="false" />
<el-tree-select class="input-width" v-else v-model="formData.parent_menu"
:props="{ label: 'menu_name', value: 'menu_key' }" :data="sysMenuList" check-strictly
<el-tree-select class="input-width" v-else v-model="formData.parent_menu" clearable
:props="{ label: 'menu_name', value: 'menu_key' }" :data="sysMenuList" check-strictly
:render-after-expand="false" />
</el-form-item>
<!-- <el-form-item :label="t('controller')">
@ -251,7 +255,7 @@
</el-tab-pane>
<el-tab-pane :label="t('associatedConfiguration')" name="associatedConfiguration">
<div class="mb-[20px]">
<el-button type="primary" class="w-[100px]" @click="addEvent(null, 0)">{{ t('insertAssociated')
<el-button type="primary" class="w-[100px]" @click="addEvent(null, -1)">{{ t('insertAssociated')
}}</el-button>
</div>
<el-table :data="formData.relations" size="large">
@ -295,7 +299,7 @@ import editAssociated from '@/app/views/tools/code/components/edit-associated.vu
import editViewType from '@/app/views/tools/code/components/edit-view-type.vue'
import editVerify from '@/app/views/tools/code/components/edit-verify.vue'
import { getGenerateTableInfo, editGenerateTable, getAddonDevelop, generatorCheckFile, generateCreate } from '@/app/api/tools'
import { getSystemMenu, getAddonMenu } from '@/app/api/sys'
import { getMenuByTypeDir } from '@/app/api/sys'
import { useRoute, useRouter } from 'vue-router'
import Sortable from 'sortablejs'
import { useTemplateRefsList } from '@vueuse/core'
@ -309,7 +313,7 @@ const id: number = parseInt(route.query.id || 0)
const loading = ref(true)
const tableRef = useTemplateRefsList<HTMLElement>()
const toggleIndex = ref(0)
let toggleIndex = ref(0)
const activeName = ref('basicSettings')
/**
* 表单数据
@ -395,12 +399,12 @@ const verifyType = [
{
label: '',
value: 'between'
}
},
]
const addonList = ref<Array<any>>([])
//
//
const getAddonDevelopFn = (search: string) => {
getAddonDevelop({ search }).then(res => {
addonList.value = res.data
@ -409,7 +413,7 @@ const getAddonDevelopFn = (search: string) => {
})
})
}
//
//
const rowDrop = () => {
const tbody = tableRef.value.$el.querySelector(
'.el-table__body-wrapper tbody'
@ -425,17 +429,17 @@ const rowDrop = () => {
nextTick(() => {
rowDrop()
})
}
},
})
}
onMounted(() => {
getAddonDevelopFn('')
})
// change
//change
const deleteTypeChange = (val: any) => {
formData.delete_column_name = val ? formData.table_column[formData.table_column.length - 1].column_name : ''
}
// change
//change
const orderColumnNameChange = (val: any) => {
formData.order_type = val ? 1 : 0
}
@ -450,7 +454,7 @@ const validator = computed(() => {
return formData.addon_name ? `addon${formData.addon_name ? '\\' + formData.addon_name : ''}\\app\\validate${formData.module_name ? '\\' + formData.module_name : ''}${formData.class_name ? '\\' + formData.class_name : ''}` : `app\\validate${formData.module_name ? '\\' + formData.module_name : ''}${formData.class_name ? '\\' + formData.class_name : ''}`
})
const webView = computed(() => {
return formData.addon_name ? `addon${formData.addon_name ? '\\' + formData.addon_name : ''}\\admin\\src` : 'admin\\src'
return formData.addon_name ? `addon${formData.addon_name ? '\\' + formData.addon_name : ''}\\admin\\src` : `admin\\src`
})
const routerView = computed(() => {
return formData.addon_name ? `addon${formData.addon_name ? '\\' + formData.addon_name : ''}\\app\\adminapi\\route${formData.module_name ? '\\' + formData.module_name : ''}` : `app\\adminapi\\route${formData.module_name ? '\\' + formData.module_name : ''}`
@ -462,8 +466,8 @@ const setFormData = async (id: number = 0) => {
if (data[key] != undefined) formData[key] = data[key]
})
formData.table_column.forEach(el => {
el.betweenMin = cloneDeep(el.min_number)
el.betweenMax = cloneDeep(el.max_number)
el.betweenMin = cloneDeep(el.min_number);
el.betweenMax = cloneDeep(el.max_number);
})
if (formData.addon_name != '') getAddonMenuFn(formData.addon_name)
loading.value = false
@ -474,46 +478,48 @@ const formRef = ref<FormInstance>()
const sysMenuList = ref<Array<any>>([])
const addonMenuList = ref<Array<any>>([])
//
//
const getSystemMenuFn = async () => {
const { data } = await getSystemMenu()
sysMenuList.value = [{ menu_name: '顶级', menu_key: '' }]
let { data } = await getMenuByTypeDir()
sysMenuList.value = [{ menu_name: "顶级", menu_key: "" }]
sysMenuList.value.push(...data)
}
getSystemMenuFn()
//
//
const getAddonMenuFn = async (key: any) => {
const { data } = await getAddonMenu(key)
let { data } = await getMenuByTypeDir(key)
addonMenuList.value = data
}
//
//
const addonChange = async (val: any) => {
formData.parent_menu = ''
if (val != '') {
await getAddonMenuFn(val)
formData.parent_menu = addonMenuList.value[0].menu_key
if (addonMenuList.value[0]) formData.parent_menu = addonMenuList.value[0].menu_key
}
}
const associatedIndex = ref(0)
const editDialog = ref()
//
//
const addEvent = (val: any, index: number) => {
associatedIndex.value = index
editDialog.value.setFormData(val)
}
const complete = (row: any) => {
if (associatedIndex.value) {
if (associatedIndex.value != -1) {
formData.relations.splice(associatedIndex.value, 1, row)
} else {
formData.relations.unshift(row)
}
}
//
//
const deleteEvent = (index: number) => {
formData.relations.splice(index, 1)
}
const onSave = async (code: number) => {
const data = cloneDeep(formData)
// if (data.table_column.some(el => { return ['select', 'radio', 'checkbox'].includes(el.view_type) && el.dict_type == '' })) {
// // ElMessage({
@ -544,13 +550,14 @@ const onSave = async (code: number) => {
loading.value = false
ElMessage({
type: 'success',
message: '操作成功'
message: '操作成功',
})
setTimeout(() => {
window.codeActiveName = 'codeList'
back()
}, 650)
}
}).catch(() => {
loading.value = false
})
@ -558,7 +565,7 @@ const onSave = async (code: number) => {
/**
* 同步校验
*/
const generatorCheckFileFn = () => {
const generatorCheckFileFn = (() => {
generatorCheckFile({ id: formData.id }).then(res => {
loading.value = false
ElMessageBox.confirm(
@ -566,7 +573,7 @@ const generatorCheckFileFn = () => {
t('warning'),
{
confirmButtonText: t('confirm'),
cancelButtonText: t('cancel')
cancelButtonText: t('cancel'),
}
)
.then(() => {
@ -577,7 +584,7 @@ const generatorCheckFileFn = () => {
}).catch(() => {
loading.value = false
})
}
})
/**
* 同步or下载
*/
@ -586,7 +593,7 @@ const generateCreateFn = (generate_type: any) => {
loading.value = false
ElMessage({
type: 'success',
message: '操作成功'
message: '操作成功',
})
window.open(img(res.data.file), '_blank')
setTimeout(() => {
@ -609,6 +616,7 @@ const validatorBtn = (row: any, index: number) => {
rowIndex.value = index
editVerifyRef.value?.setFormData(row)
}
}
const completeVerify = (row: any) => {
formData.table_column.splice(rowIndex.value, 1, row)
@ -616,11 +624,13 @@ const completeVerify = (row: any) => {
const viewTypeBtn = (row: any, index: number) => {
if (!['input', 'textarea'].includes(row.view_type)) row.validate_type = ''
if (['select', 'radio', 'checkbox'].includes(row.view_type)) {
rowIndex.value = index
editViewTypeRef.value?.setFormData(row)
} else if (row.view_type === 'number') {
validatorBtn(row, index)
}
}
const completeViewType = (row: any) => {
formData.table_column.splice(rowIndex.value, 1, row)

View File

@ -97,13 +97,12 @@
<el-tab-pane :label="t('codeList')" name="codeList">
<el-card class="box-card !border-none my-[10px] table-search-wrap" shadow="never">
<el-form :inline="true" :model="codeTableData.searchParam" ref="searchFormRef">
<el-form-item :label="t('addonName')" prop="addon_name">
<el-select v-model="codeTableData.searchParam.addon_name" placeholder="Select" filterable
remote clearable :remote-method="getAddonDevelopFn">
<el-form-item :label="t('addonName')" prop="addon_name">
<el-select v-model="codeTableData.searchParam.addon_name" placeholder="Select" filterable remote clearable :remote-method="getAddonDevelopFn">
<el-option label="全部" value="" />
<el-option label="系统" value="2" />
<el-option :label="item.title" :value="item.key" v-for="item in addonList"
:key="item.key" />
:key="item.key" />
</el-select>
</el-form-item>
@ -111,7 +110,7 @@
<el-input v-model="codeTableData.searchParam.table_name"
:placeholder="t('tableNamePlaceholder')" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="loadGenerateTableList()">{{ t('search') }}</el-button>
<el-button @click="resetForm(searchFormRef)">{{ t('reset') }}</el-button>
@ -171,10 +170,9 @@
<el-dialog v-model="dialogVisible" class="dialog-visible" width="70%" title="代码预览">
<div class="flex h-[50vh]" v-loading="codeLoading">
<el-scrollbar class="h-[100%] w-[270px]">
<el-tree v-if="treeData.length && treeKey != ''" :data="treeData"
:props="{ label: 'name', value: 'key' }" node-key="key" :current-node-key="treeKey"
:expand-on-click-node="false" highlight-current default-expand-all ref="treeRef"
@node-click="nodeClick">
<el-tree v-if="treeData.length && treeKey != ''" :data="treeData" :props="{ label: 'name', value: 'key' }"
node-key="key" :current-node-key="treeKey" :expand-on-click-node="false" highlight-current
default-expand-all ref="treeRef" @node-click="nodeClick">
<template #default="{ node, data }">
<div class="flex items-center">
<el-icon v-if="data.children">
@ -204,7 +202,7 @@
<script lang="ts" setup>
import { reactive, ref, onMounted } from 'vue'
import { t } from '@/lang'
import { getGenerateTableList, deleteGenerateTable, generateCreate, generatePreview, generatorCheckFile, getAddonDevelop } from '@/app/api/tools'
import { getGenerateTableList, deleteGenerateTable, generateCreate, generatePreview, generatorCheckFile,getAddonDevelop } from '@/app/api/tools'
import { img } from '@/utils/common'
import { ElMessageBox, ElMessage } from 'element-plus'
import AddTable from '@/app/views/tools/code/components/add-table.vue'
@ -212,20 +210,20 @@ import type { FormInstance } from 'element-plus'
import { useRouter, useRoute } from 'vue-router'
const route = useRoute()
const pageName = route.meta.title
const pageName = route.meta.title;
const router = useRouter()
const activeName = ref('codeGeneration')
const codeTableData = reactive({
let codeTableData = reactive({
page: 1,
limit: 10,
total: 0,
loading: true,
data: [],
searchParam: {
table_name: '',
table_content: '',
addon_name: ''
table_name: "",
table_content: "",
addon_name:""
}
})
@ -234,8 +232,8 @@ const searchFormRef = ref<FormInstance>()
const resetForm = (formEl: FormInstance | undefined) => {
if (!formEl) return
formEl.resetFields()
loadGenerateTableList()
formEl.resetFields();
loadGenerateTableList();
}
onMounted(() => {
if (window.codeActiveName) {
@ -265,7 +263,7 @@ const loadGenerateTableList = (page: number = 1) => {
}
const addonList = ref<Array<any>>([])
//
//
const getAddonDevelopFn = (search: string) => {
getAddonDevelop({ search }).then(res => {
addonList.value = res.data
@ -274,6 +272,7 @@ const getAddonDevelopFn = (search: string) => {
const addCodeDialog: Record<string, any> | null = ref(null)
/**
* 添加代码生成
*/
@ -290,7 +289,7 @@ const deleteEvent = (id: number) => {
{
confirmButtonText: t('confirm'),
cancelButtonText: t('cancel'),
type: 'warning'
type: 'warning',
}
).then(() => {
deleteGenerateTable(id).then(() => {
@ -300,6 +299,7 @@ const deleteEvent = (id: number) => {
})
}
/**
* 编辑
* @param data
@ -311,7 +311,7 @@ const editEvent = (data: any) => {
/**
* 同步校验
*/
const generatorCheckFileFn = (id: any) => {
const generatorCheckFileFn = ((id: any) => {
generatorCheckFile({ id }).then(res => {
codeTableData.loading = false
ElMessageBox.confirm(
@ -319,7 +319,7 @@ const generatorCheckFileFn = (id: any) => {
t('warning'),
{
confirmButtonText: t('confirm'),
cancelButtonText: t('cancel')
cancelButtonText: t('cancel'),
}
)
.then(() => {
@ -329,7 +329,7 @@ const generatorCheckFileFn = (id: any) => {
}).catch(() => {
codeTableData.loading = false
})
}
})
/**
* 同步or下载
@ -339,11 +339,12 @@ const generateCreateFn = (id: any, generate_type: any) => {
generateCreate({ id, generate_type }).then(res => {
ElMessage({
type: 'success',
message: '操作成功'
message: '操作成功',
})
if (generate_type != 3) {
codeTableData.loading = false
window.open(img(res.data.file), '_blank')
} else {
loadGenerateTableList()
}
@ -374,6 +375,7 @@ const generatePreviewFn = (id: number) => {
codeLoading.value = false
}).catch(() => {
codeLoading.value = false
})
}
@ -383,32 +385,32 @@ const nodeClick = (node) => {
})
}
const listToTree = (arr) => {
const ret = []
var ret = [];
if (Array.isArray(arr)) {
for (let i = 0; i < arr.length; ++i) {
const path = arr[i].split('/')
let _ret = ret
for (let j = 0; j < path.length; ++j) {
const name = path[j]
let obj = null
for (var i = 0; i < arr.length; ++i) {
var path = arr[i].split("/");
var _ret = ret;
for (var j = 0; j < path.length; ++j) {
var name = path[j];
var obj = null;
for (var k = 0; k < _ret.length; ++k) {
const _obj = _ret[k]
var _obj = _ret[k];
if (_obj.name === name) {
obj = _obj
break
obj = _obj;
break;
}
}
if (!obj) {
obj = { name, path: name.indexOf('.') < 0 ? '' : arr[i], key: 'k' + i + j + k }
if (name.indexOf('.') < 0) obj.children = []
obj = { name: name, path: name.indexOf(".") < 0 ? '' : arr[i], key: 'k' + i + j + k };
if (name.indexOf(".") < 0) obj.children = [];
if (obj.path === arr[0]) treeKey.value = obj.key
_ret.push(obj)
_ret.push(obj);
}
if (obj.children) _ret = obj.children
if (obj.children) _ret = obj.children;
}
}
}
return ret
return ret;
}
</script>
@ -449,9 +451,9 @@ const listToTree = (arr) => {
justify-content: center;
}
:deep(.dialog-visible .el-scrollbar__view),
:deep(.dialog-visible .el-scrollbar__view .hljs.ruby) {
:deep(.dialog-visible .el-scrollbar__view), :deep(.dialog-visible .el-scrollbar__view .hljs.ruby){
height: 100%;
}
</style>
<style></style>
<style>
</style>

View File

@ -99,7 +99,7 @@
"timeout": "网络请求超时!",
"requestError": "请求错误",
"errNetwork": "网络请求错误",
"baseUrlError": " 接口请求错误,请检查VITE_APP_BASE_URL参数配置或者伪静态配置"
"baseUrlError": " 接口请求错误,请检查VITE_APP_BASE_URL参数配置或者伪静态配置, <a style='text-decoration: underline;' href='https://www.kancloud.cn/niucloud/niucloud-admin-develop/3213750' target='blank'>点击查看相关手册</a>"
},
"linkPlaceholder": "请选择跳转链接",
"selectLinkTips": "链接选择",

View File

@ -25,7 +25,7 @@ const systemStore = useSystemStore()
const userStore = useUserStore()
const route = useRoute()
const router = useRouter()
const siteInfo = storage.get('siteInfo') || false
const siteInfo = userStore.siteInfo
const menuActive = computed(() => String(route.name))

View File

@ -2,7 +2,7 @@
<el-container class="w-100 h-screen">
<el-header class="logo-wrap w-100 border-0 border-b-[1px] border-solid border-[e5e7eb]">
<div class="logo flex items-center m-auto max-w-[210px] h-[30px]" v-if="!systemStore.menuIsCollapse">
<img class="max-h-[40px] max-w-[40px] rounded-full" v-if="storage.get('siteInfo').logo" :src="img(siteInfo.logo)" alt="">
<img class="max-h-[40px] max-w-[40px] rounded-full" v-if="siteInfo.logo" :src="img(siteInfo.logo)" alt="">
<img class="max-h-[40px] max-w-[40px] rounded-full" v-else src="@/app/assets/images/icon-addon.png" alt="">
<span class="ml-[8px] text-[16px]">{{siteInfo.site_name}}</span>
</div>
@ -35,7 +35,7 @@ const logo = ref('@/app/assets/images/login_logo.png')
const systemStore = useSystemStore()
const userStore = useUserStore()
const route = useRoute()
const siteInfo = storage.get('siteInfo') || false
const siteInfo = userStore.siteInfo
const menuActive = computed(() => String(route.name))
let currAppData = ref([]);

View File

@ -5,7 +5,7 @@
<el-header class="logo-wrap w-100 h-auto mb-[30px]">
<div class="logo flex items-center m-auto max-w-[230px] h-[60px] justify-center"
v-if="!systemStore.menuIsCollapse">
<img class="max-h-full max-w-full" v-if="storage.get('siteInfo').logo" :src="img(siteInfo.logo)" alt="">
<img class="max-h-full max-w-full" v-if="siteInfo.logo" :src="img(siteInfo.logo)" alt="">
<img class="max-h-full max-w-full" v-else src="@/app/assets/images/login_logo.png" alt="">
</div>
<div class="logo flex items-center justify-center w-[64px] h-[30px]" v-else>
@ -42,13 +42,13 @@ import storage from '@/utils/storage'
const userStore = useUserStore()
const systemStore = useSystemStore()
const siteInfo = userStore.siteInfo
const route = useRoute()
const router = useRouter()
const menuActive = computed(() => {
console.log("route.name", route.name);
return String(route.name)
})
console.log("userStore.routers", userStore.routers, menuActive)
watch(route, () => {
systemStore.$patch(state => {
state.menuDrawer = false

View File

@ -2,7 +2,7 @@
<el-container class="w-100 h-screen" :class="[{ 'sidebar-dark-mode': systemStore.sidebar == 'twoType' }, { 'sidebar-brightness-mode': systemStore.sidebar == 'oneType' }]">
<el-header class="logo-wrap w-100">
<div class="logo flex items-center m-auto max-w-[210px] h-[30px]" v-if="!systemStore.menuIsCollapse">
<img class="max-h-full max-w-full" v-if="storage.get('siteInfo').logo" :src="img(siteInfo.logo)" alt="">
<img class="max-h-full max-w-full" v-if="siteInfo.logo" :src="img(siteInfo.logo)" alt="">
<img class="max-h-full max-w-full" v-else src="@/app/assets/images/login_logo.png" alt="">
</div>
<div class="logo flex items-center justify-center w-[64px] h-[30px]" v-else>
@ -34,7 +34,7 @@ const logo = ref('@/app/assets/images/login_logo.png')
const systemStore = useSystemStore()
const userStore = useUserStore()
const route = useRoute()
const siteInfo = storage.get('siteInfo') || false
const siteInfo = userStore.siteInfo
const menuActive = computed(() => String(route.name))
console.log("userStore.routers",userStore.routers)

View File

@ -47,8 +47,13 @@ router.beforeEach(async (to, from, next) => {
to.redirectedFrom && (to.query = to.redirectedFrom.query)
const userStore = useUserStore()
const siteInfo = storage.get('siteInfo') || false
let title = (to.meta.title ? (to.meta.title + ' - ') : '') + (siteInfo.site_name ? siteInfo.site_name : '')
const siteInfo = userStore.siteInfo
if (!siteInfo && getAppType() != 'home') {
await userStore.getSiteInfo()
}
let title = (to.meta.title ? (to.meta.title + ' - ') : '') + (siteInfo ? siteInfo.site_name : '')
// 设置网站标题
setWindowTitle(title)
@ -79,7 +84,7 @@ router.beforeEach(async (to, from, next) => {
}
} else {
try {
if (userStore.siteInfo.site_id == undefined) {
if (!userStore.siteInfo || userStore.siteInfo.site_id == undefined) {
if (to.path === '/home/index') {
next()
} else {
@ -132,7 +137,8 @@ router.beforeEach(async (to, from, next) => {
}
} catch (err) {
userStore.logout()
console.log(err)
// userStore.logout()
next({ path: loginPath, query: { redirect: to.fullPath } })
}
}

View File

@ -80,6 +80,10 @@ export const HOME_ROUTE: RouteRecordRaw = {
{
path: 'index',
name: Symbol('homeIndex'),
meta: {
type: 1,
title: '站点管理'
},
component: () => import('@/app/views/home/index.vue')
}
]

View File

@ -1,6 +1,6 @@
import { defineStore } from 'pinia'
import { getToken, setToken, removeToken, getAppType } from '@/utils/common'
import { login, getAuthMenus } from '@/app/api/auth'
import { login, getAuthMenus, getSiteInfo } from '@/app/api/auth'
import storage from '@/utils/storage'
import router from '@/router'
import { formatRouters } from '@/router/routers'
@ -19,7 +19,7 @@ const useSystemStore = defineStore('user', {
return {
token: getToken() || '',
userInfo: storage.get('userinfo') || {},
siteInfo: storage.get('siteInfo') || {},
siteInfo: null,
routers: [],
rules: [],
routeGather: {
@ -32,6 +32,16 @@ const useSystemStore = defineStore('user', {
setRoute(type, data) {
this.routeGather[type] = data;
},
async getSiteInfo() {
await getSiteInfo().then(({ data }) => {
this.siteInfo = data
storage.set({ key: 'siteId', data: data.site_id || 0 })
storage.set({ key: 'siteInfo', data: data })
storage.set({ key: 'comparisonSiteIdStorage', data: data.site_id || 0 })
}).catch(() => {
})
},
login(form: object, app_type: any) {
return new Promise((resolve, reject) => {
login(form, app_type)
@ -45,7 +55,6 @@ const useSystemStore = defineStore('user', {
storage.set({ key: 'siteInfo', data: res.data.site_info || {} })
storage.set({ key: 'comparisonSiteIdStorage', data: res.data.site_id || 0 })
storage.set({ key: 'comparisonTokenStorage', data: res.data.token })
storage.set({ key: 'layout', data: (res.data.layout || 'default') })
resolve(res)
})
.catch((error) => {

View File

@ -55,7 +55,7 @@ class Request {
const res = response.data
if (res.code != 1) {
this.handleAuthError(res.code)
if (res.code != 401 && response.config.showErrorMessage !== false) ElMessage({ message: res.msg, type: 'error' })
if (res.code != 401 && response.config.showErrorMessage !== false) ElMessage({ message: res.msg, type: 'error', dangerouslyUseHTMLString: true, duration: 5000 })
return Promise.reject(new Error(res.msg || 'Error'))
} else {
if (response.config.showSuccessMessage) ElMessage({ message: res.msg, type: 'success' })
@ -168,7 +168,7 @@ class Request {
const baseURL = isUrl(err.config.baseURL) ? err.config.baseURL : `${location.origin}${err.config.baseURL}`
errMessage = baseURL + t('axios.baseUrlError')
}
errMessage && ElMessage({ message: errMessage, type: 'error' })
errMessage && ElMessage({ dangerouslyUseHTMLString: true, duration: 5000, message: errMessage, type: 'error' })
}
private handleAuthError(code: number) {
@ -176,6 +176,9 @@ class Request {
case 401:
useUserStore().logout()
break;
case 400:
useUserStore().logout()
break;
}
}
}

View File

@ -10,16 +10,7 @@ return [
// #endif
"navigationBarTitleText": "%{{addon_name}}.pages.index%"
}
},
{
"path": "{{addon_name}}/pages/info",
"style": {
// #ifdef H5
"navigationStyle": "custom",
// #endif
"navigationBarTitleText": "%{{addon_name}}.pages.info%"
}
}
// PAGE_END
EOT
];
];

View File

@ -1,43 +1,9 @@
<template>
<view class="bg-gray-100 min-h-[100vh]">
<view class="fixed top-0 inset-x-0 z-10">
<view
class='p-[10px] bg-white border-solid border-t-0 border-l-0 border-r-0 border-b-[1px] border-gray-200'>
<u-search :placeholder="t('searchPlaceholder')" actionText :actionStyle="{'width':0,'margin':0}"
v-model="articleTitle" @clickIcon="searchFn"></u-search>
</view>
<scroll-view :scroll-x="true" :enable-flex="true"
class="nav-list bg-white align-center px-[10px] box-border">
<view class="flex scroll-view-wrap">
<view
:class="['nav-item text-[14px] mx-[5px] h-[30px] leading-[30px] my-[5px] border-t-0 border-l-0 border-r-0',{'border-solid border-b-[2px] active': currCategoryId==item.category_id}]"
@click="loadCategory(item.category_id)" v-for="(item,index) in categoryList"
:key="item.category_id">
{{item.name}}
</view>
</view>
</scroll-view>
hello_world
</view>
<mescroll-body ref="mescrollRef" @init="mescrollInit" top="220rpx" @down="downCallback" @up="getArticleListFn">
<view v-for="(item,index) in articleList" :key="item.id"
:class="['bg-white flex align-center p-[10px]',{'border-solid border-t-0 border-l-0 border-r-0 border-b-[1px] border-gray-200': articleList.length-1 !== index}] "
@click="toLink(item.id)">
<u--image width="260rpx" height="200rpx" :src="img(item.image)" v-if="item.image" model="aspectFill">
<template #error>
<u-icon name="photo" color="#999" size="50"></u-icon>
</template>
</u--image>
<view class="flex-1 flex flex-col justify-between ml-[10px]">
<view class="text-[16px] leading-[1.3] multi-hidden mt-[2px]">{{item.title}}</view>
<view class="text-[14px] using-hidden mb-[auto] mt-[10px] text-gray-500">{{item.summary}}</view>
<view class="text-[12px] text-gray-400 flex justify-between mb-[5px]">
<text class="">{{item.create_time}}</text>
</view>
</view>
</view>
<mescroll-empty v-if="!articleList.length && loading"></mescroll-empty>
</mescroll-body>
<tabbar />
</view>
</template>
@ -46,121 +12,14 @@
import { reactive, ref, onMounted } from 'vue'
import { onLoad } from '@dcloudio/uni-app'
import { t } from '@/locale'
import { redirect, img } from '@/utils/common';
import { getArticleList, getArticleCategory } from '@/api/article';
import MescrollBody from '@/components/mescroll/mescroll-body/mescroll-body.vue';
import MescrollEmpty from '@/components/mescroll/mescroll-empty/mescroll-empty.vue';
import useMescroll from '@/components/mescroll/hooks/useMescroll.js';
import { onPageScroll, onReachBottom } from '@dcloudio/uni-app';
const { mescrollInit, downCallback, getMescroll } = useMescroll(onPageScroll, onReachBottom);
import { useShare } from '@/hooks/useShare'
const { setShare, onShareAppMessage, onShareTimeline } = useShare()
setShare()
onShareAppMessage()
onShareTimeline()
let categoryList = ref<Array<Object>>([]);
let articleList = ref<Array<any>>([]);
let currCategoryId = ref<number | string>('');
let articleTitle = ref<string>('');
let mescrollRef = ref(null);
let loading = ref<boolean>(false);
interface acceptingDataStructure {
data : acceptingDataItemStructure,
msg : string,
code : number
}
interface acceptingDataItemStructure {
data : object,
[propName : string] : number | string | object
}
onLoad(async () => {
await getArticleCategory().then((res : acceptingDataStructure) => {
const initData = { name: t("all"), category_id: '' };
categoryList.value.push(initData);
categoryList.value = categoryList.value.concat(res.data.data);
});
})
interface mescrollStructure {
num : number,
size : number,
endSuccess : Function,
[propName : string] : any
}
const getArticleListFn = (mescroll : mescrollStructure) => {
loading.value = false;
let data : object = {
category_id: currCategoryId.value,
title: articleTitle.value,
page: mescroll.num,
limit: mescroll.size
};
getArticleList(data).then((res : acceptingDataStructure) => {
let newArr = (res.data.data as Array<Object>);
//
if (mescroll.num == 1) {
articleList.value = []; //
}
articleList.value = articleList.value.concat(newArr);
mescroll.endSuccess(newArr.length);
loading.value = true;
}).catch(() => {
loading.value = true;
mescroll.endErr(); // ,
})
}
const loadCategory = (id : string) => {
currCategoryId.value = id;
getMescroll().resetUpScroll();
}
const searchFn = () => {
getMescroll().resetUpScroll();
}
const toLink = (id : string) => {
redirect({ url: '/pages/article/detail', param: { id } })
}
onMounted(() => {
setTimeout(() => {
getMescroll().optUp.textNoMore = t("end");
}, 500)
});
</script>
<style lang="scss" scoped>
.nav-item.active {
color: $u-primary;
}
.scroll-view-wrap {
word-break: keep-all;
}
/* 单行超出隐藏 */
.using-hidden {
word-break: break-all;
text-overflow: ellipsis;
overflow: hidden;
display: -webkit-box;
-webkit-line-clamp: 1;
-webkit-box-orient: vertical;
white-space: break-spaces;
}
/* 多行超出隐藏 */
.multi-hidden {
word-break: break-all;
text-overflow: ellipsis;
overflow: hidden;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
}
</style>
</style>

View File

@ -1,166 +0,0 @@
<template>
<view class="bg-gray-100 min-h-[100vh]">
<view class="fixed top-0 inset-x-0 z-10">
<view
class='p-[10px] bg-white border-solid border-t-0 border-l-0 border-r-0 border-b-[1px] border-gray-200'>
<u-search :placeholder="t('searchPlaceholder')" actionText :actionStyle="{'width':0,'margin':0}"
v-model="articleTitle" @clickIcon="searchFn"></u-search>
</view>
<scroll-view :scroll-x="true" :enable-flex="true"
class="nav-list bg-white align-center px-[10px] box-border">
<view class="flex scroll-view-wrap">
<view
:class="['nav-item text-[14px] mx-[5px] h-[30px] leading-[30px] my-[5px] border-t-0 border-l-0 border-r-0',{'border-solid border-b-[2px] active': currCategoryId==item.category_id}]"
@click="loadCategory(item.category_id)" v-for="(item,index) in categoryList"
:key="item.category_id">
{{item.name}}
</view>
</view>
</scroll-view>
</view>
<mescroll-body ref="mescrollRef" @init="mescrollInit" top="220rpx" @down="downCallback" @up="getArticleListFn">
<view v-for="(item,index) in articleList" :key="item.id"
:class="['bg-white flex align-center p-[10px]',{'border-solid border-t-0 border-l-0 border-r-0 border-b-[1px] border-gray-200': articleList.length-1 !== index}] "
@click="toLink(item.id)">
<u--image width="260rpx" height="200rpx" :src="img(item.image)" v-if="item.image" model="aspectFill">
<template #error>
<u-icon name="photo" color="#999" size="50"></u-icon>
</template>
</u--image>
<view class="flex-1 flex flex-col justify-between ml-[10px]">
<view class="text-[16px] leading-[1.3] multi-hidden mt-[2px]">{{item.title}}</view>
<view class="text-[14px] using-hidden mb-[auto] mt-[10px] text-gray-500">{{item.summary}}</view>
<view class="text-[12px] text-gray-400 flex justify-between mb-[5px]">
<text class="">{{item.create_time}}</text>
</view>
</view>
</view>
<mescroll-empty v-if="!articleList.length && loading"></mescroll-empty>
</mescroll-body>
<tabbar />
</view>
</template>
<script setup lang="ts">
import { reactive, ref, onMounted } from 'vue'
import { onLoad } from '@dcloudio/uni-app'
import { t } from '@/locale'
import { redirect, img } from '@/utils/common';
import { getArticleList, getArticleCategory } from '@/api/article';
import MescrollBody from '@/components/mescroll/mescroll-body/mescroll-body.vue';
import MescrollEmpty from '@/components/mescroll/mescroll-empty/mescroll-empty.vue';
import useMescroll from '@/components/mescroll/hooks/useMescroll.js';
import { onPageScroll, onReachBottom } from '@dcloudio/uni-app';
const { mescrollInit, downCallback, getMescroll } = useMescroll(onPageScroll, onReachBottom);
import { useShare } from '@/hooks/useShare'
const { setShare, onShareAppMessage, onShareTimeline } = useShare()
setShare()
onShareAppMessage()
onShareTimeline()
let categoryList = ref<Array<Object>>([]);
let articleList = ref<Array<any>>([]);
let currCategoryId = ref<number | string>('');
let articleTitle = ref<string>('');
let mescrollRef = ref(null);
let loading = ref<boolean>(false);
interface acceptingDataStructure {
data : acceptingDataItemStructure,
msg : string,
code : number
}
interface acceptingDataItemStructure {
data : object,
[propName : string] : number | string | object
}
onLoad(async () => {
await getArticleCategory().then((res : acceptingDataStructure) => {
const initData = { name: t("all"), category_id: '' };
categoryList.value.push(initData);
categoryList.value = categoryList.value.concat(res.data.data);
});
})
interface mescrollStructure {
num : number,
size : number,
endSuccess : Function,
[propName : string] : any
}
const getArticleListFn = (mescroll : mescrollStructure) => {
loading.value = false;
let data : object = {
category_id: currCategoryId.value,
title: articleTitle.value,
page: mescroll.num,
limit: mescroll.size
};
getArticleList(data).then((res : acceptingDataStructure) => {
let newArr = (res.data.data as Array<Object>);
//
if (mescroll.num == 1) {
articleList.value = []; //
}
articleList.value = articleList.value.concat(newArr);
mescroll.endSuccess(newArr.length);
loading.value = true;
}).catch(() => {
loading.value = true;
mescroll.endErr(); // ,
})
}
const loadCategory = (id : string) => {
currCategoryId.value = id;
getMescroll().resetUpScroll();
}
const searchFn = () => {
getMescroll().resetUpScroll();
}
const toLink = (id : string) => {
redirect({ url: '/pages/article/detail', param: { id } })
}
onMounted(() => {
setTimeout(() => {
getMescroll().optUp.textNoMore = t("end");
}, 500)
});
</script>
<style lang="scss" scoped>
.nav-item.active {
color: $u-primary;
}
.scroll-view-wrap {
word-break: keep-all;
}
/* 单行超出隐藏 */
.using-hidden {
word-break: break-all;
text-overflow: ellipsis;
overflow: hidden;
display: -webkit-box;
-webkit-line-clamp: 1;
-webkit-box-orient: vertical;
white-space: break-spaces;
}
/* 多行超出隐藏 */
.multi-hidden {
word-break: break-all;
text-overflow: ellipsis;
overflow: hidden;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
}
</style>

View File

@ -1,166 +0,0 @@
<template>
<view class="bg-gray-100 min-h-[100vh]">
<view class="fixed top-0 inset-x-0 z-10">
<view
class='p-[10px] bg-white border-solid border-t-0 border-l-0 border-r-0 border-b-[1px] border-gray-200'>
<u-search :placeholder="t('searchPlaceholder')" actionText :actionStyle="{'width':0,'margin':0}"
v-model="articleTitle" @clickIcon="searchFn"></u-search>
</view>
<scroll-view :scroll-x="true" :enable-flex="true"
class="nav-list bg-white align-center px-[10px] box-border">
<view class="flex scroll-view-wrap">
<view
:class="['nav-item text-[14px] mx-[5px] h-[30px] leading-[30px] my-[5px] border-t-0 border-l-0 border-r-0',{'border-solid border-b-[2px] active': currCategoryId==item.category_id}]"
@click="loadCategory(item.category_id)" v-for="(item,index) in categoryList"
:key="item.category_id">
{{item.name}}
</view>
</view>
</scroll-view>
</view>
<mescroll-body ref="mescrollRef" @init="mescrollInit" top="220rpx" @down="downCallback" @up="getArticleListFn">
<view v-for="(item,index) in articleList" :key="item.id"
:class="['bg-white flex align-center p-[10px]',{'border-solid border-t-0 border-l-0 border-r-0 border-b-[1px] border-gray-200': articleList.length-1 !== index}] "
@click="toLink(item.id)">
<u--image width="260rpx" height="200rpx" :src="img(item.image)" v-if="item.image" model="aspectFill">
<template #error>
<u-icon name="photo" color="#999" size="50"></u-icon>
</template>
</u--image>
<view class="flex-1 flex flex-col justify-between ml-[10px]">
<view class="text-[16px] leading-[1.3] multi-hidden mt-[2px]">{{item.title}}</view>
<view class="text-[14px] using-hidden mb-[auto] mt-[10px] text-gray-500">{{item.summary}}</view>
<view class="text-[12px] text-gray-400 flex justify-between mb-[5px]">
<text class="">{{item.create_time}}</text>
</view>
</view>
</view>
<mescroll-empty v-if="!articleList.length && loading"></mescroll-empty>
</mescroll-body>
<tabbar />
</view>
</template>
<script setup lang="ts">
import { reactive, ref, onMounted } from 'vue'
import { onLoad } from '@dcloudio/uni-app'
import { t } from '@/locale'
import { redirect, img } from '@/utils/common';
import { getArticleList, getArticleCategory } from '@/cms/api/article';
import MescrollBody from '@/components/mescroll/mescroll-body/mescroll-body.vue';
import MescrollEmpty from '@/components/mescroll/mescroll-empty/mescroll-empty.vue';
import useMescroll from '@/components/mescroll/hooks/useMescroll.js';
import { onPageScroll, onReachBottom } from '@dcloudio/uni-app';
const { mescrollInit, downCallback, getMescroll } = useMescroll(onPageScroll, onReachBottom);
import { useShare } from '@/hooks/useShare'
const { setShare, onShareAppMessage, onShareTimeline } = useShare()
setShare()
onShareAppMessage()
onShareTimeline()
let categoryList = ref<Array<Object>>([]);
let articleList = ref<Array<any>>([]);
let currCategoryId = ref<number | string>('');
let articleTitle = ref<string>('');
let mescrollRef = ref(null);
let loading = ref<boolean>(false);
interface acceptingDataStructure {
data : acceptingDataItemStructure,
msg : string,
code : number
}
interface acceptingDataItemStructure {
data : object,
[propName : string] : number | string | object
}
onLoad(async () => {
await getArticleCategory().then((res : acceptingDataStructure) => {
const initData = { name: t("all"), category_id: '' };
categoryList.value.push(initData);
categoryList.value = categoryList.value.concat(res.data.data);
});
})
interface mescrollStructure {
num : number,
size : number,
endSuccess : Function,
[propName : string] : any
}
const getArticleListFn = (mescroll : mescrollStructure) => {
loading.value = false;
let data : object = {
category_id: currCategoryId.value,
title: articleTitle.value,
page: mescroll.num,
limit: mescroll.size
};
getArticleList(data).then((res : acceptingDataStructure) => {
let newArr = (res.data.data as Array<Object>);
//
if (mescroll.num == 1) {
articleList.value = []; //
}
articleList.value = articleList.value.concat(newArr);
mescroll.endSuccess(newArr.length);
loading.value = true;
}).catch(() => {
loading.value = true;
mescroll.endErr(); // ,
})
}
const loadCategory = (id : string) => {
currCategoryId.value = id;
getMescroll().resetUpScroll();
}
const searchFn = () => {
getMescroll().resetUpScroll();
}
const toLink = (id : string) => {
redirect({ url: '/cms/pages/detail', param: { id } })
}
onMounted(() => {
setTimeout(() => {
getMescroll().optUp.textNoMore = t("end");
}, 500)
});
</script>
<style lang="scss" scoped>
.nav-item.active {
color: $u-primary;
}
.scroll-view-wrap {
word-break: keep-all;
}
/* 单行超出隐藏 */
.using-hidden {
word-break: break-all;
text-overflow: ellipsis;
overflow: hidden;
display: -webkit-box;
-webkit-line-clamp: 1;
-webkit-box-orient: vertical;
white-space: break-spaces;
}
/* 多行超出隐藏 */
.multi-hidden {
word-break: break-all;
text-overflow: ellipsis;
overflow: hidden;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
}
</style>

View File

@ -1,166 +0,0 @@
<template>
<view class="bg-gray-100 min-h-[100vh]">
<view class="fixed top-0 inset-x-0 z-10">
<view
class='p-[10px] bg-white border-solid border-t-0 border-l-0 border-r-0 border-b-[1px] border-gray-200'>
<u-search :placeholder="t('searchPlaceholder')" actionText :actionStyle="{'width':0,'margin':0}"
v-model="articleTitle" @clickIcon="searchFn"></u-search>
</view>
<scroll-view :scroll-x="true" :enable-flex="true"
class="nav-list bg-white align-center px-[10px] box-border">
<view class="flex scroll-view-wrap">
<view
:class="['nav-item text-[14px] mx-[5px] h-[30px] leading-[30px] my-[5px] border-t-0 border-l-0 border-r-0',{'border-solid border-b-[2px] active': currCategoryId==item.category_id}]"
@click="loadCategory(item.category_id)" v-for="(item,index) in categoryList"
:key="item.category_id">
{{item.name}}
</view>
</view>
</scroll-view>
</view>
<mescroll-body ref="mescrollRef" @init="mescrollInit" top="220rpx" @down="downCallback" @up="getArticleListFn">
<view v-for="(item,index) in articleList" :key="item.id"
:class="['bg-white flex align-center p-[10px]',{'border-solid border-t-0 border-l-0 border-r-0 border-b-[1px] border-gray-200': articleList.length-1 !== index}] "
@click="toLink(item.id)">
<u--image width="260rpx" height="200rpx" :src="img(item.image)" v-if="item.image" model="aspectFill">
<template #error>
<u-icon name="photo" color="#999" size="50"></u-icon>
</template>
</u--image>
<view class="flex-1 flex flex-col justify-between ml-[10px]">
<view class="text-[16px] leading-[1.3] multi-hidden mt-[2px]">{{item.title}}</view>
<view class="text-[14px] using-hidden mb-[auto] mt-[10px] text-gray-500">{{item.summary}}</view>
<view class="text-[12px] text-gray-400 flex justify-between mb-[5px]">
<text class="">{{item.create_time}}</text>
</view>
</view>
</view>
<mescroll-empty v-if="!articleList.length && loading"></mescroll-empty>
</mescroll-body>
<tabbar />
</view>
</template>
<script setup lang="ts">
import { reactive, ref, onMounted } from 'vue'
import { onLoad } from '@dcloudio/uni-app'
import { t } from '@/locale'
import { redirect, img } from '@/utils/common';
import { getArticleList, getArticleCategory } from '@/cms/api/article';
import MescrollBody from '@/components/mescroll/mescroll-body/mescroll-body.vue';
import MescrollEmpty from '@/components/mescroll/mescroll-empty/mescroll-empty.vue';
import useMescroll from '@/components/mescroll/hooks/useMescroll.js';
import { onPageScroll, onReachBottom } from '@dcloudio/uni-app';
const { mescrollInit, downCallback, getMescroll } = useMescroll(onPageScroll, onReachBottom);
import { useShare } from '@/hooks/useShare'
const { setShare, onShareAppMessage, onShareTimeline } = useShare()
setShare()
onShareAppMessage()
onShareTimeline()
let categoryList = ref<Array<Object>>([]);
let articleList = ref<Array<any>>([]);
let currCategoryId = ref<number | string>('');
let articleTitle = ref<string>('');
let mescrollRef = ref(null);
let loading = ref<boolean>(false);
interface acceptingDataStructure {
data : acceptingDataItemStructure,
msg : string,
code : number
}
interface acceptingDataItemStructure {
data : object,
[propName : string] : number | string | object
}
onLoad(async () => {
await getArticleCategory().then((res : acceptingDataStructure) => {
const initData = { name: t("all"), category_id: '' };
categoryList.value.push(initData);
categoryList.value = categoryList.value.concat(res.data.data);
});
})
interface mescrollStructure {
num : number,
size : number,
endSuccess : Function,
[propName : string] : any
}
const getArticleListFn = (mescroll : mescrollStructure) => {
loading.value = false;
let data : object = {
category_id: currCategoryId.value,
title: articleTitle.value,
page: mescroll.num,
limit: mescroll.size
};
getArticleList(data).then((res : acceptingDataStructure) => {
let newArr = (res.data.data as Array<Object>);
//
if (mescroll.num == 1) {
articleList.value = []; //
}
articleList.value = articleList.value.concat(newArr);
mescroll.endSuccess(newArr.length);
loading.value = true;
}).catch(() => {
loading.value = true;
mescroll.endErr(); // ,
})
}
const loadCategory = (id : string) => {
currCategoryId.value = id;
getMescroll().resetUpScroll();
}
const searchFn = () => {
getMescroll().resetUpScroll();
}
const toLink = (id : string) => {
redirect({ url: '/cms/pages/detail', param: { id } })
}
onMounted(() => {
setTimeout(() => {
getMescroll().optUp.textNoMore = t("end");
}, 500)
});
</script>
<style lang="scss" scoped>
.nav-item.active {
color: $u-primary;
}
.scroll-view-wrap {
word-break: keep-all;
}
/* 单行超出隐藏 */
.using-hidden {
word-break: break-all;
text-overflow: ellipsis;
overflow: hidden;
display: -webkit-box;
-webkit-line-clamp: 1;
-webkit-box-orient: vertical;
white-space: break-spaces;
}
/* 多行超出隐藏 */
.multi-hidden {
word-break: break-all;
text-overflow: ellipsis;
overflow: hidden;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
}
</style>

View File

@ -151,16 +151,6 @@ class Addon extends BaseAdminController
return success('DOWNLOAD_SUCCESS');
}
/**
* 更新插件
* @param $app_key
* @return Response
*/
public function upgrade($addon){
(new AddonService())->upgrade($addon);
return success('DOWNLOAD_SUCCESS');
}
/**
* 查询已安装插件
* @return Response
@ -184,4 +174,13 @@ class Addon extends BaseAdminController
public function getType(){
return success(AddonDict::getType());
}
/**
* 更新插件
* @param $app_key
* @return Response
*/
public function upgrade($addon = ''){
return success('DOWNLOAD_SUCCESS', (new AddonService())->upgrade($addon));
}
}

View File

@ -11,8 +11,14 @@
namespace app\adminapi\controller\login;
use addon\cms\app\model\article\CmsArticle;
use app\model\sys\SysUser;
use app\service\admin\auth\ConfigService;
use app\service\admin\auth\LoginService;
use app\service\admin\site\SiteService;
use app\service\core\upgrade\CoreBackupService;
use app\service\core\upgrade\CoreRestoreService;
use app\service\core\upgrade\CoreUpgradeService;
use app\service\core\weapp\CoreWeappCloudService;
use core\base\BaseAdminController;
use think\Response;
@ -62,10 +68,6 @@ class Login extends BaseAdminController
}
public function test(){
(new CoreWeappCloudService())->uploadWeapp([
'site_id' => 43,
'version' => '0.0.1',
'desc' => ''
]);
(new CoreUpgradeService())->execute();
}
}

View File

@ -43,4 +43,13 @@ class Module extends BaseAdminController
{
return success((new NiucloudService())->getAuthorize());
}
/**
* 获取框架最新版本
* @return Response
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public function getFrameworkLastVersion() {
return success(data:(new NiucloudService())->getFrameworkLastVersion());
}
}

View File

@ -112,6 +112,16 @@ class Site extends BaseAdminController
return success('MODIFY_SUCCESS');
}
/**
* 删除站点
* @param $id
* @return Response
*/
public function del($id) {
(new SiteService())->del($id);
return success('DELETE_SUCCESS');
}
/**
* 开启站点
*/

View File

@ -147,4 +147,13 @@ class Menu extends BaseAdminController
{
return success( (new MenuService())->getAddonMenu($app_key,'all', 1));
}
/**
* 查询菜单类型为目录的菜单
* @param $addon
* @return Response
*/
public function getMenuByTypeDir($addon = 'system') {
return success( (new MenuService())->getMenuByTypeDir($addon));
}
}

View File

@ -53,6 +53,8 @@ Route::group(function () {
// 取消安装任务
Route::put('addon/install/cancel/:addon', 'addon.Addon/cancleInstall');
Route::post('addon/upgrade/[:addon]', 'addon.Addon/upgrade');
/******************************************************************开发插件 *******************************************************/
//开发插件列表
Route::get('addon_develop', 'addon.AddonDevelop/lists');

View File

@ -37,7 +37,8 @@ Route::group('niucloud', function () {
Route::get('module/download/:version_id', 'addon.Addon/info');
//更新
Route::put('addon/status/:version_id', 'addon.Addon/setStatus');
// 获取框架最新版本
Route::get('framework/newversion', 'niucloud.Module/getFrameworkLastVersion');
})->middleware([
AdminCheckToken::class,

View File

@ -29,6 +29,8 @@ Route::group('site', function () {
Route::post('site', 'site.Site/add');
//更新站点
Route::put('site/:id', 'site.Site/edit');
//删除站点
Route::delete('site/:id', 'site.Site/del');
//关闭站点
Route::put('closesite/:id', 'site.Site/closeSite');
//开启站点

View File

@ -59,6 +59,8 @@ Route::group('sys', function () {
Route::get('menu/system_menu', 'sys.Menu/getSystem');
Route::get('menu/addon_menu/:app_key', 'sys.Menu/getAddonMenu');
Route::get('menu/dir/:addon', 'sys.Menu/getMenuByTypeDir');
/***************************************************** 设置 ****************************************************/
//网站设置
Route::get('config/website', 'sys.Config/getWebsite');

View File

@ -59,6 +59,8 @@ class AddonDict
];
}
const FRAMEWORK_KEY = 'niucloud-admin';
const APP = 'app';
const ADDON = 'addon';

View File

@ -93,6 +93,47 @@ return
'sort' => 100,
'status' => 1,
'is_show' => 1,
'children' => [
[
'menu_name' => '添加站点',
'menu_key' => 'add_site',
'menu_type' => 2,
'icon' => '',
'api_url' => 'site/site',
'router_path' => '',
'view_path' => '',
'methods' => 'post',
'sort' => 100,
'status' => 1,
'is_show' => 1,
],
[
'menu_name' => '编辑站点',
'menu_key' => 'edit_site',
'menu_type' => 2,
'icon' => '',
'api_url' => 'site/site/<id>',
'router_path' => '',
'view_path' => '',
'methods' => 'put',
'sort' => 100,
'status' => 1,
'is_show' => 1,
],
[
'menu_name' => '删除站点',
'menu_key' => 'delete_site',
'menu_type' => 2,
'icon' => '',
'api_url' => 'site/site/<id>',
'router_path' => '',
'view_path' => '',
'methods' => 'delete',
'sort' => 100,
'status' => 1,
'is_show' => 1,
],
]
],
[
'menu_name' => '站点用户',

View File

@ -45,8 +45,12 @@ return [
'LAYOUT_NOT_EXIST' => '该布局不存在',
'ZIP_FILE_NOT_FOUND' => '找不到可用的压缩文件',
'DOWNLOAD_SUCCESS' => '下载成功',
'APP_NOT_ALLOW_UNINSTALL' => '该应用下存在站点不允许卸载',
'APP_NOT_ALLOW_UNINSTALL' => '该应用下存在站点卸载前请先删除相关站点',
'ADDON_INSTALL_FAIL' => '插件安装失败',
'ADMIN_DIR_NOT_EXIST' => '未找到admin源码所在目录, <a style="text-decoration: underline;" href="https://www.kancloud.cn/niucloud/niucloud-admin-develop/3213544" target="blank">点击查看相关手册</a>',
'WEB_DIR_NOT_EXIST' => '未找到web源码所在目录, <a style="text-decoration: underline;" href="https://www.kancloud.cn/niucloud/niucloud-admin-develop/3213544" target="blank">点击查看相关手册</a>',
'UNIAPP_DIR_NOT_EXIST' => '未找到uni-app源码所在目录, <a style="text-decoration: underline;" href="https://www.kancloud.cn/niucloud/niucloud-admin-develop/3213544" target="blank">点击查看相关手册</a>',
'OPEN_BASEDIR_ERROR' => '请关闭防跨站攻击, 具体操作方法<a style="text-decoration: underline;" href="https://www.kancloud.cn/niucloud/niucloud-admin-develop/3213393" target="blank">点击查看相关手册</a>',
//登录注册重置账号....
'LOGIN_SUCCESS' => '登录成功',

View File

@ -23,6 +23,7 @@ use app\service\core\addon\CoreAddonInstallService;
use app\service\core\addon\CoreAddonService;
use app\service\core\niucloud\CoreModuleService;
use app\service\core\site\CoreSiteService;
use app\service\core\upgrade\CoreUpgradeService;
use core\base\BaseAdminService;
use Exception;
use think\db\exception\DbException;
@ -175,8 +176,8 @@ class AddonService extends BaseAdminService
* @param string $app_key
* @return null
*/
public function upgrade(string $app_key){
return (new CoreAddonDownloadService())->upgrade($app_key);
public function upgrade(string $app_key = ''){
return (new CoreUpgradeService())->upgrade($app_key);
}
/**

View File

@ -13,6 +13,7 @@ namespace app\service\admin\niucloud;
use app\dict\sys\ConfigKeyDict;
use app\service\core\niucloud\CoreAuthService;
use app\service\core\niucloud\CoreModuleService;
use app\service\core\sys\CoreConfigService;
use core\base\BaseAdminService;
use core\exception\CommonException;
@ -42,8 +43,10 @@ class NiucloudService extends BaseAdminService
'auth_code' => $data['auth_code'],
'auth_secret' => $data['auth_secret']
];
$auth_info = (new CoreAuthService($data['auth_code'], $data['auth_secret']))->getAuthInfo()['data'] ?? [];
$service = (new CoreAuthService($data['auth_code'], $data['auth_secret']));
$auth_info = $service->getAuthInfo()['data'] ?? [];
if (empty($auth_info)) throw new CommonException('AUTH_NOT_EXISTS');
$service->clearAccessToken();
return $this->core_config_service->setConfig(0,ConfigKeyDict::NIUCLOUD_CONFIG, $data);
}
@ -64,4 +67,13 @@ class NiucloudService extends BaseAdminService
return $info['value'];
}
}
/**
* 获取框架最新版本
* @return void
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public function getFrameworkLastVersion() {
return (new CoreModuleService())->getFrameworkLastVersion();
}
}

View File

@ -18,12 +18,14 @@ use app\model\site\Site;
use app\model\site\SiteGroup;
use app\model\sys\SysUserRole;
use app\service\admin\addon\AddonService;
use app\service\admin\generator\GenerateService;
use app\service\admin\sys\MenuService;
use app\service\admin\user\UserRoleService;
use app\service\admin\user\UserService;
use app\service\core\site\CoreSiteService;
use core\base\BaseAdminService;
use core\exception\AdminException;
use core\exception\CommonException;
use Exception;
use think\db\exception\DataNotFoundException;
use think\db\exception\DbException;
@ -158,6 +160,39 @@ class SiteService extends BaseAdminService
return true;
}
/**
* 删除站点
* @param int $site_id
* @return void
*/
public function del(int $site_id) {
Db::startTrans();
try {
$site = $this->model->where([ [ 'site_id', '=', $site_id ] ])->findOrEmpty()->toArray();
// 删除站点相关数据
$sys_models = (new GenerateService())->getModels(['addon' => 'system']);
$addon_models = (new GenerateService())->getModels(['addon' => $site['app'] ]);
$models = array_merge($sys_models, $addon_models);
foreach ($models as $model) {
$name = "\\$model";
$class = new $name();
if (in_array('site_id', $class->getTableFields())) {
$class->where([ ['site_id', '=', $site['site_id'] ] ])->delete();
}
}
Cache::tag(self::$cache_tag_name . $site_id)->clear();
Db::commit();
return true;
} catch (\Exception $e) {
Db::rollback();
throw new CommonException($e->getMessage());
}
}
/**
* 站点数量
@ -176,18 +211,7 @@ class SiteService extends BaseAdminService
*/
public function getSiteCache(int $site_id)
{
$cache_name = 'site_info_cache';
return cache_remember(
$cache_name . $site_id,
function() use ($site_id) {
$where = [
[ 'site_id', '=', $site_id ],
];
$site = $this->model->where($where)->field('site_id, app_type,site_name,front_end_name,front_end_logo,logo,icon,group_id, status, expire_time, app, addons')->append([ 'status_name' ])->findOrEmpty();
return $site->toArray();
},
self::$cache_tag_name . $site_id
);
return (new CoreSiteService())->getSiteCache($site_id);
}

View File

@ -596,4 +596,38 @@ class MenuService extends BaseAdminService
$menu_list = (new SysMenu())->where($where)->select()->toArray();
return $is_tree ? $this->menuToTree($menu_list, 'menu_key', 'parent_key', 'children', 'auth', '', $is_button) : $menu_list;
}
/**
* 查询菜单类型为目录的菜单
* @param string $addon
* @return void
*/
public function getMenuByTypeDir(string $addon = 'system') {
$cache_name = 'menu_api_by_type_dir' . $addon;
$menu_list = cache_remember(
$cache_name,
function () use ($addon) {
$where = [
['menu_type', '=', 0 ],
['app_type', '=', 'site']
];
//查询应用
$where[] = ['addon', '=', $addon == 'system' ? '' : $addon ];
return (new SysMenu())->where($where)->order('sort desc')->select()->toArray();
},
self::$cache_tag_name
);
foreach ($menu_list as &$v)
{
$lang_menu_key = 'dict_menu_admin' . '.'. $v['menu_key'];
$lang_menu_name = get_lang($lang_menu_key);
//语言已定义
if($lang_menu_key != $lang_menu_name)
{
$v['menu_name'] = $lang_menu_name;
}
}
return $this->menuToTree($menu_list, 'menu_key', 'parent_key', 'children', 'auth', '', 0);
}
}

View File

@ -259,4 +259,28 @@ class CoreAddonCloudService extends CoreCloudBaseService
return $zip_file;
}
/**
* 插件升级
* @param $data
* @return void
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public function upgradeAddon(array $data = []) {
$action_token = (new CoreModuleService())->getActionToken('upgrade', ['data' => $data ]);
if (isset($action_token['code']) && $action_token['code'] != 1) {
if ($action_token['code'] == 401) $action_token = (new CoreModuleService())->getActionToken('upgrade', ['data' => $data ]);
if ($action_token['code'] != 1) throw new CommonException($action_token['msg']);
}
$query = [
'authorize_code' => $this->auth_code,
'token' => $action_token['data']['token'] ?? ''
];
// 获取文件大小
$response = (new CloudService())->request('HEAD','cloud/upgrade?' . http_build_query($query), [
'headers' => ['Range' => 'bytes=0-']
]);
return $response;
}
}

View File

@ -437,7 +437,7 @@ class CoreAddonDevelopService extends CoreAddonBaseService
'version' => $data['version'],
'type' => $data['type'],
'support_app' => $data['support_app'],
'update_time' => $data['update_time'],
'update_time' => time(),
]
);
}

View File

@ -217,6 +217,9 @@ class CoreAddonInstallService extends CoreAddonBaseService
} catch (\Exception $e) {
Cache::set('install_task', $this->install_task);
$this->installExceptionHandle();
if (strpos($e->getMessage(), 'open basedir') !== false) {
throw new CommonException('OPEN_BASEDIR_ERROR');
}
throw new CommonException($e->getMessage());
}
}
@ -511,10 +514,8 @@ class CoreAddonInstallService extends CoreAddonBaseService
*/
public function uninstall()
{
if (!env('app_debug', true)) {
$site_num = (new Site())->where([['app', '=', $this->addon]])->count('site_id');
if ($site_num) throw new CommonException('APP_NOT_ALLOW_UNINSTALL');
}
$site_num = (new Site())->where([ ['app', '=', $this->addon] ])->count('site_id');
if ($site_num) throw new CommonException('APP_NOT_ALLOW_UNINSTALL');
//执行插件卸载方法
$class = "addon\\" . $this->addon . "\\" . 'Addon';

View File

@ -165,4 +165,23 @@ class CoreMenuService extends BaseCoreService
Cache::tag(MenuService::$cache_tag_name)->clear();
return true;
}
/**
* 获取path
* @param $menu_key
* @param $paths
* @return string
* @throws DbException
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\ModelNotFoundException
*/
public function getRoutePathByMenuKey($menu_key, $paths = []) {
$menu = $this->model->where([ ['menu_key', '=', $menu_key], ['app_type', '=', 'site'] ])->field('parent_key,router_path')->find();
array_unshift($paths, $menu['router_path']);
if (!empty($menu['parent_key'])) {
return $this->getRoutePathByMenuKey($menu['parent_key'], $paths);
} else {
return implode('/', $paths);
}
}
}

View File

@ -95,4 +95,13 @@ class CoreModuleService extends BaseNiucloudClient
{
return $this->httpGet('store/app_check/'.$key, ['product_key' => self::PRODUCT])['data'] ?? false;
}
/**
* 获取框架最新版本
* @return array|\core\util\niucloud\Response|object|ResponseInterface
* @throws GuzzleException
*/
public function getFrameworkLastVersion() {
return $this->httpGet('store/framework/lastversion', ['product_key' => self::PRODUCT])['data'] ?? false;
}
}

View File

@ -13,6 +13,7 @@ namespace app\service\core\site;
use app\dict\site\SiteDict;
use app\dict\sys\AppTypeDict;
use app\model\addon\Addon;
use app\model\site\Site;
use app\model\site\SiteGroup;
use app\service\admin\site\SiteGroupService;
@ -53,8 +54,12 @@ class CoreSiteService extends BaseCoreService
$where = [
[ 'site_id', '=', $site_id ],
];
$site = $this->model->where($where)->field('site_id, app_type,site_name,logo,front_end_name,front_end_logo,group_id, status, expire_time')->append([ 'status_name' ])->findOrEmpty();
return $site->toArray();
$info = $this->model->where($where)->field('site_id, site_name, front_end_name, front_end_logo, app_type, keywords, logo, icon, `desc`, status, latitude, longitude, province_id, city_id, district_id, address, full_address, phone, business_hours, create_time, expire_time, group_id, app, addons')->append([ 'status_name' ])->findOrEmpty()->toArray();
if (!empty($info)) {
$site_addons = (new CoreSiteService())->getAddonKeysBySiteId($site_id);
$info['site_addons'] = (new Addon())->where([ ['key', 'in', $site_addons]])->field('key,title,desc,icon')->select()->toArray();
}
return $info;
},
self::$cache_tag_name . $site_id
);

View File

@ -0,0 +1,103 @@
<?php
// +----------------------------------------------------------------------
// | Niucloud-admin 企业快速开发的saas管理平台
// +----------------------------------------------------------------------
// | 官方网址https://www.niucloud-admin.com
// +----------------------------------------------------------------------
// | niucloud团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace app\service\core\upgrade;
use app\dict\addon\AddonDict;
use core\util\DbBackup;
/**
* 框架及插件升级备份
* @package app\service\core\upgrade
*/
class CoreBackupService extends CoreUpgradeService
{
/**
* 备份代码
* @return void
*/
public function backupCode() {
$backup_dir = $this->upgrade_dir .$this->upgrade_task['key'] . DIRECTORY_SEPARATOR . 'backup' . DIRECTORY_SEPARATOR . 'code' . DIRECTORY_SEPARATOR;
// 创建目录
dir_mkdir($backup_dir);
// 备份admin
dir_copy($this->root_path . 'admin', $backup_dir . 'admin', exclude_dirs:[ '.vscode', 'node_modules', 'dist']);
// 备份uni-app
dir_copy($this->root_path . 'uni-app', $backup_dir . 'uni-app', exclude_dirs:['node_modules', 'dist']);
// 备份web
dir_copy($this->root_path . 'web', $backup_dir . 'web', exclude_dirs:['node_modules', '.nuxt', '.output']);
// 备份niucloud
$niucloud_dir = $backup_dir . 'niucloud' . DIRECTORY_SEPARATOR;
if ($this->upgrade_task['upgrade']['app_key'] == AddonDict::FRAMEWORK_KEY) {
dir_copy($this->root_path . 'niucloud', $niucloud_dir, exclude_dirs:['addon', 'config', 'public', 'vendor', 'runtime']);
// 备份版本文件
$version_file = $this->root_path . 'niucloud' .DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'version.php';
$to_version_file = $niucloud_dir . 'config' . DIRECTORY_SEPARATOR . 'version.php';
file_copy($version_file, $to_version_file);
} else {
$addon = $this->upgrade_task['upgrade']['app_key'];
$addon_dir = $this->root_path . 'niucloud' . DIRECTORY_SEPARATOR . 'addon' . DIRECTORY_SEPARATOR . $addon;
$to_addon_dir = $niucloud_dir . 'addon' . DIRECTORY_SEPARATOR . $addon;
dir_copy($addon_dir, $to_addon_dir);
}
// 备份前端文件
if (is_dir(public_path() . 'admin')) {
dir_copy(public_path() . 'admin', $niucloud_dir . 'public' . DIRECTORY_SEPARATOR . 'admin');
}
if (is_dir(public_path() . 'wap')) {
dir_copy(public_path() . 'wap', $niucloud_dir . 'public' . DIRECTORY_SEPARATOR . 'wap');
}
if (is_dir(public_path() . 'web')) {
dir_copy(public_path() . 'web', $niucloud_dir . 'public' . DIRECTORY_SEPARATOR . 'web');
}
return true;
}
/**
* 备份数据库
* @return void
*/
public function backupSql() {
$backup_dir = $this->upgrade_dir .$this->upgrade_task['key'] . DIRECTORY_SEPARATOR . 'backup' . DIRECTORY_SEPARATOR . 'sql' . DIRECTORY_SEPARATOR;
// 创建目录
dir_mkdir($backup_dir);
$db = new DbBackup([
'path' => $backup_dir,//数据库备份路径
'part' => 1048576,//数据库备份卷大小
'compress' => 0,//数据库备份文件是否启用压缩 0不压缩 1 压缩
'level' => 9 //数据库备份文件压缩级别 1普通 4 一般 9最高
]);
$prefix = config('database.connections.'.config('database.default'))['prefix'];
if ($this->upgrade_task['upgrade']['app_key'] == AddonDict::FRAMEWORK_KEY) {
// 不需要备份的表
$noot_need_backup = ["{$prefix}sys_user_log", "{$prefix}jobs", "{$prefix}jobs_failed"];
$tables = array_diff(array_column($db->dataList(), 'name'), $noot_need_backup);
} else {
$tables = [];
$table_prefix = "{$prefix}{$this->upgrade_task['upgrade']['app_key']}";
foreach ($db->dataList() as $table) {
if (strpos($table['name'], $table_prefix) === 0) {
$tables[] = $table['name'];
}
}
}
foreach ($tables as $table) {
$db->setFile()->backup($table);
}
return true;
}
}

View File

@ -0,0 +1,59 @@
<?php
// +----------------------------------------------------------------------
// | Niucloud-admin 企业快速开发的saas管理平台
// +----------------------------------------------------------------------
// | 官方网址https://www.niucloud-admin.com
// +----------------------------------------------------------------------
// | niucloud团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace app\service\core\upgrade;
use core\util\DbBackup;
/**
* 框架及插件升级恢复备份
* @package app\service\core\upgrade
*/
class CoreRestoreService extends CoreUpgradeService
{
/**
* 恢复代码备份
* @return true
*/
public function restoreCode() {
$backup_dir = $this->upgrade_dir .$this->upgrade_task['key'] . DIRECTORY_SEPARATOR . 'backup' . DIRECTORY_SEPARATOR . 'code' . DIRECTORY_SEPARATOR;
if (is_dir($backup_dir)) {
// 删除前端文件
if (is_dir(public_path() . 'admin')) del_target_dir(public_path() . 'admin', true);
if (is_dir(public_path() . 'wap')) del_target_dir(public_path() . 'wap', true);
if (is_dir(public_path() . 'web')) del_target_dir(public_path() . 'web', true);
dir_copy($backup_dir, $this->root_path);
}
return true;
}
/**
* 恢复数据库备份
* @return true
*/
public function restoreSql() {
$backup_dir = $this->upgrade_dir .$this->upgrade_task['key'] . DIRECTORY_SEPARATOR . 'backup' . DIRECTORY_SEPARATOR . 'sql' . DIRECTORY_SEPARATOR;
if (is_dir($backup_dir)) {
$db = new DbBackup([
'path' => $backup_dir //数据库备份路径
]);
$file_list = $db->fileList();
if (!empty($file_list)) {
foreach ($file_list as $file) {
$db->setFile($file)->import(0, $file['time']);
}
}
}
return true;
}
}

View File

@ -0,0 +1,164 @@
<?php
// +----------------------------------------------------------------------
// | Niucloud-admin 企业快速开发的saas管理平台
// +----------------------------------------------------------------------
// | 官方网址https://www.niucloud-admin.com
// +----------------------------------------------------------------------
// | niucloud团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace app\service\core\upgrade;
use app\dict\addon\AddonDict;
use app\model\addon\Addon;
use app\service\core\addon\CoreAddonCloudService;
use core\base\BaseCoreService;
use core\exception\CommonException;
use core\util\niucloud\BaseNiucloudClient;
use think\facade\Cache;
/**
* 框架及插件升级
* @package app\service\core\upgrade
*/
class CoreUpgradeService extends BaseCoreService
{
protected $upgrade_dir;
protected $root_path;
protected $cache_key = 'upgrade';
protected $upgrade_task = null;
private $steps = [
'downloadFile' => ['step' => 'downloadFile', 'title' => '下载更新文件'],
'backupCode' => ['step' => 'backupCode', 'title' => '备份源码'],
'backupSql' => ['step' => 'backupSql', 'title' => '备份数据库'],
'coverCode' => ['step' => 'coverCode', 'title' => '合并更新文件'],
'executeUpgrade' => ['step' => 'executeUpgrade', 'title' => '执行升级方法']
];
public function __construct()
{
parent::__construct();
$this->root_path = dirname(root_path()) . DIRECTORY_SEPARATOR;
$this->upgrade_dir = $this->root_path . 'upgrade' . DIRECTORY_SEPARATOR;
$this->upgrade_task = Cache::get($this->cache_key);
}
/**
* 升级
* @param $addon
* @return array
*/
public function upgrade(string $addon = '') {
// if ($this->upgrade_task) throw new CommonException('UPGRADE_TASK_EXIST');
$upgrade = [
'product_key' => BaseNiucloudClient::PRODUCT
];
if (!$addon) {
$upgrade['app_key'] = AddonDict::FRAMEWORK_KEY;
$upgrade['version'] = config('version.version');
} else {
$upgrade['app_key'] = $addon;
$upgrade['version'] = (new Addon())->where([ ['key', '=', $addon] ])->value('version');
}
$response = (new CoreAddonCloudService())->upgradeAddon($upgrade);
if (isset($response['code']) && $response['code'] == 0) throw new CommonException($response['msg']);
try {
$key = uniqid();
$upgrade_dir = $this->upgrade_dir . $key . DIRECTORY_SEPARATOR;
if (!is_dir($upgrade_dir)) {
dir_mkdir($upgrade_dir);
}
$upgrade_tsak = [
'key' => $key,
'upgrade' => $upgrade,
'step' => 'downloadFile',
'executed' => ['downloadFile'],
'log' => [ $this->steps['downloadFile']['title'] ]
];
Cache::set($this->cache_key, $upgrade_tsak);
return $upgrade_tsak;
} catch (\Exception $e) {
if (strpos($e->getMessage(), 'open_basedir') !== false) {
throw new CommonException('OPEN_BASEDIR_ERROR');
}
throw new CommonException($e->getMessage());
}
}
/**
* 执行升级
* @return true
*/
public function execute() {
$steps = array_keys($this->steps);
$index = array_search($this->upgrade_task['step'], $steps);
$step = $steps[ $index + 1 ] ?? '';
if ($step) {
try {
$this->$step();
$this->upgrade_task['step'] = $step;
$this->upgrade_task['executed'][] = $step;
} catch (\Exception $e) {
$this->upgrade_task['error'] = $e->getMessage();
}
Cache::set($this->cache_key, $this->upgrade_task);
return true;
} else {
return true;
}
}
/**
* 备份源码
* @return true
*/
public function backupCode() {
(new CoreBackupService())->backupCode();
return true;
}
/**
* 备份数据库
* @return true
*/
public function backupSql() {
(new CoreBackupService())->backupSql();
return true;
}
public function coverCode() {
}
public function executeUpgrade() {
}
/**
* 升级出错之后的处理
* @return true|void
*/
public function upgradeErrorHandle() {
try {
$restore_service = (new CoreRestoreService());
$restore_service->restoreCode();
$restore_service->restoreSql();
return true;
} catch (\Exception $e) {
return true;
}
}
}

View File

@ -42,7 +42,8 @@ return [
'ext' => ['pem', 'key'],
'mime' => [
'application/x-x509-ca-cert',
'application/octet-stream'
'application/octet-stream',
'application/x-iwork-keynote-sffkey'
],
'size' => 2097152
],

View File

@ -1,6 +1,6 @@
<?php
return [
'version' => '0.0.5',
'code' => '202312150001'
'version' => '0.0.6',
'code' => '202312220001'
];

View File

@ -1,8 +1,8 @@
<IfModule mod_rewrite.c>
Options +FollowSymlinks -Multiviews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]
RewriteEngine on RewriteCond % !^$
</IfModule>
<IfModule mod_rewrite.c>
Options +FollowSymlinks -Multiviews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]
RewriteEngine on RewriteCond % !^$
</IfModule>

View File

@ -1 +1 @@
import{d,r as l,S as i,f as p,g as t,h as m,y as u,x,u as v,bl as f,bm as h,e as g,A as I,B as b}from"./base-9962c822.js";/* empty css */import{b as S}from"./vue-router-d7e63612.js";import{E as B}from"./index-7ab57426.js";import{_ as w}from"./_plugin-vue_export-helper-c27b6911.js";import"./index-57446bef.js";import"./index-1370ab44.js";import"./index-6b77b11a.js";import"./index-71b7d8f4.js";const y=""+new URL("error-da01d378.png",import.meta.url).href,s=e=>(f("data-v-d967cd15"),e=e(),h(),e),k={class:"error"},C={class:"flex items-center"},E=s(()=>t("div",null,[t("img",{class:"w-[300px]",src:y})],-1)),N={class:"text-left ml-[100px]"},R=s(()=>t("div",{class:"error-text text-[28px] font-bold"},"404错误",-1)),U=s(()=>t("div",{class:"text-[#222] text-[20px] mt-[15px]"},"哎呀,出错了!您访问的页面不存在...",-1)),V=s(()=>t("div",{class:"text-[#c4c2c2] text-[12px] mt-[5px]"},"尝试检查URL的错误然后点击浏览器刷新按钮。",-1)),L={class:"mt-[40px]"},$=d({__name:"404",setup(e){let o=null;const r=l(5),a=S();return o=setInterval(()=>{r.value===0?(clearInterval(o),a.go(-1)):r.value--},1e3),i(()=>{o&&clearInterval(o)}),(n,c)=>{const _=B;return g(),p("div",k,[t("div",C,[m(n.$slots,"content",{},()=>[E],!0),t("div",N,[R,U,V,t("div",L,[u(_,{class:"bottom",onClick:c[0]||(c[0]=A=>v(a).go(-1))},{default:x(()=>[I(b(r.value)+" 秒后返回上一页",1)]),_:1})])])])])}}});const K=w($,[["__scopeId","data-v-d967cd15"]]);export{K as default};
import{d,r as l,S as i,f as p,g as t,h as m,y as u,x,u as v,b9 as f,ba as h,e as g,A as I,B as b}from"./base-d79f9f62.js";/* empty css */import{b as S}from"./vue-router-fc35ac55.js";import{E as B}from"./index-03649f16.js";import{_ as w}from"./_plugin-vue_export-helper-c27b6911.js";import"./index-2048a34f.js";import"./index-bdfee32a.js";import"./index-427f5a83.js";import"./index-71aec1df.js";const y=""+new URL("error-da01d378.png",import.meta.url).href,s=e=>(f("data-v-d967cd15"),e=e(),h(),e),k={class:"error"},C={class:"flex items-center"},E=s(()=>t("div",null,[t("img",{class:"w-[300px]",src:y})],-1)),N={class:"text-left ml-[100px]"},R=s(()=>t("div",{class:"error-text text-[28px] font-bold"},"404错误",-1)),U=s(()=>t("div",{class:"text-[#222] text-[20px] mt-[15px]"},"哎呀,出错了!您访问的页面不存在...",-1)),V=s(()=>t("div",{class:"text-[#c4c2c2] text-[12px] mt-[5px]"},"尝试检查URL的错误然后点击浏览器刷新按钮。",-1)),L={class:"mt-[40px]"},$=d({__name:"404",setup(e){let o=null;const r=l(5),a=S();return o=setInterval(()=>{r.value===0?(clearInterval(o),a.go(-1)):r.value--},1e3),i(()=>{o&&clearInterval(o)}),(n,c)=>{const _=B;return g(),p("div",k,[t("div",C,[m(n.$slots,"content",{},()=>[E],!0),t("div",N,[R,U,V,t("div",L,[u(_,{class:"bottom",onClick:c[0]||(c[0]=A=>v(a).go(-1))},{default:x(()=>[I(b(r.value)+" 秒后返回上一页",1)]),_:1})])])])])}}});const K=w($,[["__scopeId","data-v-d967cd15"]]);export{K as default};

View File

@ -0,0 +1 @@
import{b4 as l,b1 as c,aZ as K,aK as _,aV as d,b5 as L,aE as k,aD as R,b6 as w,b7 as y,b2 as W,b8 as u}from"./base-d79f9f62.js";var q=l(c,"WeakMap");const j=q;var N=9007199254740991;function z(t){return typeof t=="number"&&t>-1&&t%1==0&&t<=N}function Z(t){return t!=null&&z(t.length)&&!K(t)}var H=Object.prototype;function X(t){var r=t&&t.constructor,e=typeof r=="function"&&r.prototype||H;return t===e}function Y(t,r){for(var e=-1,n=Array(t);++e<t;)n[e]=r(e);return n}var J="[object Arguments]";function $(t){return _(t)&&d(t)==J}var V=Object.prototype,Q=V.hasOwnProperty,tt=V.propertyIsEnumerable,et=$(function(){return arguments}())?$:function(t){return _(t)&&Q.call(t,"callee")&&!tt.call(t,"callee")};const rt=et;function at(){return!1}var D=typeof exports=="object"&&exports&&!exports.nodeType&&exports,x=D&&typeof module=="object"&&module&&!module.nodeType&&module,nt=x&&x.exports===D,S=nt?c.Buffer:void 0,ot=S?S.isBuffer:void 0,st=ot||at;const it=st;var ct="[object Arguments]",ut="[object Array]",pt="[object Boolean]",ft="[object Date]",gt="[object Error]",bt="[object Function]",yt="[object Map]",lt="[object Number]",dt="[object Object]",ht="[object RegExp]",Tt="[object Set]",jt="[object String]",vt="[object WeakMap]",mt="[object ArrayBuffer]",At="[object DataView]",_t="[object Float32Array]",wt="[object Float64Array]",$t="[object Int8Array]",xt="[object Int16Array]",St="[object Int32Array]",Ot="[object Uint8Array]",Pt="[object Uint8ClampedArray]",Et="[object Uint16Array]",It="[object Uint32Array]",a={};a[_t]=a[wt]=a[$t]=a[xt]=a[St]=a[Ot]=a[Pt]=a[Et]=a[It]=!0;a[ct]=a[ut]=a[mt]=a[pt]=a[At]=a[ft]=a[gt]=a[bt]=a[yt]=a[lt]=a[dt]=a[ht]=a[Tt]=a[jt]=a[vt]=!1;function Mt(t){return _(t)&&z(t.length)&&!!a[d(t)]}function Ct(t){return function(r){return t(r)}}var F=typeof exports=="object"&&exports&&!exports.nodeType&&exports,g=F&&typeof module=="object"&&module&&!module.nodeType&&module,Bt=g&&g.exports===F,T=Bt&&L.process,Ut=function(){try{var t=g&&g.require&&g.require("util").types;return t||T&&T.binding&&T.binding("util")}catch{}}();const O=Ut;var P=O&&O.isTypedArray,kt=P?Ct(P):Mt;const zt=kt;var Vt=Object.prototype,Dt=Vt.hasOwnProperty;function Ft(t,r){var e=k(t),n=!e&&rt(t),s=!e&&!n&&it(t),p=!e&&!n&&!s&&zt(t),f=e||n||s||p,h=f?Y(t.length,String):[],G=h.length;for(var o in t)(r||Dt.call(t,o))&&!(f&&(o=="length"||s&&(o=="offset"||o=="parent")||p&&(o=="buffer"||o=="byteLength"||o=="byteOffset")||R(o,G)))&&h.push(o);return h}function Gt(t,r){return function(e){return t(r(e))}}var Kt=Gt(Object.keys,Object);const Lt=Kt;var Rt=Object.prototype,Wt=Rt.hasOwnProperty;function qt(t){if(!X(t))return Lt(t);var r=[];for(var e in Object(t))Wt.call(t,e)&&e!="constructor"&&r.push(e);return r}function Nt(t){return Z(t)?Ft(t):qt(t)}function Zt(t,r){for(var e=-1,n=r.length,s=t.length;++e<n;)t[s+e]=r[e];return t}function Ht(){this.__data__=new w,this.size=0}function Xt(t){var r=this.__data__,e=r.delete(t);return this.size=r.size,e}function Yt(t){return this.__data__.get(t)}function Jt(t){return this.__data__.has(t)}var Qt=200;function te(t,r){var e=this.__data__;if(e instanceof w){var n=e.__data__;if(!y||n.length<Qt-1)return n.push([t,r]),this.size=++e.size,this;e=this.__data__=new W(n)}return e.set(t,r),this.size=e.size,this}function b(t){var r=this.__data__=new w(t);this.size=r.size}b.prototype.clear=Ht;b.prototype.delete=Xt;b.prototype.get=Yt;b.prototype.has=Jt;b.prototype.set=te;function ee(t,r){for(var e=-1,n=t==null?0:t.length,s=0,p=[];++e<n;){var f=t[e];r(f,e,t)&&(p[s++]=f)}return p}function re(){return[]}var ae=Object.prototype,ne=ae.propertyIsEnumerable,E=Object.getOwnPropertySymbols,oe=E?function(t){return t==null?[]:(t=Object(t),ee(E(t),function(r){return ne.call(t,r)}))}:re;const se=oe;function ie(t,r,e){var n=r(t);return k(t)?n:Zt(n,e(t))}function je(t){return ie(t,Nt,se)}var ce=l(c,"DataView");const v=ce;var ue=l(c,"Promise");const m=ue;var pe=l(c,"Set");const A=pe;var I="[object Map]",fe="[object Object]",M="[object Promise]",C="[object Set]",B="[object WeakMap]",U="[object DataView]",ge=u(v),be=u(y),ye=u(m),le=u(A),de=u(j),i=d;(v&&i(new v(new ArrayBuffer(1)))!=U||y&&i(new y)!=I||m&&i(m.resolve())!=M||A&&i(new A)!=C||j&&i(new j)!=B)&&(i=function(t){var r=d(t),e=r==fe?t.constructor:void 0,n=e?u(e):"";if(n)switch(n){case ge:return U;case be:return I;case ye:return M;case le:return C;case de:return B}return r});const ve=i;var he=c.Uint8Array;const me=he;export{A as S,me as U,rt as a,Zt as b,ie as c,ve as d,Ct as e,it as f,se as g,b as h,z as i,je as j,Nt as k,Z as l,zt as m,O as n,X as o,Ft as p,Gt as q,re as s};

View File

@ -1 +0,0 @@
import{bg as l,bd as c,ba as L,aX as _,b6 as d,bh as K,aR as U,aQ as R,bi as w,bj as y,be as W,bk as u}from"./base-9962c822.js";var q=l(c,"WeakMap");const j=q;var N=9007199254740991;function z(t){return typeof t=="number"&&t>-1&&t%1==0&&t<=N}function X(t){return t!=null&&z(t.length)&&!L(t)}var H=Object.prototype;function Q(t){var r=t&&t.constructor,e=typeof r=="function"&&r.prototype||H;return t===e}function Y(t,r){for(var e=-1,n=Array(t);++e<t;)n[e]=r(e);return n}var Z="[object Arguments]";function $(t){return _(t)&&d(t)==Z}var V=Object.prototype,J=V.hasOwnProperty,tt=V.propertyIsEnumerable,et=$(function(){return arguments}())?$:function(t){return _(t)&&J.call(t,"callee")&&!tt.call(t,"callee")};const rt=et;function at(){return!1}var D=typeof exports=="object"&&exports&&!exports.nodeType&&exports,x=D&&typeof module=="object"&&module&&!module.nodeType&&module,nt=x&&x.exports===D,S=nt?c.Buffer:void 0,ot=S?S.isBuffer:void 0,st=ot||at;const it=st;var ct="[object Arguments]",ut="[object Array]",pt="[object Boolean]",ft="[object Date]",gt="[object Error]",bt="[object Function]",yt="[object Map]",lt="[object Number]",dt="[object Object]",ht="[object RegExp]",Tt="[object Set]",jt="[object String]",vt="[object WeakMap]",mt="[object ArrayBuffer]",At="[object DataView]",_t="[object Float32Array]",wt="[object Float64Array]",$t="[object Int8Array]",xt="[object Int16Array]",St="[object Int32Array]",Ot="[object Uint8Array]",Pt="[object Uint8ClampedArray]",It="[object Uint16Array]",Et="[object Uint32Array]",a={};a[_t]=a[wt]=a[$t]=a[xt]=a[St]=a[Ot]=a[Pt]=a[It]=a[Et]=!0;a[ct]=a[ut]=a[mt]=a[pt]=a[At]=a[ft]=a[gt]=a[bt]=a[yt]=a[lt]=a[dt]=a[ht]=a[Tt]=a[jt]=a[vt]=!1;function Mt(t){return _(t)&&z(t.length)&&!!a[d(t)]}function Ct(t){return function(r){return t(r)}}var F=typeof exports=="object"&&exports&&!exports.nodeType&&exports,g=F&&typeof module=="object"&&module&&!module.nodeType&&module,kt=g&&g.exports===F,T=kt&&K.process,Bt=function(){try{var t=g&&g.require&&g.require("util").types;return t||T&&T.binding&&T.binding("util")}catch{}}();const O=Bt;var P=O&&O.isTypedArray,Ut=P?Ct(P):Mt;const zt=Ut;var Vt=Object.prototype,Dt=Vt.hasOwnProperty;function Ft(t,r){var e=U(t),n=!e&&rt(t),s=!e&&!n&&it(t),p=!e&&!n&&!s&&zt(t),f=e||n||s||p,h=f?Y(t.length,String):[],G=h.length;for(var o in t)(r||Dt.call(t,o))&&!(f&&(o=="length"||s&&(o=="offset"||o=="parent")||p&&(o=="buffer"||o=="byteLength"||o=="byteOffset")||R(o,G)))&&h.push(o);return h}function Gt(t,r){return function(e){return t(r(e))}}var Lt=Gt(Object.keys,Object);const Kt=Lt;var Rt=Object.prototype,Wt=Rt.hasOwnProperty;function qt(t){if(!Q(t))return Kt(t);var r=[];for(var e in Object(t))Wt.call(t,e)&&e!="constructor"&&r.push(e);return r}function Nt(t){return X(t)?Ft(t):qt(t)}function Xt(t,r){for(var e=-1,n=r.length,s=t.length;++e<n;)t[s+e]=r[e];return t}function Ht(){this.__data__=new w,this.size=0}function Qt(t){var r=this.__data__,e=r.delete(t);return this.size=r.size,e}function Yt(t){return this.__data__.get(t)}function Zt(t){return this.__data__.has(t)}var Jt=200;function te(t,r){var e=this.__data__;if(e instanceof w){var n=e.__data__;if(!y||n.length<Jt-1)return n.push([t,r]),this.size=++e.size,this;e=this.__data__=new W(n)}return e.set(t,r),this.size=e.size,this}function b(t){var r=this.__data__=new w(t);this.size=r.size}b.prototype.clear=Ht;b.prototype.delete=Qt;b.prototype.get=Yt;b.prototype.has=Zt;b.prototype.set=te;function ee(t,r){for(var e=-1,n=t==null?0:t.length,s=0,p=[];++e<n;){var f=t[e];r(f,e,t)&&(p[s++]=f)}return p}function re(){return[]}var ae=Object.prototype,ne=ae.propertyIsEnumerable,I=Object.getOwnPropertySymbols,oe=I?function(t){return t==null?[]:(t=Object(t),ee(I(t),function(r){return ne.call(t,r)}))}:re;const se=oe;function ie(t,r,e){var n=r(t);return U(t)?n:Xt(n,e(t))}function je(t){return ie(t,Nt,se)}var ce=l(c,"DataView");const v=ce;var ue=l(c,"Promise");const m=ue;var pe=l(c,"Set");const A=pe;var E="[object Map]",fe="[object Object]",M="[object Promise]",C="[object Set]",k="[object WeakMap]",B="[object DataView]",ge=u(v),be=u(y),ye=u(m),le=u(A),de=u(j),i=d;(v&&i(new v(new ArrayBuffer(1)))!=B||y&&i(new y)!=E||m&&i(m.resolve())!=M||A&&i(new A)!=C||j&&i(new j)!=k)&&(i=function(t){var r=d(t),e=r==fe?t.constructor:void 0,n=e?u(e):"";if(n)switch(n){case ge:return B;case be:return E;case ye:return M;case le:return C;case de:return k}return r});const ve=i;var he=c.Uint8Array;const me=he;export{A as S,me as U,rt as a,Xt as b,ie as c,ve as d,Ct as e,it as f,se as g,b as h,z as i,je as j,Nt as k,X as l,zt as m,O as n,Q as o,Ft as p,Gt as q,re as s};

View File

@ -1 +0,0 @@
import{aY as p,b9 as O,aZ as y,bd as x}from"./base-9962c822.js";import{o as v,l as m,p as w,q as P,U as u}from"./_Uint8Array-c92ffa25.js";var i=Object.create,b=function(){function e(){}return function(n){if(!p(n))return{};if(i)return i(n);e.prototype=n;var r=new e;return e.prototype=void 0,r}}();const A=b;function M(e,n){var r=-1,t=e.length;for(n||(n=Array(t));++r<t;)n[r]=e[r];return n}function N(e,n,r,t){var g=!r;r||(r={});for(var a=-1,h=n.length;++a<h;){var o=n[a],s=t?t(r[o],e[o],o,r,e):void 0;s===void 0&&(s=e[o]),g?O(r,o,s):y(r,o,s)}return r}function C(e){var n=[];if(e!=null)for(var r in Object(e))n.push(r);return n}var U=Object.prototype,I=U.hasOwnProperty;function K(e){if(!p(e))return C(e);var n=v(e),r=[];for(var t in e)t=="constructor"&&(n||!I.call(e,t))||r.push(t);return r}function Y(e){return m(e)?w(e,!0):K(e)}var L=P(Object.getPrototypeOf,Object);const T=L;var d=typeof exports=="object"&&exports&&!exports.nodeType&&exports,f=d&&typeof module=="object"&&module&&!module.nodeType&&module,B=f&&f.exports===d,l=B?x.Buffer:void 0,c=l?l.allocUnsafe:void 0;function Z(e,n){if(n)return e.slice();var r=e.length,t=c?c(r):new e.constructor(r);return e.copy(t),t}function E(e){var n=new e.constructor(e.byteLength);return new u(n).set(new u(e)),n}function D(e,n){var r=n?E(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.length)}function F(e){return typeof e.constructor=="function"&&!v(e)?A(T(e)):{}}export{E as a,D as b,N as c,M as d,Z as e,T as g,F as i,Y as k};

View File

@ -0,0 +1 @@
import{aL as p,aY as O,aM as y,b1 as x}from"./base-d79f9f62.js";import{o as v,l as m,p as w,q as P,U as u}from"./_Uint8Array-bbbfd6ac.js";var i=Object.create,b=function(){function e(){}return function(n){if(!p(n))return{};if(i)return i(n);e.prototype=n;var r=new e;return e.prototype=void 0,r}}();const A=b;function q(e,n){var r=-1,t=e.length;for(n||(n=Array(t));++r<t;)n[r]=e[r];return n}function N(e,n,r,t){var g=!r;r||(r={});for(var a=-1,h=n.length;++a<h;){var o=n[a],s=t?t(r[o],e[o],o,r,e):void 0;s===void 0&&(s=e[o]),g?O(r,o,s):y(r,o,s)}return r}function C(e){var n=[];if(e!=null)for(var r in Object(e))n.push(r);return n}var L=Object.prototype,U=L.hasOwnProperty;function I(e){if(!p(e))return C(e);var n=v(e),r=[];for(var t in e)t=="constructor"&&(n||!U.call(e,t))||r.push(t);return r}function Y(e){return m(e)?w(e,!0):I(e)}var K=P(Object.getPrototypeOf,Object);const T=K;var d=typeof exports=="object"&&exports&&!exports.nodeType&&exports,f=d&&typeof module=="object"&&module&&!module.nodeType&&module,B=f&&f.exports===d,l=B?x.Buffer:void 0,c=l?l.allocUnsafe:void 0;function D(e,n){if(n)return e.slice();var r=e.length,t=c?c(r):new e.constructor(r);return e.copy(t),t}function E(e){var n=new e.constructor(e.byteLength);return new u(n).set(new u(e)),n}function F(e,n){var r=n?E(e.buffer):e.buffer;return new e.constructor(r,e.byteOffset,e.length)}function G(e){return typeof e.constructor=="function"&&!v(e)?A(T(e)):{}}export{E as a,F as b,N as c,q as d,D as e,T as g,G as i,Y as k};

View File

@ -0,0 +1 @@
import{aL as i,aD as t,aX as f}from"./base-d79f9f62.js";import{l as n}from"./_Uint8Array-bbbfd6ac.js";function p(e,a,r){if(!i(r))return!1;var s=typeof a;return(s=="number"?n(r)&&t(a,r.length):s=="string"&&a in r)?f(r[a],e):!1}export{p as i};

View File

@ -1 +0,0 @@
import{aY as i,aQ as t,b8 as f}from"./base-9962c822.js";import{l as n}from"./_Uint8Array-c92ffa25.js";function p(e,a,r){if(!i(r))return!1;var s=typeof a;return(s=="number"?n(r)&&t(a,r.length):s=="string"&&a in r)?f(r[a],e):!1}export{p as i};

View File

@ -0,0 +1 @@
import{_ as o}from"./add-member.vue_vue_type_script_setup_true_lang-756e228c.js";import"./base-d79f9f62.js";/* empty css *//* empty css *//* empty css *//* empty css */import"./el-form-item-4ed993c7.js";/* empty css */import"./index-9e0d1e6c.js";import"./pinia-55149fa9.js";import"./member-5b79e301.js";import"./index-6fcaf7b3.js";import"./vue-router-fc35ac55.js";import"./storage-5316d819.js";import"./index-2048a34f.js";import"./index-3fd412a3.js";import"./index-542aa78e.js";import"./typescript-defaf979.js";import"./index-34cd7f55.js";import"./system-d23898e7.js";import"./index-5dbb8f83.js";import"./_plugin-vue_export-helper-c27b6911.js";import"./index-f249e665.js";import"./event-9519ab40.js";import"./index-b6ca69fd.js";import"./index-427f5a83.js";import"./index-71aec1df.js";import"./error-78e43d3e.js";import"./index-6befecc6.js";import"./_Uint8Array-bbbfd6ac.js";import"./_initCloneObject-a2c44136.js";import"./index-03649f16.js";import"./index-bdfee32a.js";import"./index-d0ada8fb.js";import"./index-cf3a42e3.js";import"./scroll-aa5f3aa0.js";import"./vnode-772b0c47.js";import"./index-6229e0fd.js";import"./focus-trap-50fa5770.js";import"./directive-13582d99.js";export{o as default};

View File

@ -1 +0,0 @@
import{_ as o}from"./add-member.vue_vue_type_script_setup_true_lang-cade17ca.js";import"./base-9962c822.js";/* empty css *//* empty css *//* empty css *//* empty css */import"./el-form-item-4ed993c7.js";/* empty css */import"./index-5516aed6.js";import"./pinia-a9fc3924.js";import"./member-8490bdef.js";import"./index-e026a545.js";import"./vue-router-d7e63612.js";import"./storage-0874d153.js";import"./index-57446bef.js";import"./index-5c4817f4.js";import"./index-2cabf788.js";import"./typescript-defaf979.js";import"./index-c98e204a.js";import"./system-1108e5c1.js";import"./index-c4e33d8d.js";import"./_plugin-vue_export-helper-c27b6911.js";import"./index-19251c17.js";import"./event-9519ab40.js";import"./index-ec548bfb.js";import"./index-6b77b11a.js";import"./index-71b7d8f4.js";import"./error-78e43d3e.js";import"./index-7c833df7.js";import"./_Uint8Array-c92ffa25.js";import"./_initCloneObject-41dd9efb.js";import"./index-7ab57426.js";import"./index-1370ab44.js";import"./index-e2acd187.js";import"./index-91fda20f.js";import"./scroll-d85c8f38.js";import"./vnode-562dae50.js";import"./index-df16e899.js";import"./focus-trap-d0fc8554.js";import"./directive-f75d4a7d.js";export{o as default};

View File

@ -1 +1 @@
import{d as F,r as b,R as M,c as R,e as v,v as h,x as d,g as $,y as s,A as V,B as y,u as r,Q as H}from"./base-9962c822.js";/* empty css *//* empty css *//* empty css *//* empty css */import"./el-form-item-4ed993c7.js";/* empty css */import{t as l}from"./index-5516aed6.js";import{p as I,q as j,r as A}from"./member-8490bdef.js";import{E as L}from"./index-19251c17.js";import{a as O,E as T}from"./index-7c833df7.js";import{E as z}from"./index-7ab57426.js";import{E as Q}from"./index-e2acd187.js";import{v as S}from"./directive-f75d4a7d.js";const Z={class:"dialog-footer"},ne=F({__name:"add-member",emits:["complete"],setup(G,{expose:N,emit:E}){const p=b(!1),i=b(!1);let u="",c="";const f={member_id:"",nickname:"",member_no:"",init_member_no:"",mobile:"",password:"",password_copy:""},a=M({...f}),_=b(),P=R(()=>({member_no:[{required:!0,message:l("memberNoPlaceholder"),trigger:"blur"},{validator:C,trigger:"blur"}],mobile:[{required:!0,message:l("mobilePlaceholder"),trigger:"blur"},{validator:x,trigger:"blur"}],password:[{required:!0,message:l("passwordPlaceholder"),trigger:"blur"}],password_copy:[{required:!0,message:l("passwordPlaceholder"),trigger:"blur"},{validator:D,trigger:"blur"}]})),x=(m,e,o)=>{e&&!/^1[3-9]\d{9}$/.test(e)?o(new Error(l("mobileHint"))):o()},D=(m,e,o)=>{e!=a.password?o(l("doubleCipherHint")):o()},C=(m,e,o)=>{e&&!/^[0-9a-zA-Z]*$/g.test(e)?o(new Error(l("memberNoHint"))):o()},k=async()=>{await j().then(m=>{c=m.data}).catch(()=>{})},U=async m=>{if(i.value||!m)return;const e=A;await m.validate(async o=>{o&&(i.value=!0,e(a).then(g=>{i.value=!1,p.value=!1,E("complete")}).catch(()=>{i.value=!1}))})};return N({showDialog:p,setFormData:async(m=null)=>{if(i.value=!0,Object.assign(a,f),u=l("addMember"),m){u=l("updateMember");const e=await(await I(m.member_id)).data;e&&Object.keys(a).forEach(o=>{e[o]!=null&&(a[o]=e[o])})}else await k(),a.member_no=c,a.init_member_no=c;i.value=!1}}),(m,e)=>{const o=L,n=O,g=T,w=z,q=Q,B=S;return v(),h(q,{modelValue:p.value,"onUpdate:modelValue":e[7]||(e[7]=t=>p.value=t),title:r(u),width:"500px","destroy-on-close":!0},{footer:d(()=>[$("span",Z,[s(w,{onClick:e[5]||(e[5]=t=>p.value=!1)},{default:d(()=>[V(y(r(l)("cancel")),1)]),_:1}),s(w,{type:"primary",loading:i.value,onClick:e[6]||(e[6]=t=>U(_.value))},{default:d(()=>[V(y(r(l)("confirm")),1)]),_:1},8,["loading"])])]),default:d(()=>[H((v(),h(g,{model:a,"label-width":"90px",ref_key:"formRef",ref:_,rules:r(P),class:"page-form"},{default:d(()=>[s(n,{label:r(l)("memberNo"),prop:"member_no"},{default:d(()=>[s(o,{modelValue:a.member_no,"onUpdate:modelValue":e[0]||(e[0]=t=>a.member_no=t),clearable:"",maxlength:"20",placeholder:r(l)("memberNoPlaceholder"),class:"input-width"},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),s(n,{label:r(l)("mobile"),prop:"mobile"},{default:d(()=>[s(o,{modelValue:a.mobile,"onUpdate:modelValue":e[1]||(e[1]=t=>a.mobile=t),clearable:"",placeholder:r(l)("mobilePlaceholder"),type:"number",class:"input-width"},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),s(n,{label:r(l)("nickname")},{default:d(()=>[s(o,{modelValue:a.nickname,"onUpdate:modelValue":e[2]||(e[2]=t=>a.nickname=t),clearable:"",placeholder:r(l)("nickNamePlaceholder"),class:"input-width"},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),s(n,{label:r(l)("password"),prop:"password"},{default:d(()=>[s(o,{modelValue:a.password,"onUpdate:modelValue":e[3]||(e[3]=t=>a.password=t),type:"password",placeholder:r(l)("passwordPlaceholder"),clearable:"",class:"input-width"},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),s(n,{label:r(l)("passwordCopy"),prop:"password_copy"},{default:d(()=>[s(o,{modelValue:a.password_copy,"onUpdate:modelValue":e[4]||(e[4]=t=>a.password_copy=t),type:"password",placeholder:r(l)("passwordPlaceholder"),clearable:"",class:"input-width"},null,8,["modelValue","placeholder"])]),_:1},8,["label"])]),_:1},8,["model","rules"])),[[B,i.value]])]),_:1},8,["modelValue","title"])}}});export{ne as _};
import{d as F,r as b,R as M,c as R,e as v,v as h,x as d,g as $,y as s,A as V,B as y,u as r,Q as H}from"./base-d79f9f62.js";/* empty css *//* empty css *//* empty css *//* empty css */import"./el-form-item-4ed993c7.js";/* empty css */import{t as l}from"./index-9e0d1e6c.js";import{p as I,q as j,r as A}from"./member-5b79e301.js";import{E as L}from"./index-f249e665.js";import{a as O,E as T}from"./index-6befecc6.js";import{E as z}from"./index-03649f16.js";import{E as Q}from"./index-d0ada8fb.js";import{v as S}from"./directive-13582d99.js";const Z={class:"dialog-footer"},ne=F({__name:"add-member",emits:["complete"],setup(G,{expose:N,emit:E}){const p=b(!1),i=b(!1);let u="",c="";const f={member_id:"",nickname:"",member_no:"",init_member_no:"",mobile:"",password:"",password_copy:""},a=M({...f}),_=b(),P=R(()=>({member_no:[{required:!0,message:l("memberNoPlaceholder"),trigger:"blur"},{validator:C,trigger:"blur"}],mobile:[{required:!0,message:l("mobilePlaceholder"),trigger:"blur"},{validator:x,trigger:"blur"}],password:[{required:!0,message:l("passwordPlaceholder"),trigger:"blur"}],password_copy:[{required:!0,message:l("passwordPlaceholder"),trigger:"blur"},{validator:D,trigger:"blur"}]})),x=(m,e,o)=>{e&&!/^1[3-9]\d{9}$/.test(e)?o(new Error(l("mobileHint"))):o()},D=(m,e,o)=>{e!=a.password?o(l("doubleCipherHint")):o()},C=(m,e,o)=>{e&&!/^[0-9a-zA-Z]*$/g.test(e)?o(new Error(l("memberNoHint"))):o()},k=async()=>{await j().then(m=>{c=m.data}).catch(()=>{})},U=async m=>{if(i.value||!m)return;const e=A;await m.validate(async o=>{o&&(i.value=!0,e(a).then(g=>{i.value=!1,p.value=!1,E("complete")}).catch(()=>{i.value=!1}))})};return N({showDialog:p,setFormData:async(m=null)=>{if(i.value=!0,Object.assign(a,f),u=l("addMember"),m){u=l("updateMember");const e=await(await I(m.member_id)).data;e&&Object.keys(a).forEach(o=>{e[o]!=null&&(a[o]=e[o])})}else await k(),a.member_no=c,a.init_member_no=c;i.value=!1}}),(m,e)=>{const o=L,n=O,g=T,w=z,q=Q,B=S;return v(),h(q,{modelValue:p.value,"onUpdate:modelValue":e[7]||(e[7]=t=>p.value=t),title:r(u),width:"500px","destroy-on-close":!0},{footer:d(()=>[$("span",Z,[s(w,{onClick:e[5]||(e[5]=t=>p.value=!1)},{default:d(()=>[V(y(r(l)("cancel")),1)]),_:1}),s(w,{type:"primary",loading:i.value,onClick:e[6]||(e[6]=t=>U(_.value))},{default:d(()=>[V(y(r(l)("confirm")),1)]),_:1},8,["loading"])])]),default:d(()=>[H((v(),h(g,{model:a,"label-width":"90px",ref_key:"formRef",ref:_,rules:r(P),class:"page-form"},{default:d(()=>[s(n,{label:r(l)("memberNo"),prop:"member_no"},{default:d(()=>[s(o,{modelValue:a.member_no,"onUpdate:modelValue":e[0]||(e[0]=t=>a.member_no=t),clearable:"",maxlength:"20",placeholder:r(l)("memberNoPlaceholder"),class:"input-width"},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),s(n,{label:r(l)("mobile"),prop:"mobile"},{default:d(()=>[s(o,{modelValue:a.mobile,"onUpdate:modelValue":e[1]||(e[1]=t=>a.mobile=t),clearable:"",placeholder:r(l)("mobilePlaceholder"),type:"number",class:"input-width"},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),s(n,{label:r(l)("nickname")},{default:d(()=>[s(o,{modelValue:a.nickname,"onUpdate:modelValue":e[2]||(e[2]=t=>a.nickname=t),clearable:"",placeholder:r(l)("nickNamePlaceholder"),class:"input-width"},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),s(n,{label:r(l)("password"),prop:"password"},{default:d(()=>[s(o,{modelValue:a.password,"onUpdate:modelValue":e[3]||(e[3]=t=>a.password=t),type:"password",placeholder:r(l)("passwordPlaceholder"),clearable:"",class:"input-width"},null,8,["modelValue","placeholder"])]),_:1},8,["label"]),s(n,{label:r(l)("passwordCopy"),prop:"password_copy"},{default:d(()=>[s(o,{modelValue:a.password_copy,"onUpdate:modelValue":e[4]||(e[4]=t=>a.password_copy=t),type:"password",placeholder:r(l)("passwordPlaceholder"),clearable:"",class:"input-width"},null,8,["modelValue","placeholder"])]),_:1},8,["label"])]),_:1},8,["model","rules"])),[[B,i.value]])]),_:1},8,["modelValue","title"])}}});export{ne as _};

View File

@ -1 +0,0 @@
import{_ as o}from"./add-table.vue_vue_type_script_setup_true_lang-93a36f1b.js";import"./base-9962c822.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-4ed993c7.js";/* empty css *//* empty css *//* empty css *//* empty css */import"./index-5516aed6.js";import"./pinia-a9fc3924.js";import"./tools-db2d0aa0.js";import"./index-e026a545.js";import"./vue-router-d7e63612.js";import"./storage-0874d153.js";import"./index-57446bef.js";import"./index-5c4817f4.js";import"./index-2cabf788.js";import"./typescript-defaf979.js";import"./index-c98e204a.js";import"./system-1108e5c1.js";import"./index-c4e33d8d.js";import"./_plugin-vue_export-helper-c27b6911.js";import"./index-4906bae6.js";import"./index-2ee99ba1.js";import"./error-78e43d3e.js";import"./index-ab38878f.js";import"./index-71b7d8f4.js";import"./focus-trap-d0fc8554.js";import"./_Uint8Array-c92ffa25.js";import"./_initCloneObject-41dd9efb.js";import"./index-65bc84a3.js";import"./event-9519ab40.js";import"./index-6b77b11a.js";import"./isEqual-240b5e0a.js";import"./flatten-940b9f2c.js";import"./_isIterateeCall-909b9c9e.js";import"./debounce-9674000c.js";import"./index-6edd46fb.js";import"./index-df16e899.js";import"./index-19251c17.js";import"./index-ec548bfb.js";import"./index-7ab57426.js";import"./index-1370ab44.js";import"./index-e2acd187.js";import"./index-91fda20f.js";import"./scroll-d85c8f38.js";import"./vnode-562dae50.js";import"./directive-f75d4a7d.js";export{o as default};

View File

@ -0,0 +1 @@
import{_ as o}from"./add-table.vue_vue_type_script_setup_true_lang-5daccc86.js";import"./base-d79f9f62.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-4ed993c7.js";/* empty css *//* empty css *//* empty css *//* empty css */import"./index-9e0d1e6c.js";import"./pinia-55149fa9.js";import"./tools-6d0ea037.js";import"./index-6fcaf7b3.js";import"./vue-router-fc35ac55.js";import"./storage-5316d819.js";import"./index-2048a34f.js";import"./index-3fd412a3.js";import"./index-542aa78e.js";import"./typescript-defaf979.js";import"./index-34cd7f55.js";import"./system-d23898e7.js";import"./index-5dbb8f83.js";import"./_plugin-vue_export-helper-c27b6911.js";import"./index-2b5d43b9.js";import"./index-2462875f.js";import"./error-78e43d3e.js";import"./index-54a839cc.js";import"./index-71aec1df.js";import"./focus-trap-50fa5770.js";import"./_Uint8Array-bbbfd6ac.js";import"./_initCloneObject-a2c44136.js";import"./index-d4057e2a.js";import"./event-9519ab40.js";import"./index-427f5a83.js";import"./isEqual-3f50b221.js";import"./flatten-0bbd547a.js";import"./_isIterateeCall-559d3e90.js";import"./debounce-6fd93949.js";import"./index-af085fbd.js";import"./index-6229e0fd.js";import"./index-f249e665.js";import"./index-b6ca69fd.js";import"./index-03649f16.js";import"./index-bdfee32a.js";import"./index-d0ada8fb.js";import"./index-cf3a42e3.js";import"./scroll-aa5f3aa0.js";import"./vnode-772b0c47.js";import"./directive-13582d99.js";export{o as default};

View File

@ -1 +1 @@
import{d as T,r as c,R as N,c as x,e as u,v as _,x as s,g as f,Q as B,u as a,B as b,y as d,A as L,i as k}from"./base-9962c822.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-4ed993c7.js";/* empty css *//* empty css *//* empty css *//* empty css */import{t as i}from"./index-5516aed6.js";import{j as z,k as R}from"./tools-db2d0aa0.js";import{b as F}from"./vue-router-d7e63612.js";import{a as P,E as U}from"./index-4906bae6.js";import{E as j}from"./index-19251c17.js";import{E as q}from"./index-7ab57426.js";import{E as A}from"./index-e2acd187.js";import{v as G}from"./directive-f75d4a7d.js";const I={class:""},pe=T({__name:"add-table",emits:["complete"],setup(Q,{expose:g,emit:S}){const h=F();let o=c(!1);const m=c("");let e=N({loading:!0,data:[],searchParam:{table_name:"",table_content:""}});const v=x(()=>e.data.filter(t=>!m.value||t.Name.toLowerCase().includes(m.value.toLowerCase())||t.Comment.toLowerCase().includes(m.value.toLowerCase()))),p=()=>{e.loading=!0,z().then(t=>{e.loading=!1,e.data=t.data}).catch(()=>{e.loading=!1})};p();const w=t=>{let l=t.Name;e.loading=!0,R({table_name:l}).then(n=>{e.loading=!1,o.value=!1,h.push({path:"/tools/code/edit",query:{id:n.data.id}})}).catch(n=>{e.loading=!1})};return g({showDialog:o,setFormData:async(t=null)=>{p()}}),(t,l)=>{const n=P,C=j,y=q,D=U,E=A,V=G;return u(),_(E,{modelValue:a(o),"onUpdate:modelValue":l[1]||(l[1]=r=>k(o)?o.value=r:o=r),title:a(i)("addCode"),width:"800px","destroy-on-close":!0},{default:s(()=>[f("div",I,[B((u(),_(D,{data:a(v),size:"large",height:"400"},{empty:s(()=>[f("span",null,b(a(e).loading?"":a(i)("emptyData")),1)]),default:s(()=>[d(n,{prop:"Name",label:a(i)("tableName"),"min-width":"150"},null,8,["label"]),d(n,{prop:"Comment",label:a(i)("tableComment"),"min-width":"120"},null,8,["label"]),d(n,{align:"right","min-width":"150"},{header:s(()=>[d(C,{modelValue:m.value,"onUpdate:modelValue":l[0]||(l[0]=r=>m.value=r),size:"small",placeholder:a(i)("searchPlaceholder")},null,8,["modelValue","placeholder"])]),default:s(r=>[d(y,{size:"small",type:"primary",onClick:J=>w(r.row)},{default:s(()=>[L(b(a(i)("addBtn")),1)]),_:2},1032,["onClick"])]),_:1})]),_:1},8,["data"])),[[V,a(e).loading]])])]),_:1},8,["modelValue","title"])}}});export{pe as _};
import{d as T,r as c,R as N,c as x,e as u,v as _,x as s,g as f,Q as B,u as a,B as b,y as d,A as L,i as k}from"./base-d79f9f62.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-4ed993c7.js";/* empty css *//* empty css *//* empty css *//* empty css */import{t as i}from"./index-9e0d1e6c.js";import{j as z,k as R}from"./tools-6d0ea037.js";import{b as F}from"./vue-router-fc35ac55.js";import{a as P,E as U}from"./index-2b5d43b9.js";import{E as j}from"./index-f249e665.js";import{E as q}from"./index-03649f16.js";import{E as A}from"./index-d0ada8fb.js";import{v as G}from"./directive-13582d99.js";const I={class:""},pe=T({__name:"add-table",emits:["complete"],setup(Q,{expose:g,emit:S}){const h=F();let o=c(!1);const m=c("");let e=N({loading:!0,data:[],searchParam:{table_name:"",table_content:""}});const v=x(()=>e.data.filter(t=>!m.value||t.Name.toLowerCase().includes(m.value.toLowerCase())||t.Comment.toLowerCase().includes(m.value.toLowerCase()))),p=()=>{e.loading=!0,z().then(t=>{e.loading=!1,e.data=t.data}).catch(()=>{e.loading=!1})};p();const w=t=>{let l=t.Name;e.loading=!0,R({table_name:l}).then(n=>{e.loading=!1,o.value=!1,h.push({path:"/tools/code/edit",query:{id:n.data.id}})}).catch(n=>{e.loading=!1})};return g({showDialog:o,setFormData:async(t=null)=>{p()}}),(t,l)=>{const n=P,C=j,y=q,D=U,E=A,V=G;return u(),_(E,{modelValue:a(o),"onUpdate:modelValue":l[1]||(l[1]=r=>k(o)?o.value=r:o=r),title:a(i)("addCode"),width:"800px","destroy-on-close":!0},{default:s(()=>[f("div",I,[B((u(),_(D,{data:a(v),size:"large",height:"400"},{empty:s(()=>[f("span",null,b(a(e).loading?"":a(i)("emptyData")),1)]),default:s(()=>[d(n,{prop:"Name",label:a(i)("tableName"),"min-width":"150"},null,8,["label"]),d(n,{prop:"Comment",label:a(i)("tableComment"),"min-width":"120"},null,8,["label"]),d(n,{align:"right","min-width":"150"},{header:s(()=>[d(C,{modelValue:m.value,"onUpdate:modelValue":l[0]||(l[0]=r=>m.value=r),size:"small",placeholder:a(i)("searchPlaceholder")},null,8,["modelValue","placeholder"])]),default:s(r=>[d(y,{size:"small",type:"primary",onClick:J=>w(r.row)},{default:s(()=>[L(b(a(i)("addBtn")),1)]),_:2},1032,["onClick"])]),_:1})]),_:1},8,["data"])),[[V,a(e).loading]])])]),_:1},8,["modelValue","title"])}}});export{pe as _};

View File

@ -1 +1 @@
import{b as t}from"./index-e026a545.js";function o(n){return t.get("addon/local",n,{showSuccessMessage:!0})}function s(n){return t.post(`addon/install/${n.addon}`,n)}function a(n){return t.post(`addon/cloudinstall/${n.addon}`,n,{timeout:60*1e3})}function l(n){return t.post(`addon/uninstall/${n.addon}`,n,{showSuccessMessage:!0})}function d(n){return t.get(`addon/install/check/${n}`,{timeout:30*1e3})}function u(){return t.get("addon/installtask")}function c(n){return t.get(`addon/cloudinstall/${n}`)}function i(n){return t.get(`addon/uninstall/check/${n}`,{timeout:30*1e3})}function r(n){return t.put(`addon/install/cancel/${n}`,{},{showErrorMessage:!1})}function g(){return t.get("addon/list/install")}export{o as a,u as b,a as c,c as d,i as e,r as f,g,s as i,d as p,l as u};
import{b as t}from"./index-6fcaf7b3.js";function o(n){return t.get("addon/local",n,{showSuccessMessage:!0})}function s(n){return t.post(`addon/install/${n.addon}`,n)}function a(n){return t.post(`addon/cloudinstall/${n.addon}`,n,{timeout:60*1e3})}function l(n){return t.post(`addon/uninstall/${n.addon}`,n,{showSuccessMessage:!0})}function d(n){return t.get(`addon/install/check/${n}`,{timeout:30*1e3})}function u(){return t.get("addon/installtask")}function c(n){return t.get(`addon/cloudinstall/${n}`)}function i(n){return t.get(`addon/uninstall/check/${n}`,{timeout:30*1e3})}function r(n){return t.put(`addon/install/cancel/${n}`,{},{showErrorMessage:!1})}function g(){return t.get("addon/list/install")}export{o as a,u as b,a as c,c as d,i as e,r as f,g,s as i,d as p,l as u};

View File

@ -1 +1 @@
import{d as w,R as y,e as c,f as x,y as o,x as a,g as n,B as l,u as t,Q as E,v as k,A as d}from"./base-9962c822.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-4ed993c7.js";/* empty css *//* empty css *//* empty css */import{t as i}from"./index-5516aed6.js";import{I as B}from"./sys-7988dced.js";import{u as C,b as N}from"./vue-router-d7e63612.js";import{a as T,E as A}from"./index-4906bae6.js";import{E as D}from"./index-7ab57426.js";import{E as L}from"./index-189f302e.js";import{v as R}from"./directive-f75d4a7d.js";import"./pinia-a9fc3924.js";import"./index-e026a545.js";import"./storage-0874d153.js";import"./index-57446bef.js";import"./index-5c4817f4.js";import"./index-2cabf788.js";import"./typescript-defaf979.js";import"./index-c98e204a.js";import"./system-1108e5c1.js";import"./index-c4e33d8d.js";import"./_plugin-vue_export-helper-c27b6911.js";import"./index-2ee99ba1.js";import"./error-78e43d3e.js";import"./index-ab38878f.js";import"./index-71b7d8f4.js";import"./focus-trap-d0fc8554.js";import"./_Uint8Array-c92ffa25.js";import"./_initCloneObject-41dd9efb.js";import"./index-65bc84a3.js";import"./event-9519ab40.js";import"./index-6b77b11a.js";import"./isEqual-240b5e0a.js";import"./flatten-940b9f2c.js";import"./_isIterateeCall-909b9c9e.js";import"./debounce-9674000c.js";import"./index-6edd46fb.js";import"./index-df16e899.js";import"./index-1370ab44.js";const V={class:"main-container"},j={class:"flex justify-between items-center"},$={class:"text-[20px]"},z={class:"mt-[20px]"},Rt=w({__name:"agreement",setup(I){const _=C().meta.title;let e=y({loading:!0,data:[]});(()=>{e.loading=!0,e.data=[],B().then(r=>{Object.keys(r.data).forEach(s=>e.data.push(r.data[s])),e.loading=!1}).catch(()=>{e.loading=!1})})();const u=N(),f=r=>{u.push(`/setting/agreement/edit?key=${r.agreement_key}`)};return(r,s)=>{const m=T,g=D,h=A,b=L,v=R;return c(),x("div",V,[o(b,{class:"box-card !border-none",shadow:"never"},{default:a(()=>[n("div",j,[n("span",$,l(t(_)),1)]),n("div",z,[E((c(),k(h,{data:t(e).data,size:"large"},{empty:a(()=>[n("span",null,l(t(e).loading?"":t(i)("emptyData")),1)]),default:a(()=>[o(m,{prop:"type_name",label:t(i)("typeName"),"min-width":"100","show-overflow-tooltip":!0},null,8,["label"]),o(m,{prop:"title",label:t(i)("title"),"min-width":"100","show-overflow-tooltip":!0},null,8,["label"]),o(m,{label:t(i)("updateTime"),"min-width":"180",align:"center"},{default:a(({row:p})=>[d(l(p.update_time||""),1)]),_:1},8,["label"]),o(m,{label:t(i)("operation"),align:"right",fixed:"right",width:"100"},{default:a(({row:p})=>[o(g,{type:"primary",link:"",onClick:S=>f(p)},{default:a(()=>[d(l(t(i)("config")),1)]),_:2},1032,["onClick"])]),_:1},8,["label"])]),_:1},8,["data"])),[[v,t(e).loading]])])]),_:1})])}}});export{Rt as default};
import{d as w,R as y,e as c,f as x,y as o,x as a,g as n,B as l,u as t,Q as E,v as k,A as d}from"./base-d79f9f62.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-4ed993c7.js";/* empty css *//* empty css *//* empty css */import{t as i}from"./index-9e0d1e6c.js";import{I as B}from"./sys-3d5b784a.js";import{u as C,b as N}from"./vue-router-fc35ac55.js";import{a as T,E as A}from"./index-2b5d43b9.js";import{E as D}from"./index-03649f16.js";import{E as L}from"./index-ba59a1dc.js";import{v as R}from"./directive-13582d99.js";import"./pinia-55149fa9.js";import"./index-6fcaf7b3.js";import"./storage-5316d819.js";import"./index-2048a34f.js";import"./index-3fd412a3.js";import"./index-542aa78e.js";import"./typescript-defaf979.js";import"./index-34cd7f55.js";import"./system-d23898e7.js";import"./index-5dbb8f83.js";import"./_plugin-vue_export-helper-c27b6911.js";import"./index-2462875f.js";import"./error-78e43d3e.js";import"./index-54a839cc.js";import"./index-71aec1df.js";import"./focus-trap-50fa5770.js";import"./_Uint8Array-bbbfd6ac.js";import"./_initCloneObject-a2c44136.js";import"./index-d4057e2a.js";import"./event-9519ab40.js";import"./index-427f5a83.js";import"./isEqual-3f50b221.js";import"./flatten-0bbd547a.js";import"./_isIterateeCall-559d3e90.js";import"./debounce-6fd93949.js";import"./index-af085fbd.js";import"./index-6229e0fd.js";import"./index-bdfee32a.js";const V={class:"main-container"},j={class:"flex justify-between items-center"},$={class:"text-[20px]"},z={class:"mt-[20px]"},Rt=w({__name:"agreement",setup(I){const _=C().meta.title;let e=y({loading:!0,data:[]});(()=>{e.loading=!0,e.data=[],B().then(r=>{Object.keys(r.data).forEach(s=>e.data.push(r.data[s])),e.loading=!1}).catch(()=>{e.loading=!1})})();const u=N(),f=r=>{u.push(`/setting/agreement/edit?key=${r.agreement_key}`)};return(r,s)=>{const m=T,g=D,h=A,b=L,v=R;return c(),x("div",V,[o(b,{class:"box-card !border-none",shadow:"never"},{default:a(()=>[n("div",j,[n("span",$,l(t(_)),1)]),n("div",z,[E((c(),k(h,{data:t(e).data,size:"large"},{empty:a(()=>[n("span",null,l(t(e).loading?"":t(i)("emptyData")),1)]),default:a(()=>[o(m,{prop:"type_name",label:t(i)("typeName"),"min-width":"100","show-overflow-tooltip":!0},null,8,["label"]),o(m,{prop:"title",label:t(i)("title"),"min-width":"100","show-overflow-tooltip":!0},null,8,["label"]),o(m,{label:t(i)("updateTime"),"min-width":"180",align:"center"},{default:a(({row:p})=>[d(l(p.update_time||""),1)]),_:1},8,["label"]),o(m,{label:t(i)("operation"),align:"right",fixed:"right",width:"100"},{default:a(({row:p})=>[o(g,{type:"primary",link:"",onClick:S=>f(p)},{default:a(()=>[d(l(t(i)("config")),1)]),_:2},1032,["onClick"])]),_:1},8,["label"])]),_:1},8,["data"])),[[v,t(e).loading]])])]),_:1})])}}});export{Rt as default};

View File

@ -1 +1 @@
import{b as t}from"./index-e026a545.js";function e(){return t.get("aliapp/config")}function p(a){return t.put("aliapp/config",a,{showSuccessMessage:!0})}function n(){return t.get("aliapp/static")}export{n as a,e as g,p as s};
import{b as t}from"./index-6fcaf7b3.js";function e(){return t.get("aliapp/config")}function p(a){return t.put("aliapp/config",a,{showSuccessMessage:!0})}function n(){return t.get("aliapp/static")}export{n as a,e as g,p as s};

View File

@ -1 +1 @@
import{d as I,r as y,R as V,Q as R,e as l,f as _,g as t,B as o,u as s,y as x,x as i,F as M,z as N,v as D,A as T,H as b,bl as j,bm as z}from"./base-9962c822.js";/* empty css *//* empty css *//* empty css */import"./el-tooltip-4ed993c7.js";/* empty css *//* empty css *//* empty css *//* empty css */import{_ as U}from"./apply_empty-cdca3e85.js";import{t as p}from"./index-5516aed6.js";import{g as H}from"./addon-48b9aa5e.js";import{f as O,a as k}from"./storage-0874d153.js";import{b as P}from"./vue-router-d7e63612.js";import{u as Q,f as L}from"./index-e026a545.js";import{E as $}from"./index-7ab57426.js";import{E as q}from"./index-7332c216.js";import{E as G}from"./index-ab38878f.js";import{E as J}from"./index-d5900ec8.js";import{E as K}from"./index-967f94ef.js";import{v as W}from"./directive-f75d4a7d.js";import{_ as X}from"./_plugin-vue_export-helper-c27b6911.js";import"./pinia-a9fc3924.js";import"./index-57446bef.js";import"./index-5c4817f4.js";import"./index-2cabf788.js";import"./typescript-defaf979.js";import"./index-c98e204a.js";import"./system-1108e5c1.js";import"./index-c4e33d8d.js";import"./index-1370ab44.js";import"./index-6b77b11a.js";import"./index-71b7d8f4.js";import"./index-57e03d9e.js";import"./index-df16e899.js";import"./debounce-9674000c.js";import"./index-ec548bfb.js";import"./position-8e494ab3.js";import"./scroll-d85c8f38.js";import"./focus-trap-d0fc8554.js";const Y=""+new URL("app_store_default-c0531792.png",import.meta.url).href,h=m=>(j("data-v-726bb07d"),m=m(),z(),m),Z={class:"box-border pt-[68px] px-[76px] overview-top"},tt={key:0},et={class:"flex justify-between items-center"},ot={class:"font-[600] text-[26px] text-[#222] leading-[37px]"},st={class:"font-[500] text-[14px] text-[#222] leading-[20px] mt-[12px]"},pt=h(()=>t("div",{class:"mr-[9px] text-[#3F3F3F] iconfont iconxiazai01"},null,-1)),at={class:"font-[600] text-[14px] text-[#222] leading-[20px]"},nt={class:"flex flex-wrap mt-[40px]"},it=["onClick"],rt={class:"bg-[#F7FAFB] py-[18px] px-[24px] flex items-center app-item-head"},ct=h(()=>t("div",{class:"image-slot"},[t("img",{class:"w-[40px] h-[40px] rounded-[8px]",src:Y})],-1)),lt={class:"py-[18px] px-[24px]"},mt={class:"font-[600] leading-[1] text-[14px] text-[#222]"},dt={class:"text-[13px] text-[#6D7278] leading-[18px] mt-[6px] truncate"},_t=h(()=>t("div",{class:"w-[230px] mx-auto"},[t("img",{src:U,class:"max-w-full",alt:""})],-1)),xt={class:"flex items-center"},ut=I({__name:"app_manage",setup(m){const v=P(),u=Q(),a=y(!0),d=V({appList:[]}),f=y({});(()=>{a.value=!0,H().then(n=>{Object.values(n.data).forEach((e,r)=>{e.type=="app"&&d.appList.push(e)}),u.routers.forEach((e,r)=>{e.children&&e.children.length?(e.name=L(e.children),f.value[e.meta.app]=L(e.children)):f.value[e.meta.app]=e.name}),a.value=!1}).catch(()=>{a.value=!1})})();const w=n=>{k.set({key:"menuAppStorage",data:n.key}),k.set({key:"plugMenuTypeStorage",data:""});const e=u.appMenuList;e.push(n.key),u.setAppMenuList(e);let r=f.value[n.key];v.push({name:r})},g=()=>{v.push("/app_manage/app_store")};return(n,e)=>{const r=$,E=q,F=G,S=J,A=K,B=W;return R((l(),_("div",Z,[d.appList&&!a.value?(l(),_("div",tt,[t("div",et,[t("div",null,[t("div",ot,o(s(p)("app")),1),t("div",st,o(s(p)("versionInfo"))+" "+o(s(p)("currentVersion")),1)]),x(r,{onClick:g,class:"px-[15px]"},{default:i(()=>[pt,t("span",at,o(s(p)("appStore")),1)]),_:1})]),t("div",nt,[(l(!0),_(M,null,N(d.appList,(c,C)=>(l(),_("div",{key:C,class:"app-item w-[280px] box-border !bg-[#fff] rounded-[6px] cursor-pointer mr-[20px] mb-[20px] overflow-hidden",onClick:ht=>w(c)},[t("div",rt,[x(E,{class:"w-[44px] h-[44px] rounded-[8px]",src:s(O)(c.icon),fit:"contain"},{error:i(()=>[ct]),_:2},1032,["src"])]),t("div",lt,[t("div",mt,o(c.title),1),x(F,{class:"box-item",effect:"light",content:c.desc,placement:"bottom-start"},{default:i(()=>[t("div",dt,o(c.desc),1)]),_:2},1032,["content"])])],8,it))),128)),!d.appList.length&&!a.value?(l(),D(A,{key:0,class:"mx-auto overview-empty"},{image:i(()=>[_t]),description:i(()=>[t("p",xt,[t("span",null,o(s(p)("descriptionLeft")),1),x(S,{type:"primary",onClick:g,class:"mx-[5px]"},{default:i(()=>[T(o(s(p)("link")),1)]),_:1}),t("span",null,o(s(p)("descriptionRight")),1)])]),_:1})):b("",!0)])])):b("",!0)])),[[B,a.value]])}}});const pe=X(ut,[["__scopeId","data-v-726bb07d"]]);export{pe as default};
import{d as I,r as y,R as V,Q as R,e as l,f as _,g as t,B as o,u as s,y as x,x as i,F as M,z as N,v as D,A as T,H as b,b9 as j,ba as z}from"./base-d79f9f62.js";/* empty css *//* empty css *//* empty css */import"./el-tooltip-4ed993c7.js";/* empty css *//* empty css *//* empty css *//* empty css */import{_ as U}from"./apply_empty-cdca3e85.js";import{t as p}from"./index-9e0d1e6c.js";import{g as H}from"./addon-3b05baad.js";import{f as O,a as k}from"./storage-5316d819.js";import{b as P}from"./vue-router-fc35ac55.js";import{u as Q,f as L}from"./index-6fcaf7b3.js";import{E as $}from"./index-03649f16.js";import{E as q}from"./index-8774d4a8.js";import{E as G}from"./index-54a839cc.js";import{E as J}from"./index-0b4254d8.js";import{E as K}from"./index-f7cbfd82.js";import{v as W}from"./directive-13582d99.js";import{_ as X}from"./_plugin-vue_export-helper-c27b6911.js";import"./pinia-55149fa9.js";import"./index-2048a34f.js";import"./index-3fd412a3.js";import"./index-542aa78e.js";import"./typescript-defaf979.js";import"./index-34cd7f55.js";import"./system-d23898e7.js";import"./index-5dbb8f83.js";import"./index-bdfee32a.js";import"./index-427f5a83.js";import"./index-71aec1df.js";import"./index-51305aa3.js";import"./index-6229e0fd.js";import"./debounce-6fd93949.js";import"./index-b6ca69fd.js";import"./position-4bcbb4c8.js";import"./scroll-aa5f3aa0.js";import"./focus-trap-50fa5770.js";const Y=""+new URL("app_store_default-c0531792.png",import.meta.url).href,h=m=>(j("data-v-726bb07d"),m=m(),z(),m),Z={class:"box-border pt-[68px] px-[76px] overview-top"},tt={key:0},et={class:"flex justify-between items-center"},ot={class:"font-[600] text-[26px] text-[#222] leading-[37px]"},st={class:"font-[500] text-[14px] text-[#222] leading-[20px] mt-[12px]"},pt=h(()=>t("div",{class:"mr-[9px] text-[#3F3F3F] iconfont iconxiazai01"},null,-1)),at={class:"font-[600] text-[14px] text-[#222] leading-[20px]"},nt={class:"flex flex-wrap mt-[40px]"},it=["onClick"],rt={class:"bg-[#F7FAFB] py-[18px] px-[24px] flex items-center app-item-head"},ct=h(()=>t("div",{class:"image-slot"},[t("img",{class:"w-[40px] h-[40px] rounded-[8px]",src:Y})],-1)),lt={class:"py-[18px] px-[24px]"},mt={class:"font-[600] leading-[1] text-[14px] text-[#222]"},dt={class:"text-[13px] text-[#6D7278] leading-[18px] mt-[6px] truncate"},_t=h(()=>t("div",{class:"w-[230px] mx-auto"},[t("img",{src:U,class:"max-w-full",alt:""})],-1)),xt={class:"flex items-center"},ut=I({__name:"app_manage",setup(m){const v=P(),u=Q(),a=y(!0),d=V({appList:[]}),f=y({});(()=>{a.value=!0,H().then(n=>{Object.values(n.data).forEach((e,r)=>{e.type=="app"&&d.appList.push(e)}),u.routers.forEach((e,r)=>{e.children&&e.children.length?(e.name=L(e.children),f.value[e.meta.app]=L(e.children)):f.value[e.meta.app]=e.name}),a.value=!1}).catch(()=>{a.value=!1})})();const w=n=>{k.set({key:"menuAppStorage",data:n.key}),k.set({key:"plugMenuTypeStorage",data:""});const e=u.appMenuList;e.push(n.key),u.setAppMenuList(e);let r=f.value[n.key];v.push({name:r})},g=()=>{v.push("/app_manage/app_store")};return(n,e)=>{const r=$,E=q,F=G,S=J,A=K,B=W;return R((l(),_("div",Z,[d.appList&&!a.value?(l(),_("div",tt,[t("div",et,[t("div",null,[t("div",ot,o(s(p)("app")),1),t("div",st,o(s(p)("versionInfo"))+" "+o(s(p)("currentVersion")),1)]),x(r,{onClick:g,class:"px-[15px]"},{default:i(()=>[pt,t("span",at,o(s(p)("appStore")),1)]),_:1})]),t("div",nt,[(l(!0),_(M,null,N(d.appList,(c,C)=>(l(),_("div",{key:C,class:"app-item w-[280px] box-border !bg-[#fff] rounded-[6px] cursor-pointer mr-[20px] mb-[20px] overflow-hidden",onClick:ht=>w(c)},[t("div",rt,[x(E,{class:"w-[44px] h-[44px] rounded-[8px]",src:s(O)(c.icon),fit:"contain"},{error:i(()=>[ct]),_:2},1032,["src"])]),t("div",lt,[t("div",mt,o(c.title),1),x(F,{class:"box-item",effect:"light",content:c.desc,placement:"bottom-start"},{default:i(()=>[t("div",dt,o(c.desc),1)]),_:2},1032,["content"])])],8,it))),128)),!d.appList.length&&!a.value?(l(),D(A,{key:0,class:"mx-auto overview-empty"},{image:i(()=>[_t]),description:i(()=>[t("p",xt,[t("span",null,o(s(p)("descriptionLeft")),1),x(S,{type:"primary",onClick:g,class:"mx-[5px]"},{default:i(()=>[T(o(s(p)("link")),1)]),_:1}),t("span",null,o(s(p)("descriptionRight")),1)])]),_:1})):b("",!0)])])):b("",!0)])),[[B,a.value]])}}});const pe=X(ut,[["__scopeId","data-v-726bb07d"]]);export{pe as default};

View File

@ -1 +0,0 @@
import{d as _,r as d,e,f as a,y as o,x as r,F as u,z as f,u as h}from"./base-9962c822.js";/* empty css *//* empty css */import{t as y}from"./index-5516aed6.js";import{a as v}from"./attachment-75502009.js";import{a as b,E as x}from"./index-da093955.js";import{E}from"./index-189f302e.js";import"./pinia-a9fc3924.js";/* empty css */import"./index-5c4817f4.js";import"./index-57446bef.js";/* empty css *//* empty css *//* empty css */import"./el-form-item-4ed993c7.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-4ed993c7.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./index-2cabf788.js";import"./typescript-defaf979.js";import"./index-c98e204a.js";import"./index-19251c17.js";import"./event-9519ab40.js";import"./index-ec548bfb.js";import"./index-6b77b11a.js";import"./index-71b7d8f4.js";import"./error-78e43d3e.js";import"./index-7ab57426.js";import"./index-1370ab44.js";import"./index-e059001a.js";import"./index-ab38878f.js";import"./focus-trap-d0fc8554.js";import"./dropdown-ccb689be.js";import"./index.vue_vue_type_script_setup_true_lang-780dd221.js";/* empty css */import"./sys-7988dced.js";import"./index-e026a545.js";import"./vue-router-d7e63612.js";import"./storage-0874d153.js";import"./system-1108e5c1.js";import"./index-c4e33d8d.js";import"./_plugin-vue_export-helper-c27b6911.js";import"./index-35c5a824.js";import"./index-91fda20f.js";import"./scroll-d85c8f38.js";import"./vnode-562dae50.js";import"./aria-adfa05c5.js";import"./validator-00f31ee7.js";import"./index-df16e899.js";import"./index-3427fe17.js";import"./index-2ee99ba1.js";import"./index-e2acd187.js";import"./index-4937003d.js";import"./index-20ef35a7.js";import"./index-7332c216.js";import"./index-57e03d9e.js";import"./debounce-9674000c.js";import"./position-8e494ab3.js";import"./index-967f94ef.js";import"./index-65bc84a3.js";import"./isEqual-240b5e0a.js";import"./_Uint8Array-c92ffa25.js";import"./flatten-940b9f2c.js";import"./index-26709bbd.js";import"./index-22970d5d.js";import"./index-fb8b7863.js";import"./strings-66191554.js";import"./index-6edd46fb.js";import"./index-7c833df7.js";import"./_initCloneObject-41dd9efb.js";import"./directive-f75d4a7d.js";const V={class:"main-container attachment-container"},oo=_({__name:"attachment",setup(g){const m=["image","video","icon"],p=d(m[0]);return(k,i)=>{const n=b,s=x,l=E;return e(),a("div",V,[o(l,{class:"box-card !border-none full-container",shadow:"never"},{default:r(()=>[o(s,{modelValue:p.value,"onUpdate:modelValue":i[0]||(i[0]=t=>p.value=t),class:""},{default:r(()=>[(e(),a(u,null,f(m,(t,c)=>o(n,{label:h(y)(t),name:t,key:c},{default:r(()=>[o(v,{scene:"attachment",type:t},null,8,["type"])]),_:2},1032,["label","name"])),64))]),_:1},8,["modelValue"])]),_:1})])}}});export{oo as default};

View File

@ -0,0 +1 @@
import{d as _,r as d,e,f as a,y as o,x as r,F as u,z as f,u as h}from"./base-d79f9f62.js";/* empty css *//* empty css */import{t as y}from"./index-9e0d1e6c.js";import{a as v}from"./attachment-b5785570.js";import{a as b,E as x}from"./index-3f47b227.js";import{E}from"./index-ba59a1dc.js";import"./pinia-55149fa9.js";/* empty css */import"./index-3fd412a3.js";import"./index-2048a34f.js";/* empty css *//* empty css *//* empty css */import"./el-form-item-4ed993c7.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-tooltip-4ed993c7.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./index-542aa78e.js";import"./typescript-defaf979.js";import"./index-34cd7f55.js";import"./index-f249e665.js";import"./event-9519ab40.js";import"./index-b6ca69fd.js";import"./index-427f5a83.js";import"./index-71aec1df.js";import"./error-78e43d3e.js";import"./index-03649f16.js";import"./index-bdfee32a.js";import"./index-48558072.js";import"./index-54a839cc.js";import"./focus-trap-50fa5770.js";import"./dropdown-465e3407.js";import"./index.vue_vue_type_script_setup_true_lang-772fa486.js";/* empty css */import"./sys-3d5b784a.js";import"./index-6fcaf7b3.js";import"./vue-router-fc35ac55.js";import"./storage-5316d819.js";import"./system-d23898e7.js";import"./index-5dbb8f83.js";import"./_plugin-vue_export-helper-c27b6911.js";import"./index-d1262e7a.js";import"./index-cf3a42e3.js";import"./scroll-aa5f3aa0.js";import"./vnode-772b0c47.js";import"./aria-adfa05c5.js";import"./validator-8f1b170d.js";import"./index-6229e0fd.js";import"./index-e3c69a8e.js";import"./index-2462875f.js";import"./index-d0ada8fb.js";import"./index-50edbf04.js";import"./index-7d2f3ba9.js";import"./index-8774d4a8.js";import"./index-51305aa3.js";import"./debounce-6fd93949.js";import"./position-4bcbb4c8.js";import"./index-f7cbfd82.js";import"./index-d4057e2a.js";import"./isEqual-3f50b221.js";import"./_Uint8Array-bbbfd6ac.js";import"./flatten-0bbd547a.js";import"./index-014848fe.js";import"./index-f3bad52c.js";import"./index-3a5faaeb.js";import"./strings-d73e3c52.js";import"./index-af085fbd.js";import"./index-6befecc6.js";import"./_initCloneObject-a2c44136.js";import"./directive-13582d99.js";const V={class:"main-container attachment-container"},oo=_({__name:"attachment",setup(g){const m=["image","video","icon"],p=d(m[0]);return(k,i)=>{const n=b,s=x,l=E;return e(),a("div",V,[o(l,{class:"box-card !border-none full-container",shadow:"never"},{default:r(()=>[o(s,{modelValue:p.value,"onUpdate:modelValue":i[0]||(i[0]=t=>p.value=t),class:""},{default:r(()=>[(e(),a(u,null,f(m,(t,c)=>o(n,{label:h(y)(t),name:t,key:c},{default:r(()=>[o(v,{scene:"attachment",type:t},null,8,["type"])]),_:2},1032,["label","name"])),64))]),_:1},8,["modelValue"])]),_:1})])}}});export{oo as default};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
import{b as o}from"./index-7c833df7.js";var r=1,n=4;function a(e){return o(e,r|n)}export{a as c};

View File

@ -0,0 +1 @@
import{b as o}from"./index-6befecc6.js";var r=1,n=4;function a(e){return o(e,r|n)}export{a as c};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
import{d as S,r as u,R as k,w as I,Q as R,e as q,f as B,g as a,B as n,u as t,y as s,x as r,bl as D,bm as N}from"./base-9962c822.js";/* empty css *//* empty css *//* empty css *//* empty css */import"./el-form-item-4ed993c7.js";import{t as e}from"./index-5516aed6.js";import{v as F}from"./sys-7988dced.js";import{E as V}from"./index-5c4817f4.js";import{u as L,b as U}from"./vue-router-d7e63612.js";import{a as d}from"./index-2cabf788.js";import{a as j,E as M}from"./index-7c833df7.js";import{E as P}from"./index-19251c17.js";import{E as Q}from"./index-189f302e.js";import{v as $}from"./directive-f75d4a7d.js";import{_ as z}from"./_plugin-vue_export-helper-c27b6911.js";import"./pinia-a9fc3924.js";import"./index-e026a545.js";import"./storage-0874d153.js";import"./index-57446bef.js";import"./system-1108e5c1.js";import"./index-c4e33d8d.js";import"./typescript-defaf979.js";import"./index-c98e204a.js";import"./error-78e43d3e.js";import"./index-71b7d8f4.js";import"./_Uint8Array-c92ffa25.js";import"./_initCloneObject-41dd9efb.js";import"./event-9519ab40.js";import"./index-ec548bfb.js";import"./index-6b77b11a.js";const A=""+new URL("preview-52aad803.png",import.meta.url).href,G=i=>(D("data-v-7a2a3fc4"),i=i(),N(),i),H={class:"main-container"},J={class:"flex ml-[18px] justify-between items-center mt-[20px]"},K={class:"text-[20px]"},O=G(()=>a("img",{class:"w-[500px]",src:A,alt:""},null,-1)),T=S({__name:"config",setup(i){const f=L().meta.title,m=u(!0),o=k({is_open:!1,request_url:""}),v=u();U(),F().then(p=>{o.request_url=p.data.web_url+"/",m.value=!1});const{copy:g,isSupported:w,copied:c}=V(),b=p=>{if(!w.value){d({message:e("notSupportCopy"),type:"warning"});return}g(p)};I(c,()=>{c.value&&d({message:e("copySuccess"),type:"success"})});const x=()=>{window.open(o.request_url)};return(p,l)=>{const _=j,y=P,h=Q,E=M,C=$;return R((q(),B("div",H,[a("div",J,[a("span",K,n(t(f)),1)]),s(E,{model:o,"label-width":"150px",ref_key:"formRef",ref:v,class:"page-form"},{default:r(()=>[s(h,{class:"box-card !border-none",shadow:"never"},{default:r(()=>[s(_,{label:t(e)("preview"),prop:"weapp_name"},{default:r(()=>[O]),_:1},8,["label"]),s(_,{label:t(e)("PCDomainName")},{default:r(()=>[s(y,{"model-value":o.request_url,class:"input-width",readonly:!0},{append:r(()=>[a("div",{class:"cursor-pointer",onClick:l[0]||(l[0]=X=>b(o.request_url))},n(t(e)("copy")),1)]),_:1},8,["model-value"]),a("span",{class:"ml-2 cursor-pointer visit-btn",onClick:x},n(t(e)("clickVisit")),1)]),_:1},8,["label"])]),_:1})]),_:1},8,["model"])])),[[C,m.value]])}}});const qe=z(T,[["__scopeId","data-v-7a2a3fc4"]]);export{qe as default};
import{d as S,r as u,R as k,w as I,Q as R,e as q,f as B,g as a,B as n,u as t,y as s,x as r,b9 as D,ba as N}from"./base-d79f9f62.js";/* empty css *//* empty css *//* empty css *//* empty css */import"./el-form-item-4ed993c7.js";import{t as e}from"./index-9e0d1e6c.js";import{v as F}from"./sys-3d5b784a.js";import{E as V}from"./index-3fd412a3.js";import{u as L,b as U}from"./vue-router-fc35ac55.js";import{a as d}from"./index-542aa78e.js";import{a as j,E as M}from"./index-6befecc6.js";import{E as P}from"./index-f249e665.js";import{E as Q}from"./index-ba59a1dc.js";import{v as $}from"./directive-13582d99.js";import{_ as z}from"./_plugin-vue_export-helper-c27b6911.js";import"./pinia-55149fa9.js";import"./index-6fcaf7b3.js";import"./storage-5316d819.js";import"./index-2048a34f.js";import"./system-d23898e7.js";import"./index-5dbb8f83.js";import"./typescript-defaf979.js";import"./index-34cd7f55.js";import"./error-78e43d3e.js";import"./index-71aec1df.js";import"./_Uint8Array-bbbfd6ac.js";import"./_initCloneObject-a2c44136.js";import"./event-9519ab40.js";import"./index-b6ca69fd.js";import"./index-427f5a83.js";const A=""+new URL("preview-52aad803.png",import.meta.url).href,G=i=>(D("data-v-7a2a3fc4"),i=i(),N(),i),H={class:"main-container"},J={class:"flex ml-[18px] justify-between items-center mt-[20px]"},K={class:"text-[20px]"},O=G(()=>a("img",{class:"w-[500px]",src:A,alt:""},null,-1)),T=S({__name:"config",setup(i){const f=L().meta.title,m=u(!0),o=k({is_open:!1,request_url:""}),v=u();U(),F().then(p=>{o.request_url=p.data.web_url+"/",m.value=!1});const{copy:g,isSupported:w,copied:c}=V(),b=p=>{if(!w.value){d({message:e("notSupportCopy"),type:"warning"});return}g(p)};I(c,()=>{c.value&&d({message:e("copySuccess"),type:"success"})});const x=()=>{window.open(o.request_url)};return(p,l)=>{const _=j,y=P,h=Q,E=M,C=$;return R((q(),B("div",H,[a("div",J,[a("span",K,n(t(f)),1)]),s(E,{model:o,"label-width":"150px",ref_key:"formRef",ref:v,class:"page-form"},{default:r(()=>[s(h,{class:"box-card !border-none",shadow:"never"},{default:r(()=>[s(_,{label:t(e)("preview"),prop:"weapp_name"},{default:r(()=>[O]),_:1},8,["label"]),s(_,{label:t(e)("PCDomainName")},{default:r(()=>[s(y,{"model-value":o.request_url,class:"input-width",readonly:!0},{append:r(()=>[a("div",{class:"cursor-pointer",onClick:l[0]||(l[0]=X=>b(o.request_url))},n(t(e)("copy")),1)]),_:1},8,["model-value"]),a("span",{class:"ml-2 cursor-pointer visit-btn",onClick:x},n(t(e)("clickVisit")),1)]),_:1},8,["label"])]),_:1})]),_:1},8,["model"])])),[[C,m.value]])}}});const qe=z(T,[["__scopeId","data-v-7a2a3fc4"]]);export{qe as default};

View File

@ -1 +1 @@
import{d as D,r as v,R,w as F,e as g,f as I,g as a,B as m,u as n,Q as j,v as H,x as i,y as l,A as M}from"./base-9962c822.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-form-item-4ed993c7.js";/* empty css */import{t as r}from"./index-5516aed6.js";import{b as y}from"./index-e026a545.js";import{v as O}from"./sys-7988dced.js";import{E as U}from"./index-5c4817f4.js";import{u as $}from"./vue-router-d7e63612.js";import{a as h}from"./index-2cabf788.js";import{E as A}from"./index-83924071.js";import{a as L,E as Q}from"./index-7c833df7.js";import{E as T}from"./index-19251c17.js";import{E as z}from"./index-189f302e.js";import{E as G}from"./index-7ab57426.js";import{v as J}from"./directive-f75d4a7d.js";import{_ as K}from"./_plugin-vue_export-helper-c27b6911.js";import"./pinia-a9fc3924.js";import"./storage-0874d153.js";import"./index-57446bef.js";import"./system-1108e5c1.js";import"./index-c4e33d8d.js";import"./typescript-defaf979.js";import"./index-c98e204a.js";import"./validator-00f31ee7.js";import"./event-9519ab40.js";import"./index-6b77b11a.js";import"./index-71b7d8f4.js";import"./index-1370ab44.js";import"./error-78e43d3e.js";import"./_Uint8Array-c92ffa25.js";import"./_initCloneObject-41dd9efb.js";import"./index-ec548bfb.js";function P(){return y.get("channel/h5/config")}function W(u){return y.put("channel/h5/config",u,{showSuccessMessage:!0})}const X={class:"main-container"},Y={class:"flex ml-[18px] justify-between items-center mt-[20px]"},Z={class:"text-[20px]"},ee={class:"fixed-footer-wrap"},te={class:"fixed-footer"},oe=D({__name:"config",setup(u){const w=$().meta.title,s=v(!0),e=R({is_open:!1,request_url:""}),_=v();P().then(t=>{Object.assign(e,t.data),e.is_open=Boolean(Number(e.is_open)),s.value=!1}),O().then(t=>{e.request_url=t.data.wap_url+"/"});const{copy:x,isSupported:b,copied:d}=U(),E=t=>{if(!b.value){h({message:r("notSupportCopy"),type:"warning"});return}x(t)};F(d,()=>{d.value&&h({message:r("copySuccess"),type:"success"})});const C=()=>{window.open(e.request_url)},k=async t=>{s.value||!t||await t.validate(async o=>{if(o){s.value=!0;let p={...e};p.is_open=Number(p.is_open),W(p).then(()=>{s.value=!1}).catch(()=>{s.value=!1})}})};return(t,o)=>{const p=A,f=L,B=T,N=z,V=Q,q=G,S=J;return g(),I("div",X,[a("div",Y,[a("span",Z,m(n(w)),1)]),j((g(),H(V,{model:e,"label-width":"150px",ref_key:"formRef",ref:_,class:"page-form"},{default:i(()=>[l(N,{class:"box-card !border-none",shadow:"never"},{default:i(()=>[l(f,{label:n(r)("isOpen")},{default:i(()=>[l(p,{modelValue:e.is_open,"onUpdate:modelValue":o[0]||(o[0]=c=>e.is_open=c)},null,8,["modelValue"])]),_:1},8,["label"]),l(f,{label:n(r)("h5DomainName")},{default:i(()=>[l(B,{"model-value":e.request_url,class:"input-width",readonly:!0},{append:i(()=>[a("div",{class:"cursor-pointer",onClick:o[1]||(o[1]=c=>E(e.request_url))},m(n(r)("copy")),1)]),_:1},8,["model-value"]),a("span",{class:"ml-2 cursor-pointer visit-btn",onClick:C},m(n(r)("clickVisit")),1)]),_:1},8,["label"])]),_:1})]),_:1},8,["model"])),[[S,s.value]]),a("div",ee,[a("div",te,[l(q,{type:"primary",loading:s.value,onClick:o[2]||(o[2]=c=>k(_.value))},{default:i(()=>[M(m(n(r)("save")),1)]),_:1},8,["loading"])])])])}}});const Ae=K(oe,[["__scopeId","data-v-6c14296d"]]);export{Ae as default};
import{d as D,r as v,R,w as F,e as g,f as I,g as a,B as m,u as n,Q as j,v as H,x as i,y as l,A as M}from"./base-d79f9f62.js";/* empty css *//* empty css *//* empty css *//* empty css *//* empty css */import"./el-form-item-4ed993c7.js";/* empty css */import{t as r}from"./index-9e0d1e6c.js";import{b as y}from"./index-6fcaf7b3.js";import{v as O}from"./sys-3d5b784a.js";import{E as U}from"./index-3fd412a3.js";import{u as $}from"./vue-router-fc35ac55.js";import{a as h}from"./index-542aa78e.js";import{E as A}from"./index-797616f3.js";import{a as L,E as Q}from"./index-6befecc6.js";import{E as T}from"./index-f249e665.js";import{E as z}from"./index-ba59a1dc.js";import{E as G}from"./index-03649f16.js";import{v as J}from"./directive-13582d99.js";import{_ as K}from"./_plugin-vue_export-helper-c27b6911.js";import"./pinia-55149fa9.js";import"./storage-5316d819.js";import"./index-2048a34f.js";import"./system-d23898e7.js";import"./index-5dbb8f83.js";import"./typescript-defaf979.js";import"./index-34cd7f55.js";import"./validator-8f1b170d.js";import"./event-9519ab40.js";import"./index-427f5a83.js";import"./index-71aec1df.js";import"./index-bdfee32a.js";import"./error-78e43d3e.js";import"./_Uint8Array-bbbfd6ac.js";import"./_initCloneObject-a2c44136.js";import"./index-b6ca69fd.js";function P(){return y.get("channel/h5/config")}function W(u){return y.put("channel/h5/config",u,{showSuccessMessage:!0})}const X={class:"main-container"},Y={class:"flex ml-[18px] justify-between items-center mt-[20px]"},Z={class:"text-[20px]"},ee={class:"fixed-footer-wrap"},te={class:"fixed-footer"},oe=D({__name:"config",setup(u){const w=$().meta.title,s=v(!0),e=R({is_open:!1,request_url:""}),_=v();P().then(t=>{Object.assign(e,t.data),e.is_open=Boolean(Number(e.is_open)),s.value=!1}),O().then(t=>{e.request_url=t.data.wap_url+"/"});const{copy:x,isSupported:b,copied:d}=U(),E=t=>{if(!b.value){h({message:r("notSupportCopy"),type:"warning"});return}x(t)};F(d,()=>{d.value&&h({message:r("copySuccess"),type:"success"})});const C=()=>{window.open(e.request_url)},k=async t=>{s.value||!t||await t.validate(async o=>{if(o){s.value=!0;let p={...e};p.is_open=Number(p.is_open),W(p).then(()=>{s.value=!1}).catch(()=>{s.value=!1})}})};return(t,o)=>{const p=A,f=L,B=T,N=z,V=Q,q=G,S=J;return g(),I("div",X,[a("div",Y,[a("span",Z,m(n(w)),1)]),j((g(),H(V,{model:e,"label-width":"150px",ref_key:"formRef",ref:_,class:"page-form"},{default:i(()=>[l(N,{class:"box-card !border-none",shadow:"never"},{default:i(()=>[l(f,{label:n(r)("isOpen")},{default:i(()=>[l(p,{modelValue:e.is_open,"onUpdate:modelValue":o[0]||(o[0]=c=>e.is_open=c)},null,8,["modelValue"])]),_:1},8,["label"]),l(f,{label:n(r)("h5DomainName")},{default:i(()=>[l(B,{"model-value":e.request_url,class:"input-width",readonly:!0},{append:i(()=>[a("div",{class:"cursor-pointer",onClick:o[1]||(o[1]=c=>E(e.request_url))},m(n(r)("copy")),1)]),_:1},8,["model-value"]),a("span",{class:"ml-2 cursor-pointer visit-btn",onClick:C},m(n(r)("clickVisit")),1)]),_:1},8,["label"])]),_:1})]),_:1},8,["model"])),[[S,s.value]]),a("div",ee,[a("div",te,[l(q,{type:"primary",loading:s.value,onClick:o[2]||(o[2]=c=>k(_.value))},{default:i(()=>[M(m(n(r)("save")),1)]),_:1},8,["loading"])])])])}}});const Ae=K(oe,[["__scopeId","data-v-6c14296d"]]);export{Ae as default};

Some files were not shown because too many files have changed in this diff Show More