Goodsattr.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399
  1. <?php
  2. /**
  3. * Niushop商城系统 - 团队十年电商经验汇集巨献!
  4. * =========================================================
  5. * Copy right 2019-2029 山西牛酷信息科技有限公司, 保留所有权利。
  6. * ----------------------------------------------
  7. * 官方网址: https://www.niushop.com.cn
  8. * 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和使用。
  9. * 任何企业和个人不允许对程序代码以任何形式任何目的再发布。
  10. * =========================================================
  11. */
  12. namespace app\admin\controller;
  13. use app\model\goods\GoodsAttribute as GoodsAttributeModel;
  14. use app\model\goods\GoodsBrand as GoodsBrandModel;
  15. /**
  16. * 商品类型/属性管理 控制器
  17. */
  18. class Goodsattr extends BaseAdmin
  19. {
  20. /**
  21. * 商品类型列表
  22. */
  23. public function lists()
  24. {
  25. if (request()->isAjax()) {
  26. $page_index = input('page', 1);
  27. $page_size = input('page_size', PAGE_LIST_ROWS);
  28. $search_keys = input('search_keys', "");
  29. $condition = [];
  30. $condition[] = [ 'site_id', '=', 0 ];
  31. if (!empty($search_keys)) {
  32. $condition[] = [ 'class_name', 'like', '%' . $search_keys . '%' ];
  33. }
  34. $goods_attr_model = new GoodsAttributeModel();
  35. $list = $goods_attr_model->getAttrClassPageList($condition, $page_index, $page_size);
  36. return $list;
  37. } else {
  38. $this->forthMenu();
  39. return $this->fetch('goodsattr/lists');
  40. }
  41. }
  42. /**
  43. * 商品类型添加
  44. */
  45. public function addAttr()
  46. {
  47. if (request()->isAjax()) {
  48. $class_name = input('class_name', '');
  49. $sort = input('sort', 0);
  50. $data = [
  51. 'class_name' => $class_name,
  52. 'sort' => $sort
  53. ];
  54. $goods_attr_model = new GoodsAttributeModel();
  55. $res = $goods_attr_model->addAttrClass($data);
  56. $this->addLog("添加商品类型:".$class_name);
  57. return $res;
  58. }
  59. }
  60. /**
  61. * 商品类型编辑
  62. */
  63. public function editAttr()
  64. {
  65. $goods_attr_model = new GoodsAttributeModel();
  66. if (request()->isAjax()) {
  67. $class_id = input("class_id", 0);
  68. $class_name = input('class_name', '');
  69. $sort = input('sort', 0);
  70. $data = [
  71. 'class_id' => $class_id,
  72. 'class_name' => $class_name,
  73. 'sort' => $sort
  74. ];
  75. $this->addLog("编辑商品类型:".$class_name);
  76. $res = $goods_attr_model->editAttrClass($data);
  77. return $res;
  78. } else {
  79. $class_id = input("class_id", 0);
  80. $this->assign("class_id", $class_id);
  81. //商品类型信息
  82. $attr_class_info = $goods_attr_model->getAttrClassInfo([ [ 'class_id', '=', $class_id ] ]);
  83. $attr_class_info = $attr_class_info['data'];
  84. $this->assign("attr_class_info", $attr_class_info);
  85. //商品类型关联品牌
  86. $attr_class_brand_list = $goods_attr_model->getAttrClassBrandList([ [ 'ngacb.attr_class_id', '=', $class_id ] ]);
  87. $attr_class_brand_list = $attr_class_brand_list['data'];
  88. $this->assign("attr_class_brand_list", $attr_class_brand_list);
  89. return $this->fetch('goodsattr/edit_attr');
  90. }
  91. }
  92. /**
  93. * 修改商品类型排序
  94. */
  95. public function modifySort()
  96. {
  97. if (request()->isAjax()) {
  98. $sort = input('sort', 0);
  99. $class_id = input('class_id', 0);
  100. $goods_attr_model = new GoodsAttributeModel();
  101. return $goods_attr_model->modifyAttrClassSort($sort, $class_id);
  102. }
  103. }
  104. /**
  105. * 商品类型删除
  106. */
  107. public function deleteAttr()
  108. {
  109. if (request()->isAjax()) {
  110. $class_id = input("class_id", 0);
  111. $goods_attr_model = new GoodsAttributeModel();
  112. $result = $goods_attr_model->deleteAttrClass($class_id);
  113. $this->addLog("删除商品类型id:".$class_id);
  114. return $result;
  115. }
  116. }
  117. /**
  118. * 添加商品类型关联品牌
  119. */
  120. public function addAttrClassBrand()
  121. {
  122. if (request()->isAjax()) {
  123. $attr_class_id = input('attr_class_id', 0);// 商品类型id
  124. $brand_id_arr = input('brand_id_arr', "");
  125. if (!empty($brand_id_arr)) {
  126. $brand_id_arr = explode(",", $brand_id_arr);
  127. $goods_attr_model = new GoodsAttributeModel();
  128. $data = [];
  129. foreach ($brand_id_arr as $k => $v) {
  130. $item = [
  131. 'attr_class_id' => $attr_class_id,
  132. 'brand_id' => $v
  133. ];
  134. $data[] = $item;
  135. }
  136. return $goods_attr_model->addAttrClassBrand($attr_class_id, $data);
  137. } else {
  138. return error(-1, '缺少brand_id_arr');
  139. }
  140. }
  141. }
  142. /**
  143. * 删除商品类型关联品牌
  144. */
  145. public function deleteAttrClassBrand()
  146. {
  147. if (request()->isAjax()) {
  148. $attr_class_id = input('attr_class_id', 0);// 商品类型id
  149. $id_arr = input('id_arr', 0);
  150. $goods_attr_model = new GoodsAttributeModel();
  151. return $goods_attr_model->deleteAttrClassBrand($attr_class_id, $id_arr);
  152. }
  153. }
  154. /**
  155. * 获取商品品牌分页列表,关联品牌用
  156. * @return \multitype
  157. */
  158. public function getBrandPageList()
  159. {
  160. if (request()->isAjax()) {
  161. $page_index = input('page', 1);
  162. $page_size = input('limit', PAGE_LIST_ROWS);
  163. $condition = [ [ 'ngb.site_id', '=', 0 ] ];
  164. $goods_brand_model = new GoodsBrandModel();
  165. $list = $goods_brand_model->getBrandPageList($condition, $page_index, $page_size, "ngb.create_time desc", 'ngb.brand_id,ngb.brand_name');
  166. return $list;
  167. }
  168. }
  169. /**
  170. * 添加商品属性
  171. */
  172. public function addAttribute()
  173. {
  174. if (request()->isAjax()) {
  175. $attr_name = input('attr_name', "");// 属性名称
  176. $attr_class_id = input('attr_class_id', 0);// 商品类型id
  177. $attr_class_name = input('attr_class_name', "");// 商品类型名称
  178. $sort = input('sort', 0);// 属性排序号
  179. $is_query = input('is_query', 0);// 是否参与筛选
  180. $is_spec = input('is_spec', 0);// 是否是规格属性
  181. $attr_value_list = input('attr_value_list', "");// 属性值列表('',''隔开注意键值对)
  182. $attr_type = input('attr_type', 0);// 属性类型 (1.单选 2.多选3. 输入 注意输入不参与筛选)
  183. $site_id = 0;// 站点id
  184. $site_name = '';
  185. $data = [
  186. 'attr_name' => $attr_name,
  187. 'attr_class_id' => $attr_class_id,
  188. 'attr_class_name' => $attr_class_name,
  189. 'sort' => $sort,
  190. 'is_query' => $is_query,
  191. 'is_spec' => $is_spec,
  192. 'attr_value_list' => $attr_value_list,
  193. 'attr_type' => $attr_type,
  194. 'site_id' => $site_id,
  195. 'site_name' => $site_name
  196. ];
  197. $goods_attr_model = new GoodsAttributeModel();
  198. return $goods_attr_model->addAttribute($attr_class_id, $data);
  199. }
  200. }
  201. /**
  202. * 修改商品属性
  203. */
  204. public function editAttribute()
  205. {
  206. if (request()->isAjax()) {
  207. $attr_id = input('attr_id', "");// 属性id
  208. $attr_name = input('attr_name', "");// 属性名称
  209. $attr_class_id = input('attr_class_id', 0);// 商品类型id
  210. $attr_class_name = input('attr_class_name', "");// 商品类型名称
  211. $sort = input('sort', 0);// 属性排序号
  212. $is_query = input('is_query', 0);// 是否参与筛选
  213. $is_spec = input('is_spec', 0);// 是否是规格属性
  214. $attr_value_list = input('attr_value_list', "");// 属性值列表('',''隔开注意键值对)
  215. $attr_type = input('attr_type', 0);// 属性类型 (1.单选 2.多选3. 输入 注意输入不参与筛选)
  216. $site_id = input('site_id', 0);// 站点id
  217. $data = [
  218. 'attr_id' => $attr_id,
  219. 'attr_name' => $attr_name,
  220. 'attr_class_id' => $attr_class_id,
  221. 'attr_class_name' => $attr_class_name,
  222. 'sort' => $sort,
  223. 'is_query' => $is_query,
  224. 'is_spec' => $is_spec,
  225. 'attr_value_list' => $attr_value_list,
  226. 'attr_type' => $attr_type,
  227. 'site_id' => $site_id
  228. ];
  229. $goods_attr_model = new GoodsAttributeModel();
  230. return $goods_attr_model->editAttribute($attr_class_id, $data);
  231. }
  232. }
  233. /**
  234. * 删除属性、属性值
  235. * @return \multitype
  236. */
  237. public function deleteAttribute()
  238. {
  239. if (request()->isAjax()) {
  240. $attr_class_id = input('attr_class_id', 0);// 商品类型id
  241. $attr_id = input('attr_id', 0);// 属性id
  242. $goods_attr_model = new GoodsAttributeModel();
  243. $res = $goods_attr_model->deleteAttribute($attr_class_id, $attr_id);
  244. return $res;
  245. }
  246. }
  247. /**
  248. * 获取属性、属性值详情
  249. * @return \multitype
  250. */
  251. public function getAttributeDetail()
  252. {
  253. if (request()->isAjax()) {
  254. $attr_class_id = input('attr_class_id', 0);// 商品类型id
  255. $attr_id = input('attr_id', 0);// 属性id
  256. $goods_attr_model = new GoodsAttributeModel();
  257. $attr_info = $goods_attr_model->getAttributeInfo([ [ 'attr_class_id', '=', $attr_class_id ], [ 'attr_id', '=', $attr_id ] ]);
  258. $attr_info = $attr_info['data'];
  259. if (!empty($attr_info)) {
  260. $attr_value_list = $goods_attr_model->getAttributeValueList([ [ 'attr_class_id', '=', $attr_class_id ], [ 'attr_id', '=', $attr_id ] ]);
  261. $attr_value_list = $attr_value_list['data'];
  262. $attr_info['value'] = $attr_value_list;
  263. return success(0, '', $attr_info);
  264. } else {
  265. return error(-1, "未查询到属性信息");
  266. }
  267. }
  268. }
  269. /**
  270. * 获取商品属性列表
  271. * @return \multitype
  272. */
  273. public function getAttributeList()
  274. {
  275. if (request()->isAjax()) {
  276. $attr_class_id = input('attr_class_id', 0);// 商品类型id
  277. $goods_attr_model = new GoodsAttributeModel();
  278. return $goods_attr_model->getAttributeList([ [ 'attr_class_id', '=', $attr_class_id ] ]);
  279. }
  280. }
  281. /**
  282. * 添加属性值
  283. * @return \multitype
  284. */
  285. public function addAttributeValue()
  286. {
  287. if (request()->isAjax()) {
  288. $attr_class_id = input('attr_class_id', 0);// 商品类型id
  289. $value = input('value', "");
  290. if (!empty($value)) {
  291. $value = json_decode($value, true);
  292. $data = [];
  293. foreach ($value as $k => $v) {
  294. $item = [
  295. 'attr_value_name' => $v['attr_value_name'],
  296. 'attr_id' => $v['attr_id'],
  297. 'attr_class_id' => $v['attr_class_id'],
  298. 'sort' => $v['sort']
  299. ];
  300. $data[] = $item;
  301. }
  302. $goods_attr_model = new GoodsAttributeModel();
  303. $res = $goods_attr_model->addAttributeValue($attr_class_id, $data);
  304. return $res;
  305. }
  306. } else {
  307. return error(-1, "缺少value");
  308. }
  309. }
  310. /**
  311. * 修改商品属性值
  312. */
  313. public function editAttributeValue()
  314. {
  315. if (request()->isAjax()) {
  316. $attr_class_id = input('attr_class_id', 0);// 商品类型id
  317. $data = input('data', "");// 属性值数组对象
  318. if (!empty($data)) {
  319. $data = json_decode($data, true);
  320. $goods_attr_model = new GoodsAttributeModel();
  321. foreach ($data as $k => $v) {
  322. $item = [
  323. 'attr_value_id' => $v['attr_value_id'],
  324. 'attr_value_name' => $v['attr_value_name'],
  325. 'attr_id' => $v['attr_id'],
  326. 'attr_class_id' => $v['attr_class_id'],
  327. 'sort' => $v['sort'],
  328. ];
  329. $res = $goods_attr_model->editAttributeValue($attr_class_id, $item);
  330. }
  331. return $res;
  332. } else {
  333. return error(-1, "缺少data");
  334. }
  335. }
  336. }
  337. /**
  338. * 删除属性值
  339. * @return \multitype
  340. */
  341. public function deleteAttributeValue()
  342. {
  343. if (request()->isAjax()) {
  344. $attr_class_id = input('attr_class_id', 0);// 商品类型id
  345. $attr_value_id_arr = input('attr_value_id_arr', 0);
  346. $goods_attr_model = new GoodsAttributeModel();
  347. $res = $goods_attr_model->deleteAttributeValue($attr_class_id, [ [ 'attr_value_id', 'in', $attr_value_id_arr ] ]);
  348. return $res;
  349. }
  350. }
  351. /**
  352. * 修改商品属性站点id
  353. */
  354. public function modifyAttributeSite()
  355. {
  356. if (request()->isAjax()) {
  357. $attr_class_id = input('attr_class_id', 0);// 商品类型id
  358. $attr_id = input('attr_id', 0);// 属性id
  359. $goods_attr_model = new GoodsAttributeModel();
  360. return $goods_attr_model->modifyAttributeSite(0, $attr_class_id, $attr_id);
  361. }
  362. }
  363. }