From 1a6fc7af644628f9e2fcd64704ba110deb7a191e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=91=E6=B3=BD=E7=BD=91?= <357099073@qq.com> Date: Fri, 25 Apr 2025 17:27:26 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=B9=E9=87=8F=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .htaccess | 0 README.md | 140 +-- admin-thinkphp-layui-learning.sql | 354 +++++++ app/AppApi.php | 38 + app/admin/controller/Base.php | 180 ++++ app/admin/controller/Index.php | 213 +++- app/admin/controller/Login.php | 104 ++ app/admin/controller/Yunzer.php | 345 +++++++ app/admin/controller/Yunzeradmin.php | 262 +++++ app/admin/controller/Yunzertest.php | 167 +++ app/admin/model/Base.php | 37 + app/admin/model/YzAdminConfig.php | 43 + app/admin/view/index/index.php | 173 ++++ app/admin/view/index/welcome.php | 149 +++ app/admin/view/login/index.php | 129 +++ app/admin/view/public/header.php | 93 ++ app/admin/view/public/tail.php | 30 + app/admin/view/yunzer/buttonadd.php | 94 ++ app/admin/view/yunzer/buttonedit.php | 98 ++ app/admin/view/yunzer/buttoninfo.php | 155 +++ app/admin/view/yunzer/configadd.php | 47 + app/admin/view/yunzer/configedit.php | 47 + app/admin/view/yunzer/configlist.php | 286 +++++ app/admin/view/yunzer/configvalue.php | 189 ++++ app/admin/view/yunzer/menuadd.php | 95 ++ app/admin/view/yunzer/menuedit.php | 58 ++ app/admin/view/yunzer/menuinfo.php | 116 +++ app/admin/view/yunzeradmin/admininfo.php | 109 ++ app/admin/view/yunzeradmin/groupadd.php | 53 + app/admin/view/yunzeradmin/groupedit.php | 54 + app/admin/view/yunzeradmin/groupinfo.php | 97 ++ app/admin/view/yunzeradmin/useradd.php | 84 ++ app/admin/view/yunzeradmin/useredit.php | 76 ++ app/admin/view/yunzeradmin/userinfo.php | 112 ++ app/admin/view/yunzertest/icon_list.php | 82 ++ app/admin/view/yunzertest/test_add.php | 136 +++ app/admin/view/yunzertest/test_edit.php | 144 +++ app/admin/view/yunzertest/test_list.php | 193 ++++ app/admin/view/yunzertest/test_static_add.php | 140 +++ .../view/yunzertest/test_static_edit.php | 149 +++ .../view/yunzertest/test_static_list.php | 104 ++ app/common.php | 60 +- app/controller/Menu.php | 1 + app/middleware.php | 14 +- app/tpl/think_exception.tpl | 48 + composer.json | 6 +- composer.lock | 976 +++++++++++++++++- config/app.php | 13 +- config/captcha.php | 39 + config/console.php | 1 + config/cookie.php | 2 + config/database.php | 8 +- config/route.php | 76 +- config/session.php | 24 +- config/view.php | 2 +- nginx.htaccess | 8 - public/.htaccess_mac | 8 + public/.htaccess_win | 8 + public/favicon.ico | Bin 1150 -> 1945 bytes public/nginx.htaccess | 8 - .../48bf53df92855c12c85ae32643c1191e.png | Bin 0 -> 10786 bytes .../c23ee545646904966c949ce3dea4304e.png | Bin 0 -> 7639 bytes route/app.php | 6 - view/README.md | 1 - 64 files changed, 6208 insertions(+), 276 deletions(-) delete mode 100644 .htaccess create mode 100644 admin-thinkphp-layui-learning.sql create mode 100644 app/AppApi.php create mode 100644 app/admin/controller/Base.php create mode 100644 app/admin/controller/Login.php create mode 100644 app/admin/controller/Yunzer.php create mode 100644 app/admin/controller/Yunzeradmin.php create mode 100644 app/admin/controller/Yunzertest.php create mode 100644 app/admin/model/Base.php create mode 100644 app/admin/model/YzAdminConfig.php create mode 100644 app/admin/view/index/index.php create mode 100644 app/admin/view/index/welcome.php create mode 100644 app/admin/view/login/index.php create mode 100644 app/admin/view/public/header.php create mode 100644 app/admin/view/public/tail.php create mode 100644 app/admin/view/yunzer/buttonadd.php create mode 100644 app/admin/view/yunzer/buttonedit.php create mode 100644 app/admin/view/yunzer/buttoninfo.php create mode 100644 app/admin/view/yunzer/configadd.php create mode 100644 app/admin/view/yunzer/configedit.php create mode 100644 app/admin/view/yunzer/configlist.php create mode 100644 app/admin/view/yunzer/configvalue.php create mode 100644 app/admin/view/yunzer/menuadd.php create mode 100644 app/admin/view/yunzer/menuedit.php create mode 100644 app/admin/view/yunzer/menuinfo.php create mode 100644 app/admin/view/yunzeradmin/admininfo.php create mode 100644 app/admin/view/yunzeradmin/groupadd.php create mode 100644 app/admin/view/yunzeradmin/groupedit.php create mode 100644 app/admin/view/yunzeradmin/groupinfo.php create mode 100644 app/admin/view/yunzeradmin/useradd.php create mode 100644 app/admin/view/yunzeradmin/useredit.php create mode 100644 app/admin/view/yunzeradmin/userinfo.php create mode 100644 app/admin/view/yunzertest/icon_list.php create mode 100644 app/admin/view/yunzertest/test_add.php create mode 100644 app/admin/view/yunzertest/test_edit.php create mode 100644 app/admin/view/yunzertest/test_list.php create mode 100644 app/admin/view/yunzertest/test_static_add.php create mode 100644 app/admin/view/yunzertest/test_static_edit.php create mode 100644 app/admin/view/yunzertest/test_static_list.php create mode 100644 app/controller/Menu.php create mode 100644 app/tpl/think_exception.tpl create mode 100644 config/captcha.php delete mode 100644 nginx.htaccess create mode 100644 public/.htaccess_mac create mode 100644 public/.htaccess_win create mode 100644 public/storage/uploads/20250424/48bf53df92855c12c85ae32643c1191e.png create mode 100644 public/storage/uploads/20250424/c23ee545646904966c949ce3dea4304e.png delete mode 100644 view/README.md diff --git a/.htaccess b/.htaccess deleted file mode 100644 index e69de29..0000000 diff --git a/README.md b/README.md index 830d302..3fd0dc0 100644 --- a/README.md +++ b/README.md @@ -1,126 +1,42 @@ -目录结构 -========================= -www WEB部署目录(或者子目录) -├─app 应用目录 -│ ├─controller 控制器目录 -│ ├─model 模型目录 -│ ├─ ... 更多类库目录 -│ │ -│ ├─common.php 公共函数文件 -│ └─event.php 事件定义文件 -│ -├─config 配置目录 -│ ├─app.php 应用配置 -│ ├─cache.php 缓存配置 -│ ├─console.php 控制台配置 -│ ├─cookie.php Cookie配置 -│ ├─database.php 数据库配置 -│ ├─filesystem.php 文件磁盘配置 -│ ├─lang.php 多语言配置 -│ ├─log.php 日志配置 -│ ├─middleware.php 中间件配置 -│ ├─route.php URL和路由配置 -│ ├─session.php Session配置 -│ ├─trace.php Trace配置 -│ └─view.php 视图配置 -│ -├─view 视图目录 -├─route 路由定义目录 -│ ├─route.php 路由定义文件 -│ └─ ... -│ -├─public WEB目录(对外访问目录) -│ ├─index.php 入口文件 -│ ├─router.php 快速测试文件 -│ └─.htaccess 用于apache的重写 -│ -├─extend 扩展类库目录 -├─runtime 应用的运行时目录(可写,可定制) -├─vendor Composer类库目录 -├─.example.env 环境变量示例文件 -├─composer.json composer 定义文件 -├─LICENSE.txt 授权说明文件 -├─README.md README 文件 -├─think 命令行入口文件 +# phpAdmin 后台管理-教学版 (admin-thinkphp-layui-learning) +- [官网:http://www.ouyangke.com](http://www.ouyangke.com) +- [演示:admin-thinkphp-layui-learning.ouyangke.com](admin-thinkphp-layui-learning.ouyangke.com) -默认应用文件 -========================= -默认安装后,app目录下会包含下面的文件。 -├─app 应用目录 -│ │ -│ ├─BaseController.php 默认基础控制器类 -│ ├─ExceptionHandle.php 应用异常定义文件 -│ ├─common.php 全局公共函数文件 -│ ├─middleware.php 全局中间件定义文件 -│ ├─provider.php 服务提供定义文件 -│ ├─Request.php 应用请求对象 -│ └─event.php 全局事件定义文件 +## 一、介绍 -配置目录 -========================= -├─config(配置目录) -│ ├─app.php 应用配置 -│ ├─cache.php 缓存配置 -│ ├─console.php 控制台配置 -│ ├─cookie.php Cookie配置 -│ ├─database.php 数据库配置 -│ ├─filesystem.php 文件磁盘配置 -│ ├─lang.php 多语言配置 -│ ├─log.php 日志配置 -│ ├─middleware.php 中间件配置 -│ ├─route.php URL和路由配置 -│ ├─session.php Session配置 -│ ├─trace.php Trace配置 -│ ├─view.php 视图配置 -│ └─ ... 更多配置文件 -│ +- phpAdmin 后台管理,是我在教学时,为了使学生更好的学习,开发出来给学生使用。有不同的版本,请选择适合自己的。 +- [admin-thinkphp-antd-vue-learning 教学版](https://gitee.com/ouyangke_com/admin-thinkphp-antd-vue-learning):用于学习 php 的人群 + - 后端框架:Thinkphp6.1 + - 前端框架:Vue3 + - 前端样式:Ant Design Vue3.0 -ThinkPHP 6.0 -=============== +- [admin-thinkphp-layui-learning 教学版](https://gitee.com/ouyangke_com/admin-thinkphp-layui-learning):用于学习 php 的人群 + - 后端框架:Thinkphp6.1 + - Layui2.8 -> 运行环境要求PHP7.2+,兼容PHP8.1 +- [admin-thinkphp-layui-learning 配置版](https://gitee.com/ouyangke_com/admin-thinkphp-layui-config):快速搭建项目后台,用于各行业,是一个高级版本,适合有基础的人,不适合学习,请学生下载教学版。 + - 后端框架:Thinkphp6.1 + - Layui2.8 -[官方应用服务市场](https://market.topthink.com) | [`ThinkAPI`——官方统一API服务](https://docs.topthink.com/think-api) +## 二、安装教程 -ThinkPHPV6.0版本由[亿速云](https://www.yisu.com/)独家赞助发布。 +- [根据 Thinkphp6 安装](https://www.kancloud.cn/manual/thinkphp6_0/1037479) -## 主要新特性 +## 三、使用说明 -* 采用`PHP7`强类型(严格模式) -* 支持更多的`PSR`规范 -* 原生多应用支持 -* 更强大和易用的查询 -* 全新的事件系统 -* 模型事件和数据库事件统一纳入事件系统 -* 模板引擎分离出核心 -* 内部功能中间件化 -* SESSION/Cookie机制改进 -* 对Swoole以及协程支持改进 -* 对IDE更加友好 -* 统一和精简大量用法 +- 1、域名指向 public 目录下 +- 2、后台管理系统访问网址:http://www.xxx.com/index.php/bews/index/index +## 四、鸣谢 +- [PHP 中文网](https://www.php.cn) +- [Thinkphp](http://www.thinkphp.cn) +- [Layui](https://layui.dev) -## 文档 +## 五、技术支持 -[完全开发手册](https://www.kancloud.cn/manual/thinkphp6_0/content) - -## 参与开发 - -请参阅 [ThinkPHP 核心框架包](https://github.com/top-think/framework)。 - -## 版权信息 - -ThinkPHP遵循Apache2开源协议发布,并提供免费使用。 - -本项目包含的第三方源码和二进制文件之版权信息另行标注。 - -版权所有Copyright © 2006-2021 by ThinkPHP (http://thinkphp.cn) - -All rights reserved。 - -ThinkPHP® 商标和著作权所有者为上海顶想信息科技有限公司。 - -更多细节参阅 [LICENSE.txt](LICENSE.txt) +- QQ:428188207 +- 所有版本都是免费的,有问题可以及时向我反馈 +- 请珍惜劳动成果 diff --git a/admin-thinkphp-layui-learning.sql b/admin-thinkphp-layui-learning.sql new file mode 100644 index 0000000..ddc9eee --- /dev/null +++ b/admin-thinkphp-layui-learning.sql @@ -0,0 +1,354 @@ +/* + Navicat MySQL Data Transfer + + Source Server : php + Source Server Type : MySQL + Source Server Version : 50726 + Source Host : 127.0.0.1:3306 + Source Schema : admin-thinkphp-layui-learning + + Target Server Type : MySQL + Target Server Version : 50726 + File Encoding : 65001 + + Date: 28/04/2022 14:37:03 +*/ + +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for bew_admin_config +-- ---------------------------- +DROP TABLE IF EXISTS `bew_admin_config`; +CREATE TABLE `bew_admin_config` ( + `config_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '系统设置ID', + `config_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '功能名,代码参照使用', + `config_info` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '中文名', + `config_type` tinyint(4) UNSIGNED NOT NULL DEFAULT 1 COMMENT '类型 1文本 2图片 3富文本', + `config_value` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '值', + `config_desc` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '描述', + `config_sort` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '排序', + `config_status` tinyint(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '状态 1启用 0禁用', + PRIMARY KEY (`config_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '配置表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of bew_admin_config +-- ---------------------------- +INSERT INTO `bew_admin_config` VALUES (1, 'admin_domain', '本地域名', 1, 'http://admin-thinkphp-layui-learning.ouyangke.com', '项目域名', 0, 1); +INSERT INTO `bew_admin_config` VALUES (2, 'admin_route', '项目路径', 1, '/index.php/bews/', '后台项目路径', 0, 1); +INSERT INTO `bew_admin_config` VALUES (3, 'admin_name', '系统名称', 1, 'phpAdmin后台管理', '后台系统名称,在后台显示', 0, 1); +INSERT INTO `bew_admin_config` VALUES (4, 'admin_page', '每页数量', 1, '10', '列表数据,每页数量', 0, 1); +INSERT INTO `bew_admin_config` VALUES (5, 'logo', 'logo', 2, '/static/bews/images/logo.jpg', '请上传logo', 0, 1); +INSERT INTO `bew_admin_config` VALUES (6, 'admin_info', '系统介绍', 3, '', '系统介绍', 0, 1); + +-- ---------------------------- +-- Table structure for bew_admin_sys_menu +-- ---------------------------- +DROP TABLE IF EXISTS `bew_admin_sys_menu`; +CREATE TABLE `bew_admin_sys_menu` ( + `smid` int(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'ID', + `label` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '菜单名称', + `type` tinyint(3) UNSIGNED NOT NULL DEFAULT 1 COMMENT '菜单类型,0:分组,1:内部链接,2:超链接,3:隐藏按钮', + `src` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '链接源', + `parent_id` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '上级菜单ID', + `icon_class` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '图标class', + `sort` mediumint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT '排序值,升序', + `status` tinyint(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '状态 1开启 0关闭', + PRIMARY KEY (`smid`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 8003 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '左侧菜单' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of bew_admin_sys_menu +-- ---------------------------- +INSERT INTO `bew_admin_sys_menu` VALUES (1, '项目核心', 0, '', 0, 'layui-icon-template-1', 999999, 1); +INSERT INTO `bew_admin_sys_menu` VALUES (2, '项目配置', 1, 'bew/configvalue', 1, 'layui-icon-set-fill', 100, 1); +INSERT INTO `bew_admin_sys_menu` VALUES (3, '配置管理', 3, 'bew/configlist', 1, NULL, 0, 1); +INSERT INTO `bew_admin_sys_menu` VALUES (4, '配置添加', 3, 'bew/configadd', 1, NULL, 0, 1); +INSERT INTO `bew_admin_sys_menu` VALUES (5, '配置修改', 3, 'bew/configedit', 1, NULL, 0, 1); +INSERT INTO `bew_admin_sys_menu` VALUES (6, '配置删除', 3, 'bew/configdel', 1, NULL, 0, 1); +INSERT INTO `bew_admin_sys_menu` VALUES (10, '导航管理', 1, 'bew/menuinfo', 1, 'layui-icon-layer', 0, 1); +INSERT INTO `bew_admin_sys_menu` VALUES (11, '导航添加', 3, 'bew/menuadd', 1, NULL, 0, 1); +INSERT INTO `bew_admin_sys_menu` VALUES (12, '导航修改', 3, 'bew/menuedit', 1, NULL, 0, 1); +INSERT INTO `bew_admin_sys_menu` VALUES (13, '导航删除', 3, 'bew/menudel', 1, NULL, 0, 1); +INSERT INTO `bew_admin_sys_menu` VALUES (14, '按钮列表', 3, 'bew/buttoninfo', 1, NULL, 0, 1); +INSERT INTO `bew_admin_sys_menu` VALUES (15, '按钮添加', 3, 'bew/buttonadd', 1, NULL, 0, 1); +INSERT INTO `bew_admin_sys_menu` VALUES (16, '按钮修改', 3, 'bew/buttonedit', 1, NULL, 0, 1); +INSERT INTO `bew_admin_sys_menu` VALUES (17, '按钮删除', 3, 'bew/buttondel', 1, NULL, 0, 1); +INSERT INTO `bew_admin_sys_menu` VALUES (5000, '系统配置', 0, '', 0, 'layui-icon-set', 999996, 1); +INSERT INTO `bew_admin_sys_menu` VALUES (5002, '部门管理', 1, 'bewadmin/groupinfo', 5000, 'layui-icon-group', 0, 1); +INSERT INTO `bew_admin_sys_menu` VALUES (5003, '管理员管理', 1, 'bewadmin/userinfo', 5000, 'layui-icon-username', 0, 1); +INSERT INTO `bew_admin_sys_menu` VALUES (5004, '个人中心', 1, 'bewadmin/admininfo', 5000, 'layui-icon-edit', 0, 1); +INSERT INTO `bew_admin_sys_menu` VALUES (5005, '部门添加', 3, 'bewadmin/groupadd', 5000, NULL, 0, 1); +INSERT INTO `bew_admin_sys_menu` VALUES (5006, '部门修改', 3, 'bewadmin/groupedit', 5000, NULL, 0, 1); +INSERT INTO `bew_admin_sys_menu` VALUES (5007, '部门删除', 3, 'bewadmin/groupdel', 5000, NULL, 0, 1); +INSERT INTO `bew_admin_sys_menu` VALUES (5008, '管理员添加', 3, 'bewadmin/useradd', 5000, NULL, 0, 1); +INSERT INTO `bew_admin_sys_menu` VALUES (5009, '管理员修改', 3, 'bewadmin/useredit', 5000, NULL, 0, 1); +INSERT INTO `bew_admin_sys_menu` VALUES (5010, '管理员删除', 3, 'bewadmin/userdel', 5000, NULL, 0, 1); +INSERT INTO `bew_admin_sys_menu` VALUES (7000, '代码示例', 0, '', 0, 'layui-icon-app', 999995, 1); +INSERT INTO `bew_admin_sys_menu` VALUES (7001, '图标', 1, 'bewtest/icon_list', 7000, 'layui-icon-theme', 0, 1); +INSERT INTO `bew_admin_sys_menu` VALUES (7002, '演示列表-方法渲染', 1, 'bewtest/test_list', 7000, 'layui-icon-list', 0, 1); +INSERT INTO `bew_admin_sys_menu` VALUES (7003, '演示列表-静态表格', 1, 'bewtest/test_static_list', 7000, 'layui-icon-list', 0, 1); +INSERT INTO `bew_admin_sys_menu` VALUES (7004, '演示添加-方法渲染', 3, 'bewtest/test_add', 7000, NULL, 0, 1); +INSERT INTO `bew_admin_sys_menu` VALUES (7005, '演示修改-方法渲染', 3, 'bewtest/test_edit', 7000, NULL, 0, 1); +INSERT INTO `bew_admin_sys_menu` VALUES (7006, '演示添加-静态表格', 3, 'bewtest/test_static_add', 7000, NULL, 0, 1); +INSERT INTO `bew_admin_sys_menu` VALUES (7007, '演示修改-静态表格', 3, 'bewtest/test_static_edit', 7000, NULL, 0, 1); +INSERT INTO `bew_admin_sys_menu` VALUES (8000, '友情链接', 0, NULL, 0, 'layui-icon-link', 0, 1); +INSERT INTO `bew_admin_sys_menu` VALUES (8001, '欧阳克博客', 2, 'http://www.ouyangke.com', 8000, 'layui-icon-link', 0, 1); +INSERT INTO `bew_admin_sys_menu` VALUES (8002, 'php中文网', 2, 'https://www.php.cn', 8000, 'layui-icon-link', 0, 1); + +-- ---------------------------- +-- Table structure for bew_admin_user +-- ---------------------------- +DROP TABLE IF EXISTS `bew_admin_user`; +CREATE TABLE `bew_admin_user` ( + `uid` int(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '用户ID', + `account` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '账号邮箱', + `password` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '密码', + `name` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '姓名', + `phone` varchar(18) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '手机号', + `qq` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'QQ号', + `sex` tinyint(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT '性别 0未知 1男 2女', + `group_id` int(10) UNSIGNED NOT NULL COMMENT '分组ID', + `times_login` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '登陆次数', + `status` tinyint(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '状态 1开启 0禁用', + `time_add` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '创建时间', + `time_last` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '最后更新时间', + PRIMARY KEY (`uid`) USING BTREE, + UNIQUE INDEX `one_account`(`account`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户信息表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of bew_admin_user +-- ---------------------------- +INSERT INTO `bew_admin_user` VALUES (1, '428188207@qq.com', 'e10adc3949ba59abbe56e057f20f883e', '欧阳克', '0', '428188207', 1, 1, 274, 1, 1564124524, 1651804007); + +-- ---------------------------- +-- Table structure for bew_admin_user_group +-- ---------------------------- +DROP TABLE IF EXISTS `bew_admin_user_group`; +CREATE TABLE `bew_admin_user_group` ( + `group_id` int(11) NOT NULL AUTO_INCREMENT, + `group_name` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '部门名', + `status` tinyint(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '是否生效', + `time_add` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '添加时间', + `rights` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '角色权限,json', + PRIMARY KEY (`group_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '组管理' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of bew_admin_user_group +-- ---------------------------- +INSERT INTO `bew_admin_user_group` VALUES (1, '管理', 1, 1564124524, '[1,2,10,3,4,5,6,15,11,12,13,14,17,16,5000,5004,5003,5002,5010,5009,5008,5007,5006,5005,8000,8002,8001,7000,7003,7002,7001,7007,7006,7005,7004]'); + +-- ---------------------------- +-- Table structure for bew_z_iconfont +-- ---------------------------- +DROP TABLE IF EXISTS `bew_z_iconfont`; +CREATE TABLE `bew_z_iconfont` ( + `icon_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '图标ID', + `icon_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '图标名称', + `icon_css` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '图标css', + `icon_html` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '图标html', + `icon_source` tinyint(1) UNSIGNED NULL DEFAULT 1 COMMENT '来源 1layui', + `status` tinyint(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '状态 1开启 0关闭', + PRIMARY KEY (`icon_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 169 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '图标库' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of bew_z_iconfont +-- ---------------------------- +INSERT INTO `bew_z_iconfont` VALUES (1, '实心', 'layui-icon-heart-fill', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (2, '空心', 'layui-icon-heart', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (3, '亮度/晴', 'layui-icon-light', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (4, '时间/历史', 'layui-icon-time', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (5, '蓝牙', 'layui-icon-bluetooth', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (6, '@艾特', 'layui-icon-at', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (7, '静音', 'layui-icon-mute', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (8, '录音/麦克风', 'layui-icon-mike', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (9, '密钥/钥匙', 'layui-icon-key', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (10, '礼物/活动', 'layui-icon-gift', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (11, '邮箱', 'layui-icon-email', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (12, 'RSS', 'layui-icon-rss', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (13, 'WiFi', 'layui-icon-wifi', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (14, '退出/注销', 'layui-icon-logout', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (15, 'Android 安卓', 'layui-icon-android', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (16, 'Apple IOS 苹果', 'layui-icon-ios', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (17, 'Windows', 'layui-icon-windows', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (18, '穿梭框', 'layui-icon-transfer', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (19, '客服', 'layui-icon-service', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (20, '减', 'layui-icon-subtraction', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (21, '加', 'layui-icon-addition', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (22, '滑块', 'layui-icon-slider', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (23, '打印', 'layui-icon-print', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (24, '导出', 'layui-icon-export', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (25, '列', 'layui-icon-cols', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (26, '退出全屏', 'layui-icon-screen-restore', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (27, '全屏', 'layui-icon-screen-full', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (28, '半星', 'layui-icon-rate-half', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (29, '星星-空心', 'layui-icon-rate', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (30, '星星-实心', 'layui-icon-rate-solid', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (31, '手机', 'layui-icon-cellphone', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (32, '验证码', 'layui-icon-vercode', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (33, '微信', 'layui-icon-login-wechat', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (34, 'QQ', 'layui-icon-login-qq', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (35, '微博', 'layui-icon-login-weibo', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (36, '密码', 'layui-icon-password', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (37, '用户名', 'layui-icon-username', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (38, '刷新-粗', 'layui-icon-refresh-3', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (39, '授权', 'layui-icon-auz', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (40, '左向右伸缩菜单', 'layui-icon-spread-left', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (41, '右向左伸缩菜单', 'layui-icon-shrink-right', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (42, '雪花', 'layui-icon-snowflake', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (43, '提示说明', 'layui-icon-tips', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (44, '便签', 'layui-icon-note', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (45, '主页', 'layui-icon-home', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (46, '高级', 'layui-icon-senior', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (47, '刷新', 'layui-icon-refresh', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (48, '刷新', 'layui-icon-refresh-1', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (49, '旗帜', 'layui-icon-flag', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (50, '主题', 'layui-icon-theme', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (51, '消息-通知', 'layui-icon-notice', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (52, '网站', 'layui-icon-website', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (53, '控制台', 'layui-icon-console', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (54, '表情-惊讶', 'layui-icon-face-surprised', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (55, '设置-空心', 'layui-icon-set', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (56, '模板', 'layui-icon-template-1', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (57, '应用', 'layui-icon-app', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (58, '模板', 'layui-icon-template', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (59, '赞', 'layui-icon-praise', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (60, '踩', 'layui-icon-tread', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (61, '男', 'layui-icon-male', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (62, '女', 'layui-icon-female', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (63, '相机-空心', 'layui-icon-camera', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (64, '相机-实心', 'layui-icon-camera-fill', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (65, '菜单-水平', 'layui-icon-more', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (66, '菜单-垂直', 'layui-icon-more-vertical', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (67, '金额-人民币', 'layui-icon-rmb', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (68, '金额-美元', 'layui-icon-dollar', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (69, '钻石-等级', 'layui-icon-diamond', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (70, '火', 'layui-icon-fire', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (71, '返回', 'layui-icon-return', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (72, '位置-地图', 'layui-icon-location', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (73, '办公-阅读', 'layui-icon-read', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (74, '调查', 'layui-icon-survey', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (75, '表情-微笑', 'layui-icon-face-smile', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (76, '表情-哭泣', 'layui-icon-face-cry', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (77, '购物车', 'layui-icon-cart-simple', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (78, '购物车', 'layui-icon-cart', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (79, '下一页', 'layui-icon-next', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (80, '上一页', 'layui-icon-prev', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (81, '上传-空心-拖拽', 'layui-icon-upload-drag', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (82, '上传-实心', 'layui-icon-upload', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (83, '下载-圆圈', 'layui-icon-download-circle', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (84, '组件', 'layui-icon-component', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (85, '文件-粗', 'layui-icon-file-b', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (86, '用户', 'layui-icon-user', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (87, '发现-实心', 'layui-icon-find-fill', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (88, 'loading', 'layui-icon-loading', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (89, 'loading', 'layui-icon-loading-1', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (90, '添加', 'layui-icon-add-1', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (91, '播放', 'layui-icon-play', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (92, '暂停', 'layui-icon-pause', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (93, '音频-耳机', 'layui-icon-headset', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (94, '视频', 'layui-icon-video', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (95, '语音-声音', 'layui-icon-voice', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (96, '消息-通知-喇叭', 'layui-icon-speaker', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (97, '删除线', 'layui-icon-fonts-del', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (98, '代码', 'layui-icon-fonts-code', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (99, 'HTML', 'layui-icon-fonts-html', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (100, '字体加粗', 'layui-icon-fonts-strong', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (101, '删除链接', 'layui-icon-unlink', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (102, '图片', 'layui-icon-picture', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (103, '链接', 'layui-icon-link', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (104, '表情-笑-粗', 'layui-icon-face-smile-b', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (105, '左对齐', 'layui-icon-align-left', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (106, '右对齐', 'layui-icon-align-right', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (107, '居中对齐', 'layui-icon-align-center', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (108, '字体-下划线', 'layui-icon-fonts-u', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (109, '字体-斜体', 'layui-icon-fonts-i', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (110, 'Tabs 选项卡', 'layui-icon-tabs', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (111, '单选框-选中', 'layui-icon-radio', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (112, '单选框-候选', 'layui-icon-circle', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (113, '编辑', 'layui-icon-edit', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (114, '分享', 'layui-icon-share', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (115, '删除', 'layui-icon-delete', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (116, '表单', 'layui-icon-form', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (117, '手机-细体', 'layui-icon-cellphone-fine', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (118, '聊天 对话 沟通', 'layui-icon-dialogue', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (119, '文字格式化', 'layui-icon-fonts-clear', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (120, '窗口', 'layui-icon-layer', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (121, '日期', 'layui-icon-date', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (122, '水 下雨', 'layui-icon-water', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (123, '代码-圆圈', 'layui-icon-code-circle', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (124, '轮播组图', 'layui-icon-carousel', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (125, '翻页', 'layui-icon-prev-circle', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (126, '布局', 'layui-icon-layouts', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (127, '工具', 'layui-icon-util', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (128, '选择模板', 'layui-icon-templeate-1', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (129, '上传-圆圈', 'layui-icon-upload-circle', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (130, '树', 'layui-icon-tree', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (131, '表格', 'layui-icon-table', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (132, '图表', 'layui-icon-chart', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (133, '图标 报表 屏幕', 'layui-icon-chart-screen', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (134, '引擎', 'layui-icon-engine', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (135, '下三角', 'layui-icon-triangle-d', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (136, '右三角', 'layui-icon-triangle-r', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (137, '文件', 'layui-icon-file', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (138, '设置-小型', 'layui-icon-set-sm', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (139, '减少-圆圈', 'layui-icon-reduce-circle', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (140, '添加-圆圈', 'layui-icon-add-circle', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (141, '404', 'layui-icon-404', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (142, '关于', 'layui-icon-about', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (143, '箭头 向上', 'layui-icon-up', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (144, '箭头 向下', 'layui-icon-down', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (145, '箭头 向左', 'layui-icon-left', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (146, '箭头 向右', 'layui-icon-right', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (147, '圆点', 'layui-icon-circle-dot', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (148, '搜索', 'layui-icon-search', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (149, '设置-实心', 'layui-icon-set-fill', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (150, '群组', 'layui-icon-group', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (151, '好友', 'layui-icon-friends', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (152, '回复 评论 实心', 'layui-icon-reply-fill', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (153, '菜单 隐身 实心', 'layui-icon-menu-fill', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (154, '记录', 'layui-icon-log', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (155, '图片-细体', 'layui-icon-picture-fine', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (156, '表情-笑-细体', 'layui-icon-face-smile-fine', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (157, '列表', 'layui-icon-list', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (158, '发布 纸飞机', 'layui-icon-release', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (159, '对 OK', 'layui-icon-ok', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (160, '帮助', 'layui-icon-help', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (161, '客服', 'layui-icon-chat', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (162, 'top 置顶', 'layui-icon-top', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (163, '收藏-空心', 'layui-icon-star', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (164, '收藏-实心', 'layui-icon-star-fill', '', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (165, '关闭-实心', 'layui-icon-close-fill', 'ဇ', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (166, '关闭-空心', 'layui-icon-close', 'ဆ', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (167, '正确', 'layui-icon-ok-circle', 'စ', 1, 1); +INSERT INTO `bew_z_iconfont` VALUES (168, '添加-圆圈-细体', 'layui-icon-add-circle-fine', '', 1, 1); + +-- ---------------------------- +-- Table structure for bew_z_test +-- ---------------------------- +DROP TABLE IF EXISTS `bew_z_test`; +CREATE TABLE `bew_z_test` ( + `test_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'ID', + `test_input` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '文本', + `test_rich` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '富文本', + `test_rich_baidu` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '百度富文本', + `test_img` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '图片', + `test_reference` tinyint(1) UNSIGNED NULL DEFAULT NULL COMMENT '参照', + `test_time` int(10) UNSIGNED NULL DEFAULT NULL COMMENT '时间戳', + `test_data` date NULL DEFAULT NULL COMMENT '日期', + `test_datatime` datetime NULL DEFAULT NULL COMMENT '日期时间', + `test_url` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '网址', + PRIMARY KEY (`test_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '演示表' ROW_FORMAT = DYNAMIC; + +-- ---------------------------- +-- Records of bew_z_test +-- ---------------------------- +INSERT INTO `bew_z_test` VALUES (1, '输入框', '富文本', '百度富文本', '/static/bews/images/logo.jpg', 1, 1618848000, '2021-04-21', '2021-04-22 00:00:00', 'http://www.ouyangke.cn'); + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/app/AppApi.php b/app/AppApi.php new file mode 100644 index 0000000..e0076b4 --- /dev/null +++ b/app/AppApi.php @@ -0,0 +1,38 @@ + '系统错误,请稍后重试', + #############系统后台使用############## + '90000001' => '管理员账户不能为空', + '90000002' => '真实姓名不能为空', + '90000003' => '手机号不能为空', + '90000004' => '角色不能为空', + '90000005' => '密码不能为空', + '90000006' => '管理员账户要用邮箱', + '90000007' => '管理员账户已存在', + '90000008' => '角色名称不能为空', + '90000009' => '导航名称不能为空', + '90000010' => '导航下还有数据', + '90000011' => '请选择类型', + '90000012' => '内部代码不能为空', + '90000013' => '链接地址不能为空', + '90000015' => '按钮名称不能为空', + '90000029' => '管理员账户不存在', + '90000030' => '管理员已被禁用', + '90000031' => '密码不正确', + + '91000001' => '添加失败', + '91000002' => '修改失败', + '91000003' => '删除失败', + '91000004' => '未改变数据', + '91000005' => '未查询到数据', + '91000006' => '失败', + ); + return $array[$code]; + } +} \ No newline at end of file diff --git a/app/admin/controller/Base.php b/app/admin/controller/Base.php new file mode 100644 index 0000000..400bf09 --- /dev/null +++ b/app/admin/controller/Base.php @@ -0,0 +1,180 @@ +config = $YzAdminConfig->getAll(); + # 获取账户,账户判断 + $this->adminId = Cookie::get('admin_id'); + if(empty($this->adminId)){ + header('Location:'.$this->config['admin_route'].'Login/index'); + exit; + } + $this->aUser = Db::table('yz_admin_user')->where('uid',$this->adminId)->find(); + + if (empty($this->aUser)) { + Cookie::delete('admin_id'); + $this->error('管理员账户不存在'); + } + if ($this->aUser['status'] != 1) { + Cookie::delete('admin_id'); + $this->error('管理员已被禁用'); + } + # 获取用户组权限 + $group = Db::table('yz_admin_user_group')->where(['group_id'=>$this->aUser['group_id']])->find(); + if(empty($group)){ + $this->error('对不起,您没有权限'); + } + # 获取当前链接,查询是否有权限 + $controller = request()->controller(); + $action = request()->action(); + $key = $controller.'/'.$action; + + // // 演示站专用 + // if(Request::isPost()){ + // if( + // $key == 'Yunzer/configvalue' || + // $key == 'Yunzer/configadd' || + // $key == 'Yunzer/configedit' || + // $key == 'Yunzer/configdel' || + // $key == 'Yunzer/menuadd' || + // $key == 'Yunzer/menuedit' || + // $key == 'Yunzer/menudel' || + // $key == 'Yunzer/buttonadd' || + // $key == 'Yunzer/buttonedit' || + // $key == 'Yunzer/buttondel' || + // $key == 'Yunzeradmin/groupadd' || + // $key == 'Yunzeradmin/groupedit' || + // $key == 'Yunzeradmin/groupdel' || + // $key == 'Yunzeradmin/useradd' || + // $key == 'Yunzeradmin/useredit' || + // $key == 'Yunzeradmin/userdel' || + // $key == 'Yunzeradmin/admininfo' || + // $key == 'Yunzeradmin/test_add' || + // $key == 'Yunzeradmin/test_edit' || + // $key == 'Yunzeradmin/test_static_add' || + // $key == 'Yunzeradmin/test_static_edit' || + // $key == 'Index/upload_img' || + // $key == 'Index/upload_img_s' || + // $key == 'Index/upload_imgs_kin' + // ){ + // $this->returnCode(1,'演示站,不能操作'); + // } + // } + // // 演示站专用 + + // if($key == 'Index/index' || $key == 'Index/welcome'){ + + // }else{ + // $aMenu = Db::table('yz_admin_sys_menu')->where('src',$key)->find(); + // if(empty($aMenu)){ + // $this->error('对不起,您访问的功能不存在'); + // } + // $rights = json_decode($group['rights']); + // if(!in_array($aMenu['smid'],$rights)){ + // $this->error('对不起,您没有权限'); + // } + // } + View::assign([ + 'aUser' => $this->aUser, + 'config' => $this->config + ]); + } + /** + * 返回json对象 + */ + protected function returnCode($code,$data=[],$count=10){ + header('Content-type:application/json'); + if($code == 0){ + $arr = array( + 'code'=>$code, + 'msg'=>'成功', + 'count'=> $count, + 'data' => $data + ); + }else if($code >= 1 && $code <= 100){ + $arr = array( + 'code' => $code, + 'msg' => $data + ); + }else{ + $appapi = new AppApi(); + $arr = array( + 'code'=>$code, + 'msg'=>$appapi::errorTip($code) + ); + } + echo json_encode($arr); + if($code != 0){ + exit; + } + } + + /** + * 操作成功跳转的快捷方法 + * @access protected + * @param mixed $msg 提示信息 + * @return void + */ + protected function success($msg = '') + { + $result = [ + 'code' => 1, + 'msg' => $msg + ]; + + $type = $this->getResponseType(); + if ($type == 'html'){ + $response = view(Config::get('app.dispatch_success_tmpl'), $result); + } else if ($type == 'json') { + $response = json($result); + } + throw new HttpResponseException($response); + } + + /** + * 操作错误跳转的快捷方法 + * @access protected + * @param mixed $msg 提示信息 + * @return void + */ + protected function error($msg = '') + { + $result = [ + 'code' => 0, + 'msg' => $msg + ]; + $response = view(Config::get('app.dispatch_error_tmpl'), $result); + throw new HttpResponseException($response); + } + + /** + * 获取当前的response 输出类型 + * @access protected + * @return string + */ + protected function getResponseType() + { + return Request::isJson() || Request::isAjax() ? 'json' : 'html'; + } +} \ No newline at end of file diff --git a/app/admin/controller/Index.php b/app/admin/controller/Index.php index 263ccdd..d851ffa 100644 --- a/app/admin/controller/Index.php +++ b/app/admin/controller/Index.php @@ -1,17 +1,206 @@ $this->aUser['group_id']]; + $role = Db::table('yz_admin_user_group')->where($where)->find(); + if($role){ + $role['rights'] = (isset($role['rights']) && $role['rights']) ? json_decode($role['rights'],true) : []; + } + if($role['rights']){ + $where = [ + ['smid','in',implode(',',$role['rights']) ], + ['status','=',1] + ]; + // 获取所有菜单 + $menus = Db::table('yz_admin_sys_menu')->order('type,sort desc')->where($where)->select()->toArray(); + + // 构建树形结构菜单 + $menuTree = []; + $menuMap = []; + + // 先将所有菜单项映射到一个关联数组中 + foreach($menus as $item){ + $item['children'] = []; + $menuMap[$item['smid']] = $item; + } + + // 构建树形结构 + foreach($menus as $item){ + if($item['parent_id'] == 0){ + // 顶级菜单 + $menuTree[$item['smid']] = &$menuMap[$item['smid']]; + }else{ + // 子菜单,添加到父菜单的children数组中 + if(isset($menuMap[$item['parent_id']])){ + $menuMap[$item['parent_id']]['children'][] = &$menuMap[$item['smid']]; + } + } + } + + $menu = $menuTree; + } + + View::assign([ + 'role' => $role, + 'menu' => $menu + ]); + return View::fetch(); + } + # 欢迎页面 + public function welcome(){ + View::assign([ + 'time' => date('Y-m-d',$_SERVER['REQUEST_TIME']), + ]); + return View::fetch(); + } -class Index extends BaseController -{ - public function index() - { - return '

