li.shaoyi 2 år sedan
förälder
incheckning
5fc63e625a
100 ändrade filer med 2011 tillägg och 5 borttagningar
  1. 5 0
      .env.qdhs
  2. 5 0
      .env.qdhs@pc
  3. 27 0
      oem/qdhs/androidPrivacy.json
  4. BIN
      oem/qdhs/app/icons/1024x1024.png
  5. BIN
      oem/qdhs/app/icons/120x120.png
  6. BIN
      oem/qdhs/app/icons/144x144.png
  7. BIN
      oem/qdhs/app/icons/152x152.png
  8. BIN
      oem/qdhs/app/icons/167x167.png
  9. BIN
      oem/qdhs/app/icons/180x180.png
  10. BIN
      oem/qdhs/app/icons/192x192.png
  11. BIN
      oem/qdhs/app/icons/20x20.png
  12. BIN
      oem/qdhs/app/icons/29x29.png
  13. BIN
      oem/qdhs/app/icons/40x40.png
  14. BIN
      oem/qdhs/app/icons/58x58.png
  15. BIN
      oem/qdhs/app/icons/60x60.png
  16. BIN
      oem/qdhs/app/icons/72x72.png
  17. BIN
      oem/qdhs/app/icons/76x76.png
  18. BIN
      oem/qdhs/app/icons/80x80.png
  19. BIN
      oem/qdhs/app/icons/87x87.png
  20. BIN
      oem/qdhs/app/icons/96x96.png
  21. BIN
      oem/qdhs/app/splashscreen/1080x1920.png
  22. BIN
      oem/qdhs/app/splashscreen/480x853.png
  23. BIN
      oem/qdhs/app/splashscreen/720x1280.png
  24. 0 0
      oem/qdhs/config/router.json
  25. BIN
      oem/qdhs/favicon.ico
  26. BIN
      oem/qdhs/logo/logo-horizontal.png
  27. 303 0
      oem/qdhs/manifest.json
  28. 76 0
      package copy.json
  29. 3 0
      package.json
  30. BIN
      src/packages/gstj/assets/icons/cart.png
  31. 0 0
      src/packages/gstj/assets/icons/ccwl.svg
  32. 0 0
      src/packages/gstj/assets/icons/cpjg.svg
  33. 0 1
      src/packages/gstj/assets/icons/cpjs.svg
  34. BIN
      src/packages/gstj/assets/icons/friend.png
  35. BIN
      src/packages/gstj/assets/icons/futures.png
  36. 0 0
      src/packages/gstj/assets/icons/generalize.svg
  37. BIN
      src/packages/gstj/assets/icons/gold.png
  38. BIN
      src/packages/gstj/assets/icons/goods.png
  39. 0 1
      src/packages/gstj/assets/icons/htzr.svg
  40. 0 0
      src/packages/gstj/assets/icons/order.svg
  41. 0 0
      src/packages/gstj/assets/icons/ptgz.svg
  42. 0 0
      src/packages/gstj/assets/icons/red-envelope.svg
  43. 0 0
      src/packages/gstj/assets/icons/schedule.svg
  44. BIN
      src/packages/gstj/assets/icons/signin.png
  45. BIN
      src/packages/gstj/assets/icons/spot.png
  46. 0 0
      src/packages/gstj/assets/icons/statement.svg
  47. BIN
      src/packages/gstj/assets/icons/useradd.png
  48. 0 0
      src/packages/gstj/assets/icons/wareorder.svg
  49. 0 0
      src/packages/gstj/assets/icons/wddj.svg
  50. 0 0
      src/packages/gstj/assets/icons/wdrw.svg
  51. BIN
      src/packages/gstj/assets/logo.png
  52. 0 0
      src/packages/gstj/assets/logo.svg
  53. BIN
      src/packages/mobile/assets/icons/cart.png
  54. 0 0
      src/packages/mobile/assets/icons/ccwl.svg
  55. 0 0
      src/packages/mobile/assets/icons/cpjg.svg
  56. 0 1
      src/packages/mobile/assets/icons/cpjs.svg
  57. BIN
      src/packages/mobile/assets/icons/friend.png
  58. BIN
      src/packages/mobile/assets/icons/futures.png
  59. 0 0
      src/packages/mobile/assets/icons/generalize.svg
  60. BIN
      src/packages/mobile/assets/icons/gold.png
  61. BIN
      src/packages/mobile/assets/icons/goods.png
  62. 0 1
      src/packages/mobile/assets/icons/htzr.svg
  63. 0 0
      src/packages/mobile/assets/icons/order.svg
  64. 0 0
      src/packages/mobile/assets/icons/ptgz.svg
  65. 0 0
      src/packages/mobile/assets/icons/red-envelope.svg
  66. 0 0
      src/packages/mobile/assets/icons/schedule.svg
  67. BIN
      src/packages/mobile/assets/icons/signin.png
  68. BIN
      src/packages/mobile/assets/icons/spot.png
  69. 0 0
      src/packages/mobile/assets/icons/statement.svg
  70. BIN
      src/packages/mobile/assets/icons/useradd.png
  71. 0 0
      src/packages/mobile/assets/icons/wareorder.svg
  72. 0 0
      src/packages/mobile/assets/icons/wddj.svg
  73. 0 0
      src/packages/mobile/assets/icons/wdrw.svg
  74. BIN
      src/packages/mobile/assets/logo.png
  75. 0 0
      src/packages/mobile/assets/logo.svg
  76. 1 1
      src/packages/pc/views/footer/goods/order/clear/index.vue
  77. 32 0
      src/packages/qdhs/App.vue
  78. BIN
      src/packages/qdhs/assets/icons/fire.png
  79. BIN
      src/packages/qdhs/assets/images/avatar.jpg
  80. BIN
      src/packages/qdhs/assets/images/avatar.png
  81. BIN
      src/packages/qdhs/assets/images/block-bg.png
  82. BIN
      src/packages/qdhs/assets/images/certification.png
  83. BIN
      src/packages/qdhs/assets/images/guide-1.png
  84. BIN
      src/packages/qdhs/assets/images/guide-2.png
  85. BIN
      src/packages/qdhs/assets/images/login-logo.png
  86. 14 0
      src/packages/qdhs/assets/themes/base/animation.less
  87. 77 0
      src/packages/qdhs/assets/themes/base/mixin-resize.less
  88. 149 0
      src/packages/qdhs/assets/themes/base/mixin.less
  89. 116 0
      src/packages/qdhs/assets/themes/base/reset.less
  90. 10 0
      src/packages/qdhs/assets/themes/dark/dark.less
  91. 70 0
      src/packages/qdhs/assets/themes/default/default.less
  92. 532 0
      src/packages/qdhs/assets/themes/global/global.less
  93. 6 0
      src/packages/qdhs/assets/themes/light/light.less
  94. 5 0
      src/packages/qdhs/assets/themes/style.less
  95. 71 0
      src/packages/qdhs/index.html
  96. 31 0
      src/packages/qdhs/main.ts
  97. 9 0
      src/packages/qdhs/postcss.config.js
  98. 351 0
      src/packages/qdhs/router/index.ts
  99. 99 0
      src/packages/qdhs/views/boot/Index.vue
  100. 19 0
      src/packages/qdhs/views/boot/index.less

+ 5 - 0
.env.qdhs

@@ -0,0 +1,5 @@
+VUE_APP_ENV = 'qdhs'
+VUE_APP_TITLE = 青岛海商
+VUE_APP_ROOT = src/packages/qdhs/
+VUE_APP_OEM = oem/qdhs/
+VUE_APP_HOST = localhost

+ 5 - 0
.env.qdhs@pc

@@ -0,0 +1,5 @@
+VUE_APP_ENV = 'pc'
+VUE_APP_TITLE = 青岛海商
+VUE_APP_ROOT = src/packages/pc/
+VUE_APP_OEM = oem/qdhs/
+VUE_APP_HOST = localhost

+ 27 - 0
oem/qdhs/androidPrivacy.json

@@ -0,0 +1,27 @@
+{
+    "version": "1",
+    "prompt": "template",
+    "title": "隐私政策",
+    "message": "  请你务必审慎阅读、充分理解“隐私政策”各条款,包括但不限于:为了更好的向你提供服务,我们需要收集你的设备标识、操作日志等信息用于分析、优化应用性能。<br/>  你可阅读<a href=\"http://8.130.36.162:8070/demo_register/html/yszc.htm\">《隐私政策》</a>了解详细信息。如果你同意,请点击下面按钮开始接受我们的服务。",
+    "buttonAccept": "同意并接受",
+    "buttonRefuse": "拒绝",
+    "hrefLoader": "system|default",
+    "second": {
+        "title": "确认提示",
+        "message": "  进入应用前,你需先同意<a href=\"http://8.130.36.162:8070/demo_register/html/yszc.htm\">《隐私政策》</a>,否则将退出应用。",
+        "buttonAccept": "同意并继续",
+        "buttonRefuse": "退出应用"
+    },
+    "disagreeMode": {
+        "support": false,
+        "loadNativePlugins": false,
+        "visitorEntry": true,
+        "showAlways": true
+    },
+    "styles": {
+        "borderRadius": "5px",
+        "buttonAccept": {
+            "color": "#ee0a24"
+        }
+    }
+}

BIN
oem/qdhs/app/icons/1024x1024.png


BIN
oem/qdhs/app/icons/120x120.png


BIN
oem/qdhs/app/icons/144x144.png


BIN
oem/qdhs/app/icons/152x152.png


BIN
oem/qdhs/app/icons/167x167.png


BIN
oem/qdhs/app/icons/180x180.png


BIN
oem/qdhs/app/icons/192x192.png


BIN
oem/qdhs/app/icons/20x20.png


BIN
oem/qdhs/app/icons/29x29.png


BIN
oem/qdhs/app/icons/40x40.png


BIN
oem/qdhs/app/icons/58x58.png


BIN
oem/qdhs/app/icons/60x60.png


BIN
oem/qdhs/app/icons/72x72.png


BIN
oem/qdhs/app/icons/76x76.png


BIN
oem/qdhs/app/icons/80x80.png


BIN
oem/qdhs/app/icons/87x87.png


BIN
oem/qdhs/app/icons/96x96.png


