bigscreen.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590
  1. import { sldCommonService } from "@/utils/utils";
  2. import moment from "moment";
  3. export default {
  4. namespace: "bigscreen",
  5. state: {
  6. overviewData: {
  7. loading: false,
  8. data: {},
  9. },
  10. portalTrafficData: {
  11. loading: false,
  12. data: {},
  13. options: [
  14. {
  15. label: "近7日",
  16. value: {
  17. startTime:
  18. moment()
  19. .subtract(7, "days")
  20. .format("YYYY-MM-DD") + " 00:00:00",
  21. endTime:
  22. moment()
  23. .subtract(1, "days")
  24. .format("YYYY-MM-DD") + " 23:59:59:999",
  25. },
  26. },
  27. {
  28. label: "近30日",
  29. value: {
  30. startTime:
  31. moment()
  32. .subtract(30, "days")
  33. .format("YYYY-MM-DD") + " 00:00:00",
  34. endTime:
  35. moment()
  36. .subtract(1, "days")
  37. .format("YYYY-MM-DD") + " 23:59:59:999",
  38. },
  39. },
  40. ],
  41. current: "近7日",
  42. },
  43. enquireData: {
  44. loading: false,
  45. data: {},
  46. options: [
  47. {
  48. label: "近7日",
  49. value: {
  50. startTime:
  51. moment()
  52. .subtract(7, "days")
  53. .format("YYYY-MM-DD") + " 00:00:00",
  54. endTime:
  55. moment()
  56. .subtract(1, "days")
  57. .format("YYYY-MM-DD") + " 23:59:59:999",
  58. },
  59. },
  60. {
  61. label: "近30日",
  62. value: {
  63. startTime:
  64. moment()
  65. .subtract(30, "days")
  66. .format("YYYY-MM-DD") + " 00:00:00",
  67. endTime:
  68. moment()
  69. .subtract(1, "days")
  70. .format("YYYY-MM-DD") + " 23:59:59:999",
  71. },
  72. },
  73. ],
  74. current: "近7日",
  75. },
  76. overseasEnquireLocationData: {
  77. loading: false,
  78. data: [],
  79. },
  80. distributorEnquireLocationData: {
  81. loading: false,
  82. data: [],
  83. },
  84. memberAddTrendData: {
  85. loading: false,
  86. data: [],
  87. },
  88. productAddTrendData: {
  89. loading: false,
  90. data: [],
  91. },
  92. searchRankData: {
  93. loading: false,
  94. data: [],
  95. options: [
  96. {
  97. label: "昨日",
  98. value: {
  99. startTime:
  100. moment()
  101. .subtract(1, "days")
  102. .format("YYYY-MM-DD") + " 00:00:00",
  103. endTime:
  104. moment()
  105. .subtract(1, "days")
  106. .format("YYYY-MM-DD") + " 23:59:59:999",
  107. },
  108. },
  109. {
  110. label: "近7日",
  111. value: {
  112. startTime:
  113. moment()
  114. .subtract(7, "days")
  115. .format("YYYY-MM-DD") + " 00:00:00",
  116. endTime:
  117. moment()
  118. .subtract(1, "days")
  119. .format("YYYY-MM-DD") + " 23:59:59:999",
  120. },
  121. },
  122. {
  123. label: "近30日",
  124. value: {
  125. startTime:
  126. moment()
  127. .subtract(30, "days")
  128. .format("YYYY-MM-DD") + " 00:00:00",
  129. endTime:
  130. moment()
  131. .subtract(1, "days")
  132. .format("YYYY-MM-DD") + " 23:59:59:999",
  133. },
  134. },
  135. ],
  136. current: "昨日",
  137. },
  138. storeTrafficData: {
  139. loading: false,
  140. data: [],
  141. options: [
  142. {
  143. label: "昨日",
  144. value: {
  145. startTime:
  146. moment()
  147. .subtract(1, "days")
  148. .format("YYYY-MM-DD") + " 00:00:00",
  149. endTime:
  150. moment()
  151. .subtract(1, "days")
  152. .format("YYYY-MM-DD") + " 23:59:59:999",
  153. },
  154. },
  155. {
  156. label: "近7日",
  157. value: {
  158. startTime:
  159. moment()
  160. .subtract(7, "days")
  161. .format("YYYY-MM-DD") + " 00:00:00",
  162. endTime:
  163. moment()
  164. .subtract(1, "days")
  165. .format("YYYY-MM-DD") + " 23:59:59:999",
  166. },
  167. },
  168. {
  169. label: "近30日",
  170. value: {
  171. startTime:
  172. moment()
  173. .subtract(30, "days")
  174. .format("YYYY-MM-DD") + " 00:00:00",
  175. endTime:
  176. moment()
  177. .subtract(1, "days")
  178. .format("YYYY-MM-DD") + " 23:59:59:999",
  179. },
  180. },
  181. ],
  182. current: "昨日",
  183. },
  184. mapContainerData: {
  185. loading: false,
  186. data: [],
  187. },
  188. orderData: {
  189. loading: false,
  190. data: [],
  191. options: [
  192. {
  193. label: "近7日",
  194. value: {
  195. startTime:
  196. moment()
  197. .subtract(7, "days")
  198. .format("YYYY-MM-DD") + " 00:00:00",
  199. endTime:
  200. moment()
  201. .subtract(1, "days")
  202. .format("YYYY-MM-DD") + " 23:59:59:999",
  203. },
  204. },
  205. {
  206. label: "近30日",
  207. value: {
  208. startTime:
  209. moment()
  210. .subtract(30, "days")
  211. .format("YYYY-MM-DD") + " 00:00:00",
  212. endTime:
  213. moment()
  214. .subtract(1, "days")
  215. .format("YYYY-MM-DD") + " 23:59:59:999",
  216. },
  217. },
  218. ],
  219. current: "近7日",
  220. },
  221. updateTime: "",
  222. },
  223. effects: {
  224. // 平台数据汇总
  225. *load_overview({ payload }, { call, put }) {
  226. yield put({
  227. type: "setOverviewData",
  228. payload: { loading: true },
  229. });
  230. const response = yield call(
  231. sldCommonService,
  232. payload,
  233. "get",
  234. "v3/statistics/screen/analysis/dataSummary"
  235. );
  236. yield put({
  237. type: "setOverviewData",
  238. payload: { data: response.data, loading: false },
  239. });
  240. },
  241. // 门户流量
  242. *load_portal_traffic({ payload }, { call, put, select }) {
  243. const current = yield select(
  244. (state) => state.bigscreen.portalTrafficData.current
  245. );
  246. const options = yield select(
  247. (state) => state.bigscreen.portalTrafficData.options
  248. );
  249. const condition = options.filter((item) => item.label == current)[0]
  250. .value;
  251. payload = { ...payload, ...condition };
  252. yield put({
  253. type: "setPortalTrafficData",
  254. payload: { loading: true },
  255. });
  256. const response = yield call(
  257. sldCommonService,
  258. payload,
  259. "get",
  260. "v3/statistics/screen/analysis/flowTrend"
  261. );
  262. yield put({
  263. type: "setPortalTrafficData",
  264. payload: { data: response.data, loading: false },
  265. });
  266. },
  267. // 询盘概况
  268. *load_enquire_data({ payload }, { call, put, select }) {
  269. const current = yield select(
  270. (state) => state.bigscreen.enquireData.current
  271. );
  272. const options = yield select(
  273. (state) => state.bigscreen.enquireData.options
  274. );
  275. const condition = options.filter((item) => item.label == current)[0]
  276. .value;
  277. payload = { ...payload, ...condition };
  278. yield put({
  279. type: "setEnquireData",
  280. payload: { loading: true },
  281. });
  282. const response = yield call(
  283. sldCommonService,
  284. payload,
  285. "get",
  286. "v3/statistics/screen/analysis/enquiryTrend"
  287. );
  288. yield put({
  289. type: "setEnquireData",
  290. payload: { data: response.data, loading: false },
  291. });
  292. },
  293. // 海外询盘地区分布
  294. *load_overseas_enquire_location({ payload }, { call, put, select }) {
  295. yield put({
  296. type: "setOverseasEnquireLocation",
  297. payload: { loading: true },
  298. });
  299. const response = yield call(
  300. sldCommonService,
  301. payload,
  302. "get",
  303. "v3/statistics/screen/analysis/enquiryDistribution"
  304. );
  305. yield put({
  306. type: "setOverseasEnquireLocation",
  307. payload: { data: response.data, loading: false },
  308. });
  309. },
  310. // 供应链企业地区分布
  311. *load_distributor_enquire_location({ payload }, { call, put, select }) {
  312. yield put({
  313. type: "setDistributorEnquireLocation",
  314. payload: { loading: true },
  315. });
  316. const response = yield call(
  317. sldCommonService,
  318. payload,
  319. "get",
  320. "v3/statistics/screen/analysis/regionDistribution"
  321. );
  322. yield put({
  323. type: "setDistributorEnquireLocation",
  324. payload: { data: response.data, loading: false },
  325. });
  326. },
  327. // 新增会员趋势
  328. *load_add_member_trend({ payload }, { put, call }) {
  329. yield put({
  330. type: "setMemberAddTrendData",
  331. payload: { loading: true },
  332. });
  333. const response = yield call(
  334. sldCommonService,
  335. payload,
  336. "get",
  337. "v3/statistics/screen/analysis/memberTrend"
  338. );
  339. yield put({
  340. type: "setMemberAddTrendData",
  341. payload: { data: response.data, loading: false },
  342. });
  343. },
  344. // 新增商品趋势
  345. *load_add_product_trend({ payload }, { put, call }) {
  346. yield put({
  347. type: "setProductAddTrendData",
  348. payload: { loading: true },
  349. });
  350. const response = yield call(
  351. sldCommonService,
  352. payload,
  353. "get",
  354. "v3/statistics/screen/analysis/goodsTrend"
  355. );
  356. yield put({
  357. type: "setProductAddTrendData",
  358. payload: { data: response.data, loading: false },
  359. });
  360. },
  361. // 门户关键词搜索
  362. *load_search_rank({ payload }, { put, call, select }) {
  363. const current = yield select(
  364. (state) => state.bigscreen.searchRankData.current
  365. );
  366. const options = yield select(
  367. (state) => state.bigscreen.searchRankData.options
  368. );
  369. const condition = options.filter((item) => item.label == current)[0]
  370. .value;
  371. payload = { ...payload, ...condition };
  372. yield put({
  373. type: "setSearchRankData",
  374. payload: { loading: true },
  375. });
  376. const response = yield call(
  377. sldCommonService,
  378. payload,
  379. "get",
  380. "v3/statistics/screen/analysis/searchRank"
  381. );
  382. yield put({
  383. type: "setSearchRankData",
  384. payload: { data: response.data, loading: false },
  385. });
  386. },
  387. // 店铺流量排行
  388. *load_store_traffic({ payload }, { put, call, select }) {
  389. const current = yield select(
  390. (state) => state.bigscreen.storeTrafficData.current
  391. );
  392. const options = yield select(
  393. (state) => state.bigscreen.storeTrafficData.options
  394. );
  395. const condition = options.filter((item) => item.label == current)[0]
  396. .value;
  397. payload = { ...payload, ...condition };
  398. yield put({
  399. type: "setStoreTrafficData",
  400. payload: { loading: true },
  401. });
  402. const response = yield call(
  403. sldCommonService,
  404. payload,
  405. "get",
  406. "v3/statistics/screen/analysis/storeFlowRank"
  407. );
  408. yield put({
  409. type: "setStoreTrafficData",
  410. payload: { data: response.data, loading: false },
  411. });
  412. },
  413. // 世界地图站点数据
  414. *load_world_map({ payload }, { put, call, select }) {
  415. yield put({
  416. type: "setWorldMapData",
  417. payload: { loading: true },
  418. });
  419. const response = yield call(
  420. sldCommonService,
  421. payload,
  422. "get",
  423. "v3/statistics/screen/analysis/memberDistribution"
  424. );
  425. yield put({
  426. type: "setWorldMapData",
  427. payload: { data: response.data, loading: false },
  428. });
  429. },
  430. // 初始化数据
  431. *load_data({ payload }, { put, call, all }) {
  432. // 更新时间
  433. const now = new Date();
  434. const pad = (n) => n.toString().padStart(2, "0");
  435. const currentTime = `${now.getFullYear()}-${pad(
  436. now.getMonth() + 1
  437. )}-${pad(now.getDate())} ${pad(now.getHours())}:${pad(
  438. now.getMinutes()
  439. )}:${pad(now.getSeconds())}`;
  440. yield put({
  441. type: "setUpdateTime",
  442. payload: currentTime,
  443. });
  444. yield all([
  445. put({ type: "load_overview" }),
  446. put({ type: "load_portal_traffic" }),
  447. put({ type: "load_enquire_data" }),
  448. put({ type: "load_overseas_enquire_location" }),
  449. put({ type: "load_distributor_enquire_location" }),
  450. put({ type: "load_add_member_trend" }),
  451. put({ type: "load_add_product_trend" }),
  452. put({ type: "load_search_rank" }),
  453. put({ type: "load_store_traffic" }),
  454. put({ type: "load_world_map" }),
  455. ]);
  456. },
  457. },
  458. reducers: {
  459. setOrderData(state, { payload }) {
  460. return {
  461. ...state,
  462. orderData: {
  463. ...state.orderData,
  464. ...payload,
  465. },
  466. };
  467. },
  468. setWorldMapData(state, { payload }) {
  469. return {
  470. ...state,
  471. mapContainerData: {
  472. ...state.mapContainerData,
  473. ...payload,
  474. },
  475. };
  476. },
  477. setStoreTrafficData(state, { payload }) {
  478. return {
  479. ...state,
  480. storeTrafficData: {
  481. ...state.storeTrafficData,
  482. ...payload,
  483. },
  484. };
  485. },
  486. setUpdateTime(state, { payload }) {
  487. return {
  488. ...state,
  489. updateTime: payload,
  490. };
  491. },
  492. setSearchRankData(state, { payload }) {
  493. return {
  494. ...state,
  495. searchRankData: {
  496. ...state.searchRankData,
  497. ...payload,
  498. },
  499. };
  500. },
  501. setOverviewData(state, { payload }) {
  502. return {
  503. ...state,
  504. overviewData: {
  505. ...state.overviewData,
  506. ...payload,
  507. },
  508. };
  509. },
  510. setPortalTrafficData(state, { payload }) {
  511. return {
  512. ...state,
  513. portalTrafficData: {
  514. ...state.portalTrafficData,
  515. ...payload,
  516. },
  517. };
  518. },
  519. setEnquireData(state, { payload }) {
  520. return {
  521. ...state,
  522. enquireData: {
  523. ...state.enquireData,
  524. ...payload,
  525. },
  526. };
  527. },
  528. setOverseasEnquireLocation(state, { payload }) {
  529. return {
  530. ...state,
  531. overseasEnquireLocationData: {
  532. ...state.overseasEnquireLocationData,
  533. ...payload,
  534. },
  535. };
  536. },
  537. setDistributorEnquireLocation(state, { payload }) {
  538. return {
  539. ...state,
  540. distributorEnquireLocationData: {
  541. ...state.distributorEnquireLocationData,
  542. ...payload,
  543. },
  544. };
  545. },
  546. setMemberAddTrendData(state, { payload }) {
  547. return {
  548. ...state,
  549. memberAddTrendData: {
  550. ...state.memberAddTrendData,
  551. ...payload,
  552. },
  553. };
  554. },
  555. setProductAddTrendData(state, { payload }) {
  556. return {
  557. ...state,
  558. productAddTrendData: {
  559. ...state.productAddTrendData,
  560. ...payload,
  561. },
  562. };
  563. },
  564. },
  565. subscriptions: {
  566. setup({ history }) {
  567. // Subscribe history(url) change, trigger `load` action if pathname is `/`
  568. return history.listen(({ pathname, search }) => {
  569. if (typeof window.ga !== "undefined") {
  570. window.ga("send", "pageview", pathname + search);
  571. }
  572. });
  573. },
  574. },
  575. };