:)

ThinkPHP V' . \think\facade\App::version() . '
16载初心不改 - 你值得信赖的PHP框架 Admin模块

[ V6.0 版本由 亿速云 独家赞助发布 ]
'; - } + /** + * 保存附件信息到数据库 + * @param string $name 文件名 + * @param int $type 附件类型 + * @param int $size 文件大小 + * @param string $src 文件路径 + * @return int 附件ID + */ + private function saveAttachment($name, $type, $size, $src) { + $data = [ + 'name' => $name, + 'type' => $type, + 'size' => $size, + 'src' => $src, + 'create_time' => time(), + 'update_time' => time() + ]; + return Db::table('yz_attachments')->insertGetId($data); + } - public function hello($name = 'ThinkPHP6') - { - return 'hello,' . $name; - } -} + # 图片上传 + public function upload_img(){ + // 获取上传的文件 + $file = request()->file(); + $files = request()->file('file'); + + // 检查是否有文件上传 + if(empty($file)){ + return json(['code'=>1, 'msg'=>'没有文件上传'])->send(); + } + + try { + // 验证上传的文件 + validate([ + 'image'=>'filesize:10240|fileExt:jpg,png,gif,jpeg' + ])->check($file); + + // 存储文件到public磁盘的uploads目录 + $info = \think\facade\Filesystem::disk('public')->putFile('uploads', $files); + + // 处理文件路径,统一使用正斜杠 + $info = str_replace("\\", "/", $info); + $img = '/storage/'.$info; + + // 保存附件信息 + $fileName = $files->getOriginalName(); + $fileSize = $files->getSize(); + $attachmentId = $this->saveAttachment($fileName, 1, $fileSize, $img); + + // 返回成功信息 + return json([ + 'code' => 0, + 'data' => $img, + 'url' => $this->config['admin_domain'].$img, + 'attachment_id' => $attachmentId + ])->send(); + + } catch (\think\exception\ValidateException $e) { + // 捕获验证异常并返回错误信息 + return json(['code'=>1, 'msg'=>$e->getMessage()])->send(); + } catch (\Exception $e) { + // 捕获其他异常 + return json(['code'=>1, 'msg'=>'上传失败:'.$e->getMessage()])->send(); + } + } + # 富文本图片上传 + public function upload_imgs(){ + $file = request()->file(); + $files = request()->file('file'); + if(empty($file)){ + return json(['code'=>1, 'msg'=>'没有文件上传'])->send(); + } + try { + validate(['image'=>'filesize:10240|fileExt:jpg,png,gif,jpeg'])->check($file); + $info = \think\facade\Filesystem::disk('public')->putFile('uploads', $files); + + // 处理文件路径 + $info = str_replace("\\", "/", $info); + $img = '/storage/'.$info; + + // 保存附件信息 + $fileName = $files->getOriginalName(); + $fileSize = $files->getSize(); + $attachmentId = $this->saveAttachment($fileName, 2, $fileSize, $img); + + return json([ + 'code' => 0, + 'data' => [ + 'src' => $img, + 'attachment_id' => $attachmentId + ] + ])->send(); + } catch (\think\exception\ValidateException $e) { + return json(['code'=>1, 'msg'=>$e->getMessage()])->send(); + } + } + # 富文本图片上传 + public function upload_imgs_kin(){ + $file = request()->file(); + $files = request()->file('imgFile'); + + if(empty($file)){ + return json(['error'=>1, 'message'=>'没有文件上传'])->send(); + } + try { + validate(['image'=>'filesize:10240|fileExt:jpg,png,gif,jpeg'])->check($file); + $info = \think\facade\Filesystem::disk('public')->putFile('uploads', $files); + + // 处理文件路径 + $info = str_replace("\\", "/", $info); + $img = '/storage/'.$info; + + // 保存附件信息 + $fileName = $files->getOriginalName(); + $fileSize = $files->getSize(); + $attachmentId = $this->saveAttachment($fileName, 3, $fileSize, $img); + + return json([ + 'error' => 0, + 'url' => $img, + 'attachment_id' => $attachmentId + ])->send(); + } catch (\think\exception\ValidateException $e) { + return json(['error'=>1, 'message'=>$e->getMessage()])->send(); + } + } + # 清除缓存 + public function clear(){ + $a = delete_dir_file(Env::get('runtime_path').'cache/'); + $b = delete_dir_file(Env::get('runtime_path').'temp/'); + if ($a || $b) { + $this->returnCode(0); + } else { + $this->returnCode('91000006'); + } + } +} \ No newline at end of file diff --git a/app/admin/controller/Login.php b/app/admin/controller/Login.php new file mode 100644 index 0000000..d57aae1 --- /dev/null +++ b/app/admin/controller/Login.php @@ -0,0 +1,104 @@ +config = $YzAdminConfig->getAll(); + View::assign([ + 'config' => $this->config + ]); + return View::fetch(); + } + public function login() + { + if (Request::isPost()) { + $account = trim(input('post.account')); + if (empty($account)) { + $this->returnCode('90000001'); + } + $pattern = "/^([0-9A-Za-z-_.]+)@([0-9a-z]+.[a-z]{2,3}(.[a-z]{2})?)$/i"; + if (!preg_match($pattern, $account)) { + $this->returnCode('90000006'); + } + $password = trim(input('post.password')); + if (empty($password)) { + $this->returnCode(1, '密码不能为空'); + } + $code = trim(input('post.code')); + if ($code == '') { + $this->returnCode(1, '验证码不能为空'); + } + if (!captcha_check($code)) { + $this->returnCode(1, '验证码错误'); + } + $aUser = Db::table('yz_admin_user')->where('account', $account)->find(); + if (empty($aUser)) { + $this->returnCode('90000029'); + } + if ($aUser['status'] != 1) { + $this->returnCode('90000030'); + } + if ($aUser['password'] != md5($password)) { + $this->returnCode('90000031'); + } + $remember = input('post.remember'); + if (!empty($remember)) { + Cookie::set('admin_id', $aUser['uid'], 60 * 60 * 24 * 7); + Cookie::set('admin_name', $aUser['name'], 60 * 60 * 24 * 7); + } else { + Cookie::set('admin_id', $aUser['uid']); + Cookie::set('admin_name', $aUser['name']); + } + Db::table('yz_admin_user')->where('uid', $aUser['uid'])->update( + ['login_count' => $aUser['login_count'] + 1, 'update_time' => time()] + ); + $this->returnCode(0, [], '登陆成功'); + } + } + public function logout() + { + Cookie::delete('admin_id'); + Cookie::delete('admin_name'); + $this->returnCode(0, [], '退出成功'); + } + protected function returnCode($code, $data = [], $msg = '') + { + header('Content-type:application/json'); + if ($code == 0) { + $arr = array( + 'code' => $code, + 'msg' => $msg, + 'data' => $data + ); + } else if ($code == 1) { + $arr = array( + 'code' => 1, + 'msg' => $data + ); + } else { + $appapi = new AppApi(); + $arr = array( + 'code' => $code, + 'msg' => $appapi::errorTip($code) + ); + } + echo json_encode($arr); + if ($code != 0) { + exit; + } + } +} \ No newline at end of file diff --git a/app/admin/controller/Yunzer.php b/app/admin/controller/Yunzer.php new file mode 100644 index 0000000..f39435b --- /dev/null +++ b/app/admin/controller/Yunzer.php @@ -0,0 +1,345 @@ +where('parent_id',0)->order('sort DESC,smid DESC')->select(); + View::assign([ + 'lists' => $lists + ]); + return View::fetch(); + } + # 菜单添加 + public function menuadd(){ + $req = request(); + if($req->isPost()){ + $data['label'] = trim(input('post.label')); + if(empty($data['label'])){ + View::returnCode('90000009'); + } + $data['icon_class'] = trim(input('post.icon_class')); + $data['sort'] = (int)trim(input('post.sort')); + $data['status'] = (int)trim(input('post.status')); + $data['type'] = (int)trim(input('post.type',0)); + if($data['type'] == 1){ + $data['src'] = trim(input('post.src1')); + if(empty($data['src'])){ + $this->returnCode('90000012'); + } + }else if($data['type'] == 2){ + $data['src'] = trim(input('post.src2')); + if(empty($data['src'])){ + $this->returnCode('90000013'); + } + }else{ + $data['src'] = ''; + } + // 保存用户 + $res = Db::table('yz_admin_sys_menu')->insert($data); + if(!$res){ + $this->returnCode('91000001'); + } + $this->returnCode(0); + }else{ + $iconfont = Db::table('yz_z_iconfont')->where('status',1)->select(); + View::assign([ + 'iconfont' => $iconfont + ]); + return View::fetch(); + } + } + # 菜单修改 + public function menuedit(){ + $req = request(); + if($req->isPost()){ + $smid = (int)input('post.smid'); + $data['label'] = trim(input('post.label')); + if(!$data['label']){ + $this->returnCode('90000009'); + } + $data['icon_class'] = trim(input('post.icon_class')); + $data['sort'] = (int)trim(input('post.sort')); + $data['status'] = (int)trim(input('post.status')); + $data['type'] = (int)trim(input('post.type',0)); + if($data['type'] == 1){ + $data['src'] = trim(input('post.src1')); + if(empty($data['src'])){ + $this->returnCode('90000012'); + } + }else if($data['type'] == 2){ + $data['src'] = trim(input('post.src2')); + if(empty($data['src'])){ + $this->returnCode('90000013'); + } + }else{ + $data['src'] = ''; + } + // 保存用户 + $res = Db::table('yz_admin_sys_menu')->where('smid',$smid)->update($data); + if(!$res){ + $this->returnCode('91000002'); + } + $this->returnCode(0); + }else{ + $smid = (int)input('get.smid'); + $lists = Db::table('yz_admin_sys_menu')->where('smid',$smid)->find(); + $iconfont = Db::table('yz_z_iconfont')->where('status',1)->select(); + View::assign([ + 'lists' => $lists, + 'iconfont' => $iconfont + ]); + return View::fetch(); + } + } + # 菜单删除 + public function menudel(){ + $smid = (int)input('post.smid'); + $count = Db::table('yz_admin_sys_menu')->where('parent_id',$smid)->count(); + if($count > 0){ + $this->returnCode('90000010'); + } + $res = Db::table('yz_admin_sys_menu')->where('smid',$smid)->delete(); + if(empty($res)){ + $this->returnCode('91000003'); + } + $this->returnCode(0); + } + # 按钮管理 + public function buttoninfo(){ + $smid = (int)input('get.smid'); + $lists = Db::table('yz_admin_sys_menu')->where('parent_id',$smid)->order('sort DESC')->select()->toArray(); + if(!empty($lists)){ + foreach($lists as &$v){ + switch ($v['type']) { + case 0: + $v['type_name'] = '顶级菜单'; + break; + case 1: + $v['type_name'] = '内部跳转'; + break; + case 2: + $v['type_name'] = '超链接'; + break; + default: + $v['type_name'] = '未规划类型'; + break; + } + } + } + View::assign([ + 'lists' => $lists, + 'smid' => $smid + ]); + return View::fetch(); + } + # 按钮添加 + public function buttonadd(){ + $req = request(); + if($req->isPost()){ + $smid = (int)input('post.smid'); + $data['label'] = trim(input('post.label')); + if(!$data['label']){ + $this->returnCode('90000015'); + } + $data['icon_class'] = trim(input('post.icon_class')); + $data['sort'] = (int)trim(input('post.sort')); + $data['status'] = (int)trim(input('post.status')); + $data['type'] = (int)trim(input('post.type')); + if(empty($data['type'])){ + $this->returnCode('90000011'); + } + if($data['type'] == 1){ + $data['src'] = trim(input('post.src1')); + if(empty($data['src'])){ + $this->returnCode('90000012'); + } + }else if($data['type'] == 2){ + $data['src'] = trim(input('post.src2')); + if(empty($data['src'])){ + $this->returnCode('90000013'); + } + } + $data['parent_id'] = $smid; + $res = Db::table('yz_admin_sys_menu')->insert($data); + if(!$res){ + $this->returnCode('91000001'); + } + $this->returnCode(0); + }else{ + $smid = (int)input('get.smid'); + $iconfont = Db::table('yz_z_iconfont')->where('status',1)->select(); + View::assign([ + 'smid' => $smid, + 'iconfont' => $iconfont + ]); + return View::fetch(); + } + } + # 按钮修改 + public function buttonedit(){ + $req = request(); + if($req->isPost()){ + $smid = (int)input('post.smid'); + $data['label'] = trim(input('post.label')); + if(!$data['label']){ + $this->returnCode('90000015'); + } + $data['icon_class'] = trim(input('post.icon_class')); + $data['sort'] = (int)trim(input('post.sort')); + $data['status'] = (int)trim(input('post.status')); + $data['type'] = (int)trim(input('post.type')); + if(empty($data['type'])){ + $this->returnCode('90000011'); + } + if($data['type'] == 1){ + $data['src'] = trim(input('post.src1')); + if(empty($data['src'])){ + $this->returnCode('90000012'); + } + }else if($data['type'] == 2){ + $data['src'] = trim(input('post.src2')); + if(empty($data['src'])){ + $this->returnCode('90000013'); + } + } + $res = Db::table('yz_admin_sys_menu')->where('smid',$smid)->update($data); + if(!$res){ + $this->returnCode('91000002'); + } + $this->returnCode(0); + }else{ + $smid = (int)input('get.smid'); + $lists = Db::table('yz_admin_sys_menu')->where('smid',$smid)->find(); + $iconfont = Db::table('yz_z_iconfont')->where('status',1)->select(); + View::assign([ + 'lists' => $lists, + 'iconfont' => $iconfont + ]); + return View::fetch(); + } + } + # 按钮删除 + public function buttondel(){ + $smid = (int)input('post.smid'); + $res = Db::table('yz_admin_sys_menu')->where('smid',$smid)->delete(); + if(empty($res)){ + $this->returnCode('91000003'); + } + $this->returnCode(0); + } + # 配置列表 + public function configlist(){ + $req = request(); + if($req->isPost()){ + $page = (int)input('post.page',1); + $limit = (int)input('post.limit',$this->config['admin_page']); + $count = Db::table('yz_admin_config')->count(); + $lists = Db::table('yz_admin_config')->page($page,$limit)->order('config_sort DESC,config_id DESC')->select(); + $this->returnCode(0,$lists,$count); + }else{ + return View::fetch(); + } + } + # 配置添加 + public function configadd(){ + $req = request(); + if($req->isPost()){ + $data['config_name'] = trim(input('post.config_name')); + if(empty($data['config_name'])){ + $this->returnCode(1,'请输入关键词'); + } + $data['config_info'] = trim(input('post.config_info')); + if(empty($data['config_info'])){ + $this->returnCode(1,'请输入作用'); + } + $data['config_type'] = trim(input('post.config_type')); + $data['config_desc'] = trim(input('post.config_desc')); + $data['config_status'] = trim(input('post.config_status')); + $data['config_sort'] = trim(input('post.config_sort')); + $res = Db::table('yz_admin_config')->insert($data); + if(empty($res)){ + $this->returnCode('91000001'); + } + $this->returnCode(0); + }else{ + return View::fetch(); + } + } + # 配置修改 + public function configedit(){ + $req = request(); + if($req->isPost()){ + $config_id = (int)input('post.config_id'); + if(empty($config_id)){ + $this->returnCode(1,'请选择一条数据'); + } + $data['config_name'] = trim(input('post.config_name')); + if(empty($data['config_name'])){ + $this->returnCode(1,'请输入关键词'); + } + $data['config_info'] = trim(input('post.config_info')); + if(empty($data['config_info'])){ + $this->returnCode(1,'请输入作用'); + } + $data['config_type'] = trim(input('post.config_type')); + $data['config_desc'] = trim(input('post.config_desc')); + $data['config_status'] = trim(input('post.config_status')); + $data['config_sort'] = trim(input('post.config_sort')); + $res = Db::table('yz_admin_config')->where('config_id',$config_id)->update($data); + if(empty($res)){ + $this->returnCode('91000002'); + } + $this->returnCode(0); + }else{ + $config_id = (int)input('get.config_id'); + $find = Db::table('yz_admin_config')->where('config_id',$config_id)->find(); + View::assign([ + 'find' => $find + ]); + return View::fetch(); + } + } + # 配置删除 + public function configdel(){ + $config_id = (int)input('post.config_id'); + if(empty($config_id)){ + $this->returnCode(1,'请选择一条数据'); + } + $res = Db::table('yz_admin_config')->where('config_id',$config_id)->delete(); + if(empty($res)){ + $this->returnCode('91000003'); + } + $this->returnCode(0); + } + # 配置值 + public function configvalue(){ + $req = request(); + if($req->isPost()){ + $post = input('post.'); + if(empty($post)){ + $this->returnCode(1,'数据不能为空'); + } + $oConfig = new YzAdminConfig(); + $updateAll = $oConfig->updateAll($post); + if(empty($updateAll)){ + $this->returnCode('91000002'); + } + $this->returnCode(0); + }else{ + $lists = Db::table('yz_admin_config')->order('config_sort DESC,config_id')->select(); + View::assign([ + 'lists' => $lists + ]); + return View::fetch(); + } + } +} \ No newline at end of file diff --git a/app/admin/controller/Yunzeradmin.php b/app/admin/controller/Yunzeradmin.php new file mode 100644 index 0000000..1655fda --- /dev/null +++ b/app/admin/controller/Yunzeradmin.php @@ -0,0 +1,262 @@ +select(); + View::assign([ + 'group' => $group + ]); + return View::fetch(); + } + public function groupadd(){ + if(Request::isPost()){ + $data['group_name'] = trim(input('post.group_name')); + if(!$data['group_name']){ + $this->returnCode('90000008'); + } + $data['status'] = (int)trim(input('post.status')); + $data['create_time'] = time(); + $menus = input('post.menu/a'); + if($menus){ + $data['rights'] = json_encode(array_keys($menus)); + } + $res = Db::table('yz_admin_user_group')->insert($data); + if(!$res){ + $this->returnCode('91000001'); + } + $this->returnCode(0); + }else{ + $menus = Db::table('yz_admin_sys_menu')->order('type,sort desc')->where('status','=',1)->select(); + $menu = []; + + // 先处理所有父菜单 + foreach($menus as $menus_v){ + if($menus_v['parent_id'] == 0){ + $menu[$menus_v['smid']] = $menus_v; + $menu[$menus_v['smid']]['children'] = []; // 初始化 children 数组 + } + } + + // 再处理子菜单 + foreach($menus as $menus_v){ + if($menus_v['parent_id'] != 0 && isset($menu[$menus_v['parent_id']])){ + $menu[$menus_v['parent_id']]['children'][] = $menus_v; + } + } + + View::assign([ + 'menus' => $menu + ]); + return View::fetch(); + } + } + public function groupedit(){ + if(Request::isPost()){ + $group_id = (int)trim(input('post.group_id')); + $data['group_name'] = trim(input('post.group_name')); + if(!$data['group_name']){ + $this->returnCode('90000008'); + } + $data['status'] = (int)trim(input('post.status')); + $menus = input('post.menu/a'); + if($menus){ + $data['rights'] = json_encode(array_keys($menus)); + }else{ + $data['rights'] = ''; + } + $res = Db::table('yz_admin_user_group')->where('group_id',$group_id)->update($data); + if(!$res){ + $this->returnCode('91000002'); + } + $this->returnCode(0); + }else{ + $group_id = (int)input('get.group_id'); + $group = Db::table('yz_admin_user_group')->where('group_id',$group_id)->find(); + if($group && $group['rights']){ + $group['rights'] = json_decode($group['rights']); + } + + $menus = Db::table('yz_admin_sys_menu')->order('type,sort desc')->where('status','=',1)->select(); + $menu = []; + + // 先处理所有父菜单 + foreach($menus as $menus_v){ + if($menus_v['parent_id'] == 0){ + $menu[$menus_v['smid']] = $menus_v; + $menu[$menus_v['smid']]['children'] = []; // 初始化 children 数组 + } + } + + // 再处理子菜单 + foreach($menus as $menus_v){ + if($menus_v['parent_id'] != 0 && isset($menu[$menus_v['parent_id']])){ + $menu[$menus_v['parent_id']]['children'][] = $menus_v; + } + } + + View::assign([ + 'group' => $group, + 'menus' => $menu + ]); + return View::fetch(); + } + } + public function groupdel(){ + $group_id = (int)input('post.group_id'); + $res = Db::table('yz_admin_user_group')->where('group_id',$group_id)->delete(); + if(empty($res)){ + $this->returnCode('91000003'); + } + $this->returnCode(0); + } + public function userinfo(){ + $lists = Db::table('yz_admin_user')->select(); + $group = []; + $groups = Db::table('yz_admin_user_group')->select(); + foreach ($groups as $key => $value) { + $group[$value['group_id']] = $value; + } + View::assign([ + 'lists' => $lists, + 'group' => $group + ]); + return View::fetch(); + } + public function useradd(){ + if(Request::isPost()){ + $data['account'] = trim(input('post.account')); + if(empty($data['account'])){ + $this->returnCode('90000001'); + } + $pattern = "/^([0-9A-Za-z-_.]+)@([0-9a-z]+.[a-z]{2,3}(.[a-z]{2})?)$/i"; + if(!preg_match($pattern,$data['account'])){ + $this->returnCode('90000006'); + } + $item = Db::table('yz_admin_user')->where('account',$data['account'])->find(); + if($item){ + $this->returnCode('90000007'); + } + $data['name'] = trim(input('post.name')); + $data['phone'] = trim(input('post.phone')); + $data['qq'] = (int)trim(input('post.qq')); + $data['group_id'] = (int)input('post.group_id'); + $data['sex'] = (int)(input('post.sex')); + $data['status'] = (int)(input('post.status')); + $password = trim(input('post.password')); + if(empty($data['name'])){ + $this->returnCode('90000002'); + } + if(empty($data['phone'])){ + $this->returnCode('90000003'); + } + if(empty($data['group_id'])){ + $this->returnCode('90000004'); + } + if(empty($password)){ + $this->returnCode('90000005'); + }else{ + $data['password'] = md5($password); + } + $data['create_time'] = time(); + $data['update_time'] = time(); + $res = Db::table('yz_admin_user')->insert($data); + if(!$res){ + $this->returnCode('91000001'); + } + $this->returnCode(0); + }else{ + $group = []; + $groups = Db::table('yz_admin_user_group')->select(); + foreach ($groups as $key => $value) { + $group[$value['group_id']] = $value; + } + View::assign([ + 'group' => $group + ]); + return View::fetch(); + } + } + # 修改管理员 + public function useredit(){ + if(Request::isPost()){ + $uid = (int)trim(input('post.uid')); + $data['name'] = trim(input('post.name')); + $data['phone'] = trim(input('post.phone')); + $data['qq'] = (int)trim(input('post.qq')); + $data['group_id'] = (int)input('post.group_id'); + $data['sex'] = (int)(input('post.sex')); + $data['status'] = (int)(input('post.status')); + if(empty($data['name'])){ + $this->returnCode('90000002'); + } + if(empty($data['phone'])){ + $this->returnCode('90000003'); + } + if(empty($data['group_id'])){ + $this->returnCode('90000004'); + } + // 保存用户 + $res = Db::table('yz_admin_user')->where('uid',$uid)->update($data); + if(!$res){ + $this->returnCode('91000002'); + } + $this->returnCode(0); + }else{ + $uid = (int)input('get.uid'); + // 加载管理员 + $lists = Db::table('yz_admin_user')->where('uid',$uid)->find(); + // 加载角色 + $group = []; + $groups = Db::table('yz_admin_user_group')->select(); + foreach ($groups as $key => $value) { + $group[$value['group_id']] = $value; + } + View::assign([ + 'lists' => $lists, + 'group' => $group + ]); + return View::fetch(); + } + } + # 删除管理员 + public function userdel(){ + $uid = (int)input('post.uid'); + $res = Db::table('yz_admin_user')->where('uid',$uid)->delete(); + if(empty($res)){ + $this->returnCode('91000003'); + } + $this->returnCode(0); + } + # 管理员信息 + public function admininfo(){ + if(Request::isPost()){ + $find = Db::table('yz_admin_user')->where('uid',$this->adminId)->find(); + if(empty($find)){ + $this->returnCode(1,'当前账户不存在'); + } + $data['name'] = trim(input('post.name')); + $data['phone'] = trim(input('post.phone')); + $data['qq'] = (int)trim(input('post.qq')); + $data['sex'] = (int)(input('post.sex')); + if(empty($data['name'])){ + $this->returnCode('90000002'); + } + if(empty($data['phone'])){ + $this->returnCode('90000003'); + } + // 保存用户 + $res = Db::table('yz_admin_user')->where('uid',$this->adminId)->update($data); + if(!$res){ + $this->returnCode('91000002'); + } + $this->returnCode(0); + }else{ + return View::fetch(); + } + } +} \ No newline at end of file diff --git a/app/admin/controller/Yunzertest.php b/app/admin/controller/Yunzertest.php new file mode 100644 index 0000000..1deeaa0 --- /dev/null +++ b/app/admin/controller/Yunzertest.php @@ -0,0 +1,167 @@ +where('status','=',1)->select(); + View::assign([ + 'lists' => $lists + ]); + return View::fetch(); + } + public function test_list(){ + if(Request::isPost()){ + $count = Db::table('yz_z_test')->count(); + $page = (int)input('post.page',1); + $limit = (int)input('post.limit',10); + $lists = Db::table('yz_z_test')->order('test_id DESC')->page($page,$limit)->select()->each(function($item, $key){ + if($item['test_reference'] == 1){ + $item['test_reference'] = '开启'; + }else{ + $item['test_reference'] = '关闭'; + } + $item['test_time'] = date('Y-m-d H:i:s',$item['test_time']); + return $item; + }); + $this->returnCode(0,$lists,$count); + }else{ + return View::fetch(); + } + } + public function test_add(){ + if(Request::isPost()){ + $data['test_input'] = input('post.test_input'); + $data['test_reference'] = input('post.test_reference'); + $data['test_time'] = input('post.test_time'); + if(!empty($data['test_time'])){ + $data['test_time'] = strtotime($data['test_time']); + } + $data['test_data'] = input('post.test_data'); + $data['test_datatime'] = input('post.test_datatime'); + $data['test_img'] = input('post.test_img'); + $data['test_rich_baidu'] = input('post.test_rich_baidu'); + $data['test_url'] = input('post.test_url'); + + $insert = Db::table('yz_z_test')->insert($data); + if(empty($insert)){ + $this->returnCode('91000001'); + } + $this->returnCode(0); + }else{ + return View::fetch(); + } + } + public function test_edit(){ + if(Request::isPost()){ + $test_id = input('post.test_id'); + $data['test_input'] = input('post.test_input'); + $data['test_reference'] = input('post.test_reference'); + $data['test_time'] = input('post.test_time'); + if(!empty($data['test_time'])){ + $data['test_time'] = strtotime($data['test_time']); + } + $data['test_data'] = input('post.test_data'); + $data['test_datatime'] = input('post.test_datatime'); + $data['test_img'] = input('post.test_img'); + $data['test_rich'] = input('post.test_rich'); + $data['test_rich_baidu'] = input('post.test_rich_baidu'); + $data['test_url'] = input('post.test_url'); + + $update = Db::table('yz_z_test')->where('test_id',$test_id)->update($data); + if(empty($update)){ + $this->returnCode('91000002'); + } + $this->returnCode(0); + }else{ + $test_id = input('get.test_id'); + $find = Db::table('yz_z_test')->where('test_id',$test_id)->find(); + if(!empty($find)){ + $find['test_time'] = date('Y-m-d H:i:s',$find['test_time']); + } + View::assign([ + 'find' => $find + ]); + return View::fetch(); + } + } + public function test_del(){ + $test_id = (int)input('post.test_id'); + $res = Db::table('yz_z_test')->where('test_id',$test_id)->delete(); + if(empty($res)){ + $this->returnCode('91000003'); + } + $this->returnCode(0); + } + public function test_static_list(){ + $lists = Db::table('yz_z_test') + ->order('test_id DESC') + ->paginate(); + View::assign([ + 'lists' => $lists + ]); + return View::fetch(); + } + public function test_static_add(){ + if(Request::isPost()){ + $data['test_input'] = input('post.test_input'); + $data['test_reference'] = input('post.test_reference'); + $data['test_time'] = input('post.test_time'); + if(!empty($data['test_time'])){ + $data['test_time'] = strtotime($data['test_time']); + } + $data['test_data'] = input('post.test_data'); + $data['test_datatime'] = input('post.test_datatime'); + $data['test_img'] = input('post.test_img'); + $data['test_rich_baidu'] = input('post.test_rich_baidu'); + $data['test_url'] = input('post.test_url'); + + $insert = Db::table('yz_z_test')->insert($data); + if(empty($insert)){ + $this->returnCode('91000001'); + } + $this->returnCode(0); + }else{ + return View::fetch(); + } + } + public function test_static_edit(){ + if(Request::isPost()){ + $test_id = input('post.test_id'); + $data['test_input'] = input('post.test_input'); + $data['test_reference'] = input('post.test_reference'); + $data['test_time'] = input('post.test_time'); + if(!empty($data['test_time'])){ + $data['test_time'] = strtotime($data['test_time']); + } + $data['test_data'] = input('post.test_data'); + $data['test_datatime'] = input('post.test_datatime'); + $data['test_img'] = input('post.test_img'); + $data['test_rich'] = input('post.test_rich'); + $data['test_rich_baidu'] = input('post.test_rich_baidu'); + $data['test_url'] = input('post.test_url'); + + $update = Db::table('yz_z_test')->where('test_id',$test_id)->update($data); + if(empty($update)){ + $this->returnCode('91000002'); + } + $this->returnCode(0); + }else{ + $test_id = input('get.test_id'); + $find = Db::table('yz_z_test')->where('test_id',$test_id)->find(); + if(!empty($find)){ + $find['test_time'] = date('Y-m-d H:i:s',$find['test_time']); + if(!empty($find['test_img'])){ + $find['test_img_s'] = explode(';',$find['test_img']); + } + } + View::assign([ + 'find' => $find + ]); + return View::fetch(); + } + } +} \ No newline at end of file diff --git a/app/admin/model/Base.php b/app/admin/model/Base.php new file mode 100644 index 0000000..55a4243 --- /dev/null +++ b/app/admin/model/Base.php @@ -0,0 +1,37 @@ + logs($data,$fileName); + } + } + $info = ['data'=>$data]; + $content = json_encode($info, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) . PHP_EOL; + if(empty($fileName)){ + $filePath = $path . "/" . date("Ymd",time()).'.info.log'; + }else{ + $filePath = $path . "/" . $fileName . '.info.log'; + } + $time = "[".date("Y-m-d H:i:s",time())."]"; + $re = file_put_contents($filePath, $time." ".$content , FILE_APPEND); + if(!$re){ + $this -> logs($data,$fileName); + }else{ + return true; + } + } +} \ No newline at end of file diff --git a/app/admin/model/YzAdminConfig.php b/app/admin/model/YzAdminConfig.php new file mode 100644 index 0000000..5886655 --- /dev/null +++ b/app/admin/model/YzAdminConfig.php @@ -0,0 +1,43 @@ +order('config_sort DESC')->select()->toArray(); + if(empty($aList)){ + return []; + }else{ + $return = []; + foreach($aList as $k=>$v){ + $return[$v['config_name']] = $v['config_value']; + } + } + return $return; + } + /** + * 多条数据更新 + */ + public function updateAll($data){ + $lists = static::order('config_sort DESC,config_id')->select()->toArray(); + if(empty($lists)){ + return false; + }else{ + foreach($lists as &$lists_v){ + $lists_v['config_value'] = $data[$lists_v['config_name']]; + } + $save = static::saveAll($lists); + if(empty($save)){ + return false; + } + } + return true; + } +} \ No newline at end of file diff --git a/app/admin/view/index/index.php b/app/admin/view/index/index.php new file mode 100644 index 0000000..6607cde --- /dev/null +++ b/app/admin/view/index/index.php @@ -0,0 +1,173 @@ + + + + + + {$config['admin_name']} + + + + + + + + + + + +
+
+
+ +
+ + +
+
+ +
+
+ +
    + {volist name="menu" id="vo"} +
  • + + + {$vo['label']} + + {if (isset($vo['children']) && $vo['children'])} +
    + {volist name="vo.children" id="cvo"} +
    + {if $cvo['type'] == 1} + + {$cvo.label} + + {elseif $cvo['type'] == 2 /} + + {$cvo.label} + + {/if} +
    + {/volist} +
    + {/if} +
  • + {/volist} +