BIN
oem/qdhs/app/splashscreen/1080x1920.png


BIN
oem/qdhs/app/splashscreen/480x853.png


BIN
oem/qdhs/app/splashscreen/720x1280.png


+ 0 - 0
oem/qdsp/config/router.json → oem/qdhs/config/router.json


BIN
oem/qdhs/favicon.ico


BIN
oem/qdhs/logo/logo-horizontal.png


+ 303 - 0
oem/qdhs/manifest.json

@@ -0,0 +1,303 @@
+{
+    "@platforms" : [ "android", "iPhone", "iPad" ],
+    "id" : "H5E4A9458",
+    /*应用的标识*/
+    "name" : "甘肃碳交",
+    /*应用名称,程序桌面图标名称*/
+    "version" : {
+        "name" : "1.0.0",
+        /*应用版本名称*/
+        "code" : 100000
+    },
+    "description" : "",
+    /*应用描述信息*/
+    "icons" : {
+        "72" : "icon.png"
+    },
+    "launch_path" : "index.html",
+    /*应用的入口页面,默认为根目录下的index.html;支持网络地址,必须以http://或https://开头*/
+    "developer" : {
+        "name" : "",
+        /*开发者名称*/
+        "email" : "",
+        /*开发者邮箱地址*/
+        "url" : "" /*开发者个人主页地址*/
+    },
+    "permissions" : {
+        "Accelerometer" : {
+            "description" : "访问加速度感应器"
+        },
+        "Audio" : {
+            "description" : "访问麦克风"
+        },
+        "Cache" : {
+            "description" : "管理应用缓存"
+        },
+        "Camera" : {
+            "description" : "访问摄像头"
+        },
+        "Console" : {
+            "description" : "跟踪调试输出日志"
+        },
+        "Device" : {
+            "description" : "访问设备信息"
+        },
+        "Downloader" : {
+            "description" : "文件下载管理"
+        },
+        "Events" : {
+            "description" : "应用扩展事件"
+        },
+        "File" : {
+            "description" : "访问本地文件系统"
+        },
+        "Gallery" : {
+            "description" : "访问系统相册"
+        },
+        "Invocation" : {
+            "description" : "使用Native.js能力"
+        },
+        "Orientation" : {
+            "description" : "访问方向感应器"
+        },
+        "Proximity" : {
+            "description" : "访问距离感应器"
+        },
+        "Storage" : {
+            "description" : "管理应用本地数据"
+        },
+        "Uploader" : {
+            "description" : "管理文件上传任务"
+        },
+        "Runtime" : {
+            "description" : "访问运行期环境"
+        },
+        "XMLHttpRequest" : {
+            "description" : "跨域网络访问"
+        },
+        "Zip" : {
+            "description" : "文件压缩与解压缩"
+        },
+        "Barcode" : {
+            "description" : "管理二维码扫描插件"
+        },
+        "Webview" : {
+            "description" : "窗口管理"
+        },
+        "NativeUI" : {
+            "description" : "原生UI控件"
+        },
+        "Navigator" : {
+            "description" : "浏览器信息"
+        },
+        "NativeObj" : {
+            "description" : "原生对象"
+        },
+        "Share" : {}
+    },
+    "plus" : {
+        "modules" : {
+            "Barcode" : {},
+            "Camera" : {},
+            "Gallery" : {},
+            "Share" : {}
+        },
+        "statusbar" : {
+            "immersed" : true /*沉浸式状态栏。*/
+        },
+        "splashscreen" : {
+            "autoclose" : true,
+            /*是否自动关闭程序启动界面,true表示应用加载应用入口页面后自动关闭;false则需调plus.navigator.closeSplashscreen()关闭*/
+            "waiting" : true /*是否在程序启动界面显示等待雪花,true表示显示,false表示不显示。*/
+        },
+        "popGesture" : "close",
+        /*设置应用默认侧滑返回关闭Webview窗口,"none"为无侧滑返回功能,"hide"为侧滑隐藏Webview窗口。参考http://ask.dcloud.net.cn/article/102*/
+        "runmode" : "liberate",
+        /*应用的首次启动运行模式,可取liberate或normal,liberate模式在第一次启动时将解压应用资源(Android平台File API才可正常访问_www目录)*/
+        "signature" : "Sk9JTiBVUyBtYWlsdG86aHIyMDEzQGRjbG91ZC5pbw==",
+        /*可选,保留给应用签名,暂不使用*/
+        "distribute" : {
+            "apple" : {
+                "appid" : "",
+                /*iOS应用标识,苹果开发网站申请的appid,如io.dcloud.HelloH5*/
+                "mobileprovision" : "",
+                /*iOS应用打包配置文件*/
+                "password" : "",
+                /*iOS应用打包个人证书导入密码*/
+                "p12" : "",
+                /*iOS应用打包个人证书,打包配置文件关联的个人证书*/
+                "devices" : "universal",
+                /*iOS应用支持的设备类型,可取值iphone/ipad/universal*/
+                "frameworks" : [], /*调用Native.js调用原生Objective-c API需要引用的FrameWork,如需调用GameCenter,则添加"GameKit.framework"*/
+                "idfa" : false,
+                "privacyDescription" : {
+                    "NSCameraUsageDescription" : "访问您的相册用来上传您的图像用来设置头像!",
+                    "NSPhotoLibraryAddUsageDescription" : "访问您的相册保存图像用来设置头像!",
+                    "NSPhotoLibraryUsageDescription" : "访问您的摄像头用来拍照上传您的图像用来设置头像!"
+                }
+            },
+            "google" : {
+                "packagename" : "",
+                /*Android应用包名,如io.dcloud.HelloH5*/
+                "keystore" : "",
+                /*Android应用打包使用的密钥库文件*/
+                "password" : "",
+                /*Android应用打包使用密钥库中证书的密码*/
+                "aliasname" : "",
+                /*Android应用打包使用密钥库中证书的别名*/
+                "permissions" : [
+                    "<uses-feature android:name=\"android.hardware.camera\"/>",
+                    "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
+                    "<uses-permission android:name=\"android.permission.BIND_INPUT_METHOD\"/>",
+                    "<uses-permission android:name=\"android.permission.CAMERA\"/>",
+                    "<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>",
+                    "<uses-permission android:name=\"android.permission.RECORD_AUDIO\"/>"
+                ],
+                "abiFilters" : [ "armeabi-v7a", "arm64-v8a" ],
+                "autoSdkPermissions" : false,
+                "minSdkVersion" : 26
+            },
+            /*使用Native.js调用原生安卓API需要使用到的系统权限*/
+            "orientation" : [ "portrait-primary" ],
+            /*应用支持的方向,portrait-primary:竖屏正方向;portrait-secondary:竖屏反方向;landscape-primary:横屏正方向;landscape-secondary:横屏反方向*/
+            "icons" : {
+                "ios" : {
+                    "prerendered" : true,
+                    /*应用图标是否已经高亮处理,在iOS6及以下设备上有效*/
+                    "auto" : "",
+                    /*应用图标,分辨率:512x512,用于自动生成各种尺寸程序图标*/
+                    "iphone" : {
+                        "normal" : "",
+                        /*iPhone3/3GS程序图标,分辨率:57x57*/
+                        "retina" : "",
+                        /*iPhone4程序图标,分辨率:114x114*/
+                        "retina7" : "",
+                        /*iPhone4S/5/6程序图标,分辨率:120x120*/
+                        "retina8" : "",
+                        /*iPhone6 Plus程序图标,分辨率:180x180*/
+                        "spotlight-normal" : "",
+                        /*iPhone3/3GS Spotlight搜索程序图标,分辨率:29x29*/
+                        "spotlight-retina" : "",
+                        /*iPhone4 Spotlight搜索程序图标,分辨率:58x58*/
+                        "spotlight-retina7" : "",
+                        /*iPhone4S/5/6 Spotlight搜索程序图标,分辨率:80x80*/
+                        "settings-normal" : "",
+                        /*iPhone4设置页面程序图标,分辨率:29x29*/
+                        "settings-retina" : "",
+                        /*iPhone4S/5/6设置页面程序图标,分辨率:58x58*/
+                        "settings-retina8" : "", /*iPhone6Plus设置页面程序图标,分辨率:87x87*/
+                        "app@2x" : "app/icons/120x120.png",
+                        "app@3x" : "app/icons/180x180.png",
+                        "notification@2x" : "app/icons/40x40.png",
+                        "notification@3x" : "app/icons/60x60.png",
+                        "settings@2x" : "app/icons/58x58.png",
+                        "settings@3x" : "app/icons/87x87.png",
+                        "spotlight@2x" : "app/icons/80x80.png",
+                        "spotlight@3x" : "app/icons/120x120.png"
+                    },
+                    "ipad" : {
+                        "normal" : "",
+                        /*iPad普通屏幕程序图标,分辨率:72x72*/
+                        "retina" : "",
+                        /*iPad高分屏程序图标,分辨率:144x144*/
+                        "normal7" : "",
+                        /*iPad iOS7程序图标,分辨率:76x76*/
+                        "retina7" : "",
+                        /*iPad iOS7高分屏程序图标,分辨率:152x152*/
+                        "spotlight-normal" : "",
+                        /*iPad Spotlight搜索程序图标,分辨率:50x50*/
+                        "spotlight-retina" : "",
+                        /*iPad高分屏Spotlight搜索程序图标,分辨率:100x100*/
+                        "spotlight-normal7" : "",
+                        /*iPad iOS7 Spotlight搜索程序图标,分辨率:40x40*/
+                        "spotlight-retina7" : "",
+                        /*iPad iOS7高分屏Spotlight搜索程序图标,分辨率:80x80*/
+                        "settings-normal" : "",
+                        /*iPad设置页面程序图标,分辨率:29x29*/
+                        "settings-retina" : "", /*iPad高分屏设置页面程序图标,分辨率:58x58*/
+                        "app" : "app/icons/76x76.png",
+                        "app@2x" : "app/icons/152x152.png",
+                        "notification" : "app/icons/20x20.png",
+                        "notification@2x" : "app/icons/40x40.png",
+                        "proapp@2x" : "app/icons/167x167.png",
+                        "settings" : "app/icons/29x29.png",
+                        "settings@2x" : "app/icons/58x58.png",
+                        "spotlight" : "app/icons/40x40.png",
+                        "spotlight@2x" : "app/icons/80x80.png"
+                    },
+                    "appstore" : "app/icons/1024x1024.png"
+                },
+                "android" : {
+                    "mdpi" : "",
+                    /*普通屏程序图标,分辨率:48x48*/
+                    "ldpi" : "",
+                    /*大屏程序图标,分辨率:48x48*/
+                    "hdpi" : "app/icons/72x72.png",
+                    /*高分屏程序图标,分辨率:72x72*/
+                    "xhdpi" : "app/icons/96x96.png",
+                    /*720P高分屏程序图标,分辨率:96x96*/
+                    "xxhdpi" : "app/icons/144x144.png", /*1080P 高分屏程序图标,分辨率:144x144*/
+                    "xxxhdpi" : "app/icons/192x192.png"
+                }
+            },
+            "splashscreen" : {
+                "ios" : {
+                    "iphone" : {
+                        "default" : "",
+                        /*iPhone3启动图片选,分辨率:320x480*/
+                        "retina35" : "",
+                        /*3.5英寸设备(iPhone4)启动图片,分辨率:640x960*/
+                        "retina40" : "",
+                        /*4.0 英寸设备(iPhone5/iPhone5s)启动图片,分辨率:640x1136*/
+                        "retina47" : "",
+                        /*4.7 英寸设备(iPhone6)启动图片,分辨率:750x1334*/
+                        "retina55" : "",
+                        /*5.5 英寸设备(iPhone6 Plus)启动图片,分辨率:1242x2208*/
+                        "retina55l" : "" /*5.5 英寸设备(iPhone6 Plus)横屏启动图片,分辨率:2208x1242*/
+                    },
+                    "ipad" : {
+                        "portrait" : "",
+                        /*iPad竖屏启动图片,分辨率:768x1004*/
+                        "portrait-retina" : "",
+                        /*iPad高分屏竖屏图片,分辨率:1536x2008*/
+                        "landscape" : "",
+                        /*iPad横屏启动图片,分辨率:1024x748*/
+                        "landscape-retina" : "",
+                        /*iPad高分屏横屏启动图片,分辨率:2048x1496*/
+                        "portrait7" : "",
+                        /*iPad iOS7竖屏启动图片,分辨率:768x1024*/
+                        "portrait-retina7" : "",
+                        /*iPad iOS7高分屏竖屏图片,分辨率:1536x2048*/
+                        "landscape7" : "",
+                        /*iPad iOS7横屏启动图片,分辨率:1024x768*/
+                        "landscape-retina7" : "" /*iPad iOS7高分屏横屏启动图片,分辨率:2048x1536*/
+                    },
+                    "storyboard" : "../ios/CustomStoryborad.zip"
+                },
+                "android" : {
+                    "mdpi" : "",
+                    /*普通屏启动图片,分辨率:240x282*/
+                    "ldpi" : "",
+                    /*大屏启动图片,分辨率:320x442*/
+                    "hdpi" : "app/splashscreen/480x853.png",
+                    /*高分屏启动图片,分辨率:480x762*/
+                    "xhdpi" : "app/splashscreen/720x1280.png",
+                    /*720P高分屏启动图片,分辨率:720x1242*/
+                    "xxhdpi" : "app/splashscreen/1080x1920.png" /*1080P高分屏启动图片,分辨率:1080x1882*/
+                },
+                "androidStyle" : "default",
+                "iosStyle" : "common",
+                "useOriginalMsgbox" : true
+            },
+            "plugins" : {
+                "ad" : {},
+                "geolocation" : {},
+                "share" : {}
+            },
+            "ios" : {
+                "dSYMs" : false
+            }
+        }
+    },
+    "screenOrientation" : [ "portrait-primary" ]
+}

