tp/app/admin/controller/SiteSettingsController.php
2026-03-11 17:05:58 +08:00

377 lines
11 KiB
PHP

<?php
declare(strict_types=1);
namespace app\admin\controller;
use app\admin\BaseController;
use think\exception\ValidateException;
use think\facade\Db;
use think\response\Json;
use app\model\System\SystemSiteSetting;
use app\model\System\SystemSiteSettings;
use app\model\Tenant\Tenant;
class SiteSettingsController extends BaseController
{
/**
* 获取指定站点设置列表
* @return Json
*/
public function getNormalInfos()
{
// 获取当前租户ID
$tid = $this->request->param('tid', 0, 'int');
// 查询站点设置
$siteSetting = SystemSiteSetting::where('delete_time', null)
->where('tid', $tid)
->find();
// 如果没有数据,返回空值结构
if (!$siteSetting) {
$data = [
'sitename' => '',
'logo' => '',
'logow' => '',
'description' => '',
'copyright' => '',
'companyname' => '',
'icp' => ''
];
} else {
$data = [
'sitename' => $siteSetting->sitename ?? '',
'logo' => $siteSetting->logo ?? '',
'logow' => $siteSetting->logow ?? '',
'description' => $siteSetting->description ?? '',
'copyright' => $siteSetting->copyright ?? '',
'companyname' => $siteSetting->companyname ?? '',
'icp' => $siteSetting->icp ?? ''
];
}
$this->logSuccess('站点设置管理', '查看基本信息配置', [], $this->getAdminUserInfo());
return json([
'code' => 200,
'msg' => '获取成功',
'data' => $data
]);
}
/**
* 保存基本信息
* @return Json
*/
public function saveNormalInfos()
{
$params = $this->request->param();
$rawData = isset($params['data']) ? json_decode($params['data'], true) : $params;
$tid = $params['tid'] ?? 0;
// 查找或创建记录
$siteSetting = SystemSiteSetting::where('delete_time', null)
->where('tid', $tid)
->find();
if (!$siteSetting) {
$siteSetting = new SystemSiteSetting();
$siteSetting->tid = $tid;
$siteSetting->create_time = date('Y-m-d H:i:s');
}
// 更新字段
if (isset($rawData['sitename'])) {
$siteSetting->sitename = (string)$rawData['sitename'];
}
if (isset($rawData['logo'])) {
$siteSetting->logo = (string)$rawData['logo'];
}
if (isset($rawData['logow'])) {
$siteSetting->logow = (string)$rawData['logow'];
}
if (isset($rawData['description'])) {
$siteSetting->description = (string)$rawData['description'];
}
if (isset($rawData['copyright'])) {
$siteSetting->copyright = (string)$rawData['copyright'];
}
if (isset($rawData['companyname'])) {
$siteSetting->companyname = (string)$rawData['companyname'];
}
if (isset($rawData['icp'])) {
$siteSetting->icp = (string)$rawData['icp'];
}
$siteSetting->update_time = date('Y-m-d H:i:s');
$siteSetting->save();
$this->logSuccess('站点设置管理', '保存基本信息', ['tid' => $tid], $this->getAdminUserInfo());
return json(['code' => 200, 'msg' => '基本信息保存成功']);
}
/**
* 获取登录验证数据
* @return Json
*/
public function getVerifyInfos()
{
// 定义你需要的 label 列表
$targetLabels = [
'openVerify',
'verifyModel',
'geetest3ID',
'geetest3KEY',
'geetest4ID',
'geetest4KEY'
];
$legalInfos = SystemSiteSettings::where('delete_time', null)
->whereIn('label', $targetLabels) // 仅筛选指定的 label
->field('label, value')
->select();
$this->logSuccess('站点设置管理', '查看登录验证数据', [], $this->getAdminUserInfo());
return json([
'code' => 200,
'msg' => '获取成功',
'data' => $legalInfos->toArray()
]);
}
/**
* 保存登录验证数据
* @return Json
*/
public function saveVerifyInfos()
{
$params = $this->request->param();
$allowedLabels = ['openVerify', 'verifyModel', 'geetest3ID', 'geetest3KEY', 'geetest4ID', 'geetest4KEY'];
foreach ($allowedLabels as $label) {
if (isset($params[$label])) {
$val = $params[$label];
if (is_bool($val)) {
$val = $val ? '1' : '0';
}
SystemSiteSettings::where('label', $label)->update([
'value' => (string)$val
]);
}
}
$this->logSuccess('站点设置管理', '保存登录验证配置', $params, $this->getAdminUserInfo());
return json(['code' => 200, 'msg' => '保存成功']);
}
/**
* 获取法律声明和隐私条款
* @return Json
*/
public function getLegalInfos()
{
// 定义你需要的 label 列表
$targetLabels = [
'legalNotice',
'privacyTerms'
];
$legalInfos = SystemSiteSettings::where('delete_time', null)
->whereIn('label', $targetLabels) // 仅筛选指定的 label
->field('label, value')
->select();
$this->logSuccess('站点设置管理', '查看法律声明和隐私条款', [], $this->getAdminUserInfo());
return json([
'code' => 200,
'msg' => '获取成功',
'data' => $legalInfos->toArray()
]);
}
/**
* 保存法律声明和隐私条款
* @return Json
*/
public function saveLegalInfos()
{
$params = $this->request->param();
$rawData = isset($params['data']) ? json_decode($params['data'], true) : $params;
$allowedLabels = ['legalNotice', 'privacyTerms'];
foreach ($allowedLabels as $label) {
if (isset($rawData[$label])) {
SystemSiteSettings::update(
['value' => (string)$rawData[$label]],
['label' => $label]
);
}
}
$this->logSuccess('站点设置管理', '保存法律声明和隐私条款', ['labels' => $allowedLabels], $this->getAdminUserInfo());
return json(['code' => 200, 'msg' => '法律声明和隐私条款保存成功']);
}
/**
* 获取企业信息
* @return Json
*/
public function getCompanyInfos()
{
// 获取当前租户ID
$tid = $this->request->param('tid', 0, 'int');
// 查询租户信息
$tenant = Tenant::where('delete_time', null)
->where('id', $tid)
->find();
// 如果没有数据,返回空值结构
if (!$tenant) {
$data = [
'contact_phone' => '',
'contact_email' => '',
'address' => '',
'worktime' => ''
];
} else {
$data = [
'contact_phone' => $tenant->contact_phone ?? '',
'contact_email' => $tenant->contact_email ?? '',
'address' => $tenant->address ?? '',
'worktime' => $tenant->worktime ?? ''
];
}
$this->logSuccess('站点设置管理', '查看企业信息', [], $this->getAdminUserInfo());
return json([
'code' => 200,
'msg' => '获取成功',
'data' => $data
]);
}
/**
* 保存企业信息
* @return Json
*/
public function saveCompanyInfos()
{
$params = $this->request->param();
$tid = $params['tid'] ?? 0;
// 查找租户记录
$tenant = Tenant::where('delete_time', null)
->where('id', $tid)
->find();
if (!$tenant) {
return json([
'code' => 404,
'msg' => '租户不存在'
]);
}
// 更新字段
if (isset($params['contact_phone'])) {
$tenant->contact_phone = (string)$params['contact_phone'];
}
if (isset($params['contact_email'])) {
$tenant->contact_email = (string)$params['contact_email'];
}
if (isset($params['address'])) {
$tenant->address = (string)$params['address'];
}
if (isset($params['worktime'])) {
$tenant->worktime = (string)$params['worktime'];
}
$tenant->save();
$this->logSuccess('站点设置管理', '保存企业信息', ['tid' => $tid], $this->getAdminUserInfo());
return json(['code' => 200, 'msg' => '企业信息保存成功']);
}
/**
* 获取企业SEO
* @return Json
*/
public function getCompanySeo()
{
// 获取当前租户ID
$tid = $this->getTenantId();
// 直接根据 ID 查询租户记录
$tenant = Tenant::where('delete_time', null)
->where('id', $tid)
->field('seoTitle, seoKeywords, seoDescription')
->find();
// 如果没有数据,返回默认空值
if (!$tenant) {
$data = [
'seoTitle' => '',
'seoKeywords' => '',
'seoDescription' => ''
];
} else {
// 直接读取模型对象的属性
$data = [
'seoTitle' => $tenant->seoTitle ?? '',
'seoKeywords' => $tenant->seoKeywords ?? '',
'seoDescription' => $tenant->seoDescription ?? ''
];
}
$this->logSuccess('站点设置管理', '查看企业SEO', ['tid' => $tid], $this->getAdminUserInfo());
return json([
'code' => 200,
'msg' => '获取成功',
'data' => $data
]);
}
/**
* 保存企业SEO
* @return Json
*/
public function saveCompanySeo()
{
$params = $this->request->param();
$id = $this->getTenantId();
$tenant = Tenant::where('delete_time', null)
->where('id', $id)
->find();
if (!$tenant) {
return json(['code' => 404, 'msg' => '租户不存在']);
}
// 构建更新数据
$updateData = [];
if (isset($params['seoTitle'])) $updateData['seoTitle'] = (string)$params['seoTitle'];
if (isset($params['seoKeywords'])) $updateData['seoKeywords'] = (string)$params['seoKeywords'];
if (isset($params['seoDescription'])) $updateData['seoDescription'] = (string)$params['seoDescription'];
if (!empty($updateData)) {
$tenant->save($updateData);
}
$this->logSuccess('站点设置管理', '保存企业SEO', ['tid' => $id], $this->getAdminUserInfo());
return json(['code' => 200, 'msg' => '企业SEO保存成功']);
}
}