login.js 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. import { routerRedux } from 'dva/router';
  2. import { getFakeCaptcha } from '@/services/api';
  3. import { setAuthority } from '@/utils/authority';
  4. import { getPageQuery, failTip, sldCommonService,sldComLanguage } from '@/utils/utils';
  5. import { reloadAuthorized } from '@/utils/Authorized';
  6. import { apiUrl } from '@/utils/sldconfig';
  7. export default {
  8. namespace: 'login',
  9. state: {
  10. status: undefined,
  11. },
  12. effects: {
  13. * login({ payload, callback }, { call, put }) {
  14. //登录
  15. const response = yield call(sldCommonService, payload, 'post', 'v3/sellerLogin/oauth/token');
  16. // Login successfully
  17. if(response.state == 267){
  18. let cur_top_nav = ['apply'];//顶部菜单
  19. let cur_top_nav_info = [{
  20. top_nav: 'apply',
  21. name: `${sldComLanguage('商户入驻')}`,
  22. left_icon: require('../assets/nav/store.png'),
  23. path: '/apply/settled_protocol',
  24. }];//顶部菜单详细信息
  25. if (response.data.resourceList.length > 0) {
  26. localStorage.setItem('sld_menu_data', JSON.stringify(response.data.resourceList));
  27. let sld_all_routes = [];//所有页面的路由
  28. response.data.resourceList.map(item=>{
  29. item.children.map(child=>{
  30. sld_all_routes.push(child.frontPath)
  31. })
  32. })
  33. localStorage.setItem('sld_all_routes', JSON.stringify(sld_all_routes));
  34. }
  35. localStorage.setItem('cur_top_nav', JSON.stringify(cur_top_nav));
  36. localStorage.setItem('cur_top_nav_info', JSON.stringify(cur_top_nav_info));
  37. localStorage.setItem('vendorId',response.data.vendorId);
  38. localStorage.setItem('vendorMobile',response.data.vendorMobile);
  39. }
  40. if (callback) callback(response);
  41. let cur_top_nav = [];//顶部菜单
  42. let cur_top_nav_info = [];//顶部菜单详细信息
  43. if (response.state === 200) {
  44. localStorage.setItem('storeId',response.data.storeId);
  45. localStorage.setItem('vendorId',response.data.vendorId);
  46. localStorage.setItem('vendorMobile',response.data.vendorMobile);
  47. localStorage.setItem('isStoreAdmin',response.data.isStoreAdmin);
  48. if (response.data.resourceList.length > 0) {
  49. localStorage.setItem('sld_menu_data', JSON.stringify(response.data.resourceList));
  50. let sld_all_routes = [];//所有页面的路由
  51. response.data.resourceList.map(item=>{
  52. item.children.map(child=>{
  53. sld_all_routes.push(child.frontPath)
  54. })
  55. })
  56. localStorage.setItem('sld_all_routes', JSON.stringify(sld_all_routes));
  57. let tmp_data = response.data.resourceList;
  58. for (let i in tmp_data) {
  59. let split_first = tmp_data[i].frontPath.split('/');
  60. let target = split_first[1];
  61. if (cur_top_nav.indexOf(target) == -1) {
  62. let target_data = {};
  63. target_data.top_nav = target;
  64. target_data.path = tmp_data[i].children[0].frontPath;
  65. if (target == 'basic') {
  66. target_data.name = '概况';
  67. target_data.left_icon = require('../assets/nav/basic.png');
  68. } else if (target == 'goods') {
  69. target_data.name = '商品';
  70. target_data.left_icon = require('../assets/nav/goods.png');
  71. } else if (target == 'order') {
  72. target_data.name = '询盘';
  73. target_data.left_icon = require('../assets/nav/order.png');
  74. } else if (target == 'store') {
  75. target_data.name = '店铺';
  76. target_data.left_icon = require('../assets/nav/store.png');
  77. }
  78. // else if (target == 'bill') {
  79. // target_data.name = '结算';
  80. // target_data.left_icon = require('../assets/nav/bill.png');
  81. // } else if (target == 'point') {
  82. // target_data.name = '积分商城';
  83. // target_data.left_icon = require('../assets/nav/point.png');
  84. // } else if (target == 'im') {
  85. // target_data.name = '客服';
  86. // target_data.left_icon = require('../assets/nav/point.png');
  87. // } else if (target == 'spreader') {
  88. // target_data.name = '推手';
  89. // target_data.left_icon = require('../assets/nav/spreader.png');
  90. // }
  91. else if (target == 'statistics') {
  92. target_data.name = '统计';
  93. target_data.left_icon = require('../assets/nav/statistics.png');
  94. }
  95. // else if (target == 'marketing') {
  96. // target_data.name = '应用';
  97. // target_data.left_icon = require('../assets/nav/marketing.png');
  98. // }
  99. cur_top_nav.push(target);
  100. cur_top_nav_info.push(target_data);
  101. }
  102. }
  103. localStorage.setItem('cur_top_nav', JSON.stringify(cur_top_nav));
  104. localStorage.setItem('cur_top_nav_info', JSON.stringify(cur_top_nav_info));
  105. } else {
  106. failTip(`${sldComLanguage('抱歉,该账号未授予权限,请先授予权限~')}`);
  107. return false;
  108. }
  109. if (callback) callback(response);
  110. reloadAuthorized();
  111. const urlParams = new URL(window.location.href);
  112. const params = getPageQuery();
  113. let { redirect } = params;
  114. let all_routes = JSON.parse(localStorage.sld_all_routes);
  115. //如果只有客服得权限,则直接跳转到客服页面
  116. if(cur_top_nav_info.length == 1 && cur_top_nav_info[0].top_nav == 'im'){
  117. window.location.href = apiUrl+'im/';
  118. return false;
  119. }
  120. if (redirect) {
  121. //如果上次路由是入驻的话,需要进入已有路由的第一个页面
  122. if(redirect.indexOf('/apply')>-1){
  123. window.location.href = JSON.parse(localStorage.sld_all_routes)[0];
  124. return false;
  125. }
  126. const redirectUrlParams = new URL(redirect);
  127. if (redirectUrlParams.origin === urlParams.origin) {
  128. redirect = redirect.substr(urlParams.origin.length);
  129. if (redirect.match(/^\/.*#/)) {
  130. redirect = redirect.substr(redirect.indexOf('#') + 1);
  131. }
  132. } else {
  133. window.location.href = redirect;
  134. return;
  135. }
  136. }else{
  137. yield put(routerRedux.replace(all_routes[0]));
  138. return;
  139. }
  140. //如果redirect在用户拥有的路由内,则跳转,否则跳转第一个页面
  141. let contain_redirect_flag = false;
  142. for(let i= 0;i<all_routes.length;i++){
  143. if(redirect.indexOf(all_routes[i])>-1){
  144. contain_redirect_flag = true;
  145. break;
  146. }
  147. }
  148. if(!contain_redirect_flag){
  149. redirect = all_routes[0]
  150. }
  151. yield put(routerRedux.replace(redirect));
  152. }
  153. },
  154. * get_login_img({ payload, callback }, { call }) {
  155. const response = yield call(sldCommonService, payload, 'get', 'v3/system/front/setting/getSettings?names=main_user_center_logo');
  156. if (callback) callback(response);
  157. },
  158. //logo获取的原始方法
  159. * get_login_out_img({ payload, callback }, { call }) {
  160. const response = yield call(sldCommonService, payload, 'get', 'v3/system/seller/setting/getStoreSetting');
  161. if (callback) callback(response);
  162. },
  163. * register({ payload, callback }, { call }) {
  164. const response = yield call(sldCommonService, payload, 'post', 'v3/seller/seller/vendor/register');
  165. if(response.state == 267){
  166. let cur_top_nav = ['apply'];//顶部菜单
  167. let cur_top_nav_info = [{
  168. top_nav: 'apply',
  169. name: `${sldComLanguage('商户入驻')}`,
  170. left_icon: require('../assets/nav/store.png'),
  171. path: '/apply/settled_protocol',
  172. }];//顶部菜单详细信息
  173. if (response.data.resourceList.length > 0) {
  174. localStorage.setItem('sld_menu_data', JSON.stringify(response.data.resourceList));
  175. let sld_all_routes = [];//所有页面的路由
  176. response.data.resourceList.map(item=>{
  177. item.children.map(child=>{
  178. sld_all_routes.push(child.frontPath)
  179. })
  180. })
  181. localStorage.setItem('sld_all_routes', JSON.stringify(sld_all_routes));
  182. }
  183. localStorage.setItem('cur_top_nav', JSON.stringify(cur_top_nav));
  184. localStorage.setItem('cur_top_nav_info', JSON.stringify(cur_top_nav_info));
  185. }
  186. if (callback) callback(response);
  187. },
  188. * lookForPwd({ payload, callback }, { call }) {
  189. const response = yield call(sldCommonService, payload, 'post', 'v3/seller/seller/vendor/retrievePwd');
  190. if (callback) callback(response);
  191. },
  192. * getCaptcha({ payload }, { call }) {
  193. yield call(getFakeCaptcha, payload);
  194. },
  195. },
  196. reducers: {
  197. changeLoginStatus(state, { payload }) {
  198. setAuthority(payload.currentAuthority);
  199. return {
  200. ...state,
  201. status: payload.status,
  202. type: payload.type,
  203. };
  204. },
  205. },
  206. };