+ 76 - 0
package copy.json

@@ -0,0 +1,76 @@
+{
+  "name": "muchinfo",
+  "version": "0.1.0",
+  "private": true,
+  "scripts": {
+    "dev:pc": "vue-cli-service serve --mode pc",
+    "dev:mobile": "vue-cli-service serve --mode mobile",
+    "dev:gstj": "vue-cli-service serve --mode gstj",
+    "dev:sbyj": "vue-cli-service serve --mode sbyj",
+    "dev:qxst": "vue-cli-service serve --mode qxst",
+    "dev:zrwyt": "vue-cli-service serve --mode zrwyt",
+    "dev:qdhs": "vue-cli-service serve --mode qdhs",
+    "build:pc": "vue-cli-service build --mode pc",
+    "build:mobile": "vue-cli-service build --mode mobile",
+    "build:gstj": "vue-cli-service build --mode gstj",
+    "build:gstj@pc": "vue-cli-service build --mode gstj@pc",
+    "build:sbyj": "vue-cli-service build --mode sbyj",
+    "build:qxst": "vue-cli-service build --mode qxst",
+    "build:qxst@pc": "vue-cli-service build --mode qxst@pc",
+    "build:zrwyt": "vue-cli-service build --mode zrwyt",
+    "build:zrwyt@pc": "vue-cli-service build --mode zrwyt@pc",
+    "build:qdhs": "vue-cli-service build --mode qdhs",
+    "build:qdhs@pc": "vue-cli-service build --mode qdhs@pc",
+    "lint": "vue-cli-service lint"
+  },
+  "dependencies": {
+    "@tinymce/tinymce-vue": "^5.0.0",
+    "@vant/compat": "^1.0.0",
+    "axios": "^0.26.1",
+    "clipboard": "^2.0.11",
+    "core-js": "^3.8.3",
+    "crypto-js": "^4.1.1",
+    "default-passive-events": "^2.0.0",
+    "echarts": "^5.4.3",
+    "element-plus": "^2.3.8",
+    "html5-qrcode": "^2.2.5",
+    "long": "^5.2.0",
+    "moment": "^2.29.3",
+    "photoswipe": "^5.3.6",
+    "qrcode": "^1.5.1",
+    "sortablejs": "^1.15.0",
+    "uuid": "^8.3.2",
+    "vant": "^4.5.0",
+    "vue": "^3.2.13",
+    "vue-class-component": "^8.0.0-0",
+    "vue-i18n": "^9.2.2",
+    "vue-router": "^4.0.3",
+    "vuedraggable": "^4.1.0"
+  },
+  "devDependencies": {
+    "@types/crypto-js": "^4.1.1",
+    "@types/qrcode": "^1.5.0",
+    "@types/sortablejs": "^1.13.0",
+    "@types/uuid": "^8.3.4",
+    "@typescript-eslint/eslint-plugin": "^5.4.0",
+    "@typescript-eslint/parser": "^5.4.0",
+    "@vue/cli-plugin-babel": "~5.0.0",
+    "@vue/cli-plugin-eslint": "~5.0.0",
+    "@vue/cli-plugin-router": "~5.0.0",
+    "@vue/cli-plugin-typescript": "~5.0.0",
+    "@vue/cli-service": "~5.0.0",
+    "@vue/eslint-config-typescript": "^9.1.0",
+    "compression-webpack-plugin": "^10.0.0",
+    "copy-webpack-plugin": "^11.0.0",
+    "eslint": "^7.32.0",
+    "eslint-plugin-vue": "^8.0.3",
+    "less": "^4.0.0",
+    "less-loader": "^8.0.0",
+    "postcss": "7.0.32",
+    "postcss-px-to-viewport": "^1.1.1",
+    "resize-observer-polyfill": "^1.5.1",
+    "typescript": "~4.5.5",
+    "vconsole": "^3.14.6",
+    "worker-loader": "^3.0.8"
+  }
+}

+ 3 - 0
package.json

@@ -9,6 +9,7 @@
     "dev:sbyj": "vue-cli-service serve --mode sbyj",
     "dev:qxst": "vue-cli-service serve --mode qxst",
     "dev:zrwyt": "vue-cli-service serve --mode zrwyt",
+    "dev:qdhs": "vue-cli-service serve --mode qdhs",
     "build:pc": "vue-cli-service build --mode pc",
     "build:mobile": "vue-cli-service build --mode mobile",
     "build:gstj": "vue-cli-service build --mode gstj",
@@ -18,6 +19,8 @@
     "build:qxst@pc": "vue-cli-service build --mode qxst@pc",
     "build:zrwyt": "vue-cli-service build --mode zrwyt",
     "build:zrwyt@pc": "vue-cli-service build --mode zrwyt@pc",
