devOptions.js 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. import devCache from "./devCache";
  2. /**
  3. * 设置各端大小 kb
  4. */
  5. const defSize = (h5, app, mp) => {
  6. let r = 0;
  7. // #ifdef H5
  8. r = h5;
  9. // #endif
  10. // #ifdef MP
  11. r = mp;
  12. // #endif
  13. // #ifdef APP-PLUS || APP-NVUE
  14. r = app;
  15. // #endif
  16. return Math.ceil(r * 1024);
  17. }
  18. /**
  19. * 获取配置
  20. */
  21. export default {
  22. /**
  23. * 配置缓存key
  24. */
  25. cacheKey: "options_v8",
  26. /**
  27. * 默认配置项
  28. */
  29. defaultOptions: {
  30. version: 3.81,
  31. status: false, //调试工具总开关
  32. route: "/devTools/page/index", // 调试页面的路由,不建议更改
  33. bubble: { //调试弹窗气泡设置
  34. status: false, // 气泡标签是否显示,生产环境建议关闭
  35. text: "调试工具", // 气泡上展示的文字
  36. color: "#ffffff", // 气泡文字颜色
  37. bgColor: "rgba(250, 53, 52,0.7)", // 气泡背景颜色
  38. },
  39. console: {
  40. status: true, // 开关
  41. isOutput: true, //打印的日志是否对外输出到浏览器调试界面,建议在生产环境时开启
  42. cache: {
  43. status: true, //是否启用console缓存
  44. size: defSize(512, 1024 * 2, 512),
  45. rowSize: defSize(5.12, 20, 10),
  46. },
  47. },
  48. error: {
  49. status: true,
  50. cache: {
  51. status: true,
  52. size: defSize(512, 1024 * 2, 512),
  53. rowSize: defSize(5.12, 20, 10),
  54. },
  55. },
  56. network: {
  57. status: true,
  58. cache: {
  59. status: true,
  60. size: defSize(512, 1024 * 2, 512),
  61. rowSize: defSize(5.12, 20, 10),
  62. },
  63. },
  64. logs: {
  65. status: true,
  66. cache: {
  67. status: true,
  68. size: defSize(512, 1024 * 2, 512),
  69. rowSize: defSize(0.4, 0.4, 0.4),
  70. },
  71. },
  72. // 页面统计开关
  73. pageStatistics: {
  74. status: true, // 统计状态开关
  75. size: defSize(200, 1024 * 2, 512),
  76. // #ifdef H5
  77. dayOnlineRowMax: 30, // 日活跃时间的保存条数
  78. // #endif
  79. // #ifdef APP-PLUS || APP-NVUE
  80. dayOnlineRowMax: 90, // 日活跃时间的保存条数
  81. // #endif
  82. // #ifdef MP-WEIXIN
  83. dayOnlineRowMax: 60, // 日活跃时间的保存条数
  84. // #endif
  85. },
  86. // uni event bus 监听设置
  87. uniBus: {
  88. status: true,
  89. cache: {
  90. status: true,
  91. size: defSize(512, 1024 * 2, 512),
  92. rowSize: defSize(5.12, 20, 10),
  93. countMaxSize: defSize(512, 1024 * 2, 512), // bus统计上限 kb
  94. },
  95. },
  96. },
  97. /**
  98. * 获取配置信息
  99. */
  100. getOptions() {
  101. try {
  102. let options = devCache.get(this.cacheKey)
  103. if (!options) {
  104. return {
  105. status: false, //默认关闭调试工具
  106. }
  107. }
  108. let r = String(options.route)
  109. // ! 增加 devRoute 参数
  110. options.devRoute = r.substring(1, r.length)
  111. return options;
  112. } catch (error) {
  113. console.log("devOptions.getOptions error: ", error);
  114. return {
  115. status: false, //默认关闭调试工具
  116. }
  117. }
  118. },
  119. /**
  120. * 保存配置项
  121. */
  122. setOptions(options) {
  123. try {
  124. if (!options) {
  125. options = this.defaultOptions;
  126. }
  127. if (options.status) {
  128. if (
  129. !options.route
  130. || typeof options.route != "string"
  131. || options.route.indexOf("/") != 0
  132. ) {
  133. return this.outputError(`devTools 调试工具配置出错: [route] 参数配置错误!`)
  134. }
  135. }
  136. let data = deepMerge(this.defaultOptions, options)
  137. devCache.set(this.cacheKey, data)
  138. } catch (error) {
  139. console.log("devOptions.setOptions error: ", error);
  140. }
  141. },
  142. /**
  143. * 弹出错误信息
  144. */
  145. outputError(msg) {
  146. console.log('%c' + msg, `
  147. padding: 4px;
  148. background-color: red;
  149. color: #fff;
  150. font-size: 15px;
  151. `)
  152. },
  153. }
  154. /**
  155. * 深度合并对象
  156. */
  157. function deepMerge(target, ...sources) {
  158. try {
  159. if (!sources.length) return target; // 如果没有源对象则直接返回目标对象
  160. const source = sources[0];
  161. for (let key in source) {
  162. if (source.hasOwnProperty(key)) {
  163. if (typeof source[key] === 'object' && typeof target[key] !== undefined) {
  164. target[key] = deepMerge({}, target[key], source[key]); // 若属性值为对象类型且目标对象已存在该属性,则递归调用deepMerge函数进行合并
  165. } else {
  166. target[key] = source[key]; // 否则将源对象的属性赋值到目标对象上
  167. }
  168. }
  169. }
  170. return deepMerge(target, ...sources.slice(1)); // 处理完第一个源对象后再次调用deepMerge函数处理其他源对象
  171. } catch (error) {
  172. console.log("deepMerge error", error);
  173. return {}
  174. }
  175. }