GroupDataRepository.php 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2016~2024 https://www.crmeb.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
  8. // +----------------------------------------------------------------------
  9. // | Author: CRMEB Team <admin@crmeb.com>
  10. // +----------------------------------------------------------------------
  11. namespace app\common\repositories\system\groupData;
  12. use app\common\dao\BaseDao;
  13. use app\common\dao\system\groupData\GroupDataDao;
  14. use app\common\repositories\BaseRepository;
  15. use app\common\repositories\store\product\ProductLabelRepository;
  16. use app\common\repositories\store\StoreCategoryRepository;
  17. use FormBuilder\Exception\FormBuilderException;
  18. use FormBuilder\Factory\Elm;
  19. use FormBuilder\Form;
  20. use think\db\exception\DataNotFoundException;
  21. use think\db\exception\DbException;
  22. use think\db\exception\ModelNotFoundException;
  23. use think\exception\ValidateException;
  24. use think\facade\Route;
  25. use think\Model;
  26. /**
  27. * Class GroupDataRepository
  28. * @package app\common\repositories\system\groupData
  29. * @mixin GroupDataDao
  30. * @author xaboy
  31. * @day 2020-03-30
  32. */
  33. class GroupDataRepository extends BaseRepository
  34. {
  35. /**
  36. * GroupDataRepository constructor.
  37. * @param GroupDataDao $dao
  38. */
  39. public function __construct(GroupDataDao $dao)
  40. {
  41. $this->dao = $dao;
  42. }
  43. /**
  44. * 创建数据条目
  45. *
  46. * 本函数用于在数据库中创建一个新的数据条目。它首先验证传入数据的有效性,然后将商家ID添加到数据数组中,
  47. * 最后调用DAO层的创建方法来实际执行数据插入操作。
  48. *
  49. * @param int $merId 商家ID,用于标识数据所属的商家。
  50. * @param array $data 数据数组,包含要创建的数据条目的各个字段及其值。
  51. * @param array $fieldRule 字段规则数组,用于验证数据数组中的字段值是否符合要求。
  52. * @return mixed 返回DAO层创建方法的执行结果,通常是新创建数据的ID或其他标识符。
  53. */
  54. public function create(int $merId, array $data, array $fieldRule)
  55. {
  56. // 验证传入的数据是否符合预设的规则
  57. $this->checkData($data['value'], $fieldRule);
  58. // 将商家ID添加到数据数组中
  59. $data['mer_id'] = $merId;
  60. // 调用DAO层的创建方法,实际执行数据插入操作
  61. return $this->dao->create($data);
  62. }
  63. /**
  64. * 更新商家信息。
  65. *
  66. * 本函数用于更新特定商家的特定信息。在执行更新之前,会通过检查数据的合法性来确保数据安全。
  67. * 主要涉及的步骤包括:
  68. * 1. 根据传入的字段规则,验证数据的合法性。
  69. * 2. 调用DAO层的方法,执行实际的更新操作。
  70. *
  71. * @param int $merId 商家ID,用于确定要更新的商家。
  72. * @param int $id 需要更新的具体信息的ID,用于定位要更新的具体信息。
  73. * @param array $data 包含要更新的数据的信息,其中'value'键包含实际的更新值。
  74. * @param array $fieldRule 字段规则,用于验证$data中'value'的合法性。
  75. * @return bool 更新操作的结果,true表示成功,false表示失败。
  76. */
  77. public function merUpdate($merId, $id, $data, $fieldRule)
  78. {
  79. // 根据字段规则检查数据的合法性
  80. $this->checkData($data['value'], $fieldRule);
  81. // 调用DAO层的方法执行商家信息的更新操作
  82. return $this->dao->merUpdate($merId, $id, $data);
  83. }
  84. /**
  85. * 检查数据是否符合指定的规则
  86. *
  87. * 本函数用于遍历字段规则数组,并针对每个规则检查相应的数据字段是否满足条件。
  88. * 如果数据字段不满足规则条件,则抛出一个验证异常。
  89. *
  90. * @param array $data 要检查的数据数组,其中包含各个字段的值。
  91. * @param array $fieldRule 字段规则数组,每个元素包含字段的名称、类型及其他验证条件。
  92. * @throws ValidateException 如果数据字段不满足规则条件,则抛出此异常。
  93. */
  94. public function checkData(array $data, array $fieldRule)
  95. {
  96. foreach ($fieldRule as $rule) {
  97. // 检查规则类型为数字的字段是否小于0
  98. // 如果字段类型为数字且值小于0,则抛出验证异常,指出该字段不能小于0。
  99. if ($rule['type'] === 'number' && $data[$rule['field']] < 0) {
  100. throw new ValidateException($rule['name'] . '不能小于0');
  101. }
  102. }
  103. }
  104. /**
  105. * 获取分组数据列表
  106. *
  107. * 本函数用于根据商家ID、分组ID,获取特定分组的数据列表。支持分页和限制返回数据的数量。
  108. * 主要用于后台管理界面的数据展示,例如商品分类的管理。
  109. *
  110. * @param int $merId 商家ID,用于限定查询的商家范围。
  111. * @param int $groupId 分组ID,指定要查询的分组。
  112. * @param int $page 当前页码,用于分页查询。
  113. * @param int $limit 每页数据条数,用于控制返回的数据量。
  114. * @return array 返回包含数据总数和数据列表的数组。
  115. */
  116. public function getGroupDataLst(int $merId, int $groupId, int $page, int $limit): array
  117. {
  118. // 根据商家ID和分组ID构建查询条件,并按排序字段排序
  119. $query = $this->dao->getGroupDataWhere($merId, $groupId)->order('sort DESC,group_data_id ASC');
  120. // 计算满足条件的数据总数
  121. $count = $query->count();
  122. // 根据当前页码和每页数据条数,查询满足条件的数据列表
  123. // 返回的数据包含字段:group_data_id, value, sort, status, create_time
  124. $list = $query->field('group_data_id,value,sort,status,create_time')->page($page, $limit)->select()->toArray();
  125. // 遍历数据列表,将value字段合并到主数据数组中,以丰富数据内容
  126. foreach ($list as $k => $data) {
  127. $value = $data['value'];
  128. unset($data['value']);
  129. $data += $value;
  130. $list[$k] = $data;
  131. }
  132. // 返回包含数据总数和数据列表的数组
  133. return compact('count', 'list');
  134. }
  135. /**
  136. * 根据组ID和可选的ID、商家ID以及表单数据生成表单对象。
  137. * 此方法主要用于创建或更新数据组的表单,根据不同的场景(是否存在商家ID)和操作类型(创建或更新)构建不同的表单URL。
  138. * 表单字段根据组的字段定义动态生成,支持多种字段类型,包括图像、多图像、分类、标签、选择、复选框、单选框、文件等。
  139. *
  140. * @param int $groupId 组ID,用于确定表单的字段定义。
  141. * @param int|null $id 可选的ID,用于确定是进行更新操作还是创建操作。
  142. * @param int|null $merId 商家ID,用于确定表单的URL路径和某些字段的选项。
  143. * @param array $formData 可选的表单数据数组,用于预填充表单。
  144. * @return Form 返回生成的表单对象,该对象包含了表单的规则、标题和初始数据。
  145. */
  146. public function form(int $groupId, ?int $id = null, ?int $merId = null, array $formData = []): Form
  147. {
  148. // 根据组ID获取组的字段定义
  149. $fields = app()->make(GroupRepository::class)->fields($groupId);
  150. // 根据是否存在商家ID和ID,构建不同的表单URL
  151. if (is_null($merId)) {
  152. $url = is_null($id)
  153. ? Route::buildUrl('groupDataCreate', compact('groupId'))->build()
  154. : Route::buildUrl('groupDataUpdate', compact('groupId', 'id'))->build();
  155. } else {
  156. $url = is_null($id)
  157. ? Route::buildUrl('merchantGroupDataCreate', compact('groupId'))->build()
  158. : Route::buildUrl('merchantGroupDataUpdate', compact('groupId', 'id'))->build();
  159. }
  160. // 创建表单对象并设置表单URL
  161. $form = Elm::createForm($url);
  162. // 初始化表单规则数组
  163. $rules = [];
  164. // 遍历组的字段定义,根据字段类型生成相应的表单规则
  165. foreach ($fields as $field) {
  166. $rule = null;
  167. if ($field['type'] == 'image') {
  168. // 图像字段生成框架图像组件
  169. $rule = Elm::frameImage($field['field'], $field['name'], '/' . config('admin.' . ($merId ? 'merchant' : 'admin') . '_prefix') . '/setting/uploadPicture?field=' . $field['field'] . '&type=1')->icon('el-icon-camera')->modal(['modal' => false])->width('1000px')->height('600px')->props(['footer' => false]);
  170. } else if ($field['type'] == 'images') {
  171. // 多图像字段生成框架图像组件,支持多图
  172. $rule = Elm::frameImage($field['field'], $field['name'], '/' . config('admin.' . ($merId ? 'merchant' : 'admin') . '_prefix') . '/setting/uploadPicture?field=' . $field['field'] . '&type=2')->maxLength(5)->icon('el-icon-camera')->modal(['modal' => false])->width('1000px')->height('600px')->props(['footer' => false]);
  173. } else if ($field['type'] == 'cate') {
  174. // 分类字段生成级联选择器组件,并动态加载分类选项
  175. $rule = Elm::cascader($field['field'], $field['name'])->options(function () use ($id) {
  176. $storeCategoryRepository = app()->make(StoreCategoryRepository::class);
  177. $menus = $storeCategoryRepository->getAllOptions(0, 1, null, 0);
  178. if ($id && isset($menus[$id])) unset($menus[$id]);
  179. $menus = formatCascaderData($menus, 'cate_name');
  180. return $menus;
  181. })->props(['props' => ['checkStrictly' => true, 'emitPath' => false]])->filterable(true)->appendValidate(Elm::validateInt()->required()->message('请选择分类'));
  182. } else if ($field['type'] == 'label') {
  183. // 标签字段生成选择器组件,并动态加载标签选项
  184. $rule = Elm::select($field['field'], $field['name'])->options(function () {
  185. return app()->make(ProductLabelRepository::class)->getSearch(['mer_id' => request()->merId(), 'status' => 1])->column('label_name as label,product_label_id as value');
  186. })->appendValidate(Elm::validateNum()->required()->message('请选择标签'));
  187. } else if (in_array($field['type'], ['select', 'checkbox', 'radio'])) {
  188. // 选择、复选框和单选框字段生成相应的组件,并动态加载选项
  189. $options = array_map(function ($val) {
  190. [$value, $label] = explode(':', $val, 2);
  191. return compact('value', 'label');
  192. }, explode("\n", $field['param']));
  193. $rule = Elm::{$field['type']}($field['field'], $field['name'])->options($options);
  194. if ($field['type'] == 'select') {
  195. $rule->filterable(true)->prop('allow-create', true);
  196. }
  197. } else if ($field['type'] == 'file') {
  198. // 文件字段生成上传组件,并设置上传地址
  199. $rule = Elm::uploadFile($field['field'], $field['name'], rtrim(systemConfig('site_url'), '/') . Route::buildUrl('configUpload', ['field' => 'file'])->build())->headers(['X-Token' => request()->token()]);
  200. } else {
  201. // 其他字段类型直接生成相应的组件
  202. $rule = Elm::{$field['type']}($field['field'], $field['name'], '');
  203. }
  204. // 根据字段的属性设置组件的属性、验证规则和默认值
  205. if ($field['props'] ?? '') {
  206. $props = @parse_ini_string($field['props'], false, INI_SCANNER_TYPED);
  207. if (is_array($props)) {
  208. $rule->props($props);
  209. if (isset($props['required']) && $props['required']) {
  210. $rule->required();
  211. }
  212. if (isset($props['defaultValue'])) {
  213. $rule->value($props['defaultValue']);
  214. }
  215. }
  216. }
  217. // 将生成的表单规则添加到规则数组
  218. $rules[] = $rule;
  219. }
  220. // 添加排序和状态字段的规则
  221. $rules[] = Elm::number('sort', '排序:', 0)->precision(0)->max(99999);
  222. $rules[] = Elm::switches('status', '是否显示:', 1)->activeValue(1)->inactiveValue(0)->inactiveText('关')->activeText('开');
  223. // 设置表单的规则
  224. $form->setRule($rules);
  225. // 设置表单的标题和初始数据
  226. return $form->setTitle(is_null($id) ? '添加数据' : '编辑数据')->formData(array_filter($formData, function ($item) {
  227. return $item !== '' && !is_null($item);
  228. }));
  229. }
  230. /**
  231. * 更新表单数据。
  232. *
  233. * 本函数用于根据给定的组ID、商家ID和表单ID,更新表单的详细数据。
  234. * 它首先通过查询数据库获取当前表单的数据,然后结合新的值更新表单数据,最后调用form方法来处理更新后的表单数据。
  235. *
  236. * @param int $groupId 表单所属的组ID。
  237. * @param int $merId 商家ID,用于确定表单所属的商家。
  238. * @param int $id 表单的唯一ID,用于标识要更新的具体表单。
  239. * @return mixed 返回更新后的表单数据。
  240. */
  241. public function updateForm(int $groupId, int $merId, int $id)
  242. {
  243. // 通过商家ID和组ID查询数据库,获取指定表单的数据,其中group_data_id为表单的唯一标识。
  244. $data = $this->dao->getGroupDataWhere($merId, $groupId)->where('group_data_id', $id)->find()->toArray();
  245. // 从查询结果中提取出表单的值部分。
  246. $value = $data['value'];
  247. // 移除查询结果中的值部分,为后续合并新值做准备。
  248. unset($data['value']);
  249. // 将提取出的值部分合并到查询结果中,以更新表单的数据。
  250. $data += $value;
  251. // 调用form方法,传入更新后的数据,完成表单的更新。
  252. return $this->form($groupId, $id, $merId, $data);
  253. }
  254. /**
  255. * 根据键值和商家ID分组数据
  256. *
  257. * 本函数旨在根据提供的键值和商家ID,从数据库中检索并返回分组的数据。
  258. * 它支持分页查询,每页的数据量可以自定义,默认为10条。
  259. * 如果提供的键值对应的分组不存在,则函数将返回空数组。
  260. *
  261. * @param string $key 分组的键值,用于查找特定的分组ID。
  262. * @param int $merId 商家的ID,用于限定查询的商家范围。
  263. * @param int|null $page 查询的页码,用于分页查询。如果未提供,则默认查询第一页。
  264. * @param int|null $limit 每页显示的数据条数。如果未提供,则默认为10条。
  265. * @return array 返回查询结果,如果找不到对应的分组,则返回空数组。
  266. */
  267. public function groupData(string $key, int $merId, ?int $page = null, ?int $limit = 10)
  268. {
  269. // 通过键值获取分组ID
  270. $make = app()->make(GroupRepository::class);
  271. $groupId = $make->keyById($key);
  272. // 如果找不到对应的分组ID,则直接返回空数组
  273. if (!$groupId) return [];
  274. // 调用DAO层方法,根据商家ID和分组ID进行查询,并支持分页
  275. return $this->dao->getGroupData($merId, $groupId, $page, $limit);
  276. }
  277. /**
  278. * 获取指定键对应的分组数据数量
  279. *
  280. * 本函数通过给定的键值和商家ID,查询并返回对应分组的数据数量。
  281. * 首先,它会尝试根据键值查找分组ID,如果找不到,则不进行后续操作。
  282. * 最后,它会调用dao层的方法,传入商家ID和分组ID,获取数据数量。
  283. *
  284. * @param string $key 分组的键值
  285. * @param int $merId 商家ID
  286. * @return int 分组的数据数量
  287. */
  288. public function getGroupDataCount(string $key, int $merId)
  289. {
  290. /** @var GroupRepository $make */
  291. $make = app()->make(GroupRepository::class);
  292. $groupId = $make->keyById($key);
  293. if (!$groupId) {
  294. return 0;
  295. }
  296. return $this->dao->groupDataCount($merId, $groupId);
  297. }
  298. /**
  299. * 根据ID和商家ID获取数据并解码
  300. *
  301. * 本函数旨在通过给定的ID和商家ID从数据库中检索特定数据,并将该数据的值部分解码为PHP对象。
  302. * 这对于处理存储在数据库中的JSON格式数据特别有用,允许灵活地检索和操作数据。
  303. *
  304. * @param int $id 数据记录的唯一标识符。
  305. * @param int $merId 商家的唯一标识符,用于区分不同商家的数据。
  306. * @return mixed 如果找到数据,则返回解码后的PHP对象;如果未找到数据,则返回null。
  307. */
  308. public function idByData(int $id, int $merId)
  309. {
  310. // 通过ID和商家ID从数据库获取数据
  311. $data = $this->dao->merGet($id, $merId);
  312. // 检查数据是否存在,如果不存在则返回null
  313. if (!$data) return null;
  314. // 解码数据的值部分并返回解码后的对象
  315. return json_decode($data['value']);
  316. }
  317. /**
  318. * 根据键值和商家ID分组获取数据ID
  319. *
  320. * 本函数旨在通过给定的键值和商家ID,从特定的数据组中检索数据ID。
  321. * 它首先尝试根据键值获取组ID,如果找不到对应的组ID,则不进行后续操作。
  322. * 如果找到了组ID,它将利用DAO层来获取对应商家ID和组ID的数据ID列表。
  323. *
  324. * @param string $key 键值,用于查找对应的组ID。
  325. * @param int $merId 商家ID,用于限定数据范围。
  326. * @param int|null $page 分页页码,可选参数,用于指定返回数据的页码。
  327. * @param int|null $limit 每页数据数量,可选参数,默认为10,用于控制返回的数据量。
  328. * @return array 返回数据ID列表,如果找不到组ID,则返回空数组。
  329. */
  330. public function groupDataId(string $key, int $merId, ?int $page = null, ?int $limit = 10)
  331. {
  332. // 通过依赖注入获取GroupRepository实例
  333. $make = app()->make(GroupRepository::class);
  334. // 根据键值查找对应的组ID
  335. $groupId = $make->keyById($key);
  336. // 如果找不到组ID,直接返回空数组
  337. if (!$groupId) return [];
  338. // 调用DAO层方法,根据商家ID、组ID和分页信息获取数据ID列表
  339. return $this->dao->getGroupDataId($merId, $groupId, $page, $limit);
  340. }
  341. public function setGroupData(string $key, $merId, array $data)
  342. {
  343. $groupRepository = app()->make(GroupRepository::class);
  344. $group = $groupRepository->getWhere(['group_key' => $key]);
  345. $fields = array_column($groupRepository->fields($group->group_id), 'field');
  346. $insert = [];
  347. foreach ($data as $k => $item) {
  348. unset($item['group_data_id'], $item['group_mer_id']);
  349. $value = [];
  350. foreach ($fields as $field) {
  351. if (isset($item[$field])) {
  352. $value[$field] = $item[$field];
  353. }
  354. }
  355. $insert[$k] = [
  356. 'value' => json_encode($value, JSON_UNESCAPED_UNICODE),
  357. 'status' => 1,
  358. 'sort' => 0,
  359. 'group_id' => $group->group_id,
  360. 'mer_id' => $merId,
  361. ];
  362. }
  363. $this->dao->selectWhere(['group_id' => $group->group_id])->delete();
  364. if (count($insert)) {
  365. $this->dao->insertAll($insert);
  366. }
  367. }
  368. public function clearGroup(string $key, $merId)
  369. {
  370. $groupRepository = app()->make(GroupRepository::class);
  371. $group = $groupRepository->getWhere(['group_key' => $key]);
  372. $this->dao->selectWhere(['group_id' => $group->group_id, 'mer_id' => $merId])->delete();
  373. }
  374. /**
  375. * 设置分组数据
  376. * 该方法用于更新特定分组的数据项。它首先根据分组键获取分组信息,然后根据提供的数据数组更新或插入新的数据项。
  377. * 如果数据项已存在,旧的数据项将被删除,然后用新的数据项替换。
  378. *
  379. * @param string $key 分组键,用于唯一标识分组。
  380. * @param int $merId 商家ID,用于标识数据所属的商家。
  381. * @param array $data 数据数组,包含要更新或插入的字段及其值。
  382. */
  383. public function reSetDataForm(int $groupId, ?int $id, ?int $merId)
  384. {
  385. $formData = [];
  386. if (is_null($id)) {
  387. $url = is_null($merId)
  388. ? Route::buildUrl('groupDataCreate', compact('groupId'))->build()
  389. : Route::buildUrl('merchantGroupDataCreate', compact('groupId'))->build();
  390. } else {
  391. $data = $this->dao->getSearch([])->find($id);
  392. if (!$data) throw new ValidateException('数据不存在');
  393. $formData = $data->value;
  394. $formData['status'] = $data->status;
  395. $formData['sort'] = $data->sort;
  396. $url = is_null($merId)
  397. ? Route::buildUrl('systemUserSvipTypeUpdate', compact('groupId', 'id'))->build()
  398. : Route::buildUrl('merchantGroupDataUpdate', compact('groupId', 'id'))->build();
  399. }
  400. $form = Elm::createForm($url);
  401. $rules = [
  402. Elm::input('svip_name', '会员名:')->required(),
  403. Elm::radio('svip_type', '会员类别:', '2')
  404. ->setOptions([
  405. ['value' => '1', 'label' => '试用期',],
  406. ['value' => '2', 'label' => '有限期',],
  407. ['value' => '3', 'label' => '永久期',],
  408. ])->control([
  409. [
  410. 'value' => '1',
  411. 'rule' => [
  412. Elm::number('svip_number', '有效期(天):')->required()->min(0),
  413. ]
  414. ],
  415. [
  416. 'value' => '2',
  417. 'rule' => [
  418. Elm::number('svip_number', '有效期(天):')->required()->min(0),
  419. ]
  420. ],
  421. [
  422. 'value' => '3',
  423. 'rule' => [
  424. Elm::input('svip_number1', '有效期(天):', '永久期')->disabled(true)->placeholder('请输入有效期'),
  425. Elm::input('svip_number', '有效期(天):', '永久期')->hiddenStatus(true)->placeholder('请输入有效期'),
  426. ]
  427. ],
  428. ])->appendRule('suffix', [
  429. 'type' => 'div',
  430. 'style' => ['color' => '#999999'],
  431. 'domProps' => [
  432. 'innerHTML' => '试用期每个用户只能购买一次,购买过付费会员之后将不在展示,不可购买',
  433. ]
  434. ]),
  435. Elm::number('cost_price', '原价:')->required(),
  436. Elm::number('price', '优惠价:')->required(),
  437. Elm::number('sort', '排序:'),
  438. Elm::switches('status', '是否显示:')->activeValue(1)->inactiveValue(0)->inactiveText('关')->activeText('开'),
  439. ];
  440. $form->setRule($rules);
  441. if ($formData && $formData['svip_type'] == 3) $formData['svip_number'] = '永久期';
  442. return $form->setTitle(is_null($id) ? '添加' : '编辑')->formData($formData);
  443. }
  444. /**
  445. * 查找组合数关联标签名称
  446. * @param array $fields
  447. * @param array $data
  448. * @return array
  449. *
  450. * @date 2023/09/09
  451. * @author yyw
  452. */
  453. public function handleDataValue(array $fields = [], array $data = [])
  454. {
  455. foreach ($fields as $field) {
  456. switch ($field['type']) {
  457. case 'label': // 标签
  458. $data[$field['type'] . '_name'] = app()->make(ProductLabelRepository::class)->getLabelName($data[$field['field']]);
  459. break;
  460. case 'cate': // 平台分类
  461. $data[$field['type'] . '_name'] = app()->make(StoreCategoryRepository::class)->getCateName($data[$field['field']]);
  462. break;
  463. }
  464. }
  465. return $data;
  466. }
  467. }