批量更新租户规则

This commit is contained in:
扫地僧 2026-03-09 23:00:20 +08:00
parent e09b4c639c
commit e27cc8f457
45 changed files with 579 additions and 314 deletions

View File

@ -188,14 +188,14 @@ abstract class BaseController
}
/**
* 获取当前用户的 tenant_id
* 获取当前用户的 tid
*
* @return int 租户ID
*/
protected function getTenantId(): int
{
$userInfo = $this->getAdminUserInfo();
return isset($userInfo['tenant_id']) ? intval($userInfo['tenant_id']) : 0;
return isset($userInfo['tid']) ? intval($userInfo['tid']) : 0;
}
}

View File

@ -2,16 +2,16 @@
declare(strict_types=1);
namespace app\admin\controller;
namespace app\admin\controller\Cms\Analytics;
use app\admin\BaseController;
use think\exception\ValidateException;
use think\facade\Db;
use think\response\Json;
use think\db\exception\DbException;
use app\model\Articles;
use app\model\ArticlesCategory;
use app\model\AdminUser;
use app\model\Cms\Articles;
use app\model\Cms\ArticlesCategory;
use app\model\System\AdminUser;
class AnalyticsController extends BaseController
{
@ -29,11 +29,13 @@ class AnalyticsController extends BaseController
// 总发布量
$totalArticles = Articles::where('delete_time', null)
->where('tid', $this->getTenantId())
->where('status', 2)
->count();
// 昨日新增发布
$yesterdayArticles = Articles::where('delete_time', null)
->where('tid', $this->getTenantId())
->where('status', 2)
->where('publish_date', '>=', $yesterday . ' 00:00:00')
->where('publish_date', '<=', $yesterday . ' 23:59:59')
@ -41,6 +43,7 @@ class AnalyticsController extends BaseController
// 本月新增发布
$monthNewArticles = Articles::where('delete_time', null)
->where('tid', $this->getTenantId())
->where('status', 2)
->where('publish_date', '>=', $monthStart . ' 00:00:00')
->where('publish_date', '<=', $monthEnd)
@ -48,16 +51,19 @@ class AnalyticsController extends BaseController
// 总点赞量
$totalLikes = Articles::where('delete_time', null)
->where('tid', $this->getTenantId())
->where('status', 2)
->sum('likes');
// 总访问量
$totalViews = Articles::where('delete_time', null)
->where('tid', $this->getTenantId())
->where('status', 2)
->sum('views');
// 热门内容TOP5
$hotArticles = Articles::where('delete_time', null)
->where('tid', $this->getTenantId())
->where('status', 2)
->order('views', 'desc')
->limit(5)
@ -100,7 +106,9 @@ class AnalyticsController extends BaseController
{
try {
$stats = [
'total_users' => AdminUser::where('delete_time', null)->count(),
'total_users' => AdminUser::where('delete_time', null)
->where('tid', $this->getTenantId())
->count(),
];
// 记录操作日志
$this->logSuccess('用户统计', '获取用户统计', ['data' => $stats]);

View File

@ -11,6 +11,7 @@ use think\facade\Session;
use think\response\Json;
use think\db\exception\DbException;
use app\model\Cms\Articles;
use app\model\System\AdminUser;
class ArticleController extends BaseController
{
@ -22,18 +23,20 @@ class ArticleController extends BaseController
* @param int $pageSize 每页条数默认10
* @return Json
*/
public function getArticlesList(string $keyword = '', string $cate = '', int $page = 1, int $pageSize = 10): Json
public function getArticlesList(string $author = '', string $keyword = '', string $cate = '', int $page = 1, int $pageSize = 10): Json
{
try {
// 安全处理参数(防止非法参数)
$page = max(1, $page); // 页码最小为1
$pageSize = max(1, min(100, $pageSize)); // 每页条数限制1-100条
$author = trim($author);
$keyword = trim($keyword);
$cate = trim($cate);
// 输出参数值
trace('查询参数:', 'debug');
trace([
'author' => $author,
'keyword' => $keyword,
'cate' => $cate,
'page' => $page,
@ -52,6 +55,11 @@ class ArticleController extends BaseController
$query->where('a.title', 'like', '%' . $keyword . '%');
}
// 作者筛选
if ($author) {
$query->where('a.publisher', 'like', '%' . $author . '%');
}
// 分类筛选
if ($cate) {
$query->where('a.cate', $cate);
@ -208,10 +216,17 @@ class ArticleController extends BaseController
public function getArticle(int $id): Json
{
try {
$article = Articles::where('id', $id)
->where('tid', $this->getTenantId())
->field('id,title,cate,image,desc,author,content,is_trans,transurl,views,likes,publisher,create_time,publish_date,update_time')
->find();
$article = Articles::alias('a')
->where('a.id', $id)
->where('a.tid', $this->getTenantId())
->leftJoin('mete_admin_user u', 'a.publisher = u.id')
->field('a.id,a.title,a.cate,a.image,a.desc,a.author,a.content,a.is_trans,a.transurl,a.views,a.likes,u.name as publisher_name,a.create_time,a.publish_date,a.update_time')
->find()
->toArray();
// 将 publisher_name 赋值给 publisher
$article['publisher'] = $article['publisher_name'] ?? '';
unset($article['publisher_name']);
if (!$article) {
return json(['code' => 404, 'msg' => '文章不存在', 'data' => null]);

View File

@ -2,7 +2,7 @@
declare(strict_types=1);
namespace app\admin\controller;
namespace app\admin\controller\Cms\Banner;
use app\admin\BaseController;
use think\exception\ValidateException;
@ -10,7 +10,7 @@ use think\facade\Db;
use think\facade\Session;
use think\response\Json;
use think\db\exception\DbException;
use app\model\Banner;
use app\model\Cms\Banner;
class BannerController extends BaseController
{
@ -22,6 +22,7 @@ class BannerController extends BaseController
{
try {
$banners = Banner::where('delete_time', null)
->where('tid', $this->getTenantId())
->order('sort', 'asc')
->field('id, title, desc, url, image, sort, create_time, update_time')
->select()
@ -66,6 +67,7 @@ class BannerController extends BaseController
// 准备Banner数据
$bannerData = [
'title' => $data['title'],
'tid' => $this->getTenantId(),
'desc' => $data['desc'] ?? '',
'url' => $data['url'] ?? '',
'image' => $data['image'] ?? '',
@ -127,8 +129,9 @@ class BannerController extends BaseController
'sort|排序号' => 'integer',
]);
// 检查Banner是否存在
// 检查Banner是否存在验证tid
$banner = Banner::where('id', $id)
->where('tid', $this->getTenantId())
->where('delete_time', null)
->find();
@ -150,10 +153,14 @@ class BannerController extends BaseController
];
// 执行更新
Banner::where('id', $id)->update($updateData);
Banner::where('id', $id)
->where('tid', $this->getTenantId())
->update($updateData);
// 获取更新后的Banner信息
$updatedBanner = Banner::where('id', $id)->find();
$updatedBanner = Banner::where('id', $id)
->where('tid', $this->getTenantId())
->find();
// 记录操作日志
$this->logSuccess('Banner管理', '更新Banner', ['id' => $id]);
@ -187,8 +194,9 @@ class BannerController extends BaseController
public function deleteBanner(int $id)
{
try {
// 检查Banner是否存在
// 检查Banner是否存在验证tid
$banner = Banner::where('id', $id)
->where('tid', $this->getTenantId())
->where('delete_time', null)
->find();
@ -201,6 +209,7 @@ class BannerController extends BaseController
// 逻辑删除Banner
$result = Banner::where('id', $id)
->where('tid', $this->getTenantId())
->where('delete_time', null)
->update([
'delete_time' => time(),

View File

@ -4,7 +4,7 @@ declare(strict_types=1);
namespace app\admin\controller\Cms\Demand;
use app\index\BaseController;
use app\admin\BaseController;
use Symfony\Component\VarDumper\VarDumper;
use think\exception\ValidateException;
use think\facade\Request;
@ -26,6 +26,7 @@ class DemandController extends BaseController
{
// 查询分类
$demandList = Demand::where('delete_time', null)
->where('tid', $this->getTenantId())
->order('id', 'desc')
->select();
@ -67,6 +68,7 @@ class DemandController extends BaseController
'desc' => $data['desc'],
'applicant' => $data['applicant'] ?? '',
'status' => $data['status'] ?? 'pending',
'tid' => $this->getTenantId(),
]);
return json([
@ -107,8 +109,10 @@ class DemandController extends BaseController
]);
}
// 查找需求
$demand = Demand::find($id);
// 查找需求验证tid
$demand = Demand::where('id', $id)
->where('tid', $this->getTenantId())
->find();
if (!$demand) {
return json([
'code' => 404,
@ -154,8 +158,10 @@ class DemandController extends BaseController
]);
}
// 查找需求
$demand = Demand::find($id);
// 查找需求验证tid
$demand = Demand::where('id', $id)
->where('tid', $this->getTenantId())
->find();
if (!$demand) {
return json([
'code' => 404,

View File

@ -21,14 +21,14 @@ class TenantDomainController extends BaseController
{
$page = $request->param('page', 1, 'int');
$pageSize = $request->param('pageSize', 10, 'int');
$tenantId = $request->param('tenant_id', 0, 'int');
$tenantId = $request->param('tid', 0, 'int');
$status = $request->param('status', '');
$subDomain = $request->param('sub_domain', '');
$where = [['delete_time', '=', null]];
if ($tenantId > 0) {
$where[] = ['tenant_id', '=', $tenantId];
$where[] = ['tid', '=', $tenantId];
}
if ($status !== '' && $status !== null) {
$where[] = ['status', '=', $status];
@ -49,7 +49,7 @@ class TenantDomainController extends BaseController
->count();
// 获取租户名称
$tenantIds = array_column($list, 'tenant_id');
$tenantIds = array_column($list, 'tid');
$tenants = [];
if ($tenantIds) {
$tenantList = Db::name('mete_tenant')
@ -61,7 +61,7 @@ class TenantDomainController extends BaseController
// 附加租户名称
foreach ($list as &$item) {
$item['tenant_name'] = $tenants[$item['tenant_id']]['tenant_name'] ?? '';
$item['tenant_name'] = $tenants[$item['tid']]['tenant_name'] ?? '';
}
return json([
@ -89,7 +89,7 @@ class TenantDomainController extends BaseController
}
$list = Db::name('mete_tenant_domain')
->where('tenant_id', $tid)
->where('tid', $tid)
->where('delete_time', null)
->order('id', 'desc')
->select()
@ -107,7 +107,7 @@ class TenantDomainController extends BaseController
*/
public function apply(Request $request)
{
$tid = $request->param('tenant_id', 0, 'int');
$tid = $request->param('tid', 0, 'int');
$subDomain = $request->param('sub_domain', '');
$mainDomain = $request->param('main_domain', '');
@ -172,7 +172,7 @@ class TenantDomainController extends BaseController
$now = date('Y-m-d H:i:s');
$id = Db::name('mete_tenant_domain')->insertGetId([
'tenant_id' => $tid,
'tid' => $tid,
'sub_domain' => $subDomain,
'main_domain' => $mainDomain,
'full_domain' => $fullDomain,

View File

@ -2,7 +2,7 @@
declare(strict_types=1);
namespace app\admin\controller;
namespace app\admin\controller\Cms\FrontMenu;
use app\admin\BaseController;
use think\exception\ValidateException;
@ -10,7 +10,7 @@ use think\facade\Db;
use think\facade\Session;
use think\response\Json;
use think\db\exception\DbException;
use app\model\FrontMenu;
use app\model\Cms\FrontMenu;
class FrontMenuController extends BaseController
{
@ -23,6 +23,7 @@ class FrontMenuController extends BaseController
try {
// 获取所有未删除的菜单
$frontMenus = FrontMenu::where('delete_time', null)
->where('tid', $this->getTenantId())
->field('id,pid,title,type,image,path,component_path,sort,desc')
->order('sort', 'desc')
->select()
@ -69,6 +70,7 @@ class FrontMenuController extends BaseController
// 准备菜单数据
$menuData = [
'pid' => $data['pid'] ?? 0,
'tid' => $this->getTenantId(),
'title' => $data['title'],
'type' => $data['type'],
'sort' => $data['sort'] ?? 0,
@ -130,6 +132,7 @@ class FrontMenuController extends BaseController
// 准备更新数据
$updateData = [
'title' => $data['title'],
'tid' => $this->getTenantId(),
'pid' => $data['pid'] ?? null,
'type' => $data['type'],
'path' => $data['path'] ?? null,
@ -177,6 +180,7 @@ class FrontMenuController extends BaseController
try {
// 检查是否有子前端导航
$hasChildren = FrontMenu::where('pid', $id)
->where('tid', $this->getTenantId())
->where('pid', $id)
->where('delete_time', null)
->count() > 0;
@ -192,6 +196,7 @@ class FrontMenuController extends BaseController
$result = FrontMenu::where('id', $id)
->where('id', $id)
->where('delete_time', null)
->where('tid', $this->getTenantId())
->update([
'delete_time' => date('Y-m-d H:i:s'),
'update_time' => date('Y-m-d H:i:s')

View File

@ -2,7 +2,7 @@
declare(strict_types=1);
namespace app\admin\controller;
namespace app\admin\controller\Cms\OnePage;
use app\admin\BaseController;
use think\exception\ValidateException;
@ -10,7 +10,7 @@ use think\facade\Db;
use think\facade\Session;
use think\response\Json;
use think\db\exception\DbException;
use app\model\OnePage;
use app\model\Cms\OnePage;
class OnePageController extends BaseController
{
@ -22,6 +22,7 @@ class OnePageController extends BaseController
{
try {
$onePages = OnePage::where('delete_time', null)
->where('tid', $this->getTenantId())
->order('sort', 'asc')
->field('id, title, content, path, sort, status, create_time, update_time')
->select()
@ -69,6 +70,7 @@ class OnePageController extends BaseController
// 检查路由是否已存在
$exists = OnePage::where('path', $data['path'])
->where('tid', $this->getTenantId())
->where('delete_time', null)
->find();
if ($exists) {
@ -85,6 +87,7 @@ class OnePageController extends BaseController
'path' => $data['path'],
'sort' => $data['sort'] ?? 0,
'status' => $data['status'] ?? 1,
'tid' => $this->getTenantId(),
'create_time' => date('Y-m-d H:i:s'),
];
@ -150,8 +153,9 @@ class OnePageController extends BaseController
]);
}
// 检查单页是否存在
// 检查单页是否存在验证tid
$onePage = OnePage::where('id', $id)
->where('tid', $this->getTenantId())
->where('delete_time', null)
->find();
@ -165,6 +169,7 @@ class OnePageController extends BaseController
// 检查路由是否被其他单页使用
$exists = OnePage::where('path', $data['path'])
->where('id', '<>', $id)
->where('tid', $this->getTenantId())
->where('delete_time', null)
->find();
if ($exists) {
@ -222,8 +227,9 @@ class OnePageController extends BaseController
public function deleteOnePage(int $id)
{
try {
// 检查单页是否存在
// 检查单页是否存在验证tid
$onePage = OnePage::where('id', $id)
->where('tid', $this->getTenantId())
->where('delete_time', null)
->find();
@ -236,6 +242,7 @@ class OnePageController extends BaseController
// 逻辑删除单页
$result = OnePage::where('id', $id)
->where('tid', $this->getTenantId())
->where('delete_time', null)
->update([
'delete_time' => date('Y-m-d H:i:s'),

View File

@ -8,6 +8,7 @@ use app\admin\BaseController;
use app\service\ThemeService;
use think\facade\Request;
/**
* 模板管理控制器
*/

View File

@ -11,7 +11,7 @@ use think\facade\Session;
use think\response\Json;
use think\db\exception\DbException;
use app\model\Erp\Employee;
use app\model\AdminUser;
use app\model\System\AdminUser;
class EmployeeController extends BaseController
{
@ -20,13 +20,13 @@ class EmployeeController extends BaseController
*/
public function getEmployee()
{
$tenantId = $this->getTenantId();
if (!$tenantId) {
$tid = $this->getTenantId();
if (!$tid) {
return json(['code' => 403, 'msg' => '无法获取租户信息']);
}
$list = Employee::where('delete_time', null)
->where('tenant_id', $tenantId)
->where('tid', $tid)
->select()
->toArray();
return json([
@ -41,14 +41,14 @@ class EmployeeController extends BaseController
*/
public function getEmployeeDetail($id)
{
$tenantId = $this->getTenantId();
if (!$tenantId) {
$tid = $this->getTenantId();
if (!$tid) {
return json(['code' => 403, 'msg' => '无法获取租户信息']);
}
$detail = Employee::where('id', $id)
->where('delete_time', null)
->where('tenant_id', $tenantId)
->where('tid', $tid)
->find()
->toArray();
return json([
@ -63,13 +63,13 @@ class EmployeeController extends BaseController
*/
public function createEmployee()
{
$tenantId = $this->getTenantId();
if (!$tenantId) {
$tid = $this->getTenantId();
if (!$tid) {
return json(['code' => 403, 'msg' => '无法获取租户信息']);
}
$data = $this->request->post();
$data['tenant_id'] = $tenantId;
$data['tid'] = $tid;
$employee = Employee::create($data);
if ($employee) {
@ -91,16 +91,16 @@ class EmployeeController extends BaseController
*/
public function editEmployee($id)
{
$tenantId = $this->getTenantId();
if (!$tenantId) {
$tid = $this->getTenantId();
if (!$tid) {
return json(['code' => 403, 'msg' => '无法获取租户信息']);
}
$data = $this->request->post();
unset($data['tenant_id']); // 不允许修改租户ID
unset($data['tid']); // 不允许修改租户ID
$employee = Employee::where('id', $id)
->where('tenant_id', $tenantId)
->where('tid', $tid)
->update($data);
if ($employee !== false) {
return json([
@ -121,13 +121,13 @@ class EmployeeController extends BaseController
*/
public function deleteEmployee($id)
{
$tenantId = $this->getTenantId();
if (!$tenantId) {
$tid = $this->getTenantId();
if (!$tid) {
return json(['code' => 403, 'msg' => '无法获取租户信息']);
}
$employee = Employee::where('id', $id)
->where('tenant_id', $tenantId)
->where('tid', $tid)
->update(['delete_time' => date('Y-m-d H:i:s')]);
if ($employee) {
return json([

View File

@ -11,7 +11,7 @@ use think\facade\Session;
use think\response\Json;
use think\db\exception\DbException;
use app\model\Erp\Organization;
use app\model\AdminUser;
use app\model\System\AdminUser;
class OrganizationController extends BaseController
{
@ -20,13 +20,13 @@ class OrganizationController extends BaseController
*/
public function getOrganization()
{
$tenantId = $this->getTenantId();
if (!$tenantId) {
$tid = $this->getTenantId();
if (!$tid) {
return json(['code' => 403, 'msg' => '无法获取租户信息']);
}
$list = Organization::where('delete_time', null)
->where('tenant_id', $tenantId)
->where('tid', $tid)
->select()
->toArray();
return json([
@ -41,14 +41,14 @@ class OrganizationController extends BaseController
*/
public function getOrganizationDetail($id)
{
$tenantId = $this->getTenantId();
if (!$tenantId) {
$tid = $this->getTenantId();
if (!$tid) {
return json(['code' => 403, 'msg' => '无法获取租户信息']);
}
$detail = Organization::where('id', $id)
->where('delete_time', null)
->where('tenant_id', $tenantId)
->where('tid', $tid)
->find()
->toArray();
$detail['leader_name'] = AdminUser::where('id', $detail['leader_id'])->value('name');
@ -65,13 +65,13 @@ class OrganizationController extends BaseController
*/
public function createOrganization()
{
$tenantId = $this->getTenantId();
if (!$tenantId) {
$tid = $this->getTenantId();
if (!$tid) {
return json(['code' => 403, 'msg' => '无法获取租户信息']);
}
$data = $this->request->post();
$data['tenant_id'] = $tenantId;
$data['tid'] = $tid;
$organization = Organization::create($data);
if ($organization) {
@ -93,16 +93,16 @@ class OrganizationController extends BaseController
*/
public function editOrganization($id)
{
$tenantId = $this->getTenantId();
if (!$tenantId) {
$tid = $this->getTenantId();
if (!$tid) {
return json(['code' => 403, 'msg' => '无法获取租户信息']);
}
$data = $this->request->post();
unset($data['tenant_id']); // 不允许修改租户ID
unset($data['tid']); // 不允许修改租户ID
$organization = Organization::where('id', $id)
->where('tenant_id', $tenantId)
->where('tid', $tid)
->update($data);
if ($organization !== false) {
return json([
@ -123,13 +123,13 @@ class OrganizationController extends BaseController
*/
public function deleteOrganization($id)
{
$tenantId = $this->getTenantId();
if (!$tenantId) {
$tid = $this->getTenantId();
if (!$tid) {
return json(['code' => 403, 'msg' => '无法获取租户信息']);
}
$organization = Organization::where('id', $id)
->where('tenant_id', $tenantId)
->where('tid', $tid)
->update(['delete_time' => date('Y-m-d H:i:s')]);
if ($organization) {
return json([
@ -149,12 +149,12 @@ class OrganizationController extends BaseController
*/
public function getCompanys()
{
$tenantId = $this->getTenantId();
if (!$tenantId) {
$tid = $this->getTenantId();
if (!$tid) {
return json(['code' => 403, 'msg' => '无法获取租户信息']);
}
$where = [['delete_time', '=', null], ['is_company', '=', 1], ['tenant_id', '=', $tenantId]];
$where = [['delete_time', '=', null], ['is_company', '=', 1], ['tid', '=', $tid]];
$list = Organization::where($where)->select()->toArray();
return json([
@ -169,14 +169,14 @@ class OrganizationController extends BaseController
*/
public function getDepartments()
{
$tenantId = $this->getTenantId();
if (!$tenantId) {
$tid = $this->getTenantId();
if (!$tid) {
return json(['code' => 403, 'msg' => '无法获取租户信息']);
}
$parentId = input('parent_id/d', 0);
$where = [['delete_time', '=', null], ['is_company', '=', 0], ['tenant_id', '=', $tenantId]];
$where = [['delete_time', '=', null], ['is_company', '=', 0], ['tid', '=', $tid]];
if ($parentId > 0) {
$where[] = ['parent_id', '=', $parentId];

View File

@ -11,10 +11,11 @@ use think\facade\Cache;
use think\response\Json;
use app\service\JwtService;
use app\model\AdminUser;
use app\model\AdminUserGroup;
use app\model\System\AdminUser;
use app\model\System\AdminUserGroup;
use app\model\System\SystemSiteSettings;
use app\model\Tenant\Tenant;
use app\model\System\OperationLog;
class LoginController extends BaseController
{
@ -76,12 +77,12 @@ class LoginController extends BaseController
'msg' => '租户不存在或已禁用'
]);
}
$tenant_id = $tenant->id;
$tid = $tenant->id;
$tenant_name = $tenant->tenant_name;
// 5. 查询用户新增关联租户ID确保用户属于该租户
$user = AdminUser::where('account', $data['account'])
->where('tenant_id', $tenant_id) // 核心:验证用户所属租户
->where('tid', $tid) // 核心:验证用户所属租户
->where('status', 1)
->find();
@ -121,7 +122,7 @@ class LoginController extends BaseController
'account' => $user['account'],
'name' => $user['name'],
'group_id' => $user['group_id'],
'tenant_id' => $tenant_id, // 新增租户ID
'tid' => $tid, // 新增租户ID
'tenant' => $tenant // 新增:租户名称
];
@ -146,7 +147,7 @@ class LoginController extends BaseController
// 11. 写入用户数据缓存核心缓存包含租户信息示例用Redis可根据你的缓存工具调整
try {
$cacheKey = 'admin_user_' . $user['id'] . '_' . $tenant_id; // 缓存键加入租户ID避免多租户冲突
$cacheKey = 'admin_user_' . $user['id'] . '_' . $tid; // 缓存键加入租户ID避免多租户冲突
$cacheExpire = 86400 * 7; // 缓存7天可根据需求调整
// 写入缓存这里假设你使用thinkphp的Cache类若用其他工具可替换
\think\facade\Cache::set($cacheKey, $userInfo, $cacheExpire);
@ -159,7 +160,7 @@ class LoginController extends BaseController
try {
$this->logSuccess('登录管理', '登录', [
'id' => $user['id'],
'tenant_id' => $tenant_id,
'tid' => $tid,
'tenant' => $tenant
], $userInfo);
} catch (\Exception $e) {
@ -209,7 +210,7 @@ class LoginController extends BaseController
if ($userInfo && isset($userInfo['id'])) {
$this->logSuccess('登录管理', '退出登录', ['result' => 'success'], $userInfo);
} else {
\app\model\OperationLog::create([
OperationLog::create([
'user_id' => 0,
'user_account' => '',
'user_name' => '未知用户',

View File

@ -11,8 +11,8 @@ use think\facade\Session;
use think\response\Json;
use think\db\exception\DbException;
use app\model\SystemMenu;
use app\model\AdminUser;
use app\model\AdminUserGroup;
use app\model\System\AdminUser;
use app\model\System\AdminUserGroup;
class MenuController extends BaseController
{

View File

@ -12,7 +12,7 @@ use think\response\Json;
use app\model\SystemModuleCenter;
use app\model\SystemModuleCategory;
use app\model\AdminUser;
use app\model\System\AdminUser;
class ModuleCenterController extends BaseController
{

View File

@ -7,7 +7,7 @@ namespace app\admin\controller;
use app\admin\BaseController;
use think\response\Json;
use app\model\AdminModules;
use app\model\AdminUserGroup;
use app\model\System\AdminUserGroup;
class ModulesController extends BaseController
{

View File

@ -7,8 +7,8 @@ namespace app\admin\controller\OperationLog;
use app\admin\BaseController;
use think\facade\Request;
use think\response\Json;
use app\model\OperationLog;
use app\model\AdminUser;
use app\model\System\OperationLog;
use app\model\System\AdminUser;
class OperationLogController extends BaseController
{
@ -28,7 +28,8 @@ class OperationLogController extends BaseController
$startTime = Request::param('startTime/s', '');
$endTime = Request::param('endTime/s', '');
$query = OperationLog::where('delete_time', null);
$query = OperationLog::where('delete_time', null)
->where('tid', $this->getTenantId());
// 关键词搜索用户姓名、URL
if ($keyword) {
@ -129,6 +130,7 @@ class OperationLogController extends BaseController
{
try {
$log = OperationLog::where('id', $id)
->where('tid', $this->getTenantId())
->where('delete_time', null)
->find();
@ -164,6 +166,7 @@ class OperationLogController extends BaseController
{
try {
$log = OperationLog::where('id', $id)
->where('tid', $this->getTenantId())
->where('delete_time', null)
->find();
@ -206,6 +209,7 @@ class OperationLogController extends BaseController
}
OperationLog::whereIn('id', $ids)
->where('tid', $this->getTenantId())
->where('delete_time', null)
->delete();
@ -230,11 +234,13 @@ class OperationLogController extends BaseController
try {
// 获取模块列表
$modules = OperationLog::where('delete_time', null)
->where('tid', $this->getTenantId())
->group('module')
->column('module');
// 获取动作列表
$actions = OperationLog::where('delete_time', null)
->where('tid', $this->getTenantId())
->group('action')
->column('action');

View File

@ -2,7 +2,7 @@
namespace app\admin\controller\OperationLog;
use app\model\OperationLog;
use app\model\System\OperationLog;
use think\facade\Request;
use think\facade\Session;
@ -37,6 +37,7 @@ class OperationLogHelper
$userId = $userInfo['id'] ?? 0;
$userAccount = $userInfo['account'] ?? '';
$userName = $userInfo['name'] ?? '';
$tid = $userInfo['tid'] ?? ($userInfo['tid'] ?? 0);
// 获取请求信息
$method = Request::method();
@ -52,6 +53,7 @@ class OperationLogHelper
'user_id' => $userId,
'user_account' => $userAccount,
'user_name' => $userName,
'tid' => $tid,
'module' => $module,
'action' => $action,
'method' => $method,

View File

@ -3,7 +3,7 @@
namespace app\admin\controller\OperationLog;
use think\facade\Request;
use app\model\OperationLog;
use app\model\System\OperationLog;
use app\service\JwtService;
/**
@ -33,6 +33,7 @@ class OperationLogger
$userId = $userInfo['id'] ?? 0;
$userAccount = $userInfo['account'] ?? '';
$userName = $userInfo['name'] ?? '';
$tid = $userInfo['tid'] ?? ($userInfo['tid'] ?? 0);
if (empty($requestData)) {
$requestData = Request::param();
@ -49,6 +50,7 @@ class OperationLogger
'user_id' => $userId,
'user_account' => $userAccount,
'user_name' => $userName,
'tid' => $tid,
'module' => $module,
'action' => $action,
'method' => $method,

View File

@ -1,6 +1,6 @@
<?php
namespace app\admin\controller;
namespace app\admin\controller\System;
use app\admin\BaseController;
use think\facade\Filesystem;
@ -8,8 +8,8 @@ use think\facade\Request;
use think\facade\Db;
use think\Response;
use app\model\FilesCategory;
use app\model\Files;
use app\model\System\FilesCategory;
use app\model\System\Files;
class FileController extends BaseController
{
@ -38,7 +38,8 @@ class FileController extends BaseController
$cate = Request::param('cate/d', 0);
$keyword = Request::param('keyword/s', '');
$query = Files::where('delete_time', null);
$query = Files::where('delete_time', null)
->where('tid', $this->getTenantId());
if ($cate) {
$query->where('cate', $cate);
@ -75,11 +76,20 @@ class FileController extends BaseController
public function getUserCate()
{
try {
$cate = FilesCategory::where('delete_time', null)->field('id,name')->select();
$tid = $this->getTenantId();
// 只根据 tid 筛选分类
$cate = FilesCategory::where('delete_time', null)
->where('tid', $tid)
->field('id,name')
->select();
// 获取每个分类下的文件数量
foreach ($cate as &$c) {
$c['total'] = Files::where('cate', $c['id'])->where('delete_time', null)->count();
$c['total'] = Files::where('cate', $c['id'])
->where('tid', $tid)
->where('delete_time', null)
->count();
}
return json([
@ -101,6 +111,7 @@ class FileController extends BaseController
try {
$data = Request::param();
$data['create_time'] = date('Y-m-d H:i:s');
$data['tid'] = $this->getTenantId();
$id = FilesCategory::insertGetId($data);
// 记录操作日志
@ -129,7 +140,9 @@ class FileController extends BaseController
{
try {
$data = Request::param();
$result = FilesCategory::where('id', $id)->update(['name' => $data['name']]);
$result = FilesCategory::where('id', $id)
->where('tid', $this->getTenantId())
->update(['name' => $data['name']]);
// 记录操作日志
$this->logSuccess('文件管理', '重命名文件分组', ['id' => $id]);
return json([
@ -150,7 +163,21 @@ class FileController extends BaseController
public function deleteFileCate($id)
{
try {
$result = FilesCategory::where('id', $id)->update(['delete_time' => date('Y-m-d H:i:s')]);
// 检查分组里是否有关联文件
$fileCount = Files::where('cate', $id)
->where('tid', $this->getTenantId())
->where('delete_time', null)
->count();
if ($fileCount > 0) {
return json([
'code' => 400,
'msg' => '该分组下还有 ' . $fileCount . ' 个文件,请先删除分组内文件!'
]);
}
$result = FilesCategory::where('id', $id)
->where('tid', $this->getTenantId())
->update(['delete_time' => date('Y-m-d H:i:s')]);
// 记录操作日志
$this->logSuccess('文件管理', '删除文件分组', ['id' => $id]);
return json([
@ -175,12 +202,16 @@ class FileController extends BaseController
$pageSize = Request::param('pageSize/d', 10);
$keyword = Request::param('keyword/s', '');
$query = Files::where('cate', $id)->where('delete_time', null);
$query = Files::where('cate', $id)
->where('tid', $this->getTenantId())
->where('delete_time', null);
if ($keyword) {
$query->whereLike('name', "%{$keyword}%");
}
// 获取总条数
$total = $query->count();
$list = $query->page($page, $pageSize)
->order('create_time', 'desc')
->select();
@ -196,6 +227,7 @@ class FileController extends BaseController
'msg' => 'success',
'data' => [
'list' => $list,
'total' => $total,
'page' => $page,
'pageSize' => $pageSize,
'categoryId' => $id
@ -209,7 +241,7 @@ class FileController extends BaseController
}
}
// 上传文件
// 文件上传
public function uploadFile()
{
try {
@ -230,7 +262,10 @@ class FileController extends BaseController
$fileMd5 = md5_file($file->getRealPath());
// 检查是否已存在相同文件
$existFile = Files::where('md5', $fileMd5)->where('delete_time', null)->find();
$existFile = Files::where('md5', $fileMd5)
->where('tid', $this->getTenantId())
->where('delete_time', null)
->find();
if ($existFile) {
return json([
@ -272,6 +307,7 @@ class FileController extends BaseController
'src' => $fileUrl,
'md5' => $fileMd5,
'uploader' => $userId,
'tid' => $this->getTenantId(),
'create_time' => date('Y-m-d H:i:s'),
];
@ -309,7 +345,10 @@ class FileController extends BaseController
$data['update_time'] = date('Y-m-d H:i:s');
$result = Files::where('id', $id)->where('delete_time', null)->update($data);
$result = Files::where('id', $id)
->where('tid', $this->getTenantId())
->where('delete_time', null)
->update($data);
if ($result) {
// 记录操作日志
@ -329,7 +368,17 @@ class FileController extends BaseController
public function deleteFile($id)
{
try {
$result = Files::where('id', $id)->update(['delete_time' => date('Y-m-d H:i:s')]);
// 先获取文件信息
$file = Files::where('id', $id)
->where('tid', $this->getTenantId())
->find();
if (!$file) {
return json(['code' => 404, 'msg' => '文件不存在']);
}
$result = Files::where('id', $id)
->where('tid', $this->getTenantId())
->update(['delete_time' => date('Y-m-d H:i:s')]);
if ($result) {
// 记录操作日志
@ -345,11 +394,49 @@ class FileController extends BaseController
}
}
//永久删除文件
public function deleteFilePermanently($id)
{
try {
// 先获取文件信息
$file = Files::where('id', $id)
->where('tid', $this->getTenantId())
->find();
if (!$file) {
return json(['code' => 404, 'msg' => '文件不存在']);
}
// 删除服务器上的文件
if ($file['src']) {
$this->deleteFileFromServer($file['src']);
}
$result = Files::where('id', $id)
->where('tid', $this->getTenantId())
->update(['delete_time' => date('Y-m-d H:i:s')]);
if ($result) {
// 记录操作日志
$this->logSuccess('文件管理', '永久删除文件', ['id' => $id]);
return json(['code' => 200, 'msg' => '永久删除成功']);
}
return json(['code' => 404, 'msg' => '文件不存在']);
} catch (\Exception $e) {
// 记录失败日志
$this->logFail('文件管理', '永久删除文件', $e->getMessage());
return json(['code' => 500, 'msg' => '永久删除失败: ' . $e->getMessage()]);
}
}
// 下载文件
public function download($id)
{
try {
$file = Files::where('id', $id)->where('delete_time', null)->find();
$file = Files::where('id', $id)
->where('tid', $this->getTenantId())
->where('delete_time', null)
->find();
if (!$file) {
return json(['code' => 404, 'msg' => '文件不存在']);
@ -374,7 +461,9 @@ class FileController extends BaseController
{
try {
$cate = Request::param('cate/d', 0);
$result = Files::where('id', $id)->update(['cate' => $cate]);
$result = Files::where('id', $id)
->where('tid', $this->getTenantId())
->update(['cate' => $cate]);
if ($result) {
// 记录操作日志
$this->logSuccess('文件管理', '移动文件', ['id' => $id]);
@ -389,128 +478,120 @@ class FileController extends BaseController
}
}
//删除服务器上文件
private function deleteFileFromServer($fileUrl)
{
// 去掉开头的 /storage/,得到相对路径
$relativePath = ltrim($fileUrl, '/');
if (strpos($relativePath, 'storage/') === 0) {
$relativePath = substr($relativePath, 8); // 去掉 'storage/' 部分
}
// 获取实际服务器路径
$fullPath = root_path() . 'public/storage/' . $relativePath;
// 上传头像
public function uploadAvatar()
if (file_exists($fullPath)) {
unlink($fullPath);
}
}
// 批量删除文件
public function batchDeleteFiles()
{
try {
$file = Request::file('file');
if (!$file) {
return json(['code' => 400, 'msg' => '请选择要上传的文件']);
$ids = Request::param('ids/a', []);
if (empty($ids)) {
return json(['code' => 400, 'msg' => '请选择要删除的文件']);
}
// 验证文件大小和类型
$maxSize = 50 * 1024 * 1024; // 50MB
$fileExt = strtolower($file->getOriginalExtension());
if ($file->getSize() > $maxSize) {
return json(['code' => 400, 'msg' => '文件大小不能超过50MB']);
}
// 计算文件MD5
$fileMd5 = md5_file($file->getRealPath());
// 检查是否已存在相同文件
$existFile = Files::where('md5', $fileMd5)->where('delete_time', null)->find();
if ($existFile) {
// 检查物理文件是否存在
$existFilePath = public_path() . $existFile['src'];
if (!file_exists($existFilePath)) {
// 物理文件不存在,删除数据库记录,继续上传
Files::where('id', $existFile['id'])->delete();
} else {
return json([
'code' => 201,
'msg' => '文件已存在',
'data' => [
'url' => $existFile['src'],
'id' => $existFile['id'],
'name' => $existFile['name']
]
]);
foreach ($ids as $id) {
$file = Files::where('id', $id)
->where('tid', $this->getTenantId())
->find();
if ($file && $file['src']) {
$this->deleteFileFromServer($file['src']);
}
}
// 确定文件类型
$fileType = 1; // 默认为文件
foreach ($this->allowedExtensions as $type => $extensions) {
if (in_array($fileExt, $extensions)) {
$fileType = $this->fileTypes[$type];
break;
}
}
$cate = Request::param('cate/d', 0);
// 生成按日期分类的目录结构
$datePath = date('Y/m/d');
$saveName = $datePath . '/' . uniqid() . '.' . $fileExt;
$fullPath = Filesystem::disk('public')->putFileAs('avatar', $file, $saveName);
$fileUrl = '/storage/' . str_replace('\\', '/', $fullPath);
// 获取当前登录用户ID
$userId = Request::middleware('user_id', '');
// 保存文件信息到数据库
$fileData = [
'name' => $file->getOriginalName(),
'type' => $fileType,
'cate' => $cate,
'size' => $file->getSize(),
'src' => $fileUrl,
'md5' => $fileMd5,
'uploader' => $userId,
'create_time' => date('Y-m-d H:i:s'),
];
$fileId = Files::insertGetId($fileData);
// 记录操作日志
$this->logSuccess('文件管理', '上传图片', ['id' => $fileId]);
return json([
'code' => 200,
'msg' => '上传成功',
'data' => [
'url' => $fileUrl,
'id' => $fileId,
'name' => $fileData['name']
]
]);
} catch (\Exception $e) {
// 记录失败日志
$this->logFail('文件管理', '上传图片', $e->getMessage());
return json([
'code' => 500,
'msg' => '上传失败: ' . $e->getMessage()
]);
}
}
// 更新头像
public function updateAvatar($id)
{
try {
$data = Request::only(['name', 'cate']);
if (empty($data)) {
return json(['code' => 400, 'msg' => '无更新数据']);
}
$data['update_time'] = date('Y-m-d H:i:s');
$result = Files::where('id', $id)->where('delete_time', null)->update($data);
$result = Files::where('id', 'in', $ids)
->where('tid', $this->getTenantId())
->update(['delete_time' => date('Y-m-d H:i:s')]);
if ($result) {
// 记录操作日志
$this->logSuccess('文件管理', '更新头像', ['id' => $id]);
return json(['code' => 200, 'msg' => '更新成功']);
$this->logSuccess('文件管理', '批量删除文件', ['ids' => $ids]);
return json(['code' => 200, 'msg' => '批量删除成功']);
}
return json(['code' => 404, 'msg' => '头像不存在']);
return json(['code' => 404, 'msg' => '文件不存在']);
} catch (\Exception $e) {
// 记录失败日志
$this->logFail('文件管理', '更新头像', $e->getMessage());
return json(['code' => 500, 'msg' => '更新失败: ' . $e->getMessage()]);
$this->logFail('文件管理', '批量删除文件', $e->getMessage());
return json(['code' => 500, 'msg' => '批量删除失败: ' . $e->getMessage()]);
}
}
// 批量彻底删除文件
public function batchDeleteFilesPermanently()
{
try {
$ids = Request::param('ids/a', []);
if (empty($ids)) {
return json(['code' => 400, 'msg' => '请选择要彻底删除的文件']);
}
foreach ($ids as $id) {
$file = Files::where('id', $id)
->where('tid', $this->getTenantId())
->find();
if ($file && $file['src']) {
$this->deleteFileFromServer($file['src']);
}
}
$result = Files::where('id', 'in', $ids)
->where('tid', $this->getTenantId())
->force(true)
->update(['delete_time' => date('Y-m-d H:i:s')])
->delete();
if ($result) {
$this->logSuccess('文件管理', '批量彻底删除文件', ['ids' => $ids]);
return json(['code' => 200, 'msg' => '批量彻底删除成功']);
}
return json(['code' => 404, 'msg' => '文件不存在']);
} catch (\Exception $e) {
$this->logFail('文件管理', '批量彻底删除文件', $e->getMessage());
return json(['code' => 500, 'msg' => '批量彻底删除失败: ' . $e->getMessage()]);
}
}
// 批量移动文件
public function batchMoveFiles()
{
try {
$ids = Request::param('ids/a', []);
$cate = Request::param('cate/d', 0);
if (empty($ids)) {
return json(['code' => 400, 'msg' => '请选择要移动的文件']);
}
$result = Files::where('id', 'in', $ids)
->where('tid', $this->getTenantId())
->update(['cate' => $cate]);
if ($result) {
$this->logSuccess('文件管理', '批量移动文件', ['ids' => $ids, 'cate' => $cate]);
return json(['code' => 200, 'msg' => '批量移动成功']);
}
return json(['code' => 404, 'msg' => '文件不存在']);
} catch (\Exception $e) {
$this->logFail('文件管理', '批量移动文件', $e->getMessage());
return json(['code' => 500, 'msg' => '批量移动失败: ' . $e->getMessage()]);
}
}
}

View File

@ -2,7 +2,7 @@
declare(strict_types=1);
namespace app\admin\controller;
namespace app\admin\controller\System;
use app\admin\BaseController;
use think\exception\ValidateException;
@ -10,8 +10,8 @@ use think\facade\Db;
use think\facade\Session;
use think\response\Json;
use app\model\AdminUser;
use app\model\AdminUserGroup;
use app\model\System\AdminUser;
use app\model\System\AdminUserGroup;
class RoleController extends BaseController
{
@ -21,7 +21,11 @@ class RoleController extends BaseController
*/
public function getAllRoles()
{
$tid = $this->getTenantId();
$roles = AdminUserGroup::where('delete_time', null)
->where(function ($query) use ($tid) {
$query->where('tid', $tid)->whereOr('tid', 0);
})
->order('id', 'asc')
->select();
return json([
@ -39,6 +43,7 @@ class RoleController extends BaseController
public function getRoleById(int $id)
{
$role = AdminUserGroup::where('id', $id)
->where('tid', $this->getTenantId())
->where('delete_time', null)
->find();
if (!$role) {
@ -73,6 +78,7 @@ class RoleController extends BaseController
// 检查角色名称是否已存在
$exists = AdminUserGroup::where('name', $data['name'])
->where('tid', $this->getTenantId())
->where('delete_time', null)
->find();
if ($exists) {
@ -85,6 +91,7 @@ class RoleController extends BaseController
// 准备数据
$roleData = [
'name' => $data['name'],
'tid' => $this->getTenantId(),
'status' => $data['status'] ?? 1,
'rights' => !empty($data['rights']) ? json_encode($data['rights']) : null,
'create_time' => date('Y-m-d H:i:s'),
@ -136,8 +143,9 @@ class RoleController extends BaseController
'rights|权限' => 'array'
]);
// 查找角色
// 查找角色验证tid
$role = AdminUserGroup::where('id', $id)
->where('tid', $this->getTenantId())
->where('delete_time', null)
->find();
if (!$role) {
@ -150,6 +158,7 @@ class RoleController extends BaseController
// 检查角色名称是否已被其他角色使用
$exists = AdminUserGroup::where('name', $data['name'])
->where('id', '<>', $id)
->where('tid', $this->getTenantId())
->where('delete_time', null)
->find();
if ($exists) {
@ -206,8 +215,9 @@ class RoleController extends BaseController
]);
}
// 查找角色
// 查找角色验证tid
$role = AdminUserGroup::where('id', $id)
->where('tid', $this->getTenantId())
->where('delete_time', null)
->find();
if (!$role) {
@ -219,6 +229,7 @@ class RoleController extends BaseController
// 检查是否有用户正在使用该角色
$userCount = AdminUser::where('group_id', $id)
->where('tid', $this->getTenantId())
->where('delete_time', null)
->count();
if ($userCount > 0) {

View File

@ -12,7 +12,7 @@ use think\response\Json;
use think\db\exception\DbException;
use think\Request;
use app\model\Tenant\Tenant;
use app\model\AdminUser;
use app\model\System\AdminUser;
use app\model\Template\TemplateSiteConfig;
class TenantController extends BaseController

View File

@ -10,7 +10,7 @@ use think\facade\Db;
use think\facade\Session;
use think\response\Json;
use app\model\AdminUser;
use app\model\System\AdminUser;
class UserController extends BaseController
{
@ -37,7 +37,7 @@ class UserController extends BaseController
*/
public function getTenantUsers(int $tenantId)
{
$users = AdminUser::where('delete_time', null)->where('tenant_id', $tenantId)->field('id, account, name, phone, birth, email, qq, sex, group_id, status, last_login_ip, login_count, create_time, update_time')->select()->toArray();
$users = AdminUser::where('delete_time', null)->where('tid', $tenantId)->field('id, account, name, phone, birth, email, qq, sex, group_id, status, last_login_ip, login_count, create_time, update_time')->select()->toArray();
return json([
'code' => 200,
'msg' => '获取成功',
@ -107,7 +107,7 @@ class UserController extends BaseController
$data['update_time'] = $data['create_time'];
$data['group_id'] = 2;
if (!isset($data['tenant_id']) || empty($data['tenant_id'])) {
if (!isset($data['tid']) || empty($data['tid'])) {
return json([
'code' => 400,
'msg' => '租户ID不能为空'

View File

@ -2,5 +2,5 @@
use think\facade\Route;
// 数据统计路由
Route::get('contentstats', 'app\\admin\\controller\\AnalyticsController@getContentStats');
Route::get('usersstats', 'app\\admin\\controller\\AnalyticsController@getUserStats');
Route::get('contentstats', 'app\\admin\\controller\\Cms\\Analytics\\AnalyticsController@getContentStats');
Route::get('usersstats', 'app\\admin\\controller\\Cms\\Analytics\\AnalyticsController@getUserStats');

View File

@ -2,7 +2,7 @@
use think\facade\Route;
// Banner路由
Route::get('allbanners', 'app\\admin\\controller\\BannerController@getAllBanners');
Route::post('createbanner', 'app\\admin\\controller\\BannerController@createBanner');
Route::post('editbanner/:id', 'app\\admin\\controller\\BannerController@editBanner');
Route::delete('deletebanner/:id', 'app\\admin\\controller\\BannerController@deleteBanner');
Route::get('allbanners', 'app\\admin\\controller\\Cms\\Banner\\BannerController@getAllBanners');
Route::post('createbanner', 'app\\admin\\controller\\Cms\\Banner\\BannerController@createBanner');
Route::post('editbanner/:id', 'app\\admin\\controller\\Cms\\Banner\\BannerController@editBanner');
Route::delete('deletebanner/:id', 'app\\admin\\controller\\Cms\\Banner\\BannerController@deleteBanner');

View File

@ -2,16 +2,20 @@
use think\facade\Route;
// 文件路由
Route::get('usercate', 'app\\admin\\controller\\FileController@getUserCate');
Route::get('allfiles', 'app\\admin\\controller\\FileController@getAllFiles');
Route::get('catefiles/:id', 'app\\admin\\controller\\FileController@getCateFiles');
Route::post('uploadfile', 'app\\admin\\controller\\FileController@uploadFile');
Route::post('updatefile/:id', 'app\\admin\\controller\\FileController@updateFile');
Route::delete('deletefile/:id', 'app\\admin\\controller\\FileController@deleteFile');
Route::get('movefile/:id', 'app\\admin\\controller\\FileController@moveFile');
Route::post('createfilecate', 'app\\admin\\controller\\FileController@createFileCate');
Route::post('renamefilecate/:id', 'app\\admin\\controller\\FileController@renameFileCate');
Route::delete('deletefilecate/:id', 'app\\admin\\controller\\FileController@deleteFileCate');
Route::get('usercate', 'app\\admin\\controller\\System\\FileController@getUserCate');
Route::get('allfiles', 'app\\admin\\controller\\System\\FileController@getAllFiles');
Route::get('catefiles/:id', 'app\\admin\\controller\\System\\FileController@getCateFiles');
Route::post('uploadfile', 'app\\admin\\controller\\System\\FileController@uploadFile');
Route::post('updatefile/:id', 'app\\admin\\controller\\System\\FileController@updateFile');
Route::delete('deletefile/:id', 'app\\admin\\controller\\System\\FileController@deleteFile');
Route::get('movefile/:id', 'app\\admin\\controller\\System\\FileController@moveFile');
Route::post('createfilecate', 'app\\admin\\controller\\System\\FileController@createFileCate');
Route::post('renamefilecate/:id', 'app\\admin\\controller\\System\\FileController@renameFileCate');
Route::delete('deletefilecate/:id', 'app\\admin\\controller\\System\\FileController@deleteFileCate');
Route::post('uploadavatar', 'app\\admin\\controller\\FileController@uploadAvatar');
Route::post('uploadavatar/:id', 'app\\admin\\controller\\FileController@updateAvatar');
Route::post('uploadavatar', 'app\\admin\\controller\\System\\FileController@uploadAvatar');
Route::post('uploadavatar/:id', 'app\\admin\\controller\\System\\FileController@updateAvatar');
Route::post('batchdeletefiles', 'app\\admin\\controller\\System\\FileController@batchDeleteFiles');
Route::post('batchDeleteFilesPermanently', 'app\\admin\\controller\\System\\FileController@batchDeleteFilesPermanently');
Route::post('batchMoveFiles', 'app\\admin\\controller\\System\\FileController@batchMoveFiles');

View File

@ -2,7 +2,7 @@
use think\facade\Route;
// 前端导航路由
Route::get('frontmenus', 'app\\admin\\controller\\FrontMenuController@getFrontMenus');
Route::post('createfrontmenu', 'app\\admin\\controller\\FrontMenuController@createFrontMenu');
Route::post('editfrontmenu/:id', 'app\\admin\\controller\\FrontMenuController@editFrontMenu');
Route::delete('deletefrontmenu/:id', 'app\\admin\\controller\\FrontMenuController@deleteFrontMenu');
Route::get('frontmenus', 'app\\admin\\controller\\Cms\\FrontMenu\\FrontMenuController@getFrontMenus');
Route::post('createfrontmenu', 'app\\admin\\controller\\Cms\\FrontMenu\\FrontMenuController@createFrontMenu');
Route::post('editfrontmenu/:id', 'app\\admin\\controller\\Cms\\FrontMenu\\FrontMenuController@editFrontMenu');
Route::delete('deletefrontmenu/:id', 'app\\admin\\controller\\Cms\\FrontMenu\\FrontMenuController@deleteFrontMenu');

View File

@ -2,7 +2,7 @@
use think\facade\Route;
// 单页路由
Route::get('allonepages', 'app\\admin\\controller\\OnePageController@getAllOnePages');
Route::post('createonepage', 'app\\admin\\controller\\OnePageController@createOnePage');
Route::post('editonepage/:id', 'app\\admin\\controller\\OnePageController@editOnePage');
Route::delete('deleteonepage/:id', 'app\\admin\\controller\\OnePageController@deleteOnePage');
Route::get('allonepages', 'app\\admin\\controller\\Cms\\OnePage\\OnePageController@getAllOnePages');
Route::post('createonepage', 'app\\admin\\controller\\Cms\\OnePage\\OnePageController@createOnePage');
Route::post('editonepage/:id', 'app\\admin\\controller\\Cms\\OnePage\\OnePageController@editOnePage');
Route::delete('deleteonepage/:id', 'app\\admin\\controller\\Cms\\OnePage\\OnePageController@deleteOnePage');

View File

@ -2,8 +2,8 @@
use think\facade\Route;
// 角色路由
Route::get('allRoles', 'app\\admin\\controller\\RoleController@getAllRoles');
Route::get('roles/:id', 'app\\admin\\controller\\RoleController@getRoleById');
Route::post('roles', 'app\\admin\\controller\\RoleController@createRole');
Route::put('roles/:id', 'app\\admin\\controller\\RoleController@updateRole');
Route::delete('roles/:id', 'app\\admin\\controller\\RoleController@deleteRole');
Route::get('allRoles', 'app\\admin\\controller\\System\\RoleController@getAllRoles');
Route::get('roles/:id', 'app\\admin\\controller\\System\\RoleController@getRoleById');
Route::post('roles', 'app\\admin\\controller\\System\\RoleController@createRole');
Route::put('roles/:id', 'app\\admin\\controller\\System\\RoleController@updateRole');
Route::delete('roles/:id', 'app\\admin\\controller\\System\\RoleController@deleteRole');

View File

@ -11,7 +11,7 @@ use think\facade\Cache;
use think\response\Json;
use app\service\JwtService;
use app\model\AdminUser;
use app\model\System\AdminUser;
use app\model\System\SystemSiteSettings;
class LoginController extends BaseController
@ -80,7 +80,7 @@ class LoginController extends BaseController
'id' => $user['id'],
'account' => $user['account'],
'name' => $user['name'],
'tenant_id' => $user['tenant_id'],
'tid' => $user['tid'],
'group_id' => $user['group_id']
];

View File

@ -10,7 +10,7 @@ use think\facade\Db;
use think\facade\Session;
use think\response\Json;
use app\model\AdminUser;
use app\model\System\AdminUser;
class UserController extends BaseController
{

View File

@ -45,10 +45,10 @@ class DomainParse
if ($tenantDomain) {
// 将租户ID写入请求对象供后续控制器使用
$request->tenantId = $tenantDomain['tenant_id'];
$request->tenantId = $tenantDomain['tid'];
// 同时写入header方便前端获取
$request->header['X-Tenant-Id', $tenantDomain['tenant_id']);
$request->header['X-Tenant-Id', $tenantDomain['tid']);
}
return $next($request);

View File

@ -9,7 +9,7 @@
// | Author: Liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
namespace app\model;
namespace app\model\Cms;
use think\Model;
use think\model\concern\SoftDelete;
@ -23,11 +23,12 @@ class Banner extends Model
use SoftDelete;
// 数据库表名
protected $name = 'mete_banner';
protected $name = 'mete_apps_cms_banner';
// 字段类型转换
protected $type = [
'id' => 'integer',
'tid' => 'integer',
'title' => 'string',
'desc' => 'string',
'url' => 'string',

View File

@ -23,7 +23,7 @@ class Demand extends Model
use SoftDelete;
// 数据库表名
protected $name = 'mete_demand';
protected $name = 'mete_apps_cms_demand';
// 字段类型转换
protected $type = [

View File

@ -9,7 +9,7 @@
// | Author: Liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
namespace app\model;
namespace app\model\Cms;
use think\Model;
use think\model\concern\SoftDelete;
@ -23,16 +23,19 @@ class FrontMenu extends Model
use SoftDelete;
// 数据库表名
protected $name = 'mete_front_menu';
protected $name = 'mete_apps_cms_front_menu';
// 字段类型转换
protected $type = [
'id' => 'integer',
'pid' => 'integer',
'tid' => 'integer',
'title' => 'string',
'image' => 'string',
'type' => 'integer',
'path' => 'string',
'component_path' => 'string',
'sort' => 'integer',
'desc' => 'string',
'create_time' => 'datetime',
'update_time' => 'datetime',

View File

@ -9,7 +9,7 @@
// | Author: Liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
namespace app\model;
namespace app\model\Cms;
use think\Model;
use think\model\concern\SoftDelete;
@ -23,11 +23,12 @@ class OnePage extends Model
use SoftDelete;
// 数据库表名
protected $name = 'mete_onepage';
protected $name = 'mete_apps_cms_onepage';
// 字段类型转换
protected $type = [
'id' => 'integer',
'tid' => 'integer',
'title' => 'string',
'content' => 'string',
'path' => 'string',

View File

@ -9,30 +9,28 @@
// | Author: Liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
namespace app\model;
namespace app\model\Cms;
use think\Model;
use think\model\concern\SoftDelete;
/**
* 文章分类模型
* 网站模板模型
*/
class AdminUser extends Model
class TemplateSiteConfig extends Model
{
// 启用软删除
use SoftDelete;
// 数据库表名
protected $name = 'mete_admin_user';
protected $name = 'mete_apps_cms_template_site_config';
// 字段类型转换
protected $type = [
'id' => 'integer',
'sex' => 'integer',
'group_id' => 'integer',
'login_count' => 'integer',
'status' => 'integer',
'api_key_status' => 'integer',
'tid' => 'integer',
'key' => 'string',
'value' => 'string',
'create_time' => 'datetime',
'update_time' => 'datetime',
'delete_time' => 'datetime',

View File

@ -0,0 +1,40 @@
<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2018 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: Liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
namespace app\model\Cms;
use think\Model;
use think\model\concern\SoftDelete;
/**
* 网站模板数据模型
*/
class TemplateThemeData extends Model
{
// 启用软删除
use SoftDelete;
// 数据库表名
protected $name = 'mete_apps_cms_template_theme_data';
// 字段类型转换
protected $type = [
'id' => 'integer',
'theme_key' => 'string',
'field_key' => 'string',
'field_value' => 'string',
'create_time' => 'datetime',
'update_time' => 'datetime',
'delete_time' => 'datetime',
];
}

View File

@ -28,7 +28,7 @@ class Organization extends Model
// 字段类型转换
protected $type = [
'id' => 'integer',
'tenant_id' => 'integer',
'tid' => 'integer',
'org_name' => 'string',
'org_code' => 'string',
'parent_id' => 'integer',

View File

@ -0,0 +1,54 @@
<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2018 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: Liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
namespace app\model\System;
use think\Model;
use think\model\concern\SoftDelete;
/**
* 文章分类模型
*/
class AdminUser extends Model
{
// 启用软删除
use SoftDelete;
// 数据库表名
protected $name = 'mete_admin_user';
// 字段类型转换
protected $type = [
'id' => 'integer',
'tid' => 'integer',
'account' => 'string',
'password' => 'string',
'name' => 'string',
'birth' => 'date',
'phone' => 'string',
'email' => 'string',
'qq' => 'string',
'sex' => 'integer',
'avatar' => 'string',
'group_id' => 'integer',
'login_count' => 'integer',
'last_login_ip' => 'string',
'status' => 'integer',
'api_key' => 'string',
'api_key_expire' => 'datetime',
'api_key_status' => 'integer',
'create_time' => 'datetime',
'update_time' => 'datetime',
'delete_time' => 'datetime',
];
}

View File

@ -9,7 +9,7 @@
// | Author: Liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
namespace app\model;
namespace app\model\System;
use think\Model;
use think\model\concern\SoftDelete;
@ -28,6 +28,7 @@ class AdminUserGroup extends Model
// 字段类型转换
protected $type = [
'id' => 'integer',
'tid' => 'integer',
'name' => 'string',
'status' => 'integer',
'rights' => 'string',

View File

@ -9,7 +9,7 @@
// | Author: Liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
namespace app\model;
namespace app\model\System;
use think\Model;
use think\model\concern\SoftDelete;
@ -23,11 +23,13 @@ class Files extends Model
use SoftDelete;
// 数据库表名
protected $name = 'mete_files';
protected $name = 'mete_system_files';
// 字段类型转换
protected $type = [
'id' => 'integer',
'tid' => 'integer',
'uid' => 'integer',
'name' => 'string',
'type' => 'integer',
'cate' => 'integer',

View File

@ -9,7 +9,7 @@
// | Author: Liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
namespace app\model;
namespace app\model\System;
use think\Model;
use think\model\concern\SoftDelete;
@ -23,11 +23,13 @@ class FilesCategory extends Model
use SoftDelete;
// 数据库表名
protected $name = 'mete_files_category';
protected $name = 'mete_system_files_category';
// 字段类型转换
protected $type = [
'id' => 'integer',
'tid' => 'integer',
'uid' => 'integer',
'name' => 'string',
'create_time' => 'datetime',
'update_time' => 'datetime',

View File

@ -9,7 +9,7 @@
// | Author: Liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
namespace app\model;
namespace app\model\System;
use think\Model;
use think\model\concern\SoftDelete;
@ -23,18 +23,26 @@ class OperationLog extends Model
use SoftDelete;
// 数据库表名
protected $name = 'mete_operation_log';
protected $name = 'mete_system_operation_log';
// 字段类型转换
protected $type = [
'id' => 'integer',
'tid' => 'integer',
'user_id' => 'integer',
'module' => 'string',
'action' => 'string',
'method' => 'string',
'url' => 'string',
'ip' => 'string',
'user_agent' => 'string',
'request_data' => 'string',
'response_data' => 'string',
'status' => 'integer',
'error_message' => 'string',
'execution_time' => 'float',
'create_time' => 'datetime',
'update_time' => 'datetime',
'delete_time' => 'datetime',
];
}

View File

@ -24,7 +24,7 @@ class TenantDomain extends Model
// 字段类型转换
protected $type = [
'id' => 'integer',
'tenant_id' => 'integer',
'tid' => 'integer',
'sub_domain' => 'string',
'main_domain' => 'string',
'full_domain' => 'string',

View File

@ -6,6 +6,8 @@ namespace app\service;
use think\facade\Db;
use think\facade\Config;
use app\model\Cms\TemplateSiteConfig;
use app\model\Cms\TemplateThemeData;
/**
* 模板服务类
@ -125,8 +127,7 @@ class ThemeService
if ($tid > 0) {
$where[] = ['tid', '=', $tid];
}
$config = Db::name('mete_template_site_config')
->where($where)
$config = TemplateSiteConfig::where($where)
->find();
return $config['value'] ?? 'default';
} catch (\Exception $e) {
@ -162,19 +163,18 @@ class ThemeService
if ($tid > 0) {
$where[] = ['tid', '=', $tid];
}
$config = Db::name('mete_template_site_config')
->where($where)
$config = TemplateSiteConfig::where($where)
->find();
$now = date('Y-m-d H:i:s');
if ($config) {
Db::name('mete_template_site_config')->where('id', $config['id'])->update([
TemplateSiteConfig::where('id', $config['id'])->update([
'value' => $themeKey,
'update_time' => $now
]);
} else {
Db::name('mete_template_site_config')->insert([
TemplateSiteConfig::insert([
'key' => 'current_theme',
'value' => $themeKey,
'create_time' => $now,
@ -203,8 +203,7 @@ class ThemeService
if ($tid > 0) {
$where[] = ['tid', '=', $tid];
}
$themeData = Db::name('mete_template_theme_data')
->where($where)
$themeData = TemplateThemeData::where($where)
->select()
->toArray();
@ -246,22 +245,20 @@ class ThemeService
if ($tid > 0) {
$where[] = ['tid', '=', $tid];
}
$existing = Db::name('mete_template_theme_data')
->where($where)
$existing = TemplateThemeData::where($where)
->find();
$value = is_array($fieldValue) ? json_encode($fieldValue, JSON_UNESCAPED_UNICODE) : $fieldValue;
$now = date('Y-m-d H:i:s');
if ($existing) {
Db::name('mete_template_theme_data')
->where('id', $existing['id'])
TemplateThemeData::where('id', $existing['id'])
->update([
'field_value' => $value,
'update_time' => $now
]);
} else {
Db::name('mete_template_theme_data')->insert([
TemplateThemeData::insert([
'tid' => $tid,
'theme_key' => $themeKey,
'field_key' => $fieldKey,