<?php
|
namespace app\api\controller\plus\business;
|
|
use app\api\controller\Controller;
|
use app\api\model\plus\business\Template as TemplateModel;
|
|
class Template extends Controller
|
{
|
/**
|
* 获取模板列表
|
*/
|
public function getList()
|
{
|
$model = new TemplateModel();
|
$param = $this->request->param();
|
$list = $model->lists($param);
|
|
// 获取屏幕宽度
|
$screenWidth = isset($param['screenWidth']) ? floatval($param['screenWidth']) : 375;
|
|
foreach($list as $index => $item) {
|
// 解析style JSON
|
$style = json_decode($item['style'], true);
|
|
if (!$style) {
|
$list[$index]['style'] = [];
|
continue;
|
}
|
|
// 计算缩放比例 (基于背景图宽度)
|
$backdropWidth = isset($style['backdrop']['width']) && $style['backdrop']['width'] > 0
|
? floatval($style['backdrop']['width'])
|
: 375;
|
|
$scale = round($screenWidth / $backdropWidth, 4);
|
|
// 需要缩放的数值字段(排除这些字段名)
|
$excludeKeys = ['color', 'src', 'style', 'display', 'type', 'src'];
|
|
// 递归处理style数组,对所有数值字段进行缩放
|
$this->scaleStyleValues($style, $scale, $excludeKeys);
|
|
$list[$index]['style'] = $style;
|
}
|
|
return $this->renderSuccess('', $list);
|
}
|
|
/**
|
* 递归缩放style中的数值字段
|
* @param array &$data 数据数组(引用传递)
|
* @param float $scale 缩放比例
|
* @param array $excludeKeys 不需要缩放的键名
|
*/
|
private function scaleStyleValues(&$data, $scale, $excludeKeys = [])
|
{
|
if (!is_array($data)) {
|
return;
|
}
|
|
foreach ($data as $key => &$value) {
|
if (is_array($value)) {
|
// 递归处理子数组
|
$this->scaleStyleValues($value, $scale, $excludeKeys);
|
} elseif (is_numeric($value) && !in_array($key, $excludeKeys)) {
|
// 对数值进行缩放(非0值)
|
if ($value != 0) {
|
$value = round($value * $scale, 2);
|
}
|
}
|
// 其他类型(字符串等)保持不变
|
}
|
}
|
|
/**
|
* 获取模板详情
|
* @param $template_id
|
* @return array
|
* @throws \think\db\exception\DataNotFoundException
|
* @throws \think\db\exception\ModelNotFoundException
|
* @throws \think\exception\DbException
|
*/
|
public function detail($template_id)
|
{
|
$model = new TemplateModel();
|
$detail = $model->detail($template_id);
|
if (!$detail) {
|
return $this->renderError('模板不存在');
|
}
|
$detail['style'] = json_decode($detail['style'], true);
|
return $this->renderSuccess($detail);
|
}
|
|
/**
|
* 添加模板
|
*/
|
public function add()
|
{
|
$param = request()->param();
|
$param['style'] = json_encode($param['style'], JSON_UNESCAPED_UNICODE);
|
if ((new TemplateModel())->add($param)) {
|
return $this->renderSuccess('添加成功');
|
}
|
return $this->renderError('添加失败');
|
}
|
|
/**
|
* 编辑模板
|
*/
|
public function edit()
|
{
|
$param = request()->param();
|
$model = (new TemplateModel())->detail($param['template_id']);
|
if (!$model) {
|
return $this->renderError('模板不存在');
|
}
|
$param['style'] = json_encode($param['style'], JSON_UNESCAPED_UNICODE);
|
unset($param['template_id']);
|
if ($model->save($param)) {
|
return $this->renderSuccess('', '编辑成功');
|
}
|
return $this->renderError('编辑失败');
|
}
|
}
|