+
+ POWER BY 云泽网 +
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+ +
+ + + + + + \ No newline at end of file diff --git a/app/admin/view/index/welcome.php b/app/admin/view/index/welcome.php new file mode 100644 index 0000000..c34e231 --- /dev/null +++ b/app/admin/view/index/welcome.php @@ -0,0 +1,149 @@ +{include file="public/header" /} + + +
+
+

欢迎使用{$config['admin_name']}

+

今天是 ,祝您工作愉快

+
+ +
+
+
用户总数
+
1,234
+
+
+
今日访问
+
256
+
+
+
数据总量
+
8,642
+
+
+
系统消息
+
12
+
+
+ +
+

快捷操作

+
+ + + + + +
+
+
+ + + +{include file="public/tail" /} \ No newline at end of file diff --git a/app/admin/view/login/index.php b/app/admin/view/login/index.php new file mode 100644 index 0000000..cd3d85b --- /dev/null +++ b/app/admin/view/login/index.php @@ -0,0 +1,129 @@ + + + + + 后台管理系统 + + + + + + + + + +
+
+ + +
+
+ + + + \ No newline at end of file diff --git a/app/admin/view/public/header.php b/app/admin/view/public/header.php new file mode 100644 index 0000000..0191020 --- /dev/null +++ b/app/admin/view/public/header.php @@ -0,0 +1,93 @@ + + + + {$config['admin_name']} + + + + + + + + + + \ No newline at end of file diff --git a/app/admin/view/public/tail.php b/app/admin/view/public/tail.php new file mode 100644 index 0000000..8738b98 --- /dev/null +++ b/app/admin/view/public/tail.php @@ -0,0 +1,30 @@ + + + \ No newline at end of file diff --git a/app/admin/view/yunzer/buttonadd.php b/app/admin/view/yunzer/buttonadd.php new file mode 100644 index 0000000..85d6c25 --- /dev/null +++ b/app/admin/view/yunzer/buttonadd.php @@ -0,0 +1,94 @@ +{include file="public/header" /} +
+ +
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+ +
+ +
+ +
+
+
+ +
+ + +
+
+
+
+
+ +
+
+ +{include file="public/tail" /} \ No newline at end of file diff --git a/app/admin/view/yunzer/buttonedit.php b/app/admin/view/yunzer/buttonedit.php new file mode 100644 index 0000000..b2f49ba --- /dev/null +++ b/app/admin/view/yunzer/buttonedit.php @@ -0,0 +1,98 @@ +{include file="public/header" /} +
+ +
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ + +
+
+
+
+
+ +
+
+ +{include file="public/tail" /} \ No newline at end of file diff --git a/app/admin/view/yunzer/buttoninfo.php b/app/admin/view/yunzer/buttoninfo.php new file mode 100644 index 0000000..9d36b1e --- /dev/null +++ b/app/admin/view/yunzer/buttoninfo.php @@ -0,0 +1,155 @@ +{include file="public/header" /} +
+
+
+ +
+ +
+
+
+
+
+
+
+
菜单结构
+ +
+
+
+ + + + + + + + + + + + + {volist name="lists" id='vo'} + + + + + + + + + {/volist} + +
排序类型按钮名图标状态操作
{$vo['sort']} + {if($vo['type']==1)} + 功能模块 {$vo['src']} + {elseif($vo['type']==2)/} + 超链接 {$vo['src']} + {/if} + {$vo['label']} {$vo['icon_class']} + {if($vo['status']==1)} + 开启 + {else/} + 禁用 + {/if} + +
+ + +
+
+
+
+
+
+ + +{include file="public/tail" /} \ No newline at end of file diff --git a/app/admin/view/yunzer/configadd.php b/app/admin/view/yunzer/configadd.php new file mode 100644 index 0000000..fb1ffb1 --- /dev/null +++ b/app/admin/view/yunzer/configadd.php @@ -0,0 +1,47 @@ +{include file="public/header" /} +
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+{include file="public/tail" /} \ No newline at end of file diff --git a/app/admin/view/yunzer/configedit.php b/app/admin/view/yunzer/configedit.php new file mode 100644 index 0000000..a14d7e3 --- /dev/null +++ b/app/admin/view/yunzer/configedit.php @@ -0,0 +1,47 @@ +{include file="public/header" /} +
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+{include file="public/tail" /} \ No newline at end of file diff --git a/app/admin/view/yunzer/configlist.php b/app/admin/view/yunzer/configlist.php new file mode 100644 index 0000000..aff625b --- /dev/null +++ b/app/admin/view/yunzer/configlist.php @@ -0,0 +1,286 @@ +{include file="public/header" /} + + +
+
+ 站点管理 + +
+ + +
+
+ + + +
+
+
+
+ + +{include file="public/tail" /} \ No newline at end of file diff --git a/app/admin/view/yunzer/configvalue.php b/app/admin/view/yunzer/configvalue.php new file mode 100644 index 0000000..5d59038 --- /dev/null +++ b/app/admin/view/yunzer/configvalue.php @@ -0,0 +1,189 @@ +{include file="public/header" /} + + +
+
+ 站点配置 + +
+ +
+ {foreach($lists as $lists_v)} + {if($lists_v['config_type'] == 1)} +
+ +
+ +
+
{$lists_v['config_desc']}
+
+ {elseif($lists_v['config_type'] == 2)/} +
+ +
+ +
+
{$lists_v['config_desc']}
+
+
+ +
+
+ {if !empty($lists_v['config_value'])} +
+ + +
+ {/if} +
+
+
+ + {elseif($lists_v['config_type'] == 3)/} +
+ +
+ +
+
+ {/if} + {/foreach} +
+ +
+ +
+
+ + +{include file="public/tail" /} \ No newline at end of file diff --git a/app/admin/view/yunzer/menuadd.php b/app/admin/view/yunzer/menuadd.php new file mode 100644 index 0000000..9fe8528 --- /dev/null +++ b/app/admin/view/yunzer/menuadd.php @@ -0,0 +1,95 @@ +{include file="public/header" /} +
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
+ +
+ + +
+
+
+
+
+ +
+
+ +{include file="public/tail" /} \ No newline at end of file diff --git a/app/admin/view/yunzer/menuedit.php b/app/admin/view/yunzer/menuedit.php new file mode 100644 index 0000000..6b53a4a --- /dev/null +++ b/app/admin/view/yunzer/menuedit.php @@ -0,0 +1,58 @@ +{include file="public/header" /} +
+ +
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ + +
+
+
+
+
+ +
+
+ +{include file="public/tail" /} \ No newline at end of file diff --git a/app/admin/view/yunzer/menuinfo.php b/app/admin/view/yunzer/menuinfo.php new file mode 100644 index 0000000..fe36433 --- /dev/null +++ b/app/admin/view/yunzer/menuinfo.php @@ -0,0 +1,116 @@ +{include file="public/header" /} +
+
+
+ 菜单管理 +
+
+ + +
+
+ +
+ + + + + + + + + + + + + {volist name="lists" id='vo'} + + + + + + + + + {/volist} + +
类型菜单名图标排序状态操作
+ {if($vo['type']==1)} + 功能模块:{$vo['src']} + {elseif($vo['type']==2)/} + 超链接:{$vo['src']} + {else/} + 顶级 + {/if} + {$vo['label']} {$vo['icon_class']}{$vo['sort']}{$vo['status']==1?'开启':'禁用'} + {if($vo['type'] == 0)} + + {/if} + + +
+ +
+ + + +{include file="public/tail" /} \ No newline at end of file diff --git a/app/admin/view/yunzeradmin/admininfo.php b/app/admin/view/yunzeradmin/admininfo.php new file mode 100644 index 0000000..e5dba55 --- /dev/null +++ b/app/admin/view/yunzeradmin/admininfo.php @@ -0,0 +1,109 @@ +{include file="public/header" /} +
+
+ +
+
+
+ +
+
{$aUser['account']}
+
+
+
+ +
+
账户用于登录系统的账号,不能修改
+
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ + +
+
+
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+
+ +
+
{$aUser['login_count']}次
+
+
+
+ +
+
{:date('Y-m-d H:i:s',$aUser['create_time'])}
+
+
+
+ +
+
{:date('Y-m-d H:i:s',$aUser['update_time'])}
+
+
+
+
+
+
+
+
+ +
+
+ +{include file="public/tail" /} \ No newline at end of file diff --git a/app/admin/view/yunzeradmin/groupadd.php b/app/admin/view/yunzeradmin/groupadd.php new file mode 100644 index 0000000..36dbd7c --- /dev/null +++ b/app/admin/view/yunzeradmin/groupadd.php @@ -0,0 +1,53 @@ +{include file="public/header" /} +
+
+ +
+ +
+
+
+ +
+ + +
+
+
+ + {volist name="menus" id="vo"} +
+
+ +
+ {volist name="vo.children" id="cvo"} + + {/volist} +
+ {/volist} +
+
+
+
+ +
+
+ +{include file="public/tail" /} \ No newline at end of file diff --git a/app/admin/view/yunzeradmin/groupedit.php b/app/admin/view/yunzeradmin/groupedit.php new file mode 100644 index 0000000..8decfef --- /dev/null +++ b/app/admin/view/yunzeradmin/groupedit.php @@ -0,0 +1,54 @@ +{include file="public/header" /} +
+ +
+ +
+ +
+
+
+ +
+ + +
+
+
+ + {volist name="menus" id="vo"} +
+
+ +
+ {volist name="vo.children" id="cvo"} + + {/volist} +
+ {/volist} +
+
+
+
+ +
+
+ +{include file="public/tail" /} \ No newline at end of file diff --git a/app/admin/view/yunzeradmin/groupinfo.php b/app/admin/view/yunzeradmin/groupinfo.php new file mode 100644 index 0000000..3413a62 --- /dev/null +++ b/app/admin/view/yunzeradmin/groupinfo.php @@ -0,0 +1,97 @@ +{include file="public/header" /} +
+
+
+ 角色列表 +
+
+ + +
+ +
+ + + + + + + + + + + + {volist name="group" id='vo'} + + + + + + + {/volist} + +
角色名状态添加时间操作
{$vo.group_name}{$vo.status==1?'开启':'禁用'}{:date('Y-m-d H:i:s',$vo.create_time)} + + +
+ +
+ + + +{include file="public/tail" /} \ No newline at end of file diff --git a/app/admin/view/yunzeradmin/useradd.php b/app/admin/view/yunzeradmin/useradd.php new file mode 100644 index 0000000..c8b051d --- /dev/null +++ b/app/admin/view/yunzeradmin/useradd.php @@ -0,0 +1,84 @@ +{include file="public/header" /} +
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+
+ +
+ + +
+
+
+ +
+ + +
+
+
+
+
+ +
+
+ +{include file="public/tail" /} \ No newline at end of file diff --git a/app/admin/view/yunzeradmin/useredit.php b/app/admin/view/yunzeradmin/useredit.php new file mode 100644 index 0000000..a5159bb --- /dev/null +++ b/app/admin/view/yunzeradmin/useredit.php @@ -0,0 +1,76 @@ +{include file="public/header" /} +
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+ +
+ +
+ +
+
+
+ +
+ + +
+
+
+ +
+ + +
+
+
+
+
+ +
+
+ +{include file="public/tail" /} \ No newline at end of file diff --git a/app/admin/view/yunzeradmin/userinfo.php b/app/admin/view/yunzeradmin/userinfo.php new file mode 100644 index 0000000..2525954 --- /dev/null +++ b/app/admin/view/yunzeradmin/userinfo.php @@ -0,0 +1,112 @@ +{include file="public/header" /} +
+
+
+ 用户列表 +
+
+ + +
+
+ + + + + + + + + + + + + + + + + + {volist name="lists" id='vo'} + + + + + + + + + + + + + {/volist} + +
真实姓名账户手机QQ角色性别状态登陆次数登陆时间操作
{$vo.name}{$vo.account}{$vo.phone}{$vo.qq}{:isset($group[$vo.group_id])?$group[$vo.group_id]['group_name']:''} + {if $vo['sex']==1} + + {elseif $vo['sex'] == 2 /} + + {else /} + 未知 + {/if} + {$vo.status==1?'开启':'禁用'}{$vo.login_count}{:date('Y-m-d H:i:s',$vo.update_time)} + + +
+
+ + +{include file="public/tail" /} \ No newline at end of file diff --git a/app/admin/view/yunzertest/icon_list.php b/app/admin/view/yunzertest/icon_list.php new file mode 100644 index 0000000..fde0872 --- /dev/null +++ b/app/admin/view/yunzertest/icon_list.php @@ -0,0 +1,82 @@ +{include file="public/header" /} + +
+ 图标 +
+
+
+	
+	
+	
+	
+	
+	
+
+ + +{include file="public/tail" /} \ No newline at end of file diff --git a/app/admin/view/yunzertest/test_add.php b/app/admin/view/yunzertest/test_add.php new file mode 100644 index 0000000..692cb42 --- /dev/null +++ b/app/admin/view/yunzertest/test_add.php @@ -0,0 +1,136 @@ +{include file="public/header" /} +
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+
支持png,jpg,gif
+
+
+ +
+
+
+ +
+
+ +
+ +
+ + + +
+
+ +
+ +
+
+
+{include file="public/tail" /} \ No newline at end of file diff --git a/app/admin/view/yunzertest/test_edit.php b/app/admin/view/yunzertest/test_edit.php new file mode 100644 index 0000000..36e79b1 --- /dev/null +++ b/app/admin/view/yunzertest/test_edit.php @@ -0,0 +1,144 @@ +{include file="public/header" /} +
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+ +
+
+ +
+ +
+
支持png,jpg,gif
+
+
+ +
+
+ {if(!empty($find['test_img']))} +
+ + + +
+ {/if} +
+
+ +
+
+ +
+ +
+ + + +
+
+ +
+ +
+
+
+{include file="public/tail" /} \ No newline at end of file diff --git a/app/admin/view/yunzertest/test_list.php b/app/admin/view/yunzertest/test_list.php new file mode 100644 index 0000000..bd79f92 --- /dev/null +++ b/app/admin/view/yunzertest/test_list.php @@ -0,0 +1,193 @@ +{include file="public/header" /} +
+ 演示列表-方法渲染 +
+
+
+ +
+ +
+ +{include file="public/tail" /} \ No newline at end of file diff --git a/app/admin/view/yunzertest/test_static_add.php b/app/admin/view/yunzertest/test_static_add.php new file mode 100644 index 0000000..061377f --- /dev/null +++ b/app/admin/view/yunzertest/test_static_add.php @@ -0,0 +1,140 @@ +{include file="public/header" /} +
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
支持png,jpg,gif
+
+
+ +
+
+
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+
+ +
+
+ + + +{include file="public/tail" /} \ No newline at end of file diff --git a/app/admin/view/yunzertest/test_static_edit.php b/app/admin/view/yunzertest/test_static_edit.php new file mode 100644 index 0000000..403b6cf --- /dev/null +++ b/app/admin/view/yunzertest/test_static_edit.php @@ -0,0 +1,149 @@ +{include file="public/header" /} +
+ +
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
支持png,jpg,gif
+
+
+ +
+
+ {if(!empty($find['test_img']))} +
+ + + +
+ {/if} +
+
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+
+ +
+
+ + + +{include file="public/tail" /} \ No newline at end of file diff --git a/app/admin/view/yunzertest/test_static_list.php b/app/admin/view/yunzertest/test_static_list.php new file mode 100644 index 0000000..12d240a --- /dev/null +++ b/app/admin/view/yunzertest/test_static_list.php @@ -0,0 +1,104 @@ +{include file="public/header" /} +
+ 演示列表-静态表格 + +
+
+ + + + + + + + + + + + + + + + + + {volist name="lists" id='vo'} + + + + + + + + + + + + + + {/volist} + +
ID文本富文本百度文本图片参照时间戳日期日期时间网址链接操作
{$vo['test_id']}{$vo['test_input']}{$vo['test_rich']}{$vo['test_rich_baidu']} + + + {if($vo['test_reference'] == 1)} + 开启 + {else/} + 关闭 + {/if} + {:date('Y-m-d H:i:s',$vo.test_time)}{$vo['test_data']}{$vo['test_datatime']}{$vo['test_url']} + + +
+
{$lists|raw}
+ +{include file="public/tail" /} \ No newline at end of file diff --git a/app/common.php b/app/common.php index 57cb6d8..6eb6540 100644 --- a/app/common.php +++ b/app/common.php @@ -1,2 +1,60 @@ + + + 跳转提示 + + + + +
+ +

