🎉 init(初始化):
22
.gitignore
vendored
Normal file
|
@ -0,0 +1,22 @@
|
|||
# Build and Release Folders
|
||||
bin-debug/
|
||||
bin-release/
|
||||
[Oo]bj/
|
||||
[Bb]in/
|
||||
|
||||
# Other files and folders
|
||||
.settings/
|
||||
|
||||
# Executables
|
||||
*.swf
|
||||
*.air
|
||||
*.ipa
|
||||
*.apk
|
||||
|
||||
# Project files, i.e. `.project`, `.actionScriptProperties` and `.flexProperties`
|
||||
# should NOT be excluded as they contain compiler settings and other important
|
||||
# information for Eclipse / Flash Builder.
|
||||
|
||||
/.idea
|
||||
/upgrade
|
||||
niucloud/public/.htaccess
|
20
LICENSE
Normal file
|
@ -0,0 +1,20 @@
|
|||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2023 niucloud-admin
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal in
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
36
README.en.md
Normal file
|
@ -0,0 +1,36 @@
|
|||
# niucloud-admin
|
||||
|
||||
#### Description
|
||||
{**When you're done, you can delete the content in this README and update the file with details for others getting started with your repository**}
|
||||
|
||||
#### Software Architecture
|
||||
Software architecture description
|
||||
|
||||
#### Installation
|
||||
|
||||
1. xxxx
|
||||
2. xxxx
|
||||
3. xxxx
|
||||
|
||||
#### Instructions
|
||||
|
||||
1. xxxx
|
||||
2. xxxx
|
||||
3. xxxx
|
||||
|
||||
#### Contribution
|
||||
|
||||
1. Fork the repository
|
||||
2. Create Feat_xxx branch
|
||||
3. Commit your code
|
||||
4. Create Pull Request
|
||||
|
||||
|
||||
#### Gitee Feature
|
||||
|
||||
1. You can use Readme\_XXX.md to support different languages, such as Readme\_en.md, Readme\_zh.md
|
||||
2. Gitee blog [blog.gitee.com](https://blog.gitee.com)
|
||||
3. Explore open source project [https://gitee.com/explore](https://gitee.com/explore)
|
||||
4. The most valuable open source project [GVP](https://gitee.com/gvp)
|
||||
5. The manual of Gitee [https://gitee.com/help](https://gitee.com/help)
|
||||
6. The most popular members [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
|
100
README.md
Normal file
|
@ -0,0 +1,100 @@
|
|||
|
||||
### NIUCLOUD-ADMIN-SAAS 是什么?
|
||||
niucloud-admin-saas是一款快速开发通用管理后台框架,整体功能架构全部精心设计!代码干净整洁!低耦合,高质量!!!前端采用最新技术 **Vite+TypeScript+Vue3+ElementPlus** ,后台采用PHP8、MYSQL8、THINKPHP8 全部最新技术栈。 采用多租户多站点多应用多插件任意组合使用的SAAS架构设计,内置代码生成器,插件生成器,一键云编译、一键云部署,集成用户权限、表单设计、云存储、短信发送、素材中心、微信及公众号、Api模块一系列开箱即用功能,是一款快速搭建开发企业级应用的软件系统。源码100%开源无加密!框架采用MIT协议,终身免费,商用免费!
|
||||
|
||||
目前已经有 NIUCLOUD SHOP商城+分销+VIPCard+上门服务插件。 更多应用插件正在陆续上线中... :clap: :clap: :clap:
|
||||
|
||||
|
||||
### NIUCLOUD-ADMIN-SAAS 采用的技术亮点
|
||||
```
|
||||
- 后台php采用thinkphp8+php8+mysql,支持composer快速安装扩展,支持redis缓存以及消息队列,支持多语言设计开发,同时开发采用严格的restful的api设计开发。
|
||||
- 后台前后端分离采用element-plus、vue3.0、typescript、vite、pina等前端技术,同时使用i18n支持国际化多语言开发。
|
||||
- 手机端采用uniapp前后端分离,同时使用uview、vue3.0、typescript、vite、pina等前端技术,同时使用i18n支持国际化多语言开发,可以灵活编译成h5,微信小程序,支付宝小程序,抖音小程序等使用场景。
|
||||
- niucloud-admin采用多租户的saas系统设计,能够提供企业级软件服务运营 ,同时满足用户多站点,多商户,多门店等系统开发需求。
|
||||
- niucloud-admin结合当前市面上很多框架结构不规范,导致基础结构不稳定等情况,严格定义了分层设计的开发规范,同时api接口严格采用restful的开发规范,能够满足大型业务系统或者微服务的开发需求。
|
||||
- niucloud-admin前端以及后端采用严格的多语言开发规范,包括前端展示,api接口返回,数据验证,错误返回等全部使用多语言设计规范,使开发者能够真生意义上实现多语言的开发需求。
|
||||
- niucloud-admin已经搭建好常规系统的开发底层,具体的底层功能包括:管理员管理,权限管理,网站设置,计划任务管理,素材管理,会员管理,会员账户管理,微信公众号以及小程序管理,支付管理,第三方登录管理,消息管理,短信管理,文章管理,前端装修等全面的基础功能,这样开发者不需要开发基础的结构而专心开发业务。
|
||||
- niucloud-admin系统内置支持微信/支付宝支付,微信公众号/小程序/短信消息管理,阿里云/腾讯云短信,七牛云/阿里云存储等基础的功能扩展,后续会根据实际业务不断扩展基础组件。
|
||||
- niucloud-admin结合系统结构特点专门开发了代码生成器,这样开发者根据数据表就可以一键生成基础的业务代码,包括:后台php业务代码以及对应的前端vue代码。
|
||||
- 手机端设计开发了自定义装修,同时提供了基础的开发组件,方便开发者设计开发手机自定义页面装修的开发需求
|
||||
```
|
||||
### NIUCLOUD 框架截图
|
||||
![输入图片说明](https://media.niucloud.com/1704066345d7742c4c0a1a941e836e8d633f209396_aliyun.jpg)
|
||||
![输入图片说明](https://media.niucloud.com/17040664219c6ce47b234eac495c3c4aa6e83920b6_aliyun.png)
|
||||
![输入图片说明](https://media.niucloud.com/17040665085ed007bd6daf220cc1ecd4e301c6008f_aliyun.png)
|
||||
![输入图片说明](https://media.niucloud.com/1704066609bad8bba9c5bfe5a243f5ebcec54866af_aliyun.png)
|
||||
![输入图片说明](https://media.niucloud.com/170406669739221755c392e165470c486d0025ad17_aliyun.png)
|
||||
![输入图片说明](https://media.niucloud.com/1704067302721c5360c622b4934fae659ee1eb0987_aliyun.png)
|
||||
|
||||
### 商城插件
|
||||
![输入图片说明](https://media.niucloud.com/1704067355ecae8e7b09c482e8c3a5ebc1a4cd0fcc_aliyun.png)
|
||||
|
||||
### 分销插件
|
||||
![输入图片说明](https://media.niucloud.com/1705744442d046875f3a6356e20b4201683c2f08fe_aliyun.png)
|
||||
![输入图片说明](https://media.niucloud.com/17057444230b1a32898072457faa8888b77d9621ff_aliyun.png)
|
||||
![输入图片说明](https://media.niucloud.com/17057444220f55b9430e07e635968a843bcc3e2845_aliyun.png)
|
||||
|
||||
### 上门服务插件
|
||||
![输入图片说明](https://media.niucloud.com/1705739434bf20bb824783fcee9eea6361f3cfb7aa_aliyun.png)
|
||||
![输入图片说明](https://media.niucloud.com/1705739434483707b8617e0e1489d7d2f51cda111c_aliyun.png)
|
||||
![输入图片说明](https://media.niucloud.com/17057394343bdd84db9c1fa966c7cb0c03c5618ad9_aliyun.png)
|
||||
|
||||
### VIPCard会员卡插件
|
||||
![输入图片说明](https://media.niucloud.com/1704067355ecae8e7b09c482e8c3a5ebc1a4cd0fcc_aliyun.png)
|
||||
|
||||
### 旅游系统插件
|
||||
![输入图片说明](https://media.niucloud.com/17057440675004b59c88adaebcb492a31d3a909944_aliyun.png)
|
||||
![输入图片说明](https://media.niucloud.com/1705744067bad60e348b4dd479d223aa5de963a1bf_aliyun.png)
|
||||
|
||||
|
||||
### 操作指南
|
||||
[官网地址](https://www.niucloud.com)
|
||||
| [服务市场](https://www.niucloud.com)
|
||||
| [使用手册](https://www.niucloud.com/doc)
|
||||
| [二开手册](https://www.niucloud.com/doc)
|
||||
| [开发视频](https://www.niucloud.com/doc)
|
||||
| [API接口手册](https://api.niucloud.com/apidoc.html?target_id=001)
|
||||
| [论坛地址](https://bbs.niucloud.com)
|
||||
|
||||
### 演示地址
|
||||
- 站点后台演示网址:[<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/
|
||||
旅游系统账号:tourtest 密码:123456<br/>
|
||||
商城系统账号:shoptest 密码:123456<br/>
|
||||
会员卡系统账号:cardtest 密码:123456<br/>
|
||||
- 平台后台演示网址:[<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
|
||||
|
||||
### 加入NIUCLOUD开发者生态,一起助力成就程序员创业梦想!!!
|
||||
|
||||
加入企业微信群技术交流,请扫描下面二维码 :point_down:
|
||||
|
||||
![输入图片说明](https://media.niucloud.com/170312377249fc5bc70c5f914fda3d7c5cf3413ddc_aliyun.jpg)
|
||||
|
||||
|
||||
### 开源使用须知
|
||||
|
||||
1.允许用于个人学习、毕业设计、教学案例、公益事业、商业使用;
|
||||
|
||||
2.本框架应用源代码所有权和著作权归niucloud官方所有,基于niucloud-admin框架开发的应用,所有权和著作权归应用开发商所有。但必须明确声明是基于niucloud-admin框架开发,请自觉遵守,否则产生的一切任何后果责任由侵权者自负;
|
||||
|
||||
3.禁止修改框架代码并再次发布框架衍生版等与niucloud-admin框架产生恶意竞争或对抗的行为;
|
||||
|
||||
4.本框架源码全部开源;包括前端,后端,无任何加密;
|
||||
|
||||
5.商用请仔细审查代码和漏洞,不得用于任一国家许可范围之外的商业应用,产生的一切任何后果责任自负;
|
||||
|
||||
6.一切事物有个人喜好的标准,本开源代码意在分享,不喜勿喷。
|
||||
|
||||
![输入图片说明](https://www.niucloud.com/img/readme/%E9%A1%B6%E9%83%A8%E5%B9%BF%E5%91%8A1.jpg)
|
||||
|
||||
|
||||
### 版权信息
|
||||
版权所有Copyright © 2015-2025 niucloud-admin 版权所有
|
||||
|
||||
All rights reserved。
|
||||
|
||||
杭州数字云动科技有限公司
|
||||
杭州牛之云科技有限公司
|
||||
|
||||
提供技术支持
|
13
admin/.env.development
Normal file
|
@ -0,0 +1,13 @@
|
|||
NODE_ENV = 'development'
|
||||
|
||||
# api请求地址
|
||||
VITE_APP_BASE_URL='http://niucloud.com:8296/index.php/adminapi'
|
||||
|
||||
# 图片服务器地址
|
||||
VITE_IMG_DOMAIN='http://niucloud.com:8296'
|
||||
|
||||
# 请求时header中token的参数名
|
||||
VITE_REQUEST_HEADER_TOKEN_KEY='token'
|
||||
|
||||
# 请求时header中站点的参数名
|
||||
VITE_REQUEST_HEADER_SITEID_KEY='site-id'
|
13
admin/.env.production
Normal file
|
@ -0,0 +1,13 @@
|
|||
NODE_ENV = 'production'
|
||||
|
||||
# api请求地址
|
||||
VITE_APP_BASE_URL='/adminapi/'
|
||||
|
||||
# 图片服务器地址
|
||||
VITE_IMG_DOMAIN=''
|
||||
|
||||
# 请求时header中token的参数名
|
||||
VITE_REQUEST_HEADER_TOKEN_KEY='token'
|
||||
|
||||
# 请求时header中站点的参数名
|
||||
VITE_REQUEST_HEADER_SITEID_KEY='site-id'
|
27
admin/.eslintrc.json
Normal file
|
@ -0,0 +1,27 @@
|
|||
{
|
||||
"env": {
|
||||
"browser": true,
|
||||
"es2021": true
|
||||
},
|
||||
"extends": [
|
||||
"plugin:vue/vue3-essential",
|
||||
"standard-with-typescript",
|
||||
"eslint:recommended"
|
||||
],
|
||||
"overrides": [
|
||||
],
|
||||
"parserOptions": {
|
||||
"ecmaVersion": "latest",
|
||||
"sourceType": "module",
|
||||
"parser": "@typescript-eslint/parser"
|
||||
},
|
||||
"plugins": [
|
||||
"vue",
|
||||
"@typescript-eslint"
|
||||
],
|
||||
"rules": {
|
||||
"no-tabs":"off",
|
||||
"indent": [1, 4, { "SwitchCase": 1 }],
|
||||
"eqeqeq":"off"
|
||||
}
|
||||
}
|
24
admin/.gitignore
vendored
Normal file
|
@ -0,0 +1,24 @@
|
|||
# Logs
|
||||
logs
|
||||
*.log
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
pnpm-debug.log*
|
||||
lerna-debug.log*
|
||||
|
||||
node_modules
|
||||
dist
|
||||
dist-ssr
|
||||
*.local
|
||||
|
||||
# Editor directories and files
|
||||
.vscode/*
|
||||
!.vscode/extensions.json
|
||||
.idea
|
||||
.DS_Store
|
||||
*.suo
|
||||
*.ntvs*
|
||||
*.njsproj
|
||||
*.sln
|
||||
*.sw?
|
18
admin/README.md
Normal file
|
@ -0,0 +1,18 @@
|
|||
# Vue 3 + TypeScript + Vite
|
||||
|
||||
This template should help get you started developing with Vue 3 and TypeScript in Vite. The template uses Vue 3 `<script setup>` SFCs, check out the [script setup docs](https://v3.vuejs.org/api/sfc-script-setup.html#sfc-script-setup) to learn more.
|
||||
|
||||
## Recommended IDE Setup
|
||||
|
||||
- [VS Code](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur) + [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin).
|
||||
|
||||
## Type Support For `.vue` Imports in TS
|
||||
|
||||
TypeScript cannot handle type information for `.vue` imports by default, so we replace the `tsc` CLI with `vue-tsc` for type checking. In editors, we need [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin) to make the TypeScript language service aware of `.vue` types.
|
||||
|
||||
If the standalone TypeScript plugin doesn't feel fast enough to you, Volar has also implemented a [Take Over Mode](https://github.com/johnsoncodehk/volar/discussions/471#discussioncomment-1361669) that is more performant. You can enable it by the following steps:
|
||||
|
||||
1. Disable the built-in TypeScript Extension
|
||||
1. Run `Extensions: Show Built-in Extensions` from VSCode's command palette
|
||||
2. Find `TypeScript and JavaScript Language Features`, right click and select `Disable (Workspace)`
|
||||
2. Reload the VSCode window by running `Developer: Reload Window` from the command palette.
|
5
admin/auto-imports.d.ts
vendored
Normal file
|
@ -0,0 +1,5 @@
|
|||
// Generated by 'unplugin-auto-import'
|
||||
export {}
|
||||
declare global {
|
||||
const ElNotification: typeof import('element-plus/es')['ElNotification']
|
||||
}
|
97
admin/components.d.ts
vendored
Normal file
|
@ -0,0 +1,97 @@
|
|||
// generated by unplugin-vue-components
|
||||
// We suggest you to commit this file into source control
|
||||
// Read more: https://github.com/vuejs/core/pull/3399
|
||||
import '@vue/runtime-core'
|
||||
|
||||
export {}
|
||||
|
||||
declare module '@vue/runtime-core' {
|
||||
export interface GlobalComponents {
|
||||
Attachment: typeof import('./src/components/upload-attachment/attachment.vue')['default']
|
||||
DiyLink: typeof import('./src/components/diy-link/index.vue')['default']
|
||||
Editor: typeof import('./src/components/editor/index.vue')['default']
|
||||
ElAlert: typeof import('element-plus/es')['ElAlert']
|
||||
ElAside: typeof import('element-plus/es')['ElAside']
|
||||
ElAvatar: typeof import('element-plus/es')['ElAvatar']
|
||||
ElBreadcrumb: typeof import('element-plus/es')['ElBreadcrumb']
|
||||
ElBreadcrumbItem: typeof import('element-plus/es')['ElBreadcrumbItem']
|
||||
ElButton: typeof import('element-plus/es')['ElButton']
|
||||
ElCard: typeof import('element-plus/es')['ElCard']
|
||||
ElCheckbox: typeof import('element-plus/es')['ElCheckbox']
|
||||
ElCheckboxGroup: typeof import('element-plus/es')['ElCheckboxGroup']
|
||||
ElCol: typeof import('element-plus/es')['ElCol']
|
||||
ElCollapse: typeof import('element-plus/es')['ElCollapse']
|
||||
ElCollapseItem: typeof import('element-plus/es')['ElCollapseItem']
|
||||
ElColorPicker: typeof import('element-plus/es')['ElColorPicker']
|
||||
ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider']
|
||||
ElContainer: typeof import('element-plus/es')['ElContainer']
|
||||
ElDatePicker: typeof import('element-plus/es')['ElDatePicker']
|
||||
ElDescriptions: typeof import('element-plus/es')['ElDescriptions']
|
||||
ElDescriptionsItem: typeof import('element-plus/es')['ElDescriptionsItem']
|
||||
ElDialog: typeof import('element-plus/es')['ElDialog']
|
||||
ElDrawer: typeof import('element-plus/es')['ElDrawer']
|
||||
ElDropdown: typeof import('element-plus/es')['ElDropdown']
|
||||
ElDropdownItem: typeof import('element-plus/es')['ElDropdownItem']
|
||||
ElDropdownMenu: typeof import('element-plus/es')['ElDropdownMenu']
|
||||
ElEmpty: typeof import('element-plus/es')['ElEmpty']
|
||||
ElForm: typeof import('element-plus/es')['ElForm']
|
||||
ElFormItem: typeof import('element-plus/es')['ElFormItem']
|
||||
ElHeader: typeof import('element-plus/es')['ElHeader']
|
||||
ElIcon: typeof import('element-plus/es')['ElIcon']
|
||||
ElImage: typeof import('element-plus/es')['ElImage']
|
||||
ElImageViewer: typeof import('element-plus/es')['ElImageViewer']
|
||||
ElInput: typeof import('element-plus/es')['ElInput']
|
||||
ElInputNumber: typeof import('element-plus/es')['ElInputNumber']
|
||||
ElLink: typeof import('element-plus/es')['ElLink']
|
||||
ElMain: typeof import('element-plus/es')['ElMain']
|
||||
ElMenu: typeof import('element-plus/es')['ElMenu']
|
||||
ElMenuItem: typeof import('element-plus/es')['ElMenuItem']
|
||||
ElOption: typeof import('element-plus/es')['ElOption']
|
||||
ElOptionGroup: typeof import('element-plus/es')['ElOptionGroup']
|
||||
ElPagination: typeof import('element-plus/es')['ElPagination']
|
||||
ElPopover: typeof import('element-plus/es')['ElPopover']
|
||||
ElRadio: typeof import('element-plus/es')['ElRadio']
|
||||
ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup']
|
||||
ElResult: typeof import('element-plus/es')['ElResult']
|
||||
ElRow: typeof import('element-plus/es')['ElRow']
|
||||
ElScrollbar: typeof import('element-plus/es')['ElScrollbar']
|
||||
ElSelect: typeof import('element-plus/es')['ElSelect']
|
||||
ElSlider: typeof import('element-plus/es')['ElSlider']
|
||||
ElStatistic: typeof import('element-plus/es')['ElStatistic']
|
||||
ElStep: typeof import('element-plus/es')['ElStep']
|
||||
ElSteps: typeof import('element-plus/es')['ElSteps']
|
||||
ElSubMenu: typeof import('element-plus/es')['ElSubMenu']
|
||||
ElSwitch: typeof import('element-plus/es')['ElSwitch']
|
||||
ElTable: typeof import('element-plus/es')['ElTable']
|
||||
ElTableColumn: typeof import('element-plus/es')['ElTableColumn']
|
||||
ElTabPane: typeof import('element-plus/es')['ElTabPane']
|
||||
ElTabs: typeof import('element-plus/es')['ElTabs']
|
||||
ElTag: typeof import('element-plus/es')['ElTag']
|
||||
ElTimeline: typeof import('element-plus/es')['ElTimeline']
|
||||
ElTimelineItem: typeof import('element-plus/es')['ElTimelineItem']
|
||||
ElTooltip: typeof import('element-plus/es')['ElTooltip']
|
||||
ElTree: typeof import('element-plus/es')['ElTree']
|
||||
ElTreeSelect: typeof import('element-plus/es')['ElTreeSelect']
|
||||
ElUpload: typeof import('element-plus/es')['ElUpload']
|
||||
HeatMap: typeof import('./src/components/heat-map/index.vue')['default']
|
||||
Icon: typeof import('./src/components/icon/index.vue')['default']
|
||||
PopoverInput: typeof import('./src/components/popover-input/index.vue')['default']
|
||||
RangeInput: typeof import('./src/components/range-input/index.vue')['default']
|
||||
RouterLink: typeof import('vue-router')['RouterLink']
|
||||
RouterView: typeof import('vue-router')['RouterView']
|
||||
SelectArea: typeof import('./src/components/select-area/index.vue')['default']
|
||||
SelectIcon: typeof import('./src/components/select-icon/index.vue')['default']
|
||||
TButton: typeof import('tdesign-vue-next')['Button']
|
||||
UploadAttachment: typeof import('./src/components/upload-attachment/index.vue')['default']
|
||||
UploadFile: typeof import('./src/components/upload-file/index.vue')['default']
|
||||
UploadImage: typeof import('./src/components/upload-image/index.vue')['default']
|
||||
UploadVideo: typeof import('./src/components/upload-video/index.vue')['default']
|
||||
Verify: typeof import('./src/components/verifition/Verify.vue')['default']
|
||||
VerifyPoints: typeof import('./src/components/verifition/Verify/VerifyPoints.vue')['default']
|
||||
VerifySlide: typeof import('./src/components/verifition/Verify/VerifySlide.vue')['default']
|
||||
VideoPlayer: typeof import('./src/components/video-player/index.vue')['default']
|
||||
}
|
||||
export interface ComponentCustomProperties {
|
||||
vLoading: typeof import('element-plus/es')['ElLoadingDirective']
|
||||
}
|
||||
}
|
13
admin/index.html
Normal file
|
@ -0,0 +1,13 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<link rel="icon" type="image" href="/niucloud.ico" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title></title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
<script type="module" src="/src/main.ts"></script>
|
||||
</body>
|
||||
</html>
|
7031
admin/package-lock.json
generated
Normal file
59
admin/package.json
Normal file
|
@ -0,0 +1,59 @@
|
|||
{
|
||||
"name": "admin",
|
||||
"private": true,
|
||||
"version": "1.0.0",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
"build": "vite build && node publish.cjs",
|
||||
"preview": "vite preview"
|
||||
},
|
||||
"dependencies": {
|
||||
"@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",
|
||||
"tdesign-vue-next": "^1.8.0",
|
||||
"vue": "3.2.45",
|
||||
"vue-i18n": "9.2.2",
|
||||
"vue-jsonp": "2.0.0",
|
||||
"vue-router": "4.1.6",
|
||||
"vue-web-terminal": "3.2.2",
|
||||
"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"
|
||||
}
|
||||
}
|
6
admin/postcss.config.cjs
Normal file
|
@ -0,0 +1,6 @@
|
|||
module.exports = {
|
||||
plugins: {
|
||||
tailwindcss: {},
|
||||
autoprefixer: {}
|
||||
}
|
||||
}
|
BIN
admin/public/niucloud.ico
Normal file
After Width: | Height: | Size: 1.7 KiB |
39
admin/publish.cjs
Normal file
|
@ -0,0 +1,39 @@
|
|||
const fs = require('fs')
|
||||
|
||||
const publish = () => {
|
||||
const src = './dist'
|
||||
const dest = '../niucloud/public/admin'
|
||||
|
||||
solve()
|
||||
|
||||
// 目标目录不存在停止复制
|
||||
try {
|
||||
const dir = fs.readdirSync(dest)
|
||||
} catch (e) {
|
||||
return
|
||||
}
|
||||
|
||||
// 删除目标目录下文件
|
||||
fs.rm(dest, { recursive: true }, err => {
|
||||
if(err) {
|
||||
console.log(err)
|
||||
return
|
||||
}
|
||||
|
||||
fs.cp(src, dest, { recursive: true }, (err) => {
|
||||
if (err) {
|
||||
console.error(err)
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
const solve = () => {
|
||||
const fn = './dist/index.html'
|
||||
const fc = fs.readFileSync(fn, 'utf-8')
|
||||
let text = new String(fc)
|
||||
text = text.replaceAll('./assets/', '/admin/assets/')
|
||||
fs.writeFileSync(fn, text, 'utf8')
|
||||
}
|
||||
|
||||
publish()
|
38
admin/src/App.vue
Normal file
|
@ -0,0 +1,38 @@
|
|||
<template>
|
||||
<el-config-provider :locale="locale">
|
||||
<router-view></router-view>
|
||||
</el-config-provider>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { computed, onMounted, watch } from 'vue'
|
||||
import zhCn from 'element-plus/dist/locale/zh-cn.mjs'
|
||||
import en from 'element-plus/dist/locale/en.mjs'
|
||||
import useSystemStore from '@/stores/modules/system'
|
||||
import useAppStore from '@/stores/modules/app'
|
||||
import { useDark, useToggle } from '@vueuse/core'
|
||||
import { setThemeColor } from '@/utils/common'
|
||||
import { useRoute } from 'vue-router'
|
||||
|
||||
const route = useRoute()
|
||||
|
||||
// 初始化设置语言
|
||||
const systemStore = useSystemStore()
|
||||
const locale = computed(() => (systemStore.lang === 'zh-cn' ? zhCn : en))
|
||||
|
||||
const toggleDark = useToggle(useDark())
|
||||
|
||||
watch(route, () => {
|
||||
useAppStore().$patch(state => {
|
||||
state.route = route
|
||||
})
|
||||
}, { immediate: true })
|
||||
|
||||
onMounted(() => {
|
||||
// 设置主题色
|
||||
toggleDark(systemStore.dark)
|
||||
setThemeColor(systemStore.theme, systemStore.dark ? 'dark' : 'light')
|
||||
})
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped></style>
|
7
admin/src/addon/carmi/api/hello_world.ts
Normal file
|
@ -0,0 +1,7 @@
|
|||
|
||||
import request from '@/utils/request'
|
||||
|
||||
/***************************************************** hello world ****************************************************/
|
||||
export function getHelloWorld() {
|
||||
return request.get(`carmi/hello_world`)
|
||||
}
|
1
admin/src/addon/carmi/lang/zh-cn/hello_world.index.json
Normal file
|
@ -0,0 +1 @@
|
|||
{}
|
17
admin/src/addon/carmi/views/home/index.vue
Normal file
|
@ -0,0 +1,17 @@
|
|||
<template>
|
||||
<t-button theme="default" variant="base">填充按钮</t-button>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { ref } from 'vue'
|
||||
import { getHelloWorld } from '@/addon/carmi/api/hello_world'
|
||||
|
||||
const hello_world_text = ref('');
|
||||
const getHelloWorldInfo = async () => {
|
||||
hello_world_text.value = await (await getHelloWorld()).data
|
||||
}
|
||||
getHelloWorldInfo()
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
</style>
|
|
@ -0,0 +1,40 @@
|
|||
<template>
|
||||
<!-- 内容 -->
|
||||
<div class="content-wrap" v-show="diyStore.editTab == 'content'">
|
||||
<div class="edit-attr-item-wrap">
|
||||
<h3 class="mb-[10px]">文本设置</h3>
|
||||
<el-form label-width="80px" class="px-[10px]">
|
||||
<el-form-item :label="t('blankHeight')">
|
||||
<el-slider v-model="diyStore.editComponent.height" show-input size="small" class="ml-[10px] horz-blank-slider"/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 样式 -->
|
||||
<div class="style-wrap" v-show="diyStore.editTab == 'style'">
|
||||
<!-- 组件样式 -->
|
||||
<slot name="style"></slot>
|
||||
</div>
|
||||
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import {t} from '@/lang'
|
||||
import useDiyStore from '@/stores/modules/diy'
|
||||
|
||||
const diyStore = useDiyStore()
|
||||
diyStore.editComponent.ignore = []; // 忽略公共属性
|
||||
|
||||
defineExpose({})
|
||||
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.horz-blank-slider {
|
||||
.el-slider__input {
|
||||
width: 100px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<style lang="scss" scoped></style>
|
12
admin/src/addon/hello_world/views/hello_world/index.vue
Normal file
|
@ -0,0 +1,12 @@
|
|||
<template>
|
||||
<div class="main-container">
|
||||
<el-card class="box-card !border-none" shadow="never">
|
||||
测试页面
|
||||
</el-card>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped></style>
|
12
admin/src/addon/hello_world/views/hello_world/site.vue
Normal file
|
@ -0,0 +1,12 @@
|
|||
<template>
|
||||
<div class="main-container">
|
||||
<el-card class="box-card !border-none" shadow="never">
|
||||
站点测试页面1111
|
||||
</el-card>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped></style>
|
18
admin/src/addon/test_plug/views/hello_world/index.vue
Normal file
|
@ -0,0 +1,18 @@
|
|||
<template>
|
||||
<span class="text-[20px]">{{hello_world_text}}</span>
|
||||
2222
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { ref } from 'vue'
|
||||
import { getHelloWorld } from '@/addon/test_plug/api/hello_world'
|
||||
|
||||
const hello_world_text = ref('');
|
||||
const getHelloWorldInfo = async () => {
|
||||
hello_world_text.value = await (await getHelloWorld()).data
|
||||
}
|
||||
getHelloWorldInfo()
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
</style>
|
92
admin/src/app/api/addon.ts
Normal file
|
@ -0,0 +1,92 @@
|
|||
import request from '@/utils/request'
|
||||
|
||||
/**
|
||||
* 本地下载的插件列表
|
||||
* @returns
|
||||
*/
|
||||
export function getAddonLocal(params: Record<string, any>) {
|
||||
return request.get('addon/local', params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 插件详情
|
||||
* @returns
|
||||
*/
|
||||
export function getAddonDetial(id: number) {
|
||||
return request.get(`addon/${id}`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 安装插件
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function installAddon(params: Record<string, any>) {
|
||||
return request.post(`addon/install/${params.addon}`, params)
|
||||
}
|
||||
|
||||
/**
|
||||
* 安装插件
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function cloudInstallAddon(params: Record<string, any>) {
|
||||
return request.post(`addon/cloudinstall/${params.addon}`, params, { timeout: 60 * 1000 })
|
||||
}
|
||||
|
||||
/**
|
||||
* 卸载插件
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function uninstallAddon(params: Record<string, any>) {
|
||||
return request.post(`addon/uninstall/${params.addon}`, params, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 插件安装前检测
|
||||
* @param addon
|
||||
* @returns
|
||||
*/
|
||||
export function preInstallCheck(addon: string) {
|
||||
return request.get(`addon/install/check/${addon}`, { timeout: 30 * 1000 })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取正在安装的插件
|
||||
* @returns
|
||||
*/
|
||||
export function getAddonInstalltask() {
|
||||
return request.get('addon/installtask')
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取插件云安装日志
|
||||
* @param addon
|
||||
* @returns
|
||||
*/
|
||||
export function getAddonCloudInstallLog(addon: string) {
|
||||
return request.get(`addon/cloudinstall/${addon}`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 插件卸载前检测
|
||||
* @param addon
|
||||
* @returns
|
||||
*/
|
||||
export function preUninstallCheck(addon: string) {
|
||||
return request.get(`addon/uninstall/check/${addon}`, { timeout: 30 * 1000 })
|
||||
}
|
||||
|
||||
/**
|
||||
* 取消插件安装
|
||||
* @param addon
|
||||
* @returns
|
||||
*/
|
||||
export function cancelInstall(addon: string) {
|
||||
return request.put(`addon/install/cancel/${addon}`, {}, { showErrorMessage: false })
|
||||
}
|
||||
|
||||
export function getInstalledAddonList() {
|
||||
return request.get('addon/list/install')
|
||||
}
|
26
admin/src/app/api/aliapp.ts
Normal file
|
@ -0,0 +1,26 @@
|
|||
import request from '@/utils/request'
|
||||
|
||||
/**
|
||||
* 获取支付宝小程序配置
|
||||
* @returns
|
||||
*/
|
||||
export function getAliappConfig() {
|
||||
return request.get('aliapp/config')
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑支付宝小程序配置
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function setAliappConfig(params: Record<string, any>) {
|
||||
return request.put('aliapp/config', params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取支付宝小程序静态资源
|
||||
* @returns
|
||||
*/
|
||||
export function getAliappStatic() {
|
||||
return request.get('aliapp/static')
|
||||
}
|
41
admin/src/app/api/auth.ts
Normal file
|
@ -0,0 +1,41 @@
|
|||
import request from '@/utils/request'
|
||||
|
||||
/**
|
||||
* 登录
|
||||
* @param params
|
||||
* @param app_type
|
||||
*/
|
||||
export function login(params: Record<string, any>, app_type: string) {
|
||||
return request.get(`login/${app_type}`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取登录用户权限
|
||||
* @returns
|
||||
*/
|
||||
export function getAuthMenus(params: Record<string, any>) {
|
||||
return request.get('auth/authmenu', {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取登录用户权限
|
||||
* @returns
|
||||
*/
|
||||
export function getSiteInfo() {
|
||||
return request.get('auth/site')
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取登录配置信息
|
||||
* @returns
|
||||
*/
|
||||
export function getLoginConfig() {
|
||||
return request.get('login/config')
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前版本信息
|
||||
*/
|
||||
export function getVersions() {
|
||||
return request.get(`sys/info`)
|
||||
}
|
38
admin/src/app/api/cloud.ts
Normal file
|
@ -0,0 +1,38 @@
|
|||
import request from '@/utils/request'
|
||||
|
||||
/**
|
||||
* 云编译
|
||||
* @param addon
|
||||
*/
|
||||
export function cloudBuild() {
|
||||
return request.post('niucloud/build')
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取云编译任务
|
||||
* @param addon
|
||||
*/
|
||||
export function getCloudBuildTask() {
|
||||
return request.get('niucloud/build')
|
||||
}
|
||||
|
||||
/**
|
||||
* 云编译前检测
|
||||
*/
|
||||
export function getCloudBuildLog() {
|
||||
return request.get('niucloud/build/log')
|
||||
}
|
||||
|
||||
/**
|
||||
* 清除
|
||||
*/
|
||||
export function clearCloudBuildTask() {
|
||||
return request.post('niucloud/build/clear')
|
||||
}
|
||||
|
||||
/**
|
||||
* 云编译前检测
|
||||
*/
|
||||
export function preBuildCheck() {
|
||||
return request.get('niucloud/build/check')
|
||||
}
|
81
admin/src/app/api/dict.ts
Normal file
|
@ -0,0 +1,81 @@
|
|||
import request from '@/utils/request'
|
||||
|
||||
/**
|
||||
* 获取数据字典列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getDictList(params: Record<string, any>) {
|
||||
return request.get(`dict/dict`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取数据字典详情
|
||||
* @param id 数据字典id
|
||||
* @returns
|
||||
*/
|
||||
export function getDictInfo(id: number) {
|
||||
return request.get(`dict/dict/${id}`);
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加数据字典
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function addDict(params: Record<string, any>) {
|
||||
return request.post('dict/dict', params, { showErrorMessage: true, showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑数据字典
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function addDictData(params: Record<string, any>) {
|
||||
return request.put(`dict/dict/${params.id}`, params, { showErrorMessage: true, showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑数据字典
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function editDict(params: Record<string, any>) {
|
||||
return request.put(`dict/dict/${params.id}`, params, { showErrorMessage: true, showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除数据字典
|
||||
* @param id
|
||||
* @returns
|
||||
*/
|
||||
export function deleteDict(id: number) {
|
||||
return request.delete(`dict/dict/${id}`, { showErrorMessage: true, showSuccessMessage: true })
|
||||
}
|
||||
/**
|
||||
* 编辑数据字典内容
|
||||
* @param id
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function setDictData(id:number,params: Record<string, any>) {
|
||||
return request.put(`dict/dictionary/${id}`, params, { showErrorMessage: true,showSuccessMessage: true })
|
||||
}
|
||||
/**
|
||||
* 获取数据字典列表全部
|
||||
* @returns
|
||||
*/
|
||||
export function getDictAll() {
|
||||
return request.get(`dict/all`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 数据字典关键词查询
|
||||
* @param type
|
||||
* @returns
|
||||
*/
|
||||
export function useDictionary(type: string) {
|
||||
return request.get(`dict/dictionary/type/${type}`)
|
||||
}
|
||||
|
161
admin/src/app/api/diy.ts
Normal file
|
@ -0,0 +1,161 @@
|
|||
import request from '@/utils/request'
|
||||
|
||||
/***************************************************** 自定义页面 ****************************************************/
|
||||
|
||||
/**
|
||||
* 获取自定义页面分页列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getDiyPageList(params: Record<string, any>) {
|
||||
return request.get(`diy/diy`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取自定义页面列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getDiyList(params: Record<string, any>) {
|
||||
return request.get(`diy/list`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取自定义页面详情
|
||||
* @param id 自定义页面id
|
||||
* @returns
|
||||
*/
|
||||
export function getDiyPageInfo(id: number) {
|
||||
return request.get(`diy/diy/${id}`);
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加自定义页面
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function addDiyPage(params: Record<string, any>) {
|
||||
return request.post('diy/diy', params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑自定义页面
|
||||
* @param params
|
||||
*/
|
||||
export function editDiyPage(params: Record<string, any>) {
|
||||
return request.put(`diy/diy/${params.id}`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 设为使用
|
||||
* @param params
|
||||
*/
|
||||
export function setUseDiyPage(params: Record<string, any>) {
|
||||
return request.put(`diy/use`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改自定义页面分享内容
|
||||
* @param params
|
||||
*/
|
||||
export function editDiyPageShare(params: Record<string, any>) {
|
||||
return request.put(`diy/diy/share`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除自定义页面
|
||||
* @param id
|
||||
* @returns
|
||||
*/
|
||||
export function deleteDiyPage(id: number) {
|
||||
return request.delete(`diy/diy/${id}`, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取自定义页面初始化数据
|
||||
*/
|
||||
export function initPage(params: Record<string, any>) {
|
||||
return request.get(`diy/init`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取自定义链接列表
|
||||
*/
|
||||
export function getLink(params: Record<string, any>) {
|
||||
return request.get(`diy/link`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取底部导航数据
|
||||
*/
|
||||
export function getDiyBottom(params: Record<string, any>) {
|
||||
return request.get(`diy/bottom`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 配置底部导航数据
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function setDiyBottom(params: Record<string, any>) {
|
||||
return request.post('diy/bottom', params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取页面模板
|
||||
*/
|
||||
export function getDiyTemplate(params: Record<string, any>) {
|
||||
return request.get(`diy/template`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取自定义路由列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getDiyRouteList(params: Record<string, any>) {
|
||||
return request.get(`diy/route`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取自定义路由信息
|
||||
* @param params
|
||||
*/
|
||||
export function getDiyRouteInfo(params: Record<string, any>) {
|
||||
return request.get(`diy/route/info`, {params});
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改路由页面分享内容
|
||||
* @param params
|
||||
*/
|
||||
export function editDiyRouteShare(params: Record<string, any>) {
|
||||
return request.put(`diy/route/share`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取自定义页面列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getDecoratePage(params: Record<string, any>) {
|
||||
return request.get(`diy/decorate`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 切换模板
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function changeTemplate(params: Record<string, any>) {
|
||||
return request.put(`diy/change`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取预览数据
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getPreviewData(params: Record<string, any>) {
|
||||
return request.put(`diy/preview`, params, {showSuccessMessage: false})
|
||||
}
|
18
admin/src/app/api/h5.ts
Normal file
|
@ -0,0 +1,18 @@
|
|||
import request from '@/utils/request'
|
||||
|
||||
/**
|
||||
* 获取h5配置
|
||||
* @returns
|
||||
*/
|
||||
export function getH5Config() {
|
||||
return request.get('channel/h5/config')
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑h5配置
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function setH5Config(params: Record<string, any>) {
|
||||
return request.put('channel/h5/config', params, {showSuccessMessage: true})
|
||||
}
|
5
admin/src/app/api/home.ts
Normal file
|
@ -0,0 +1,5 @@
|
|||
import request from '@/utils/request'
|
||||
|
||||
export function getHomeSite(params: Record<string, any>) {
|
||||
return request.get(`home/site`, { params })
|
||||
}
|
354
admin/src/app/api/member.ts
Normal file
|
@ -0,0 +1,354 @@
|
|||
import request from '@/utils/request'
|
||||
|
||||
|
||||
/***************************************************** 会员管理 ****************************************************/
|
||||
|
||||
/**
|
||||
* 获取会员列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getMemberList(params: Record<string, any>) {
|
||||
return request.get(`member/member`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取会员详情
|
||||
* @param id 会员id
|
||||
* @returns
|
||||
*/
|
||||
export function getMemberInfo(id: number) {
|
||||
return request.get(`member/member/${id}`);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取会员编码
|
||||
* @returns
|
||||
*/
|
||||
export function getMemberNo() {
|
||||
return request.get(`member/memberno`);
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加会员
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function addMember(params: Record<string, any>) {
|
||||
return request.post(`member/member`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 会员注册方式
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getRegisterType(params: Record<string, any>) {
|
||||
return request.get(`member/registertype`, params)
|
||||
}
|
||||
|
||||
/**
|
||||
* 会员注册渠道
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getRegisterChannelType(params: Record<string, any>) {
|
||||
return request.get(`member/register/channel`, params)
|
||||
}
|
||||
|
||||
/**
|
||||
* 会员删除
|
||||
* @param member_id
|
||||
*/
|
||||
export function deleteMember(member_id: number) {
|
||||
return request.delete(`member/member/${member_id}`, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
|
||||
/***************************************************** 会员标签 ****************************************************/
|
||||
|
||||
/**
|
||||
* 获取会员标签列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getMemberLabelList(params: Record<string, any>) {
|
||||
return request.get(`member/label`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取会员标签详情
|
||||
* @param label_id 会员标签label_id
|
||||
* @returns
|
||||
*/
|
||||
export function getMemberLabelInfo(label_id: number) {
|
||||
return request.get(`member/label/${label_id}`);
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加会员标签
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function addMemberLabel(params: Record<string, any>) {
|
||||
return request.post('member/label', params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑会员标签
|
||||
* @param params
|
||||
*/
|
||||
export function updateMemberLabel(params: Record<string, any>) {
|
||||
return request.put(`member/label/${params.label_id}`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除会员标签
|
||||
* @param label_id
|
||||
* @returns
|
||||
*/
|
||||
export function deleteMemberLabel(label_id: number) {
|
||||
return request.delete(`member/label/${label_id}`, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取全部会员标签
|
||||
*/
|
||||
export function getMemberLabelAll() {
|
||||
return request.get(`member/label/all`);
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑会员详情
|
||||
* @param params
|
||||
*/
|
||||
export function editMemberDetail(params: Record<string, any>) {
|
||||
return request.put(`member/member/modify/${params.member_id}/${params.field}`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/***************************************************** 会员零钱 ****************************************************/
|
||||
|
||||
|
||||
/***************************************************** 会员账户 ****************************************************/
|
||||
|
||||
/**
|
||||
* 账户变动方式
|
||||
* @param change_type
|
||||
*/
|
||||
export function getChangeTypeList(change_type: string) {
|
||||
return request.get(`member/account/change_type/${change_type}`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 会员积分流水
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getPointList(params: Record<string, any>) {
|
||||
return request.get(`member/account/point`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 会员余额流水
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getBalanceList(params: Record<string, any>) {
|
||||
return request.get(`member/account/balance`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取会员可提现余额列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getMoneyList(params: Record<string, any>) {
|
||||
return request.get(`member/account/money`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取会员佣金列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getCommissionList(params: Record<string, any>) {
|
||||
return request.get(`member/account/commission`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 会员积分调整
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function adjustPoint(params: Record<string, any>) {
|
||||
return request.post(`member/account/point`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 会员余额调整
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function adjustBalance(params: Record<string, any>) {
|
||||
return request.post(`member/account/balance`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/***************************************************** 会员相关设置 ****************************************************/
|
||||
|
||||
/**
|
||||
* 获取登录设置
|
||||
*/
|
||||
export function getLoginConfig() {
|
||||
return request.get(`member/config/login`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 注册登录设置
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function setLoginConfig(params: Record<string, any>) {
|
||||
return request.post(`member/config/login`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取会员设置
|
||||
*/
|
||||
export function getMemberConfig() {
|
||||
return request.get(`member/config/member`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 会员设置
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function setMemberConfig(params: Record<string, any>) {
|
||||
return request.post(`member/config/member`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取会员转账方式
|
||||
*/
|
||||
export function getTransfertype() {
|
||||
return request.get(`member/cash_out/transfertype`)
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 佣金统计
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getCommissionSum(params: Record<string, any>) {
|
||||
return request.get(`member/account/sum_commission`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 积分统计
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getPointSum(params: Record<string, any>) {
|
||||
return request.get(`member/account/sum_point`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 余额统计
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getBalanceSum(params: Record<string, any>) {
|
||||
return request.get(`member/account/sum_balance`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 余额类型
|
||||
*/
|
||||
export function getBalanceStatus() {
|
||||
return request.get(`member/account/type`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取余额变动类型
|
||||
*/
|
||||
export function getAccountType(params: Record<string, any>) {
|
||||
return request.get(`member/account/change_type/${params.account_type}`)
|
||||
}
|
||||
|
||||
|
||||
/***************************************************** 会员提现 ****************************************************/
|
||||
|
||||
/**
|
||||
* 获取提现设置
|
||||
*/
|
||||
export function getCashOutConfig() {
|
||||
return request.get(`member/config/cash_out`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置提现设置
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function setCashOutConfig(params: Record<string, any>) {
|
||||
return request.post(`member/config/cash_out`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取会员提现列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getCashOutList(params: Record<string, any>) {
|
||||
return request.get(`member/cash_out`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 会员提现详情
|
||||
* @param id
|
||||
*/
|
||||
export function getCashOutDetail(id: number) {
|
||||
return request.get(`member/cash_out/${id}`, {})
|
||||
}
|
||||
|
||||
/**
|
||||
* 会员提现审核
|
||||
* @param params
|
||||
*/
|
||||
export function memberAudit(params: Record<string, any>) {
|
||||
return request.put(`member/cash_out/audit/${params.id}/${params.action}`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 会员提现转账
|
||||
* @param params
|
||||
*/
|
||||
export function memberTransfer(params: Record<string, any>) {
|
||||
return request.put(`member/cash_out/transfer/${params.id}`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 会员状态变更
|
||||
* @param params
|
||||
*/
|
||||
export function editMemberStatus(params: Record<string, any>) {
|
||||
return request.put(`member/setstatus/${params.status}`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 会员提现状态
|
||||
*/
|
||||
export function getCashOutStatusList() {
|
||||
return request.get(`member/cash_out/status`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 提现统计
|
||||
* @returns
|
||||
*/
|
||||
export function getCashOutStat() {
|
||||
return request.get(`member/cash_out/stat`)
|
||||
}
|
||||
|
67
admin/src/app/api/module.ts
Normal file
|
@ -0,0 +1,67 @@
|
|||
import request from '@/utils/request'
|
||||
|
||||
/**
|
||||
* 获取授权信息
|
||||
*/
|
||||
export function getAuthinfo() {
|
||||
return request.get('niucloud/authinfo', { showErrorMessage: false })
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置 授权配置
|
||||
*/
|
||||
export function setAuthinfo(params: Record<string, any>) {
|
||||
return request.post('niucloud/authinfo', params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取 授权配置
|
||||
*/
|
||||
export function getAdminAuthinfo() {
|
||||
return request.get('niucloud/admin/authinfo')
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 获取授权插件列表
|
||||
* @returns
|
||||
*/
|
||||
export function getModule() {
|
||||
return request.get('niucloud/module')
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取插件版本
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getModuleVersion() {
|
||||
return request.get(`niucloud/module`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 下载版本
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
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`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取框架更新记录
|
||||
* @returns
|
||||
*/
|
||||
export function getFrameworkVersionList() {
|
||||
return request.get(`niucloud/framework/version/list`)
|
||||
}
|
81
admin/src/app/api/notice.ts
Normal file
|
@ -0,0 +1,81 @@
|
|||
import request from '@/utils/request'
|
||||
|
||||
/***************************************************** 消息管理 ****************************************************/
|
||||
|
||||
/**
|
||||
* 消息列表
|
||||
* @returns
|
||||
*/
|
||||
export function getNoticeList() {
|
||||
return request.get('notice/notice')
|
||||
}
|
||||
|
||||
/**
|
||||
* 消息详情
|
||||
* @param key
|
||||
* @returns
|
||||
*/
|
||||
export function getNoticeInfo(key: string) {
|
||||
return request.get(`notice/notice/${key}`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 消息发送记录
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getNoticeLog(params: any) {
|
||||
return request.get(`notice/log`, {params})
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 消息启动与关闭
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function editNoticeStatus(params: Record<string, any>) {
|
||||
return request.post(`notice/notice/editstatus`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 消息修改
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function editNotice(params: Record<string, any>) {
|
||||
return request.post(`notice/notice/edit`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 短信配置列表
|
||||
* @returns
|
||||
*/
|
||||
export function getSmsList() {
|
||||
return request.get('notice/notice/sms')
|
||||
}
|
||||
|
||||
/**
|
||||
* 短信配置详情
|
||||
* @param sms_type
|
||||
* @returns
|
||||
*/
|
||||
export function getSmsInfo(sms_type: string) {
|
||||
return request.get(`notice/notice/sms/${sms_type}`,)
|
||||
}
|
||||
|
||||
/**
|
||||
* 短信配置修改
|
||||
* @param params
|
||||
*/
|
||||
export function editSms(params: Record<string, any>) {
|
||||
return request.put(`notice/notice/sms/${params.sms_type}`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 短信发送记录
|
||||
* @param params
|
||||
*/
|
||||
export function getSmsLog(params: Record<string, any>) {
|
||||
return request.get(`notice/sms/log`, params)
|
||||
}
|
70
admin/src/app/api/order.ts
Normal file
|
@ -0,0 +1,70 @@
|
|||
import request from '@/utils/request'
|
||||
|
||||
/***************************************************** 充值订单 ****************************************************/
|
||||
|
||||
/**
|
||||
* 获取充值订单列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getRechargeOrderList(params: Record<string, any>) {
|
||||
return request.get(`order/recharge`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取充值订单统计
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getRechargeStat(params: Record<string, any>) {
|
||||
return request.get(`order/recharge/stat`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取充值订单详情
|
||||
* @param order_id
|
||||
* @returns
|
||||
*/
|
||||
export function getRechargeOrderInfo(order_id: number) {
|
||||
return request.get(`order/recharge/${order_id}`);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取充值订单状态列表
|
||||
* @returns
|
||||
*/
|
||||
export function getRechargeOrderStatusList() {
|
||||
return request.get(`order/recharge/status`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取退款记录
|
||||
* @returns
|
||||
*/
|
||||
export function getRechargeRefund(params: Record<string, any>) {
|
||||
return request.get(`order/recharge/refund`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取退款状态
|
||||
* @returns
|
||||
*/
|
||||
export function getRechargeRefundStatus() {
|
||||
return request.get(`order/recharge/refund/status`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 充值订单发起退款
|
||||
* @returns
|
||||
*/
|
||||
export function rechargeRefund(id: number) {
|
||||
return request.put(`order/recharge/refund/${id}`, {}, {showSuccessMessage: true});
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取退款统计
|
||||
* @returns
|
||||
*/
|
||||
export function getRechargeRefundStat() {
|
||||
return request.get(`order/recharge/refund/stat`);
|
||||
}
|
71
admin/src/app/api/pay.ts
Normal file
|
@ -0,0 +1,71 @@
|
|||
import request from '@/utils/request'
|
||||
|
||||
/***************************************************** 账单列表 **************************************************/
|
||||
|
||||
/**
|
||||
* 获取账单列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getAccountList(params: Record<string, any>) {
|
||||
return request.get(`pay/account`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取账单详情
|
||||
* @param id
|
||||
*/
|
||||
export function getAccountInfo(id: number) {
|
||||
return request.get(`pay/account/${id}`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取账单统计
|
||||
* @returns
|
||||
*/
|
||||
export function getAccountStat() {
|
||||
return request.get(`pay/account/stat`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取账单类型
|
||||
* @returns
|
||||
*/
|
||||
export function getAccountType() {
|
||||
return request.get(`pay/account/type`)
|
||||
}
|
||||
|
||||
/***************************************************** 退款信息 **************************************************/
|
||||
|
||||
/**
|
||||
* 退款列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getPayRefundPages(params: Record<string, any>) {
|
||||
return request.get(`pay/refund`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取退款详情
|
||||
* @param id
|
||||
*/
|
||||
export function getPayRefundInfo(refund_no: string) {
|
||||
return request.get(`pay/refund/${refund_no}`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 退款方式
|
||||
* @param id
|
||||
*/
|
||||
export function getRefundType() {
|
||||
return request.get(`pay/refund/type`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 退款转账
|
||||
* @param id
|
||||
*/
|
||||
export function getRefundTransfer(params: Record<string, any>) {
|
||||
return request.post(`pay/refund/transfer`, params, {showSuccessMessage: true})
|
||||
}
|
18
admin/src/app/api/personal.ts
Normal file
|
@ -0,0 +1,18 @@
|
|||
import request from '@/utils/request'
|
||||
|
||||
/**
|
||||
* 获取支付设置
|
||||
* @returns
|
||||
*/
|
||||
export function getUserInfo() {
|
||||
return request.get(`auth/get`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 配置支付
|
||||
* @returns
|
||||
*/
|
||||
export function setUserInfo(params: Record<string, any>) {
|
||||
return request.put(`auth/edit`, params, {showSuccessMessage: true});
|
||||
}
|
||||
|
252
admin/src/app/api/site.ts
Normal file
|
@ -0,0 +1,252 @@
|
|||
import request from '@/utils/request'
|
||||
|
||||
//包含站点管理,站点用户管理,站点操作日志
|
||||
|
||||
/***************************************************** 站点管理 ****************************************************/
|
||||
|
||||
/**
|
||||
* 获取站点列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getSiteList(params: Record<string, any>) {
|
||||
return request.get(`site/site`, { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取站点详情
|
||||
* @param site_id
|
||||
*/
|
||||
export function getSiteInfo(site_id: number) {
|
||||
return request.get(`site/site/${site_id}`);
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加站点
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function addSite(params: Record<string, any>) {
|
||||
return request.post('site/site', params, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新站点
|
||||
* @param params
|
||||
*/
|
||||
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
|
||||
*/
|
||||
export function closeSite(params: Record<string, any>) {
|
||||
return request.put(`site/closesite/${params.site_id}`, params, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 打开站点
|
||||
* @param params
|
||||
*/
|
||||
export function openSite(params: Record<string, any>) {
|
||||
return request.put(`site/opensite/${params.site_id}`, params, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取全部站点状态
|
||||
*/
|
||||
export function getStatusList() {
|
||||
return request.get(`site/statuslist`)
|
||||
}
|
||||
|
||||
|
||||
/***************************************************** 站点分组管理 ****************************************************/
|
||||
|
||||
/**
|
||||
* 获取站点分组列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getSiteGroupList(params: Record<string, any>) {
|
||||
return request.get(`site/group`, { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取站点分组详情
|
||||
* @param site_id
|
||||
*/
|
||||
export function getSiteGroupInfo(groupId: number) {
|
||||
return request.get(`site/group/${groupId}`);
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加站点分组
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function addSiteGroup(params: Record<string, any>) {
|
||||
return request.post('site/group', params, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新站点分组
|
||||
* @param params
|
||||
*/
|
||||
export function editSiteGroup(params: Record<string, any>) {
|
||||
return request.put(`site/group/${params.group_id}`, params, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除站点分组
|
||||
* @param group_id
|
||||
*/
|
||||
export function deleteSiteGroup(group_id: number) {
|
||||
return request.delete(`site/group/${group_id}`, { showSuccessMessage: true });
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取全部站点分组
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getSiteGroupAll(params: Record<string, any> = {}) {
|
||||
return request.get(`site/group/all`)
|
||||
}
|
||||
|
||||
/***************************************************** 当前站点用户 *************************************************/
|
||||
|
||||
/**
|
||||
* 获取站点用户列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getUserList(params: Record<string, any>) {
|
||||
return request.get(`site/user`, { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取站点用户详情
|
||||
* @param uid
|
||||
*/
|
||||
export function getUserInfo(uid: number) {
|
||||
return request.get(`site/user/${uid}`);
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加用户
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function addUser(params: Record<string, any>) {
|
||||
return request.post('site/user', params, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑用户
|
||||
* @param params
|
||||
*/
|
||||
export function editUser(params: Record<string, any>) {
|
||||
return request.put(`site/user/${params.uid}`, params, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除用户
|
||||
* @param uid
|
||||
* @returns
|
||||
*/
|
||||
export function deleteUser(uid: number) {
|
||||
return request.delete(`site/user/${uid}`, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 锁定用户
|
||||
* @param uid
|
||||
* @returns
|
||||
*/
|
||||
export function lockUser(uid: number) {
|
||||
return request.put(`site/user/lock/${uid}`)
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 解锁用户
|
||||
* @param uid
|
||||
* @returns
|
||||
*/
|
||||
export function unlockUser(uid: number) {
|
||||
return request.put(`site/user/unlock/${uid}`)
|
||||
}
|
||||
|
||||
|
||||
/***************************************************** 操作日志 **************************************************/
|
||||
|
||||
/**
|
||||
* 获取操作日志列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getLogList(params: Record<string, any>) {
|
||||
return request.get(`site/log`, { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取操作日志详情
|
||||
* @param id
|
||||
*/
|
||||
export function getLogInfo(id: number) {
|
||||
return request.get(`site/log/${id}`)
|
||||
}
|
||||
|
||||
/***************************************************** 账单列表 **************************************************/
|
||||
|
||||
/**
|
||||
* 获取账单列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getAccountList(params: Record<string, any>) {
|
||||
return request.get(`site/account`, { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取账单详情
|
||||
* @param id
|
||||
*/
|
||||
export function getAccountInfo(id: number) {
|
||||
return request.get(`site/account/${id}`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取账单统计
|
||||
* @returns
|
||||
*/
|
||||
export function getAccountStat() {
|
||||
return request.get(`site/account/stat`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取账单类型
|
||||
* @returns
|
||||
*/
|
||||
export function getAccountType() {
|
||||
return request.get(`site/account/type`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取站点应用
|
||||
* @returns
|
||||
*/
|
||||
export function getSiteAddons() {
|
||||
return request.get('site/addons')
|
||||
}
|
17
admin/src/app/api/stat.ts
Normal file
|
@ -0,0 +1,17 @@
|
|||
import request from '@/utils/request'
|
||||
|
||||
/***************************************************** 统计信息 **************************************************/
|
||||
/**
|
||||
* 获取统计信息
|
||||
*/
|
||||
export function getStatInfo() {
|
||||
return request.get(`stat/index`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取站点统计信息
|
||||
*/
|
||||
export function getSiteStatInfo() {
|
||||
return request.get(`stat/siteindex`)
|
||||
}
|
||||
|
694
admin/src/app/api/sys.ts
Normal file
|
@ -0,0 +1,694 @@
|
|||
import request from '@/utils/request'
|
||||
|
||||
/***************************************************** 系统整体信息 *************************************************/
|
||||
|
||||
/**
|
||||
* 系统信息
|
||||
* @returns
|
||||
*/
|
||||
export function getInfo() {
|
||||
return request.get('sys/role')
|
||||
}
|
||||
|
||||
/**
|
||||
* 系统信息
|
||||
* @returns
|
||||
*/
|
||||
export function getUrl() {
|
||||
return request.get('sys/url')
|
||||
}
|
||||
|
||||
/***************************************************** 用户组 ****************************************************/
|
||||
|
||||
/**
|
||||
* 用户组列表
|
||||
* @returns
|
||||
*/
|
||||
export function getRoleList(params: Record<string, any>) {
|
||||
return request.get('sys/role', { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 用户组详情
|
||||
* @param roleId
|
||||
*/
|
||||
export function getRoleInfo(roleId: number) {
|
||||
return request.get(`sys/role/${roleId}`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加用户组
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function addRole(params: Record<string, any>) {
|
||||
return request.post(`sys/role`, params, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑用户组
|
||||
* @param params
|
||||
*/
|
||||
export function editRole(params: Record<string, any>) {
|
||||
return request.put(`sys/role/${params.role_id}`, params, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除用户组
|
||||
* @param roleId
|
||||
*/
|
||||
export function deleteRole(roleId: number) {
|
||||
return request.delete(`sys/role/${roleId}`, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 全部分组
|
||||
* @returns
|
||||
*/
|
||||
export function allRole() {
|
||||
return request.get('sys/role/all')
|
||||
}
|
||||
|
||||
/***************************************************** 全部菜单 ****************************************************/
|
||||
|
||||
/**
|
||||
* 获取全部菜单
|
||||
* @returns
|
||||
*/
|
||||
export function getMenus(type: string) {
|
||||
return request.get(`sys/menu/${type}`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取菜单信息
|
||||
* @param menu_key
|
||||
*/
|
||||
export function getMenuInfo(app_type: string, menu_key: string) {
|
||||
return request.get(`sys/menu/${app_type}/info/${menu_key}`);
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加菜单
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function addMenu(params: Record<string, any>) {
|
||||
return request.post('sys/menu', params, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新菜单
|
||||
* @param params
|
||||
*/
|
||||
export function editMenu(params: Record<string, any>) {
|
||||
return request.put(`sys/menu/${params.app_type}/${params.menu_key}`, params, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除菜单
|
||||
* @param menu_key
|
||||
*/
|
||||
export function deleteMenu(app_type: string, menu_key: string) {
|
||||
return request.delete(`sys/menu/${app_type}/${menu_key}`, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取系统菜单
|
||||
*
|
||||
*/
|
||||
export function getSystemMenu() {
|
||||
return request.get(`sys/menu/system_menu`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取应用菜单
|
||||
*
|
||||
*/
|
||||
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}`)
|
||||
}
|
||||
|
||||
|
||||
/***************************************************** 站点菜单 ****************************************************/
|
||||
|
||||
/**
|
||||
* 获取站点菜单
|
||||
* @returns
|
||||
*/
|
||||
export function getSiteMenus() {
|
||||
return request.get(`site/site/menu`)
|
||||
}
|
||||
|
||||
|
||||
/***************************************************** 设置 ****************************************************/
|
||||
|
||||
/**
|
||||
* 获取网站设置
|
||||
* @returns
|
||||
*/
|
||||
export function getWebsite() {
|
||||
return request.get('sys/config/website')
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取网站设置
|
||||
* @returns
|
||||
*/
|
||||
export function getWebConfig() {
|
||||
return request.get('sys/web/website')
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新网站设置
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function setWebsite(params: Record<string, any>) {
|
||||
return request.put(`sys/config/website`, params, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取版权设置
|
||||
* @returns
|
||||
*/
|
||||
export function getCopyright() {
|
||||
return request.get('sys/config/copyright')
|
||||
}
|
||||
|
||||
/**
|
||||
* 获服务信息
|
||||
* @returns
|
||||
*/
|
||||
export function getService() {
|
||||
return request.get('sys/config/service')
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新版权设置
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function setCopyright(params: Record<string, any>) {
|
||||
return request.put(`sys/config/copyright`, params, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取附件组列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getAttachmentCategoryList(params: Record<string, any>) {
|
||||
return request.get(`sys/attachment/category`, { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加分类
|
||||
* @param params
|
||||
*/
|
||||
export function addAttachmentCategory(params: Record<string, any>) {
|
||||
return request.post(`sys/attachment/category`, params, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑分类
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function editAttachmentCategory(params: Record<string, any>) {
|
||||
return request.put(`sys/attachment/category/${params.id}`, params, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除分类
|
||||
* @param id
|
||||
* @returns
|
||||
*/
|
||||
export function deleteAttachmentCategory(id: number) {
|
||||
return request.delete(`sys/attachment/category/${id}`, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取附件列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getAttachmentList(params: Record<string, any>) {
|
||||
return request.get(`sys/attachment`, { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除附件
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function deleteAttachment(params: Record<string, any>) {
|
||||
return request.delete(`sys/attachment/del`, { data: params, showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 移动附件
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function moveAttachment(params: Record<string, any>) {
|
||||
return request.put(`sys/attachment/batchmove`, params)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取menu菜单
|
||||
*/
|
||||
export function getAuthMenu() {
|
||||
return request.get(`auth/site/showmenu`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取快捷菜单
|
||||
*/
|
||||
export function getShortcutMenu() {
|
||||
return request.get(`sys/config/shortcut_menu`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加快捷菜单
|
||||
*/
|
||||
export function setShortcutMenu(params: Record<string, any>) {
|
||||
return request.put(`sys/config/shortcut_menu`, params, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取图标库分类列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getIconCategoryList(params: Record<string, any>) {
|
||||
return request.get(`sys/attachment/icon_category`, { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取图标库列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getIconList(params: Record<string, any>) {
|
||||
return request.get(`sys/attachment/icon`, { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取evn
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getEnv() {
|
||||
return request.get(`sys/env`)
|
||||
}
|
||||
/***************************************************** 地址管理 ****************************************************/
|
||||
|
||||
/**
|
||||
* 获取下级地址列表
|
||||
* @param pid
|
||||
*/
|
||||
export function getAreaListByPid(pid: number = 0) {
|
||||
return request.get(`sys/area/list_by_pid/${pid}`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取地址树列表
|
||||
* @param level
|
||||
*/
|
||||
export function getAreatree(level: number = 1) {
|
||||
return request.get(`sys/area/tree/${level}`)
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取地址信息
|
||||
*/
|
||||
export function getAddressInfo(params: any) {
|
||||
return request.get(`sys/area/get_info`, { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取地址信息
|
||||
*/
|
||||
export function getContraryAddress(params: any) {
|
||||
return request.get(`sys/area/contrary`, { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取地址
|
||||
* @param code
|
||||
*/
|
||||
export function getAreaByCode(code: number | string) {
|
||||
return request.get(`sys/area/code/${code}`)
|
||||
}
|
||||
/***************************************************** 存储设置 ****************************************************/
|
||||
|
||||
/**
|
||||
* 获取存储配置列表
|
||||
*/
|
||||
export function getStorageList() {
|
||||
return request.get(`sys/storage`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取存储详情
|
||||
* @param type
|
||||
*/
|
||||
export function getStorageInfo(type: string) {
|
||||
return request.get(`sys/storage/${type}`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改存储
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function editStorage(params: Record<string, any>) {
|
||||
return request.put(`sys/storage/${params.storage_type}`, params, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/***************************************************** 支付设置 ****************************************************/
|
||||
|
||||
/**
|
||||
* 获取支付设置
|
||||
* @returns
|
||||
*/
|
||||
export function getPayConfig(type: string) {
|
||||
return request.get(`pay/config/${type}`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 配置支付
|
||||
* @returns
|
||||
*/
|
||||
export function setPayConfig(params: Record<string, any>) {
|
||||
return request.put(`pay/config/${params.type}`, params, { showSuccessMessage: true });
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取支付列表
|
||||
* @returns
|
||||
*/
|
||||
export function getPayList() {
|
||||
return request.get(`pay/lists`)
|
||||
}
|
||||
|
||||
/***************************************************** 打款设置 ****************************************************/
|
||||
/**
|
||||
* 获取打款设置配置
|
||||
* @param channel
|
||||
*/
|
||||
export function getTransferInfo(channel) {
|
||||
return request.get(`pay/channel/lists/${channel}`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置打款配置
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function setTransferInfo(params: Record<string, any>) {
|
||||
return request.post(`pay/channel/set/transfer`, params)
|
||||
}
|
||||
|
||||
/***************************************************** 定时任务 ****************************************************/
|
||||
|
||||
/**
|
||||
* 获取任务列表
|
||||
* @returns
|
||||
*/
|
||||
export function getCronList(params: any) {
|
||||
return request.get(`sys/schedule/list`, { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 任务详情
|
||||
* @returns
|
||||
*/
|
||||
export function getCronInfo(id: string) {
|
||||
return request.get(`sys/cron/${id}`);
|
||||
}
|
||||
|
||||
/**
|
||||
* 任务模版
|
||||
* @returns
|
||||
*/
|
||||
export function getCronTemplate() {
|
||||
return request.get(`sys/schedule/template`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 任务间隔
|
||||
* @returns
|
||||
*/
|
||||
export function getCronDateType() {
|
||||
return request.get(`sys/schedule/datetype`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取星期
|
||||
* @returns
|
||||
*/
|
||||
export function getWeek() {
|
||||
return request.get(`sys/date/week`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加计划任务
|
||||
* @returns
|
||||
*/
|
||||
export function addCron(params: Record<string, any>) {
|
||||
return request.post(`sys/schedule`, params, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑任务
|
||||
* @returns
|
||||
*/
|
||||
export function editCron(params: Record<string, any>) {
|
||||
return request.put(`sys/schedule/${params.id}`, params, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除任务
|
||||
* @returns
|
||||
*/
|
||||
export function deleteCron(id: string) {
|
||||
return request.delete(`sys/schedule/${id}`, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/***************************************************** 协议管理 ****************************************************/
|
||||
|
||||
/**
|
||||
* 获取协议列表
|
||||
* @returns
|
||||
*/
|
||||
export function getAgreementList() {
|
||||
return request.get(`sys/agreement`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 协议详情
|
||||
* @returns
|
||||
*/
|
||||
export function getAgreementInfo(key: string) {
|
||||
return request.get(`sys/agreement/${key}`);
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新协议
|
||||
* @returns
|
||||
*/
|
||||
export function editAgreement(params: Record<string, any>) {
|
||||
return request.put(`sys/agreement/${params.key}`, params, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 协议详情
|
||||
* @returns
|
||||
*/
|
||||
export function getChannelType() {
|
||||
return request.get(`sys/channel`);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取渠道域名
|
||||
* @returns
|
||||
*/
|
||||
export function getSceneDomain() {
|
||||
return request.get(`sys/scene_domain`);
|
||||
}
|
||||
|
||||
/***************************************************** 登录注册配置 ****************************************************/
|
||||
|
||||
/**
|
||||
* 管理端登录注册配置
|
||||
*/
|
||||
export function getConfigLogin() {
|
||||
return request.get(`sys/config/login`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置管理端登录注册配置
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function setConfigLogin(params: Record<string, any>) {
|
||||
return request.put(`sys/config/login`, params, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取支付设置
|
||||
*/
|
||||
export function getPayConfigList() {
|
||||
return request.get(`pay/channel/lists`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置支付配置
|
||||
*/
|
||||
export function setPatConfig(params: Record<string, any>) {
|
||||
return request.post(`pay/channel/set/all`, params, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
|
||||
/***************************************************** 刷新菜单 ****************************************************/
|
||||
/**
|
||||
* 刷新菜单
|
||||
*/
|
||||
export function menuRefresh(params: Record<string, any>) {
|
||||
return request.post(`sys/menu/refresh`, {}, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 清理数据字段缓存
|
||||
*/
|
||||
export function clearSchemaCache(params: Record<string, any>) {
|
||||
return request.post(`sys/schema/clear`, {}, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
|
||||
/***************************************************** 获取应用 ****************************************************/
|
||||
/**
|
||||
* 获取应用
|
||||
*/
|
||||
export function getAppMange() {
|
||||
return request.get(`sys/applist`)
|
||||
}
|
||||
|
||||
/***************************************************** 地图设置 ****************************************************/
|
||||
|
||||
/**
|
||||
* 设置地图key
|
||||
*/
|
||||
export function setMap(params: Record<string, any>) {
|
||||
return request.put(`sys/config/map`, params, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取地图配置
|
||||
*/
|
||||
export function getMap() {
|
||||
return request.get(`sys/config/map`)
|
||||
}
|
||||
|
||||
/***************************************************** 首页 ****************************************************/
|
||||
/**
|
||||
* 获取首页列表
|
||||
*/
|
||||
export function getIndexList() {
|
||||
return request.get(`sys/config/site_index`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置首页模版
|
||||
*/
|
||||
export function setIndexList(params: Record<string, any>) {
|
||||
return request.put(`sys/config/site_index`, params, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取布局
|
||||
* @returns
|
||||
*/
|
||||
export function getLayouts() {
|
||||
return request.get('sys/layout')
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置布局
|
||||
* @returns
|
||||
*/
|
||||
export function setLayout(key: string) {
|
||||
return request.put('sys/layout', { key }, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取支付待审核记录
|
||||
*/
|
||||
export function getPayAuditList(params: Record<string, any>) {
|
||||
return request.get('pay/audit', { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 支付审核通过
|
||||
* @returns
|
||||
*/
|
||||
export function payAuditPass(outTradeNo: string) {
|
||||
return request.put(`pay/pass/${outTradeNo}`, {}, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 支付审核拒绝
|
||||
* @returns
|
||||
*/
|
||||
export function payAuditRefuse(params: Record<string, any>) {
|
||||
return request.put(`pay/refuse/${params.out_trade_no}`, params, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取支付单据详情
|
||||
*/
|
||||
export function getPayDetail(id: number) {
|
||||
return request.get(`pay/detail/${id}`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取应用列表
|
||||
*/
|
||||
export function getAddonList() {
|
||||
return request.get(`app/getAddonList`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取手机端首页列表
|
||||
*/
|
||||
export function getWapIndexList(params: Record<string, any>) {
|
||||
return request.get('sys/config/wap_index', { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取开发者key
|
||||
* @returns
|
||||
*/
|
||||
export function getDeveloperToken() {
|
||||
return request.get('sys/config/developer_token')
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置开发者key
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function setDeveloperToken(params: Record<string, any>) {
|
||||
return request.put(`sys/config/developer_token`, params, { showSuccessMessage: true })
|
||||
}
|
184
admin/src/app/api/tools.ts
Normal file
|
@ -0,0 +1,184 @@
|
|||
import request from '@/utils/request'
|
||||
|
||||
/***************************************************** 插件开发 ****************************************************/
|
||||
/**
|
||||
* 获取插件列表
|
||||
* @returns
|
||||
*/
|
||||
export function getAddonDevelop(params: Record<string, any>) {
|
||||
return request.get(`addon_develop`, {params});
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取插件类型配置
|
||||
* @returns
|
||||
*/
|
||||
export function getAddontype() {
|
||||
return request.get(`addontype`);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取插件详情
|
||||
* @returns
|
||||
*/
|
||||
export function getAddonDevelopInfo(key: any) {
|
||||
return request.get(`addon_develop/${key}`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取插件key是否存在
|
||||
* @returns
|
||||
*/
|
||||
export function getAddonDevelopCheck(key: any) {
|
||||
return request.get(`addon_develop/check/${key}`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加插件
|
||||
* @param key
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function addAddonDevelop(key: any, params: Record<string, any>) {
|
||||
return request.post(`addon_develop/${key}`, params)
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑插件
|
||||
* @param key
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function editAddonDevelop(key: any, params: Record<string, any>) {
|
||||
return request.put(`addon_develop/${key}`, params)
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除插件
|
||||
* @param key
|
||||
* @returns
|
||||
*/
|
||||
export function deleteAddonDevelop(key: any) {
|
||||
return request.delete(`addon_develop/${key}`, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 打包插件
|
||||
* @returns
|
||||
*/
|
||||
export function addonDevelopBuild(key: any) {
|
||||
return request.post(`addon_develop/build/${key}`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 下载插件
|
||||
* @returns
|
||||
*/
|
||||
export function addonDevelopDownload(key: any) {
|
||||
return request.post(`addon_develop/download/${key}`, {}, {"responseType": "blob"})
|
||||
}
|
||||
/***************************************************** 代码生成 ****************************************************/
|
||||
|
||||
/**
|
||||
* 获取代码生成列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getGenerateTableList(params: Record<string, any>) {
|
||||
return request.get(`generator/generator`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取代码生成详情
|
||||
* @param id 代码生成id
|
||||
* @returns
|
||||
*/
|
||||
export function getGenerateTableInfo(id: number) {
|
||||
return request.get(`generator/generator/${id}`);
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加代码生成
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function addGenerateTable(params: Record<string, any>) {
|
||||
return request.post('generator/generator', params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑代码生成
|
||||
* @param params
|
||||
*/
|
||||
export function editGenerateTable(params: Record<string, any>) {
|
||||
return request.put(`generator/generator/${params.id}`, params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除代码生成
|
||||
* @param id
|
||||
* @returns
|
||||
*/
|
||||
export function deleteGenerateTable(id: number) {
|
||||
return request.delete(`generator/generator/${id}`, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 代码生成
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function generateCreate(params: Record<string, any>) {
|
||||
return request.post(`generator/download`, params)
|
||||
}
|
||||
|
||||
/**
|
||||
* 代码生成预览
|
||||
* @param id
|
||||
* @returns
|
||||
*/
|
||||
export function generatePreview(id: number) {
|
||||
return request.get(`generator/preview/${id}`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 数据表
|
||||
*/
|
||||
export function generateTable() {
|
||||
return request.get(`generator/table`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取服务器环境配置
|
||||
*/
|
||||
export function getSystem() {
|
||||
return request.get(`sys/system`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取全部模型
|
||||
*/
|
||||
export function getGeneratorAllModel(params: any) {
|
||||
return request.get(`generator/all_model`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取 表字段
|
||||
*/
|
||||
export function getGeneratorTableColumn(params: any) {
|
||||
return request.get(`generator/table_column`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 同步校验
|
||||
*/
|
||||
export function generatorCheckFile(params: Record<string, any>) {
|
||||
return request.get(`generator/check_file`, {params})
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据模型获取表字段
|
||||
*/
|
||||
export function getGeneratorModelTableColumn(params: any) {
|
||||
return request.get(`generator/model_table_column`, {params})
|
||||
}
|
47
admin/src/app/api/upgrade.ts
Normal file
|
@ -0,0 +1,47 @@
|
|||
import request from '@/utils/request'
|
||||
|
||||
|
||||
/**
|
||||
* 获取更新内容
|
||||
* @param addon
|
||||
*/
|
||||
export function getUpgradeContent(addon: string = '') {
|
||||
return request.get(addon ? `upgrade/${addon}` : 'upgrade')
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取升级任务
|
||||
* @param addon
|
||||
*/
|
||||
export function getUpgradeTask() {
|
||||
return request.get('upgrade/task')
|
||||
}
|
||||
|
||||
/**
|
||||
* 升级
|
||||
* @param addon
|
||||
*/
|
||||
export function upgradeAddon(addon: string = '') {
|
||||
return request.post(addon ? `upgrade/${addon}` : 'upgrade')
|
||||
}
|
||||
|
||||
/**
|
||||
* 执行升级
|
||||
*/
|
||||
export function executeUpgrade() {
|
||||
return request.post('upgrade/execute')
|
||||
}
|
||||
|
||||
/**
|
||||
* 升级前检测
|
||||
*/
|
||||
export function preUpgradeCheck(addon: string = '') {
|
||||
return request.get(addon ? `upgrade/check/${addon}` : 'upgrade/check')
|
||||
}
|
||||
|
||||
/**
|
||||
* 清除
|
||||
*/
|
||||
export function clearUpgradeTask() {
|
||||
return request.post('upgrade/clear')
|
||||
}
|
58
admin/src/app/api/user.ts
Normal file
|
@ -0,0 +1,58 @@
|
|||
import request from '@/utils/request'
|
||||
|
||||
//当前接口用户指系统整体用户管理,站内用户添加,编辑,详情,操作日志,请查看站点内部相关接口
|
||||
|
||||
/***************************************************** 用户 ****************************************************/
|
||||
|
||||
/**
|
||||
* 获取用户列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getUserList(params: Record<string, any>) {
|
||||
return request.get(`user/user`, { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取用户详情
|
||||
* @param uid 用户uid
|
||||
* @returns
|
||||
*/
|
||||
export function getUserInfo(uid: number) {
|
||||
return request.get(`user/user/${uid}`);
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加用户
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function addUser(params: Record<string, any>) {
|
||||
return request.post('user/user', params, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新用户
|
||||
* @param params
|
||||
*/
|
||||
export function editUser(params: Record<string, any>) {
|
||||
return request.put(`user/user/${params.uid}`, params, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取所有用户列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getAllUserList(params: Record<string, any>) {
|
||||
return request.get(`user/user_all`, { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询用户名是否存在
|
||||
* @param username
|
||||
* @returns
|
||||
*/
|
||||
export function checkUsernameIsExist(username: string) {
|
||||
return request.get(`user/isexist`, { params: { username } })
|
||||
}
|
125
admin/src/app/api/weapp.ts
Normal file
|
@ -0,0 +1,125 @@
|
|||
import request from '@/utils/request'
|
||||
|
||||
/**
|
||||
* 获取微信小程序配置
|
||||
* @returns
|
||||
*/
|
||||
export function getWeappConfig() {
|
||||
return request.get('weapp/config')
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑微信小程序配置
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function setWeappConfig(params: Record<string, any>) {
|
||||
return request.put('weapp/config', params, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取订阅消息列表
|
||||
* @returns
|
||||
*/
|
||||
export function getTemplateList() {
|
||||
return request.get('weapp/template')
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取同步
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getBatchAcquisition(params: Record<string, any>) {
|
||||
return request.put('weapp/template/sync', params, { showSuccessMessage: true })
|
||||
}
|
||||
/**
|
||||
* 添加微信小程序版本
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function setWeappVersion(params: Record<string, any>) {
|
||||
return request.post('weapp/version', params, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 微信小程序预览码
|
||||
* @returns
|
||||
*/
|
||||
export function getWeappPreview() {
|
||||
return request.get('weapp/preview')
|
||||
}
|
||||
|
||||
/**
|
||||
* 微信小程序版本列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getWeappVersionList(params: Record<string, any>) {
|
||||
return request.get('weapp/version', { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取微信小程序上传日志
|
||||
* @param key
|
||||
* @returns
|
||||
*/
|
||||
export function getWeappUploadLog(key: string) {
|
||||
return request.get(`weapp/upload/${key}`)
|
||||
}
|
||||
|
||||
/***************************************************** 管理端 ****************************************************/
|
||||
|
||||
/**
|
||||
* 上传文件
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function uploadVersion(params: Record<string, any>) {
|
||||
return request.put('applet/upload', params, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加版本
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function addVersion(params: Record<string, any>) {
|
||||
return request.post('applet/version', params, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 版本列表
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getVersionList(params: Record<string, any>) {
|
||||
return request.get('applet/version', { params })
|
||||
}
|
||||
|
||||
/**
|
||||
* 版本详情
|
||||
* @param id
|
||||
* @returns
|
||||
*/
|
||||
export function getVersionInfo(id: string) {
|
||||
return request.get(`applet/version/${id}`)
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑版本
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function editVersion(params: Record<string, any>) {
|
||||
return request.put(`applet/version/${params.id}`, params, { showSuccessMessage: true })
|
||||
}
|
||||
|
||||
/**
|
||||
* 版本删除
|
||||
* @param id
|
||||
* @returns
|
||||
*/
|
||||
export function deleteVersion(id: string) {
|
||||
return request.delete(`applet/version/${id}`)
|
||||
}
|
64
admin/src/app/api/wechat.ts
Normal file
|
@ -0,0 +1,64 @@
|
|||
import request from '@/utils/request'
|
||||
|
||||
/**
|
||||
* 获取微信配置
|
||||
* @returns
|
||||
*/
|
||||
export function getWechatConfig() {
|
||||
return request.get('wechat/config')
|
||||
}
|
||||
|
||||
/**
|
||||
* 微信配置所需的静态信息
|
||||
*/
|
||||
export function getWechatStatic() {
|
||||
return request.get('wechat/static');
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑微信配置
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function editWechatConfig(params: Record<string, any>) {
|
||||
return request.put('wechat/config', params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取微信菜单
|
||||
* @returns
|
||||
*/
|
||||
export function getWechatMenu() {
|
||||
return request.get('wechat/menu')
|
||||
}
|
||||
|
||||
/**
|
||||
* 编辑微信菜单
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function editWechatMenu(params: Record<string, any>) {
|
||||
return request.put('wechat/menu', params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取消息模板列表
|
||||
* @returns
|
||||
*/
|
||||
export function getTemplateList() {
|
||||
return request.get('wechat/template')
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取同步
|
||||
* @param params
|
||||
* @returns
|
||||
*/
|
||||
export function getBatchAcquisition(params: Record<string, any>) {
|
||||
return request.put('wechat/template/sync', params, {showSuccessMessage: true})
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
BIN
admin/src/app/assets/images/SaaS.png
Normal file
After Width: | Height: | Size: 363 B |
BIN
admin/src/app/assets/images/app_default.png
Normal file
After Width: | Height: | Size: 54 KiB |
BIN
admin/src/app/assets/images/app_store/app_store_default.png
Normal file
After Width: | Height: | Size: 156 KiB |
BIN
admin/src/app/assets/images/app_store/local_icon.png
Normal file
After Width: | Height: | Size: 907 B |
BIN
admin/src/app/assets/images/app_store/local_icon_select.png
Normal file
After Width: | Height: | Size: 544 B |
BIN
admin/src/app/assets/images/app_store/market_icon.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
admin/src/app/assets/images/app_store/market_icon_select.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
admin/src/app/assets/images/app_store/switch_icon_1.png
Normal file
After Width: | Height: | Size: 455 B |
BIN
admin/src/app/assets/images/app_store/switch_icon_2.png
Normal file
After Width: | Height: | Size: 843 B |
BIN
admin/src/app/assets/images/back_login.jpg
Normal file
After Width: | Height: | Size: 108 KiB |
BIN
admin/src/app/assets/images/category_default.png
Normal file
After Width: | Height: | Size: 1.8 KiB |
BIN
admin/src/app/assets/images/channel/preview.png
Normal file
After Width: | Height: | Size: 655 KiB |
BIN
admin/src/app/assets/images/default_headimg.png
Normal file
After Width: | Height: | Size: 4.2 KiB |
BIN
admin/src/app/assets/images/diy/notice/style_01.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
admin/src/app/assets/images/diy/text/style1.png
Normal file
After Width: | Height: | Size: 3.4 KiB |
BIN
admin/src/app/assets/images/diy/text/style2.png
Normal file
After Width: | Height: | Size: 3.3 KiB |
BIN
admin/src/app/assets/images/diy_preview_head.png
Normal file
After Width: | Height: | Size: 7.8 KiB |
BIN
admin/src/app/assets/images/empty.png
Normal file
After Width: | Height: | Size: 78 KiB |
BIN
admin/src/app/assets/images/error.png
Normal file
After Width: | Height: | Size: 88 KiB |
BIN
admin/src/app/assets/images/icon-addon.png
Normal file
After Width: | Height: | Size: 673 B |
BIN
admin/src/app/assets/images/icon_folder.png
Normal file
After Width: | Height: | Size: 605 B |
BIN
admin/src/app/assets/images/icon_preview.png
Normal file
After Width: | Height: | Size: 392 B |
BIN
admin/src/app/assets/images/index/add_menu.png
Normal file
After Width: | Height: | Size: 897 B |
BIN
admin/src/app/assets/images/index/administrator.png
Normal file
After Width: | Height: | Size: 8.2 KiB |
BIN
admin/src/app/assets/images/index/app.png
Normal file
After Width: | Height: | Size: 2.1 KiB |
BIN
admin/src/app/assets/images/index/app1.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
admin/src/app/assets/images/index/app_default.png
Normal file
After Width: | Height: | Size: 2.4 KiB |
BIN
admin/src/app/assets/images/index/apply_empty.png
Normal file
After Width: | Height: | Size: 8.8 KiB |
BIN
admin/src/app/assets/images/index/article.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
admin/src/app/assets/images/index/article_list.png
Normal file
After Width: | Height: | Size: 6.2 KiB |
BIN
admin/src/app/assets/images/index/auth.png
Normal file
After Width: | Height: | Size: 2.7 KiB |
BIN
admin/src/app/assets/images/index/auth1.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
admin/src/app/assets/images/index/balance.png
Normal file
After Width: | Height: | Size: 8.0 KiB |
BIN
admin/src/app/assets/images/index/del_model.png
Normal file
After Width: | Height: | Size: 773 B |
BIN
admin/src/app/assets/images/index/edit.png
Normal file
After Width: | Height: | Size: 550 B |
BIN
admin/src/app/assets/images/index/fitment.png
Normal file
After Width: | Height: | Size: 8.0 KiB |
BIN
admin/src/app/assets/images/index/member.png
Normal file
After Width: | Height: | Size: 8.3 KiB |
BIN
admin/src/app/assets/images/index/model_tag.png
Normal file
After Width: | Height: | Size: 157 B |
BIN
admin/src/app/assets/images/index/new_site.png
Normal file
After Width: | Height: | Size: 2.5 KiB |
BIN
admin/src/app/assets/images/index/new_site1.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
admin/src/app/assets/images/index/overview.png
Normal file
After Width: | Height: | Size: 1.2 MiB |
BIN
admin/src/app/assets/images/index/renovation.png
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
admin/src/app/assets/images/index/site.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
admin/src/app/assets/images/index/site1.png
Normal file
After Width: | Height: | Size: 588 B |
BIN
admin/src/app/assets/images/index/site_auth.png
Normal file
After Width: | Height: | Size: 3.5 KiB |
BIN
admin/src/app/assets/images/index/site_balance.png
Normal file
After Width: | Height: | Size: 3.2 KiB |
BIN
admin/src/app/assets/images/index/site_bg.png
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
admin/src/app/assets/images/index/site_class.png
Normal file
After Width: | Height: | Size: 2.1 KiB |
BIN
admin/src/app/assets/images/index/site_class1.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
admin/src/app/assets/images/index/site_img.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
admin/src/app/assets/images/index/site_member.png
Normal file
After Width: | Height: | Size: 3.2 KiB |
BIN
admin/src/app/assets/images/index/wework_qrcode.png
Normal file
After Width: | Height: | Size: 44 KiB |
BIN
admin/src/app/assets/images/index/wx_qrcode.jpg
Normal file
After Width: | Height: | Size: 8.4 KiB |