| | |
| | | public function getList() |
| | | { |
| | | $model = new TemplateModel(); |
| | | return $this->renderSuccess('',$model->getLists()); |
| | | $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('编辑失败'); |
| | | } |
| | | } |