SystemConfigServices.php 49 KB

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