批量更新租户规则

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

View File

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

View File

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

View File

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

View File

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

View File

@ -2,7 +2,7 @@
declare(strict_types=1); declare(strict_types=1);
namespace app\admin\controller; namespace app\admin\controller\Cms\FrontMenu;
use app\admin\BaseController; use app\admin\BaseController;
use think\exception\ValidateException; use think\exception\ValidateException;
@ -10,7 +10,7 @@ use think\facade\Db;
use think\facade\Session; use think\facade\Session;
use think\response\Json; use think\response\Json;
use think\db\exception\DbException; use think\db\exception\DbException;
use app\model\FrontMenu; use app\model\Cms\FrontMenu;
class FrontMenuController extends BaseController class FrontMenuController extends BaseController
{ {
@ -23,6 +23,7 @@ class FrontMenuController extends BaseController
try { try {
// 获取所有未删除的菜单 // 获取所有未删除的菜单
$frontMenus = FrontMenu::where('delete_time', null) $frontMenus = FrontMenu::where('delete_time', null)
->where('tid', $this->getTenantId())
->field('id,pid,title,type,image,path,component_path,sort,desc') ->field('id,pid,title,type,image,path,component_path,sort,desc')
->order('sort', 'desc') ->order('sort', 'desc')
->select() ->select()
@ -69,6 +70,7 @@ class FrontMenuController extends BaseController
// 准备菜单数据 // 准备菜单数据
$menuData = [ $menuData = [
'pid' => $data['pid'] ?? 0, 'pid' => $data['pid'] ?? 0,
'tid' => $this->getTenantId(),
'title' => $data['title'], 'title' => $data['title'],
'type' => $data['type'], 'type' => $data['type'],
'sort' => $data['sort'] ?? 0, 'sort' => $data['sort'] ?? 0,
@ -130,6 +132,7 @@ class FrontMenuController extends BaseController
// 准备更新数据 // 准备更新数据
$updateData = [ $updateData = [
'title' => $data['title'], 'title' => $data['title'],
'tid' => $this->getTenantId(),
'pid' => $data['pid'] ?? null, 'pid' => $data['pid'] ?? null,
'type' => $data['type'], 'type' => $data['type'],
'path' => $data['path'] ?? null, 'path' => $data['path'] ?? null,
@ -177,6 +180,7 @@ class FrontMenuController extends BaseController
try { try {
// 检查是否有子前端导航 // 检查是否有子前端导航
$hasChildren = FrontMenu::where('pid', $id) $hasChildren = FrontMenu::where('pid', $id)
->where('tid', $this->getTenantId())
->where('pid', $id) ->where('pid', $id)
->where('delete_time', null) ->where('delete_time', null)
->count() > 0; ->count() > 0;
@ -192,6 +196,7 @@ class FrontMenuController extends BaseController
$result = FrontMenu::where('id', $id) $result = FrontMenu::where('id', $id)
->where('id', $id) ->where('id', $id)
->where('delete_time', null) ->where('delete_time', null)
->where('tid', $this->getTenantId())
->update([ ->update([
'delete_time' => date('Y-m-d H:i:s'), 'delete_time' => date('Y-m-d H:i:s'),
'update_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); declare(strict_types=1);
namespace app\admin\controller; namespace app\admin\controller\Cms\OnePage;
use app\admin\BaseController; use app\admin\BaseController;
use think\exception\ValidateException; use think\exception\ValidateException;
@ -10,7 +10,7 @@ use think\facade\Db;
use think\facade\Session; use think\facade\Session;
use think\response\Json; use think\response\Json;
use think\db\exception\DbException; use think\db\exception\DbException;
use app\model\OnePage; use app\model\Cms\OnePage;
class OnePageController extends BaseController class OnePageController extends BaseController
{ {
@ -22,6 +22,7 @@ class OnePageController extends BaseController
{ {
try { try {
$onePages = OnePage::where('delete_time', null) $onePages = OnePage::where('delete_time', null)
->where('tid', $this->getTenantId())
->order('sort', 'asc') ->order('sort', 'asc')
->field('id, title, content, path, sort, status, create_time, update_time') ->field('id, title, content, path, sort, status, create_time, update_time')
->select() ->select()
@ -69,6 +70,7 @@ class OnePageController extends BaseController
// 检查路由是否已存在 // 检查路由是否已存在
$exists = OnePage::where('path', $data['path']) $exists = OnePage::where('path', $data['path'])
->where('tid', $this->getTenantId())
->where('delete_time', null) ->where('delete_time', null)
->find(); ->find();
if ($exists) { if ($exists) {
@ -85,6 +87,7 @@ class OnePageController extends BaseController
'path' => $data['path'], 'path' => $data['path'],
'sort' => $data['sort'] ?? 0, 'sort' => $data['sort'] ?? 0,
'status' => $data['status'] ?? 1, 'status' => $data['status'] ?? 1,
'tid' => $this->getTenantId(),
'create_time' => date('Y-m-d H:i:s'), 'create_time' => date('Y-m-d H:i:s'),
]; ];
@ -150,8 +153,9 @@ class OnePageController extends BaseController
]); ]);
} }
// 检查单页是否存在 // 检查单页是否存在验证tid
$onePage = OnePage::where('id', $id) $onePage = OnePage::where('id', $id)
->where('tid', $this->getTenantId())
->where('delete_time', null) ->where('delete_time', null)
->find(); ->find();
@ -165,6 +169,7 @@ class OnePageController extends BaseController
// 检查路由是否被其他单页使用 // 检查路由是否被其他单页使用
$exists = OnePage::where('path', $data['path']) $exists = OnePage::where('path', $data['path'])
->where('id', '<>', $id) ->where('id', '<>', $id)
->where('tid', $this->getTenantId())
->where('delete_time', null) ->where('delete_time', null)
->find(); ->find();
if ($exists) { if ($exists) {
@ -222,8 +227,9 @@ class OnePageController extends BaseController
public function deleteOnePage(int $id) public function deleteOnePage(int $id)
{ {
try { try {
// 检查单页是否存在 // 检查单页是否存在验证tid
$onePage = OnePage::where('id', $id) $onePage = OnePage::where('id', $id)
->where('tid', $this->getTenantId())
->where('delete_time', null) ->where('delete_time', null)
->find(); ->find();
@ -236,6 +242,7 @@ class OnePageController extends BaseController
// 逻辑删除单页 // 逻辑删除单页
$result = OnePage::where('id', $id) $result = OnePage::where('id', $id)
->where('tid', $this->getTenantId())
->where('delete_time', null) ->where('delete_time', null)
->update([ ->update([
'delete_time' => date('Y-m-d H:i:s'), 'delete_time' => date('Y-m-d H:i:s'),

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,6 +1,6 @@
<?php <?php
namespace app\admin\controller; namespace app\admin\controller\System;
use app\admin\BaseController; use app\admin\BaseController;
use think\facade\Filesystem; use think\facade\Filesystem;
@ -8,8 +8,8 @@ use think\facade\Request;
use think\facade\Db; use think\facade\Db;
use think\Response; use think\Response;
use app\model\FilesCategory; use app\model\System\FilesCategory;
use app\model\Files; use app\model\System\Files;
class FileController extends BaseController class FileController extends BaseController
{ {
@ -38,7 +38,8 @@ class FileController extends BaseController
$cate = Request::param('cate/d', 0); $cate = Request::param('cate/d', 0);
$keyword = Request::param('keyword/s', ''); $keyword = Request::param('keyword/s', '');
$query = Files::where('delete_time', null); $query = Files::where('delete_time', null)
->where('tid', $this->getTenantId());
if ($cate) { if ($cate) {
$query->where('cate', $cate); $query->where('cate', $cate);
@ -75,11 +76,20 @@ class FileController extends BaseController
public function getUserCate() public function getUserCate()
{ {
try { 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) { 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([ return json([
@ -101,6 +111,7 @@ class FileController extends BaseController
try { try {
$data = Request::param(); $data = Request::param();
$data['create_time'] = date('Y-m-d H:i:s'); $data['create_time'] = date('Y-m-d H:i:s');
$data['tid'] = $this->getTenantId();
$id = FilesCategory::insertGetId($data); $id = FilesCategory::insertGetId($data);
// 记录操作日志 // 记录操作日志
@ -129,7 +140,9 @@ class FileController extends BaseController
{ {
try { try {
$data = Request::param(); $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]); $this->logSuccess('文件管理', '重命名文件分组', ['id' => $id]);
return json([ return json([
@ -150,7 +163,21 @@ class FileController extends BaseController
public function deleteFileCate($id) public function deleteFileCate($id)
{ {
try { 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]); $this->logSuccess('文件管理', '删除文件分组', ['id' => $id]);
return json([ return json([
@ -175,12 +202,16 @@ class FileController extends BaseController
$pageSize = Request::param('pageSize/d', 10); $pageSize = Request::param('pageSize/d', 10);
$keyword = Request::param('keyword/s', ''); $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) { if ($keyword) {
$query->whereLike('name', "%{$keyword}%"); $query->whereLike('name', "%{$keyword}%");
} }
// 获取总条数
$total = $query->count();
$list = $query->page($page, $pageSize) $list = $query->page($page, $pageSize)
->order('create_time', 'desc') ->order('create_time', 'desc')
->select(); ->select();
@ -196,6 +227,7 @@ class FileController extends BaseController
'msg' => 'success', 'msg' => 'success',
'data' => [ 'data' => [
'list' => $list, 'list' => $list,
'total' => $total,
'page' => $page, 'page' => $page,
'pageSize' => $pageSize, 'pageSize' => $pageSize,
'categoryId' => $id 'categoryId' => $id
@ -209,7 +241,7 @@ class FileController extends BaseController
} }
} }
// 上传文件 // 文件上传
public function uploadFile() public function uploadFile()
{ {
try { try {
@ -230,7 +262,10 @@ class FileController extends BaseController
$fileMd5 = md5_file($file->getRealPath()); $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) { if ($existFile) {
return json([ return json([
@ -272,6 +307,7 @@ class FileController extends BaseController
'src' => $fileUrl, 'src' => $fileUrl,
'md5' => $fileMd5, 'md5' => $fileMd5,
'uploader' => $userId, 'uploader' => $userId,
'tid' => $this->getTenantId(),
'create_time' => date('Y-m-d H:i:s'), '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'); $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) { if ($result) {
// 记录操作日志 // 记录操作日志
@ -329,7 +368,17 @@ class FileController extends BaseController
public function deleteFile($id) public function deleteFile($id)
{ {
try { 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) { 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) public function download($id)
{ {
try { 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) { if (!$file) {
return json(['code' => 404, 'msg' => '文件不存在']); return json(['code' => 404, 'msg' => '文件不存在']);
@ -374,7 +461,9 @@ class FileController extends BaseController
{ {
try { try {
$cate = Request::param('cate/d', 0); $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) { if ($result) {
// 记录操作日志 // 记录操作日志
$this->logSuccess('文件管理', '移动文件', ['id' => $id]); $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;
// 上传头像 if (file_exists($fullPath)) {
public function uploadAvatar() unlink($fullPath);
}
}
// 批量删除文件
public function batchDeleteFiles()
{ {
try { try {
$file = Request::file('file'); $ids = Request::param('ids/a', []);
if (!$file) {
return json(['code' => 400, 'msg' => '请选择要上传的文件']); if (empty($ids)) {
return json(['code' => 400, 'msg' => '请选择要删除的文件']);
} }
// 验证文件大小和类型 foreach ($ids as $id) {
$maxSize = 50 * 1024 * 1024; // 50MB $file = Files::where('id', $id)
$fileExt = strtolower($file->getOriginalExtension()); ->where('tid', $this->getTenantId())
->find();
if ($file->getSize() > $maxSize) { if ($file && $file['src']) {
return json(['code' => 400, 'msg' => '文件大小不能超过50MB']); $this->deleteFileFromServer($file['src']);
}
// 计算文件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']
]
]);
} }
} }
// 确定文件类型 $result = Files::where('id', 'in', $ids)
$fileType = 1; // 默认为文件 ->where('tid', $this->getTenantId())
foreach ($this->allowedExtensions as $type => $extensions) { ->update(['delete_time' => date('Y-m-d H:i:s')]);
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);
if ($result) { if ($result) {
// 记录操作日志 $this->logSuccess('文件管理', '批量删除文件', ['ids' => $ids]);
$this->logSuccess('文件管理', '更新头像', ['id' => $id]); return json(['code' => 200, 'msg' => '批量删除成功']);
return json(['code' => 200, 'msg' => '更新成功']);
} }
return json(['code' => 404, 'msg' => '头像不存在']); return json(['code' => 404, 'msg' => '文件不存在']);
} catch (\Exception $e) { } catch (\Exception $e) {
// 记录失败日志 $this->logFail('文件管理', '批量删除文件', $e->getMessage());
$this->logFail('文件管理', '更新头像', $e->getMessage()); return json(['code' => 500, 'msg' => '批量删除失败: ' . $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); declare(strict_types=1);
namespace app\admin\controller; namespace app\admin\controller\System;
use app\admin\BaseController; use app\admin\BaseController;
use think\exception\ValidateException; use think\exception\ValidateException;
@ -10,8 +10,8 @@ use think\facade\Db;
use think\facade\Session; use think\facade\Session;
use think\response\Json; use think\response\Json;
use app\model\AdminUser; use app\model\System\AdminUser;
use app\model\AdminUserGroup; use app\model\System\AdminUserGroup;
class RoleController extends BaseController class RoleController extends BaseController
{ {
@ -21,7 +21,11 @@ class RoleController extends BaseController
*/ */
public function getAllRoles() public function getAllRoles()
{ {
$tid = $this->getTenantId();
$roles = AdminUserGroup::where('delete_time', null) $roles = AdminUserGroup::where('delete_time', null)
->where(function ($query) use ($tid) {
$query->where('tid', $tid)->whereOr('tid', 0);
})
->order('id', 'asc') ->order('id', 'asc')
->select(); ->select();
return json([ return json([
@ -39,6 +43,7 @@ class RoleController extends BaseController
public function getRoleById(int $id) public function getRoleById(int $id)
{ {
$role = AdminUserGroup::where('id', $id) $role = AdminUserGroup::where('id', $id)
->where('tid', $this->getTenantId())
->where('delete_time', null) ->where('delete_time', null)
->find(); ->find();
if (!$role) { if (!$role) {
@ -73,6 +78,7 @@ class RoleController extends BaseController
// 检查角色名称是否已存在 // 检查角色名称是否已存在
$exists = AdminUserGroup::where('name', $data['name']) $exists = AdminUserGroup::where('name', $data['name'])
->where('tid', $this->getTenantId())
->where('delete_time', null) ->where('delete_time', null)
->find(); ->find();
if ($exists) { if ($exists) {
@ -85,6 +91,7 @@ class RoleController extends BaseController
// 准备数据 // 准备数据
$roleData = [ $roleData = [
'name' => $data['name'], 'name' => $data['name'],
'tid' => $this->getTenantId(),
'status' => $data['status'] ?? 1, 'status' => $data['status'] ?? 1,
'rights' => !empty($data['rights']) ? json_encode($data['rights']) : null, 'rights' => !empty($data['rights']) ? json_encode($data['rights']) : null,
'create_time' => date('Y-m-d H:i:s'), 'create_time' => date('Y-m-d H:i:s'),
@ -136,8 +143,9 @@ class RoleController extends BaseController
'rights|权限' => 'array' 'rights|权限' => 'array'
]); ]);
// 查找角色 // 查找角色验证tid
$role = AdminUserGroup::where('id', $id) $role = AdminUserGroup::where('id', $id)
->where('tid', $this->getTenantId())
->where('delete_time', null) ->where('delete_time', null)
->find(); ->find();
if (!$role) { if (!$role) {
@ -150,6 +158,7 @@ class RoleController extends BaseController
// 检查角色名称是否已被其他角色使用 // 检查角色名称是否已被其他角色使用
$exists = AdminUserGroup::where('name', $data['name']) $exists = AdminUserGroup::where('name', $data['name'])
->where('id', '<>', $id) ->where('id', '<>', $id)
->where('tid', $this->getTenantId())
->where('delete_time', null) ->where('delete_time', null)
->find(); ->find();
if ($exists) { if ($exists) {
@ -206,8 +215,9 @@ class RoleController extends BaseController
]); ]);
} }
// 查找角色 // 查找角色验证tid
$role = AdminUserGroup::where('id', $id) $role = AdminUserGroup::where('id', $id)
->where('tid', $this->getTenantId())
->where('delete_time', null) ->where('delete_time', null)
->find(); ->find();
if (!$role) { if (!$role) {
@ -219,6 +229,7 @@ class RoleController extends BaseController
// 检查是否有用户正在使用该角色 // 检查是否有用户正在使用该角色
$userCount = AdminUser::where('group_id', $id) $userCount = AdminUser::where('group_id', $id)
->where('tid', $this->getTenantId())
->where('delete_time', null) ->where('delete_time', null)
->count(); ->count();
if ($userCount > 0) { if ($userCount > 0) {

View File

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

View File

@ -10,7 +10,7 @@ use think\facade\Db;
use think\facade\Session; use think\facade\Session;
use think\response\Json; use think\response\Json;
use app\model\AdminUser; use app\model\System\AdminUser;
class UserController extends BaseController class UserController extends BaseController
{ {
@ -37,7 +37,7 @@ class UserController extends BaseController
*/ */
public function getTenantUsers(int $tenantId) 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([ return json([
'code' => 200, 'code' => 200,
'msg' => '获取成功', 'msg' => '获取成功',
@ -107,7 +107,7 @@ class UserController extends BaseController
$data['update_time'] = $data['create_time']; $data['update_time'] = $data['create_time'];
$data['group_id'] = 2; $data['group_id'] = 2;
if (!isset($data['tenant_id']) || empty($data['tenant_id'])) { if (!isset($data['tid']) || empty($data['tid'])) {
return json([ return json([
'code' => 400, 'code' => 400,
'msg' => '租户ID不能为空' 'msg' => '租户ID不能为空'

View File

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

View File

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

View File

@ -2,16 +2,20 @@
use think\facade\Route; use think\facade\Route;
// 文件路由 // 文件路由
Route::get('usercate', 'app\\admin\\controller\\FileController@getUserCate'); Route::get('usercate', 'app\\admin\\controller\\System\\FileController@getUserCate');
Route::get('allfiles', 'app\\admin\\controller\\FileController@getAllFiles'); Route::get('allfiles', 'app\\admin\\controller\\System\\FileController@getAllFiles');
Route::get('catefiles/:id', 'app\\admin\\controller\\FileController@getCateFiles'); Route::get('catefiles/:id', 'app\\admin\\controller\\System\\FileController@getCateFiles');
Route::post('uploadfile', 'app\\admin\\controller\\FileController@uploadFile'); Route::post('uploadfile', 'app\\admin\\controller\\System\\FileController@uploadFile');
Route::post('updatefile/:id', 'app\\admin\\controller\\FileController@updateFile'); Route::post('updatefile/:id', 'app\\admin\\controller\\System\\FileController@updateFile');
Route::delete('deletefile/:id', 'app\\admin\\controller\\FileController@deleteFile'); Route::delete('deletefile/:id', 'app\\admin\\controller\\System\\FileController@deleteFile');
Route::get('movefile/:id', 'app\\admin\\controller\\FileController@moveFile'); Route::get('movefile/:id', 'app\\admin\\controller\\System\\FileController@moveFile');
Route::post('createfilecate', 'app\\admin\\controller\\FileController@createFileCate'); Route::post('createfilecate', 'app\\admin\\controller\\System\\FileController@createFileCate');
Route::post('renamefilecate/:id', 'app\\admin\\controller\\FileController@renameFileCate'); Route::post('renamefilecate/:id', 'app\\admin\\controller\\System\\FileController@renameFileCate');
Route::delete('deletefilecate/:id', 'app\\admin\\controller\\FileController@deleteFileCate'); Route::delete('deletefilecate/:id', 'app\\admin\\controller\\System\\FileController@deleteFileCate');
Route::post('uploadavatar', 'app\\admin\\controller\\FileController@uploadAvatar'); Route::post('uploadavatar', 'app\\admin\\controller\\System\\FileController@uploadAvatar');
Route::post('uploadavatar/:id', 'app\\admin\\controller\\FileController@updateAvatar'); 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; use think\facade\Route;
// 前端导航路由 // 前端导航路由
Route::get('frontmenus', 'app\\admin\\controller\\FrontMenuController@getFrontMenus'); Route::get('frontmenus', 'app\\admin\\controller\\Cms\\FrontMenu\\FrontMenuController@getFrontMenus');
Route::post('createfrontmenu', 'app\\admin\\controller\\FrontMenuController@createFrontMenu'); Route::post('createfrontmenu', 'app\\admin\\controller\\Cms\\FrontMenu\\FrontMenuController@createFrontMenu');
Route::post('editfrontmenu/:id', 'app\\admin\\controller\\FrontMenuController@editFrontMenu'); Route::post('editfrontmenu/:id', 'app\\admin\\controller\\Cms\\FrontMenu\\FrontMenuController@editFrontMenu');
Route::delete('deletefrontmenu/:id', 'app\\admin\\controller\\FrontMenuController@deleteFrontMenu'); Route::delete('deletefrontmenu/:id', 'app\\admin\\controller\\Cms\\FrontMenu\\FrontMenuController@deleteFrontMenu');

View File

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

View File

@ -2,8 +2,8 @@
use think\facade\Route; use think\facade\Route;
// 角色路由 // 角色路由
Route::get('allRoles', 'app\\admin\\controller\\RoleController@getAllRoles'); Route::get('allRoles', 'app\\admin\\controller\\System\\RoleController@getAllRoles');
Route::get('roles/:id', 'app\\admin\\controller\\RoleController@getRoleById'); Route::get('roles/:id', 'app\\admin\\controller\\System\\RoleController@getRoleById');
Route::post('roles', 'app\\admin\\controller\\RoleController@createRole'); Route::post('roles', 'app\\admin\\controller\\System\\RoleController@createRole');
Route::put('roles/:id', 'app\\admin\\controller\\RoleController@updateRole'); Route::put('roles/:id', 'app\\admin\\controller\\System\\RoleController@updateRole');
Route::delete('roles/:id', 'app\\admin\\controller\\RoleController@deleteRole'); 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 think\response\Json;
use app\service\JwtService; use app\service\JwtService;
use app\model\AdminUser; use app\model\System\AdminUser;
use app\model\System\SystemSiteSettings; use app\model\System\SystemSiteSettings;
class LoginController extends BaseController class LoginController extends BaseController
@ -80,7 +80,7 @@ class LoginController extends BaseController
'id' => $user['id'], 'id' => $user['id'],
'account' => $user['account'], 'account' => $user['account'],
'name' => $user['name'], 'name' => $user['name'],
'tenant_id' => $user['tenant_id'], 'tid' => $user['tid'],
'group_id' => $user['group_id'] 'group_id' => $user['group_id']
]; ];

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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