This commit is contained in:
wangchen147 2023-11-25 17:40:50 +08:00
parent 36967076d4
commit a0c9a04155
1366 changed files with 58386 additions and 70209 deletions

4
.gitignore vendored
View File

@ -16,3 +16,7 @@ bin-release/
# 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

36
README.en.md Normal file
View 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/)

183
README.md
View File

@ -1,113 +1,70 @@
![输入图片说明](https://www.niucloud.com/img/readme/%E9%A1%B6%E9%83%A8%E5%B9%BF%E5%91%8A1.jpg)
:point_up: :small_blue_diamond: :small_orange_diamond: :small_blue_diamond: :small_blue_diamond: :small_orange_diamond: :small_blue_diamond: :small_blue_diamond: :small_orange_diamond: :small_blue_diamond: :small_blue_diamond: :small_orange_diamond: :small_blue_diamond:
:small_blue_diamond: :small_orange_diamond: :small_blue_diamond: :small_blue_diamond: :small_orange_diamond: :small_blue_diamond:
<br>
如果对您有帮助,您可以点右上角 “ **Star** ” 收藏一下 ,获取第一时间更新,谢谢!
<br>
:point_up: :small_blue_diamond: :small_orange_diamond: :small_blue_diamond: :small_blue_diamond: :small_orange_diamond: :small_blue_diamond: :small_blue_diamond: :small_orange_diamond: :small_blue_diamond: :small_blue_diamond: :small_orange_diamond: :small_blue_diamond:
:small_blue_diamond: :small_orange_diamond: :small_blue_diamond: :small_blue_diamond: :small_orange_diamond: :small_blue_diamond:
<br>
### niucloud-admin介绍
niucloud-admin是一款快速开发SaaS通用管理系统后台框架前端采用最新的技术栈Vite+TypeScript+Vue3+ElementPlus最流行技术架构后台结合PHP8、Java SDK、Python等主流后端语言搭建内置集成Saas多站点、多租户套餐、用户权限、代码生成器、表单设计、云存储、短信发送、素材中心、微信及公众号、支付宝小程序、Api模块一系列开箱即用功能是一款快速可以开发企业级应用的软件系统。
### 产品特性说明
1.niucloud-admin 软件开发框架内置各种基础功能可大量节省SaaS系统开发周期快速完成交付。
2.Saas架构底层设计支持单端模式开发部署支持Saas多站点多用户多租户模式研发支持无限账号无需重复部署安装高效管理多个用户多个应用。
3.插件设计的管理机制,支持第三方开发者参与开发各种功能插件,独特的软件插件架构设计,支持多插件并存,即便二次开发之后,也不会影响与主框架同步无缝升级。
4.内置集成Saas多站点、多租户套餐、用户权限、代码生成器、表单设计、云存储、短信发送、素材中心、微信及公众号、支付宝小程序、Api模块一系列开箱即用功能是一款快速可以开发企业级应用的软件系统。
5.框架支持在线更新,可统一管理主框架及各种插件的在线安装,在线更新。
6.niucloud-admin是一款真正的二次开发神器
### 技术说明
- 后台php采用thinkphp6+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代码。
- 前端采用标准的element-plus开发者不需要详细了解前端只需要用标准的element组件就可以。
- 手机端设计开发了自定义装修,同时提供了基础的开发组件,方便开发者设计开发手机自定义页面装修的开发需求。
- 手机端使用uniapp 同时使用uview页面展示可以开发出丰富的手机样式同时不需要专门学习小程序app等开发语言只需要通过uniapp编译就可以。
### 官网地址
https://www.niucloud.com
### 应用市场
https://www.niucloud.com
### 使用手册
https://www.kancloud.cn/niucloud/niucloud-admin-develop/3153336
### 二开手册
https://www.kancloud.cn/niucloud/niucloud-admin-develop/3153336
### API接口手册
https://www.niucloud.com/apidoc.html
### 论坛地址
https://www.niucloud.com/bbs
### 演示地址
- 电脑端演示网址:[<a href='https://demo.niucloud.com/web/s2/' target="_blank"> 查看 </a>]
<a href='https://demo.niucloud.com/web/s2/' target="_blank">https://demo.niucloud.com/web/s2/</a> 账号:自行注册
- 站点后台演示网址:[<a href='https://demo.niucloud.com/site/login' target="_blank"> 查看 </a>]
<a href='https://demo.niucloud.com/site/login' target="_blank">https://demo.niucloud.com/site/login</a> 账号test 密码123456
- 平台后台演示网址:[<a href='https://demo.niucloud.com/admin/login' target="_blank"> 查看 </a>]
<a href='https://demo.niucloud.com/admin/login' target="_blank">https://demo.niucloud.com/admin/login</a> 账号admin 密码123456
- 前端演示二维码
![输入图片说明](https://www.niucloud.com/img/readme/%E6%BC%94%E7%A4%BA%E5%89%8D%E7%AB%AF-new.png)
环境要求<br/>
php 8.0 <br/> mysql5.6及以上 <br/> 启用redis <br/> Nignx/Apache
![输入图片说明](https://www.niucloud.com/img/readme/%E6%B7%BB%E5%8A%A0%E5%AE%A2%E6%9C%8D-old.png)
扫描下方二维码加入niucloud-admin开发者交流群
![输入图片说明](https://www.niucloud.com/img/readme/%E5%BC%80%E5%8F%91%E8%80%85%E4%BA%A4%E6%B5%81%E7%BE%A4.png)
### 开源使用须知
1.允许用于个人学习、毕业设计、教学案例、公益事业、商业使用;
2.本框架应用源代码所有权和著作权归niucloud官方所有基于niucloud-admin框架开发的应用所有权和著作权归应用开发商所有。但必须声明是基于niucloud-admin框架开发请自觉遵守否则产生的一切任何后果责任由侵权者自负;
3.禁止修改框架代码并再次发布框架衍生版等与niucloud-admin框架产生恶意竞争或对抗的行为;
4.本框架源码全部开源;包括前端,后端,无任何加密;
5.商用请仔细审查代码和漏洞,不得用于任一国家许可范围之外的商业应用,产生的一切任何后果责任自负;
6.一切事物有个人喜好的标准,本开源代码意在分享,不喜勿喷。
### 版权信息
版权所有Copyright 2015-2035 niucloud-admin 版权所有
All rights reserved。
杭州牛之云科技有限公司 提供技术支持
![输入图片说明](https://www.niucloud.com/img/readme/%E9%A1%B6%E9%83%A8%E5%B9%BF%E5%91%8A1.jpg)
### niucloud-admin是什么
niucloud-admin是一款快速开发通用管理后台框架前端采用最新的技术栈Vite+TypeScript+Vue3+ElementPlus最流行技术架构后台结合PHP8、Java SDK、Python等主流后端语言搭建内置集成用户权限、代码生成器、表单设计、云存储、短信发送、素材中心、微信及公众号、Api模块一系列开箱即用功能是一款快速可以开发企业级应用的软件系统。
### niucloud-admin采用的技术亮点
- 后台php采用thinkphp6+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代码。
- 前端采用标准的element-plus开发者不需要详细了解前端只需要用标准的element组件就可以。
- 手机端设计开发了自定义装修,同时提供了基础的开发组件,方便开发者设计开发手机自定义页面装修的开发需求。
- 手机端使用uniapp 同时使用uview页面展示可以开发出丰富的手机样式同时不需要专门学习小程序app等开发语言只需要通过uniapp编译就可以。
### 操作指南
[官网地址](https://www.niucloud.com)
| [服务市场](https://www.niucloud.com)
| [使用手册](https://www.kancloud.cn/niucloud/niucloud-admin-develop/3153336)
| [二开手册](https://www.kancloud.cn/niucloud/niucloud-admin-develop/3153336)
| [API接口手册](https://www.niucloud.com/apidoc.html)
| [论坛地址](https://www.niucloud.com/bbs)
### 演示地址
- 站点后台演示网址:[<a href='https://demo.niucloud.com/site/' target="_blank"> 查看 </a>]
<a href='https://demo.niucloud.com/site/' target="_blank">https://demo.niucloud.com/site/ 账号test 密码123456
- 平台后台演示网址:[<a href='https://demo.niucloud.com/admin/' target="_blank"> 查看 </a>]
<a href='https://demo.niucloud.com/admin/' target="_blank">https://demo.niucloud.com/admin/ 账号admin 密码123456
### 开源使用须知
1.允许用于个人学习、毕业设计、教学案例、公益事业、商业使用;
2.本框架应用源代码所有权和著作权归niucloud官方所有基于niucloud-admin框架开发的应用所有权和著作权归应用开发商所有。但必须明确声明是基于niucloud-admin框架开发请自觉遵守否则产生的一切任何后果责任由侵权者自负;
3.禁止修改框架代码并再次发布框架衍生版等与niucloud-admin框架产生恶意竞争或对抗的行为;
4.本框架源码全部开源;包括前端,后端,无任何加密;
5.商用请仔细审查代码和漏洞,不得用于任一国家许可范围之外的商业应用,产生的一切任何后果责任自负;
6.一切事物有个人喜好的标准,本开源代码意在分享,不喜勿喷。
### 版权信息
版权所有Copyright © 2015-2030 niucloud-admin 版权所有
All rights reserved。
杭州数字云动科技有限公司
杭州牛之云科技有限公司
提供技术支持

View File

@ -1,6 +1,6 @@
NODE_ENV = 'development'
# api请求地址
# api请求地址
VITE_APP_BASE_URL='/adminapi/'
# 图片服务器地址
@ -10,4 +10,4 @@ VITE_IMG_DOMAIN=''
VITE_REQUEST_HEADER_TOKEN_KEY='token'
# 请求时header中站点的参数名
VITE_REQUEST_HEADER_SITEID_KEY='site-id'
VITE_REQUEST_HEADER_SITEID_KEY='site-id'

View File

@ -1,3 +0,0 @@
{
"recommendations": ["Vue.volar", "Vue.vscode-typescript-vue-plugin"]
}

View File

@ -2,4 +2,5 @@
export {}
declare global {
const ElMessage: typeof import('element-plus/es')['ElMessage']
const ElNotification: typeof import('element-plus/es')['ElNotification']
}

View File

@ -18,6 +18,7 @@ declare module '@vue/runtime-core' {
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']
@ -46,6 +47,7 @@ declare module '@vue/runtime-core' {
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']
@ -67,6 +69,7 @@ declare module '@vue/runtime-core' {
ElTag: typeof import('element-plus/es')['ElTag']
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']

View File

@ -9,6 +9,7 @@
"version": "1.0.0",
"dependencies": {
"@element-plus/icons-vue": "^2.0.10",
"@highlightjs/vue-plugin": "^2.1.0",
"@vueuse/core": "^9.12.0",
"@wangeditor/editor": "^5.1.23",
"@wangeditor/editor-for-vue": "^5.1.12",
@ -855,6 +856,15 @@
"@floating-ui/core": "^1.1.0"
}
},
"node_modules/@highlightjs/vue-plugin": {
"version": "2.1.0",
"resolved": "https://registry.npmmirror.com/@highlightjs/vue-plugin/-/vue-plugin-2.1.0.tgz",
"integrity": "sha512-E+bmk4ncca+hBEYRV2a+1aIzIV0VSY/e5ArjpuSN9IO7wBJrzUE2u4ESCwrbQD7sAy+jWQjkV5qCCWgc+pu7CQ==",
"peerDependencies": {
"highlight.js": "^11.0.1",
"vue": "^3"
}
},
"node_modules/@humanwhocodes/config-array": {
"version": "0.11.8",
"resolved": "https://registry.npmmirror.com/@humanwhocodes/config-array/-/config-array-0.11.8.tgz",
@ -3922,6 +3932,15 @@
"he": "bin/he"
}
},
"node_modules/highlight.js": {
"version": "11.9.0",
"resolved": "https://registry.npmmirror.com/highlight.js/-/highlight.js-11.9.0.tgz",
"integrity": "sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw==",
"peer": true,
"engines": {
"node": ">=12.0.0"
}
},
"node_modules/hls.js": {
"version": "1.3.4",
"resolved": "https://registry.npmmirror.com/hls.js/-/hls.js-1.3.4.tgz",
@ -7065,6 +7084,12 @@
"@floating-ui/core": "^1.1.0"
}
},
"@highlightjs/vue-plugin": {
"version": "2.1.0",
"resolved": "https://registry.npmmirror.com/@highlightjs/vue-plugin/-/vue-plugin-2.1.0.tgz",
"integrity": "sha512-E+bmk4ncca+hBEYRV2a+1aIzIV0VSY/e5ArjpuSN9IO7wBJrzUE2u4ESCwrbQD7sAy+jWQjkV5qCCWgc+pu7CQ==",
"requires": {}
},
"@humanwhocodes/config-array": {
"version": "0.11.8",
"resolved": "https://registry.npmmirror.com/@humanwhocodes/config-array/-/config-array-0.11.8.tgz",
@ -9533,6 +9558,12 @@
"integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
"dev": true
},
"highlight.js": {
"version": "11.9.0",
"resolved": "https://registry.npmmirror.com/highlight.js/-/highlight.js-11.9.0.tgz",
"integrity": "sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw==",
"peer": true
},
"hls.js": {
"version": "1.3.4",
"resolved": "https://registry.npmmirror.com/hls.js/-/hls.js-1.3.4.tgz",

View File

@ -10,6 +10,7 @@
},
"dependencies": {
"@element-plus/icons-vue": "^2.0.10",
"@highlightjs/vue-plugin": "^2.1.0",
"@vueuse/core": "^9.12.0",
"@wangeditor/editor": "^5.1.23",
"@wangeditor/editor-for-vue": "^5.1.12",
@ -50,4 +51,4 @@
"vite": "^4.1.0",
"vue-tsc": "^1.0.24"
}
}
}

View File

@ -24,7 +24,7 @@ const toggleDark = useToggle(useDark())
watch(route, () => {
useAppStore().$patch(state => {
state.route = route.meta.view || route.path
state.route = route
})
}, { immediate: true })

View File

@ -1,62 +0,0 @@
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 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})
}
/**
*
* @param addon
* @param key
* @returns
*/
export function getAddonInstallTaskState(addon: string, key: string) {
return request.get(`addon/install/${addon}/status/${key}`)
}
/**
*
* @param addon
*/
export function executeInstall(addon: string) {
return request.post(`addon/install/execute/${addon}`, {})
}

View File

@ -1,102 +0,0 @@
import request from '@/utils/request'
/***************************************************** 文章表 ****************************************************/
/**
*
* @param params
* @returns
*/
export function getArticleList(params: Record<string, any>) {
return request.get(`article/article`, {params})
}
/**
*
* @param id id
* @returns
*/
export function getArticleInfo(id: number) {
return request.get(`article/article/${id}`);
}
/**
*
* @param params
* @returns
*/
export function addArticle(params: Record<string, any>) {
return request.post('article/article', params, {showSuccessMessage: true})
}
/**
*
* @param params
*/
export function editArticle(params: Record<string, any>) {
return request.put(`article/article/${params.id}`, params, {showSuccessMessage: true})
}
/**
*
* @param id
* @returns
*/
export function deleteArticle(id: number) {
return request.delete(`article/article/${id}`, {showSuccessMessage: true})
}
/***************************************************** 文章分类管理 ****************************************************/
/**
*
* @param params
* @returns
*/
export function getArticleCategoryList(params: Record<string, any>) {
return request.get(`article/category`, {params})
}
/**
*
* @param params
* @returns
*/
export function getArticleCategoryAll(params: Record<string, any>) {
return request.get(`article/category/all`, params)
}
/**
*
* @param category_id
*/
export function getArticleCategoryInfo(category_id: number) {
return request.get(`article/category/${category_id}`);
}
/**
*
* @param params
* @returns
*/
export function addArticleCategory(params: Record<string, any>) {
return request.post('article/category', params, {showSuccessMessage: true})
}
/**
*
* @param params
* @returns
*/
export function editArticleCategory(params: Record<string, any>) {
return request.put(`article/category/${params.category_id}`, params, {showSuccessMessage: true})
}
/**
*
* @param category_id
*/
export function deleteArticleCategory(category_id: number) {
return request.delete(`article/category/${category_id}`, {showSuccessMessage: true});
}

View File

@ -1,70 +0,0 @@
import request from '@/utils/request'
/***************************************************** 代码生成 ****************************************************/
/**
*
* @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)
}
/**
*
*/
export function generateTable() {
return request.get(`generator/table`)
}
/**
*
*/
export function getSystem() {
return request.get(`sys/system`)
}

View 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')
}

View File

@ -13,8 +13,8 @@ export function login(params: Record<string, any>, app_type: string) {
*
* @returns
*/
export function getAuthMenus() {
return request.get('auth/authmenu')
export function getAuthMenus(params: Record<string, any>) {
return request.get('auth/authmenu', {params})
}
/**
@ -31,4 +31,11 @@ export function getSiteInfo() {
*/
export function getLoginConfig() {
return request.get('login/config')
}
}
/**
*
*/
export function getVersions() {
return request.get(`sys/info`)
}

81
admin/src/app/api/dict.ts Normal file
View 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}`)
}

View File

@ -0,0 +1,5 @@
import request from '@/utils/request'
export function getHomeSite(params: Record<string, any>) {
return request.get(`home/site`, { params })
}

View File

@ -4,7 +4,7 @@ import request from '@/utils/request'
*
*/
export function getAuthinfo() {
return request.get('niucloud/authinfo')
return request.get('niucloud/authinfo', { showErrorMessage: false })
}
/**
@ -47,4 +47,4 @@ export function getModuleVersion() {
*/
export function downloadVersion(addon) {
return request.post(`addon/download/${addon}`, {}, {showSuccessMessage: true})
}
}

View File

@ -10,7 +10,7 @@ import request from '@/utils/request'
* @returns
*/
export function getSiteList(params: Record<string, any>) {
return request.get(`site/site`, {params})
return request.get(`site/site`, { params })
}
/**
@ -27,7 +27,7 @@ export function getSiteInfo(site_id: number) {
* @returns
*/
export function addSite(params: Record<string, any>) {
return request.post('site/site', params, {showSuccessMessage: true})
return request.post('site/site', params, { showSuccessMessage: true })
}
/**
@ -35,7 +35,7 @@ export function addSite(params: Record<string, any>) {
* @param params
*/
export function editSite(params: Record<string, any>) {
return request.put(`site/site/${params.site_id}`, params, {showSuccessMessage: true})
return request.put(`site/site/${params.site_id}`, params, { showSuccessMessage: true })
}
/**
@ -43,7 +43,7 @@ export function editSite(params: Record<string, any>) {
* @param params
*/
export function closeSite(params: Record<string, any>) {
return request.put(`site/closesite/${params.site_id}`, params, {showSuccessMessage: true})
return request.put(`site/closesite/${params.site_id}`, params, { showSuccessMessage: true })
}
/**
@ -51,7 +51,7 @@ export function closeSite(params: Record<string, any>) {
* @param params
*/
export function openSite(params: Record<string, any>) {
return request.put(`site/opensite/${params.site_id}`, params, {showSuccessMessage: true})
return request.put(`site/opensite/${params.site_id}`, params, { showSuccessMessage: true })
}
/**
@ -70,15 +70,15 @@ export function getStatusList() {
* @returns
*/
export function getSiteGroupList(params: Record<string, any>) {
return request.get(`site/group`, {params})
return request.get(`site/group`, { params })
}
/**
*
* @param site_id
*/
export function getSiteGroupInfo(site_id: number) {
return request.get(`site/group/${site_id}`);
export function getSiteGroupInfo(groupId: number) {
return request.get(`site/group/${groupId}`);
}
/**
@ -87,7 +87,7 @@ export function getSiteGroupInfo(site_id: number) {
* @returns
*/
export function addSiteGroup(params: Record<string, any>) {
return request.post('site/group', params, {showSuccessMessage: true})
return request.post('site/group', params, { showSuccessMessage: true })
}
/**
@ -95,7 +95,7 @@ export function addSiteGroup(params: Record<string, any>) {
* @param params
*/
export function editSiteGroup(params: Record<string, any>) {
return request.put(`site/group/${params.group_id}`, params, {showSuccessMessage: true})
return request.put(`site/group/${params.group_id}`, params, { showSuccessMessage: true })
}
/**
@ -103,7 +103,7 @@ export function editSiteGroup(params: Record<string, any>) {
* @param group_id
*/
export function deleteSiteGroup(group_id: number) {
return request.delete(`site/group/${group_id}`, {showSuccessMessage: true});
return request.delete(`site/group/${group_id}`, { showSuccessMessage: true });
}
/**
@ -123,7 +123,7 @@ export function getSiteGroupAll(params: Record<string, any>) {
* @returns
*/
export function getUserList(params: Record<string, any>) {
return request.get(`site/user`, {params})
return request.get(`site/user`, { params })
}
/**
@ -140,7 +140,7 @@ export function getUserInfo(uid: number) {
* @returns
*/
export function addUser(params: Record<string, any>) {
return request.post('site/user', params, {showSuccessMessage: true})
return request.post('site/user', params, { showSuccessMessage: true })
}
/**
@ -148,7 +148,7 @@ export function addUser(params: Record<string, any>) {
* @param params
*/
export function editUser(params: Record<string, any>) {
return request.put(`site/user/${params.uid}`, params, {showSuccessMessage: true})
return request.put(`site/user/${params.uid}`, params, { showSuccessMessage: true })
}
/**
@ -157,7 +157,7 @@ export function editUser(params: Record<string, any>) {
* @returns
*/
export function deleteUser(uid: number) {
return request.delete(`site/user/${uid}`, {showSuccessMessage: true})
return request.delete(`site/user/${uid}`, { showSuccessMessage: true })
}
@ -189,7 +189,7 @@ export function unlockUser(uid: number) {
* @returns
*/
export function getLogList(params: Record<string, any>) {
return request.get(`site/log`, {params})
return request.get(`site/log`, { params })
}
/**
@ -208,7 +208,7 @@ export function getLogInfo(id: number) {
* @returns
*/
export function getAccountList(params: Record<string, any>) {
return request.get(`site/account`, {params})
return request.get(`site/account`, { params })
}
/**
@ -233,4 +233,12 @@ export function getAccountStat() {
*/
export function getAccountType() {
return request.get(`site/account/type`)
}
}
/**
*
* @returns
*/
export function getSiteAddons() {
return request.get('site/addons')
}

View File

@ -112,6 +112,22 @@ export function deleteMenu(menu_key: string) {
return request.delete(`sys/menu/${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}`)
}
/***************************************************** 站点菜单 ****************************************************/
/**
@ -276,6 +292,14 @@ 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`)
}
/***************************************************** 地址管理 ****************************************************/
/**
@ -578,7 +602,7 @@ export function setIndexList(params: Record<string, any>) {
/**
*
* @returns
* @returns
*/
export function getLayouts() {
return request.get('sys/layout')
@ -586,7 +610,7 @@ export function getLayouts() {
/**
*
* @returns
* @returns
*/
export function setLayout(key: string) {
return request.put('sys/layout', { key }, { showSuccessMessage: true })
@ -601,7 +625,7 @@ export function getPayAuditList(params: Record<string, any>) {
/**
*
* @returns
* @returns
*/
export function payAuditPass(outTradeNo: string) {
return request.put(`pay/pass/${outTradeNo}`, {}, { showSuccessMessage: true })
@ -609,7 +633,7 @@ export function payAuditPass(outTradeNo: string) {
/**
*
* @returns
* @returns
*/
export function payAuditRefuse(params: Record<string, any>) {
return request.put(`pay/refuse/${params.out_trade_no}`, params, { showSuccessMessage: true })
@ -621,3 +645,17 @@ export function payAuditRefuse(params: Record<string, any>) {
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 })
}

177
admin/src/app/api/tools.ts Normal file
View File

@ -0,0 +1,177 @@
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})
}

View File

@ -39,3 +39,20 @@ 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 } })
}

View File

@ -14,7 +14,7 @@ export function getWeappConfig() {
* @returns
*/
export function setWeappConfig(params: Record<string, any>) {
return request.put('weapp/config', params, {showSuccessMessage: true})
return request.put('weapp/config', params, { showSuccessMessage: true })
}
/**
@ -31,7 +31,41 @@ export function getTemplateList() {
* @returns
*/
export function getBatchAcquisition(params: Record<string, any>) {
return request.put('weapp/template/sync', params, {showSuccessMessage: true})
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}`)
}
/***************************************************** 管理端 ****************************************************/
@ -42,7 +76,7 @@ export function getBatchAcquisition(params: Record<string, any>) {
* @returns
*/
export function uploadVersion(params: Record<string, any>) {
return request.put('applet/upload', params, {showSuccessMessage: true})
return request.put('applet/upload', params, { showSuccessMessage: true })
}
/**
@ -51,7 +85,7 @@ export function uploadVersion(params: Record<string, any>) {
* @returns
*/
export function addVersion(params: Record<string, any>) {
return request.post('applet/version', params, {showSuccessMessage: true})
return request.post('applet/version', params, { showSuccessMessage: true })
}
/**
@ -60,12 +94,12 @@ export function addVersion(params: Record<string, any>) {
* @returns
*/
export function getVersionList(params: Record<string, any>) {
return request.get('applet/version', {params})
return request.get('applet/version', { params })
}
/**
*
* @param params
* @param id
* @returns
*/
export function getVersionInfo(id: string) {
@ -78,23 +112,14 @@ export function getVersionInfo(id: string) {
* @returns
*/
export function editVersion(params: Record<string, any>) {
return request.put(`applet/version/${params.id}`, params, {showSuccessMessage: true})
return request.put(`applet/version/${params.id}`, params, { showSuccessMessage: true })
}
/**
*
* @param params
* @param id
* @returns
*/
export function deleteVersion(id: string) {
return request.delete(`applet/version/${id}`)
}
/**
*
* @param params
* @returns
*/
export function versionDown(id: string) {
return request.get(`applet/version/download/${id}`, { "responseType": "blob" })
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 363 B

View File

Before

Width:  |  Height:  |  Size: 54 KiB

After

Width:  |  Height:  |  Size: 54 KiB

View File

Before

Width:  |  Height:  |  Size: 156 KiB

After

Width:  |  Height:  |  Size: 156 KiB

View File

Before

Width:  |  Height:  |  Size: 907 B

After

Width:  |  Height:  |  Size: 907 B

View File

Before

Width:  |  Height:  |  Size: 544 B

After

Width:  |  Height:  |  Size: 544 B

View File

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

Before

Width:  |  Height:  |  Size: 455 B

After

Width:  |  Height:  |  Size: 455 B

View File

Before

Width:  |  Height:  |  Size: 843 B

After

Width:  |  Height:  |  Size: 843 B

View File

Before

Width:  |  Height:  |  Size: 108 KiB

After

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

Before

Width:  |  Height:  |  Size: 655 KiB

After

Width:  |  Height:  |  Size: 655 KiB

View File

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

Before

Width:  |  Height:  |  Size: 7.8 KiB

After

Width:  |  Height:  |  Size: 7.8 KiB

View File

Before

Width:  |  Height:  |  Size: 78 KiB

After

Width:  |  Height:  |  Size: 78 KiB

View File

Before

Width:  |  Height:  |  Size: 88 KiB

After

Width:  |  Height:  |  Size: 88 KiB

View File

Before

Width:  |  Height:  |  Size: 673 B

After

Width:  |  Height:  |  Size: 673 B

View File

Before

Width:  |  Height:  |  Size: 605 B

After

Width:  |  Height:  |  Size: 605 B

View File

Before

Width:  |  Height:  |  Size: 392 B

After

Width:  |  Height:  |  Size: 392 B

View File

Before

Width:  |  Height:  |  Size: 897 B

After

Width:  |  Height:  |  Size: 897 B

View File

Before

Width:  |  Height:  |  Size: 8.2 KiB

After

Width:  |  Height:  |  Size: 8.2 KiB

View File

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

View File

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

Before

Width:  |  Height:  |  Size: 6.2 KiB

After

Width:  |  Height:  |  Size: 6.2 KiB

View File

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

Before

Width:  |  Height:  |  Size: 8.0 KiB

After

Width:  |  Height:  |  Size: 8.0 KiB

View File

Before

Width:  |  Height:  |  Size: 773 B

After

Width:  |  Height:  |  Size: 773 B

View File

Before

Width:  |  Height:  |  Size: 550 B

After

Width:  |  Height:  |  Size: 550 B

View File

Before

Width:  |  Height:  |  Size: 8.0 KiB

After

Width:  |  Height:  |  Size: 8.0 KiB

View File

Before

Width:  |  Height:  |  Size: 8.3 KiB

After

Width:  |  Height:  |  Size: 8.3 KiB

View File

Before

Width:  |  Height:  |  Size: 157 B

After

Width:  |  Height:  |  Size: 157 B

View File

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

View File

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 588 B

View File

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

View File

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 19 KiB

View File

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

View File

Before

Width:  |  Height:  |  Size: 44 KiB

After

Width:  |  Height:  |  Size: 44 KiB

View File

Before

Width:  |  Height:  |  Size: 8.4 KiB

After

Width:  |  Height:  |  Size: 8.4 KiB

View File

Before

Width:  |  Height:  |  Size: 47 KiB

After

Width:  |  Height:  |  Size: 47 KiB

View File

Before

Width:  |  Height:  |  Size: 113 KiB

After

Width:  |  Height:  |  Size: 113 KiB

View File

Before

Width:  |  Height:  |  Size: 1.7 MiB

After

Width:  |  Height:  |  Size: 1.7 MiB

View File

Before

Width:  |  Height:  |  Size: 163 KiB

After

Width:  |  Height:  |  Size: 163 KiB

View File

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 32 KiB

View File

Before

Width:  |  Height:  |  Size: 87 KiB

After

Width:  |  Height:  |  Size: 87 KiB

View File

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

Before

Width:  |  Height:  |  Size: 127 KiB

After

Width:  |  Height:  |  Size: 127 KiB

View File

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

View File

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

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