| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401 | <?php/** * 页面模版管理 * @copyright 2021-浙江引擎力营销策划有限公司 * @author Lc<sunshinecc1@163.com> * @since 2021-08-01 */namespace App\Http\Controllers\Admin\Stencil;use App\Http\Controllers\Controller;use App\Http\Models\Site;use App\Http\Services\TemplateLibraryApiService;use Illuminate\Http\Request;use Illuminate\Support\Facades\DB;use Illuminate\Contracts\View\Factory;use Illuminate\View\View;use Illuminate\Support\Collection;use Illuminate\Http\JsonResponse;class TplController extends Controller{    const TEMPLATE_PID = -1;    const VARIABLE_PID = -2;    private $templateLibraryApiService;    /**     * 模版站服务类     * TplController constructor.     * @param TemplateLibraryApiService $templateLibraryApiService     */    public function __construct(TemplateLibraryApiService $templateLibraryApiService)    {        $this->templateLibraryApiService = $templateLibraryApiService;    }    /**     * 页面模版管理     * @param $siteId     * @return Factory|View     */    public function index($siteId)    {        try {            $site = Site::query()->where('id', $siteId)->first();            $templateList = $this->templateLibraryApiService->arraySort($this->getContentTemplateList($siteId), 'name');            $templateVarList = $this->templateLibraryApiService->arraySort($this->getContentTemplateVar($siteId), 'name');            $trees = list_to_tree(array_merge($templateList, $templateVarList), 'id', 'parent_id', 'children');            return view('admin.stencil.tpl', [                'trees' => $trees,                'site' => $site,                'siteId' => $siteId,                'templateList' => $templateList,                'variable' => $this->arraySort(json_decode(json_encode($this->getTemplateList($siteId, true)), true),'name'),                'template' => $this->arraySort(json_decode(json_encode($this->getVariableList($siteId)), true),'name'),            ]);        } catch (\Throwable $exception) {            echo $exception->getMessage();        }    }    /**     * 获取内容模版列表     * @param $siteId     * @return array     */    public function getContentTemplateList($siteId)    {        $templateList = $this->getTemplateList($siteId);        $list1 = [];        if (!empty($templateList)) {            foreach ($templateList as $key => $value) {                $list1 [] = [                    'id' => $value->id,                    'parent_id' => $value->parent_id,                    'name' => "{$value->name}(#{$value->id})",                    'title' => $value->name ?? '',                    'alias' => $value->alias ?? '',                    'rank' => $value->rank ?? 0,                    'description' => $value->description ?? '',                    'allow_write_file' => $value->allow_write_file ?? '',                    'allow_clear_cache' => $value->allow_clear_cache ?? '',                    'url_level' => $value->url_level ?? '',                    'images' => json_decode($value->images, true) ?? [],                    'level' => $value->level ?? 0,                    'type' => 1,//模版,用于区分模版和变量                ];            }            $connection = DB::connection($this->templateLibraryApiService->connection($siteId));            $relatedIdList = $connection->table('content_template_relate')->get()->toArray();            foreach ($list1 as $key => $value) {                $list1[$key]['varIdList'] = [];                foreach ($relatedIdList as $kk => $vv) {                    if ($value['id'] == $vv->tid) {                        $list1[$key]['varIdList'][] = $vv->vid;                    }                }            }        }        return $list1;    }    /**     * 获取模版列表     * @param $siteId     * @param bool $type 是否只获取一级列表     * @return Collection     */    private function getTemplateList($siteId, $type = false)    {        $connection = DB::connection($this->templateLibraryApiService->connection($siteId));        $template = $connection->table('content_template');        if ($type) {            $template->where('level', 2);        }        $templateList = $template            ->where('status', '<', 2)            ->orderBy('rank', 'asc')            ->orderBy('id', 'asc')            ->get();        return $templateList;    }    /**     * 获取变量列表     * @param $siteId     * @return Collection     */    private function getVariableList($siteId)    {        $variableList = DB::connection($this->templateLibraryApiService->connection($siteId))            ->table('content_template_var')            ->where('status', '<', 2)            ->orderBy('rank', 'asc')            ->orderBy('id', 'asc')            ->get();        return $variableList;    }    /**     * 获取模版变量     * @param $siteId     * @return array     */    public function getContentTemplateVar($siteId)    {        $variableList = $this->getVariableList($siteId);        $list2 = [];        if (!empty($variableList)) {            $list2[] = [                'id' => self::VARIABLE_PID,                'parent_id' => 0,                'name' => 'Variable',                'title' => '',                'alias' => '',                'rank' => 0,                'description' => '',                'allow_write_file' => '',                'allow_clear_cache' => '',                'url_level' => '',                'html' => '',                'input_length' => 0,                'width' => 0,                'height' => 0,                'size' => 0,                'input_value' => '',                'regex_match' => '',                'regex_error' => '',                'type' => 2,//模版,用于区分模版和变量            ];            foreach ($variableList as $key => $value) {                $list2 [] = [                    'id' => $value->id,                    'parent_id' => $list2[0]['id'],                    'name' => "{$value->name}(#{$value->id})",                    'title' => $value->name ?? '',                    'alias' => $value->caption,                    'rank' => $value->rank,                    'description' => $value->description,                    'allow_write_file' => $value->allow_write_file ?? '',                    'allow_clear_cache' => $value->allow_clear_cache ?? '',                    'url_level' => $value->url_level ?? '',                    'html' => '',                    'input_opts' => $value->input_opts ?? '',                    'input_length' => $value->input_length ?? 0,                    'width' => $value->width ?? 0,                    'height' => $value->height ?? 0,                    'size' => $value->size ?? 0,                    'input_type' => $value->input_type,                    'input_value' => $value->input_value,                    'regex_match' => $value->regex_match,                    'regex_error' => $value->regex_error,                    'type' => 2,                ];            }            $connection = DB::connection($this->templateLibraryApiService->connection($siteId));            $relatedIdList = $connection->table('content_template_relate')->get()->toArray();            foreach ($list2 as $key => $value) {                $list2[$key]['templateIdList'] = [];                foreach ($relatedIdList as $kk => $vv) {                    if ($value['id'] == $vv->vid) {                        $list2[$key]['templateIdList'][] = $vv->tid;                    }                }            }        }        return $list2;    }    /**     * 保存模版     * @param Request $request     * @param $siteId     * @return JsonResponse     */    public function templateSave(Request $request, $siteId)    {        $request = $request->all();        $update = [            'name' => $request['title'] ?? '',            'description' => $request['description'] ?? '',            'url_rule' => $request['sub_type'] ?? 2,            'alias' => $request['alias'] ?? '',            'rank' => $request['rank'] ?? 0,            'url_level' => $request['url_level'] ?? 0,            'images' => json_encode($request['images'] ?? []),        ];        if (empty($request['template_id'])) {            return response()->json(['message' => '请选择子菜单操作'], 400);        }        $connection = DB::connection($this->templateLibraryApiService->connection($siteId));        if (!empty($request['checkboxList'])) {            $connection->table('content_template_relate')->where('tid', $request['template_id'])->delete();            $list = $request['checkboxList'];            $data = [];            foreach ($list as $value) {                $result = [                    'vid' => $value,                    'tid' => $request['template_id'],                ];                $data[] = $result;            }            $connection->table('content_template_relate')->insert($data);        } else {            $connection->table('content_template_relate')->where('tid', $request['template_id'])->delete();        }        $connection->table('content_template')->where('id', $request['template_id'])->update($update);        return response()->json(['message' => '操作成功']);    }    /**     * 保存变量     * @param Request $request     * @param $siteId     * @return JsonResponse     */    public function variableSave(Request $request, $siteId)    {        $request = $request->all();        $update = [            'name' => $request['title2'] ?? '',            'description' => $request['description'] ?? '',            'caption' => $request['alias'] ?? '',            'rank' => $request['rank'] ?? 0,            'input_type' => $request['input_type'] ?? '',            'input_opts' => $request['input_opts'] ?? '',            'input_length' => $request['input_length'] ?? '',            'width' => $request['width'] ?? 0,            'height' => $request['height'] ?? 0,            'size' => $request['size'] ?? 0,            'input_value' => $request['input_value'] ?? '',            'regex_match' => $request['regex_match'] ?? '',            'regex_error' => $request['regex_error'] ?? '',        ];        if (empty($request['variable_id'])) {            return response()->json(['message' => '请选择子菜单操作'], 400);        }        $connection = DB::connection($this->templateLibraryApiService->connection($siteId));        if (!empty($request['checkboxList'])) {            $connection->table('content_template_relate')->where('vid', $request['variable_id'])->delete();            $list = $request['checkboxList'];            $data = [];            foreach ($list as $value) {                $result = [                    'vid' => $request['variable_id'],                    'tid' => $value,                ];                $data[] = $result;            }            $connection->table('content_template_relate')->insert($data);        } else {            $connection->table('content_template_relate')->where('vid', $request['variable_id'])->delete();        }        $connection->table('content_template_var')->where('id', $request['variable_id'])->update($update);        return response()->json(['message' => '操作成功']);    }    /**     * 添加变量     * @param Request $request     * @param $siteId     * @return JsonResponse     */    public function templateAddNode(Request $request, $siteId)    {        $result = $request->all();        $connection = DB::connection($this->templateLibraryApiService->connection($siteId));        if ($result['pid'] == self::TEMPLATE_PID && $result['type'] == 1) {            $data = [                'name' => $result['node'],                'parent_id' => self::TEMPLATE_PID,                'alias' => $result['node'],                'level' => ++$result['level'] ?? 0,                'description' => '',                'html' => '',                'rank' => 0,                'allow_write_file' => 0,                'allow_clear_cache' => 0,                'create_time' => time()            ];            $connection->table('content_template')->insert($data);        } elseif ($result['pid'] != self::TEMPLATE_PID && $result['type'] == 1) {            $data = [                'name' => $result['node'],                'parent_id' => $result['pid'],                'alias' => $result['node'],                'level' => ++$result['level'] ?? 0,                'description' => '',                'html' => '',                'rank' => 0,                'allow_write_file' => 0,                'allow_clear_cache' => 0,                'create_time' => time()            ];            $connection->table('content_template')->insert($data);        } elseif ($result['pid'] == self::VARIABLE_PID && $result['type'] == 2) {            $data = [                'name' => $result['node'],                'caption' => $result['node'],                'description' => '',                'input_type' => 'text',                'input_value' => '',                'input_opts' => '',                'input_length' => 0,                'allow_blank' => 0,                'regex_match' => '',                'regex_error' => '',                'rank' => 0,                'status' => 0,                'width' => 0,                'height' => 0,                'size' => 0,                'create_time' => time(),            ];            $connection->table('content_template_var')->insert($data);        } else {            return response()->json(['message' => '不允许添加子级变量'], 400);        }        return response()->json(['message' => '操作成功']);    }    /**     * 删除变量     * @param Request $request     * @param $siteId     * @return JsonResponse     */    public function templateDelNode(Request $request, $siteId)    {        $request = $request->all();        $connection = DB::connection($this->templateLibraryApiService->connection($siteId));        if ($request['pid'] == self::VARIABLE_PID) {            $result = $connection->table('content_template_var')->where('id', $request['id'])->delete();        } else {            $result = $connection->table('content_template')->where('id', $request['id'])->delete();        }        if (empty($result)) {            return response()->json(['message' => '服务器发生错误', '400']);        } else {            return response()->json(['message' => '操作成功']);        }    }}
 |