base.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  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 = document.documentElement.clientWidth || window.innerWidth;
  30. // 计算当前屏幕对应的根font-size
  31. const rootFontSize = (clientWidth / designWidth) * rootValue;
  32. // 设置根元素font-size
  33. document.documentElement.style.fontSize = rootFontSize + 'px';
  34. // 调试信息(可选)
  35. // console.log(`屏幕宽度: ${clientWidth}px, 根font-size: ${rootFontSize}px, 1rem = ${rootFontSize}px`);
  36. }
  37. // 立即执行
  38. setRootFontSize();
  39. // 监听窗口大小变化
  40. window.addEventListener('resize', setRootFontSize);
  41. // 监听屏幕旋转
  42. window.addEventListener('orientationchange', setRootFontSize);
  43. // ========== 移动端适配结束 ==========
  44. const _deps = [
  45. ['script', '/js/mp_jq/jquery1.11.3.min.js', ''],
  46. ['script', '/js/mp_vue/vue.global.js', ''],
  47. ['script', '/js/mp_axios/axios.min.js', ''],
  48. // 通用富文本依赖(PC/H5共享目录) by xu 2026-03-01
  49. ['style', '/skin/easy/css/jodit.css'],
  50. ['script', '/js/jodit/jodit.js', ''],
  51. ['script', '/js/mp_jweixin/jweixin-1.6.0.js', ''],
  52. ['script', '/js/mp_common/common.js', ''],
  53. ['script', '/js/mp_toast/toast.js', ''],
  54. ['script', '/js/mp_request/request.js', ''],
  55. ['script', '/js/mp_user_api/user-api.js', ''],
  56. ['script', '/js/mp_validator/validator-rules.js', ''],
  57. ['script', '/js/mp_validation/validation-manager.js', ''],
  58. ['script', '/js/mp_ss_components/mp-ss-components.js', ''],
  59. ['script', '/js/mp_bridge/bridge.js', ''],
  60. ['script', '/js/mp_utils/field-formatter.js', ''],
  61. ['script', '/js/mp_utils/navigation.js', ''],
  62. // 引入 Vant UI 库
  63. ['script', '/js/mp_vant/vant.min.js'],
  64. ['style', '/skin/mp_easy/vant.min.css'],
  65. // 引入 Day.js 日期处理库
  66. ['script', '/js/mp_dayjs/dayjs.min.js'],
  67. // 引入 Cropper.js 图片裁剪库
  68. ['script', '/js/mp_cropper/cropper.min.js'],
  69. ['style', '/skin/mp_easy/cropper.min.css'],
  70. // ['style', '/skin/mp_easy/base.css'],
  71. ['style', '/skin/mp_easy/base.css'],
  72. ['style', '/skin/mp_easy/iconfont.css'],
  73. ];
  74. function loadResource(type, src, module) {
  75. return new Promise((resolve, reject) => {
  76. const elem = document.createElement(
  77. type === 'script' ? 'script' : 'link'
  78. );
  79. if (type === 'script') {
  80. elem.src = src;
  81. elem.type = module ? 'module' : '';
  82. } else {
  83. elem.rel = 'stylesheet';
  84. elem.href = src;
  85. }
  86. elem.onload = () => {
  87. if (type === 'script') {
  88. // elem.remove();
  89. }
  90. resolve();
  91. };
  92. elem.onerror = reject;
  93. document.head.appendChild(elem);
  94. });
  95. }
  96. // 等待所有依赖加载完成后再执行回调
  97. window.SS.ready = function (callback) {
  98. if (window.SS && window.SS.dom && window.SS.dom.initializeFormApp) {
  99. callback();
  100. } else {
  101. document.addEventListener('SSReady', () => {
  102. // 确保组件初始化完成后再执行回调
  103. if (
  104. window.SS &&
  105. window.SS.dom &&
  106. window.SS.dom.initializeFormApp
  107. ) {
  108. callback();
  109. }
  110. });
  111. }
  112. };
  113. async function loadAll() {
  114. // 然后加载资源
  115. for (const [type, src, module] of _deps) {
  116. await loadResource(type, src, module);
  117. if (src.includes('ace.js')) {
  118. window.ace.require('ace/config').set('workerPath', null);
  119. }
  120. }
  121. document.dispatchEvent(new Event('SSReady'));
  122. }
  123. // 当 DOM 加载完成后执行清理和加载
  124. if (document.readyState === 'loading') {
  125. document.addEventListener('DOMContentLoaded', loadAll);
  126. console.log('DOMContentLoaded');
  127. } else {
  128. loadAll();
  129. }
  130. })();