goodsModel.js 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323
  1. /* eslint-disable no-else-return */
  2. /* eslint-disable no-underscore-dangle */
  3. import ListUtil from "../Utils/ListUtil";
  4. export default {
  5. state: {
  6. selectInfos: [],
  7. Classifications: [], // 商户分类列表
  8. classificationId: 0, // 当前操作的商品分类
  9. editGoodsMap: new Map(),
  10. },
  11. actions: ({ model, setState }) => ({
  12. // 商家分类选择商品
  13. changeSelect(list) {
  14. setState({
  15. selectInfos: list,
  16. });
  17. },
  18. // 下架提示
  19. takeOffInfo(callBack) {
  20. const { showDialog } = model("dialogModel");
  21. const { takeOffTips } = model("wordsModel");
  22. showDialog({
  23. bodyText: takeOffTips,
  24. status: "danger",
  25. cancelable: true,
  26. confirmCallback: () => callBack(),
  27. });
  28. },
  29. // 商品上下架
  30. ChangeTakeOff(info) {
  31. const { id } = info;
  32. const { getWordsStr, successText } = model("wordsModel");
  33. const { httpGet } = model("httpModel");
  34. const { success } = model("loadingModel");
  35. return httpGet(
  36. "/goods/take",
  37. {
  38. id,
  39. },
  40. true
  41. )
  42. .then(() => {
  43. return httpGet(`/goods/get/${id}`, {}, true);
  44. })
  45. .then(res => {
  46. success(
  47. getWordsStr(res.takeOff ? "takeOff" : "takeUp") + successText
  48. );
  49. return Promise.resolve(res);
  50. });
  51. },
  52. // 关闭分类提示
  53. clossClassTip(callBack) {
  54. const { showDialog } = model("dialogModel");
  55. const { systemClassTips1 } = model("wordsModel");
  56. showDialog({
  57. bodyText: systemClassTips1,
  58. status: "danger",
  59. cancelable: true,
  60. confirmCallback: () => callBack(),
  61. });
  62. },
  63. saveInfo(info, noTip) {
  64. const { saveSuccess, editSuccess } = model("wordsModel");
  65. const { httpPost } = model("httpModel");
  66. const { success, loading } = model("loadingModel");
  67. loading();
  68. return httpPost(
  69. "/classification/save",
  70. info,
  71. { body: "json" },
  72. true
  73. ).then(res => {
  74. if (!noTip) {
  75. success(info.id ? editSuccess : saveSuccess);
  76. }
  77. return Promise.resolve(res);
  78. });
  79. },
  80. // 移除分类商品
  81. removeClassGoods(classificationId, goodId, callBack) {
  82. const { showDialog } = model("dialogModel");
  83. const { removeTips, editSuccess } = model("wordsModel");
  84. const { httpGet } = model("httpModel");
  85. const { success, loading } = model("loadingModel");
  86. loading();
  87. showDialog({
  88. bodyText: removeTips,
  89. status: "danger",
  90. cancelable: true,
  91. confirmCallback: () => {
  92. httpGet(
  93. "/classification/delGoods",
  94. {
  95. classificationId,
  96. goodId,
  97. },
  98. true
  99. ).then(res => {
  100. success(editSuccess);
  101. callBack(res);
  102. });
  103. },
  104. });
  105. },
  106. // 获取商品分类
  107. getGoodsClassParent(goodsId) {
  108. const { editGoodsMap } = model();
  109. if (goodsId && editGoodsMap.has(goodsId)) {
  110. const list = editGoodsMap.get(goodsId).filter(item => {
  111. return !item.parent;
  112. });
  113. const dataMap = new Map();
  114. list.forEach(item => {
  115. dataMap.set(item.id, item);
  116. });
  117. console.log(dataMap);
  118. return Promise.resolve(dataMap);
  119. } else if (goodsId !== "NEW") {
  120. const { httpGet } = model("httpModel");
  121. return httpGet(
  122. "/goodsSpecification/parent",
  123. {
  124. goodsId,
  125. },
  126. true
  127. ).then(res => {
  128. const dataMap = new Map();
  129. res.forEach(item => {
  130. dataMap.set(item.id, item);
  131. });
  132. return Promise.resolve(dataMap);
  133. });
  134. } else {
  135. return Promise.resolve(new Map());
  136. }
  137. },
  138. // 添加修改的分类
  139. setGoodsClassMap(key, map) {
  140. console.log(map);
  141. let list = [];
  142. Array.from(map.values()).forEach(item => {
  143. if (item.name) {
  144. list.push(item);
  145. item.children = item.children.filter(child => {
  146. return child.name && child.amount && !item.isNew;
  147. });
  148. item.children = item.children.map(child => {
  149. return {
  150. ...child,
  151. edit: false,
  152. };
  153. });
  154. list.push(item.children);
  155. }
  156. });
  157. list = list.flat();
  158. list = list.filter(item => {
  159. return (
  160. item.name && (!item.parent || item.amount.toString()) && !item.isNew
  161. );
  162. });
  163. list = list.map(item => {
  164. return {
  165. ...item,
  166. edit: false,
  167. };
  168. });
  169. const { editGoodsMap } = model();
  170. editGoodsMap.set(key, list);
  171. setState({ editGoodsMap });
  172. },
  173. removeGoodsClassMap() {
  174. setState({ editGoodsMap: new Map() });
  175. },
  176. // 添加分类商品
  177. addClassGoods(info) {
  178. // const { successText } = model("wordsModel");
  179. const { httpPost } = model("httpModel");
  180. return httpPost(
  181. "/goodsSpecification/save",
  182. info,
  183. {
  184. body: "json",
  185. },
  186. true
  187. ).then(res => {
  188. return Promise.resolve(res);
  189. });
  190. },
  191. // 移除商品分类
  192. removeCLass(info, callBack) {
  193. const { showDialog } = model("dialogModel");
  194. const { removeTips, editSuccess } = model("wordsModel");
  195. const { httpPost } = model("httpModel");
  196. const { success, loading } = model("loadingModel");
  197. loading();
  198. showDialog({
  199. bodyText: removeTips,
  200. status: "danger",
  201. cancelable: true,
  202. confirmCallback: () => {
  203. const goods = new ListUtil(info.goodsIds);
  204. if (goods.length > 0) {
  205. showDialog({
  206. bodyText: "该分类下有商品,暂不可删除该商品分类",
  207. status: "danger",
  208. });
  209. } else {
  210. httpPost(`/classification/del/${info.id}`, {}, {}, true).then(
  211. res => {
  212. success(editSuccess);
  213. callBack(res);
  214. }
  215. );
  216. }
  217. },
  218. });
  219. },
  220. // 商品分类添加商品
  221. addClassification(selectId, goodsId) {
  222. const { httpGet } = model("httpModel");
  223. return httpGet(
  224. "/classification/saveGoods",
  225. {
  226. classificationId: selectId,
  227. string: goodsId,
  228. },
  229. { body: "json" }
  230. );
  231. },
  232. // 将当前选中的classId存入以便更好的刷新页面3
  233. setClassificationId(id) {
  234. setState({
  235. classificationId: id,
  236. });
  237. },
  238. // 获取我的全部商品分类
  239. getMyClassification() {
  240. const { httpGet } = model("httpModel");
  241. return httpGet("/classification/my", {}, true).then(res => {
  242. res = res.sort((a, b) => {
  243. return b.type || 0 - a.type || 0;
  244. });
  245. setState({ Classifications: res });
  246. return Promise.resolve(res);
  247. });
  248. },
  249. // 商品规格排序
  250. sortClassification(list) {
  251. const _list = [...list];
  252. let backList = [];
  253. const parents = _list.filter(item => {
  254. return !item.parent;
  255. });
  256. parents.forEach(item => {
  257. backList.push(item);
  258. const _chidrens = _list.filter(_f => {
  259. return _f.parent === item.id;
  260. });
  261. backList = backList.concat(_chidrens);
  262. });
  263. return backList;
  264. },
  265. // 批量保存规格
  266. saveClassByList(list, goodsId) {
  267. const { httpPost } = model("httpModel");
  268. const saveList = [];
  269. list.forEach(item => {
  270. const saveItem = { ...item };
  271. if (saveItem.children) {
  272. saveItem.children = saveItem.children.map(child => {
  273. return {
  274. name: child.name,
  275. amount: child.amount,
  276. goodsId,
  277. };
  278. });
  279. delete saveItem.edit;
  280. delete saveItem.childIndex;
  281. if (saveItem.id < 0) {
  282. delete saveItem.id;
  283. }
  284. saveList.push(saveItem);
  285. } else if (saveItem.id || saveItem.parent > 0) {
  286. delete saveItem.edit;
  287. delete saveItem.childIndex;
  288. if (saveItem.id < 0) {
  289. delete saveItem.id;
  290. }
  291. saveList.push(saveItem);
  292. }
  293. });
  294. console.log(saveList);
  295. if (saveList.length > 0) {
  296. return httpPost(
  297. "/goodsSpecification/saveSpecs",
  298. {
  299. spec: JSON.stringify(
  300. saveList.map(item => {
  301. return { ...item, goodsId };
  302. })
  303. ),
  304. },
  305. {},
  306. true
  307. );
  308. } else {
  309. return Promise.resolve();
  310. }
  311. },
  312. }),
  313. };