+
+## 源码地址
+
+gitee地址(主推):[https://gitee.com/liqianglog/django-vue-admin](https://gitee.com/liqianglog/django-vue-admin)👩👦👦
+
+github地址:[https://github.com/liqianglog/django-vue-admin](https://github.com/liqianglog/django-vue-admin)👩👦👦
+
+
+
+## 内置功能
+
+1. 👨⚕️菜单管理:配置系统菜单,操作权限,按钮权限标识、后端接口权限等。
+2. 🧑⚕️部门管理:配置系统组织机构(公司、部门、角色)。
+3. 👩⚕️角色管理:角色菜单权限分配、数据权限分配、设置角色按部门进行数据范围权限划分。
+4. 🧑🎓权限权限:授权角色的权限范围。
+5. 👨🎓用户管理:用户是系统操作者,该功能主要完成系统用户配置。
+6. 👬接口白名单:配置不需要进行权限校验的接口。
+7. 🧑🔧字典管理:对系统中经常使用的一些较为固定的数据进行维护。
+8. 🧑🔧地区管理:对省市县区域进行管理。
+9. 📁附件管理:对平台上所有文件、图片等进行统一管理。
+10. 🗓️操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。
+11. 🔌[插件市场 ](https://bbs.django-vue-admin.com/plugMarket.html):基于Django-Vue-Admin框架开发的应用和插件。
+
+## 插件市场 🔌
+
+- Celery异步任务:[dvadmin-celery](https://gitee.com/huge-dream/dvadmin-celery)
+- 升级中心后端:[dvadmin-upgrade-center](https://gitee.com/huge-dream/dvadmin-upgrade-center)
+- 升级中心前端:[dvadmin-upgrade-center-web](https://gitee.com/huge-dream/dvadmin-upgrade-center-web)
+
+## 准备工作
+~~~
+Python >= 3.8.0 (推荐3.8+版本)
+nodejs >= 14.0 (推荐最新)
+Mysql >= 5.7.0 (可选,默认数据库sqlite3,推荐8.0版本)
+Redis(可选,最新版)
+~~~
+
+## 前端♝
+
+```bash
+# 克隆项目
+git clone https://gitee.com/liqianglog/django-vue-admin.git
+
+# 进入项目目录
+cd web
+
+# 安装依赖
+npm install --registry=https://registry.npm.taobao.org
+
+# 启动服务
+npm run dev
+# 浏览器访问 http://localhost:8080
+# .env.development 文件中可配置启动端口等参数
+# 构建生产环境
+# npm run build
+```
+
+
+
+## 后端💈
+
+~~~bash
+1. 进入项目目录 cd backend
+2. 在项目根目录中,复制 ./conf/env.example.py 文件为一份新的到 ./conf 文件夹下,并重命名为 env.py
+3. 在 env.py 中配置数据库信息
+ mysql数据库版本建议:8.0
+ mysql数据库字符集:utf8mb4
+4. 安装依赖环境
+ pip3 install -r requirements.txt
+5. 执行迁移命令:
+ python3 manage.py makemigrations
+ python3 manage.py migrate
+6. 初始化数据
+ python3 manage.py init
+7. 初始化省市县数据:
+ python3 manage.py init_area
+8. 启动项目
+ python3 manage.py runserver 0.0.0.0:8000
+或使用 daphne :
+ daphne -b 0.0.0.0 -p 8000 application.asgi:application
+~~~
+
+### 访问项目
+
+- 访问地址:[http://localhost:8080](http://localhost:8080) (默认为此地址,如有修改请按照配置文件)
+- 账号:`superadmin` 密码:`admin123456`
+
+
+
+
+
+### docker-compose 运行
+
+~~~shell
+# 先安装docker-compose (自行百度安装),执行此命令等待安装,如有使用celery插件请打开docker-compose.yml中celery 部分注释
+docker-compose up -d
+# 初始化后端数据(第一次执行即可)
+docker exec -ti dvadmin-django bash
+python manage.py makemigrations
+python manage.py migrate
+python manage.py init_area
+python manage.py init
+exit
+
+前端地址:http://127.0.0.1:8080
+后端地址:http://127.0.0.1:8080/api
+# 在服务器上请把127.0.0.1 换成自己公网ip
+账号:superadmin 密码:admin123456
+
+# docker-compose 停止
+docker-compose down
+# docker-compose 重启
+docker-compose restart
+# docker-compose 启动时重新进行 build
+docker-compose up -d --build
+~~~
+
+
+
+## 演示图✅
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-#### 特技
-1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md
-2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com)
-3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目
-4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目
-5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help)
-6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
diff --git a/backend/__init__.py b/backend/__init__.py
new file mode 100644
index 0000000..d563165
--- /dev/null
+++ b/backend/__init__.py
@@ -0,0 +1,21 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+"""
+__title__ = ''
+__author__ = 'liqiang'
+__mtime__ = '2023/1/20'
+# code is far away from bugs with the god animal protecting
+ I love animals. They taste delicious.
+ ┏┓ ┏┓
+ ┏┛┻━━━┛┻┓
+ ┃ ☃ ┃
+ ┃ ┳┛ ┗┳ ┃
+ ┃ ┻ ┃
+ ┗━┓ ┏━┛
+ ┃ ┗━━━┓
+ ┃ 神兽保佑 ┣┓
+ ┃ 永无BUG! ┏┛
+ ┗┓┓┏━┳┓┏┛
+ ┃┫┫ ┃┫┫
+ ┗┻┛ ┗┻┛
+"""
diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644
index 0000000..b16601c
--- /dev/null
+++ b/docker-compose.yml
@@ -0,0 +1,121 @@
+version: "3"
+services:
+ dvadmin-web:
+ container_name: dvadmin-web
+ ports:
+ - "8080:8080"
+ build:
+ context: ./
+ dockerfile: ./docker_env/web/Dockerfile
+ environment:
+ TZ: Asia/Shanghai
+ volumes:
+ - ./docker_env/nginx/my.conf:/etc/nginx/conf.d/my.conf
+ expose:
+ - "8080"
+ networks:
+ network:
+ ipv4_address: 177.10.0.11
+
+ dvadmin-django:
+ build:
+ context: .
+ dockerfile: ./docker_env/django/Dockerfile
+ container_name: dvadmin-django
+ working_dir: /backend
+# 打开mysql 时,打开此选项
+# depends_on:
+# - dvadmin-mysql
+ environment:
+ PYTHONUNBUFFERED: 1
+ DATABASE_HOST: dvadmin-mysql
+ TZ: Asia/Shanghai
+ volumes:
+ - ./backend:/backend
+ - ./logs/log:/var/log
+ ports:
+ - "8000:8000"
+ expose:
+ - "8000"
+ restart: always
+ networks:
+ network:
+ ipv4_address: 177.10.0.12
+
+# dvadmin-mysql:
+# image: mysql:5.7
+# container_name: dvadmin-mysql
+# #使用该参数,container内的root拥有真正的root权限,否则,container内的root只是外部的一个普通用户权限
+# #设置为true,不然数据卷可能挂载不了,启动不起
+## privileged: true
+# restart: always
+# ports:
+# - "3306:3306"
+# environment:
+# MYSQL_ROOT_PASSWORD: "123456"
+# MYSQL_DATABASE: "dvadmin_pro"
+# TZ: Asia/Shanghai
+# command:
+# --wait_timeout=31536000
+# --interactive_timeout=31536000
+# --max_connections=1000
+# --default-authentication-plugin=mysql_native_password
+# volumes:
+# - "./docker_env/mysql/data:/var/lib/mysql"
+# - "./docker_env/mysql/conf.d:/etc/mysql/conf.d"
+# - "./docker_env/mysql/logs:/logs"
+# networks:
+# network:
+# ipv4_address: 177.10.0.13
+
+
+# 如果使用celery 插件,请自行打开此注释
+# dvadmin-celery:
+# build:
+# context: .
+# dockerfile: ./docker_env/celery/Dockerfile
+# # image: django:2.2
+# container_name: dvadmin-celery
+# working_dir: /backend
+# depends_on:
+# - dvadmin-mysql
+# environment:
+# PYTHONUNBUFFERED: 1
+# DATABASE_HOST: dvadmin-mysql
+# TZ: Asia/Shanghai
+# volumes:
+# - ./backend:/backend
+# - ./logs/log:/var/log
+# restart: always
+# networks:
+# network:
+# ipv4_address: 177.10.0.14
+
+
+# dvadmin-redis:
+# image: redis:6.2.6-alpine # 指定服务镜像,最好是与之前下载的redis配置文件保持一致
+# container_name: dvadmin-redis # 容器名称
+# restart: on-failure # 重启方式
+# environment:
+# - TZ=Asia/Shanghai # 设置时区
+# volumes: # 配置数据卷
+# - ./docker_env/redis/data:/data
+# - ./docker_env/redis/redis.conf:/etc/redis/redis.conf
+# ports: # 映射端口
+# - "6379:6379"
+# sysctls: # 设置容器中的内核参数
+# - net.core.somaxconn=1024
+# command: /bin/sh -c "echo 'vm.overcommit_memory = 1' >> /etc/sysctl.conf && redis-server /etc/redis/redis.conf --appendonly yes" # 指定配置文件并开启持久化
+# privileged: true # 使用该参数,container内的root拥有真正的root权限。否则,container内的root只是外部的一个普通用户权限
+# networks:
+# network:
+# ipv4_address: 177.10.0.15
+
+
+networks:
+ network:
+ ipam:
+ driver: default
+ config:
+ - subnet: '177.10.0.0/16'
+
diff --git a/docker_env/README.md b/docker_env/README.md
new file mode 100644
index 0000000..d4b1e6d
--- /dev/null
+++ b/docker_env/README.md
@@ -0,0 +1,65 @@
+# docker 镜像打包
+
+### 打包web基础Build包
+
+~~~sh
+# 编译打包到本地
+docker build -f ./docker_env/web/DockerfileBuild -t registry.cn-zhangjiakou.aliyuncs.com/dvadmin-pro/node14-base-web:latest .
+# 上传到阿里云仓库
+docker push registry.cn-zhangjiakou.aliyuncs.com/dvadmin-pro/node14-base-web:latest
+
+~~~
+
+### 打包Backend基础Build包
+
+~~~sh
+# 编译打包到本地
+docker build -f ./docker_env/django/DockerfileBuild -t registry.cn-zhangjiakou.aliyuncs.com/dvadmin-pro/python310-base-backend:latest .
+# 上传到阿里云仓库
+docker push registry.cn-zhangjiakou.aliyuncs.com/dvadmin-pro/python310-base-backend:latest
+~~~
+
+### 运行前端
+
+~~~
+docker build -f ./docker_env/web/Dockerfile -t dvadmin-pro-web .
+~~~
+
+### 运行后端
+
+~~~
+docker build -f ./docker_env/django/Dockerfile -t dvadmin-pro-django .
+~~~
+
+### 运行celery
+
+~~~
+docker build -f ./docker_env/celery/Dockerfile -t dvadmin-pro-celery .
+~~~
+
+## docker-compose 运行
+
+~~~
+# 先安装docker-compose (自行百度安装),执行此命令等待安装,如有使用celery插件请打开docker-compose.yml中celery 部分注释
+docker-compose up -d
+# 初始化后端数据(第一次执行即可)
+docker exec -ti dvadmin-django bash
+python manage.py makemigrations
+python manage.py migrate
+python manage.py init -y
+exit
+
+前端地址:http://127.0.0.1:8080
+后端地址:http://127.0.0.1:8000
+# 在服务器上请把127.0.0.1 换成自己公网ip
+账号:superadmin 密码:admin123456
+
+# docker-compose 停止
+docker-compose down
+# docker-compose 重启
+docker-compose restart
+# docker-compose 启动时重新进行 build
+docker-compose up -d --build
+
+~~~
+
diff --git a/docker_env/celery/Dockerfile b/docker_env/celery/Dockerfile
new file mode 100644
index 0000000..e233371
--- /dev/null
+++ b/docker_env/celery/Dockerfile
@@ -0,0 +1,7 @@
+FROM registry.cn-zhangjiakou.aliyuncs.com/dvadmin-pro/python38-base-backend:latest
+WORKDIR /backend
+COPY ./backend/ .
+RUN awk 'BEGIN { cmd="cp -i ./conf/env.example.py ./conf/env.py "; print "n" |cmd; }'
+RUN python3 -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ -r requirements.txt
+CMD ["celery", "-A", "application", "worker", "-B", "--loglevel=info"]
+
diff --git a/docker_env/django/Dockerfile b/docker_env/django/Dockerfile
new file mode 100644
index 0000000..85a71dd
--- /dev/null
+++ b/docker_env/django/Dockerfile
@@ -0,0 +1,6 @@
+FROM registry.cn-zhangjiakou.aliyuncs.com/dvadmin-pro/python310-base-backend:latest
+WORKDIR /backend
+COPY ./backend/ .
+RUN awk 'BEGIN { cmd="cp -i ./conf/env.example.py ./conf/env.py "; print "n" |cmd; }'
+RUN python3 -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ -r requirements.txt
+CMD ["/backend/docker_start.sh"]
diff --git a/docker_env/django/DockerfileBuild b/docker_env/django/DockerfileBuild
new file mode 100644
index 0000000..a6ea609
--- /dev/null
+++ b/docker_env/django/DockerfileBuild
@@ -0,0 +1,8 @@
+FROM python:3.10-alpine
+RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
+RUN apk update && apk add bash bash-doc bash-completion git freetds-dev jpeg-dev linux-headers mysql-client mariadb-dev build-base libffi-dev openssl-dev zlib-dev bzip2-dev pcre-dev ncurses-dev readline-dev tk-dev postgresql-dev
+WORKDIR /backend
+COPY ./backend/requirements.txt .
+COPY ./docker_env/requirements-all.txt .
+RUN python3 -m pip install -i https://mirrors.aliyun.com/pypi/simple/ -r /requirements.txt
+RUN python3 -m pip install -i https://mirrors.aliyun.com/pypi/simple/ -r /requirements-all.txt
diff --git a/docker_env/mysql/conf.d/my.cnf b/docker_env/mysql/conf.d/my.cnf
new file mode 100644
index 0000000..b9525ed
--- /dev/null
+++ b/docker_env/mysql/conf.d/my.cnf
@@ -0,0 +1,33 @@
+[mysql]
+#设置mysql客户端默认字符集
+default-character-set=utf8
+socket=/var/run/mysql/mysql.sock
+
+
+[mysqld]
+# skip-grant-tables
+#mysql5.7以后的不兼容问题处理
+sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
+datadir=/var/lib/mysql
+socket=/var/run/mysql/mysql.sock
+
+# Disabling symbolic-links is recommended to prevent assorted security risks
+symbolic-links=0
+# Settings user and group are ignored when systemd is used.
+# If you need to run mysqld under a different user or group,
+# customize your systemd unit file for mariadb according to the
+# instructions in http://fedoraproject.org/wiki/Systemdd
+#允许最大连接数
+max_connections=1000
+#服务端使用的字符集默认为8比特编码的latin1字符集
+character-set-server=utf8
+#创建新表时将使用的默认存储引擎
+default-storage-engine=INNODB
+lower_case_table_names=1
+max_allowed_packet=16M
+#设置时区
+default-time_zone='+8:00'
+
+[mysqld_safe]
+log-error=/var/log/mariadb/mariadb.log
+pid-file=/var/run/mariadb/mariadb.pid
diff --git a/docker_env/mysql/launch.sh b/docker_env/mysql/launch.sh
new file mode 100755
index 0000000..31b3687
--- /dev/null
+++ b/docker_env/mysql/launch.sh
@@ -0,0 +1,5 @@
+cur_path=`pwd`
+docker rm mysql
+# docker pull mysql:5.7
+# docker pull mysql:5.5
+docker run -p 3306:3306 --privileged=true --name mysql -v $cur_path/logs:/logs -v $cur_path/data:/var/lib/mysql -v $cur_path/conf.d/my.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf -v $cur_path/run/:/var/run/mysql -e MYSQL_ROOT_PASSWORD=q1w2e3r4 -d mysql:5.7
diff --git a/docker_env/nginx/my.conf b/docker_env/nginx/my.conf
new file mode 100644
index 0000000..30fa210
--- /dev/null
+++ b/docker_env/nginx/my.conf
@@ -0,0 +1,33 @@
+server {
+ listen 8080;
+ server_name localhost;
+ client_max_body_size 100M;
+ location / {
+ proxy_set_header Host $http_host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header X-Forwarded-Proto https;
+ set_real_ip_from 0.0.0.0/0;
+ real_ip_header X-Forwarded-For;
+ root /usr/share/nginx/html;
+ index index.html index.php index.htm;
+ }
+
+ location /api/ {
+ proxy_http_version 1.1;
+ proxy_set_header Host $http_host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header X-Forwarded-Proto $scheme;
+ proxy_set_header X-Nginx-Proxy true;
+ set_real_ip_from 0.0.0.0/0;
+ proxy_set_header Upgrade $http_upgrade;
+ proxy_set_header Connection "upgrade";
+ proxy_connect_timeout 600s;
+ proxy_read_timeout 600s;
+ proxy_send_timeout 600s;
+ real_ip_header X-Forwarded-For;
+ rewrite ^/api/(.*)$ /$1 break; #重写
+ proxy_pass http://177.8.0.12:8000/; # 设置代理服务器的协议和地址
+ }
+ }
diff --git a/docker_env/redis/redis.conf b/docker_env/redis/redis.conf
new file mode 100644
index 0000000..7995fd4
--- /dev/null
+++ b/docker_env/redis/redis.conf
@@ -0,0 +1,24 @@
+### 指定redis绑定的主机地址,注释掉这部分,使redis可以外部访问
+# bind 127.0.0.1 -::1
+### 指定访问redis服务端的端口
+port 6379
+### 指定客户端连接redis服务器时,当闲置的时间为多少(如300)秒时关闭连接(0表示禁用)
+timeout 0
+### 默认情况下,Redis不作为守护进程运行。如果需要,请使用“yes”
+daemonize no
+### 给redis设置密码,不需要密码的话则注释
+# requirepass dvadmin
+### 开启redis持久化,默认为no
+appendonly yes
+### 防止出现远程主机强迫关闭了一个现有的连接的错误 默认是300
+tcp-keepalive 300
+### 指定redis数据库的日志级别,常用的日志级别有debug、verbose、notice、warning,不进行修改的情况下默认的是notice
+loglevel notice
+### 指定redis数据库多长时间内(s)有多少次(c)更新操作时就把缓存中的数据同步到本地库,比如:save 600 2,指的是10分钟内有2次更新操作,就同步到本地库
+save 600 2
+### 指定redis的最大内存。由于Redis 在启动时会把数据加载到内存中,当数据达到最大内存时,redis会自动把已经到期和即将到期的key值。所以可以根据需求调整自己的所需的最大内存
+maxmemory 500mb
+### 设置了maxmemory的选项,redis内存使用达到上限。可以通过设置LRU算法来删除部分key,释放空间。默认是按照过期时间的,如果set时候没有加上过期时间就会导致数据写满maxmemory
+maxmemory-policy volatile-lru
+### 设置外部网络连接redis服务,开启需配置bind ip或者设置访问密码,关闭此时外部网络可以直接访问
+# protected-mode yes
diff --git a/docker_env/web/Dockerfile b/docker_env/web/Dockerfile
new file mode 100644
index 0000000..82e0bbb
--- /dev/null
+++ b/docker_env/web/Dockerfile
@@ -0,0 +1,9 @@
+FROM registry.cn-zhangjiakou.aliyuncs.com/dvadmin-pro/node14-base-web:latest
+WORKDIR /web/
+COPY web/. .
+RUN npm install --registry=https://registry.npm.taobao.org
+RUN npm run build
+
+FROM nginx:alpine
+COPY ./docker_env/nginx/my.conf /etc/nginx/conf.d/my.conf
+COPY --from=0 /web/dist /usr/share/nginx/html
diff --git a/docker_env/web/DockerfileBuild b/docker_env/web/DockerfileBuild
new file mode 100644
index 0000000..b123505
--- /dev/null
+++ b/docker_env/web/DockerfileBuild
@@ -0,0 +1,4 @@
+FROM node:14-alpine
+WORKDIR /web/
+COPY ./web/package.json .
+RUN npm install --registry=https://registry.npm.taobao.org
diff --git a/web/src/views/system/apiWhiteList/curd.tsx b/web/src/views/system/apiWhiteList/curd.tsx
index 8b28bbe..87d8757 100644
--- a/web/src/views/system/apiWhiteList/curd.tsx
+++ b/web/src/views/system/apiWhiteList/curd.tsx
@@ -1,6 +1,7 @@
import { CrudExpose, CrudOptions, AddReq, DelReq, EditReq, dict } from '@fast-crud/fast-crud';
import _ from 'lodash-es';
-
+import {h} from 'vue';
+import {tabBarProps} from "element-plus";
interface CreateCrudOptionsTypes {
crudOptions: CrudOptions;
}
@@ -169,7 +170,7 @@ export const createCrudOptions = function ({crudExpose}: {crudExpose: CrudExpose
col: { span: 24 },
helper: {
render() {
- return