main.ts 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278
  1. import { StoreOptions } from 'vuex'
  2. import Vue from 'vue'
  3. import {
  4. getHomeHot,
  5. getHomeActivity,
  6. doSearchDocs,
  7. getMyLibList,
  8. getDetails,
  9. getShow,
  10. getDown,
  11. getListDetail,
  12. getRemove,
  13. getAdd,
  14. getCoin,
  15. getShare,
  16. getDocPay,
  17. getIndexTags,
  18. getAccountInfo,
  19. getUserID
  20. } from '@/api/main'
  21. interface InterfaceStore<S> extends StoreOptions<S> {
  22. namespaced?: boolean;
  23. }
  24. type APIStructure = Record<string, any>;
  25. type modulesOption = InterfaceStore<any>;
  26. function recoveryPageData (key: string, defaultValues = {}) {
  27. return sessionStorage.getItem(key) ? JSON.parse(sessionStorage.getItem(key) || '') : defaultValues
  28. }
  29. function checkType (type: string | number) {
  30. let typeStr = type
  31. switch (type) {
  32. case 1: {
  33. typeStr = 'word'
  34. break
  35. }
  36. case 2: {
  37. typeStr = 'pdf'
  38. break
  39. }
  40. case 3: {
  41. typeStr = 'excel'
  42. break
  43. }
  44. case 4: {
  45. typeStr = 'ppt'
  46. break
  47. }
  48. case 'doc': {
  49. typeStr = 'word'
  50. break
  51. }
  52. case 'xls': {
  53. typeStr = 'excel'
  54. break
  55. }
  56. }
  57. return typeStr
  58. }
  59. function formatData (v: APIStructure) {
  60. return {
  61. img: v?.docImg,
  62. type: checkType(v?.docFileType),
  63. id: v.docId,
  64. title: v?.docName || v?.docTitle,
  65. money: v.price,
  66. size: v?.docFileSize,
  67. page: v?.docPageSize,
  68. down: v?.downTimes,
  69. contribution: v?.sourceUserId
  70. }
  71. }
  72. const modulesOption: modulesOption = {
  73. namespaced: true,
  74. state: {
  75. // 页面数据缓存(用于跳出页面返回时恢复)
  76. homePageData: recoveryPageData('jy-docs-home-page'),
  77. searchPageData: recoveryPageData('jy-docs-search-page'),
  78. userLib: recoveryPageData('jy-docs-user-lib'),
  79. loginInfo: {}
  80. },
  81. mutations: {
  82. // 保存首页数据
  83. saveHomeData (state, data) {
  84. for (const key in data) {
  85. Vue.set(state.homePageData, key, data[key])
  86. }
  87. sessionStorage.setItem('jy-docs-home-page', JSON.stringify(state.homePageData))
  88. },
  89. saveLoginInfo (state, data) {
  90. state.loginInfo = data.data
  91. if (data.data.userId) {
  92. sessionStorage.setItem('jy-login-info', JSON.stringify(data.data))
  93. } else {
  94. sessionStorage.removeItem('jy-login-info')
  95. }
  96. },
  97. // 搜索页面数据
  98. saveSearchPageState (state, data) {
  99. console.log(data)
  100. for (const key in data) {
  101. state.searchPageData[key] = data[key]
  102. }
  103. sessionStorage.setItem('jy-docs-search-page', JSON.stringify(data))
  104. },
  105. // 清除搜索页面数据
  106. clearSearchPageState (state) {
  107. state.searchPageData = {}
  108. sessionStorage.setItem('jy-docs-search-page', JSON.stringify({}))
  109. },
  110. // 我的文库页面数据
  111. saveMyLibState (state, data) {
  112. for (const key in data) {
  113. state.userLib[key] = data[key]
  114. }
  115. sessionStorage.setItem('jy-docs-user-lib', JSON.stringify(data))
  116. },
  117. // 清除我的文库页面数据
  118. clearMyLibState (state, data = '') { // clearLib,clearCollections
  119. if (data === 'clearLib') {
  120. if (state.userLib && Object.keys(state.userLib).length !== 0) {
  121. delete state.userLib.myLibListState
  122. }
  123. } else if (data === 'clearCollections') {
  124. if (state.userLib && Object.keys(state.userLib).length !== 0) {
  125. delete state.userLib.myCollectionListState
  126. }
  127. } else {
  128. state.userLib = {}
  129. }
  130. sessionStorage.setItem('jy-docs-user-lib', JSON.stringify(state.userLib))
  131. }
  132. },
  133. actions: {
  134. // 获取登录状态
  135. async getLoginStatus (state) {
  136. try {
  137. const res = await getUserID()
  138. state.commit('saveLoginInfo', res)
  139. return res
  140. } catch (error) {}
  141. },
  142. // 首页数据
  143. async getHome (state) {
  144. getHomeHot({ sign: 'new', num: 5 }).then((res: APIStructure) => {
  145. if (!res.data.error_msg.length) {
  146. state.commit('saveHomeData', {
  147. new: res.data.data.map((v: APIStructure) => formatData(v))
  148. })
  149. }
  150. })
  151. getHomeHot({ sign: 'hot', num: 5 }).then((res: APIStructure) => {
  152. if (!res.data.error_msg.length) {
  153. state.commit('saveHomeData', {
  154. hot: res.data.data.map((v: APIStructure) => formatData(v))
  155. })
  156. }
  157. })
  158. getHomeActivity({ code: 3, size: 3, num: 1 }).then((res: APIStructure) => {
  159. if (!res.data.error_msg.length) {
  160. state.commit('saveHomeData', {
  161. keep: res.data.data.map((v: APIStructure) => formatData(v))
  162. })
  163. }
  164. })
  165. },
  166. async getRecommendList (state) {
  167. getHomeActivity({ code: 3, size: 3, num: 1 }).then((res: APIStructure) => {
  168. if (!res.data.error_msg.length) {
  169. state.commit('saveHomeData', {
  170. keep: res.data.data.map((v: APIStructure) => formatData(v))
  171. })
  172. }
  173. })
  174. },
  175. // 文库查询
  176. async doSearchDocs (state, data) {
  177. try {
  178. const res = await doSearchDocs(data)
  179. return res.data
  180. } catch (error) {}
  181. },
  182. // 我的文库查询
  183. async getMyLibList (state, data) {
  184. try {
  185. const res = await getMyLibList(data)
  186. return res.data
  187. } catch (error) {}
  188. },
  189. // 详情
  190. async getDetails (state, data) {
  191. try {
  192. const res = await getDetails(data)
  193. console.log(res)
  194. return res.data
  195. } catch (error) {}
  196. },
  197. // 剑鱼积分详情
  198. async getListDetail (state, data) {
  199. try {
  200. const res = await getListDetail(data)
  201. console.log(res)
  202. return res.data
  203. } catch (error) {}
  204. },
  205. async getShow (state, data) {
  206. try {
  207. const res = await getShow(data)
  208. console.log(res)
  209. return res.data
  210. } catch (error) {}
  211. },
  212. async getDown (state, data) {
  213. try {
  214. const res = await getDown(data)
  215. console.log(res)
  216. return res.data
  217. } catch (error) {}
  218. },
  219. async getShare (state, data) {
  220. try {
  221. const res = await getShare(data)
  222. console.log(res)
  223. return res.data
  224. } catch (error) {}
  225. },
  226. // 文库购买
  227. async getDocPay (state, data) {
  228. try {
  229. const res = await getDocPay(data)
  230. return res.data
  231. } catch (error) {}
  232. },
  233. // 文库收藏
  234. async getAdd (state, data) {
  235. try {
  236. const res = await getAdd(data)
  237. console.log(res)
  238. return res.data
  239. } catch (error) {}
  240. },
  241. // 文库取消收藏
  242. async getRemove (state, data) {
  243. try {
  244. const res = await getRemove(data)
  245. console.log(res)
  246. return res.data
  247. } catch (error) {}
  248. },
  249. // 剑鱼币
  250. async getCoin (state, data) {
  251. try {
  252. const res = await getCoin(data)
  253. console.log(res)
  254. return res.data
  255. } catch (error) {}
  256. },
  257. // 剑鱼币
  258. async getIndexTags () {
  259. try {
  260. const res = await getIndexTags()
  261. console.log(res)
  262. return res.data
  263. } catch (error) {}
  264. },
  265. // 获取绑定手机号
  266. async getAccountInfo () {
  267. try {
  268. const res = await getAccountInfo()
  269. return res.data
  270. } catch (error) {}
  271. }
  272. },
  273. getters: {}
  274. }
  275. export default modulesOption