SystemConfigServices.php 49 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
  8. // +----------------------------------------------------------------------
  9. // | Author: CRMEB Team <admin@crmeb.com>
  10. // +----------------------------------------------------------------------
  11. namespace app\services\system\config;
  12. use app\dao\system\config\SystemConfigDao;
  13. use app\services\agent\AgentManageServices;
  14. use app\services\BaseServices;
  15. use crmeb\exceptions\AdminException;
  16. use crmeb\services\FileService;
  17. use crmeb\services\FormBuilder;
  18. use think\facade\Log;
  19. /**
  20. * 系统配置
  21. * Class SystemConfigServices
  22. * @package app\services\system\config
  23. * @method count(array $where = []) 获取指定条件下的count
  24. * @method save(array $data) 保存数据
  25. * @method get(int $id, ?array $field = []) 获取一条数据
  26. * @method update($id, array $data, ?string $key = null) 修改数据
  27. * @method delete(int $id, ?string $key = null) 删除数据
  28. * @method getUploadTypeList(string $configName) 获取上传配置中的上传类型
  29. */
  30. class SystemConfigServices extends BaseServices
  31. {
  32. /**
  33. * form表单句柄
  34. * @var FormBuilder
  35. */
  36. protected $builder;
  37. /**
  38. * 表单数据切割符号
  39. * @var string
  40. */
  41. protected $cuttingStr = '=>';
  42. /**
  43. * 表单提交url
  44. * @var string[]
  45. */
  46. protected $postUrl = [
  47. 'setting' => [
  48. 'url' => '/setting/config/save_basics',
  49. 'auth' => [],
  50. ],
  51. 'serve' => [
  52. 'url' => '/serve/sms_config/save_basics',
  53. 'auth' => ['short_letter_switch'],
  54. ],
  55. 'freight' => [
  56. 'url' => '/freight/config/save_basics',
  57. 'auth' => ['express'],
  58. ],
  59. 'agent' => [
  60. 'url' => '/agent/config/save_basics',
  61. 'auth' => ['fenxiao'],
  62. ],
  63. 'marketing' => [
  64. 'url' => '/marketing/integral_config/save_basics',
  65. 'auth' => ['point'],
  66. ]
  67. ];
  68. /**
  69. * 子集控制规则
  70. * @var array[]
  71. */
  72. protected $relatedRule = [
  73. 'brokerage_func_status' => [
  74. 'son_type' => [
  75. 'store_brokerage_statu' => [
  76. 'son_type' => ['store_brokerage_price' => ''],
  77. 'show_value' => 3
  78. ],
  79. 'brokerage_bindind' => '',
  80. 'store_brokerage_binding_status' => [
  81. 'son_type' => ['store_brokerage_binding_time' => ''],
  82. 'show_value' => 2
  83. ],
  84. 'spread_banner' => '',
  85. 'brokerage_level' => '',
  86. 'division_status' => '',
  87. ],
  88. 'show_value' => 1
  89. ],
  90. 'brokerage_user_status' => [
  91. 'son_type' => [
  92. 'uni_brokerage_price' => '',
  93. 'day_brokerage_price_upper' => '',
  94. ],
  95. 'show_value' => 1
  96. ],
  97. 'invoice_func_status' => [
  98. 'son_type' => [
  99. 'special_invoice_status' => '',
  100. ],
  101. 'show_value' => 1
  102. ],
  103. 'member_func_status' => [
  104. 'son_type' => [
  105. 'order_give_exp' => '',
  106. 'sign_give_exp' => '',
  107. 'invite_user_exp' => ''
  108. ],
  109. 'show_value' => 1
  110. ],
  111. 'balance_func_status' => [
  112. 'son_type' => [
  113. 'recharge_attention' => '',
  114. 'recharge_switch' => '',
  115. 'store_user_min_recharge' => '',
  116. ],
  117. 'show_value' => 1
  118. ],
  119. 'pay_wechat_type' => [
  120. 'son_type' => [
  121. 'pay_weixin_key' => '',
  122. ],
  123. 'show_value' => 0
  124. ],
  125. 'pay_wechat_type@' => [
  126. 'son_type' => [
  127. 'pay_weixin_serial_no' => '',
  128. 'pay_weixin_key_v3' => ''
  129. ],
  130. 'show_value' => 1
  131. ],
  132. 'image_watermark_status' => [
  133. 'son_type' => [
  134. 'watermark_type' => [
  135. 'son_type' => [
  136. 'watermark_image' => '',
  137. 'watermark_opacity' => '',
  138. 'watermark_rotate' => '',
  139. ],
  140. 'show_value' => 1
  141. ],
  142. 'watermark_position' => '',
  143. 'watermark_x' => '',
  144. 'watermark_y' => '',
  145. 'watermark_type@' => [
  146. 'son_type' => [
  147. 'watermark_text' => '',
  148. 'watermark_text_size' => '',
  149. 'watermark_text_color' => '',
  150. 'watermark_text_angle' => ''
  151. ],
  152. 'show_value' => 2
  153. ],
  154. ],
  155. 'show_value' => 1
  156. ],
  157. 'customer_type' => [
  158. 'son_type' => [
  159. 'customer_phone' => '',
  160. ],
  161. 'show_value' => 1
  162. ],
  163. 'customer_type@' => [
  164. 'son_type' => [
  165. 'customer_url' => '',
  166. 'customer_corpId' => '',
  167. ],
  168. 'show_value' => 2
  169. ],
  170. 'pay_new_weixin_open' => [
  171. 'son_type' => [
  172. 'pay_new_weixin_mchid' => ''
  173. ],
  174. 'show_value' => 1
  175. ]
  176. ];
  177. /**
  178. * SystemConfigServices constructor.
  179. * @param SystemConfigDao $dao
  180. * @param FormBuilder $builder
  181. */
  182. public function __construct(SystemConfigDao $dao, FormBuilder $builder)
  183. {
  184. $this->dao = $dao;
  185. $this->builder = $builder;
  186. }
  187. /**
  188. * @return array|int[]|string[]
  189. * @author 吴汐
  190. * @email 442384644@qq.com
  191. * @date 2023/04/12
  192. */
  193. public function getSonConfig()
  194. {
  195. $sonConfig = [];
  196. $rolateRule = $this->relatedRule;
  197. if ($rolateRule) {
  198. foreach ($rolateRule as $key => $value) {
  199. $sonConfig = array_merge($sonConfig, array_keys($value['son_type']));
  200. foreach ($value['son_type'] as $k => $v) {
  201. if (isset($v['son_type'])) {
  202. $sonConfig = array_merge($sonConfig, array_keys($v['son_type']));
  203. }
  204. }
  205. }
  206. }
  207. return $sonConfig;
  208. }
  209. /**
  210. * 获取单个系统配置
  211. * @param string $configName
  212. * @param null $default
  213. * @return mixed|null
  214. * @throws \ReflectionException
  215. */
  216. public function getConfigValue(string $configName, $default = null)
  217. {
  218. $value = $this->dao->getConfigValue($configName);
  219. return is_null($value) ? $default : json_decode($value, true);
  220. }
  221. /**
  222. * 获取全部配置
  223. * @param array $configName
  224. * @return array
  225. * @throws \ReflectionException
  226. */
  227. public function getConfigAll(array $configName = [])
  228. {
  229. return array_map(function ($item) {
  230. return json_decode($item, true);
  231. }, $this->dao->getConfigAll($configName));
  232. }
  233. /**
  234. * 获取配置并分页
  235. * @param array $where
  236. * @return array
  237. * @throws \think\db\exception\DataNotFoundException
  238. * @throws \think\db\exception\DbException
  239. * @throws \think\db\exception\ModelNotFoundException
  240. */
  241. public function getConfigList(array $where)
  242. {
  243. [$page, $limit] = $this->getPageValue();
  244. $list = $this->dao->getConfigList($where, $page, $limit);
  245. $count = $this->dao->count($where);
  246. $tidy_srr = [];
  247. foreach ($list as &$item) {
  248. $item['value'] = $item['value'] ? json_decode($item['value'], true) ?: '' : '';
  249. if ($item['type'] == 'radio' || $item['type'] == 'checkbox') {
  250. $item['value'] = $this->getRadioOrCheckboxValueInfo($item['menu_name'], $item['value']);
  251. }
  252. if ($item['type'] == 'upload' && !empty($item['value'])) {
  253. if ($item['upload_type'] == 1 || $item['upload_type'] == 3) {
  254. $item['value'] = [set_file_url($item['value'])];
  255. } elseif ($item['upload_type'] == 2) {
  256. $item['value'] = set_file_url($item['value']);
  257. }
  258. foreach ($item['value'] as $key => $value) {
  259. $tidy_srr[$key]['filepath'] = $value;
  260. $tidy_srr[$key]['filename'] = basename($value);
  261. }
  262. $item['value'] = $tidy_srr;
  263. }
  264. }
  265. return compact('count', 'list');
  266. }
  267. /**
  268. * 获取单选按钮或者多选按钮的显示值
  269. * @param $menu_name
  270. * @param $value
  271. * @return string
  272. * @throws \think\db\exception\DataNotFoundException
  273. * @throws \think\db\exception\ModelNotFoundException
  274. * @throws \think\exception\DbException
  275. */
  276. public function getRadioOrCheckboxValueInfo(string $menu_name, $value): string
  277. {
  278. $option = [];
  279. $config_one = $this->dao->getOne(['menu_name' => $menu_name]);
  280. if (!$config_one) {
  281. return '';
  282. }
  283. $parameter = explode("\n", $config_one['parameter']);
  284. foreach ($parameter as $k => $v) {
  285. if (isset($v) && strlen($v) > 0) {
  286. $data = explode('=>', $v);
  287. $option[$data[0]] = $data[1];
  288. }
  289. }
  290. $str = '';
  291. if (is_array($value)) {
  292. foreach ($value as $v) {
  293. $str .= $option[$v] . ',';
  294. }
  295. } else {
  296. $str .= !empty($value) ? $option[$value] ?? '' : $option[0] ?? '';
  297. }
  298. return $str;
  299. }
  300. /**
  301. * 获取系统配置信息
  302. * @param int $tabId
  303. * @return array
  304. * @throws \think\db\exception\DataNotFoundException
  305. * @throws \think\db\exception\DbException
  306. * @throws \think\db\exception\ModelNotFoundException
  307. */
  308. public function getReadList(int $tabId)
  309. {
  310. $info = $this->dao->getConfigTabAllList($tabId);
  311. foreach ($info as $k => $v) {
  312. if (!is_null(json_decode($v['value'])))
  313. $info[$k]['value'] = json_decode($v['value'], true);
  314. if ($v['type'] == 'upload' && !empty($v['value'])) {
  315. if ($v['upload_type'] == 1 || $v['upload_type'] == 3) $info[$k]['value'] = explode(',', $v['value']);
  316. }
  317. }
  318. return $info;
  319. }
  320. /**
  321. * 创建单行表单
  322. * @param string $type
  323. * @param array $data
  324. * @return array
  325. */
  326. public function createTextForm(string $type, array $data)
  327. {
  328. $formbuider = [];
  329. switch ($type) {
  330. case 'number':
  331. $data['value'] = isset($data['value']) ? json_decode($data['value'], true) : 0;
  332. $formbuider[] = $this->builder->number($data['menu_name'], $data['info'], (float)$data['value'])->appendRule('suffix', [
  333. 'type' => 'div',
  334. 'class' => 'tips-info',
  335. 'domProps' => ['innerHTML' => $data['desc']]
  336. ]);
  337. break;
  338. case 'dateTime':
  339. $formbuider[] = $this->builder->dateTime($data['menu_name'], $data['info'], $data['value'])->appendRule('suffix', [
  340. 'type' => 'div',
  341. 'class' => 'tips-info',
  342. 'domProps' => ['innerHTML' => $data['desc']]
  343. ]);
  344. break;
  345. case 'color':
  346. $data['value'] = isset($data['value']) ? json_decode($data['value'], true) : '';
  347. $formbuider[] = $this->builder->color($data['menu_name'], $data['info'], $data['value'])->appendRule('suffix', [
  348. 'type' => 'div',
  349. 'class' => 'tips-info',
  350. 'domProps' => ['innerHTML' => $data['desc']]
  351. ]);
  352. break;
  353. default:
  354. $data['value'] = isset($data['value']) ? json_decode($data['value'], true) : '';
  355. if ($data['menu_name'] == 'api') {
  356. $formbuider[] = $this->builder->input($data['menu_name'], $data['info'], strpos($data['value'], 'http') === false ? sys_config('site_url') . $data['value'] : $data['value'])->appendRule('suffix', [
  357. 'type' => 'div',
  358. 'class' => 'tips-info',
  359. 'domProps' => ['innerHTML' => $data['desc']]
  360. ])->col(13)->readonly(true);
  361. } else {
  362. $formbuider[] = $this->builder->input($data['menu_name'], $data['info'], $data['value'])->appendRule('suffix', [
  363. 'type' => 'div',
  364. 'class' => 'tips-info',
  365. 'domProps' => ['innerHTML' => $data['desc']]
  366. ])->col(13);
  367. }
  368. break;
  369. }
  370. return $formbuider;
  371. }
  372. /**
  373. * 创建多行文本框
  374. * @param array $data
  375. * @return mixed
  376. */
  377. public function createTextareaForm(array $data)
  378. {
  379. $data['value'] = json_decode($data['value'], true) ?: '';
  380. $formbuider[] = $this->builder->textarea($data['menu_name'], $data['info'], $data['value'])->placeholder($data['desc'])->appendRule('suffix', [
  381. 'type' => 'div',
  382. 'class' => 'tips-info',
  383. 'domProps' => ['innerHTML' => $data['desc']]
  384. ])->rows(6)->col(13);
  385. return $formbuider;
  386. }
  387. /**
  388. * 创建当选表单
  389. * @param array $data
  390. * @param array $control
  391. * @param array $control_two
  392. * @return array
  393. */
  394. public function createRadioForm(array $data, $control = [], $control_two = [])
  395. {
  396. $formbuider = [];
  397. $data['value'] = json_decode($data['value'], true) ?: '0';
  398. $parameter = explode("\n", $data['parameter']);
  399. $options = [];
  400. if ($parameter) {
  401. foreach ($parameter as $v) {
  402. if (strstr($v, $this->cuttingStr) !== false) {
  403. $pdata = explode($this->cuttingStr, $v);
  404. $res = preg_match('/^[0-9]$/', $pdata[0]);
  405. $options[] = ['label' => $pdata[1], 'value' => $res ? (int)$pdata[0] : $pdata[0]];
  406. }
  407. }
  408. $res = preg_match('/^[0-9]$/', $data['value']);
  409. $formbuider[] = $radio = $this->builder->radio($data['menu_name'], $data['info'], $res ? (int)$data['value'] : $data['value'])->options($options)->appendRule('suffix', [
  410. 'type' => 'div',
  411. 'class' => 'tips-info',
  412. 'domProps' => ['innerHTML' => $data['desc']]
  413. ])->col(13);
  414. if ($control) {
  415. $radio->appendControl($data['show_value'] ?? 1, is_array($control) ? $control : [$control]);
  416. }
  417. if ($control_two && isset($data['show_value2'])) {
  418. $radio->appendControl($data['show_value2'] ?? 2, is_array($control_two) ? $control_two : [$control_two]);
  419. }
  420. return $formbuider;
  421. }
  422. }
  423. /**
  424. * 创建上传组件表单
  425. * @param int $type
  426. * @param array $data
  427. * @return array
  428. */
  429. public function createUploadForm(int $type, array $data)
  430. {
  431. $formbuider = [];
  432. switch ($type) {
  433. case 1:
  434. $data['value'] = json_decode($data['value'], true) ?: '';
  435. if ($data['value'] != '') $data['value'] = set_file_url($data['value']);
  436. $formbuider[] = $this->builder->frameImage($data['menu_name'], $data['info'], $this->url(config('app.admin_prefix', 'admin') . '/widget.images/index', ['fodder' => $data['menu_name']], true), $data['value'])
  437. ->icon('ios-image')->width('950px')->height('505px')->modal(['footer-hide' => true])->appendRule('suffix', [
  438. 'type' => 'div',
  439. 'class' => 'tips-info',
  440. 'domProps' => ['innerHTML' => $data['desc']]
  441. ])->col(13);
  442. break;
  443. case 2:
  444. $data['value'] = json_decode($data['value'], true) ?: [];
  445. if ($data['value'])
  446. $data['value'] = set_file_url($data['value']);
  447. $formbuider[] = $this->builder->frameImages($data['menu_name'], $data['info'], $this->url(config('app.admin_prefix', 'admin') . '/widget.images/index', ['fodder' => $data['menu_name'], 'type' => 'many', 'maxLength' => 5], true), $data['value'])
  448. ->maxLength(5)->icon('ios-images')->width('950px')->height('505px')->modal(['footer-hide' => true])
  449. ->appendRule('suffix', [
  450. 'type' => 'div',
  451. 'class' => 'tips-info',
  452. 'domProps' => ['innerHTML' => $data['desc']]
  453. ])->col(13);
  454. break;
  455. case 3:
  456. $data['value'] = json_decode($data['value'], true) ?: '';
  457. if ($data['value'] != '') $data['value'] = set_file_url($data['value']);
  458. $formbuider[] = $this->builder->uploadFile($data['menu_name'], $data['info'], $this->url('/adminapi/file/upload/1', ['type' => 1], false, true), $data['value'])
  459. ->name('file')->appendRule('suffix', [
  460. 'type' => 'div',
  461. 'class' => 'tips-info',
  462. 'domProps' => ['innerHTML' => $data['desc']]
  463. ])->col(13)->data(['menu_name' => $data['menu_name']])->headers([
  464. 'Authori-zation' => app()->request->header('Authori-zation'),
  465. ]);
  466. break;
  467. }
  468. return $formbuider;
  469. }
  470. /**
  471. * 创建单选框
  472. * @param array $data
  473. * @return array
  474. * @throws \FormBuilder\Exception\FormBuilderException
  475. */
  476. public function createCheckboxForm(array $data)
  477. {
  478. $formbuider = [];
  479. $data['value'] = json_decode($data['value'], true) ?: [];
  480. $parameter = explode("\n", $data['parameter']);
  481. $options = [];
  482. if ($parameter) {
  483. foreach ($parameter as $v) {
  484. if (strstr($v, $this->cuttingStr) !== false) {
  485. $pdata = explode($this->cuttingStr, $v);
  486. $options[] = ['label' => $pdata[1], 'value' => $pdata[0]];
  487. }
  488. }
  489. $formbuider[] = $this->builder->checkbox($data['menu_name'], $data['info'], $data['value'])->options($options)->appendRule('suffix', [
  490. 'type' => 'div',
  491. 'class' => 'tips-info',
  492. 'domProps' => ['innerHTML' => $data['desc']]
  493. ])->col(13);
  494. }
  495. return $formbuider;
  496. }
  497. /**
  498. * 创建选择框表单
  499. * @param array $data
  500. * @return array
  501. * @throws \FormBuilder\Exception\FormBuilderException
  502. */
  503. public function createSelectForm(array $data)
  504. {
  505. $formbuider = [];
  506. $data['value'] = json_decode($data['value'], true) ?: [];
  507. $parameter = explode("\n", $data['parameter']);
  508. $options = [];
  509. if ($parameter) {
  510. foreach ($parameter as $v) {
  511. if (strstr($v, $this->cuttingStr) !== false) {
  512. $pdata = explode($this->cuttingStr, $v);
  513. $options[] = ['label' => $pdata[1], 'value' => $pdata[0]];
  514. }
  515. }
  516. $formbuider[] = $this->builder->select($data['menu_name'], $data['info'], $data['value'])->options($options)->appendRule('suffix', [
  517. 'type' => 'div',
  518. 'class' => 'tips-info',
  519. 'domProps' => ['innerHTML' => $data['desc']]
  520. ])->col(13);
  521. }
  522. return $formbuider;
  523. }
  524. /**
  525. * 创建颜色选择器
  526. * @param array $data
  527. * @return mixed
  528. */
  529. public function createColorForm(array $data)
  530. {
  531. $data['value'] = json_decode($data['value'], true) ?: '';
  532. $formbuider[] = $this->builder->color($data['menu_name'], $data['info'], $data['value'])->appendRule('suffix', [
  533. 'type' => 'div',
  534. 'class' => 'tips-info',
  535. 'domProps' => ['innerHTML' => $data['desc']]
  536. ])->col(13);
  537. return $formbuider;
  538. }
  539. public function bindBuilderData($data, $relatedRule)
  540. {
  541. if (!$data) return false;
  542. $p_list = array();
  543. foreach ($relatedRule as $rk => $rv) {
  544. $p_list[$rk] = $data[$rk];
  545. if (isset($rv['son_type']) && is_array($rv['son_type'])) {
  546. foreach ($rv['son_type'] as $sk => $sv) {
  547. if (is_array($sv) && isset($sv['son_type'])) {
  548. foreach ($sv['son_type'] as $ssk => $ssv) {
  549. $tmp = $data[$sk];
  550. $tmp['console'] = $data[$ssk];
  551. $p_list[$rk]['console'][] = $tmp;
  552. }
  553. } else {
  554. $p_list[$rk]['console'][] = $data[$sk];
  555. }
  556. }
  557. }
  558. }
  559. return array_values($p_list);
  560. }
  561. /**
  562. * 获取系统配置表单
  563. * @param $data
  564. * @param bool $control
  565. * @param array $controle_two
  566. * @return array
  567. * @throws \FormBuilder\Exception\FormBuilderException
  568. */
  569. public function formTypeShine($data, $control = false, $controle_two = [])
  570. {
  571. switch ($data['type']) {
  572. case 'text'://文本框
  573. return $this->createTextForm($data['input_type'], $data);
  574. case 'radio'://单选框
  575. return $this->createRadioForm($data, $control, $controle_two);
  576. case 'textarea'://多行文本框
  577. return $this->createTextareaForm($data);
  578. case 'upload'://文件上传
  579. return $this->createUploadForm((int)$data['upload_type'], $data);
  580. case 'checkbox'://多选框
  581. return $this->createCheckboxForm($data);
  582. case 'select'://多选框
  583. return $this->createSelectForm($data);
  584. case 'color':
  585. return $this->createColorForm($data);
  586. }
  587. }
  588. /**
  589. * @param int $tabId
  590. * @param array $formData
  591. * @param array $relatedRule
  592. * @return array|bool
  593. * @throws \think\db\exception\DataNotFoundException
  594. * @throws \think\db\exception\DbException
  595. * @throws \think\db\exception\ModelNotFoundException
  596. */
  597. public function createConfigForm(int $tabId, array $relatedRule)
  598. {
  599. $list = $this->dao->getConfigTabAllList($tabId);
  600. if (!$relatedRule) {
  601. $formbuider = $this->createNoCrontrolForm($list);
  602. } else {
  603. $formbuider = $this->createBindCrontrolForm($list, $relatedRule);
  604. }
  605. return $formbuider;
  606. }
  607. /**
  608. * 创建
  609. * @param array $list
  610. * @return array
  611. * @throws \FormBuilder\Exception\FormBuilderException
  612. * @throws \think\db\exception\DataNotFoundException
  613. * @throws \think\db\exception\DbException
  614. * @throws \think\db\exception\ModelNotFoundException
  615. */
  616. public function createForm(array $list)
  617. {
  618. if (!$list) return [];
  619. $list = array_combine(array_column($list, 'menu_name'), $list);
  620. $formbuider = [];
  621. $relateRule = $this->relatedRule;
  622. $sonConfig = $this->getSonConfig();
  623. foreach ($list as $key => $data) {
  624. if (in_array($key, $sonConfig)) {
  625. continue;
  626. }
  627. switch ($data['type']) {
  628. case 'text'://文本框
  629. $formbuider = array_merge($formbuider, $this->createTextForm($data['input_type'], $data));
  630. break;
  631. case 'radio'://单选框
  632. $builder = [];
  633. if (isset($relateRule[$key])) {
  634. $role = $relateRule[$key];
  635. $data['show_value'] = $role['show_value'];
  636. foreach ($role['son_type'] as $sk => $sv) {
  637. if (isset($list[$sk])) {
  638. $son_data = $list[$sk];
  639. $son_data['show_value'] = $role['show_value'];
  640. $son_build = [];
  641. if (isset($sv['son_type'])) {
  642. foreach ($sv['son_type'] as $ssk => $ssv) {
  643. $son_data['show_value'] = $sv['show_value'];
  644. $son_build[] = $this->formTypeShine($list[$ssk])[0];
  645. unset($list[$ssk]);
  646. }
  647. }
  648. $son_build_two = [];
  649. if (isset($role['son_type'][$sk . '@'])) {
  650. $son_type_two = $role['son_type'][$sk . '@'];
  651. $son_data['show_value2'] = $son_type_two['show_value'];
  652. if (isset($son_type_two['son_type'])) {
  653. foreach ($son_type_two['son_type'] as $ssk => $ssv) {
  654. if (isset($list[$ssk]['menu_name']) && $list[$ssk]['menu_name'] == 'watermark_text_color') $list[$ssk]['type'] = 'color';
  655. $son_build_two[] = $this->formTypeShine($list[$ssk])[0];
  656. unset($list[$ssk]);
  657. }
  658. }
  659. }
  660. $builder[] = $this->formTypeShine($son_data, $son_build, $son_build_two)[0];
  661. unset($list[$sk]);
  662. }
  663. }
  664. $data['show_value'] = $role['show_value'];
  665. }
  666. $builder_two = [];
  667. if (isset($relateRule[$key . '@'])) {
  668. $role = $relateRule[$key . '@'];
  669. $data['show_value2'] = $role['show_value'];
  670. foreach ($role['son_type'] as $sk => $sv) {
  671. $son_data = $list[$sk];
  672. $son_data['show_value'] = $role['show_value'];
  673. $builder_two[] = $this->formTypeShine($son_data)[0];
  674. }
  675. }
  676. $formbuider = array_merge($formbuider, $this->createRadioForm($data, $builder, $builder_two));
  677. break;
  678. case 'textarea'://多行文本框
  679. $formbuider = array_merge($formbuider, $this->createTextareaForm($data));
  680. break;
  681. case 'upload'://文件上传
  682. $formbuider = array_merge($formbuider, $this->createUploadForm((int)$data['upload_type'], $data));
  683. break;
  684. case 'checkbox'://多选框
  685. $formbuider = array_merge($formbuider, $this->createCheckboxForm($data));
  686. break;
  687. case 'select'://多选框
  688. $formbuider = array_merge($formbuider, $this->createSelectForm($data));
  689. break;
  690. }
  691. }
  692. return $formbuider;
  693. }
  694. /**无组件绑定规则
  695. * @param array $list
  696. * @return array|bool
  697. * @throws \FormBuilder\Exception\FormBuilderException
  698. * @throws \think\db\exception\DataNotFoundException
  699. * @throws \think\db\exception\DbException
  700. * @throws \think\db\exception\ModelNotFoundException
  701. */
  702. public function createNoCrontrolForm(array $list)
  703. {
  704. if (!$list) return false;
  705. $formbuider = [];
  706. foreach ($list as $key => $data) {
  707. switch ($data['type']) {
  708. case 'text'://文本框
  709. $formbuider = array_merge($formbuider, $this->createTextForm($data['input_type'], $data));
  710. break;
  711. case 'radio'://单选框
  712. $formbuider = array_merge($formbuider, $this->createRadioForm($data));
  713. break;
  714. case 'textarea'://多行文本框
  715. $formbuider = array_merge($formbuider, $this->createTextareaForm($data));
  716. break;
  717. case 'upload'://文件上传
  718. $formbuider = array_merge($formbuider, $this->createUploadForm((int)$data['upload_type'], $data));
  719. break;
  720. case 'checkbox'://多选框
  721. $formbuider = array_merge($formbuider, $this->createCheckboxForm($data));
  722. break;
  723. case 'select'://多选框
  724. $formbuider = array_merge($formbuider, $this->createSelectForm($data));
  725. break;
  726. }
  727. }
  728. return $formbuider;
  729. }
  730. /**
  731. * 有组件绑定规则
  732. * @param array $list
  733. * @param array $relatedRule
  734. * @return array|bool
  735. * @throws \FormBuilder\Exception\FormBuilderException
  736. * @throws \think\db\exception\DataNotFoundException
  737. * @throws \think\db\exception\DbException
  738. * @throws \think\db\exception\ModelNotFoundException
  739. */
  740. public function createBindCrontrolForm(array $list, array $relatedRule)
  741. {
  742. if (!$list || !$relatedRule) return false;
  743. $formbuider = [];
  744. $new_data = array();
  745. foreach ($list as $dk => $dv) {
  746. $new_data[$dv['menu_name']] = $dv;
  747. }
  748. foreach ($relatedRule as $rk => $rv) {
  749. if (isset($rv['son_type'])) {
  750. $data = $new_data[$rk];
  751. switch ($data['type']) {
  752. case 'text'://文本框
  753. $formbuider = array_merge($formbuider, $this->createTextForm($data['input_type'], $data));
  754. break;
  755. case 'radio'://单选框
  756. $son_builder = array();
  757. foreach ($rv['son_type'] as $sk => $sv) {
  758. if (isset($sv['son_type'])) {
  759. foreach ($sv['son_type'] as $ssk => $ssv) {
  760. $son_data = $new_data[$sk];
  761. $son_data['show_value'] = $sv['show_value'];
  762. $son_builder[] = $this->formTypeShine($son_data, $this->formTypeShine($new_data[$ssk])[0])[0];
  763. }
  764. } else {
  765. $son_data = $new_data[$sk];
  766. $son_data['show_value'] = $rv['show_value'];
  767. $son_builder[] = $this->formTypeShine($son_data)[0];
  768. }
  769. }
  770. $formbuider = array_merge($formbuider, $this->createRadioForm($data, $son_builder));
  771. break;
  772. case 'textarea'://多行文本框
  773. $formbuider = array_merge($formbuider, $this->createTextareaForm($data));
  774. break;
  775. case 'upload'://文件上传
  776. $formbuider = array_merge($formbuider, $this->createUploadForm((int)$data['upload_type'], $data));
  777. break;
  778. case 'checkbox'://多选框
  779. $formbuider = array_merge($formbuider, $this->createCheckboxForm($data));
  780. break;
  781. case 'select'://多选框
  782. $formbuider = array_merge($formbuider, $this->createSelectForm($data));
  783. break;
  784. }
  785. }
  786. }
  787. return $formbuider;
  788. }
  789. /**
  790. * 系统配置form表单创建
  791. * @param $url
  792. * @param int $tabId
  793. * @return array
  794. * @throws \FormBuilder\Exception\FormBuilderException
  795. * @throws \think\db\exception\DataNotFoundException
  796. * @throws \think\db\exception\DbException
  797. * @throws \think\db\exception\ModelNotFoundException
  798. */
  799. public function getConfigForm($url, int $tabId)
  800. {
  801. /** @var SystemConfigTabServices $service */
  802. $service = app()->make(SystemConfigTabServices::class);
  803. $title = $service->value(['id' => $tabId], 'title');
  804. $list = $this->dao->getConfigTabAllList($tabId);
  805. $formbuider = $this->createForm($list);
  806. $name = 'setting';
  807. if ($url) {
  808. $name = explode('/', $url)[2] ?? $name;
  809. }
  810. $postUrl = $this->postUrl[$name]['url'] ?? '/setting/config/save_basics';
  811. return create_form($title, $formbuider, $this->url($postUrl), 'POST');
  812. }
  813. /**
  814. * 新增路由增加设置项验证
  815. * @param $url
  816. * @param $post
  817. * @return bool
  818. */
  819. public function checkParam($url, $post)
  820. {
  821. $name = '';
  822. if ($url) {
  823. $name = explode('/', $url)[2] ?? $name;
  824. }
  825. $auth = $this->postUrl[$name]['auth'] ?? false;
  826. if ($auth === false) {
  827. throw new AdminException(400601);
  828. }
  829. if ($auth) {
  830. /** @var SystemConfigTabServices $systemConfigTabServices */
  831. $systemConfigTabServices = app()->make(SystemConfigTabServices::class);
  832. foreach ($post as $key => $value) {
  833. $tab_ids = $systemConfigTabServices->getColumn([['eng_title', 'IN', $auth]], 'id');
  834. if (!$tab_ids || !in_array($key, $this->dao->getColumn([['config_tab_id', 'IN', $tab_ids]], 'menu_name'))) {
  835. throw new AdminException(400602);
  836. }
  837. }
  838. }
  839. return true;
  840. }
  841. /**
  842. * 修改配置获取form表单
  843. * @param int $id
  844. * @return array
  845. * @throws \FormBuilder\Exception\FormBuilderException
  846. * @throws \think\db\exception\DataNotFoundException
  847. * @throws \think\db\exception\DbException
  848. * @throws \think\db\exception\ModelNotFoundException
  849. */
  850. public function editConfigForm(int $id)
  851. {
  852. $menu = $this->dao->get($id)->getData();
  853. if (!$menu) {
  854. throw new AdminException(100026);
  855. }
  856. /** @var SystemConfigTabServices $service */
  857. $service = app()->make(SystemConfigTabServices::class);
  858. $formbuider = [];
  859. $formbuider[] = $this->builder->input('menu_name', '字段变量', $menu['menu_name'])->disabled(1);
  860. $formbuider[] = $this->builder->hidden('type', $menu['type']);
  861. $formbuider[] = $this->builder->select('config_tab_id', '分类', (int)$menu['config_tab_id'])->setOptions($service->getSelectForm());
  862. $formbuider[] = $this->builder->input('info', '配置名称', $menu['info'])->autofocus(1);
  863. $formbuider[] = $this->builder->input('desc', '配置简介', $menu['desc']);
  864. switch ($menu['type']) {
  865. case 'text':
  866. $menu['value'] = json_decode($menu['value'], true);
  867. $formbuider[] = $this->builder->select('input_type', '类型', $menu['input_type'])->setOptions([
  868. ['value' => 'input', 'label' => '文本框']
  869. , ['value' => 'dateTime', 'label' => '时间']
  870. , ['value' => 'color', 'label' => '颜色']
  871. , ['value' => 'number', 'label' => '数字']
  872. ]);
  873. //输入框验证规则
  874. $formbuider[] = $this->builder->input('value', '默认值', $menu['value']);
  875. if (!empty($menu['required'])) {
  876. $formbuider[] = $this->builder->number('width', '文本框宽(%)', (int)$menu['width']);
  877. $formbuider[] = $this->builder->input('required', '验证规则', $menu['required'])->placeholder('多个请用,隔开例如:required:true,url:true');
  878. }
  879. break;
  880. case 'textarea':
  881. $menu['value'] = json_decode($menu['value'], true);
  882. //多行文本
  883. if (!empty($menu['high'])) {
  884. $formbuider[] = $this->builder->textarea('value', '默认值', $menu['value'])->rows(5);
  885. $formbuider[] = $this->builder->number('width', '文本框宽(%)', (int)$menu['width']);
  886. $formbuider[] = $this->builder->number('high', '多行文本框高(%)', (int)$menu['high']);
  887. } else {
  888. $formbuider[] = $this->builder->input('value', '默认值', $menu['value']);
  889. }
  890. break;
  891. case 'radio':
  892. $formbuider = array_merge($formbuider, $this->createRadioForm($menu));
  893. //单选和多选参数配置
  894. if (!empty($menu['parameter'])) {
  895. $formbuider[] = $this->builder->textarea('parameter', '配置参数', $menu['parameter'])->placeholder("参数方式例如:\n1=>白色\n2=>红色\n3=>黑色");
  896. }
  897. break;
  898. case 'checkbox':
  899. $formbuider = array_merge($formbuider, $this->createCheckboxForm($menu));
  900. //单选和多选参数配置
  901. if (!empty($menu['parameter'])) {
  902. $formbuider[] = $this->builder->textarea('parameter', '配置参数', $menu['parameter'])->placeholder("参数方式例如:\n1=>白色\n2=>红色\n3=>黑色");
  903. }
  904. break;
  905. case 'upload':
  906. $formbuider = array_merge($formbuider, $this->createUploadForm(($menu['upload_type']), $menu));
  907. //上传类型选择
  908. if (!empty($menu['upload_type'])) {
  909. $formbuider[] = $this->builder->radio('upload_type', '上传类型', $menu['upload_type'])->options([['value' => 1, 'label' => '单图'], ['value' => 2, 'label' => '多图'], ['value' => 3, 'label' => '文件']]);
  910. }
  911. break;
  912. }
  913. $formbuider[] = $this->builder->number('sort', '排序', (int)$menu['sort']);
  914. $formbuider[] = $this->builder->radio('status', '状态', $menu['status'])->options([['value' => 1, 'label' => '显示'], ['value' => 0, 'label' => '隐藏']]);
  915. return create_form('编辑字段', $formbuider, $this->url('/setting/config/' . $id), 'PUT');
  916. }
  917. /**
  918. * 字段状态
  919. * @return array
  920. */
  921. public function formStatus(): array
  922. {
  923. return [['value' => 1, 'label' => '显示'], ['value' => 0, 'label' => '隐藏']];
  924. }
  925. /**
  926. * 选择文文件类型
  927. * @return array
  928. */
  929. public function uploadType(): array
  930. {
  931. return [
  932. ['value' => 1, 'label' => '单图']
  933. , ['value' => 2, 'label' => '多图']
  934. , ['value' => 3, 'label' => '文件']
  935. ];
  936. }
  937. /**
  938. * 选择文本框类型
  939. * @return array
  940. */
  941. public function textType(): array
  942. {
  943. return [
  944. ['value' => 'input', 'label' => '文本框']
  945. , ['value' => 'dateTime', 'label' => '时间']
  946. , ['value' => 'color', 'label' => '颜色']
  947. , ['value' => 'number', 'label' => '数字']
  948. ];
  949. }
  950. /**
  951. * 获取创建配置规格表单
  952. * @param int $type
  953. * @param int $tab_id
  954. * @return array
  955. * @throws \FormBuilder\Exception\FormBuilderException
  956. * @throws \think\db\exception\DataNotFoundException
  957. * @throws \think\db\exception\DbException
  958. * @throws \think\db\exception\ModelNotFoundException
  959. */
  960. public function createFormRule(int $type, int $tab_id): array
  961. {
  962. /** @var SystemConfigTabServices $service */
  963. $service = app()->make(SystemConfigTabServices::class);
  964. $formbuider = [];
  965. $form_type = '';
  966. $info_type = [];
  967. $parameter = [];
  968. switch ($type) {
  969. case 0://文本框
  970. $form_type = 'text';
  971. $info_type = $this->builder->select('input_type', '类型')->setOptions($this->textType());
  972. $parameter[] = $this->builder->input('value', '默认值');
  973. $parameter[] = $this->builder->number('width', '文本框宽(%)', 100);
  974. $parameter[] = $this->builder->input('required', '验证规则')->placeholder('多个请用,隔开例如:required:true,url:true');
  975. break;
  976. case 1://多行文本框
  977. $form_type = 'textarea';
  978. $parameter[] = $this->builder->textarea('value', '默认值');
  979. $parameter[] = $this->builder->number('width', '文本框宽(%)', 100);
  980. $parameter[] = $this->builder->number('high', '多行文本框高(%)', 5);
  981. break;
  982. case 2://单选框
  983. $form_type = 'radio';
  984. $parameter[] = $this->builder->textarea('parameter', '配置参数')->placeholder("参数方式例如:\n1=>男\n2=>女\n3=>保密");
  985. $parameter[] = $this->builder->input('value', '默认值');
  986. break;
  987. case 3://文件上传
  988. $form_type = 'upload';
  989. $parameter[] = $this->builder->radio('upload_type', '上传类型', 1)->options($this->uploadType());
  990. break;
  991. case 4://多选框
  992. $form_type = 'checkbox';
  993. $parameter[] = $this->builder->textarea('parameter', '配置参数')->placeholder("参数方式例如:\n1=>白色\n2=>红色\n3=>黑色");
  994. break;
  995. case 5://下拉框
  996. $form_type = 'select';
  997. $parameter[] = $this->builder->textarea('parameter', '配置参数')->placeholder("参数方式例如:\n1=>白色\n2=>红色\n3=>黑色");
  998. break;
  999. }
  1000. if ($form_type) {
  1001. $formbuider[] = $this->builder->hidden('type', $form_type);
  1002. $formbuider[] = $this->builder->select('config_tab_id', '分类', $tab_id)->setOptions($service->getSelectForm());
  1003. if ($info_type) {
  1004. $formbuider[] = $info_type;
  1005. }
  1006. $formbuider[] = $this->builder->input('info', '配置名称')->autofocus(1);
  1007. $formbuider[] = $this->builder->input('menu_name', '字段变量')->placeholder('例如:site_url');
  1008. $formbuider[] = $this->builder->input('desc', '配置简介');
  1009. $formbuider = array_merge($formbuider, $parameter);
  1010. $formbuider[] = $this->builder->number('sort', '排序', 0);
  1011. $formbuider[] = $this->builder->radio('status', '状态', 1)->options($this->formStatus());
  1012. }
  1013. return create_form('添加字段', $formbuider, $this->url('/setting/config'), 'POST');
  1014. }
  1015. /**
  1016. * radio 和 checkbox规则的判断
  1017. * @param $data
  1018. * @return bool
  1019. */
  1020. public function valiDateRadioAndCheckbox($data)
  1021. {
  1022. $option = [];
  1023. $option_new = [];
  1024. $data['parameter'] = str_replace("\r\n", "\n", $data['parameter']);//防止不兼容
  1025. $parameter = explode("\n", $data['parameter']);
  1026. if (count($parameter) < 2) {
  1027. throw new AdminException(400603);
  1028. }
  1029. foreach ($parameter as $k => $v) {
  1030. if (isset($v) && !empty($v)) {
  1031. $option[$k] = explode('=>', $v);
  1032. }
  1033. }
  1034. if (count($option) < 2) {
  1035. throw new AdminException(400603);
  1036. }
  1037. $bool = 1;
  1038. foreach ($option as $k => $v) {
  1039. $option_new[$k] = $option[$k][0];
  1040. foreach ($v as $kk => $vv) {
  1041. $vv_num = strlen($vv);
  1042. if (!$vv_num) {
  1043. $bool = 0;
  1044. }
  1045. }
  1046. }
  1047. if (!$bool) {
  1048. throw new AdminException(400603);
  1049. }
  1050. $num1 = count($option_new);//提取该数组的数目
  1051. $arr2 = array_unique($option_new);//合并相同的元素
  1052. $num2 = count($arr2);//提取合并后数组个数
  1053. if ($num1 > $num2) {
  1054. throw new AdminException(400603);
  1055. }
  1056. return true;
  1057. }
  1058. /**
  1059. * 验证参数
  1060. * @param $data
  1061. * @return bool
  1062. */
  1063. public function valiDateValue($data)
  1064. {
  1065. if (!$data || !isset($data['required']) || !$data['required']) {
  1066. return true;
  1067. }
  1068. $valids = explode(',', $data['required']);
  1069. foreach ($valids as $valid) {
  1070. $valid = explode(':', $valid);
  1071. if (isset($valid[0]) && isset($valid[1])) {
  1072. $k = strtolower(trim($valid[0]));
  1073. $v = strtolower(trim($valid[1]));
  1074. switch ($k) {
  1075. case 'required':
  1076. if ($v == 'true' && $data['value'] === '') {
  1077. throw new AdminException(400604, ['name' => $data['info'] ?? '']);
  1078. }
  1079. break;
  1080. case 'url':
  1081. if ($v == 'true' && !check_link($data['value'])) {
  1082. throw new AdminException(400605, ['name' => $data['info'] ?? '']);
  1083. }
  1084. break;
  1085. }
  1086. }
  1087. }
  1088. }
  1089. /**
  1090. * 保存平台电子面单打印信息
  1091. * @param array $data
  1092. * @return bool
  1093. */
  1094. public function saveExpressInfo(array $data)
  1095. {
  1096. if (!is_array($data) || !$data) return false;
  1097. // config_export_id 快递公司id
  1098. // config_export_temp_id 快递公司模板id
  1099. // config_export_com 快递公司编码
  1100. // config_export_to_name 发货人姓名
  1101. // config_export_to_tel 发货人电话
  1102. // config_export_to_address 发货人详细地址
  1103. // config_export_siid 电子面单打印机编号
  1104. foreach ($data as $key => $value) {
  1105. $this->dao->update(['menu_name' => 'config_export_' . $key], ['value' => json_encode($value)]);
  1106. }
  1107. $this->cacheDriver()->clear();
  1108. return true;
  1109. }
  1110. /**
  1111. * 获取分享海报 兼容方法
  1112. */
  1113. public function getSpreadBanner()
  1114. {
  1115. //配置
  1116. $banner = sys_config('spread_banner', []);
  1117. if (!$banner) {
  1118. //组合数据
  1119. $banner = sys_data('routine_spread_banner');
  1120. if ($banner) {
  1121. $banner = array_column($banner, 'pic');
  1122. $this->dao->update(['menu_name' => 'spread_banner'], ['value' => json_encode($banner)]);
  1123. $this->cacheDriver()->clear();
  1124. }
  1125. }
  1126. return $banner;
  1127. }
  1128. /**
  1129. * 保存wss配置
  1130. * @param int $wssOpen
  1131. * @param string $wssLocalpk
  1132. * @param string $wssLocalCert
  1133. */
  1134. public function saveSslFilePath(int $wssOpen, string $wssLocalpk, string $wssLocalCert)
  1135. {
  1136. $wssFile = root_path() . '.wss';
  1137. $content = <<<WSS
  1138. wssOpen = $wssOpen
  1139. wssLocalpk = $wssLocalpk
  1140. wssLocalCert = $wssLocalCert
  1141. WSS;
  1142. try {
  1143. file_put_contents($wssFile, $content);
  1144. } catch (\Throwable $e) {
  1145. throw new AdminException(400606);
  1146. }
  1147. }
  1148. /**
  1149. * 获取wss配置
  1150. * @param string $key
  1151. * @return array|false|mixed
  1152. */
  1153. public function getSslFilePath(string $key = '')
  1154. {
  1155. $wssFile = root_path() . '.wss';
  1156. try {
  1157. $content = parse_ini_file($wssFile);
  1158. } catch (\Throwable $e) {
  1159. $content = [];
  1160. }
  1161. return $content[$key] ?? $content;
  1162. }
  1163. /**
  1164. * 检测缩略图水印配置是否更改
  1165. * @param array $post
  1166. * @return bool
  1167. */
  1168. public function checkThumbParam(array $post)
  1169. {
  1170. unset($post['upload_type'], $post['image_watermark_status']);
  1171. /** @var SystemConfigTabServices $systemConfigTabServices */
  1172. $systemConfigTabServices = app()->make(SystemConfigTabServices::class);
  1173. //上传配置->基础配置
  1174. $tab_id = $systemConfigTabServices->getColumn(['eng_title' => 'base_config'], 'id');
  1175. if ($tab_id) {
  1176. $all = $this->dao->getColumn(['config_tab_id' => $tab_id], 'value', 'menu_name');
  1177. if (array_intersect(array_keys($all), array_keys($post))) {
  1178. foreach ($post as $key => $item) {
  1179. //配置更改删除原来生成的缩略图
  1180. if (isset($all[$key]) && $item != json_decode($all[$key], true)) {
  1181. try {
  1182. FileService::delDir(public_path('uploads/thumb_water'));
  1183. break;
  1184. } catch (\Throwable $e) {
  1185. }
  1186. }
  1187. }
  1188. }
  1189. }
  1190. return true;
  1191. }
  1192. /**
  1193. * 变更分销绑定关系模式
  1194. * @param array $post
  1195. * @return bool
  1196. */
  1197. public function checkBrokerageBinding(array $post)
  1198. {
  1199. try {
  1200. $config_data = $post['store_brokerage_binding_status'];
  1201. $config_one = $this->dao->getOne(['menu_name' => 'store_brokerage_binding_status']);
  1202. $config_old = json_decode($config_one['value'], true);
  1203. if ($config_old != 2 && $config_data == 2) {
  1204. //自动解绑上级绑定
  1205. /** @var AgentManageServices $agentManage */
  1206. $agentManage = app()->make(AgentManageServices::class);
  1207. $agentManage->resetSpreadTime();
  1208. }
  1209. } catch (\Throwable $e) {
  1210. Log::error('变更分销绑定模式重置绑定时间失败,失败原因:' . $e->getMessage());
  1211. return false;
  1212. }
  1213. return true;
  1214. }
  1215. }