四零语境前端代码仓库
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

181 lines
6.2 KiB

1 month ago
1 month ago
1 month ago
1 month ago
1 month ago
1 month ago
1 month ago
  1. import Vue from 'vue'
  2. import Vuex from 'vuex'
  3. import * as api from '@/api'
  4. // #ifdef H5
  5. import share from '@/utils/share.js'
  6. // #endif
  7. Vue.use(Vuex)
  8. const store = new Vuex.Store({
  9. state: {
  10. // 存放状态
  11. configList: [],
  12. departmentList: [],
  13. categoryList: [],
  14. userInfo: {},
  15. Qrcode: '',
  16. voiceList: [], // 音色列表
  17. defaultVoiceId: null // 默认音色ID
  18. },
  19. mutations: {
  20. // 构造用于uv-picker的树状结构数组
  21. setCategoryList(state, data) {
  22. // 将返回的平面数组data 根据pid和hasChild组装成两个数组,其一为pid为0的父级一维数组,其二为pid不为0的子级二维数组,其中pid相同的排一起 不同的分为不同子数组,并且按顺序排序,比如第一个为[中国,美国] 第二个按顺序为[[上海,福建],[纽约,华盛顿]]
  23. // 分离父级和子级数据
  24. const parentCategories = data.filter(item => item.pid === 0 || item.pid === '0')
  25. const childCategories = data.filter(item => item.pid !== 0 && item.pid !== '0')
  26. // 构建父级一维数组
  27. const parentArray = parentCategories.map((item) => {
  28. return {
  29. label: item.name || item.title || item.categoryName,
  30. value: item.id
  31. }
  32. })
  33. // 构建子级二维数组
  34. const childArray = []
  35. parentCategories.forEach(parent => {
  36. const children = childCategories
  37. .filter(child => child.pid === parent.id)
  38. .map(child => {
  39. return {
  40. label: child.name || child.title || child.categoryName,
  41. value: child.id
  42. }
  43. })
  44. childArray.push(children.length > 0 ? children : [{
  45. label: '全部',
  46. value: 0
  47. }])
  48. })
  49. // 组装最终结果
  50. state.categoryList = [parentArray, childArray]
  51. },
  52. setConfigList(state, data) {
  53. state.configList = data
  54. },
  55. setDepartmentList(state, data) {
  56. state.departmentList = data
  57. },
  58. setUserInfo(state, data) {
  59. state.userInfo = data
  60. // #ifdef H5
  61. uni.setStorageSync('userInfo', data)
  62. share()
  63. // #endif
  64. },
  65. setQrcode(state, data) {
  66. state.Qrcode = data
  67. },
  68. setVoiceList(state, data) {
  69. state.voiceList = data
  70. // 如果有音色数据且还没有设置默认音色ID,则设置第一个音色为默认
  71. if (data && data.length > 0 && !state.defaultVoiceId) {
  72. state.defaultVoiceId = Number(data[0].voiceType)
  73. }
  74. },
  75. setDefaultVoiceId(state, voiceId) {
  76. state.defaultVoiceId = Number(voiceId)
  77. },
  78. //
  79. },
  80. actions: {
  81. // 查询配置列表
  82. async getConfig({ commit }) {
  83. const res = await api.config.queryConfigList()
  84. // 要求变成键值对的样子
  85. const config = res.result.reduce((acc, item) => {
  86. if (!item.code) {
  87. console.log('code为空', item);
  88. return acc
  89. }
  90. acc[item.code] = item
  91. return acc
  92. }, {})
  93. console.log('configList列表为:', config);
  94. // 事先永久存儲首屏圖片的數據
  95. if (config.creen_image) {
  96. uni.setStorageSync('screen_image', config.creen_image.content)
  97. }
  98. if (config.login_logo) {
  99. uni.setStorageSync('login_logo', config.login_logo.content)
  100. }
  101. commit('setConfigList', config)
  102. // #ifdef H5
  103. share()
  104. // #endif
  105. },
  106. // 查询部门列表
  107. async getDepartment({ commit }) {
  108. const res = await api.config.queryDepartmentList()
  109. commit('setDepartmentList', res.result.records)
  110. },
  111. // 获取分类列表
  112. async getCategory({ commit }) {
  113. const res = await api.config.queryCategoryList()
  114. commit('setCategoryList', res.result.records)
  115. },
  116. // 初始化数据
  117. async initData({ dispatch, state }) {
  118. // 检查是否已初始化
  119. if (state.configList.length > 0) {
  120. console.log('配置数据已初始化,无需重复初始化')
  121. return
  122. }
  123. try {
  124. await Promise.all([
  125. dispatch('getConfig'),
  126. dispatch('getVoiceList'), // 添加音色列表初始化
  127. // dispatch('getDepartment'),
  128. // dispatch('getCategory'),
  129. ])
  130. console.log('所有配置数据初始化完成')
  131. } catch (error) {
  132. console.error('配置数据初始化失败:', error)
  133. }
  134. },
  135. // 更新/存儲用戶最新數據
  136. updateUserInfo({ commit }, userInfo) {
  137. commit('setUserInfo', userInfo)
  138. },
  139. async getUserInfo({ commit }) {
  140. const res = await api.login.getUserInfo();
  141. if (res.code === 200) {
  142. commit('setUserInfo', res.result);
  143. }
  144. },
  145. // 获取音色列表
  146. async getVoiceList({ commit }) {
  147. try {
  148. const res = await api.music.list()
  149. if (res.code === 200) {
  150. console.log('音色列表加载成功:', res.result);
  151. commit('setVoiceList', res.result)
  152. return res.result
  153. } else {
  154. console.error('音色列表加载失败:', res);
  155. return []
  156. }
  157. } catch (error) {
  158. console.error('音色列表加载异常:', error);
  159. return []
  160. }
  161. },
  162. // 设置默认音色
  163. setDefaultVoice({ commit }, voiceId) {
  164. commit('setDefaultVoiceId', voiceId)
  165. },
  166. }
  167. })
  168. export default store