+ +

+ +

+
+ + \ No newline at end of file diff --git a/composer.json b/composer.json index a650e61..7cda252 100644 --- a/composer.json +++ b/composer.json @@ -23,7 +23,11 @@ "php": ">=7.2.5", "topthink/framework": "^6.1.0", "topthink/think-orm": "^2.0", - "topthink/think-filesystem": "^1.0" + "topthink/think-filesystem": "^1.0", + "topthink/think-multi-app": "^1.0", + "topthink/think-view": "^1.0", + "topthink/think-captcha": "^3.0", + "phpoffice/phpspreadsheet": "^1.25" }, "require-dev": { "symfony/var-dumper": "^4.2", diff --git a/composer.lock b/composer.lock index 0c0508b..3b224aa 100644 --- a/composer.lock +++ b/composer.lock @@ -4,8 +4,160 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "66559480dea8532df6a457e4e313a236", + "content-hash": "8970cf0ed350dfcc74fde0c4e3fee12f", "packages": [ + { + "name": "composer/pcre", + "version": "3.3.2", + "source": { + "type": "git", + "url": "https://github.com/composer/pcre.git", + "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/pcre/zipball/b2bed4734f0cc156ee1fe9c0da2550420d99a21e", + "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<1.11.10" + }, + "require-dev": { + "phpstan/phpstan": "^1.12 || ^2", + "phpstan/phpstan-strict-rules": "^1 || ^2", + "phpunit/phpunit": "^8 || ^9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + }, + "phpstan": { + "includes": [ + "extension.neon" + ] + } + }, + "autoload": { + "psr-4": { + "Composer\\Pcre\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "PCRE wrapping library that offers type-safe preg_* replacements.", + "keywords": [ + "PCRE", + "preg", + "regex", + "regular expression" + ], + "support": { + "issues": "https://github.com/composer/pcre/issues", + "source": "https://github.com/composer/pcre/tree/3.3.2" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2024-11-12T16:29:46+00:00" + }, + { + "name": "ezyang/htmlpurifier", + "version": "v4.18.0", + "source": { + "type": "git", + "url": "https://github.com/ezyang/htmlpurifier.git", + "reference": "cb56001e54359df7ae76dc522d08845dc741621b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/cb56001e54359df7ae76dc522d08845dc741621b", + "reference": "cb56001e54359df7ae76dc522d08845dc741621b", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0" + }, + "require-dev": { + "cerdic/css-tidy": "^1.7 || ^2.0", + "simpletest/simpletest": "dev-master" + }, + "suggest": { + "cerdic/css-tidy": "If you want to use the filter 'Filter.ExtractStyleBlocks'.", + "ext-bcmath": "Used for unit conversion and imagecrash protection", + "ext-iconv": "Converts text to and from non-UTF-8 encodings", + "ext-tidy": "Used for pretty-printing HTML" + }, + "type": "library", + "autoload": { + "files": [ + "library/HTMLPurifier.composer.php" + ], + "psr-0": { + "HTMLPurifier": "library/" + }, + "exclude-from-classmap": [ + "/library/HTMLPurifier/Language/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-or-later" + ], + "authors": [ + { + "name": "Edward Z. Yang", + "email": "admin@htmlpurifier.org", + "homepage": "http://ezyang.com" + } + ], + "description": "Standards compliant HTML filter written in PHP", + "homepage": "http://htmlpurifier.org/", + "keywords": [ + "html" + ], + "support": { + "issues": "https://github.com/ezyang/htmlpurifier/issues", + "source": "https://github.com/ezyang/htmlpurifier/tree/v4.18.0" + }, + "time": "2024-11-01T03:51:45+00:00" + }, { "name": "league/flysystem", "version": "1.1.10", @@ -225,6 +377,390 @@ ], "time": "2024-01-28T23:22:08+00:00" }, + { + "name": "maennchen/zipstream-php", + "version": "2.2.6", + "source": { + "type": "git", + "url": "https://github.com/maennchen/ZipStream-PHP.git", + "reference": "30ad6f93cf3efe4192bc7a4c9cad11ff8f4f237f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/maennchen/ZipStream-PHP/zipball/30ad6f93cf3efe4192bc7a4c9cad11ff8f4f237f", + "reference": "30ad6f93cf3efe4192bc7a4c9cad11ff8f4f237f", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "myclabs/php-enum": "^1.5", + "php": "^7.4 || ^8.0", + "psr/http-message": "^1.0", + "symfony/polyfill-mbstring": "^1.0" + }, + "require-dev": { + "ext-zip": "*", + "friendsofphp/php-cs-fixer": "^3.9", + "guzzlehttp/guzzle": "^6.5.3 || ^7.2.0", + "mikey179/vfsstream": "^1.6", + "php-coveralls/php-coveralls": "^2.4", + "phpunit/phpunit": "^8.5.8 || ^9.4.2", + "vimeo/psalm": "^4.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "ZipStream\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paul Duncan", + "email": "pabs@pablotron.org" + }, + { + "name": "Jonatan Männchen", + "email": "jonatan@maennchen.ch" + }, + { + "name": "Jesse Donat", + "email": "donatj@gmail.com" + }, + { + "name": "András Kolesár", + "email": "kolesar@kolesar.hu" + } + ], + "description": "ZipStream is a library for dynamically streaming dynamic zip files from PHP without writing to the disk at all on the server.", + "keywords": [ + "stream", + "zip" + ], + "support": { + "issues": "https://github.com/maennchen/ZipStream-PHP/issues", + "source": "https://github.com/maennchen/ZipStream-PHP/tree/2.2.6" + }, + "funding": [ + { + "url": "https://github.com/maennchen", + "type": "github" + }, + { + "url": "https://opencollective.com/zipstream", + "type": "open_collective" + } + ], + "time": "2022-11-25T18:57:19+00:00" + }, + { + "name": "markbaker/complex", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/MarkBaker/PHPComplex.git", + "reference": "95c56caa1cf5c766ad6d65b6344b807c1e8405b9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/MarkBaker/PHPComplex/zipball/95c56caa1cf5c766ad6d65b6344b807c1e8405b9", + "reference": "95c56caa1cf5c766ad6d65b6344b807c1e8405b9", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "dev-master", + "phpcompatibility/php-compatibility": "^9.3", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", + "squizlabs/php_codesniffer": "^3.7" + }, + "type": "library", + "autoload": { + "psr-4": { + "Complex\\": "classes/src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mark Baker", + "email": "mark@lange.demon.co.uk" + } + ], + "description": "PHP Class for working with complex numbers", + "homepage": "https://github.com/MarkBaker/PHPComplex", + "keywords": [ + "complex", + "mathematics" + ], + "support": { + "issues": "https://github.com/MarkBaker/PHPComplex/issues", + "source": "https://github.com/MarkBaker/PHPComplex/tree/3.0.2" + }, + "time": "2022-12-06T16:21:08+00:00" + }, + { + "name": "markbaker/matrix", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/MarkBaker/PHPMatrix.git", + "reference": "728434227fe21be27ff6d86621a1b13107a2562c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/MarkBaker/PHPMatrix/zipball/728434227fe21be27ff6d86621a1b13107a2562c", + "reference": "728434227fe21be27ff6d86621a1b13107a2562c", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "dev-master", + "phpcompatibility/php-compatibility": "^9.3", + "phpdocumentor/phpdocumentor": "2.*", + "phploc/phploc": "^4.0", + "phpmd/phpmd": "2.*", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", + "sebastian/phpcpd": "^4.0", + "squizlabs/php_codesniffer": "^3.7" + }, + "type": "library", + "autoload": { + "psr-4": { + "Matrix\\": "classes/src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mark Baker", + "email": "mark@demon-angel.eu" + } + ], + "description": "PHP Class for working with matrices", + "homepage": "https://github.com/MarkBaker/PHPMatrix", + "keywords": [ + "mathematics", + "matrix", + "vector" + ], + "support": { + "issues": "https://github.com/MarkBaker/PHPMatrix/issues", + "source": "https://github.com/MarkBaker/PHPMatrix/tree/3.0.1" + }, + "time": "2022-12-02T22:17:43+00:00" + }, + { + "name": "myclabs/php-enum", + "version": "1.8.4", + "source": { + "type": "git", + "url": "https://github.com/myclabs/php-enum.git", + "reference": "a867478eae49c9f59ece437ae7f9506bfaa27483" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/php-enum/zipball/a867478eae49c9f59ece437ae7f9506bfaa27483", + "reference": "a867478eae49c9f59ece437ae7f9506bfaa27483", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-json": "*", + "php": "^7.3 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.5", + "squizlabs/php_codesniffer": "1.*", + "vimeo/psalm": "^4.6.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "MyCLabs\\Enum\\": "src/" + }, + "classmap": [ + "stubs/Stringable.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP Enum contributors", + "homepage": "https://github.com/myclabs/php-enum/graphs/contributors" + } + ], + "description": "PHP Enum implementation", + "homepage": "http://github.com/myclabs/php-enum", + "keywords": [ + "enum" + ], + "support": { + "issues": "https://github.com/myclabs/php-enum/issues", + "source": "https://github.com/myclabs/php-enum/tree/1.8.4" + }, + "funding": [ + { + "url": "https://github.com/mnapoli", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/php-enum", + "type": "tidelift" + } + ], + "time": "2022-08-04T09:53:51+00:00" + }, + { + "name": "phpoffice/phpspreadsheet", + "version": "1.29.10", + "source": { + "type": "git", + "url": "https://github.com/PHPOffice/PhpSpreadsheet.git", + "reference": "c80041b1628c4f18030407134fe88303661d4e4e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/c80041b1628c4f18030407134fe88303661d4e4e", + "reference": "c80041b1628c4f18030407134fe88303661d4e4e", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "composer/pcre": "^1||^2||^3", + "ext-ctype": "*", + "ext-dom": "*", + "ext-fileinfo": "*", + "ext-gd": "*", + "ext-iconv": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-simplexml": "*", + "ext-xml": "*", + "ext-xmlreader": "*", + "ext-xmlwriter": "*", + "ext-zip": "*", + "ext-zlib": "*", + "ezyang/htmlpurifier": "^4.15", + "maennchen/zipstream-php": "^2.1 || ^3.0", + "markbaker/complex": "^3.0", + "markbaker/matrix": "^3.0", + "php": "^7.4 || ^8.0", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0", + "psr/simple-cache": "^1.0 || ^2.0 || ^3.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "dev-main", + "dompdf/dompdf": "^1.0 || ^2.0 || ^3.0", + "friendsofphp/php-cs-fixer": "^3.2", + "mitoteam/jpgraph": "^10.3", + "mpdf/mpdf": "^8.1.1", + "phpcompatibility/php-compatibility": "^9.3", + "phpstan/phpstan": "^1.1", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^8.5 || ^9.0", + "squizlabs/php_codesniffer": "^3.7", + "tecnickcom/tcpdf": "^6.5" + }, + "suggest": { + "dompdf/dompdf": "Option for rendering PDF with PDF Writer", + "ext-intl": "PHP Internationalization Functions", + "mitoteam/jpgraph": "Option for rendering charts, or including charts with PDF or HTML Writers", + "mpdf/mpdf": "Option for rendering PDF with PDF Writer", + "tecnickcom/tcpdf": "Option for rendering PDF with PDF Writer" + }, + "type": "library", + "autoload": { + "psr-4": { + "PhpOffice\\PhpSpreadsheet\\": "src/PhpSpreadsheet" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Maarten Balliauw", + "homepage": "https://blog.maartenballiauw.be" + }, + { + "name": "Mark Baker", + "homepage": "https://markbakeruk.net" + }, + { + "name": "Franck Lefevre", + "homepage": "https://rootslabs.net" + }, + { + "name": "Erik Tilt" + }, + { + "name": "Adrien Crivelli" + } + ], + "description": "PHPSpreadsheet - Read, Create and Write Spreadsheet documents in PHP - Spreadsheet engine", + "homepage": "https://github.com/PHPOffice/PhpSpreadsheet", + "keywords": [ + "OpenXML", + "excel", + "gnumeric", + "ods", + "php", + "spreadsheet", + "xls", + "xlsx" + ], + "support": { + "issues": "https://github.com/PHPOffice/PhpSpreadsheet/issues", + "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/1.29.10" + }, + "time": "2025-02-08T02:56:14+00:00" + }, { "name": "psr/cache", "version": "1.0.1", @@ -334,6 +870,125 @@ }, "time": "2021-11-05T16:50:12+00:00" }, + { + "name": "psr/http-client", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", + "keywords": [ + "http", + "http-client", + "psr", + "psr-18" + ], + "support": { + "source": "https://github.com/php-fig/http-client" + }, + "time": "2023-09-23T14:17:50+00:00" + }, + { + "name": "psr/http-factory", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "e616d01114759c4c489f93b099585439f795fe35" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35", + "reference": "e616d01114759c4c489f93b099585439f795fe35", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.0.0", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-factory/tree/1.0.2" + }, + "time": "2023-04-10T20:10:41+00:00" + }, { "name": "psr/http-message", "version": "1.1", @@ -506,6 +1161,92 @@ }, "time": "2017-10-23T01:57:42+00:00" }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.31.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341", + "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.2" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, { "name": "topthink/framework", "version": "v6.1.5", @@ -577,6 +1318,65 @@ }, "time": "2024-04-16T02:01:19+00:00" }, + { + "name": "topthink/think-captcha", + "version": "v3.0.11", + "source": { + "type": "git", + "url": "https://github.com/top-think/think-captcha.git", + "reference": "4f24f560a31011329e3d144732e5370d7676b3fb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/top-think/think-captcha/zipball/4f24f560a31011329e3d144732e5370d7676b3fb", + "reference": "4f24f560a31011329e3d144732e5370d7676b3fb", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "topthink/framework": "^6.0|^8.0" + }, + "type": "library", + "extra": { + "think": { + "config": { + "captcha": "src/config.php" + }, + "services": [ + "think\\captcha\\CaptchaService" + ] + } + }, + "autoload": { + "files": [ + "src/helper.php" + ], + "psr-4": { + "think\\captcha\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "yunwuxin", + "email": "448901948@qq.com" + } + ], + "description": "captcha package for thinkphp", + "support": { + "issues": "https://github.com/top-think/think-captcha/issues", + "source": "https://github.com/top-think/think-captcha/tree/v3.0.11" + }, + "time": "2024-11-22T12:59:35+00:00" + }, { "name": "topthink/think-filesystem", "version": "v1.0.3", @@ -683,6 +1483,60 @@ }, "time": "2025-04-07T06:55:59+00:00" }, + { + "name": "topthink/think-multi-app", + "version": "v1.1.1", + "source": { + "type": "git", + "url": "https://github.com/top-think/think-multi-app.git", + "reference": "f93c604d5cfac2b613756273224ee2f88e457b88" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/top-think/think-multi-app/zipball/f93c604d5cfac2b613756273224ee2f88e457b88", + "reference": "f93c604d5cfac2b613756273224ee2f88e457b88", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.1.0", + "topthink/framework": "^6.0|^8.0" + }, + "type": "library", + "extra": { + "think": { + "services": [ + "think\\app\\Service" + ] + } + }, + "autoload": { + "psr-4": { + "think\\app\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "liu21st", + "email": "liu21st@gmail.com" + } + ], + "description": "thinkphp multi app support", + "support": { + "issues": "https://github.com/top-think/think-multi-app/issues", + "source": "https://github.com/top-think/think-multi-app/tree/v1.1.1" + }, + "time": "2024-11-25T08:52:44+00:00" + }, { "name": "topthink/think-orm", "version": "v2.0.62", @@ -743,21 +1597,19 @@ "source": "https://github.com/top-think/think-orm/tree/v2.0.62" }, "time": "2024-09-22T06:17:47+00:00" - } - ], - "packages-dev": [ + }, { - "name": "symfony/polyfill-mbstring", - "version": "v1.31.0", + "name": "topthink/think-template", + "version": "v2.0.10", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341" + "url": "https://github.com/top-think/think-template.git", + "reference": "2b28c9f787c94f6c22312c9fe97dd3d926c03e1c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341", - "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341", + "url": "https://api.github.com/repos/top-think/think-template/zipball/2b28c9f787c94f6c22312c9fe97dd3d926c03e1c", + "reference": "2b28c9f787c94f6c22312c9fe97dd3d926c03e1c", "shasum": "", "mirrors": [ { @@ -767,71 +1619,81 @@ ] }, "require": { - "php": ">=7.2" - }, - "provide": { - "ext-mbstring": "*" - }, - "suggest": { - "ext-mbstring": "For best performance" + "php": ">=7.1.0", + "psr/simple-cache": "^1.0" }, "type": "library", - "extra": { - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, "autoload": { - "files": [ - "bootstrap.php" - ], "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" + "think\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "Apache-2.0" ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "liu21st", + "email": "liu21st@gmail.com" } ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" - ], + "description": "the php template engine", "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0" + "issues": "https://github.com/top-think/think-template/issues", + "source": "https://github.com/top-think/think-template/tree/v2.0.10" }, - "funding": [ + "time": "2024-08-12T05:48:57+00:00" + }, + { + "name": "topthink/think-view", + "version": "v1.0.14", + "source": { + "type": "git", + "url": "https://github.com/top-think/think-view.git", + "reference": "edce0ae2c9551ab65f9e94a222604b0dead3576d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/top-think/think-view/zipball/edce0ae2c9551ab65f9e94a222604b0dead3576d", + "reference": "edce0ae2c9551ab65f9e94a222604b0dead3576d", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=7.1.0", + "topthink/think-template": "^2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "think\\view\\driver\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" + "name": "liu21st", + "email": "liu21st@gmail.com" } ], - "time": "2024-09-09T11:45:10+00:00" - }, + "description": "thinkphp template driver", + "support": { + "issues": "https://github.com/top-think/think-view/issues", + "source": "https://github.com/top-think/think-view/tree/v1.0.14" + }, + "time": "2019-11-06T11:40:13+00:00" + } + ], + "packages-dev": [ { "name": "symfony/polyfill-php72", "version": "v1.31.0", diff --git a/config/app.php b/config/app.php index 348c96c..0e93a82 100644 --- a/config/app.php +++ b/config/app.php @@ -10,20 +10,13 @@ return [ 'app_namespace' => '', // 是否启用路由 'with_route' => true, - // 是否启用事件 - 'with_event' => true, - // 自动多应用模式 - 'auto_multi_app' => true, // 默认应用 - 'default_app' => 'index', + 'default_app' => 'admin', // 默认时区 'default_timezone' => 'Asia/Shanghai', // 应用映射(自动多应用模式有效) - 'app_map' => [ - 'admin' => 'admin', - 'pc' => 'pc' - ], + 'app_map' => [], // 域名绑定(自动多应用模式有效) 'domain_bind' => [], // 禁止URL访问的应用列表(自动多应用模式有效) @@ -31,6 +24,8 @@ return [ // 异常页面的模板文件 'exception_tmpl' => app()->getThinkPath() . 'tpl/think_exception.tpl', + 'dispatch_success_tmpl' => app()->getRootPath() . 'app/tpl/think_exception.tpl', + 'dispatch_error_tmpl' => app()->getRootPath() . 'app/tpl/think_exception.tpl', // 错误显示信息,非调试模式有效 'error_message' => '页面错误!请稍后再试~', diff --git a/config/captcha.php b/config/captcha.php new file mode 100644 index 0000000..420fc39 --- /dev/null +++ b/config/captcha.php @@ -0,0 +1,39 @@ + 4, + // 验证码字符集合 + 'codeSet' => '1234567890', + // 验证码过期时间 + 'expire' => 1800, + // 是否使用中文验证码 + 'useZh' => false, + // 是否使用算术验证码 + 'math' => false, + // 是否使用背景图 + 'useImgBg' => false, + //验证码字符大小 + 'fontSize' => 25, + // 是否使用混淆曲线 + 'useCurve' => false, + //是否添加杂点 + 'useNoise' => false, + // 验证码字体 不设置则随机 + 'fontttf' => '', + //背景颜色 + 'bg' => [243, 251, 254], + // 验证码图片高度 + 'imageH' => 0, + // 验证码图片宽度 + 'imageW' => 0, + + // 添加额外的验证码设置 + // verify => [ + // 'length'=>4, + // ... + //], +]; diff --git a/config/console.php b/config/console.php index a818a98..b43991d 100644 --- a/config/console.php +++ b/config/console.php @@ -5,5 +5,6 @@ return [ // 指令定义 'commands' => [ + ], ]; diff --git a/config/cookie.php b/config/cookie.php index d3b3aab..8d6086c 100644 --- a/config/cookie.php +++ b/config/cookie.php @@ -3,6 +3,8 @@ // | Cookie设置 // +---------------------------------------------------------------------- return [ + // cookie 名称前缀 + 'prefix' => '', // cookie 保存时间 'expire' => 0, // cookie 保存路径 diff --git a/config/database.php b/config/database.php index ba2ae8c..c987721 100644 --- a/config/database.php +++ b/config/database.php @@ -24,13 +24,13 @@ return [ // 数据库类型 'type' => env('database.type', 'mysql'), // 服务器地址 - 'hostname' => env('database.hostname', '127.0.0.1'), + 'hostname' => env('database.hostname', '121.36.243.179'), // 数据库名 - 'database' => env('database.database', ''), + 'database' => env('database.database', 'yunzertest'), // 用户名 - 'username' => env('database.username', 'root'), + 'username' => env('database.username', 'yunzertest'), // 密码 - 'password' => env('database.password', ''), + 'password' => env('database.password', 'zKMDMEs7YP3SLDEF'), // 端口 'hostport' => env('database.hostport', '3306'), // 数据库连接参数 diff --git a/config/route.php b/config/route.php index 2f4cd12..9032ffc 100644 --- a/config/route.php +++ b/config/route.php @@ -4,42 +4,42 @@ // +---------------------------------------------------------------------- return [ - // pathinfo分隔符 - 'pathinfo_depr' => '/', - // URL伪静态后缀 - 'url_html_suffix' => 'html', - // URL普通方式参数 用于自动生成 - 'url_common_param' => true, - // 是否开启路由延迟解析 - 'url_lazy_route' => false, - // 是否强制使用路由 - 'url_route_must' => false, - // 合并路由规则 - 'route_rule_merge' => false, - // 路由是否完全匹配 - 'route_complete_match' => false, - // 访问控制器层名称 - 'controller_layer' => 'controller', - // 空控制器名 - 'empty_controller' => 'Error', - // 是否使用控制器后缀 - 'controller_suffix' => false, - // 默认的路由变量规则 - 'default_route_pattern' => '[\w\.]+', - // 是否开启请求缓存 true自动缓存 支持设置请求缓存规则 - 'request_cache_key' => false, - // 请求缓存有效期 - 'request_cache_expire' => null, - // 全局请求缓存排除规则 - 'request_cache_except' => [], - // 默认控制器名 - 'default_controller' => 'Index', - // 默认操作名 - 'default_action' => 'index', - // 操作方法后缀 - 'action_suffix' => '', - // 默认JSONP格式返回的处理方法 - 'default_jsonp_handler' => 'jsonpReturn', - // 默认JSONP处理方法 - 'var_jsonp_handler' => 'callback', + // pathinfo分隔符 + 'pathinfo_depr' => '/', + // URL伪静态后缀 + 'url_html_suffix' => '', + // URL普通方式参数 用于自动生成 + 'url_common_param' => true, + // 是否开启路由延迟解析 + 'url_lazy_route' => false, + // 是否强制使用路由 + 'url_route_must' => false, + // 合并路由规则 + 'route_rule_merge' => false, + // 路由是否完全匹配 + 'route_complete_match' => true, + // 访问控制器层名称 + 'controller_layer' => 'controller', + // 空控制器名 + 'empty_controller' => 'Error', + // 是否使用控制器后缀 + 'controller_suffix' => false, + // 默认的路由变量规则 + 'default_route_pattern' => '[\w\.]+', + // 是否开启请求缓存 true自动缓存 支持设置请求缓存规则 + 'request_cache_key' => false, + // 请求缓存有效期 + 'request_cache_expire' => null, + // 全局请求缓存排除规则 + 'request_cache_except' => [], + // 默认控制器名 + 'default_controller' => 'Index', + // 默认操作名 + 'default_action' => 'index', + // 操作方法后缀 + 'action_suffix' => '', + // 默认JSONP格式返回的处理方法 + 'default_jsonp_handler' => 'jsonpReturn', + // 默认JSONP处理方法 + 'var_jsonp_handler' => 'callback', ]; diff --git a/config/session.php b/config/session.php index c1ef6e1..6288764 100644 --- a/config/session.php +++ b/config/session.php @@ -4,16 +4,16 @@ // +---------------------------------------------------------------------- return [ - // session name - 'name' => 'PHPSESSID', - // SESSION_ID的提交变量,解决flash上传跨域 - 'var_session_id' => '', - // 驱动方式 支持file cache - 'type' => 'file', - // 存储连接标识 当type使用cache的时候有效 - 'store' => null, - // 过期时间 - 'expire' => 1440, - // 前缀 - 'prefix' => '', + // session name + 'name' => 'PHPSESSID', + // SESSION_ID的提交变量,解决flash上传跨域 + 'var_session_id' => '', + // 驱动方式 支持file cache + 'type' => 'file', + // 存储连接标识 当type使用cache的时候有效 + 'store' => null, + // 过期时间 + 'expire' => 60*60*24*7, + // 前缀 + 'prefix' => '', ]; diff --git a/config/view.php b/config/view.php index 01259a0..13d4e75 100644 --- a/config/view.php +++ b/config/view.php @@ -11,7 +11,7 @@ return [ // 模板目录名 'view_dir_name' => 'view', // 模板后缀 - 'view_suffix' => 'html', + 'view_suffix' => 'php', // 模板文件名分隔符 'view_depr' => DIRECTORY_SEPARATOR, // 模板引擎普通标签开始标记 diff --git a/nginx.htaccess b/nginx.htaccess deleted file mode 100644 index 250ba18..0000000 --- a/nginx.htaccess +++ /dev/null @@ -1,8 +0,0 @@ -location ~* (runtime|application)/{ - return 403; -} -location / { - if (!-e $request_filename){ - rewrite ^(.*)$ /index.php?s=$1 last; break; - } -} \ No newline at end of file diff --git a/public/.htaccess_mac b/public/.htaccess_mac new file mode 100644 index 0000000..d0d5125 --- /dev/null +++ b/public/.htaccess_mac @@ -0,0 +1,8 @@ + + Options +FollowSymlinks -Multiviews + RewriteEngine On + + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] + \ No newline at end of file diff --git a/public/.htaccess_win b/public/.htaccess_win new file mode 100644 index 0000000..87f952d --- /dev/null +++ b/public/.htaccess_win @@ -0,0 +1,8 @@ + + Options +FollowSymlinks -Multiviews + RewriteEngine On + + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1] + \ No newline at end of file diff --git a/public/favicon.ico b/public/favicon.ico index e71815a6618c6ef19c78d27840b8995fb2521499..3b21cd4b34b9e2de515a593480313e5bde273cf2 100644 GIT binary patch literal 1945 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 literal 0 HcmV?d00001 diff --git a/route/app.php b/route/app.php index d8e09e3..a44512f 100644 --- a/route/app.php +++ b/route/app.php @@ -9,9 +9,3 @@ // | Author: liu21st // +---------------------------------------------------------------------- use think\facade\Route; - -Route::get('think', function () { - return 'hello,ThinkPHP6!'; -}); - -Route::get('hello/:name', 'index/hello'); diff --git a/view/README.md b/view/README.md deleted file mode 100644 index 360eb24..0000000 --- a/view/README.md +++ /dev/null @@ -1 +0,0 @@ -如果不使用模板,可以删除该目录 \ No newline at end of file