+    "build:qdhs": "vue-cli-service build --mode qdhs",
+    "build:qdhs@pc": "vue-cli-service build --mode qdhs@pc",
     "lint": "vue-cli-service lint"
   },
   "dependencies": {

BIN
src/packages/gstj/assets/icons/cart.png


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
src/packages/gstj/assets/icons/ccwl.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
src/packages/gstj/assets/icons/cpjg.svg


+ 0 - 1
src/packages/gstj/assets/icons/cpjs.svg

@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 204.49 205.39"><defs><style>.cls-1,.cls-2,.cls-3{fill-rule:evenodd;}.cls-1{fill:url(#未命名的渐变_2);}.cls-2{opacity:0.5;fill:url(#未命名的渐变_5);}.cls-2,.cls-3{isolation:isolate;}.cls-3,.cls-4{fill:#fff;}.cls-3{opacity:0.2;}.cls-5{fill:#c30d23;}</style><linearGradient id="未命名的渐变_2" x1="-948.92" y1="1698.32" x2="-948.31" y2="1699.33" gradientTransform="matrix(174.47, 0, 0, -174.47, 165599.73, 296506.15)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#c30d23"/><stop offset="1" stop-color="#dd364a"/></linearGradient><linearGradient id="未命名的渐变_5" x1="131.37" y1="115.54" x2="177.6" y2="174.65" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ffc6cd"/><stop offset="1" stop-color="#e83a4f"/></linearGradient></defs><title>1-产品介绍</title><g id="图层_2" data-name="图层 2"><g id="图层_1-2" data-name="图层 1"><path class="cls-1" d="M102.24,0c137.31,6.2,135.34,200.13,0,205.39C-35.07,199.19-33.09,5.26,102.24,0Z"/><path class="cls-2" d="M110,204.86C34.91,173.61,47.38,51.24,143.18,47.6c24,1.1,42.66,9.34,56.06,21.59C217.65,125.73,187.49,197.43,110,204.86Z"/><path class="cls-3" d="M.15,108.59C-2.09,65.72,20.91,21.49,68.66,5.83,79.64,49,56.45,100.76.15,108.59Z"/><path class="cls-4" d="M145,43.73A66.72,66.72,0,0,0,37.76,109.6c2.59,12.15,1.3,30.1-2,45.2a7,7,0,0,0,6.82,8.65c.08,0,1.43-.22,1.43-.22,15.63-3.11,35.1-5.24,44.87-2.39A50.49,50.49,0,0,0,103,162.35,66.72,66.72,0,0,0,145,43.73Zm-35.29,73H74.54a5.27,5.27,0,1,1,0-10.53h35.12a5.27,5.27,0,1,1,0,10.53ZM130.73,88.6H74.54a5.27,5.27,0,0,1,0-10.54h56.19a5.27,5.27,0,1,1,0,10.54Z"/><path class="cls-5" d="M114.93,111.43a5.26,5.26,0,0,1-5.27,5.26H74.54a5.27,5.27,0,1,1,0-10.53h35.12A5.27,5.27,0,0,1,114.93,111.43Z"/><path class="cls-5" d="M136,83.33a5.27,5.27,0,0,1-5.27,5.27H74.54a5.27,5.27,0,0,1,0-10.54h56.19A5.27,5.27,0,0,1,136,83.33Z"/></g></g></svg>

BIN
src/packages/gstj/assets/icons/friend.png


BIN
src/packages/gstj/assets/icons/futures.png


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
src/packages/gstj/assets/icons/generalize.svg


BIN
src/packages/gstj/assets/icons/gold.png


BIN
src/packages/gstj/assets/icons/goods.png


+ 0 - 1
src/packages/gstj/assets/icons/htzr.svg

@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 204.49 205.39"><defs><style>.cls-1,.cls-2,.cls-3{fill-rule:evenodd;}.cls-1{fill:url(#未命名的渐变_2);}.cls-2{opacity:0.5;fill:url(#未命名的渐变_5);}.cls-2,.cls-3{isolation:isolate;}.cls-3,.cls-4{fill:#fff;}.cls-3{opacity:0.2;}</style><linearGradient id="未命名的渐变_2" x1="-1233.09" y1="1692.07" x2="-1232.49" y2="1693.08" gradientTransform="matrix(174.47, 0, 0, -174.47, 215179.21, 295416.49)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#c30d23"/><stop offset="1" stop-color="#dd364a"/></linearGradient><linearGradient id="未命名的渐变_5" x1="131.37" y1="115.54" x2="177.6" y2="174.65" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ffc6cd"/><stop offset="1" stop-color="#e83a4f"/></linearGradient></defs><title>1-合同转让</title><g id="图层_2" data-name="图层 2"><g id="图层_1-2" data-name="图层 1"><path class="cls-1" d="M102.24,0c137.31,6.2,135.34,200.13,0,205.39C-35.07,199.19-33.09,5.26,102.24,0Z"/><path class="cls-2" d="M110,204.86C34.91,173.61,47.38,51.24,143.18,47.6c24,1.1,42.66,9.34,56.06,21.59C217.65,125.73,187.49,197.43,110,204.86Z"/><path class="cls-3" d="M.15,108.59C-2.09,65.72,20.91,21.49,68.66,5.83,79.64,49,56.45,100.76.15,108.59Z"/><rect class="cls-4" x="66.42" y="42.99" width="71.65" height="119.41" rx="13.32"/><path class="cls-4" d="M160.11,62.28h0A10.41,10.41,0,0,0,149.7,72.69V135a10.41,10.41,0,0,0,10.41,10.41h0A10.41,10.41,0,0,0,170.52,135V72.69A10.41,10.41,0,0,0,160.11,62.28Z"/><path class="cls-4" d="M44.37,62.28A10.41,10.41,0,0,0,34,72.69V135a10.41,10.41,0,0,0,20.82,0V72.69A10.41,10.41,0,0,0,44.37,62.28Z"/></g></g></svg>

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
src/packages/gstj/assets/icons/order.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
src/packages/gstj/assets/icons/ptgz.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
src/packages/gstj/assets/icons/red-envelope.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
src/packages/gstj/assets/icons/schedule.svg


BIN
src/packages/gstj/assets/icons/signin.png


BIN
src/packages/gstj/assets/icons/spot.png


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
src/packages/gstj/assets/icons/statement.svg


BIN
src/packages/gstj/assets/icons/useradd.png


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
src/packages/gstj/assets/icons/wareorder.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
src/packages/gstj/assets/icons/wddj.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
src/packages/gstj/assets/icons/wdrw.svg


BIN
src/packages/gstj/assets/logo.png


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
src/packages/gstj/assets/logo.svg


BIN
src/packages/mobile/assets/icons/cart.png


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
src/packages/mobile/assets/icons/ccwl.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
src/packages/mobile/assets/icons/cpjg.svg


+ 0 - 1
src/packages/mobile/assets/icons/cpjs.svg

@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 204.49 205.39"><defs><style>.cls-1,.cls-2,.cls-3{fill-rule:evenodd;}.cls-1{fill:url(#未命名的渐变_2);}.cls-2{opacity:0.5;fill:url(#未命名的渐变_5);}.cls-2,.cls-3{isolation:isolate;}.cls-3,.cls-4{fill:#fff;}.cls-3{opacity:0.2;}.cls-5{fill:#c30d23;}</style><linearGradient id="未命名的渐变_2" x1="-948.92" y1="1698.32" x2="-948.31" y2="1699.33" gradientTransform="matrix(174.47, 0, 0, -174.47, 165599.73, 296506.15)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#c30d23"/><stop offset="1" stop-color="#dd364a"/></linearGradient><linearGradient id="未命名的渐变_5" x1="131.37" y1="115.54" x2="177.6" y2="174.65" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ffc6cd"/><stop offset="1" stop-color="#e83a4f"/></linearGradient></defs><title>1-产品介绍</title><g id="图层_2" data-name="图层 2"><g id="图层_1-2" data-name="图层 1"><path class="cls-1" d="M102.24,0c137.31,6.2,135.34,200.13,0,205.39C-35.07,199.19-33.09,5.26,102.24,0Z"/><path class="cls-2" d="M110,204.86C34.91,173.61,47.38,51.24,143.18,47.6c24,1.1,42.66,9.34,56.06,21.59C217.65,125.73,187.49,197.43,110,204.86Z"/><path class="cls-3" d="M.15,108.59C-2.09,65.72,20.91,21.49,68.66,5.83,79.64,49,56.45,100.76.15,108.59Z"/><path class="cls-4" d="M145,43.73A66.72,66.72,0,0,0,37.76,109.6c2.59,12.15,1.3,30.1-2,45.2a7,7,0,0,0,6.82,8.65c.08,0,1.43-.22,1.43-.22,15.63-3.11,35.1-5.24,44.87-2.39A50.49,50.49,0,0,0,103,162.35,66.72,66.72,0,0,0,145,43.73Zm-35.29,73H74.54a5.27,5.27,0,1,1,0-10.53h35.12a5.27,5.27,0,1,1,0,10.53ZM130.73,88.6H74.54a5.27,5.27,0,0,1,0-10.54h56.19a5.27,5.27,0,1,1,0,10.54Z"/><path class="cls-5" d="M114.93,111.43a5.26,5.26,0,0,1-5.27,5.26H74.54a5.27,5.27,0,1,1,0-10.53h35.12A5.27,5.27,0,0,1,114.93,111.43Z"/><path class="cls-5" d="M136,83.33a5.27,5.27,0,0,1-5.27,5.27H74.54a5.27,5.27,0,0,1,0-10.54h56.19A5.27,5.27,0,0,1,136,83.33Z"/></g></g></svg>

BIN
src/packages/mobile/assets/icons/friend.png


BIN
src/packages/mobile/assets/icons/futures.png


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
src/packages/mobile/assets/icons/generalize.svg


BIN
src/packages/mobile/assets/icons/gold.png


BIN
src/packages/mobile/assets/icons/goods.png


+ 0 - 1
src/packages/mobile/assets/icons/htzr.svg

@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 204.49 205.39"><defs><style>.cls-1,.cls-2,.cls-3{fill-rule:evenodd;}.cls-1{fill:url(#未命名的渐变_2);}.cls-2{opacity:0.5;fill:url(#未命名的渐变_5);}.cls-2,.cls-3{isolation:isolate;}.cls-3,.cls-4{fill:#fff;}.cls-3{opacity:0.2;}</style><linearGradient id="未命名的渐变_2" x1="-1233.09" y1="1692.07" x2="-1232.49" y2="1693.08" gradientTransform="matrix(174.47, 0, 0, -174.47, 215179.21, 295416.49)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#c30d23"/><stop offset="1" stop-color="#dd364a"/></linearGradient><linearGradient id="未命名的渐变_5" x1="131.37" y1="115.54" x2="177.6" y2="174.65" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ffc6cd"/><stop offset="1" stop-color="#e83a4f"/></linearGradient></defs><title>1-合同转让</title><g id="图层_2" data-name="图层 2"><g id="图层_1-2" data-name="图层 1"><path class="cls-1" d="M102.24,0c137.31,6.2,135.34,200.13,0,205.39C-35.07,199.19-33.09,5.26,102.24,0Z"/><path class="cls-2" d="M110,204.86C34.91,173.61,47.38,51.24,143.18,47.6c24,1.1,42.66,9.34,56.06,21.59C217.65,125.73,187.49,197.43,110,204.86Z"/><path class="cls-3" d="M.15,108.59C-2.09,65.72,20.91,21.49,68.66,5.83,79.64,49,56.45,100.76.15,108.59Z"/><rect class="cls-4" x="66.42" y="42.99" width="71.65" height="119.41" rx="13.32"/><path class="cls-4" d="M160.11,62.28h0A10.41,10.41,0,0,0,149.7,72.69V135a10.41,10.41,0,0,0,10.41,10.41h0A10.41,10.41,0,0,0,170.52,135V72.69A10.41,10.41,0,0,0,160.11,62.28Z"/><path class="cls-4" d="M44.37,62.28A10.41,10.41,0,0,0,34,72.69V135a10.41,10.41,0,0,0,20.82,0V72.69A10.41,10.41,0,0,0,44.37,62.28Z"/></g></g></svg>

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
src/packages/mobile/assets/icons/order.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
src/packages/mobile/assets/icons/ptgz.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
src/packages/mobile/assets/icons/red-envelope.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
src/packages/mobile/assets/icons/schedule.svg


BIN
src/packages/mobile/assets/icons/signin.png


BIN
src/packages/mobile/assets/icons/spot.png


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
src/packages/mobile/assets/icons/statement.svg


BIN
src/packages/mobile/assets/icons/useradd.png


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
src/packages/mobile/assets/icons/wareorder.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
src/packages/mobile/assets/icons/wddj.svg


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
src/packages/mobile/assets/icons/wdrw.svg


BIN
src/packages/mobile/assets/logo.png


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
src/packages/mobile/assets/logo.svg


+ 1 - 1
src/packages/pc/views/footer/goods/order/clear/index.vue

@@ -84,7 +84,7 @@ const onCancelSumit = () => {
             const errMessage: string[] = []
             const selectedRows = props.dataList.filter((e) => {
                 if (formModel.price) {
-                    const flag = e.goodsid === formModel.goodsId && e.buyorsell === BuyOrSell.Buy
+                    const flag = e.goodsid === formModel.goodsId && e.buyorsell === formModel.buyOrSell
                     switch (formModel.buyOrSell) {
                         case BuyOrSell.Buy:
                             return flag && e.orderprice <= formModel.price

+ 32 - 0
src/packages/qdhs/App.vue

@@ -0,0 +1,32 @@
+<template>
+  <router-view />
+</template>
+
+<script lang="ts" setup>
+import { useNavigation } from '@mobile/router/navigation'
+import { dialog } from '@/utils/vant'
+import { useLogin } from '@/business/login'
+import eventBus from '@/services/bus'
+
+const { userLogout } = useLogin()
+const { backHome } = useNavigation()
+
+// 接收用户登出通知
+eventBus.$on('LogoutNotify', (msg) => {
+  userLogout(() => {
+    if (msg) {
+      dialog({
+        message: msg as string,
+        confirmButtonText: '确定'
+      }).then(() => {
+        // ---待处理---
+        // 登出后应该回退到首页,如果回退后非首页,会导致路由拦截而跳转到登录页面,此时因为 tabIndex = 0 的问题,登录页被 replace 成首页,导致路由还能继续后退
+        // 临时解决方案是先退回首页后再进行登出操作
+        backHome()
+      })
+    } else {
+      backHome()
+    }
+  })
+})
+</script>

BIN
src/packages/qdhs/assets/icons/fire.png


BIN
src/packages/qdhs/assets/images/avatar.jpg


BIN
src/packages/qdhs/assets/images/avatar.png


BIN
src/packages/qdhs/assets/images/block-bg.png


BIN
src/packages/qdhs/assets/images/certification.png


BIN
src/packages/qdhs/assets/images/guide-1.png


BIN
src/packages/qdhs/assets/images/guide-2.png


BIN
src/packages/qdhs/assets/images/login-logo.png


+ 14 - 0
src/packages/qdhs/assets/themes/base/animation.less

@@ -0,0 +1,14 @@
+//导航图标动画Demo
+@keyframes icon-scale {
+    0% {
+        transform: scale3d(1.3, 1.3, 1.3);
+    }
+
+    50% {
+        transform: scale3d(.5, .5, .5);
+    }
+
+    100% {
+        transform: scale3d(1, 1, 1);
+    }
+}

+ 77 - 0
src/packages/qdhs/assets/themes/base/mixin-resize.less

@@ -0,0 +1,77 @@
+/*!
+ * ©teamwei.com
+ * author: teamwei
+ * date: 2021-09-07
+ */
+
+
+/* 移动设备 */
+@phone: ~"screen and (max-width: 575px)";
+
+/* 移动设备 (横屏) */
+@phone-h: ~"screen and (min-width: 576px) and (max-width: 767px)";
+
+/* 平板设备 */
+@tablet: ~"screen and (min-width: 768px) and (max-width: 991px)";
+
+/* 电脑设备 */
+@pc: ~"screen and (min-width: 992px)";
+
+/* 
+    根据不同设备适配属性单位
+    @device 设备代码
+*/
+.mixin-property-rules(@property, @value, @device) {
+    @n: length(@value);
+
+    .each(@i, @parent: "") when (@i < @n + 1) {
+        @arg: extract(@value, @i);
+
+        /* 手机 */
+        .ifNumber() when (isnumber(@arg) = true) and (@device = 001) {
+            @child: unit(@arg * 2 / 100, rem);
+        }
+        /* 平板、电脑 */
+        .ifNumber() when (isnumber(@arg) = true) and (@device = 002) {
+            @child: unit(@arg, px);
+        }
+        /* 非数值 */
+        .ifNumber() when (isnumber(@arg) = false) {
+            @child: @arg;
+        }
+
+        .ifNumber();
+        @newValue: ~"@{parent} @{child}";
+
+        .ifLast() when (@i = @n) {
+            @{property}: @newValue;
+        }
+
+        .ifLast();
+        .each(@i + 1, @newValue);
+    }
+
+    .each(1);
+}
+
+.mixin-property(@property, @value) {
+    @media @phone,@phone-h {
+        .mixin-property-rules(@property, @value, 001);
+    }
+
+    @media @pc,@tablet {
+        .mixin-property-rules(@property, @value, 002);
+    }
+}
+
+html {
+    font-size: 14px;
+
+    @media @phone {
+        font-size: ~"calc(100vw / 750 * 100)";
+    }
+
+    @media @phone-h {
+        font-size: ~"calc(100vw / 1344 * 100)";
+    }
+}

+ 149 - 0
src/packages/qdhs/assets/themes/base/mixin.less

@@ -0,0 +1,149 @@
+/*!
+ * ©teamwei.com
+ * author: teamwei
+ * date: 2021-08-28
+ */
+
+@border-color: #eee;
+@arrow-color : #aaa;
+
+/* 移动端1px边框修复 */
+.mixin-border() {
+    position   : relative;
+    line-height: normal;
+
+    &:before {
+        content         : '';
+        position        : absolute;
+        transform-origin: 0 0;
+        box-sizing      : border-box;
+    }
+}
+
+/* 左边框 */
+.mixin-border-left(@width: 1px, @rgb: @border-color, @type: solid) {
+    .mixin-border();
+
+    &:before {
+        top        : 0;
+        bottom     : 0;
+        left       : 0;
+        width      : @width;
+        border-left: @width @type @rgb;
+        transform  : scaleX(0.5);
+    }
+}
+
+/* 右边框 */
+.mixin-border-right(@width: 1px, @rgb: @border-color, @type: solid) {
+    .mixin-border();
+
+    &:before {
+        top         : 0;
+        bottom      : 0;
+        right       : 0;
+        width       : @width;
+        border-right: @width @type @rgb;
+        transform   : scaleX(0.5);
+    }
+}
+
+/* 上边框 */
+.mixin-border-top(@width: 1px, @rgb: @border-color, @type: solid) {
+    .mixin-border();
+
+    &:before {
+        top       : 0;
+        left      : 0;
+        right     : 0;
+        height    : @width;
+        border-top: @width @type @rgb;
+        transform : scaleY(0.5);
+    }
+}
+
+/* 下边框 */
+.mixin-border-bottom(@width: 1px, @rgb: @border-color, @type: solid) {
+    .mixin-border();
+
+    &:before {
+        bottom       : 0;
+        left         : 0;
+        right        : 0;
+        height       : @width;
+        border-bottom: @width @type @rgb;
+        transform    : scaleY(0.5);
+    }
+}
+
+.mixin-arrow() {
+    position    : relative;
+    font-size   : 0;
+    border-style: solid;
+
+    &:after {
+        content     : '';
+        position    : absolute;
+        border-style: solid;
+    }
+}
+
+.mixin-arrow-left(@size: 9px, @color: @arrow-color, @maskcolor: #fff) {
+    .mixin-arrow();
+    border-width: @size @size @size 0;
+    border-color: transparent @color transparent;
+
+    &:after {
+        left        : 2px;
+        top         : -@size;
+        border-width: @size @size @size 0;
+        border-color: transparent @maskcolor transparent;
+    }
+}
+
+.mixin-arrow-right(@size: 9px, @color: @arrow-color, @maskcolor: #fff) {
+    .mixin-arrow();
+    border-width: @size 0 @size @size;
+    border-color: transparent transparent transparent @color;
+
+    &:after {
+        right       : 2px;
+        top         : -@size;
+        border-width: @size 0 @size @size;
+        border-color: transparent transparent transparent @maskcolor;
+    }
+}
+
+.mixin-arrow-up(@size: 9px, @color: @arrow-color, @maskcolor: #fff) {
+    .mixin-arrow();
+    border-width: 0 @size @size;
+    border-color: transparent transparent @color;
+
+    &:after {
+        left        : -@size;
+        top         : 2px;
+        border-width: 0 @size @size;
+        border-color: transparent transparent @maskcolor;
+    }
+}
+
+.mixin-arrow-down(@size: 9px, @color: @arrow-color, @maskcolor: #fff) {
+    .mixin-arrow();
+    border-width: @size @size 0;
+    border-color: @color transparent transparent;
+
+    &:after {
+        left        : -@size;
+        bottom      : 2px;
+        border-width: @size @size 0;
+        border-color: @maskcolor transparent transparent;
+    }
+}
+
+.mixin-text-overflow(@row: 1) {
+    overflow          : hidden;
+    text-overflow     : ellipsis;
+    display           : -webkit-box;
+    -webkit-line-clamp: @row;
+    -webkit-box-orient: vertical;
+}

+ 116 - 0
src/packages/qdhs/assets/themes/base/reset.less

@@ -0,0 +1,116 @@
+@import './animation.less';
+
+* {
+    font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", "Helvetica Neue", STHeiti, "Microsoft Yahei", Tahoma, Simsun, sans-serif;
+    margin: 0;
+    padding: 0;
+    box-sizing: border-box;
+    background-repeat: no-repeat;
+    background-position: center center;
+    background-size: contain;
+    outline: none;
+    -webkit-tap-highlight-color: transparent;
+
+    //-webkit-appearance: none;
+    &::-webkit-input-placeholder {
+        color: #ccc;
+    }
+}
+
+html {
+    height: 100%;
+}
+
+body {
+    position: relative;
+    height: inherit;
+    font-size: .28rem;
+    color: #333;
+    background-color: #666;
+    margin: auto !important;
+    overflow: hidden;
+    -webkit-overflow-scrolling: touch;
+
+    a {
+        text-decoration: none;
+        color: #333;
+
+        &:hover {
+            color: inherit;
+            text-decoration: underline;
+        }
+
+        &:focus {
+            outline: none;
+        }
+    }
+
+    p,
+    label,
+    h1,
+    h2,
+    h3,
+    h4,
+    h5,
+    h6 {
+        margin: 0;
+        font-weight: normal;
+    }
+
+    img {
+        border: 0;
+        max-width: 100%;
+    }
+
+    button,
+    input,
+    textarea,
+    select {
+        line-height: initial;
+        border: 0;
+        background-color: transparent;
+        outline: none;
+
+        &:focus {
+            outline: none;
+        }
+    }
+
+    button {
+        display: inline-flex;
+        justify-content: center;
+        align-items: center;
+        cursor: pointer;
+
+        span {
+            display: inline-block;
+        }
+    }
+
+    input::-webkit-outer-spin-button,
+    input::-webkit-inner-spin-button {
+        -webkit-appearance: none;
+    }
+
+    input[type="number"] {
+        -moz-appearance: textfield;
+    }
+
+    ul,
+    ol,
+    dl {
+        list-style-type: none;
+    }
+}
+
+.app {
+    position: relative;
+    width: 100%;
+    height: 100%;
+    background-color: #fff;
+    overflow-x: hidden;
+    padding-bottom: constant(safe-area-inset-bottom);
+    /* 兼容 iOS<11.2 */
+    padding-bottom: env(safe-area-inset-bottom);
+    /* 兼容iOS>= 11.2 */
+}

+ 10 - 0
src/packages/qdhs/assets/themes/dark/dark.less

@@ -0,0 +1,10 @@
+[theme='dark'] {
+    /* 导航栏 */
+    --navbar-color     : #fff;
+    --navbar-background: #333;
+
+    /* 标签栏 */
+    --tabbar-background : #333;
+    --tabbar-icon       : #fff;
+    --tabbar-icon-active: #dc143c;
+}

+ 70 - 0
src/packages/qdhs/assets/themes/default/default.less

@@ -0,0 +1,70 @@
+:root {
+    /* 字体大小规范 */
+    --font-x-large: 18px;
+    --font-large: 16px;
+    --font-medium: 14px;
+    --font-small: 12px;
+    --font-x-small: 10px;
+
+    /* 颜色规范 */
+    --color-default: #384048;
+    --color-primary: #409EFF;
+    --color-secondary: #04c786;
+    --color-info: #999;
+    --color-border: #eee;
+    --color-up: #ff2b2b;
+    --color-down: #04c786;
+
+    /* 导航栏 */
+    --navbar-height: .88rem;
+    --navbar-color: #fff;
+    --navbar-background: #C30D23;
+    --navbar-backbutton-color: #fff;
+
+    /* 标签栏 */
+    --tabbar-background: #fff;
+    --tabbar-icon: #999;
+    --tabbar-icon-active: #c30d23;
+
+    /* 内容边距 */
+    --content-inset: .24rem;
+
+    /* Vant-Button */
+    --van-button-border-width: 0;
+    --van-button-primary-background: #1e78b9;
+    --van-button-danger-background: #d82d42;
+
+    /* Vant-Checkbox */
+    --van-checkbox-checked-icon-color: #DD364A !important;
+
+    /* Vant-Tabs */
+    --van-tabs-bottom-bar-color: #DD364A;
+
+    --van-dialog-confirm-button-text-color: #DD364A;
+
+    .app-tabs {
+        .tabs {
+            flex-wrap: wrap;
+
+            &-item {
+                display: flex;
+                justify-content: center;
+                align-items: center;
+                color: #626675;
+                cursor: pointer;
+                border-radius: .04rem;
+                background-color: #f0f0f1;
+                padding: .08rem .16rem;
+
+                &:not(:first-child) {
+                    margin-left: .1rem;
+                }
+
+                &.is-active {
+                    color: #222;
+                    font-weight: bold;
+                }
+            }
+        }
+    }
+}

+ 532 - 0
src/packages/qdhs/assets/themes/global/global.less

@@ -0,0 +1,532 @@
+[class*='g-image'] {
+    position: relative;
+    object-fit: cover;
+    overflow: hidden;
+
+    &:before {
+        content: '';
+        position: absolute;
+        left: 0;
+        top: 0;
+        width: 100%;
+        height: 100%;
+        background: #fff url("../../images/avatar.png") no-repeat center;
+        background-size: cover;
+    }
+}
+
+.g-price-up {
+    color: #ff3333;
+}
+
+.g-price-normal {
+    color: #333333;
+}
+
+.g-price-down {
+    color: #0baf1f;
+}
+
+.g-form {
+    &__container {
+        display: flex;
+        flex-direction: column;
+        padding-bottom: .32rem;
+
+        /* 父元素的第一个子元素 */
+        .van-cell-group--inset:first-of-type {
+            margin-top: .32rem;
+        }
+
+        /* 相邻兄弟元素 */
+        .van-cell-group--inset+.van-cell-group--inset {
+            margin-top: .24rem;
+        }
+
+        .van-field {
+            .van-stepper {
+                display: flex;
+                align-items: center;
+                width: 100%;
+
+                &__input {
+                    flex: 1;
+                }
+            }
+        }
+    }
+
+    &__footer {
+        display: flex;
+        align-items: center;
+
+        &:empty {
+            display: none;
+        }
+
+        &.inset {
+            gap: .2rem;
+            padding: .2rem .32rem;
+        }
+    }
+}
+
+.g-flex {
+    display: flex;
+    flex-direction: column;
+    height: 100%;
+
+    &--row {
+        flex-direction: row;
+    }
+
+    &__body {
+        flex: 1;
+        overflow-y: auto;
+        -webkit-overflow-scrolling: touch;
+    }
+
+    &__footer {
+        margin-top: auto;
+    }
+}
+
+.g-color {
+    &--up {
+        color: var(--color-up);
+    }
+
+    &--down {
+        color: var(--color-down);
+    }
+}
+
+.g-block {
+    &--bg {
+        background: #fff url('../../images/block-bg.png') no-repeat center bottom;
+        background-size: 100%;
+    }
+}
+
+/* 导航列表 */
+.g-navmenu {
+    .app-iconfont {
+        height: 100%;
+
+        &__icon {
+            font-size: .32rem;
+            margin-right: .24rem;
+        }
+    }
+}
+
+/* 商品列表 */
+.g-goods-list {
+    padding: .2rem;
+
+    .list {
+        padding: .2rem .2rem 0 .2rem;
+
+        &-item {
+            display: flex;
+            align-items: center;
+            border-radius: .1rem;
+            overflow: hidden;
+            padding: .2rem;
+
+            &:not(:last-child) {
+                margin-bottom: .2rem;
+            }
+
+            .img {
+                &:first-child {
+                    display: flex;
+                    align-items: center;
+
+                    img {
+                        width: 1.8rem;
+                        height: 1.8rem;
+                        object-fit: cover;
+                        border-radius: .16rem;
+                        margin-right: .3rem;
+                    }
+                }
+
+                &:last-child {
+                    .van-button {
+                        width: 1.3rem;
+                        height: .5rem;
+                    }
+                }
+            }
+
+            .info {
+                flex: 1;
+
+                .title {
+                    color: #333;
+                    font-size: .30rem;
+                }
+
+                .desc {
+                    color: #666;
+                    font-size: .24rem;
+                    padding: .1rem 0;
+                }
+
+                .price {
+
+                    .buyprice,
+                    .sellprice {
+                        padding-bottom: .02rem;
+                    }
+                }
+            }
+        }
+    }
+}
+
+.g-goods-waterfall {
+    padding: .2rem;
+
+    .goods {
+        background-color: #fff;
+        border-radius: .12rem;
+        overflow: hidden;
+
+        &-image {
+            display: flex;
+            justify-content: center;
+            align-items: center;
+            min-height: 2.4rem;
+            font-size: 0;
+        }
+
+        &-info {
+            padding: .2rem;
+
+            &__title {
+                font-size: .26rem;
+                margin-bottom: .1rem;
+            }
+
+            &__desc {
+                font-size: .24rem;
+                color: #999;
+                margin-bottom: .1rem;
+            }
+
+            &__price {
+                color: #f2270c;
+
+                .unit {
+                    font-size: .24rem;
+                }
+
+                .integer {
+                    font-size: .3rem;
+                }
+            }
+        }
+    }
+}
+
+/* 订单列表 */
+.g-order-list {
+    padding: .2rem;
+    padding-bottom: 0;
+
+    &__box {
+        &:not(:first-child) {
+            margin-top: .2rem;
+        }
+
+        background-color: #fff;
+        border-radius: .16rem;
+        padding: .24rem;
+
+    }
+
+    &__titlebar {
+        display: flex;
+        justify-content: space-between;
+        margin-bottom: .2rem;
+
+        .left {
+            h4 {
+                font-weight: bold;
+            }
+
+            span {
+                font-size: .24rem;
+                color: #999;
+            }
+        }
+
+        .right {
+            font-size: .24rem;
+            color: #999;
+        }
+    }
+
+    &__content {
+        font-size: .24rem;
+
+        ul {
+            display: flex;
+            flex-wrap: wrap;
+            justify-content: space-between;
+
+            li {
+                display: flex;
+                justify-content: space-between;
+                line-height: .4rem;
+                width: calc(~"50% - .24rem");
+
+                span {
+                    &:first-child {
+                        color: #999;
+                        white-space: nowrap;
+                        padding-right: .24rem;
+                    }
+                }
+            }
+        }
+    }
+
+    &__btnbar {
+        display: flex;
+        justify-content: flex-end;
+        gap: .16rem;
+        margin-top: .2rem;
+
+        .van-button {
+            width: 1.6rem;
+            border-width: 1px;
+        }
+    }
+}
+
+.g-detail {
+    &__buy {
+        background-color: #fff;
+
+        .topic {
+            display: flex;
+            justify-content: space-between;
+            align-items: center;
+            color: #fff;
+            background-image: linear-gradient(to right, #ee0a24, #ff6034);
+            padding: .2rem .24rem;
+
+            &-left {
+                .price-text {
+                    font-size: .24rem;
+                }
+
+                .price-integer {
+                    font-size: .44rem;
+                }
+            }
+
+            &-right {
+                display: flex;
+                flex-direction: column;
+                font-size: .24rem;
+            }
+        }
+
+        .title {
+            font-size: .3rem;
+            font-weight: bold;
+            line-height: .48rem;
+            padding: .24rem;
+            padding-bottom: 0;
+
+            .van-tag {
+                font-weight: normal;
+            }
+
+            span {
+                margin-right: .1rem;
+            }
+        }
+
+        .desc {
+            padding: 0 .24rem;
+        }
+
+        .qty {
+            font-size: .24rem;
+            color: #999;
+            padding: .1rem .24rem 0 .24rem;
+        }
+
+        .info {
+            background-color: #fff;
+            padding: .2rem;
+
+            ul {
+                display: flex;
+                flex-wrap: wrap;
+                font-size: .26rem;
+
+                li {
+                    display: flex;
+                    justify-content: space-between;
+                    width: 50%;
+                    padding: .08rem .24rem;
+
+                    span {
+                        &:first-child {
+                            color: #999;
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    &__desc {
+        background-color: #fff;
+        margin-top: .24rem;
+    }
+
+    &__footer {
+        display: flex;
+        justify-content: space-between;
+        align-items: center;
+        height: .88rem;
+        background-color: #fff;
+
+        .price {
+            padding-left: .32rem;
+
+            &-text,
+            &-unit {
+                font-size: .24rem;
+            }
+
+            &-unit {
+                color: #f2270c;
+            }
+
+            &-integer {
+                font-size: .32rem;
+                color: #f2270c;
+            }
+        }
+
+        .submit {
+            align-self: stretch;
+            display: flex;
+            margin-left: auto;
+
+            &-button {
+                display: flex;
+                justify-content: center;
+                align-items: center;
+                height: 100%;
+                min-width: 2rem;
+                font-weight: bold;
+                color: #fff;
+                padding: 0 .48rem;
+
+                &.warning {
+                    background-image: linear-gradient(to right, #ffd01e, #ff8917);
+                    background-color: #ff8a17;
+                }
+
+                &.danger {
+                    background-image: linear-gradient(to right, #ff6034, #ee0a24);
+                    background-color: #ee270a;
+                }
+            }
+        }
+    }
+}
+
+.g-qty-group {
+    flex: 1;
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+
+    &__stepper {
+        display: flex;
+        align-items: center;
+        gap: .1rem;
+        width: 100%;
+
+        .van-stepper {
+            flex: 1;
+            display: flex;
+
+            &__input {
+                flex: 1;
+            }
+        }
+    }
+
+    .van-radio-group {
+        display: flex;
+        flex-wrap: wrap;
+        width: 100%;
+        margin-top: .2rem;
+    }
+
+    .van-radio {
+        width: calc(~'100% / 3');
+        padding: .04rem;
+        margin-right: 0;
+
+        .van-radio__icon {
+            display: none;
+        }
+
+        &__label {
+            display: block;
+            width: 100%;
+            font-size: .24rem;
+            text-align: center;
+            color: #666;
+            border: 1px solid #e5e5e5;
+            border-radius: .08rem;
+            padding: .04rem;
+            margin-left: 0;
+        }
+
+        &[aria-checked="true"] {
+            .van-radio__label {
+                color: var(--van-radio-checked-icon-color);
+                border-color: var(--van-radio-checked-icon-color);
+            }
+        }
+    }
+}
+
+.van {
+    &-dialog {
+        &__message {
+            font-size: .28rem;
+            line-height: .44rem;
+        }
+    }
+
+    &-tabs {
+        &--list {
+            display: flex;
+            flex-direction: column;
+            height: 100%;
+        }
+
+        &--list &__content {
+            flex: 1;
+            overflow-y: auto;
+
+            .van-tab__panel {
+                height: 100%;
+            }
+        }
+    }
+}

+ 6 - 0
src/packages/qdhs/assets/themes/light/light.less

@@ -0,0 +1,6 @@
+[theme='light'] {
+    /* 导航栏 */
+    --navbar-color           : #333;
+    --navbar-background      : #fff;
+    --navbar-backbutton-color: #666;
+}

+ 5 - 0
src/packages/qdhs/assets/themes/style.less

@@ -0,0 +1,5 @@
+@import './base/reset.less';
+@import './global/global.less';
+@import './default/default.less';
+@import './light/light.less';
+@import './dark/dark.less';

+ 71 - 0
src/packages/qdhs/index.html

@@ -0,0 +1,71 @@
+<!DOCTYPE html>
+<html lang="zh-cn">
+
+<head>
+  <meta charset="utf-8">
+  <meta http-equiv="X-UA-Compatible" content="IE=edge">
+  <meta name="viewport"
+    content="width=device-width,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0,user-scalable=no,viewport-fit=cover">
+  <link rel="icon" href="<%= BASE_URL %>favicon.ico">
+  <title>
+    <%= htmlWebpackPlugin.options.title %>
+  </title>
+  <style>
+    @keyframes app-load {
+      0% {
+        opacity: 1;
+      }
+
+      100% {
+        opacity: 0;
+      }
+    }
+
+    .app-load {
+      display: flex;
+      justify-content: center;
+      align-items: center;
+      gap: 5px;
+      height: 100vh;
+    }
+
+    .app-load span {
+      display: inline-block;
+      width: 8px;
+      height: 8px;
+      border-radius: 50%;
+      background: #ccc;
+      opacity: 0;
+      animation: app-load 600ms ease infinite;
+    }
+
+    .app-load span:nth-child(1) {
+      animation-delay: 100ms;
+    }
+
+    .app-load span:nth-child(2) {
+      animation-delay: 200ms;
+    }
+
+    .app-load span:nth-child(3) {
+      animation-delay: 300ms;
+    }
+  </style>
+</head>
+
+<body>
+  <noscript>
+    <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled.
+        Please enable it to continue.</strong>
+  </noscript>
+  <div id="app" class="app">
+    <div class="app-load">
+      <span></span>
+      <span></span>
+      <span></span>
+    </div>
+  </div>
+  <!-- built files will be auto injected -->
+</body>
+
+</html>

+ 31 - 0
src/packages/qdhs/main.ts

@@ -0,0 +1,31 @@
+import 'core-js'
+import 'regenerator-runtime/runtime'
+import { createApp } from 'vue'
+import App from './App.vue'
+import router from './router'
+import directives from '@/directives' // 自定义指令集
+//import 'default-passive-events'
+import '@/utils/h5plus' // 加载html5+
+import layouts from '@mobile/components/layouts' // 全局布局组件
+import 'vant/lib/index.css'
+import '@mobile/assets/iconfont/iconfont.js'
+import './assets/themes/style.less' // 主题样式
+import { timerInterceptor } from '@/utils/timer'
+import { useGlobalStore } from '@/stores'
+// import Vconsole from 'vconsole'
+// new Vconsole()
+
+const app = createApp(App)
+app.use(router)
+app.use(directives)
+app.use(layouts)
+app.mount('#app')
+
+// 等待 html 加载完成
+document.addEventListener('DOMContentLoaded', () => {
+    const { screenAdapter } = useGlobalStore()
+    // 适配客户端
+    screenAdapter(true)
+    // 监听窗口大小变化
+    window.addEventListener('resize', timerInterceptor.setDebounce(() => screenAdapter(true)))
+}, false)

+ 9 - 0
src/packages/qdhs/postcss.config.js

@@ -0,0 +1,9 @@
+module.exports = {
+    plugins: {
+        // 'postcss-px-to-viewport': {
+        //     viewportWidth: 375,
+        //     landscape: true,
+        //     landscapeWidth: 980,
+        // },
+    },
+}

+ 351 - 0
src/packages/qdhs/router/index.ts

@@ -0,0 +1,351 @@
+import { createWebHashHistory, RouteRecordRaw } from 'vue-router'
+import { useLoginStore } from '@/stores'
+import { clearPending } from '@/services/http/pending'
+import service from '@/services'
+import Page from '@mobile/components/layouts/page/index.vue'
+import animateRouter from '@mobile/router/animateRouter'
+
+const loginStore = useLoginStore()
+
+const routes: Array<RouteRecordRaw> = [
+  {
+    path: '/:pathMatch(.*)*',
+    name: 'error',
+    component: () => import('../views/error/404.vue'),
+    meta: {
+      ignoreAuth: true,
+    },
+  },
+  {
+    path: '/boot',
+    name: 'boot',
+    component: () => import('../views/boot/Index.vue'),
+    meta: {
+      ignoreAuth: true,
+    },
+  },
+  {
+    path: '/',
+    component: Page,
+    children: [
+      {
+        path: '',
+        name: 'home',
+        component: () => import('../views/home/Index.vue'),
+        children: [
+          {
+            path: '',
+            name: 'home-index',
+            component: () => import('../views/home/main/Index.vue'),
+            meta: {
+              ignoreAuth: true,
+            },
+          },
+          {
+            path: '50101',
+            name: 'home-50101',
+            component: () => import('@mobile/views/goods/list/Index.vue'),
+            props: {
+              title: '日清挂牌',
+              marketId: 50101
+            }
+          },
+          {
+            path: '50103',
+            name: 'home-50103',
+            component: () => import('@mobile/views/goods/list/Index.vue'),
+            props: {
+              title: '周清挂牌',
+              marketId: 50103
+            }
+          },
+          {
+            path: '50104',
+            name: 'home-50104',
+            component: () => import('@mobile/views/goods/list/Index.vue'),
+            props: {
+              title: '月清挂牌',
+              marketId: 50104
+            }
+          },
+          {
+            path: 'mine',
+            name: 'home-mine',
+            component: () => import('../views/mine/Index.vue'),
+          }
+        ]
+      },
+    ],
+  },
+  {
+    path: '/user',
+    component: Page,
+    children: [
+      {
+        path: 'login',
+        name: 'user-login',
+        component: () => import('../views/user/login/Index.vue'),
+        meta: {
+          ignoreAuth: true,
+        },
+      },
+      {
+        path: 'register',
+        name: 'user-register',
+        component: () => import('@mobile/views/user/register/Index.vue'),
+        meta: {
+          ignoreAuth: true,
+        },
+      },
+      {
+        path: 'forget',
+        name: 'user-forget',
+        component: () => import('@mobile/views/user/forget/Index.vue'),
+        meta: {
+          ignoreAuth: true,
+        },
+      },
+      {
+        path: 'cancel',
+        name: 'user-cancel',
+        component: () => import('@mobile/views/user/cancel/Index.vue'),
+      },
+      {
+        path: 'password',
+        name: 'user-password',
+        component: () => import('@mobile/views/user/password/Index.vue'),
+      },
+      {
+        path: 'avatar',
+        name: 'user-avatar',
+        component: () => import('@mobile/views/user/avatar/Index.vue'),
+      },
+    ],
+  },
+  {
+    path: '/account',
+    component: Page,
+    children: [
+      {
+        path: 'certification',
+        name: 'account-certification',
+        component: () => import('@mobile/views/account/certification/Index.vue'),
+      },
+    ],
+  },
+  {
+    path: '/news',
+    component: Page,
+    children: [
+      {
+        path: '',
+        name: 'news-list',
+        component: () => import('@mobile/views/news/list/Index.vue'),
+        meta: {
+          ignoreAuth: true,
+        },
+      },
+      {
+        path: 'detail',
+        name: 'news-detail',
+        component: () => import('@mobile/views/news/detail/Index.vue'),
+        meta: {
+          ignoreAuth: true,
+        },
+      },
+    ],
+  },
+  {
+    path: '/goods',
+    component: Page,
+    children: [
+      {
+        path: '',
+        name: 'goods-list',
+        component: () => import('@mobile/views/goods/list/Index.vue'),
+        props: {
+          title: '中远期挂牌',
+          marketId: 50102,
+          showBackButton: true
+        }
+      },
+      {
+        path: 'detail',
+        name: 'goods-detail',
+        component: () => import('@mobile/views/goods/detail/Index.vue'),
+      },
+      {
+        path: 'trade',
+        name: 'goods-trade',
+        component: () => import('@mobile/views/goods/trade/index.vue'),
+      },
+    ],
+  },
+  {
+    path: '/bank',
+    component: Page,
+    children: [
+      {
+        path: 'wallet',
+        name: 'bank-wallet',
+        component: () => import('@mobile/views/bank/wallet/Index.vue'),
+      },
+      {
+        path: 'sign',
+        name: 'bank-sign',
+        component: () => import('@mobile/views/bank/sign/Index.vue'),
+      },
+      {
+        path: 'statement',
+        name: 'bank-statement',
+        component: () => import('@mobile/views/bank/statement/Index.vue'),
+      },
+      {
+        path: 'statement/history',
+        name: 'bank-statement-history',
+        component: () => import('@mobile/views/bank/statement/history/Index.vue'),
+      },
+    ],
+  },
+  {
+    path: '/order',
+    component: Page,
+    children: [
+      {
+        path: 'list',
+        name: 'order-list',
+        component: () => import('../views/order/list/Index.vue'),
+      },
+      {
+        path: 'position',
+        name: 'order-position',
+        component: () => import('../views/order/position/Index.vue'),
+      },
+      {
+        path: 'delivery',
+        name: 'order-delivery',
+        component: () => import('../views/order/delivery/Index.vue'),
+      },
+      {
+        path: 'performance',
+        name: 'order-performance',
+        component: () => import('@mobile/views/order/performance/Index.vue'),
+      },
+    ],
+  },
+  {
+    path: '/mine',
+    component: Page,
+    children: [
+      {
+        path: 'address',
+        name: 'mine-address',
+        component: () => import('@mobile/views/mine/address/Index.vue'),
+      },
+      {
+        path: 'invoice',
+        name: 'mine-invoice',
+        component: () => import('@mobile/views/mine/invoice/Index.vue'),
+      },
+      {
+        path: 'profile',
+        name: 'mine-profile',
+        component: () => import('@mobile/views/mine/profile/Index.vue'),
+      },
+      {
+        path: 'setting',
+        name: 'mine-setting',
+        component: () => import('@mobile/views/mine/setting/Index.vue'),
+      },
+    ],
+  },
+  {
+    path: '/notice',
+    component: Page,
+    children: [
+      {
+        path: '',
+        name: 'notice-list',
+        component: () => import('@mobile/views/notice/list/index.vue'),
+      },
+    ],
+  },
+  {
+    path: '/rules',
+    component: Page,
+    children: [
+      {
+        path: "zcxy",
+        name: "rules-zcxy",
+        component: () => import("@mobile/views/rules/zcxy/Index.vue"),
+        meta: {
+          ignoreAuth: true,
+        },
+      },
+      {
+        path: "yhkhfxgzs",
+        name: "rules-yhkhfxgzs",
+        component: () => import("@mobile/views/rules/fxgzs/Index.vue"),
+        meta: {
+          ignoreAuth: true,
+        },
+      },
+      {
+        path: "yszc",
+        name: "rules-yszc",
+        component: () => import("@mobile/views/rules/yszc/Index.vue"),
+        meta: {
+          ignoreAuth: true,
+        },
+      },
+      {
+        path: "gywm",
+        name: "rules-gywm",
+        component: () => import("@mobile/views/rules/gywm/Index.vue"),
+        meta: {
+          ignoreAuth: true,
+        },
+      },
+      {
+        path: "fwrx",
+        name: "rules-fwrx",
+        component: () => import("@mobile/views/rules/fwrx/Index.vue"),
+        meta: {
+          ignoreAuth: true,
+        },
+      },
+    ]
+  }
+]
+
+const router = animateRouter.create({
+  history: createWebHashHistory(),
+  routes,
+})
+
+// 路由跳转拦截
+router.beforeEach((to, from, next) => {
+  clearPending()
+  // 判断服务是否加载完成
+  if (service.isReady) {
+    if (to.meta.ignoreAuth || loginStore.token) {
+      next()
+    } else {
+      next({
+        name: 'user-login',
+        query: { redirect: to.fullPath },
+      })
+    }
+  } else {
+    if (to.name === 'boot' || to.name === 'user-login') {
+      next()
+    } else {
+      next({
+        name: 'boot',
+        query: { redirect: to.fullPath },
+      })
+    }
+  }
+})
+
+export default router

+ 99 - 0
src/packages/qdhs/views/boot/Index.vue

@@ -0,0 +1,99 @@
+<template>
+  <div class="boot" :style="`background-image: url(${'./app/splashscreen/1080x1920.png'});`">
+    <Swipe class="boot__guide" :loop="false" v-if="state.showGuide">
+      <SwipeItem>
+        <img :src="'./app/splashscreen/1080x1920.png'" />
+      </SwipeItem>
+      <SwipeItem>
+        <img src="../../assets/images/guide-1.png" />
+      </SwipeItem>
+      <SwipeItem>
+        <img src="../../assets/images/guide-2.png" @click="skip(init())" />
+      </SwipeItem>
+    </Swipe>
+  </div>
+</template>
+
+<script lang="ts" setup>
+import { reactive, onUnmounted } from 'vue'
+import { useRoute, useRouter } from 'vue-router'
+import { Swipe, SwipeItem } from 'vant'
+import { showLoading, dialog } from '@/utils/vant'
+import { useLogin } from '@/business/login'
+import service from '@/services'
+import plus from '@/utils/h5plus'
+
+const { logining, initBaseData } = useLogin()
+const route = useRoute()
+const router = useRouter()
+const countdown = 1  // 倒计时秒数
+
+const state = reactive({
+  showGuide: false,
+  //showGuide: (!plus.hasPlus() || localStorage.getItem('muchinfo_app_showguide') === 'false') ? false : true, // 是否显示引导页
+  second: countdown, // 剩余秒数
+  currentRate: 100, // 当前进度
+  rate: 100, // 目标进度
+})
+
+const init = () => initBaseData(true) // 初始化数据
+const onLoad = state.showGuide ? Promise.resolve() : init()
+
+// 倒计时
+const timer = window.setInterval(() => {
+  state.second--
+  state.rate = (100 / countdown) * state.second
+  if (state.second <= 0) {
+    clearInterval(timer)
+    // 判断是否首次打开应用
+    if (!state.showGuide) {
+      skip(onLoad)
+    }
+  }
+}, 1000)
+
+// 跳过广告
+const skip = (promise: Promise<void>) => {
+  clearInterval(timer)
+  const toast = logining.value ? showLoading() : undefined
+
+  promise.then(() => {
+    localStorage.setItem('muchinfo_app_showguide', 'false')
+    const redirect = route.query.redirect
+    if (redirect) {
+      router.replace(redirect.toString())
+    } else {
+      router.replace({ name: 'home-index' })
+    }
+  }).catch((err) => {
+    if (service.isReady) {
+      router.replace({ name: 'home-index' })
+    } else {
+      tryInit(err)
+    }
+  }).finally(() => {
+    toast?.close()
+  })
+}
+
+// 初始化失败重试
+const tryInit = (message: string) => {
+  dialog({
+    message,
+    showCancelButton: plus.hasPlus(),
+    cancelButtonText: '退出',
+    confirmButtonText: '重试'
+  }).then(() => {
+    skip(init())
+  }).catch(() => {
+    plus.quit()
+  })
+}
+
+plus.setFullSreen()
+onUnmounted(() => plus.exitFullSreen())
+</script>
+
+<style lang="less" scoped>
+@import './index.less';
+</style>

+ 19 - 0
src/packages/qdhs/views/boot/index.less

@@ -0,0 +1,19 @@
+.boot {
+    height: 100vh;
+    background-color: #fff;
+    background-repeat: no-repeat;
+    background-position: center top;
+    background-size: cover;
+    overflow: hidden;
+
+    &__guide {
+        width: 100%;
+        height: 100%;
+
+        img {
+            width: 100%;
+            height: 100%;
+            object-fit: contain;
+        }
+    }
+}

Vissa filer visades inte eftersom för många filer har ändrats