base.js 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. window.ss = {
  2. dom: {
  3. TYPE: {
  4. INPUT: 1,
  5. OBJP: 2,
  6. DATE: 3,
  7. TIME: 4,
  8. DATETIME: 5,
  9. ONOFFBTN: 6,
  10. PIC: 7,
  11. HTML: 9,
  12. CCPSINGLE: 51, //只对应一个对象属性的,带编码规则的级联菜单,如“出生地区码”(对应省、市、区)
  13. CCPMUTIPLE: 52, //对应多个对象属性的级联菜单
  14. SEARCHINPUT: 31, //查询页用到的文本框
  15. SEARCHDATE: 33, //查询页用到的日期选择
  16. SEARCHTIME: 34, //查询页用到的时间选择
  17. SEARCHDATETIME: 35, //查询页用到的日期时间选择
  18. },
  19. },
  20. config: {},
  21. };
  22. window.SS = window.ss; //最终都用小写ss,暂时先兼容大写SS
  23. (function () {
  24. // ========== 移动端适配:设置根元素font-size ==========
  25. // 设计稿宽度430px,分成10份,1rem = 43px(在430px屏幕上)
  26. function setRootFontSize() {
  27. const designWidth = 430; // 设计稿宽度
  28. const rootValue = designWidth / 10; // 43px
  29. const clientWidth =
  30. document.documentElement.clientWidth || window.innerWidth;
  31. // 计算当前屏幕对应的根font-size
  32. const rootFontSize = (clientWidth / designWidth) * rootValue;
  33. // 设置根元素font-size
  34. document.documentElement.style.fontSize = rootFontSize + "px";
  35. // 调试信息(可选)
  36. // console.log(`屏幕宽度: ${clientWidth}px, 根font-size: ${rootFontSize}px, 1rem = ${rootFontSize}px`);
  37. }
  38. // 立即执行
  39. setRootFontSize();
  40. // 监听窗口大小变化
  41. window.addEventListener("resize", setRootFontSize);
  42. // 监听屏幕旋转
  43. window.addEventListener("orientationchange", setRootFontSize);
  44. // ========== 移动端适配结束 ==========
  45. const _deps = [
  46. ["script", "/js/mp_jq/jquery1.11.3.min.js", ""],
  47. ["script", "/js/mp_vue/vue.global.js", ""],
  48. ["script", "/js/mp_axios/axios.min.js", ""],
  49. // 通用富文本依赖(PC/H5共享目录) by xu 2026-03-01
  50. ["style", "/skin/easy/css/jodit.css"],
  51. ["script", "/js/jodit/jodit.js", ""],
  52. ["script", "/js/mp_jweixin/jweixin-1.6.0.js", ""],
  53. ["script", "/js/mp_common/common.js", ""],
  54. ["script", "/js/mp_toast/toast.js", ""],
  55. ["script", "/js/mp_request/request.js", ""],
  56. ["script", "/js/mp_user_api/user-api.js", ""],
  57. ["script", "/js/mp_validator/validator-rules.js", ""],
  58. ["script", "/js/mp_validation/validation-manager.js", ""],
  59. ["script", "/js/mp_ss_components/mp-ss-components.js", ""],
  60. ["script", "/js/mp_bridge/bridge.js", ""],
  61. ["script", "/js/mp_utils/field-formatter.js", ""],
  62. ["script", "/js/mp_utils/navigation.js", ""],
  63. // 引入 Vant UI 库
  64. ["script", "/js/mp_vant/vant.min.js"],
  65. ["style", "/skin/mp_easy/vant.min.css"],
  66. // 引入 Day.js 日期处理库
  67. ["script", "/js/mp_dayjs/dayjs.min.js"],
  68. // 引入 Cropper.js 图片裁剪库
  69. ["script", "/js/mp_cropper/cropper.min.js"],
  70. ["style", "/skin/mp_easy/cropper.min.css"],
  71. // ['style', '/skin/mp_easy/base.css'],
  72. ["style", "/skin/mp_easy/base.css"],
  73. ["style", "/skin/mp_easy/iconfont.css"],
  74. ];
  75. function loadResource(type, src, module) {
  76. return new Promise((resolve, reject) => {
  77. const elem = document.createElement(
  78. type === "script" ? "script" : "link"
  79. );
  80. if (type === "script") {
  81. elem.src = src;
  82. elem.type = module ? "module" : "";
  83. } else {
  84. elem.rel = "stylesheet";
  85. elem.href = src;
  86. }
  87. elem.onload = () => {
  88. if (type === "script") {
  89. // elem.remove();
  90. }
  91. resolve();
  92. };
  93. elem.onerror = reject;
  94. document.head.appendChild(elem);
  95. });
  96. }
  97. // 等待所有依赖加载完成后再执行回调
  98. window.SS.ready = function (callback) {
  99. if (window.SS && window.SS.dom && window.SS.dom.initializeFormApp) {
  100. callback();
  101. } else {
  102. document.addEventListener("SSReady", () => {
  103. // 确保组件初始化完成后再执行回调
  104. if (window.SS && window.SS.dom && window.SS.dom.initializeFormApp) {
  105. callback();
  106. }
  107. });
  108. }
  109. };
  110. async function loadAll() {
  111. // 然后加载资源
  112. for (const [type, src, module] of _deps) {
  113. await loadResource(type, src, module);
  114. if (src.includes("ace.js")) {
  115. window.ace.require("ace/config").set("workerPath", null);
  116. }
  117. }
  118. // 所有 H5 页面公共依赖加载完成后,先判断是否需要做消息直达登录分流。
  119. // 如果这里已经跳去了 login/autoLogin,就直接终止当前页面初始化,避免业务页先渲染再被重定向。
  120. if (typeof window.handleMessageEntryAuthRedirect === "function") {
  121. const redirected = window.handleMessageEntryAuthRedirect();
  122. if (redirected) {
  123. return;
  124. }
  125. }
  126. document.dispatchEvent(new Event("SSReady"));
  127. }
  128. // 当 DOM 加载完成后执行清理和加载
  129. if (document.readyState === "loading") {
  130. document.addEventListener("DOMContentLoaded", loadAll);
  131. console.log("DOMContentLoaded");
  132. } else {
  133. loadAll();
  134. }
  135. })();