From 3c81381352a2e4a35d9db96e65875b258eff770f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=AD=A6=E6=9D=BE?= <599194993@qq.com>
Date: Mon, 28 Aug 2023 18:38:40 +0800
Subject: [PATCH] fix bug & update document
---
QUICK.md | 757 ------------
README.md | 29 +-
RELEASE.sh | 12 +-
SECURITY.md | 6 -
VERSION.md | 87 --
_RELEASE.md | 4 -
doc/en/QUICK_en.md | 695 -----------
doc/en/README_en.md | 209 ----
docs/.gitignore | 4 -
docs/docs/.vitepress/config.js | 73 --
docs/docs/config.md | 1099 -----------------
docs/docs/custom.md | 41 -
docs/docs/en/config.md | 969 ---------------
docs/docs/en/index.md | 26 -
docs/docs/index.md | 26 -
docs/docs/public/images/QQ2.jpg | Bin 211057 -> 0 bytes
"docs/docs/public/images/QQ\347\276\244.jpg" | Bin 119665 -> 0 bytes
docs/docs/public/images/alipay_qrcode.png | Bin 95305 -> 0 bytes
docs/docs/public/images/hero.png | Bin 515851 -> 0 bytes
docs/docs/public/images/layer.png | Bin 426595 -> 0 bytes
docs/docs/public/images/logo.png | Bin 15459 -> 0 bytes
docs/docs/public/images/pay.png | Bin 29818 -> 0 bytes
docs/docs/public/images/qrcode.jpeg | Bin 118042 -> 0 bytes
.../images/\344\270\273\351\241\265.png" | Bin 325689 -> 0 bytes
...7\346\215\242\344\270\273\351\242\230.png" | Bin 297218 -> 0 bytes
.../\345\210\227\350\241\250\351\241\265.png" | Bin 347904 -> 0 bytes
...6\347\240\201\344\277\256\346\224\271.png" | Bin 360205 -> 0 bytes
.../\346\225\260\346\215\256\351\241\265.png" | Bin 515851 -> 0 bytes
...3\345\275\225\347\225\214\351\235\242.png" | Bin 214591 -> 0 bytes
.../\347\274\226\350\276\221\351\241\265.png" | Bin 265995 -> 0 bytes
...7\344\275\223\345\244\247\345\260\217.png" | Bin 301537 -> 0 bytes
docs/package.json | 15 -
i18n.md | 13 -
releases/2021.10.15.md | 5 -
releases/2021.11.5.md | 5 -
releases/2021.8.16.md | 6 -
releases/2021.8.17.md | 7 -
releases/2022.1.md | 5 -
releases/2022.2.16.md | 4 -
releases/2022.2.md | 3 -
releases/2022.3.1.md | 3 -
releases/2022.3.13.md | 3 -
simpleui/__init__.py | 2 +-
43 files changed, 14 insertions(+), 4094 deletions(-)
delete mode 100644 QUICK.md
delete mode 100644 SECURITY.md
delete mode 100644 VERSION.md
delete mode 100644 _RELEASE.md
delete mode 100644 doc/en/QUICK_en.md
delete mode 100644 doc/en/README_en.md
delete mode 100644 docs/.gitignore
delete mode 100644 docs/docs/.vitepress/config.js
delete mode 100644 docs/docs/config.md
delete mode 100644 docs/docs/custom.md
delete mode 100644 docs/docs/en/config.md
delete mode 100644 docs/docs/en/index.md
delete mode 100644 docs/docs/index.md
delete mode 100644 docs/docs/public/images/QQ2.jpg
delete mode 100644 "docs/docs/public/images/QQ\347\276\244.jpg"
delete mode 100644 docs/docs/public/images/alipay_qrcode.png
delete mode 100644 docs/docs/public/images/hero.png
delete mode 100644 docs/docs/public/images/layer.png
delete mode 100644 docs/docs/public/images/logo.png
delete mode 100644 docs/docs/public/images/pay.png
delete mode 100644 docs/docs/public/images/qrcode.jpeg
delete mode 100644 "docs/docs/public/images/\344\270\273\351\241\265.png"
delete mode 100644 "docs/docs/public/images/\345\210\207\346\215\242\344\270\273\351\242\230.png"
delete mode 100644 "docs/docs/public/images/\345\210\227\350\241\250\351\241\265.png"
delete mode 100644 "docs/docs/public/images/\345\257\206\347\240\201\344\277\256\346\224\271.png"
delete mode 100644 "docs/docs/public/images/\346\225\260\346\215\256\351\241\265.png"
delete mode 100644 "docs/docs/public/images/\347\231\273\345\275\225\347\225\214\351\235\242.png"
delete mode 100644 "docs/docs/public/images/\347\274\226\350\276\221\351\241\265.png"
delete mode 100644 "docs/docs/public/images/\350\256\276\347\275\256\345\255\227\344\275\223\345\244\247\345\260\217.png"
delete mode 100644 docs/package.json
delete mode 100644 i18n.md
delete mode 100644 releases/2021.10.15.md
delete mode 100644 releases/2021.11.5.md
delete mode 100644 releases/2021.8.16.md
delete mode 100644 releases/2021.8.17.md
delete mode 100644 releases/2022.1.md
delete mode 100644 releases/2022.2.16.md
delete mode 100644 releases/2022.2.md
delete mode 100644 releases/2022.3.1.md
delete mode 100644 releases/2022.3.13.md
diff --git a/QUICK.md b/QUICK.md
deleted file mode 100644
index bfe2b812..00000000
--- a/QUICK.md
+++ /dev/null
@@ -1,757 +0,0 @@
-simpleui 快速上手指南
------
-有很多同学会误解simpleui,认为下载、安装simpleui后,启动就可以直接使用。但是simpleui是在django的基础上进行优化的,所以请先自行用命令行、IDE[创建一个django项目](#创建一个django项目),然后[修改默认后台模板为simpleui](#修改默认后台模板为simpleui)
-
-在开始入门之前,请花1分钟了解下[settings.py](#settingspy-找不到)文件,
-它在接下来的过程中尤为重要。
-
-# 入门指引
- + [创建一个django项目](#创建一个django项目)
- + [修改默认后台模板为simpleui](#修改默认后台模板为simpleui)
- + [克隆静态文件到根目录](#克隆静态文件到根目录)
- + [启动项目查看效果](#启动项目查看效果)
- + [如何下载这个模版](#如何下载这个模版)
- + [切换主题](#切换主题)
- + [图标说明](#图标说明)
- + [关闭登录页粒子动画](#关闭登录页粒子动画)
-# 进阶指南
- + [默认主题](#默认主题)
- + [自定义主题](#自定义主题)
- + [修改首页图标](#修改默认图标)
- + [修改默认首页](#修改默认首页)
- + [修复首页跳转地址](#修复首页跳转地址)
- + [修改LOGO](#修改LOGO)
- + [配置首页模块](#配置首页模块)
- + [服务器信息](#服务器信息)
- + [快速操作](#快速操作)
- + [最近动作](#最近动作)
- + [使用分析](#使用分析)
- + [菜单](#菜单)
- + [自定义菜单](#自定义菜单)
- + [默认图标](#默认图标)
- + [自定义图标](#自定义图标)
-
- + [修改模板](#修改模板)
- + [开发调试](#开发调试)
- + [源码安装到本地](#源码安装到本地)
- + [重写页面](#重写页面)
- + [头部添加自定义代码](#头部添加自定义代码)
- + [底部添加自定义代码](#底部添加自定义代码)
- + [自定义按钮](#自定义按钮)
- + [离线模式](#离线模式)
- + [关闭Loading遮罩层](#关闭Loading遮罩层)
- + [admindoc](#admindoc)
-# 常见问题
- + [settings.py](#settingspy-找不到)
- + [python版本问题](#python版本问题)
- + [无法启动](#无法启动)
- + [样式正常加载显示不正常](#样式正常加载显示不正常)
-
----
-
-## 创建一个django项目
-
-django官方中文教程[https://docs.djangoproject.com/zh-hans/2.0/intro/tutorial01/](https://docs.djangoproject.com/zh-hans/2.0/intro/tutorial01/)
-
-## 修改默认后台模板为simpleui
-
- 我们只需要在项目中的settings.py文件中加入一行simpleui即可。
-
- 举个例子🌰:
- ```python
- # Application definition
-
- INSTALLED_APPS = [
- 'simpleui',
- 'django.contrib.admin',
- 'django.contrib.auth',
- 'django.contrib.contenttypes',
- 'django.contrib.sessions',
- 'django.contrib.messages',
- 'django.contrib.staticfiles',
- ...
- ]
- ```
- 如果关闭debug模式后,会出现静态资源无法访问,请查看[克隆静态文件到根目录](#克隆静态文件到根目录)
-
-## 克隆静态文件到根目录
-熟悉django的同学会了解,django有个神奇的模式叫做debug模式,默认是开启的,在settings.py中
-```python
-# SECURITY WARNING: don't run with debug turned on in production!
-DEBUG = True
-```
-关闭后可以有两种办法解决静态资源无法访问的情况
-1. 在settings.py中加入:
-```python
- STATICFILES_DIRS = [
- os.path.join(BASE_DIR, "static"),
- ]
-```
-2. 克隆静态资源到项目的静态目录,然后交由nginx处理
-```shell
- python3 manage.py collectstatic
-```
-如果克隆报错提示找不到静态目录,请先在settings.py指定静态目录
-```python
- STATIC_ROOT = os.path.join(BASE_DIR, "static")
-```
-
-## 启动项目查看效果
-在settings.py中成功加入simpleui后,运行命令:
-```shell
- python manage.py runserver 8000
-```
-浏览器中输入:http://127.0.0.1:8000/admin
-如果发现登录页和之前有所不同,那么就可以恭喜你,成功安装simpleui!接下来开始享受simpleui吧。
-
-## 如何下载这个模版
-目前暂时无法下载模板,不过我们计划推出simple-admin,纯html的模板,可以让更多语言使用。
-
-## 切换主题
-目前simpleui 内置28个流行样式风格的主题。后续随着版本的更新,会加入更多的主题。
-
-## 图标说明
-simpleui中显示的图标 可以参考[fontawesome](https://fontawesome.com/icons?d=gallery)的图标,只需要将完整的class名填入即可。
-
-## 关闭登录页粒子动画
-在项目的settings.py中加入
-```python
-SIMPLEUI_LOGIN_PARTICLES = False
-```
-粒子动画默认开启
-
-## 默认主题
-
-默认主题在settings.py中进行配置
-
-```python
-# 指定simpleui默认的主题,指定一个文件名,相对路径就从simpleui的theme目录读取
-SIMPLEUI_DEFAULT_THEME = 'admin.lte.css'
-```
-
-### 主题列表:
-
-> 取对应的file即可设置成默认主题
-
-```javascript
-var SimpleuiThemes = [
- {
- text: "Default",
- menu: 'rgb(48, 65, 86)',
- logo: 'rgb(48, 65, 86)',
- top: '#FFF'
- },
- {
- text: "Simpleui-x",
- menu: '#2c2e39',
- logo: '#2c2e39',
- top: '#FFF',
- file: "simpleui.css"
- },
- {
- text: "Element-UI",
- file: "element.css",
- top: '#447eff',
- menu: '#FFf',
- logo: '#FFF'
- },
- {
- text: "layui",
- file: "layui.css",
- menu: '#393D49',
- logo: '#23262E',
- top: '#23262E'
- }, {
- text: "Ant Design Pro",
- file: "ant.design.css",
- menu: '#000b16',
- logo: '#002140',
- top: '#FFF'
- }, {
- text: "Admin LTE",
- file: "admin.lte.css",
- top: '#3c8dbc',
- logo: '#3c8dbc',
- menu: '#2b3539'
- }, {
- text: "Highdmin",
- file: "highdmin.css",
- top: '#02c0ce',
- menu: '#e0e0e0',
- logo: '#02c0ce'
- }, {
- text: "Aircraft",
- file: "aircraft.css",
- top: '-webkit-gradient(linear, left bottom, left top, color-stop(0, #4d5b76), color-stop(1, #6f80a1)) !important',
- menu: '#e0e0e0',
- logo: '-webkit-gradient(linear, left bottom, left top, color-stop(0, #4d5b76), color-stop(1, #6f80a1)) !important'
- }, {
- text: "Purple",
- file: "purple.css",
- top: '#FFF',
- logo: '#FFF',
- menu: '#3e4295'
- }, {
- text: "Gray",
- file: "gray.css",
- top: '#213a53',
- logo: '#213a53',
- menu: '#e0e0e0'
- },
- {
- text: "Dark green",
- file: "dark.green.css",
- top: '#f3f3f4',
- menu: '#283846',
- logo: '#283846'
- },
- {
- text: "Orange",
- file: "orange.css",
- top: 'linear-gradient(to right bottom, #da8342, #e45131)',
- logo: 'linear-gradient(to right bottom, #da8342, #e45131)',
- menu: '#FFF'
- },
- {
- text: "Black",
- file: "black.css",
- top: "#333",
- logo: "#333",
- menu: '#FFF'
- },
- {
- text: "Green",
- file: "green.css",
- top: '#19a97b',
- logo: '#FFF',
- menu: '#FFF'
- },
- {
- text: "Light",
- file: "light.css",
- top: "#ebf1f5",
- logo: "#ebf1f5",
- menu: "#ebf1f5"
- }, {
- text: 'Enterprise blue',
- file: 'e-blue.css',
- top: '#3ba1df',
- logo: '#3ba1df',
- menu: '#FFF'
- }, {
- text: 'Enterprise blue pro',
- file: 'e-blue-pro.css',
- top: '#3ba1df',
- logo: '#3ba1df',
- menu: 'rgb(38, 50, 56)'
- }, {
- text: 'Enterprise green',
- file: 'e-green.css',
- top: '#27ad60',
- logo: '#27ad60',
- menu: '#FFF'
- }, {
- text: 'Enterprise green pro',
- file: 'e-green-pro.css',
- top: '#27ad60',
- logo: '#27ad60',
- menu: 'rgb(38, 50, 56)'
- }, {
- text: 'Enterprise red',
- file: 'e-red.css',
- top: '#c9333e',
- logo: '#c9333e',
- menu: '#FFF'
- }, {
- text: 'Enterprise red pro',
- file: 'e-red-pro.css',
- top: '#c9333e',
- logo: '#c9333e',
- menu: 'rgb(38, 50, 56)'
- }, {
- text: 'Enterprise purple',
- file: 'e-purple.css',
- top: '#8263b1',
- logo: '#8263b1',
- menu: '#FFF'
- }, {
- text: 'Enterprise purple pro',
- file: 'e-purple-pro.css',
- top: '#8263b1',
- logo: '#8263b1',
- menu: 'rgb(38, 50, 56)'
- }, {
- text: 'Enterprise black',
- file: 'e-black.css',
- top: '#1f2c39',
- logo: '#1f2c39',
- menu: '#FFF'
- }, {
- text: 'Enterprise black pro',
- file: 'e-black-pro.css',
- top: '#1f2c39',
- logo: '#1f2c39',
- menu: 'rgb(38, 50, 56)'
- }, {
- text: 'x-green',
- file: 'x-green.css',
- top: '#2F9688',
- logo: '#2F9688',
- menu: 'rgb(38, 50, 56)'
- }, {
- text: 'x-red',
- file: 'x-red.css',
- top: '#AA3130',
- logo: 'rgb(38, 50, 56)',
- menu: 'rgb(38, 50, 56)'
- }, {
- text: 'x-blue',
- file: 'x-blue.css',
- top: '#FFF',
- logo: '#1E9FFF',
- menu: 'rgb(38, 50, 56)'
- }
-]
-```
-
-## 自定义主题
-在自定义主题之前,请先把simpleui的静态资源克隆到根目录。然后找到theme
-theme.js 就是用于配置主题列表
-
-按该文件中的格式配置即可
-
-```javascript
-var SimpleuiThemes = [
- {
- "text": "Default"
- },
- {
- "text": "Simpleui-x",
- "file": "simpleui.css"
- },
- .....
-]
-```
-
-在增加你的样式之前,请先了解less如何使用。
-
-这是admin.lte.less的例子
-```css
-@import "base";
-
-@primary: #2096c8 !important;
-@color: white;
-
-@menu-color: #8aa4af !important;
-@menu-background: #2b3539 !important;
-
-@menu-color-hover: #FFF;
-@menu-background-hover: #1f272b;
-
-@menu-title-color: #FFF;
-@menu-title-background-color: #212c32;
-
-@menu-title-color-hover: #FFF;
-@menu-title-background-color-hover: #1f272b;
-
-
-@navbar-color: #fff;
-@navbar-background: #3c8dbc;
-```
-他将会编译为admin.lte.css
-需要安装less
-```shell
-npm install less -g
-
-lessc admin.lte.less>admin.lte.css
-```
-
-## 修改默认图标
-django内置的认证与授权以及关联的用户、组,都已经默认配置了一个图标。后续自定义的app将会是默认图标,需要自行在settings.py文件中进行配置
-1.
-
-## 修改默认首页
-simpleui内置了一个默认的首页,只是由简单的快捷导航与最近操作组成。
-
-在自己项目的settings.py中加入:
-
-+ 首页配置
-> SIMPLEUI_HOME_PAGE = 'https://www.baidu.com'
-+ 首页标题
-> SIMPLEUI_HOME_TITLE = '百度一下你就知道'
-+ 首页图标,支持element-ui和fontawesome的图标,参考https://fontawesome.com/icons图标
-> SIMPLEUI_HOME_ICON = 'fa fa-user'
-
-三项配置都是选填,不填都会有默认值。 [图标列表](https://fontawesome.com/icons)
-
-## 修复首页跳转地址
-首页顶部首页图标默认跳转地址为/,即根目录。如果需要自定义,请在项目的settings.py中加入设置:
-
-```python
-# 设置simpleui 点击首页图标跳转的地址
-SIMPLEUI_INDEX = 'https://www.88cto.com'
-```
-
-可以设置相对与绝对路径。该地址并无特殊之处,将会调用window.open直接打开该地址。
-
-
-## 修改LOGO
-+ 自定义SIMPLEUI的Logo
-> SIMPLEUI_LOGO = 'https://avatars2.githubusercontent.com/u/13655483?s=60&v=4'
-
-## 配置首页模块
-首页默认展示3个模块,服务器信息、快速操作、最近动作,大家可以根据需要来显示或者隐藏某些模块。
-### 服务器信息
-隐藏:
-> SIMPLEUI_HOME_INFO = False
-
-显示:
-> SIMPLEUI_HOME_INFO = True
-
-### 快速操作
-
-隐藏:
-> SIMPLEUI_HOME_QUICK = False
-
-显示:
-> SIMPLEUI_HOME_QUICK = True
-
-### 最近动作
-
-隐藏:
-> SIMPLEUI_HOME_ACTION = False
-
-显示:
-> SIMPLEUI_HOME_ACTION = True
-
-## 使用分析
-`默认开启,统计分析信息只是为了更好的帮助simpleui改进,并不会读取敏感信息。并且分析数据不会分享至任何第三方。`
-> SIMPLEUI_ANALYSIS = False
-
-|值|说明|
-|--|--|
-|True|收集分析,一天只上报一次分析数据。默认为True|
-|False|不收集分析信息|
-
-## 菜单
-
-### 自定义菜单
-
-#### system_keep 保留系统菜单
-该字段用于告诉simpleui,是否需要保留系统默认的菜单,默认为False,不保留。
-如果改为True,自定义和系统菜单将会并存
-
-#### menu_display 过滤显示菜单和排序功能
-该字段用于告诉simpleui,是否需要开启过滤显示菜单和排序功能。
-默认可以不用填写,缺省配置为默认排序,不对菜单进行过滤和排序。
-开启认为传一个列表,如果列表为空,则什么也不显示。列表中的每个元素要对应到menus里面的name字段
-
-#### dynamic 开启动态菜单功能
-该字段用于告诉simpleui,是否需要开启动态菜单功能。
-默认可以不用填写,缺省配置为False,不开启动态菜单功能。
-开启为True,开启后,每次用户登陆都会刷新左侧菜单配置。
-需要注意的是:开启后每次访问admin都会重读配置文件,所以会带来额外的消耗。
-
-#### menus说明
-
-|字段|说明|
-|---|---|
-|name|菜单名|
-|icon|图标,参考element-ui和fontawesome图标|
-|url|链接地址,绝对或者相对,如果存在models字段,将忽略url|
-|models|子菜单|
-
-#### 例子
-```python
-import time
-SIMPLEUI_CONFIG = {
- 'system_keep': False,
- 'menu_display': ['Simpleui', '测试', '权限认证', '动态菜单测试'], # 开启排序和过滤功能, 不填此字段为默认排序和全部显示, 空列表[] 为全部不显示.
- 'dynamic': True, # 设置是否开启动态菜单, 默认为False. 如果开启, 则会在每次用户登陆时动态展示菜单内容
- 'menus': [{
- 'name': 'Simpleui',
- 'icon': 'fas fa-code',
- 'url': 'https://gitee.com/tompeppa/simpleui'
- }, {
- 'app': 'auth',
- 'name': '权限认证',
- 'icon': 'fas fa-user-shield',
- 'models': [{
- 'name': '用户',
- 'icon': 'fa fa-user',
- 'url': 'auth/user/'
- }]
- }, {
- 'name': '测试',
- 'icon': 'fa fa-file',
- 'models': [{
- 'name': 'Baidu',
- 'url': 'http://baidu.com',
- 'icon': 'far fa-surprise'
- }, {
- 'name': '内网穿透',
- 'url': 'https://www.wezoz.com',
- 'icon': 'fab fa-github'
- }]
- }, {
- 'name': '动态菜单测试' ,
- 'icon': 'fa fa-desktop',
- 'models': [{
- 'name': time.time(),
- 'url': 'http://baidu.com',
- 'icon': 'far fa-surprise'
- }]
- }]
-}
-```
-
-如果SIMPLEUI_CONFIG中存在menus字段,将会覆盖系统默认菜单。并且menus中输出的菜单不会受权限控制。
-
-### 默认图标
-simpleui对所有菜单提供了一个默认的file图标,是为了统一风格。也许你并不喜欢,你可以选择关闭默认图标
-
->SIMPLEUI_DEFAULT_ICON = False
-
-|值|说明|
-|--|--|
-|True|开启默认图标,默认为True|
-|False|关闭默认图标|
-
-### 自定义图标
-simpleui仅为系统默认模块提供了图标,如果要为其他模块指定图标,可以自定义配置。图标参考请查阅:[图标说明](#图标说明)
-
-优先级:
-自定义->系统配图->默认图标
-
->注:simpleui 原则上不涉及代码,所以采用setting方式。后续可考虑扩展Model的 Meta class 进行配置图标
-
-|字段|说明|
-|---|---|
-|name|模块名字,请注意不是model的命名,而是菜单栏上显示的文本,因为model是可以重复的,会导致无法区分|
-|icon|图标|
-例子:
-```
-SIMPLEUI_ICON = {
- '系统管理': 'fab fa-apple',
- '员工管理': 'fas fa-user-tie'
-}
-
-```
-
-## 修改模板
-在simpleui的基础上修改模板需要对django有一定了解
-1. 先把simpleui克隆到静态目录下,参考[克隆静态文件到根目录](#克隆静态文件到根目录)
-2. 找到静态目录下的admin目录,里面就是simpleui的模板,直接修改相关html页面即可生效。
-
-## 开发调试
-如果想在simpleui的基础上进行一些修改,可以参考以下步骤
-1. 安装simpleui到项目中
-2. 找到simpleui的目录,然后删除
-3. 克隆simpleui源码到本地
-4. Linux、Unix、macOS环境下用软连接的方式,把项目依赖包中的simpleui目录指定到源码的simpleui目录
- ```shell
- ln -s 源文件 目标文件
- ```
-5. windows环境下请右键创建快捷方式
-
-接下来就可以修改、发布simpleui了。如有疑问请加入QQ群:786576510
-## 源码安装到本地
-+ 克隆源码本地安装
-```shell
-git clone https://github.com/newpanjing/simpleui
-cd simpleui
-python setup.py sdist install
-```
-后续步骤请参考[修改默认后台模板为simpleui](#修改默认后台模板为simpleui)
-
-## 重写页面
-
-例如重写首页,在templates目录中新建admin文件夹,然后添加index.html
-如果选择继承方式,就只能采用block
-代码如下:
-
-```html
- {% extends 'admin/index.html' %}
- {% load static %}
-
- {% block head %}
- {{ block.super }}
- ..此处写你的代码
- {% endblock %}
-
- {% block script %}
- {{ block.super }}
- ..此处写你的代码
- {% endblock %}
-```
-
-如果是想全部重写:
-
-```html
-
-
- 完全自定义
-
-
- 这里你是自定义的html代码
-
-
-```
-## 头部添加自定义代码
-```html
- {% extends 'admin/index.html' %}
- {% load static %}
-
- {% block head %}
- {{ block.super }}
- ..此处写你的代码
- {% endblock %}
-```
-## 底部添加自定义代码
-```html
- {% extends 'admin/index.html' %}
- {% load static %}
-
- {% block script %}
- {{ block.super }}
- ..此处写你的代码
- {% endblock %}
-```
-
-## 自定义按钮
-> 需要在2.1.2以上版本生效
-
-django admin 默认提供了自定义按钮的支持,但是样式、图标均不可自定义,simpleui在django admin 自定义action的基础上增加了样式、图标、按钮类型自定义。
-
-代码:
-```python
- @admin.register(Employe)
-class EmployeAdmin(admin.ModelAdmin):
- list_display = ('id', 'name', 'gender', 'idCard', 'phone', 'birthday', 'department', 'enable', 'create_time')
-
- # 增加自定义按钮
- actions = ['make_copy', 'custom_button']
-
- def custom_button(self, request, queryset):
- pass
-
- # 显示的文本,与django admin一致
- custom_button.short_description = '测试按钮'
- # icon,参考element-ui icon与https://fontawesome.com
- custom_button.icon = 'fas fa-audio-description'
-
- # 指定element-ui的按钮类型,参考https://element.eleme.cn/#/zh-CN/component/button
- custom_button.type = 'danger'
-
- # 给按钮追加自定义的颜色
- custom_button.style = 'color:black;'
-
- def make_copy(self, request, queryset):
- pass
- make_copy.short_description = '复制员工'
-```
-该配置与原生admin兼容。
-### 字段:
-
-|字段|说明|
-|------|------|
-|icon|按钮图标,参考https://element.eleme.cn/#/zh-CN/component/icon与https://fontawesome.com,把class 复制进来即可|
-|type|按钮类型,参考:https://element.eleme.cn/#/zh-CN/component/button|
-|style|自定义css样式|
-|confirm|弹出确认框,在3.4或以上版本中生效|
-
-+ confirm 例子
-
-```python
- def message_test(self, request, queryset):
- messages.add_message(request, messages.SUCCESS, '操作成功123123123123')
-
- # 给按钮增加确认
- message_test.confirm = '你是否执意要点击这个按钮?'
-```
-
-
-
-+ 链接按钮
-
-> 在2.9或以上版本中生效
-
-|字段|说明|
-|------|------|
-|action_type|按钮动作类型,0=当前页内打开,1=新tab打开,2=浏览器tab打开|
-|action_url|按钮访问链接|
-
-demo:
-```python
- # 增加自定义按钮
- actions = ['custom_button']
-
- def custom_button(self, request, queryset):
- pass
-
- # 显示的文本,与django admin一致
- custom_button.short_description = '测试按钮'
- # icon,参考element-ui icon与https://fontawesome.com
- custom_button.icon = 'fas fa-audio-description'
-
- # 指定element-ui的按钮类型,参考https://element.eleme.cn/#/zh-CN/component/button
- custom_button.type = 'danger'
-
- # 给按钮追加自定义的颜色
- custom_button.style = 'color:black;'
-
- # 链接按钮,设置之后直接访问该链接
- # 3中打开方式
- # action_type 0=当前页内打开,1=新tab打开,2=浏览器tab打开
- # 设置了action_type,不设置url,页面内将报错
- # 设置成链接类型的按钮后,custom_button方法将不会执行。
-
- custom_button.action_type = 0
- custom_button.action_url = 'http://www.baidu.com'
-
-```
-
-
-## 离线模式
-> 在2.1.3或以上的版本中生效
-在settings.py中加入
-```python
-SIMPLEUI_STATIC_OFFLINE = True
-```
-指定simpleui 是否以脱机模式加载静态资源,为True的时候将默认从本地读取所有资源,即使没有联网一样可以。适合内网项目
-
- 不填该项或者为False的时候,默认从第三方的cdn获取
-## 关闭Loading遮罩层
-> 在2.1.5或以上的版本中生效
-
-在settings.py中加入
-```python
-SIMPLEUI_LOADING = False
-```
-True或None 默认显示加载遮罩层,指定为False 不显示遮罩层。默认显示
-
-## admindoc
-admindoc需要simpleui 3.3+ 版本
-
-## 常见问题
- ### settings.py 找不到
-
- 这个文件是在自己创建的django项目中,不是在simpleui中。如果你熟悉django就会明白,如果不熟悉请先学习django。[django中文文档](https://docs.djangoproject.com/zh-hans/2.2/)
-
- ### python版本问题
-
- + 该项目推荐使用python3,python2.x可能会不兼容
- + 使用源码安装时如果出错,请指定python版本,python3 和 pip3
- ### 无法启动
- 可能由于某些未知的问题,导致项目无法启动,请不要放弃simpleui,你可以提[issue](https://github.com/newpanjing/simpleui/issues),或者直接加入QQ群:786576510,我们将协助解决。
-
- ### 样式正常加载显示不正常
- 在win8 系统中 可能会遇到,css以及其他文件全部正常加载,但是显示不正常。这是因为响应头为application/x-css,而不是text/css,造成浏览器不正常解析。
- #### 解决办法:
-1.运行cmd: 输入regedit 并回车
-
-2.在注册表HKEY_CLASSES_ROOT中找到.css 点击.css文件夹 修改Content Type 为 text/css
-
-参考连接:[https://blog.csdn.net/sun754276603/article/details/46989965](https://blog.csdn.net/sun754276603/article/details/46989965)
-
->其他更多问题,请提交[issues](https://github.com/newpanjing/simpleui/issues)给我们。
diff --git a/README.md b/README.md
index d71979b4..1ff5c25f 100644
--- a/README.md
+++ b/README.md
@@ -21,16 +21,16 @@ Django admin theme the simpleui
---
-中文 | English
+中文 | English
---
---
-社区 |
-文档 |
-Documents
+社区 |
+文档 |
+Documents
---
@@ -62,23 +62,8 @@ Django Admin默认界面设计语言存在着的一些不足,比如色彩单
+ QQ群号:873469913(满)
+ QQ群号:786576510(满)
-> 我们推荐在[Simple社区](https://simpleui.72wo.com)提问,方便以后大家有问题的时候直接查找。
+> 我们推荐在[猿堆堆社区](https://www.mldoo.com)提问,方便以后大家有问题的时候直接查找。
-## 社区APP
-
-为了让大家方便快捷的查找遇到的相关问题,我们开发了iOS与macOS的app
-
-+ macOS APP
-
-https://apps.apple.com/cn/app/simple%E7%A4%BE%E5%8C%BA/id1630714801?mt=12
-
-或者Mac App Store中搜索 `Simple社区`
-
-+ iOS APP
-
-https://apps.apple.com/cn/app/%E7%8C%BF%E5%A0%86%E5%A0%86/id6443633238
-
-或者iOS App Store中搜索 `猿堆堆`
## 专业版
> 如果免费版无法满足您的需求,我们还提供了一个功能更强大的pro版,可以满足更多的需求
@@ -87,7 +72,7 @@ https://apps.apple.com/cn/app/%E7%8C%BF%E5%A0%86%E5%A0%86/id6443633238
Demo:[https://www.mldoo.com/demo/simplepro](https://www.mldoo.com/demo/simplepro)
-官网:[https://simpleui.72wo.com/simplepro](https://www.mldoo.com/docs/simplepro)
+官网:[https://www.mldoo.com/simplepro](https://www.mldoo.com/docs/simplepro)
@@ -126,7 +111,7 @@ docker run -p 8080:8080 newpanjing/simpleui_demo
与suit是同类产品。我们是一个更符合国人审美和使用习惯的一个主题。
# 开始使用
-详细步骤请浏览 [使用文档](./QUICK.md)。 也可以参考[Demo](#在线Demo)
+详细步骤请浏览 [使用文档](https://newpanjing.github.io/simpleui_docs/config.html)。 也可以参考[Demo](#在线Demo)
+ 安装
```python
diff --git a/RELEASE.sh b/RELEASE.sh
index 33430bd6..3aa19e13 100644
--- a/RELEASE.sh
+++ b/RELEASE.sh
@@ -1,10 +1,10 @@
#!/usr/bin/env zsh
-#echo 'release django-simpleui...'
-#rm -rf dist/*
-#python3 setup.py sdist
-#twine upload dist/*
-#
-#echo 'release django-simpleui success.'
+echo 'release django-simpleui...'
+rm -rf dist/*
+python3 setup.py sdist
+twine upload dist/*
+
+echo 'release django-simpleui success.'
echo 'release simpleui...'
rm -rf dist/*
diff --git a/SECURITY.md b/SECURITY.md
deleted file mode 100644
index 04a8d6a6..00000000
--- a/SECURITY.md
+++ /dev/null
@@ -1,6 +0,0 @@
-# Security Policy
-
-## Reporting a Vulnerability
-
-1. Please report security issues to https://github.com/newpanjing/simpleui/security/advisories/new.
-2. Please also create a empty security issues for alerting me, as GitHub Advisory do not send a notification, I probably will miss without this. https://github.com/newpanjing/simpleui/issues/new?assignees=&labels=help&template=security.md
diff --git a/VERSION.md b/VERSION.md
deleted file mode 100644
index 50496700..00000000
--- a/VERSION.md
+++ /dev/null
@@ -1,87 +0,0 @@
-# 截止2023年03月18日
-
-如果您没有在下列版本中找到你所使用的,不代表simpleui不支持,您可以亲自尝试后报告给我们。
-
-## simpleui支持的django版本如下:
-
-| 版本号 |
-|---------|
-| 1.10.3 |
-| 1.10.5 |
-| 1.10.6 |
-| 1.11 |
-| 1.11.10 |
-| 1.11.11 |
-| 1.11.12 |
-| 1.11.13 |
-| 1.11.17 |
-| 1.11.18 |
-| 1.11.20 |
-| 1.11.3 |
-| 1.11.4 |
-| 1.11.6 |
-| 1.11.7 |
-| 1.11.8 |
-| 1.11.9 |
-| 1.8.5 |
-| 2.0 |
-| 2.0.1 |
-| 2.0.12 |
-| 2.0.13 |
-| 2.0.2 |
-| 2.0.4 |
-| 2.0.5 |
-| 2.0.6 |
-| 2.0.7 |
-| 2.0.8 |
-| 2.0.9 |
-| 2.1 |
-| 2.1.1 |
-| 2.1.2 |
-| 2.1.3 |
-| 2.1.4 |
-| 2.1.5 |
-| 2.1.7 |
-| 2.1.8 |
-| 2.2 |
-| 2.2.1 |
-| 3.x.x |
-| 4.x.x |
-
-## simpleui支持的python版本如下:
-
-| 版本号 |
-|-----------|
-| 2.7.0 |
-| 2.7.10 |
-| 2.7.13 |
-| 2.7.15 |
-| 2.7.15rc1 |
-| 2.7.16 |
-| 2.7.5 |
-| 3.4.5 |
-| 3.5.0 |
-| 3.5.2 |
-| 3.5.3 |
-| 3.5.4 |
-| 3.5.4rc1 |
-| 3.5.5 |
-| 3.5.6 |
-| 3.6.0 |
-| 3.6.1 |
-| 3.6.2 |
-| 3.6.3 |
-| 3.6.4 |
-| 3.6.4rc1 |
-| 3.6.5 |
-| 3.6.6 |
-| 3.6.7 |
-| 3.6.8 |
-| 3.7.0 |
-| 3.7.0a4 |
-| 3.7.1 |
-| 3.7.2 |
-| 3.8.x |
-| 3.9.x |
-| 3.10.x |
-| 3.11.x |
diff --git a/_RELEASE.md b/_RELEASE.md
deleted file mode 100644
index f4a9d29f..00000000
--- a/_RELEASE.md
+++ /dev/null
@@ -1,4 +0,0 @@
-+ rm -rf dist/*
-+ python3 setup.py sdist
-+ pip3 install twine
-+ twine upload dist/*
diff --git a/doc/en/QUICK_en.md b/doc/en/QUICK_en.md
deleted file mode 100644
index 1542fea8..00000000
--- a/doc/en/QUICK_en.md
+++ /dev/null
@@ -1,695 +0,0 @@
-simpleui Quick Start Guide
------
-Many people will misunderstand **simpleui**. They think after downloading and installing **simpleui**, they can be used directly after startup. But **simpleui** is majorization on the basis of the **Django**. So, please [Create a Django project](#Create%2da%2dDjango%2dProject) using the command line or IDE, then [Modify the default template for simpleui](#Modify%2ddefault%2dtemplate%2dfor%2dsimpleui).
-
-Before starting,please take a minte to understand **settings.py**, because it's especially important in the next process.
-
-# Start Guide
- + [Create a Django project](#Create%2da%2dDjango%2dProject)
- + [Modify default template for simpleui](#Modify%2ddefault%2dtemplate%2dfor%2dsimpleui)
- + [Clone static file to the root](#Clone%2dstatic%2dfile%2dto%2dthe%2droot)
- + [Startup Project](#Startup%2dProject)
- + [How to download simpleui's template](#How%2dto%2ddownload%2dsimpleui's%2dtemplate)
- + [Switch Theme](#Switch%2dTheme)
- + [About Icons](#About%2dIcons)
-# Advance Guide
- + [Default Theme](#Default%2dTheme)
- + [Customize Theme](#Customize%2dTheme)
- + [Modify Default Icon](#Modify%2dDefault%2dIcon)
- + [Modify Default Home](#Modify%2dDefault%2dHome)
- + [Modify Home Jump Address](#Modify%2dHome%2dJump%2dAddress)
- + [Modify LOGO](#Modify%2dLOGO)
- + [Configure Home Module](#Configure%2dHome%2dModule)
- + [Server Information](#Server%2dInformation)
- + [Quick Operation](#Quick%2dOperation)
- + [Recent Action](#Recent%2dAction)
- + [Use Analysis](#Use%2dAnalysis)
- + [Menu](#Menu)
- + [Customize Munu](#Customize%2dMunu)
- + [Default Icon](#Default%2dIcon)
- + [Customize Icon](#Customize%2dIcon)
-
- + [Modify Templates](#Modify%2dTemplates)
- + [Develop and Debug](#Develop%2dand%2dDebug)
- + [Source Code install to local](#Source%2dCode%2dinstall%2dto%2dlocal)
- + [ReWrite Page](#ReWrite%2dPage)
- + [Custom code to Header](#Custom%2dcode%2dto%2dHeader)
- + [Custom code to Footer](#Custom%2dcode%2dto%2dFooter)
- + [Custom Action](#Custom%2dAction)
- + [Offline](#Offline)
- + [Close Loading](#Close%2dLoading)
- + [admindoc](#admindoc)
-# Common Problems
- + [settings.py](#Not%2dfound%2dsettings.py)
- + [python version problem](#python%2dversion%2dproblem)
- + [Unable to Start](#Unable%2dto%2dStart)
- + [Style Normal Loading But Display Abnormal](#Style%2dNormal%2dLoading%2dBut%2dDisplay%2dAbnormal)
-
----
-
-## Create a Django Project
-
-Django Documentation:[https://docs.djangoproject.com/en/2.2/intro/tutorial01/](https://docs.djangoproject.com/en/2.2/intro/tutorial01/)
-
-## Modify default template for simpleui
-
- We only need to add a line of **simpleui** in the **settings.py** of the project.
-
- For example 🌰:
- ```python
- # Application definition
-
- INSTALLED_APPS = [
- 'simpleui',
- 'django.contrib.admin',
- 'django.contrib.auth',
- 'django.contrib.contenttypes',
- 'django.contrib.sessions',
- 'django.contrib.messages',
- 'django.contrib.staticfiles',
- ...
- ]
- ```
- If **DEBUG = False**, static resources will be inaccessible,please go to [Clone static file to the root](#Clone%2dstatic%2dfile%2dto%2dthe%2droot)
-
-## Clone static file to the root
-Django have a mode is **DEBUG**, it's in **settings.py**. Default **DEBUG = True**.
-```python
-# SECURITY WARNING: don't run with debug turned on in production!
-DEBUG = True
-```
-If **DEBUG = Fasle**, there are two ways to solve the situation that static resources can't be accessed.
-1. Modify **settings.py** , add following content:
-```python
- STATICFILES_DIRS = [
- os.path.join(BASE_DIR, "static"),
- ]
-```
-2. Clone static resources to the static directory of the project,then processed by **nginx**.
-```shell
- python3 manage.py collectstatic
-```
-If the clone error message indicates that the static directory could't be found,please open the **settings.py** and assign a static directory
-```python
- STATIC_ROOT = os.path.join(BASE_DIR, "static")
-```
-
-## Startup Project
-After successfully adding **simpleui** in **settings.py**,Run command:
-```shell
- python manage.py runserver 8000
-```
-Open browser, input:http://127.0.0.1:8000/admin
-if you find that the login page is different from before,Congratulations! You have successfully installed **simpleui**!Let's start enjoying **simpleui**!
-
-## How to download simpleui's template
-Currently unable to download templates,but we plan to launch **simple-admin's** html templates,can make more languages available.
-
-## Switch Theme
-Currently **simpleui** has 28 popular style themes. We will update more topics as the version is updated.
-
-## About Icons
-The icon displayed in **simpleui** can refer to the [fontawesome](https://fontawesome.com/icons?d=gallery) icon,just fill in the full class name.
-
-## Default Theme
-
-The default theme is configured in settings.py
-
-```python
-# Specify simpleui's default theme, specify a filename, and the relative path is read from simpleui's theme directory
-SIMPLEUI_DEFAULT_THEME = 'admin.lte.css'
-```
-
-### Theme List:
-
-> Take the corresponding file can be set as the default theme
-
-```javascript
-var SimpleuiThemes = [
- {
- text: "Default",
- menu: 'rgb(48, 65, 86)',
- logo: 'rgb(48, 65, 86)',
- top: '#FFF'
- },
- {
- text: "Simpleui-x",
- menu: '#2c2e39',
- logo: '#2c2e39',
- top: '#FFF',
- file: "simpleui.css"
- },
- {
- text: "Element-UI",
- file: "element.css",
- top: '#447eff',
- menu: '#FFf',
- logo: '#FFF'
- },
- {
- text: "layui",
- file: "layui.css",
- menu: '#393D49',
- logo: '#23262E',
- top: '#23262E'
- }, {
- text: "Ant Design Pro",
- file: "ant.design.css",
- menu: '#000b16',
- logo: '#002140',
- top: '#FFF'
- }, {
- text: "Admin LTE",
- file: "admin.lte.css",
- top: '#3c8dbc',
- logo: '#3c8dbc',
- menu: '#2b3539'
- }, {
- text: "Highdmin",
- file: "highdmin.css",
- top: '#02c0ce',
- menu: '#e0e0e0',
- logo: '#02c0ce'
- }, {
- text: "Aircraft",
- file: "aircraft.css",
- top: '-webkit-gradient(linear, left bottom, left top, color-stop(0, #4d5b76), color-stop(1, #6f80a1)) !important',
- menu: '#e0e0e0',
- logo: '-webkit-gradient(linear, left bottom, left top, color-stop(0, #4d5b76), color-stop(1, #6f80a1)) !important'
- }, {
- text: "Purple",
- file: "purple.css",
- top: '#FFF',
- logo: '#FFF',
- menu: '#3e4295'
- }, {
- text: "Gray",
- file: "gray.css",
- top: '#213a53',
- logo: '#213a53',
- menu: '#e0e0e0'
- },
- {
- text: "Dark green",
- file: "dark.green.css",
- top: '#f3f3f4',
- menu: '#283846',
- logo: '#283846'
- },
- {
- text: "Orange",
- file: "orange.css",
- top: 'linear-gradient(to right bottom, #da8342, #e45131)',
- logo: 'linear-gradient(to right bottom, #da8342, #e45131)',
- menu: '#FFF'
- },
- {
- text: "Black",
- file: "black.css",
- top: "#333",
- logo: "#333",
- menu: '#FFF'
- },
- {
- text: "Green",
- file: "green.css",
- top: '#19a97b',
- logo: '#FFF',
- menu: '#FFF'
- },
- {
- text: "Light",
- file: "light.css",
- top: "#ebf1f5",
- logo: "#ebf1f5",
- menu: "#ebf1f5"
- }, {
- text: 'Enterprise blue',
- file: 'e-blue.css',
- top: '#3ba1df',
- logo: '#3ba1df',
- menu: '#FFF'
- }, {
- text: 'Enterprise blue pro',
- file: 'e-blue-pro.css',
- top: '#3ba1df',
- logo: '#3ba1df',
- menu: 'rgb(38, 50, 56)'
- }, {
- text: 'Enterprise green',
- file: 'e-green.css',
- top: '#27ad60',
- logo: '#27ad60',
- menu: '#FFF'
- }, {
- text: 'Enterprise green pro',
- file: 'e-green-pro.css',
- top: '#27ad60',
- logo: '#27ad60',
- menu: 'rgb(38, 50, 56)'
- }, {
- text: 'Enterprise red',
- file: 'e-red.css',
- top: '#c9333e',
- logo: '#c9333e',
- menu: '#FFF'
- }, {
- text: 'Enterprise red pro',
- file: 'e-red-pro.css',
- top: '#c9333e',
- logo: '#c9333e',
- menu: 'rgb(38, 50, 56)'
- }, {
- text: 'Enterprise purple',
- file: 'e-purple.css',
- top: '#8263b1',
- logo: '#8263b1',
- menu: '#FFF'
- }, {
- text: 'Enterprise purple pro',
- file: 'e-purple-pro.css',
- top: '#8263b1',
- logo: '#8263b1',
- menu: 'rgb(38, 50, 56)'
- }, {
- text: 'Enterprise black',
- file: 'e-black.css',
- top: '#1f2c39',
- logo: '#1f2c39',
- menu: '#FFF'
- }, {
- text: 'Enterprise black pro',
- file: 'e-black-pro.css',
- top: '#1f2c39',
- logo: '#1f2c39',
- menu: 'rgb(38, 50, 56)'
- }, {
- text: 'x-green',
- file: 'x-green.css',
- top: '#2F9688',
- logo: '#2F9688',
- menu: 'rgb(38, 50, 56)'
- }, {
- text: 'x-red',
- file: 'x-red.css',
- top: '#AA3130',
- logo: 'rgb(38, 50, 56)',
- menu: 'rgb(38, 50, 56)'
- }, {
- text: 'x-blue',
- file: 'x-blue.css',
- top: '#FFF',
- logo: '#1E9FFF',
- menu: 'rgb(38, 50, 56)'
- }
-]
-```
-
-## Customize Theme
-Before customizing the theme, please clone the static resources of **simpleui** to the root directory. Then you need to find **theme.js**, it's used to configure the list of topics.
-
-Please configure in this format.
-
-```javascript
-var SimpleuiThemes = [
- {
- "text": "Default"
- },
- {
- "text": "Simpleui-x",
- "file": "simpleui.css"
- },
- .....
-]
-```
-
-Before adding your style, please understand how **less** to used.
-
-Example for **admin.lte.less**
-```css
-@import "base";
-
-@primary: #2096c8 !important;
-@color: white;
-
-@menu-color: #8aa4af !important;
-@menu-background: #2b3539 !important;
-
-@menu-color-hover: #FFF;
-@menu-background-hover: #1f272b;
-
-@menu-title-color: #FFF;
-@menu-title-background-color: #212c32;
-
-@menu-title-color-hover: #FFF;
-@menu-title-background-color-hover: #1f272b;
-
-
-@navbar-color: #fff;
-@navbar-background: #3c8dbc;
-```
-It will compile to **admin.lte.css**.
-You need to install **less**.
-```shell
-npm install less -g
-
-lessc admin.lte.less>admin.lte.css
-```
-
-## Modify Default Icon
-Django's built-in authentication and authorization and associated users and groups have been configured with an icon by default. Custom app will be the default icons and need to be configured in the **settings.py** file.
-
-## Modify Default Home
-**simpleui** has a default home page, which consists of quick navigation and recent operations.
-
-You can modify the default home page and add it to your project's **settings.py**:
-
-+ Home configuration
-> SIMPLEUI_HOME_PAGE = 'https://www.baidu.com'
-+ Home title
-> SIMPLEUI_HOME_TITLE = 'My Home Title'
-+ Home Icon,support `element-ui's` and `fontawesome's` icon,reference https://fontawesome.com/icons
-> SIMPLEUI_HOME_ICON = 'fa fa-user'
-
-The above three configurations are optional. If you don't fill, there will be default values. [Icon List](https://fontawesome.com/icons)
-
-## Modify Home Jump Address
-The top of the home page has a default jump address of /, this is root directory. If you need to customize, add some settings in your project's **settings.py**.
-
-```python
-# Configure simpleui Click the address of the home icon to jump.
-SIMPLEUI_INDEX = 'https://www.88cto.com'
-```
-
-Relative and absolute paths can be set. There is nothing special about this address, it will call **window.open** to open the address directly.
-
-
-## Modify LOGO
-+ Customize SIMPLEUI's Logo
-> SIMPLEUI_LOGO = 'https://avatars2.githubusercontent.com/u/13655483?s=60&v=4'
-
-## Config Home Module
-The home page displays three modules by default, server information, quick operation and recent actions. You can show or hide some modules as needed.
-### Server Information
-Hide:
-> SIMPLEUI_HOME_INFO = False
-
-Display:
-> SIMPLEUI_HOME_INFO = True
-
-### Quick Operation
-
-Hide:
-> SIMPLEUI_HOME_QUICK = False
-
-Display:
-> SIMPLEUI_HOME_QUICK = True
-
-### Recent Action
-
-Hide:
-> SIMPLEUI_HOME_ACTION = False
-
-Display:
-> SIMPLEUI_HOME_ACTION = True
-
-## Use Analysis
-`Default is True, statistical analysis information is only used to better help simpleui improvements, and doesn't read sensitive information. And the analysis data will not be shared with any third party.`
-> SIMPLEUI_ANALYSIS = False
-
-|Values|Description|
-|--|--|
-|True|Collect and analyze,report only one analysis data a day。Default is True|
-|False|Don't collect and analyze|
-
-## Menu
-
-### Customize Munu
-
-#### Keep system menu
-system_keep field is used to tell **simpleui**,whether you need to keep the system default menu, the default is False, don't keep.
-If changed to True,custom and system menus will coexist.
-
-#### Menus Description
-
-|Values|Description|
-|---|---|
-|name|Menu name|
-|icon|Icon,refer element-ui和fontawesome|
-|url|link address,absolute or relative, if there is a models field, the url will be ignored|
-|models|submenu|
-
-#### Example
-```python
-SIMPLEUI_CONFIG = {
- 'system_keep':False,
- 'menus': [{
- 'name': 'Simpleui',
- 'icon': 'fas fa-code',
- 'url': 'https://gitee.com/tompeppa/simpleui'
- }, {
- 'app': 'auth',
- 'name': 'Permission',
- 'icon': 'fas fa-user-shield',
- 'models': [{
- 'name': 'users',
- 'icon': 'fa fa-user',
- 'url': 'auth/user/'
- }]
- }, {
- 'name': 'Test',
- 'icon': 'fa fa-file',
- 'models': [{
- 'name': 'Baidu',
- 'url': 'http://baidu.com',
- 'icon': 'far fa-surprise'
- }, {
- 'name': 'Network',
- 'url': 'https://www.wezoz.com',
- 'icon': 'fab fa-github'
- }]
- }]
-}
-```
-
-If there is a **menus** field in **SIMPLEUI_CONFIG**,will override the system default menu。And the **menus** output in menus are not controlled by permissions。
-
-### Default Icon
-**simpleui** provides a default file icon for all menus for uniform style. Maybe you don't like it, you can choose to turn off the default icon.
-
->SIMPLEUI_DEFAULT_ICON = False
-
-|Values|Description|
-|--|--|
-|True|Turn on the default icon,default is True|
-|False|Turn off the default icon|
-
-### Customize Icon
-**simpleui** only provides icons for the system default module. If you want to specify icons for other modules, you can customize the configuration. Icon reference please refer to:[About Icons](#About%2dIcons)
-
-Priority:
-Custom Icon->System Icon->Default Icon
-
->Note:**simpleui** doesn't involve code in principle, so use the **setting** method. In the future, may be consider extending the **Model**'s **Meta class** for configuration icons.
-
-|Values|Description|
-|---|---|
-|name|Module name, please note it's not the name of the **model**, it's the text displayd on the menu, because the **model** can be repeated, it will lead to indistinguishable|
-|icon|Icon name|
-For example:
-```
-SIMPLEUI_ICON = {
- 'System_Manage': 'fab fa-apple',
- 'Employeee_Manage': 'fas fa-user-tie'
-}
-
-```
-
-## Modify Templates
-Modify the template based on **simpleui** need to require some understanding of django
-1. Clone **simpleui** into a static directory,refer to [Clone static file to the root](#Clone%2dstatic%2dfile%2dto%2dthe%2droot)
-2. Find the admin directory in the static directory,inner is the template of **simpleui**, directly modify the relevant html page to take effect.
-
-## Develop and Debug
-If you want to make some modifications based on **simpleui**, you can refer to the following steps:
-1. Install **simpleui** into the project
-2. Find the directory of **simpleui** and delete
-3. Clone **simpleui** source to local
-4. In the Linux、Unix、macOS environments,use the flexible connection method to assign the **simpleui** directory in the project dependency package to the **simpleui** directory of the source code.
- ```shell
- ln -s sourceFile TargetFile
- ```
-5. Right clicl on the windows environment to create a shortcut.
-
-Then you can modify and publish **simpleui**. If you have any questions, please join the QQ group:786576510
-## Source Code install to local
-+ Clone source code local installation
-```shell
-git clone https://github.com/newpanjing/simpleui
-cd simpleui
-python setup.py sdist install
-```
-Next steps please refer to [Modify default template for simpleui](#Modify%2ddefault%2dtemplate%2dfor%2dsimpleui)
-
-## ReWrite Page
-
-For example, rewrite the home page, create a new **admin** folder in the **templates** directory, and then add a index.html
-If you choose **extends**, you can only use **block**
-for example:
-```html
- {% extends 'admin/index.html' %}
- {% load static %}
-
- {%block head}
- {{ block.super }}
- ..your code..
- {% endblock %}
-
- {% block script %}
- {{ block.super }}
- ..your code..
- {% endblock %}
-```
-
-If you want to rewrite all:
-
-```html
-
-
- Custom Code
-
-
- your code
-
-
-```
-## Custom code to Header
-```html
- {% extends 'admin/index.html' %}
- {% load static %}
-
- {%block head}
- {{ block.super }}
- ..your code..
- {% endblock %}
-```
-## Custom code to Footer
-```html
- {% extends 'admin/index.html' %}
- {% load static %}
-
- {% block script %}
- {{ block.super }}
- ..your code..
- {% endblock %}
-```
-
-## Custom Action
-> Must be version 2.1.2 or above
-
-Django admin provides support for custom buttons by default, but styles and ICONS are not customizable. Simpleui adds custom styles, ICONS and button types to django admin custom action.
-
-Code:
-```python
-@admin.register(Employe)
-class EmployeAdmin(admin.ModelAdmin):
- list_display = ('id', 'name', 'gender', 'idCard', 'phone', 'birthday', 'department', 'enable', 'create_time')
-
- # add action
- actions = ['make_copy', 'custom_button']
-
- def custom_button(self, request, queryset):
- pass
-
- # display text,Consistent with django admin
- custom_button.short_description = 'Test Button'
- # icon,reference:element-ui icon and https://fontawesome.com
- custom_button.icon = 'fas fa-audio-description'
-
- # Specify button type:https://element.eleme.cn/#/zh-CN/component/button
- custom_button.type = 'danger'
-
- # Custom style
- custom_button.style = 'color:black;'
-
- def make_copy(self, request, queryset):
- pass
- make_copy.short_description = 'Copy employe'
-```
-
-Configuration compatible with native admin
-### Field:
-
-|Field|Description|
-|------|------|
-|icon|Button icon,Reference:https://element.eleme.cn/#/zh-CN/component/icon and https://fontawesome.com,copy class|
-|type|Button type,Reference:https://element.eleme.cn/#/zh-CN/component/button|
-|style|Customize CSS styles|
-|confirm|Requires version 3.4 or above|
-
-+ confirm demo
-
-```python
- def message_test(self, request, queryset):
- messages.add_message(request, messages.SUCCESS, 'Success')
-
- # Add confirmation to button
- message_test.confirm = 'Are you sure?'
-```
-
-
-+ Link Button
-
-> Requires version 2.9 or above
-
-|Field|Description|
-|------|------|
-|action_type|0=The current page, 1=Simpleui New tab,2=Browser new tab|
-|action_url|The url address|
-
-## Offline
-
-> Requires version 2.1.3 or above
-
-settings.py:
-```python
-SIMPLEUI_STATIC_OFFLINE = True
-```
-Specifies whether simpleui loads static resources in offline mode. When true, all resources will be read locally by default, even if there is no networking. Suitable for intranet projects
-
-If you do not fill in the item or are false, the default is obtained from the third-party CDN.
-
-## Close Loading
-
-> Requires version 2.1.5 or above
-
-settings.py:
-```python
-SIMPLEUI_LOADING = False
-```
-
-## admindoc
-Admindoc must be the simpleui3.3+ version
-
-## Common Problems
- ### Not found settings.py
-
- The file is in the django project, not in simpleui. If you are familiar with django, you will understand, if you are not familiar, please learn django first.[django documentation](https://docs.djangoproject.com/en/2.2/)
-
- ### python version problem
-
- + this project is recommended to use python3.x, python2.x may not be compatible.
- + If you make a mistake when using source installation, please specify the python version, python3 and pip3
- ### Unable to Start
- May be unable to start due to some unknown problem, please don't give up **simpleui**, you can commit [issue](https://github.com/newpanjing/simpleui/issues),or join QQ group directly:786576510,we will assist in solving.
-
- ### Style Normal Loading But Display Abnormal
- in the **Windows8** system, you may encounter that **css** and other files are all loaded normally, but the display is not normal.this is because the response header is **application/x-css**, not **text/css**, causing the browser to not parse properly.
- #### Solution:
-1.Run cmd: Input **regedit** and click Enter
-
-2.Find the **.css** in the registry **HKEY_CLASSES_ROOT** click on the **.css** floder Modify the **Content Type** to **text/css**.
-
-Reference:[https://blog.csdn.net/sun754276603/article/details/46989965](https://blog.csdn.net/sun754276603/article/details/46989965)
-
->For more questions, please commit [issues](https://github.com/newpanjing/simpleui/issues) to us.
\ No newline at end of file
diff --git a/doc/en/README_en.md b/doc/en/README_en.md
deleted file mode 100644
index c0bfc7f9..00000000
--- a/doc/en/README_en.md
+++ /dev/null
@@ -1,209 +0,0 @@
-
-
-
-
-
-Make Django Admin simple and firendly
-
-Simple and friendly.
-Django admin theme the simpleui
-
-
-
-
-
-
-
-
-
-
----
-
-中文 | English
-
-
----
-
-
-
-
-
-
-simpleui Characteristics
------
-👍 Built in 28 popular themes
-
-⚡️ pip lightning installation, 100% compatible with native, `admin` without modifying the code
-
-✨ Multi-label pages, each module is more clear
-
-🎯 Simple configuration, get started quickly, add `simpleui` in `settings.py` and start it immediately, the efficiency is increased by `100%!` Make back-end development handy.
-
-☕️ `Element-UI` and `Vue` ,Let the `django admin` be better.
-
-🦀 Add support for Django3.0 Python3.8, Python3.9, dares to do the first person to eat crab.
-
-# Original intention of development
-`Django Admin` default interface design language has some shortcomings, such as single color, the use of a large number of lines, and obvious segmentation. To classify these shortcomings is that the interface is monotonous, obvious similarity, and lack of surprises. We believe that the new platform-like visual style can break these constraints, try some new explorations, and inspire traditional design cognition, so combined with the current design trend, I have conceived `Element+Django Admin's` Simpleui. Let `Django Admin` and `Element` make the perfect interaction. With the most popular back-end design style, let `Django Admin` is even more powerful.
-
-## QQ Group
-+ QQ group : 873469913
-
-
-
-
-## Document
-The document describes in detail how to use the installation, as well as a description of the various configuration items, please click on the link below.
-
- ### Important Things To Say Three Times:
-
-👇👇👇👇👇👇👇👇👇👇👇
-
-👉 1.[simpleui Document](https://simpleui.88cto.com/docs/simpleui/en/quick.html) 👈
-
-👉 2.[simpleui Document](https://simpleui.88cto.com/docs/simpleui/en/quick.html)👈
-
-👉 3.[simpleui Document](https://simpleui.88cto.com/docs/simpleui/en/quick.html)👈
-
-👆👆👆👆👆👆👆👆👆👆👆
-
-
-
-## Local Demo download
-If you don't have any `python django` basics, you can download a `demo` that can be run directly.
-[😝DEMO SourceCode](https://github.com/newpanjing/simpleui_demo)
-
-## Online Demo
-> Permission is limited, only the relevant data of the module can be viewed and cannot be operated. If you want to experience all the features, please install simpleui on your system to see the result.
-
-+ Address:[https://www.88cto.com/admin/](https://www.88cto.com/admin/)
-+ username:demo
-+ password:demo123456
-
-## Docker
-```shell
-docker pull newpanjing/simpleui_demo
-
-docker run -p 8080:8080 newpanjing/simpleui_demo
-```
-Open a browser and visit: http://127.0.0.1:8080
-
-# What is simpleui?
-🚀`simpleui` is django admin's theme. It is a page based on `element-ui` + `vue` development, rewriting and optimizing over `90%`.
-It is the same product as the suit. We are a theme that is more in line with the aesthetic and usage habits of Chinese people.
-
-# Start
-Detailed steps [Document](./QUICK_en.md). Also refer to [Demo](#Online%2dDemo)
-
-+ Installation
-```python
-pip install django-simpleui
-```
-
-Use pip or [Clone Source](#Clone%2dsource%2dlocal%2dinstallation) after installing simpleui, and`simpleui` to the first line of `INSTALLED_APPS` in your project's `settings.py` file.
-
- For example🌰:
- ```python
- # Application definition
-
- INSTALLED_APPS = [
- 'simpleui',
- 'django.contrib.admin',
- 'django.contrib.auth',
- 'django.contrib.contenttypes',
- 'django.contrib.sessions',
- 'django.contrib.messages',
- 'django.contrib.staticfiles',
- ...
- ]
- ```
-
-If you don't know how to configure or how to use it,please download [local demo](#Local%2dDemo%2ddownload) to learning. Or join the QQ group : `786576510` consulting.
-
-# Upgrade simpleui
-```python
-pip install django-simpleui --upgrade
-```
-
-# Clone source local installation
-```shell
-git clone https://github.com/newpanjing/simpleui
-cd simpleui
-python setup.py sdist install
-```
-
-## common problem:
-
-1. If turn off debug mode, execute the following command to clone the simpleui static file to the root directory.
- ```shell
- python3 manage.py collectstatic
- ```
-2. Clone static file error
-Please add in the `settings.py` file:
- ```shell
- STATIC_ROOT = os.path.join(BASE_DIR, "static")
- ```
-3. Please refer to other questions [django Documentation](https://docs.djangoproject.com/en/2.2/intro/tutorial01/).
-
-4. i18n internationalization adopt js internationalization, the default is English and Chinese, switch with the system. Please see [International configuration](/i18n.md)
-
-other questions [Quick start guide](./QUICK_en.md)
-
-## Support for django and python versions
-[List of Supported Versions](/VERSION.md)
-
-
-## Browser Compatibility
-
-![Chrome](https://raw.github.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png) | ![Firefox](https://raw.github.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png) | ![Edge](https://raw.github.com/alrra/browser-logos/master/src/edge/edge_48x48.png) | ![IE](https://raw.github.com/alrra/browser-logos/master/src/archive/internet-explorer_9-11/internet-explorer_9-11_48x48.png) | ![Safari](https://raw.github.com/alrra/browser-logos/master/src/safari/safari_48x48.png) | ![Opera](https://raw.github.com/alrra/browser-logos/master/src/opera/opera_48x48.png) | ![UC](https://raw.github.com/alrra/browser-logos/master/src/uc/uc_48x48.png)
-:---: | :---: | :---: | :---: | :---: | :---: | :---:
- ✔ | ✔ | ✔ | 11+ ✔ | ✔ | ✔ | ✔
-
-## **README** Badge
-
-If your project is using Simpleui,you can put the Simpleui badge [![ice](https://img.shields.io/badge/developing%20with-Simpleui-2077ff.svg)](https://github.com/newpanjing/simpleui) add to your README:
-
-```
-[![simpleui](https://img.shields.io/badge/developing%20with-Simpleui-2077ff.svg)](https://github.com/newpanjing/simpleui)
-```
-
-
-## Sponsor💰
-If you think that `simpleui` is helpful to you, you can sponsor us a cup of coffee and encourage us to continue to develop and maintain.
-![sponsor us](https://github.com/newpanjing/simpleui/raw/master/images/pay.png)
-
-
-# Login Page
-![](https://github.com/newpanjing/simpleui/raw/master/images/%E6%95%B0%E6%8D%AE%E9%A1%B5.png)
-
-# Home Page
-![](https://github.com/newpanjing/simpleui/raw/master/images/%E4%B8%BB%E9%A1%B5.png)
-
-# List Page
-![](https://github.com/newpanjing/simpleui/raw/master/images/%E5%88%97%E8%A1%A8%E9%A1%B5.png)
-![](https://github.com/newpanjing/simpleui/raw/master/images/%E6%95%B0%E6%8D%AE%E9%A1%B5.png)
-
-# Switch Theme
-![](https://github.com/newpanjing/simpleui/raw/master/images/%E5%88%87%E6%8D%A2%E4%B8%BB%E9%A2%98.png)
-
-# Change Password
-![](https://github.com/newpanjing/simpleui/raw/master/images/%E5%AF%86%E7%A0%81%E4%BF%AE%E6%94%B9.png)
-
-# Edit Page
-![](https://github.com/newpanjing/simpleui/raw/master/images/%E7%BC%96%E8%BE%91%E9%A1%B5.png)
-
-# Set Font Size
-![](https://github.com/newpanjing/simpleui/raw/master/images/%E8%AE%BE%E7%BD%AE%E5%AD%97%E4%BD%93%E5%A4%A7%E5%B0%8F.png)
-
-## Great developer
-
-The development of simpleui is supported by the following excellent contributors. If you want to contribute code to simpleui, fork to your repository and then make a merge request to the dev branch.
-
-|Github|Scope|
-|------|------|
-|[@Abraverman666](https://github.com/Abraverman666)|Developers|
-|[@zhangzhibo1014](https://github.com/zhangzhibo1014)|Translate English document|
-|[@liaogx](https://github.com/liaogx)|Bug fix|
-|[@shouyong](https://github.com/shouyong)|Bug fix|
-|[@Roddy1219](https://github.com/Roddy1219)|Bug fix|
-|[@WalkerWang731](https://github.com/WalkerWang731)|Code contributions|
diff --git a/docs/.gitignore b/docs/.gitignore
deleted file mode 100644
index 36acb93b..00000000
--- a/docs/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-package-lock.json
-docs/.vitepress/dist
-docs/.vitepress/cache
-docs/node_modules
diff --git a/docs/docs/.vitepress/config.js b/docs/docs/.vitepress/config.js
deleted file mode 100644
index 60b842fa..00000000
--- a/docs/docs/.vitepress/config.js
+++ /dev/null
@@ -1,73 +0,0 @@
-export default {
- lang: 'zh-CN',
- ignoreDeadLinks: true,
- title: 'Django SimpleUI',
- base: '/',
- locales: {
- root: {
- lang: 'zh-CN',
- label: '简体中文',
- },
- en: {
- lang: 'en-US',
- label: 'English',
- link: '/en/',
- }
- },
- sitemap: {
- hostname: 'https://www.mldoo.com'
- },
- themeConfig: {
- siteTitle: 'SimpleUI Docs',
- logo: '/logo.png',
- footer: {
- message: 'Released under the MIT License.',
- copyright: 'Copyright © 2016-present Simple UI'
- },
- search: {
- provider: 'local'
- },
- externalLinkIcon: true,
- outlineTitle: '大纲',
- lastUpdated: true,
- socialLinks: [
- {icon: 'github', link: 'https://github.com/newpanjing/simpleui_demo'}
- ],
- editLink: {
- pattern: 'https://github.com/newpanjing/simpleui/edit/main/docs/docs/:path'
- },
- nav: [
- {text: 'Home', link: '/'},
- {text: '配置&Config', link: '/config'},
- {text: '社区', link: 'https://www.mldoo.com'},
- {
- text: '更新记录', link: 'https://github.com/newpanjing/simpleui/tags',
- },
- {text: '专业版', link: 'https://www.mldoo.com/simplepro'},
- ],
- sidebar: {
- '/config': [
- {text: '配置&指南', link: '/config'},
- {text: 'pip源切换', link: '#pip源切换'},
- {text: '安装', link: '#安装'},
- {text: '主题', link: '#主题'},
- {text: '图标', link: '#图标'},
- {text: '菜单', link: '#菜单'},
- {text: '模板', link: '#模板'},
- {text: '自定义按钮', link: '#自定义按钮-action'},
- {text: '配置', items:[
- {text: '关闭登录页粒子动画', link: '#关闭登录页粒子动画'},
- {text: '修改默认图标', link: '#修改默认图标'},
- {text: '修改默认首页', link: '#首页-修改默认'},
- {text: '修改首页地址', link: '#首页-跳转地址'},
- {text: '修改首页模块', link: '#首页-模块'},
- {text: '快速操作', link: '#快速操作'},
- {text: '关闭Loading遮罩层', link: '#关闭loading遮罩层'},
- ]},
- {text: '国际化', link: '#国际化'},
- {text: '插件', link: '#插件支持'},
- {text: '社区', link: 'https://www.mldoo.com'},
- ]
- },
- }
-}
\ No newline at end of file
diff --git a/docs/docs/config.md b/docs/docs/config.md
deleted file mode 100644
index d153fbd8..00000000
--- a/docs/docs/config.md
+++ /dev/null
@@ -1,1099 +0,0 @@
-# 快速上手指南
------
-有很多同学会误解simpleui,认为下载、安装simpleui后,启动就可以直接使用。但是simpleui是在django的基础上进行优化的,所以请先自行用命令行、IDE[创建一个django项目](#创建一个django项目),然后[修改默认后台模板为simpleui](#修改默认后台模板为simpleui)
-
-在开始入门之前,请花1分钟了解下[settings.py](#settingspy-找不到)文件,
-它在接下来的过程中尤为重要。
-
-## 目录
-
-[[toc]]
-
----
-
-## pip源切换
-
-pip默认的源服务器在国外,安装速度较慢,推荐使用国内的源。
-
-### 源列表
-- 豆瓣:http://pypi.douban.com/simple/
-- 中科大:https://pypi.mirrors.ustc.edu.cn/simple/
-- 清华:https://pypi.tuna.tsinghua.edu.cn/simple
-
-### 一次性使用
-可以在使用pip的时候加参数-i https://pypi.tuna.tsinghua.edu.cn/simple
-
-例如:
-
-```shell
-pip install django-simpleui -i https://pypi.tuna.tsinghua.edu.cn/simple
-```
-### 永久修改
-
-#### Linux & MacOS
-linux下,修改 ~/.pip/pip.conf (没有就创建一个), 修改 index-url 为国内镜像地址,内容如下:
-
-```
-[global]
-index-url = https://pypi.tuna.tsinghua.edu.cn/simple
-```
-
-#### Windows
-windows下,直接在user目录中创建一个pip目录,如:C:\Users\xx\pip,新建文件pip.ini,内容如下
-
-```
-[global]
-index-url = https://pypi.tuna.tsinghua.edu.cn/simple
-```
----
-
-
-## 安装
-
-### pip安装
-
-```shell
-pip3 install django-simpleui
-```
-
-### 源码安装
-+ 克隆源码本地安装
-```shell
-git clone https://github.com/newpanjing/simpleui
-cd simpleui
-python setup.py sdist install
-```
-后续步骤请参考[修改默认后台模板为simpleui](#修改默认后台模板为simpleui)
-
-### 创建一个django项目
-
-django官方中文教程[https://docs.djangoproject.com/zh-hans/2.0/intro/tutorial01/](https://docs.djangoproject.com/zh-hans/2.0/intro/tutorial01/)
-
-如果您已经有存在的项目,可以忽略这一步。
-
-### 修改默认后台模板为simpleui
-
-我们只需要在项目中的settings.py文件中加入一行simpleui即可。
-
-举个例子🌰:
- ```python
- # Application definition
-
- INSTALLED_APPS = [
- 'simpleui',
- 'django.contrib.admin',
- 'django.contrib.auth',
- 'django.contrib.contenttypes',
- 'django.contrib.sessions',
- 'django.contrib.messages',
- 'django.contrib.staticfiles',
- ...
- ]
- ```
-如果关闭debug模式后,会出现静态资源无法访问,请查看[克隆静态文件到根目录](#克隆静态文件到根目录)
-
-### 克隆静态文件
-
-熟悉django的同学会了解,django有个神奇的模式叫做debug模式,默认是开启的,在settings.py中
-```python
-# SECURITY WARNING: don't run with debug turned on in production!
-DEBUG = True
-```
-关闭后可以有两种办法解决静态资源无法访问的情况
-1. 在settings.py中加入:
-```python
- STATICFILES_DIRS = [
- os.path.join(BASE_DIR, "static"),
- ]
-```
-2. 克隆静态资源到项目的静态目录,然后交由nginx处理
-```shell
- python3 manage.py collectstatic
-```
-如果克隆报错提示找不到静态目录,请先在settings.py指定静态目录
-```python
- STATIC_ROOT = os.path.join(BASE_DIR, "static")
-```
-
-### 启动项目
-在settings.py中成功加入simpleui后,运行命令:
-```shell
- python manage.py runserver 8000
-```
-浏览器中输入:http://127.0.0.1:8000/admin
-如果发现登录页和之前有所不同,那么就可以恭喜你,成功安装simpleui!接下来开始享受simpleui吧。
-
-## 主题
-
-### 默认主题
-
-默认主题在settings.py中进行配置
-
-```python
-# 指定simpleui默认的主题,指定一个文件名,相对路径就从simpleui的theme目录读取
-SIMPLEUI_DEFAULT_THEME = 'admin.lte.css'
-```
-
-
-### 切换主题
-目前simpleui 内置28个流行样式风格的主题。后续随着版本的更新,会加入更多的主题。
-
-### 主题列表
-
-> 取对应的file即可设置成默认主题
-
-```javascript
-var SimpleuiThemes = [
- {
- text: "Default",
- menu: 'rgb(48, 65, 86)',
- logo: 'rgb(48, 65, 86)',
- top: '#FFF'
- },
- {
- text: "Simpleui-x",
- menu: '#2c2e39',
- logo: '#2c2e39',
- top: '#FFF',
- file: "simpleui.css"
- },
- {
- text: "Element-UI",
- file: "element.css",
- top: '#447eff',
- menu: '#FFf',
- logo: '#FFF'
- },
- {
- text: "layui",
- file: "layui.css",
- menu: '#393D49',
- logo: '#23262E',
- top: '#23262E'
- }, {
- text: "Ant Design Pro",
- file: "ant.design.css",
- menu: '#000b16',
- logo: '#002140',
- top: '#FFF'
- }, {
- text: "Admin LTE",
- file: "admin.lte.css",
- top: '#3c8dbc',
- logo: '#3c8dbc',
- menu: '#2b3539'
- }, {
- text: "Highdmin",
- file: "highdmin.css",
- top: '#02c0ce',
- menu: '#e0e0e0',
- logo: '#02c0ce'
- }, {
- text: "Aircraft",
- file: "aircraft.css",
- top: '-webkit-gradient(linear, left bottom, left top, color-stop(0, #4d5b76), color-stop(1, #6f80a1)) !important',
- menu: '#e0e0e0',
- logo: '-webkit-gradient(linear, left bottom, left top, color-stop(0, #4d5b76), color-stop(1, #6f80a1)) !important'
- }, {
- text: "Purple",
- file: "purple.css",
- top: '#FFF',
- logo: '#FFF',
- menu: '#3e4295'
- }, {
- text: "Gray",
- file: "gray.css",
- top: '#213a53',
- logo: '#213a53',
- menu: '#e0e0e0'
- },
- {
- text: "Dark green",
- file: "dark.green.css",
- top: '#f3f3f4',
- menu: '#283846',
- logo: '#283846'
- },
- {
- text: "Orange",
- file: "orange.css",
- top: 'linear-gradient(to right bottom, #da8342, #e45131)',
- logo: 'linear-gradient(to right bottom, #da8342, #e45131)',
- menu: '#FFF'
- },
- {
- text: "Black",
- file: "black.css",
- top: "#333",
- logo: "#333",
- menu: '#FFF'
- },
- {
- text: "Green",
- file: "green.css",
- top: '#19a97b',
- logo: '#FFF',
- menu: '#FFF'
- },
- {
- text: "Light",
- file: "light.css",
- top: "#ebf1f5",
- logo: "#ebf1f5",
- menu: "#ebf1f5"
- }, {
- text: 'Enterprise blue',
- file: 'e-blue.css',
- top: '#3ba1df',
- logo: '#3ba1df',
- menu: '#FFF'
- }, {
- text: 'Enterprise blue pro',
- file: 'e-blue-pro.css',
- top: '#3ba1df',
- logo: '#3ba1df',
- menu: 'rgb(38, 50, 56)'
- }, {
- text: 'Enterprise green',
- file: 'e-green.css',
- top: '#27ad60',
- logo: '#27ad60',
- menu: '#FFF'
- }, {
- text: 'Enterprise green pro',
- file: 'e-green-pro.css',
- top: '#27ad60',
- logo: '#27ad60',
- menu: 'rgb(38, 50, 56)'
- }, {
- text: 'Enterprise red',
- file: 'e-red.css',
- top: '#c9333e',
- logo: '#c9333e',
- menu: '#FFF'
- }, {
- text: 'Enterprise red pro',
- file: 'e-red-pro.css',
- top: '#c9333e',
- logo: '#c9333e',
- menu: 'rgb(38, 50, 56)'
- }, {
- text: 'Enterprise purple',
- file: 'e-purple.css',
- top: '#8263b1',
- logo: '#8263b1',
- menu: '#FFF'
- }, {
- text: 'Enterprise purple pro',
- file: 'e-purple-pro.css',
- top: '#8263b1',
- logo: '#8263b1',
- menu: 'rgb(38, 50, 56)'
- }, {
- text: 'Enterprise black',
- file: 'e-black.css',
- top: '#1f2c39',
- logo: '#1f2c39',
- menu: '#FFF'
- }, {
- text: 'Enterprise black pro',
- file: 'e-black-pro.css',
- top: '#1f2c39',
- logo: '#1f2c39',
- menu: 'rgb(38, 50, 56)'
- }, {
- text: 'x-green',
- file: 'x-green.css',
- top: '#2F9688',
- logo: '#2F9688',
- menu: 'rgb(38, 50, 56)'
- }, {
- text: 'x-red',
- file: 'x-red.css',
- top: '#AA3130',
- logo: 'rgb(38, 50, 56)',
- menu: 'rgb(38, 50, 56)'
- }, {
- text: 'x-blue',
- file: 'x-blue.css',
- top: '#FFF',
- logo: '#1E9FFF',
- menu: 'rgb(38, 50, 56)'
- }
-]
-```
-
-### 自定义主题
-在自定义主题之前,请先把simpleui的静态资源克隆到根目录。然后找到theme
-theme.js 就是用于配置主题列表
-
-按该文件中的格式配置即可
-
-```javascript
-var SimpleuiThemes = [
- {
- "text": "Default"
- },
- {
- "text": "Simpleui-x",
- "file": "simpleui.css"
- },
- .....
-]
-```
-
-在增加你的样式之前,请先了解less如何使用。
-
-这是admin.lte.less的例子
-```css
-@import "base";
-
-@primary: #2096c8 !important;
-@color: white;
-
-@menu-color: #8aa4af !important;
-@menu-background: #2b3539 !important;
-
-@menu-color-hover: #FFF;
-@menu-background-hover: #1f272b;
-
-@menu-title-color: #FFF;
-@menu-title-background-color: #212c32;
-
-@menu-title-color-hover: #FFF;
-@menu-title-background-color-hover: #1f272b;
-
-
-@navbar-color: #fff;
-@navbar-background: #3c8dbc;
-```
-他将会编译为admin.lte.css
-需要安装less
-```shell
-npm install less -g
-
-lessc admin.lte.less>admin.lte.css
-```
-
-
-## 图标
-
-### 说明
-simpleui中显示的图标 可以参考[fontawesome](https://fontawesome.com/icons?d=gallery)的图标,只需要将完整的class名填入即可。
-
-
-### 默认图标
-simpleui对所有菜单提供了一个默认的file图标,是为了统一风格。也许你并不喜欢,你可以选择关闭默认图标
-
->SIMPLEUI_DEFAULT_ICON = False
-
-|值|说明|
-|--|--|
-|True|开启默认图标,默认为True|
-|False|关闭默认图标|
-
-### 自定义图标
-simpleui仅为系统默认模块提供了图标,如果要为其他模块指定图标,可以自定义配置。图标参考请查阅:[图标说明](#图标说明)
-
-优先级:
-自定义->系统配图->默认图标
-
->注:simpleui 原则上不涉及代码,所以采用setting方式。后续可考虑扩展Model的 Meta class 进行配置图标
-
-|字段|说明|
-|---|---|
-|name|模块名字,请注意不是model的命名,而是菜单栏上显示的文本,因为model是可以重复的,会导致无法区分|
-|icon|图标|
-例子:
-```
-SIMPLEUI_ICON = {
- '系统管理': 'fab fa-apple',
- '员工管理': 'fas fa-user-tie'
-}
-
-```
-
-
-## 菜单
-
-### 自定义菜单
-
-### system_keep 保留系统菜单
-该字段用于告诉simpleui,是否需要保留系统默认的菜单,默认为False,不保留。
-如果改为True,自定义和系统菜单将会并存
-
-### menu_display 过滤显示菜单和排序功能
-该字段用于告诉simpleui,是否需要开启过滤显示菜单和排序功能。
-默认可以不用填写,缺省配置为默认排序,不对菜单进行过滤和排序。
-开启认为传一个列表,如果列表为空,则什么也不显示。列表中的每个元素要对应到menus里面的name字段
-
-### dynamic 开启动态菜单功能
-该字段用于告诉simpleui,是否需要开启动态菜单功能。
-默认可以不用填写,缺省配置为False,不开启动态菜单功能。
-开启为True,开启后,每次用户登陆都会刷新左侧菜单配置。
-需要注意的是:开启后每次访问admin都会重读配置文件,所以会带来额外的消耗。
-
-### menus说明 (2021.2已加入3级菜单)
-
-|字段|说明|
-|---|---|
-|name|菜单名|
-|icon|图标,参考element-ui和fontawesome图标|
-|url|链接地址,绝对或者相对,如果存在models字段,将忽略url|
-|models|子菜单,自2021.02.01+版本 支持最多3级菜单,使用方法可以看下方例子|
-|newTab|boolean,default:False,浏览器新标签中打开,自2022.6.13开始支持|
-
-### 例子
-
-```python
-import time
-SIMPLEUI_CONFIG = {
- 'system_keep': False,
- 'menu_display': ['Simpleui', '测试', '权限认证', '动态菜单测试'], # 开启排序和过滤功能, 不填此字段为默认排序和全部显示, 空列表[] 为全部不显示.
- 'dynamic': True, # 设置是否开启动态菜单, 默认为False. 如果开启, 则会在每次用户登陆时动态展示菜单内容
- 'menus': [{
- 'name': 'Simpleui',
- 'icon': 'fas fa-code',
- 'url': 'https://gitee.com/tompeppa/simpleui',
- # 浏览器新标签中打开
- 'newTab': True,
- }, {
- 'app': 'auth',
- 'name': '权限认证',
- 'icon': 'fas fa-user-shield',
- 'models': [{
- 'name': '用户',
- 'icon': 'fa fa-user',
- 'url': 'auth/user/'
- }]
- }, {
- # 自2021.02.01+ 支持多级菜单,models 为子菜单名
- 'name': '多级菜单测试',
- 'icon': 'fa fa-file',
- # 二级菜单
- 'models': [{
- 'name': 'Baidu',
- 'icon': 'far fa-surprise',
- # 第三级菜单 ,
- 'models': [
- {
- 'name': '爱奇艺',
- 'url': 'https://www.iqiyi.com/dianshiju/'
- # 第四级就不支持了,element只支持了3级
- }, {
- 'name': '百度问答',
- 'icon': 'far fa-surprise',
- 'url': 'https://zhidao.baidu.com/'
- }
- ]
- }, {
- 'name': '内网穿透',
- 'url': 'https://www.wezoz.com',
- 'icon': 'fab fa-github'
- }]
- }, {
- 'name': '动态菜单测试' ,
- 'icon': 'fa fa-desktop',
- 'models': [{
- 'name': time.time(),
- 'url': 'http://baidu.com',
- 'icon': 'far fa-surprise'
- }]
- }]
-}
-```
-
-如果SIMPLEUI_CONFIG中存在menus字段,将会覆盖系统默认菜单。并且menus中输出的菜单不会受权限控制。
-
-## 模板
-
-### 修改模板
-在simpleui的基础上修改模板需要对django有一定了解
-1. 先把simpleui克隆到静态目录下,参考[克隆静态文件到根目录](#克隆静态文件到根目录)
-2. 找到静态目录下的admin目录,里面就是simpleui的模板,直接修改相关html页面即可生效。
-
-
-### 重写页面
-
-例如重写首页,在templates目录中新建admin文件夹,然后添加index.html
-如果选择继承方式,就只能采用block
-代码如下:
-
-```html
- {% extends 'admin/index.html' %}
- {% load static %}
-
- {% block head %}
- {{ block.super }}
- ..此处写你的代码
- {% endblock %}
-
- {% block script %}
- {{ block.super }}
- ..此处写你的代码
- {% endblock %}
-```
-
-如果是想全部重写:
-
-```html
-
-
- 完全自定义
-
-
- 这里你是自定义的html代码
-
-
-```
-#### 头部添加自定义代码
-```html
- {% extends 'admin/index.html' %}
- {% load static %}
-
- {% block head %}
- {{ block.super }}
- ..此处写你的代码
- {% endblock %}
-```
-#### 底部添加自定义代码
-```html
- {% extends 'admin/index.html' %}
- {% load static %}
-
- {% block script %}
- {{ block.super }}
- ..此处写你的代码
- {% endblock %}
-```
-
-
-## 自定义按钮&Action
-
-### 介绍
-> 需要在2.1.2以上版本生效
-
-django admin 默认提供了自定义按钮的支持,但是样式、图标均不可自定义,simpleui在django admin 自定义action的基础上增加了样式、图标、按钮类型自定义。
-
-### 例子
-```python
- @admin.register(Employe)
-class EmployeAdmin(admin.ModelAdmin):
- list_display = ('id', 'name', 'gender', 'idCard', 'phone', 'birthday', 'department', 'enable', 'create_time')
-
- # 增加自定义按钮
- actions = ['make_copy', 'custom_button']
-
- def custom_button(self, request, queryset):
- pass
-
- # 显示的文本,与django admin一致
- custom_button.short_description = '测试按钮'
- # icon,参考element-ui icon与https://fontawesome.com
- custom_button.icon = 'fas fa-audio-description'
-
- # 指定element-ui的按钮类型,参考https://element.eleme.cn/#/zh-CN/component/button
- custom_button.type = 'danger'
-
- # 给按钮追加自定义的颜色
- custom_button.style = 'color:black;'
-
- def make_copy(self, request, queryset):
- pass
- make_copy.short_description = '复制员工'
-```
-该配置与原生admin兼容。
-
-### 字段参数
-
-|字段|说明|
-|------|------|
-|icon|按钮图标,参考https://element.eleme.cn/#/zh-CN/component/icon与https://fontawesome.com,把class 复制进来即可|
-|type|按钮类型,参考:https://element.eleme.cn/#/zh-CN/component/button|
-|style|自定义css样式|
-|confirm|弹出确认框,在3.4或以上版本中生效|
-
-### confirm 例子
-
-```python
- def message_test(self, request, queryset):
- messages.add_message(request, messages.SUCCESS, '操作成功123123123123')
-
- # 给按钮增加确认
- message_test.confirm = '你是否执意要点击这个按钮?'
-```
-
-
-
-### 链接按钮
-
-> 在2.9或以上版本中生效
-
-|字段|说明|
-|------|------|
-|action_type|按钮动作类型,0=当前页内打开,1=新tab打开,2=浏览器tab打开|
-|action_url|按钮访问链接|
-
-demo:
-```python
- # 增加自定义按钮
- actions = ['custom_button']
-
- def custom_button(self, request, queryset):
- pass
-
- # 显示的文本,与django admin一致
- custom_button.short_description = '测试按钮'
- # icon,参考element-ui icon与https://fontawesome.com
- custom_button.icon = 'fas fa-audio-description'
-
- # 指定element-ui的按钮类型,参考https://element.eleme.cn/#/zh-CN/component/button
- custom_button.type = 'danger'
-
- # 给按钮追加自定义的颜色
- custom_button.style = 'color:black;'
-
- # 链接按钮,设置之后直接访问该链接
- # 3中打开方式
- # action_type 0=当前页内打开,1=新tab打开,2=浏览器tab打开
- # 设置了action_type,不设置url,页面内将报错
- # 设置成链接类型的按钮后,custom_button方法将不会执行。
-
- custom_button.action_type = 0
- custom_button.action_url = 'http://www.baidu.com'
-
-```
-
-### layer对话框按钮
-
-> 在2021.1.0及以上版本中生效
-
-对话框按钮是在admin中进行配置action,可以自定义输入的字段,然后通过ajax请求到action中进行业务的处理。
-
-需要继承`AjaxAdmin` 在`from simpleui.admin import AjaxAdmin`包中
-
-`simplepro`也会同步支持对话框按钮功能。
-
-#### 效果
-
-
-#### 字段说明
-
-下列字段是指`action`的`layer`属性
-
-|字段|说明|
-|--|--|
-|title|对话框标题|
-|tips|对话框提示|
-|confirm_button|确认按钮文本|
-|cancel_button|取消按钮文本|
-|width|对话框宽度,百分比,例如:50%|
-|labelWidth|表格的label宽度,例如:80px|
-|params|对话框表格中的字段,array|
-
-##### params字段
-
-|字段|说明|
-|--|--|
-|type|类型,取值为:input原生属性,和elementui的:select、date、datetime、rate、color、slider、switch、input_number、checkbox、radio|
-|key|参数名,post参数中获取的名称|
-|value|默认值,数组或文本|
-|label|字段在表格中显示的名称|
-|size|组件的大小,取值为:medium / small / mini|
-|require|是否必选,取值为:True/False|
-|width|输入框宽度,例如:200px|
-|options|选项,数组,type为select、checkbox、radio的时候可用|
-
-#### options字段
-|字段|说明|
-|--|--|
-|key|值|
-|label|显示文本|
-
-
-#### 例子
-
-```python
-class RecordAdmin(ImportExportActionModelAdmin, AjaxAdmin):
- resource_class = ProxyResource
-
- list_display = ('id', 'name', 'type', 'money', 'create_date')
- list_per_page = 10
-
- actions = ('layer_input',)
-
- def layer_input(self, request, queryset):
- # 这里的queryset 会有数据过滤,只包含选中的数据
-
- post = request.POST
- # 这里获取到数据后,可以做些业务处理
- # post中的_action 是方法名
- # post中 _selected 是选中的数据,逗号分割
- if not post.get('_selected'):
- return JsonResponse(data={
- 'status': 'error',
- 'msg': '请先选中数据!'
- })
- else:
- return JsonResponse(data={
- 'status': 'success',
- 'msg': '处理成功!'
- })
-
- layer_input.short_description = '弹出对话框输入'
- layer_input.type = 'success'
- layer_input.icon = 'el-icon-s-promotion'
-
- # 指定一个输入参数,应该是一个数组
-
- # 指定为弹出层,这个参数最关键
- layer_input.layer = {
- # 弹出层中的输入框配置
-
- # 这里指定对话框的标题
- 'title': '弹出层输入框',
- # 提示信息
- 'tips': '这个弹出对话框是需要在admin中进行定义,数据新增编辑等功能,需要自己来实现。',
- # 确认按钮显示文本
- 'confirm_button': '确认提交',
- # 取消按钮显示文本
- 'cancel_button': '取消',
-
- # 弹出层对话框的宽度,默认50%
- 'width': '40%',
-
- # 表单中 label的宽度,对应element-ui的 label-width,默认80px
- 'labelWidth': "80px",
- 'params': [{
- # 这里的type 对应el-input的原生input属性,默认为input
- 'type': 'input',
- # key 对应post参数中的key
- 'key': 'name',
- # 显示的文本
- 'label': '名称',
- # 为空校验,默认为False
- 'require': True
- }, {
- 'type': 'select',
- 'key': 'type',
- 'label': '类型',
- 'width': '200px',
- # size对应elementui的size,取值为:medium / small / mini
- 'size': 'small',
- # value字段可以指定默认值
- 'value': '0',
- 'options': [{
- 'key': '0',
- 'label': '收入'
- }, {
- 'key': '1',
- 'label': '支出'
- }]
- }, {
- 'type': 'number',
- 'key': 'money',
- 'label': '金额',
- # 设置默认值
- 'value': 1000
- }, {
- 'type': 'date',
- 'key': 'date',
- 'label': '日期',
- }, {
- 'type': 'datetime',
- 'key': 'datetime',
- 'label': '时间',
- }, {
- 'type': 'rate',
- 'key': 'star',
- 'label': '评价等级'
- }, {
- 'type': 'color',
- 'key': 'color',
- 'label': '颜色'
- }, {
- 'type': 'slider',
- 'key': 'slider',
- 'label': '滑块'
- }, {
- 'type': 'switch',
- 'key': 'switch',
- 'label': 'switch开关'
- }, {
- 'type': 'input_number',
- 'key': 'input_number',
- 'label': 'input number'
- }, {
- 'type': 'checkbox',
- 'key': 'checkbox',
- # 必须指定默认值
- 'value': [],
- 'label': '复选框',
- 'options': [{
- 'key': '0',
- 'label': '收入'
- }, {
- 'key': '1',
- 'label': '支出'
- }, {
- 'key': '2',
- 'label': '收益'
- }]
- }, {
- 'type': 'radio',
- 'key': 'radio',
- 'label': '单选框',
- 'options': [{
- 'key': '0',
- 'label': '收入'
- }, {
- 'key': '1',
- 'label': '支出'
- }, {
- 'key': '2',
- 'label': '收益'
- }]
- }]
- }
-
-
-```
-
-#### action 返回结果
-
-```json
-{
- 'status': 'error',
- 'msg': '请先选中数据!'
-}
-```
-
-> status = success/error
-
-> msg = 自定义
-
-#### 对话框按钮说明
-
-1. 如果需要作为增加和编辑 需要自己实现业务逻辑,编辑的时候将数据填充到value字段即可。
-
-2. 限制选中后才能提交数据,可以在后台进行限制
-
-3. 2020.1.0 及以上版本生效,需要继承`AjaxAdmin` 在`from simpleui.admin import AjaxAdmin`包中。 不继承提交数据会500或者404
- 例如:
-
-```python
-
- if not post.get('_selected'):
- return JsonResponse(data={
- 'status': 'error',
- 'msg': '请先选中数据!'
- })
-
-```
-
-### layer 文件上传
-
-> 自2021.4.2+版本开始,支持layer中上传文件
-
-例子:
-
-```python
-
-@admin.register(Layer)
-class LayerAdmin(AjaxAdmin):
- actions = ('upload_file',)
-
- def upload_file(self, request, queryset):
- # 这里的upload 就是和params中配置的key一样
- upload= request.FILES['upload']
- print(upload)
- pass
-
- upload_file.short_description = '文件上传对话框'
- upload_file.type = 'success'
- upload_file.icon = 'el-icon-upload'
- upload_file.enable = True
-
- upload_file.layer = {
- 'params': [{
- 'type': 'file',
- 'key': 'upload',
- 'label': '文件'
- }]
- }
-
-```
-
-
-
-## 配置
-
-simpleui在django 原生admin的基础上增加了若干自定义的配置,这些配置均是在`settings.py`文件中完成。
-
-### 关闭登录页粒子动画
-在项目的settings.py中加入
-```python
-SIMPLEUI_LOGIN_PARTICLES = False
-```
-粒子动画默认开启
-
-
-### 修改默认图标
-django内置的认证与授权以及关联的用户、组,都已经默认配置了一个图标。后续自定义的app将会是默认图标,需要自行在settings.py文件中进行配置
-1.
-
-### 首页-修改默认
-simpleui内置了一个默认的首页,只是由简单的快捷导航与最近操作组成。
-
-在自己项目的settings.py中加入:
-
-+ 首页配置
-> SIMPLEUI_HOME_PAGE = 'https://www.baidu.com'
-+ 首页标题
-> SIMPLEUI_HOME_TITLE = '百度一下你就知道'
-+ 首页图标,支持element-ui和fontawesome的图标,参考https://fontawesome.com/icons图标
-> SIMPLEUI_HOME_ICON = 'fa fa-user'
-
-三项配置都是选填,不填都会有默认值。 [图标列表](https://fontawesome.com/icons)
-
-### 首页-跳转地址
-首页顶部首页图标默认跳转地址为/,即根目录。如果需要自定义,请在项目的settings.py中加入设置:
-
-```python
-# 设置simpleui 点击首页图标跳转的地址
-SIMPLEUI_INDEX = 'https://www.88cto.com'
-```
-
-可以设置相对与绝对路径。该地址并无特殊之处,将会调用window.open直接打开该地址。
-### 首页-模块
-首页默认展示3个模块,服务器信息、快速操作、最近动作,大家可以根据需要来显示或者隐藏某些模块。
-
-### 修改LOGO
-+ 自定义SIMPLEUI的Logo
-> SIMPLEUI_LOGO = 'https://avatars2.githubusercontent.com/u/13655483?s=60&v=4'
-
-
-### 服务器信息
-隐藏:
-> SIMPLEUI_HOME_INFO = False
-
-显示:
-> SIMPLEUI_HOME_INFO = True
-
-### 快速操作
-
-隐藏:
-> SIMPLEUI_HOME_QUICK = False
-
-显示:
-> SIMPLEUI_HOME_QUICK = True
-
-### 最近动作
-
-隐藏:
-> SIMPLEUI_HOME_ACTION = False
-
-显示:
-> SIMPLEUI_HOME_ACTION = True
-
-### 使用分析
-`默认开启,统计分析信息只是为了更好的帮助simpleui改进,并不会读取敏感信息。并且分析数据不会分享至任何第三方。`
-> SIMPLEUI_ANALYSIS = False
-
-|值|说明|
-|--|--|
-|True|收集分析,一天只上报一次分析数据。默认为True|
-|False|不收集分析信息|
-
-### 离线模式
-> 在2.1.3或以上的版本中生效
-在settings.py中加入
-```python
-SIMPLEUI_STATIC_OFFLINE = True
-```
-指定simpleui 是否以脱机模式加载静态资源,为True的时候将默认从本地读取所有资源,即使没有联网一样可以。适合内网项目
-
-不填该项或者为False的时候,默认从第三方的cdn获取
-### 关闭Loading遮罩层
-> 在2.1.5或以上的版本中生效
-
-在settings.py中加入
-```python
-SIMPLEUI_LOADING = False
-```
-True或None 默认显示加载遮罩层,指定为False 不显示遮罩层。默认显示
-
-## 插件支持
-
-### django-import-export
-simpleui对数据导入导出插件也做了支持,您可以直接安装使用。
-
-### admindoc
-admindoc需要simpleui 3.3+ 版本
-
-### simplepro
-
-simplepro也是我们推出的一个升级版的django admin插件,在现有的基础上,做了大量改进和优化。并且一前后分离的方式加载数据。
-
-点击[了解更多](https://simpleui.88cto.com/simplepro)。
-
-## 国际化
-
-simpleui 国际化采用js前端国际化,因为没有涉及到后端,所以没有django标准的国际化文件。
-
-将simpleui 克隆到静态目录,然后添加需要的语言
-
-语言命名与django LANGUAGE_CODE 一致
-
-例如:
-中文简体:zh-hans
-英文:en-us
-
-将文件命名为: [code].js
-+ zh-hans.js
-+ en-us.js
-
-## 常见问题
-### settings.py 找不到
-
- 这个文件是在自己创建的django项目中,不是在simpleui中。如果你熟悉django就会明白,如果不熟悉请先学习django。[django中文文档](https://docs.djangoproject.com/zh-hans/2.2/)
-
-### python版本问题
-
- + 该项目推荐使用python3,python2.x可能会不兼容
- + 使用源码安装时如果出错,请指定python版本,python3 和 pip3
-### 无法启动
-可能由于某些未知的问题,导致项目无法启动,请不要放弃simpleui,你可以提[issue](https://github.com/newpanjing/simpleui/issues),或者直接加入QQ群:873469913,我们将协助解决。
-
-### 样式正常加载显示不正常
-在win8 系统中 可能会遇到,css以及其他文件全部正常加载,但是显示不正常。这是因为响应头为application/x-css,而不是text/css,造成浏览器不正常解析。
-#### 解决办法:
-1.运行cmd: 输入regedit 并回车
-
-2.在注册表HKEY_CLASSES_ROOT中找到.css 点击.css文件夹 修改Content Type 为 text/css
-
-参考连接:[https://blog.csdn.net/sun754276603/article/details/46989965](https://blog.csdn.net/sun754276603/article/details/46989965)
-
-### 如何下载这个模版
-目前暂时无法下载模板,不过我们计划推出simple-admin,纯html的模板,可以让更多语言使用。
-
-### 反馈建议
->其他更多问题,请提交[issues](https://github.com/newpanjing/simpleui/issues)给我们。
-
-
-### 开发调试
-如果想在simpleui的基础上进行一些修改,可以参考以下步骤
-1. 安装simpleui到项目中
-2. 找到simpleui的目录,然后删除
-3. 克隆simpleui源码到本地
-4. Linux、Unix、macOS环境下用软连接的方式,把项目依赖包中的simpleui目录指定到源码的simpleui目录
- ```shell
- ln -s 源文件 目标文件
- ```
-5. windows环境下请右键创建快捷方式
-
-接下来就可以修改、发布simpleui了。如有疑问请加入QQ群:873469913
-
-### 官网&反馈
-
-[https://simpleui.88cto.com](https://simpleui.88cto.com)
diff --git a/docs/docs/custom.md b/docs/docs/custom.md
deleted file mode 100644
index 83ce6188..00000000
--- a/docs/docs/custom.md
+++ /dev/null
@@ -1,41 +0,0 @@
-# 付费定制
-
-我们可以提供基于Python、Java、Node.js等付费定制服务。
-
-## 软件定制
-
-我们可以提供网站、APP、小程序、公众号、管理系统等全套开发定制服务。
-
-
-## 有偿解决问题
-
-如果您在使用中遇到不能用django等框架实现某些功能,我们可以帮助您实现。
-
-## 联系方式
-
-QQ: 599194993
-
-WeChat: PAN0204219
-
-E-Mail: newpanjing@icloud.com
-
-# Paid customization
-
-We can provide paid customized services based on Python, Java, Node.js, etc.
-
-## Software customization
-
-We can provide a full set of development and customization services such as websites, APPs, small programs, official accounts, management systems, etc.
-
-
-## Pay to solve the problem
-
-If you encounter some functions that cannot be implemented with django and other frameworks in use, we can help you implement them.
-
-## Contact information
-
-QQ: 599194993
-
-WeChat: PAN0204219
-
-E-Mail: newpanjing@icloud.com
\ No newline at end of file
diff --git a/docs/docs/en/config.md b/docs/docs/en/config.md
deleted file mode 100644
index 837e658e..00000000
--- a/docs/docs/en/config.md
+++ /dev/null
@@ -1,969 +0,0 @@
-simpleui Quick Start Guide
------
-Many people will misunderstand **simpleui**. They think after downloading and installing **simpleui**, they can be used directly after startup. But **simpleui** is majorization on the basis of the **Django**. So, please [Create a Django project](#Create%2da%2dDjango%2dProject) using the command line or IDE, then [Modify the default template for simpleui](#Modify%2ddefault%2dtemplate%2dfor%2dsimpleui).
-
-Before starting,please take a minte to understand **settings.py**, because it's especially important in the next process.
-
-# Start Guide
- + [Create a Django project](#Create%2da%2dDjango%2dProject)
- + [Modify default template for simpleui](#Modify%2ddefault%2dtemplate%2dfor%2dsimpleui)
- + [Clone static file to the root](#Clone%2dstatic%2dfile%2dto%2dthe%2droot)
- + [Startup Project](#Startup%2dProject)
- + [How to download simpleui's template](#How%2dto%2ddownload%2dsimpleui's%2dtemplate)
- + [Switch Theme](#Switch%2dTheme)
- + [About Icons](#About%2dIcons)
-# Advance Guide
- + [Default Theme](#Default%2dTheme)
- + [Customize Theme](#Customize%2dTheme)
- + [Modify Default Icon](#Modify%2dDefault%2dIcon)
- + [Modify Default Home](#Modify%2dDefault%2dHome)
- + [Modify Home Jump Address](#Modify%2dHome%2dJump%2dAddress)
- + [Modify LOGO](#Modify%2dLOGO)
- + [Configure Home Module](#Configure%2dHome%2dModule)
- + [Server Information](#Server%2dInformation)
- + [Quick Operation](#Quick%2dOperation)
- + [Recent Action](#Recent%2dAction)
- + [Use Analysis](#Use%2dAnalysis)
- + [Menu](#Menu)
- + [Customize Munu](#Customize%2dMunu)
- + [Default Icon](#Default%2dIcon)
- + [Customize Icon](#Customize%2dIcon)
-
- + [Modify Templates](#Modify%2dTemplates)
- + [Develop and Debug](#Develop%2dand%2dDebug)
- + [Source Code install to local](#Source%2dCode%2dinstall%2dto%2dlocal)
- + [ReWrite Page](#ReWrite%2dPage)
- + [Custom code to Header](#Custom%2dcode%2dto%2dHeader)
- + [Custom code to Footer](#Custom%2dcode%2dto%2dFooter)
- + [Custom Action](#Custom%2dAction)
- + [Offline](#Offline)
- + [Close Loading](#Close%2dLoading)
- + [admindoc](#admindoc)
-# Common Problems
- + [settings.py](#Not%2dfound%2dsettings.py)
- + [python version problem](#python%2dversion%2dproblem)
- + [Unable to Start](#Unable%2dto%2dStart)
- + [Style Normal Loading But Display Abnormal](#Style%2dNormal%2dLoading%2dBut%2dDisplay%2dAbnormal)
-
----
-
-## Create a Django Project
-
-Django Documentation:[https://docs.djangoproject.com/en/2.2/intro/tutorial01/](https://docs.djangoproject.com/en/2.2/intro/tutorial01/)
-
-## Modify default template for simpleui
-
- We only need to add a line of **simpleui** in the **settings.py** of the project.
-
- For example 🌰:
- ```python
- # Application definition
-
- INSTALLED_APPS = [
- 'simpleui',
- 'django.contrib.admin',
- 'django.contrib.auth',
- 'django.contrib.contenttypes',
- 'django.contrib.sessions',
- 'django.contrib.messages',
- 'django.contrib.staticfiles',
- ...
- ]
- ```
- If **DEBUG = False**, static resources will be inaccessible,please go to [Clone static file to the root](#Clone%2dstatic%2dfile%2dto%2dthe%2droot)
-
-## Clone static file to the root
-Django have a mode is **DEBUG**, it's in **settings.py**. Default **DEBUG = True**.
-```python
-# SECURITY WARNING: don't run with debug turned on in production!
-DEBUG = True
-```
-If **DEBUG = Fasle**, there are two ways to solve the situation that static resources can't be accessed.
-1. Modify **settings.py** , add following content:
-```python
- STATICFILES_DIRS = [
- os.path.join(BASE_DIR, "static"),
- ]
-```
-2. Clone static resources to the static directory of the project,then processed by **nginx**.
-```shell
- python3 manage.py collectstatic
-```
-If the clone error message indicates that the static directory could't be found,please open the **settings.py** and assign a static directory
-```python
- STATIC_ROOT = os.path.join(BASE_DIR, "static")
-```
-
-## Startup Project
-After successfully adding **simpleui** in **settings.py**,Run command:
-```shell
- python manage.py runserver 8000
-```
-Open browser, input:http://127.0.0.1:8000/admin
-if you find that the login page is different from before,Congratulations! You have successfully installed **simpleui**!Let's start enjoying **simpleui**!
-
-## How to download simpleui's template
-Currently unable to download templates,but we plan to launch **simple-admin's** html templates,can make more languages available.
-
-## Switch Theme
-Currently **simpleui** has 28 popular style themes. We will update more topics as the version is updated.
-
-## About Icons
-The icon displayed in **simpleui** can refer to the [fontawesome](https://fontawesome.com/icons?d=gallery) icon,just fill in the full class name.
-
-## Default Theme
-
-The default theme is configured in settings.py
-
-```python
-# Specify simpleui's default theme, specify a filename, and the relative path is read from simpleui's theme directory
-SIMPLEUI_DEFAULT_THEME = 'admin.lte.css'
-```
-
-### Theme List:
-
-> Take the corresponding file can be set as the default theme
-
-```javascript
-var SimpleuiThemes = [
- {
- text: "Default",
- menu: 'rgb(48, 65, 86)',
- logo: 'rgb(48, 65, 86)',
- top: '#FFF'
- },
- {
- text: "Simpleui-x",
- menu: '#2c2e39',
- logo: '#2c2e39',
- top: '#FFF',
- file: "simpleui.css"
- },
- {
- text: "Element-UI",
- file: "element.css",
- top: '#447eff',
- menu: '#FFf',
- logo: '#FFF'
- },
- {
- text: "layui",
- file: "layui.css",
- menu: '#393D49',
- logo: '#23262E',
- top: '#23262E'
- }, {
- text: "Ant Design Pro",
- file: "ant.design.css",
- menu: '#000b16',
- logo: '#002140',
- top: '#FFF'
- }, {
- text: "Admin LTE",
- file: "admin.lte.css",
- top: '#3c8dbc',
- logo: '#3c8dbc',
- menu: '#2b3539'
- }, {
- text: "Highdmin",
- file: "highdmin.css",
- top: '#02c0ce',
- menu: '#e0e0e0',
- logo: '#02c0ce'
- }, {
- text: "Aircraft",
- file: "aircraft.css",
- top: '-webkit-gradient(linear, left bottom, left top, color-stop(0, #4d5b76), color-stop(1, #6f80a1)) !important',
- menu: '#e0e0e0',
- logo: '-webkit-gradient(linear, left bottom, left top, color-stop(0, #4d5b76), color-stop(1, #6f80a1)) !important'
- }, {
- text: "Purple",
- file: "purple.css",
- top: '#FFF',
- logo: '#FFF',
- menu: '#3e4295'
- }, {
- text: "Gray",
- file: "gray.css",
- top: '#213a53',
- logo: '#213a53',
- menu: '#e0e0e0'
- },
- {
- text: "Dark green",
- file: "dark.green.css",
- top: '#f3f3f4',
- menu: '#283846',
- logo: '#283846'
- },
- {
- text: "Orange",
- file: "orange.css",
- top: 'linear-gradient(to right bottom, #da8342, #e45131)',
- logo: 'linear-gradient(to right bottom, #da8342, #e45131)',
- menu: '#FFF'
- },
- {
- text: "Black",
- file: "black.css",
- top: "#333",
- logo: "#333",
- menu: '#FFF'
- },
- {
- text: "Green",
- file: "green.css",
- top: '#19a97b',
- logo: '#FFF',
- menu: '#FFF'
- },
- {
- text: "Light",
- file: "light.css",
- top: "#ebf1f5",
- logo: "#ebf1f5",
- menu: "#ebf1f5"
- }, {
- text: 'Enterprise blue',
- file: 'e-blue.css',
- top: '#3ba1df',
- logo: '#3ba1df',
- menu: '#FFF'
- }, {
- text: 'Enterprise blue pro',
- file: 'e-blue-pro.css',
- top: '#3ba1df',
- logo: '#3ba1df',
- menu: 'rgb(38, 50, 56)'
- }, {
- text: 'Enterprise green',
- file: 'e-green.css',
- top: '#27ad60',
- logo: '#27ad60',
- menu: '#FFF'
- }, {
- text: 'Enterprise green pro',
- file: 'e-green-pro.css',
- top: '#27ad60',
- logo: '#27ad60',
- menu: 'rgb(38, 50, 56)'
- }, {
- text: 'Enterprise red',
- file: 'e-red.css',
- top: '#c9333e',
- logo: '#c9333e',
- menu: '#FFF'
- }, {
- text: 'Enterprise red pro',
- file: 'e-red-pro.css',
- top: '#c9333e',
- logo: '#c9333e',
- menu: 'rgb(38, 50, 56)'
- }, {
- text: 'Enterprise purple',
- file: 'e-purple.css',
- top: '#8263b1',
- logo: '#8263b1',
- menu: '#FFF'
- }, {
- text: 'Enterprise purple pro',
- file: 'e-purple-pro.css',
- top: '#8263b1',
- logo: '#8263b1',
- menu: 'rgb(38, 50, 56)'
- }, {
- text: 'Enterprise black',
- file: 'e-black.css',
- top: '#1f2c39',
- logo: '#1f2c39',
- menu: '#FFF'
- }, {
- text: 'Enterprise black pro',
- file: 'e-black-pro.css',
- top: '#1f2c39',
- logo: '#1f2c39',
- menu: 'rgb(38, 50, 56)'
- }, {
- text: 'x-green',
- file: 'x-green.css',
- top: '#2F9688',
- logo: '#2F9688',
- menu: 'rgb(38, 50, 56)'
- }, {
- text: 'x-red',
- file: 'x-red.css',
- top: '#AA3130',
- logo: 'rgb(38, 50, 56)',
- menu: 'rgb(38, 50, 56)'
- }, {
- text: 'x-blue',
- file: 'x-blue.css',
- top: '#FFF',
- logo: '#1E9FFF',
- menu: 'rgb(38, 50, 56)'
- }
-]
-```
-
-## Customize Theme
-Before customizing the theme, please clone the static resources of **simpleui** to the root directory. Then you need to find **theme.js**, it's used to configure the list of topics.
-
-Please configure in this format.
-
-```javascript
-var SimpleuiThemes = [
- {
- "text": "Default"
- },
- {
- "text": "Simpleui-x",
- "file": "simpleui.css"
- },
- .....
-]
-```
-
-Before adding your style, please understand how **less** to used.
-
-Example for **admin.lte.less**
-```css
-@import "base";
-
-@primary: #2096c8 !important;
-@color: white;
-
-@menu-color: #8aa4af !important;
-@menu-background: #2b3539 !important;
-
-@menu-color-hover: #FFF;
-@menu-background-hover: #1f272b;
-
-@menu-title-color: #FFF;
-@menu-title-background-color: #212c32;
-
-@menu-title-color-hover: #FFF;
-@menu-title-background-color-hover: #1f272b;
-
-
-@navbar-color: #fff;
-@navbar-background: #3c8dbc;
-```
-It will compile to **admin.lte.css**.
-You need to install **less**.
-```shell
-npm install less -g
-
-lessc admin.lte.less>admin.lte.css
-```
-
-## Modify Default Icon
-Django's built-in authentication and authorization and associated users and groups have been configured with an icon by default. Custom app will be the default icons and need to be configured in the **settings.py** file.
-
-## Modify Default Home
-**simpleui** has a default home page, which consists of quick navigation and recent operations.
-
-You can modify the default home page and add it to your project's **settings.py**:
-
-+ Home configuration
-> SIMPLEUI_HOME_PAGE = 'https://www.baidu.com'
-+ Home title
-> SIMPLEUI_HOME_TITLE = 'My Home Title'
-+ Home Icon,support `element-ui's` and `fontawesome's` icon,reference https://fontawesome.com/icons
-> SIMPLEUI_HOME_ICON = 'fa fa-user'
-
-The above three configurations are optional. If you don't fill, there will be default values. [Icon List](https://fontawesome.com/icons)
-
-## Modify Home Jump Address
-The top of the home page has a default jump address of /, this is root directory. If you need to customize, add some settings in your project's **settings.py**.
-
-```python
-# Configure simpleui Click the address of the home icon to jump.
-SIMPLEUI_INDEX = 'https://www.88cto.com'
-```
-
-Relative and absolute paths can be set. There is nothing special about this address, it will call **window.open** to open the address directly.
-
-
-## Modify LOGO
-+ Customize SIMPLEUI's Logo
-> SIMPLEUI_LOGO = 'https://avatars2.githubusercontent.com/u/13655483?s=60&v=4'
-
-## Config Home Module
-The home page displays three modules by default, server information, quick operation and recent actions. You can show or hide some modules as needed.
-### Server Information
-Hide:
-> SIMPLEUI_HOME_INFO = False
-
-Display:
-> SIMPLEUI_HOME_INFO = True
-
-### Quick Operation
-
-Hide:
-> SIMPLEUI_HOME_QUICK = False
-
-Display:
-> SIMPLEUI_HOME_QUICK = True
-
-### Recent Action
-
-Hide:
-> SIMPLEUI_HOME_ACTION = False
-
-Display:
-> SIMPLEUI_HOME_ACTION = True
-
-## Use Analysis
-`Default is True, statistical analysis information is only used to better help simpleui improvements, and doesn't read sensitive information. And the analysis data will not be shared with any third party.`
-> SIMPLEUI_ANALYSIS = False
-
-|Values|Description|
-|--|--|
-|True|Collect and analyze,report only one analysis data a day。Default is True|
-|False|Don't collect and analyze|
-
-## Menu
-
-### Customize Munu
-
-#### Keep system menu
-system_keep field is used to tell **simpleui**,whether you need to keep the system default menu, the default is False, don't keep.
-If changed to True,custom and system menus will coexist.
-
-#### Menus Description
-
-|Values|Description|
-|---|---|
-|name|Menu name|
-|icon|Icon,refer element-ui和fontawesome|
-|url|link address,absolute or relative, if there is a models field, the url will be ignored|
-|models|submenu, Since 2021.02.01+ version supports up to 3 levels of menus|
-|newTab|boolean,default:False,Open it in a browser TAB|
-
-#### Example
-```python
-SIMPLEUI_CONFIG = {
- 'system_keep':False,
- 'menus': [{
- 'name': 'Simpleui',
- 'icon': 'fas fa-code',
- 'url': 'https://gitee.com/tompeppa/simpleui'
- }, {
- 'app': 'auth',
- 'name': 'Permission',
- 'icon': 'fas fa-user-shield',
- 'models': [{
- 'name': 'users',
- 'icon': 'fa fa-user',
- 'url': 'auth/user/'
- }]
- }, {
- # Since 2021.02.01+ supports multi-level menus, models is the submenu name
- 'name': 'Multi-level menu test',
- 'icon': 'fa fa-file',
- 'models': [
- {
- 'name': 'IQiyi',
- # The fourth level is not supported, the element only supports level 3
- 'models': [
- {
- 'name': 'Movie',
- 'url': 'https://www.iqiyi.com/dianying/',
- 'newTab': True
- }, {
- 'name': 'TV series',
- 'url': 'https://www.iqiyi.com/dianshiju/'
- },
- ]
- }, {
- 'name': 'Network',
- 'url': 'https://www.wezoz.com',
- 'icon': 'fab fa-github'
- }]
- }]
-}
-```
-
-If there is a **menus** field in **SIMPLEUI_CONFIG**,will override the system default menu。And the **menus** output in menus are not controlled by permissions。
-
-### Default Icon
-**simpleui** provides a default file icon for all menus for uniform style. Maybe you don't like it, you can choose to turn off the default icon.
-
->SIMPLEUI_DEFAULT_ICON = False
-
-|Values|Description|
-|--|--|
-|True|Turn on the default icon,default is True|
-|False|Turn off the default icon|
-
-### Customize Icon
-**simpleui** only provides icons for the system default module. If you want to specify icons for other modules, you can customize the configuration. Icon reference please refer to:[About Icons](#About%2dIcons)
-
-Priority:
-Custom Icon->System Icon->Default Icon
-
->Note:**simpleui** doesn't involve code in principle, so use the **setting** method. In the future, may be consider extending the **Model**'s **Meta class** for configuration icons.
-
-|Values|Description|
-|---|---|
-|name|Module name, please note it's not the name of the **model**, it's the text displayd on the menu, because the **model** can be repeated, it will lead to indistinguishable|
-|icon|Icon name|
-For example:
-```
-SIMPLEUI_ICON = {
- 'System_Manage': 'fab fa-apple',
- 'Employeee_Manage': 'fas fa-user-tie'
-}
-
-```
-
-## Modify Templates
-Modify the template based on **simpleui** need to require some understanding of django
-1. Clone **simpleui** into a static directory,refer to [Clone static file to the root](#Clone%2dstatic%2dfile%2dto%2dthe%2droot)
-2. Find the admin directory in the static directory,inner is the template of **simpleui**, directly modify the relevant html page to take effect.
-
-## Develop and Debug
-If you want to make some modifications based on **simpleui**, you can refer to the following steps:
-1. Install **simpleui** into the project
-2. Find the directory of **simpleui** and delete
-3. Clone **simpleui** source to local
-4. In the Linux、Unix、macOS environments,use the flexible connection method to assign the **simpleui** directory in the project dependency package to the **simpleui** directory of the source code.
- ```shell
- ln -s sourceFile TargetFile
- ```
-5. Right clicl on the windows environment to create a shortcut.
-
-Then you can modify and publish **simpleui**. If you have any questions, please join the QQ group:786576510
-## Source Code install to local
-+ Clone source code local installation
-```shell
-git clone https://github.com/newpanjing/simpleui
-cd simpleui
-python setup.py sdist install
-```
-Next steps please refer to [Modify default template for simpleui](#Modify%2ddefault%2dtemplate%2dfor%2dsimpleui)
-
-## ReWrite Page
-
-For example, rewrite the home page, create a new **admin** folder in the **templates** directory, and then add a index.html
-If you choose **extends**, you can only use **block**
-for example:
-```html
- {% extends 'admin/index.html' %}
- {% load static %}
-
- {%block head}
- {{ block.super }}
- ..your code..
- {% endblock %}
-
- {% block script %}
- {{ block.super }}
- ..your code..
- {% endblock %}
-```
-
-If you want to rewrite all:
-
-```html
-
-
- Custom Code
-
-
- your code
-
-
-```
-## Custom code to Header
-```html
- {% extends 'admin/index.html' %}
- {% load static %}
-
- {%block head}
- {{ block.super }}
- ..your code..
- {% endblock %}
-```
-## Custom code to Footer
-```html
- {% extends 'admin/index.html' %}
- {% load static %}
-
- {% block script %}
- {{ block.super }}
- ..your code..
- {% endblock %}
-```
-
-## Custom Action
-> Must be version 2.1.2 or above
-
-Django admin provides support for custom buttons by default, but styles and ICONS are not customizable. Simpleui adds custom styles, ICONS and button types to django admin custom action.
-
-Code:
-```python
-@admin.register(Employe)
-class EmployeAdmin(admin.ModelAdmin):
- list_display = ('id', 'name', 'gender', 'idCard', 'phone', 'birthday', 'department', 'enable', 'create_time')
-
- # add action
- actions = ['make_copy', 'custom_button']
-
- def custom_button(self, request, queryset):
- pass
-
- # display text,Consistent with django admin
- custom_button.short_description = 'Test Button'
- # icon,reference:element-ui icon and https://fontawesome.com
- custom_button.icon = 'fas fa-audio-description'
-
- # Specify button type:https://element.eleme.cn/#/zh-CN/component/button
- custom_button.type = 'danger'
-
- # Custom style
- custom_button.style = 'color:black;'
-
- def make_copy(self, request, queryset):
- pass
- make_copy.short_description = 'Copy employe'
-```
-
-Configuration compatible with native admin
-### Field:
-
-|Field|Description|
-|------|------|
-|icon|Button icon,Reference:https://element.eleme.cn/#/zh-CN/component/icon and https://fontawesome.com,copy class|
-|type|Button type,Reference:https://element.eleme.cn/#/zh-CN/component/button|
-|style|Customize CSS styles|
-|confirm|Requires version 3.4 or above|
-
-+ confirm demo
-
-```python
- def message_test(self, request, queryset):
- messages.add_message(request, messages.SUCCESS, 'Success')
-
- # Add confirmation to button
- message_test.confirm = 'Are you sure?'
-```
-
-
-+ Link Button
-
-> Requires version 2.9 or above
-
-|Field|Description|
-|------|------|
-|action_type|0=The current page, 1=Simpleui New tab,2=Browser new tab|
-|action_url|The url address|
-
-
-
-### layer dialog button
-
-> Effective in 2021.1.0 and above
-
-The dialog button is to configure the action in the admin, you can customize the input fields, and then through the ajax request to the action for business processing.
-
-Need to inherit `AjaxAdmin` in `from simpleui.admin import AjaxAdmin` package
-
-`simplepro` will also support the dialog button function synchronously.
-
-#### Effect
-
-
-#### Field Description
-
-The following fields refer to the `layer` property of `action`
-
-|Field|Description|
-|--|--|
-|title|Dialog title|
-|tips|Dialog prompts|
-|confirm_button|Confirm button text|
-|cancel_button|Cancel button text|
-|width|The width of the dialog box, in percentage, for example: 50%|
-|labelWidth|The label width of the table, for example: 80px|
-|params|Fields in the dialog table, array|
-
-##### params field
-
-|Field|Description|
-|--|--|
-|type|Type, value: input native attributes, and elementui: select, date, datetime, rate, color, slider, switch, input_number, checkbox, radio|
-|key|Parameter name, the name obtained in the post parameter|
-|value|default value, array or text|
-|label|The name of the field displayed in the table|
-|size|The size of the component, the value is: medium / small / mini|
-|require|is required, the value is: True/False|
-|width|The width of the input box, for example: 200px|
-|options|options, array, available when type is select, checkbox, radio|
-
-#### options field
-|Field|Description|
-|--|--|
-|key|value|
-|label|Display text|
-
-
-#### Examples
-
-```python
-class RecordAdmin(ImportExportActionModelAdmin, AjaxAdmin):
- resource_class = ProxyResource
-
- list_display = ('id','name','type','money','create_date')
- list_per_page = 10
-
- actions = ('layer_input',)
-
- def layer_input(self, request, queryset):
- # The queryset here will filter data and only include the selected data
-
- post = request.POST
- # After getting the data here, you can do some business processing
- # _action in post is the method name
- # post _selected is the selected data, separated by commas
- if not post.get('_selected'):
- return JsonResponse(data={
- 'status':'error',
- 'msg':'Please select the data first! '
- })
- else:
- return JsonResponse(data={
- 'status':'success',
- 'msg':'Processed successfully! '
- })
-
- layer_input.short_description ='Pop up dialog box input'
- layer_input.type ='success'
- layer_input.icon ='el-icon-s-promotion'
-
- # Specify an input parameter, which should be an array
-
- # Designated as a pop-up layer, this parameter is the most critical
- layer_input.layer = {
- # Input box configuration in the pop-up layer
-
- # Specify the title of the dialog box here
- 'title':'Pop-up layer input box',
- # Tips
- 'tips':'This pop-up dialog box needs to be defined in the admin, and the new data editing and other functions need to be implemented by yourself. ',
- # Confirm button display text
- 'confirm_button':'Confirm submission',
- # Cancel button display text
- 'cancel_button':'Cancel',
-
- # The width of the pop-up layer dialog, the default is 50%
- 'width': '40%',
-
- # The width of the label in the form, corresponding to the label-width of element-ui, the default is 80px
- 'labelWidth': "80px",
- 'params': [{
- # The type here corresponds to the native input attribute of el-input, the default is input
- 'type':'input',
- # key corresponds to the key in the post parameter
- 'key':'name',
- # Displayed text
- 'label':'Name',
- # Is empty check, the default is False
- 'require': True
- }, {
- 'type':'select',
- 'key':'type',
- 'label':'Type',
- 'width': '200px',
- # size corresponds to the size of elementui, the value is: medium / small / mini
- 'size':'small',
- # The value field can specify the default value
- 'value': '0',
- 'options': [{
- 'key': '0',
- 'label':'Income'
- }, {
- 'key': '1',
- 'label':'Expenses'
- }]
- }, {
- 'type':'number',
- 'key':'money',
- 'label':'Amount',
- # Set default value
- 'value': 1000
- }, {
- 'type':'date',
- 'key':'date',
- 'label':'Date',
- }, {
- 'type':'datetime',
- 'key':'datetime',
- 'label':'Time',
- }, {
- 'type':'rate',
- 'key':'star',
- 'label':'evaluation level'
- }, {
- 'type':'color',
- 'key':'color',
- 'label':'color'
- }, {
- 'type':'slider',
- 'key':'slider',
- 'label':'slider'
- }, {
- 'type':'switch',
- 'key':'switch',
- 'label':'switch switch'
- }, {
- 'type':'input_number',
- 'key':'input_number',
- 'label':'input number'
- }, {
- 'type':'checkbox',
- 'key':'checkbox',
- # Must specify default value
- 'value': [],
- 'label':'Checkbox',
- 'options': [{
- 'key': '0',
- 'label':'Income'
- }, {
- 'key': '1',
- 'label':'Expenses'
- }, {
- 'key': '2',
- 'label':'Profit'
- }]
- }, {
- 'type':'radio',
- 'key':'radio',
- 'label':'Single selection box',
- 'options': [{
- 'key': '0',
- 'label':'Income'
- }, {
- 'key': '1',
- 'label':'Expenses'
- }, {
- 'key': '2',
- 'label':'Profit'
- }]
- }]
- }
-
-
-```
-
-#### action returns results
-
-```json
-{
- 'status':'error',
- 'msg':'Please select the data first! '
-}
-```
-
-> status = success/error
-
-> msg = custom
-
-#### Dialog button description
-
-1. If you need to add and edit, you need to implement the business logic yourself, just fill the value field with the data when editing.
-
-2. Data can only be submitted after the restriction is selected, and can be restricted in the background
-
-3. Versions 2020.1.0 and above take effect, you need to inherit `AjaxAdmin` in the `from simpleui.admin import AjaxAdmin` package. 500 or 404 if not inherited submitted data
-E.g:
-
-```python
-
- if not post.get('_selected'):
- return JsonResponse(data={
- 'status':'error',
- 'msg':'Please select the data first! '
- })
-
-```
-
-### Layer file upload
-
->starting with version 2021.4.2+, supports uploading files in Layer
-
-Example:
-
-```python
-
-@admin.register(Layer)
-class LayerAdmin(AjaxAdmin):
-actions = ('upload_file',)
-
-def upload_file(self, request, queryset):
-# Upload is the same key as the key used in params
-upload= request.FILES['upload']
-print(upload)
-pass
-
-Upload_file.short_description = 'File Upload Dialog'
-upload_file.type = 'success'
-upload_file.icon = 'el-icon-upload'
-upload_file.enable = True
-
-upload_file.layer = {
-'params': [{
-'type': 'file',
-'key': 'upload',
-'label': 'file'
-}]
-}
-
-` ` `
-
-## Offline
-
-> Requires version 2.1.3 or above
-
-settings.py:
-```python
-SIMPLEUI_STATIC_OFFLINE = True
-```
-Specifies whether simpleui loads static resources in offline mode. When true, all resources will be read locally by default, even if there is no networking. Suitable for intranet projects
-
-If you do not fill in the item or are false, the default is obtained from the third-party CDN.
-
-## Close Loading
-
-> Requires version 2.1.5 or above
-
-settings.py:
-```python
-SIMPLEUI_LOADING = False
-```
-
-## admindoc
-Admindoc must be the simpleui3.3+ version
-
-## Common Problems
- ### Not found settings.py
-
- The file is in the django project, not in simpleui. If you are familiar with django, you will understand, if you are not familiar, please learn django first.[django documentation](https://docs.djangoproject.com/en/2.2/)
-
- ### python version problem
-
- + this project is recommended to use python3.x, python2.x may not be compatible.
- + If you make a mistake when using source installation, please specify the python version, python3 and pip3
- ### Unable to Start
- May be unable to start due to some unknown problem, please don't give up **simpleui**, you can commit [issue](https://github.com/newpanjing/simpleui/issues),or join QQ group directly:786576510,we will assist in solving.
-
- ### Style Normal Loading But Display Abnormal
- in the **Windows8** system, you may encounter that **css** and other files are all loaded normally, but the display is not normal.this is because the response header is **application/x-css**, not **text/css**, causing the browser to not parse properly.
- #### Solution:
-1.Run cmd: Input **regedit** and click Enter
-
-2.Find the **.css** in the registry **HKEY_CLASSES_ROOT** click on the **.css** floder Modify the **Content Type** to **text/css**.
-
-Reference:[https://blog.csdn.net/sun754276603/article/details/46989965](https://blog.csdn.net/sun754276603/article/details/46989965)
-
->For more questions, please commit [issues](https://github.com/newpanjing/simpleui/issues) to us.
\ No newline at end of file
diff --git a/docs/docs/en/index.md b/docs/docs/en/index.md
deleted file mode 100644
index c5da1bfc..00000000
--- a/docs/docs/en/index.md
+++ /dev/null
@@ -1,26 +0,0 @@
----
-layout: home
-
-hero:
- name: Simple UI
- text: Django & Admin UI Framework.
- tagline: Beautiful Admin theme
- image:
- src: /images/hero.png
- alt: VitePress
- actions:
- - theme: brand
- text: Get Started
- link: /guide/what-is-vitepress
- - theme: alt
- text: View on GitHub
- link: https://github.com/newpanjing/simpleui
-features:
- - icon: 🎉
- title: Simple and minimal, always
- - icon: 🎨
- title: Multiple themes
- - icon: 📦
- title: One-step installation
----
-
diff --git a/docs/docs/index.md b/docs/docs/index.md
deleted file mode 100644
index b32cf3ee..00000000
--- a/docs/docs/index.md
+++ /dev/null
@@ -1,26 +0,0 @@
----
-layout: home
-
-hero:
- name: Simple UI
- text: Django & 后台主题框架.
- tagline: 美化Django Admin
- image:
- src: /images/hero.png
- alt: VitePress
- actions:
- - theme: brand
- text: 快速开始
- link: /config
- - theme: alt
- text: Github
- link: https://github.com/newpanjing/simpleui
-features:
- - icon: 🎉
- title: 简单不简约
- - icon: 🎨
- title: 多款主题
- - icon: 📦
- title: 一键安装
----
-
diff --git a/docs/docs/public/images/QQ2.jpg b/docs/docs/public/images/QQ2.jpg
deleted file mode 100644
index 16c04ffb9fc71fe355438267e95a54a0d32dfa6b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 211057
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