SystemConfigServices.php 47 KB

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