li.shaoyi 11 月之前
父节点
当前提交
5e52534186
共有 61 个文件被更改,包括 1819 次插入21 次删除
  1. 33 0
      file/深金国际.ai
  2. 27 0
      oem/sjgj/androidPrivacy.json
  3. 二进制
      oem/sjgj/app/icons/1024x1024.png
  4. 二进制
      oem/sjgj/app/icons/120x120.png
  5. 二进制
      oem/sjgj/app/icons/144x144.png
  6. 二进制
      oem/sjgj/app/icons/152x152.png
  7. 二进制
      oem/sjgj/app/icons/167x167.png
  8. 二进制
      oem/sjgj/app/icons/180x180.png
  9. 二进制
      oem/sjgj/app/icons/192x192.png
  10. 二进制
      oem/sjgj/app/icons/20x20.png
  11. 二进制
      oem/sjgj/app/icons/29x29.png
  12. 二进制
      oem/sjgj/app/icons/40x40.png
  13. 二进制
      oem/sjgj/app/icons/58x58.png
  14. 二进制
      oem/sjgj/app/icons/60x60.png
  15. 二进制
      oem/sjgj/app/icons/72x72.png
  16. 二进制
      oem/sjgj/app/icons/76x76.png
  17. 二进制
      oem/sjgj/app/icons/80x80.png
  18. 二进制
      oem/sjgj/app/icons/87x87.png
  19. 二进制
      oem/sjgj/app/icons/96x96.png
  20. 二进制
      oem/sjgj/app/splashscreen/1080x1920.png
  21. 二进制
      oem/sjgj/app/splashscreen/480x853.png
  22. 二进制
      oem/sjgj/app/splashscreen/720x1280.png
  23. 二进制
      oem/sjgj/apple-touch-icon-precomposed.png
  24. 19 0
      oem/sjgj/config/appconfig.json
  25. 1 0
      oem/sjgj/config/columns.json
  26. 二进制
      oem/sjgj/favicon.ico
  27. 二进制
      oem/sjgj/img/login-logo.png
  28. 303 0
      oem/sjgj/manifest.json
  29. 7 0
      script/oem.env.json
  30. 1 0
      src/constants/payment.ts
  31. 5 1
      src/packages/mobile/views/news/list/Index.vue
  32. 21 0
      src/packages/sbyj/assets/images/icons/qrcode.svg
  33. 2 0
      src/packages/sbyj/views/bank/wallet/components/deposit/index.vue
  34. 1 1
      src/packages/sbyj/views/home/main/index.less
  35. 1 2
      src/packages/sbyj/views/inventory/components/logs/index.less
  36. 12 16
      src/packages/sbyj/views/market/detail/index.vue
  37. 1 1
      src/packages/sbyj/views/mine/index.vue
  38. 二进制
      src/packages/sjgj/assets/images/avatar.jpg
  39. 二进制
      src/packages/sjgj/assets/images/avatar.png
  40. 二进制
      src/packages/sjgj/assets/images/block-bg.png
  41. 二进制
      src/packages/sjgj/assets/images/certification.png
  42. 二进制
      src/packages/sjgj/assets/images/guide-1.png
  43. 二进制
      src/packages/sjgj/assets/images/guide-2.png
  44. 0 0
      src/packages/sjgj/assets/images/icons/alipay.svg
  45. 21 0
      src/packages/sjgj/assets/images/icons/qrcode.svg
  46. 0 0
      src/packages/sjgj/assets/images/icons/unionpay.svg
  47. 1 0
      src/packages/sjgj/assets/images/icons/wechatpay.svg
  48. 10 0
      src/packages/sjgj/assets/themes/dark/dark.less
  49. 76 0
      src/packages/sjgj/assets/themes/default/default.less
  50. 487 0
      src/packages/sjgj/assets/themes/global/global.less
  51. 6 0
      src/packages/sjgj/assets/themes/light/light.less
  52. 5 0
      src/packages/sjgj/assets/themes/style.less
  53. 72 0
      src/packages/sjgj/index.html
  54. 35 0
      src/packages/sjgj/main.ts
  55. 10 0
      src/packages/sjgj/postcss.config.js
  56. 395 0
      src/packages/sjgj/router/index.ts
  57. 7 0
      src/packages/sjgj/views/home/index.vue
  58. 141 0
      src/packages/sjgj/views/home/main/index.less
  59. 95 0
      src/packages/sjgj/views/home/main/index.vue
  60. 13 0
      src/packages/sjgj/views/user/login/index.less
  61. 11 0
      src/packages/sjgj/views/user/login/index.vue

文件差异内容过多而无法显示
+ 33 - 0
file/深金国际.ai


+ 27 - 0
oem/sjgj/androidPrivacy.json

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

二进制
oem/sjgj/app/icons/1024x1024.png


二进制
oem/sjgj/app/icons/120x120.png


二进制
oem/sjgj/app/icons/144x144.png


二进制
oem/sjgj/app/icons/152x152.png


二进制
oem/sjgj/app/icons/167x167.png


二进制
oem/sjgj/app/icons/180x180.png


二进制
oem/sjgj/app/icons/192x192.png


二进制
oem/sjgj/app/icons/20x20.png


二进制
oem/sjgj/app/icons/29x29.png


二进制
oem/sjgj/app/icons/40x40.png


二进制
oem/sjgj/app/icons/58x58.png


二进制
oem/sjgj/app/icons/60x60.png


二进制
oem/sjgj/app/icons/72x72.png


二进制
oem/sjgj/app/icons/76x76.png


二进制
oem/sjgj/app/icons/80x80.png


二进制
oem/sjgj/app/icons/87x87.png


二进制
oem/sjgj/app/icons/96x96.png


二进制
oem/sjgj/app/splashscreen/1080x1920.png


二进制
oem/sjgj/app/splashscreen/480x853.png


二进制
oem/sjgj/app/splashscreen/720x1280.png


二进制
oem/sjgj/apple-touch-icon-precomposed.png


+ 19 - 0
oem/sjgj/config/appconfig.json

@@ -0,0 +1,19 @@
+{
+  "appId": "com.muchinfo.sjgj",
+  "appName": "纯金网金银报价结算中心",
+  "version": "1.0.0",
+  "versionCode": "100000",
+  "apiUrl": "http://192.168.31.139:8080/cfg?key=test_139",
+  "tradeChannel": "ws",
+  "modules": [
+    "register",
+    "delivery"
+  ],
+  "quotationProperties": [
+    "holdvolume"
+  ],
+  "registrationCodeRule": 0,
+  "forcedPasswordChange": true,
+  "riskType": 1,
+  "i18nEnabled": false
+}

+ 1 - 0
oem/sjgj/config/columns.json

@@ -0,0 +1 @@
+[]

二进制
oem/sjgj/favicon.ico


二进制
oem/sjgj/img/login-logo.png


+ 303 - 0
oem/sjgj/manifest.json

@@ -0,0 +1,303 @@
+{
+    "@platforms" : [ "android", "iPhone", "iPad" ],
+    "id" : "H5A27263D",
+    /*应用的标识*/
+    "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" : [ "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" ]
+}

+ 7 - 0
script/oem.env.json

@@ -122,6 +122,13 @@
         "VUE_APP_TRADE_CHANNEL": "ws"
     },
     {
+        "VUE_APP_ENV": "sjgj",
+        "VUE_APP_NAME": "纯金网金银报价结算中心",
+        "VUE_APP_ROOT": "src/packages/sjgj/",
+        "VUE_APP_OEM": "oem/sjgj/",
+        "VUE_APP_TRADE_CHANNEL": "ws"
+    },
+    {
         "VUE_APP_ENV": "tc",
         "VUE_APP_NAME": "探茶",
         "VUE_APP_ROOT": "src/packages/tc/",

+ 1 - 0
src/constants/payment.ts

@@ -9,6 +9,7 @@ export enum PayModel {
     UnionPay = 1,  // 银联
     WeChatPay = 2,  // 微信支付
     AliPay = 3,  // 支付宝
+    QRCode = 5,  // 二维码
 }
 
 /**

+ 5 - 1
src/packages/mobile/views/news/list/Index.vue

@@ -1,7 +1,7 @@
 <template>
   <app-view class="news-list" flex>
     <template #header>
-      <app-navbar :title="title" />
+      <app-navbar :title="title" :show-back-button="showBackButton" />
     </template>
     <Tabs v-model:active="currentColumnId" @change="onClickTab">
       <template v-for="(item, index) in siteColumns" :key="index">
@@ -33,6 +33,10 @@ defineProps({
   title: {
     type: String,
     default: i18n.global.t('routes.news')
+  },
+  showBackButton: {
+    type: Boolean,
+    default: true
   }
 })
 

+ 21 - 0
src/packages/sbyj/assets/images/icons/qrcode.svg

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 26.5.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 200 200" style="enable-background:new 0 0 200 200;" xml:space="preserve">
+<style type="text/css">
+	.st0{fill:#7377B8;}
+	.st1{fill:#FFFFFF;}
+</style>
+<path class="st0" d="M100,12.5L100,12.5c58.3,0,87.5,29.2,87.5,87.5l0,0c0,58.3-29.2,87.5-87.5,87.5l0,0
+	c-58.3,0-87.5-29.2-87.5-87.5l0,0C12.5,41.7,41.7,12.5,100,12.5z"/>
+<path class="st1" d="M134.8,154.3v-9.8h-10.1v9.8H134.8L134.8,154.3z M149.8,154.3c2.5,0,4.5-2,4.5-4.5v-5.4h-9.6v9.8L149.8,154.3
+	L149.8,154.3z M85.1,55.5V85H55.5V55.5H85.1L85.1,55.5z M90.5,45.7H50.2c-2.5,0-4.5,2-4.5,4.5v40.3c0,2.5,2,4.5,4.5,4.5h40.3
+	c2.5,0,4.5-2,4.5-4.5V50.2C94.9,47.7,92.9,45.7,90.5,45.7z M65.4,70.3c0,2.7,2.2,4.9,4.9,4.9c2.7,0,4.9-2.2,4.9-4.9
+	c0-2.7-2.2-4.9-4.9-4.9S65.4,67.6,65.4,70.3z M144.5,55.5V85H115V55.5H144.5z M149.8,45.7h-40.3c-2.5,0-4.5,2-4.5,4.5v40.3
+	c0,2.5,2,4.5,4.5,4.5h40.3c2.5,0,4.5-2,4.5-4.5V50.2C154.3,47.7,152.3,45.7,149.8,45.7z M124.8,70.3c0,2.7,2.2,4.9,4.9,4.9
+	s4.9-2.2,4.9-4.9l0,0c0-2.7-2.2-4.9-4.9-4.9S124.8,67.6,124.8,70.3z M85.1,114.9v29.5H55.5v-29.5C55.5,114.9,85.1,114.9,85.1,114.9z
+	 M90.5,105.1H50.2c-2.5,0-4.5,2-4.5,4.5v40.3c0,2.5,2,4.5,4.5,4.5h40.3c2.5,0,4.5-2,4.5-4.5v-40.3C94.9,107.1,92.9,105.1,90.5,105.1
+	L90.5,105.1z M65.4,129.7c0,2.7,2.2,4.9,4.9,4.9c2.7,0,4.9-2.2,4.9-4.9l0,0c0-2.7-2.2-4.9-4.9-4.9C67.6,124.8,65.4,127,65.4,129.7z
+	 M149.8,105.1h-5.5v19.7h-9.8v-19.7h-25c-2.5,0-4.5,2-4.5,4.5v40.3c0,2.5,2,4.5,4.5,4.5h5.4v-29.5h9.8v9.8h29.5v-25.1
+	C154.3,107.1,152.3,105.1,149.8,105.1L149.8,105.1z"/>
+</svg>

+ 2 - 0
src/packages/sbyj/views/bank/wallet/components/deposit/index.vue

@@ -96,6 +96,7 @@ import AppUploader from '@mobile/components/base/uploader/index.vue'
 import WeChatPay from '../../../../../assets/images/icons/wechatpay.svg'
 import AliPay from '../../../../../assets/images/icons/alipay.svg'
 import UnionPay from '../../../../../assets/images/icons/unionpay.svg'
+import QRCode from '../../../../../assets/images/icons/qrcode.svg'
 
 const formRef = shallowRef<FormInstance>()
 const { formData, onSubmit } = useDoDeposit()
@@ -117,6 +118,7 @@ const payModelIcon: { [key: number]: string } = {
     [PayModel.AliPay]: AliPay,
     [PayModel.UnionPay]: UnionPay,
     [PayModel.WeChatPay]: WeChatPay,
+    [PayModel.QRCode]: QRCode,
 }
 
 // 获取所属会员的支付信息

+ 1 - 1
src/packages/sbyj/views/home/main/index.less

@@ -20,7 +20,7 @@
     &__banner {
         position: relative;
         overflow: hidden;
-        padding: 16px;
+        padding: 10px;
         padding-bottom: 0;
 
         &::before {

+ 1 - 2
src/packages/sbyj/views/inventory/components/logs/index.less

@@ -29,7 +29,7 @@
         }
 
         .right {
-            font-size: 12px;
+            font-size: 14px;
             color: #999;
 
             span {
@@ -48,7 +48,6 @@
                 display: flex;
                 align-items: center;
                 line-height: 24px;
-                font-size: 12px;
 
                 label {
                     width: 80px;

+ 12 - 16
src/packages/sbyj/views/market/detail/index.vue

@@ -36,16 +36,17 @@
                         </div>
                     </template>
                 </Field>
-                <Field name="IsAutoAddDeposit" v-if="goods?.canautoadddeposit === 1">
-                    <template #input>
-                        <Checkbox shape="square" icon-size="16px" v-model="IsAutoAddDeposit">允许自动补定金</Checkbox>
+                <Cell name="IsAutoAddDeposit" title="允许自动补定金" v-if="goods?.canautoadddeposit === 1">
+                    <template #right-icon>
+                        <Switch v-model="formData.IsAutoAddDeposit" :active-value="1" :inactive-value="0" :size="24" />
                     </template>
-                </Field>
-                <Field name="IsAutoAddDeposit" v-if="goods?.canautorefunddeposit === 1">
-                    <template #input>
-                        <Checkbox shape="square" icon-size="16px" v-model="IsAutoRefundDeposit">允许自动退定金</Checkbox>
+                </Cell>
+                <Cell name="IsAutoRefundDeposit" title="允许自动补定金" v-if="goods?.canautorefunddeposit === 1">
+                    <template #right-icon>
+                        <Switch v-model="formData.IsAutoRefundDeposit" :active-value="1" :inactive-value="0"
+                            :size="24" />
                     </template>
-                </Field>
+                </Cell>
             </Form>
             <div class="form-submit">
                 <Button type="primary" @click="commit(BuyOrSell.Sell)" block square>我要卖料</Button>
@@ -96,7 +97,7 @@
                         <div class="right" v-if="riskType === 1">
                             <span
                                 :class="selectedRow.tHDetailEx.depositRate <= selectedRow.tHDetailEx.promptDepositRate ? 'g-price-up' : ''">{{
-                parsePercent(selectedRow.tHDetailEx.depositRate) }}</span>
+                                    parsePercent(selectedRow.tHDetailEx.depositRate) }}</span>
                         </div>
                     </div>
                     <div class="g-order-list__content">
@@ -172,7 +173,7 @@
 <script lang="ts" setup>
 import { useOrder } from '@/business/trade'
 import { shallowRef, onMounted, onUnmounted, computed, onActivated, defineAsyncComponent } from 'vue'
-import { Form, Field, Stepper, Button, FieldRule, FormInstance, Radio, RadioGroup, showToast, ActionSheet, Checkbox, Icon } from 'vant'
+import { Form, Field, Stepper, Button, FieldRule, FormInstance, Radio, RadioGroup, showToast, ActionSheet, Cell, Switch, Icon } from 'vant'
 import { useNavigation } from '@mobile/router/navigation'
 import { useGlobalStore, useFuturesStore, useUserStore, useSBYJOrderStore } from '@/stores'
 import { getGoodsUnitName } from '@/constants/unit'
@@ -194,9 +195,6 @@ const globalStore = useGlobalStore()
 const futuresStore = useFuturesStore()
 const userStore = useUserStore()
 
-const IsAutoAddDeposit = shallowRef(false)
-const IsAutoRefundDeposit = shallowRef(false)
-
 const riskType = globalStore.getSystemInfo('riskType') // 风控类型
 const formRef = shallowRef<FormInstance>()
 const goodscode = getQueryString('goodscode') ?? ''
@@ -316,8 +314,6 @@ const onSubmit = () => {
         formData.OperateType = EOrderOperateType.ORDEROPERATETYPE_NORMAL
         formData.BuildType = EBuildType.BUILDTYPE_OPEN
         formData.OrderQty = orderQty.value / agreeunit.value // 数量÷合约乘数
-        formData.IsAutoAddDeposit = IsAutoAddDeposit.value ? 1 : 0
-        formData.IsAutoRefundDeposit = IsAutoRefundDeposit.value ? 1 : 0
 
         fullloading((hideLoading) => {
             formSubmit().then(() => {
@@ -335,7 +331,7 @@ const onSubmit = () => {
 const formRules: { [key in keyof Proto.OrderReq]?: FieldRule[] } = {
     OrderQty: [{
         validator: () => {
-            const qty=orderQty.value
+            const qty = orderQty.value
             if (qty) {
                 const { traderules = [], agreeunit = 0 } = quote.value ?? {}
                 const { ParamValue = 1 } = traderules.find((e) => e.RuleID === 103) ?? {}

+ 1 - 1
src/packages/sbyj/views/mine/index.vue

@@ -58,7 +58,7 @@
                     </ul>
                 </div>
                 <div class="button">
-                    <Button type="danger" size="small" round @click="doInOutMoney('0')">付款</Button>
+                    <Button type="primary" size="small" round @click="doInOutMoney('0')">付款</Button>
                     <Button size="small" round @click="doInOutMoney('1')">收款</Button>
                 </div>
             </div>

二进制
src/packages/sjgj/assets/images/avatar.jpg


二进制
src/packages/sjgj/assets/images/avatar.png


二进制
src/packages/sjgj/assets/images/block-bg.png


二进制
src/packages/sjgj/assets/images/certification.png


二进制
src/packages/sjgj/assets/images/guide-1.png


二进制
src/packages/sjgj/assets/images/guide-2.png


文件差异内容过多而无法显示
+ 0 - 0
src/packages/sjgj/assets/images/icons/alipay.svg


+ 21 - 0
src/packages/sjgj/assets/images/icons/qrcode.svg

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 26.5.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 200 200" style="enable-background:new 0 0 200 200;" xml:space="preserve">
+<style type="text/css">
+	.st0{fill:#7377B8;}
+	.st1{fill:#FFFFFF;}
+</style>
+<path class="st0" d="M100,12.5L100,12.5c58.3,0,87.5,29.2,87.5,87.5l0,0c0,58.3-29.2,87.5-87.5,87.5l0,0
+	c-58.3,0-87.5-29.2-87.5-87.5l0,0C12.5,41.7,41.7,12.5,100,12.5z"/>
+<path class="st1" d="M134.8,154.3v-9.8h-10.1v9.8H134.8L134.8,154.3z M149.8,154.3c2.5,0,4.5-2,4.5-4.5v-5.4h-9.6v9.8L149.8,154.3
+	L149.8,154.3z M85.1,55.5V85H55.5V55.5H85.1L85.1,55.5z M90.5,45.7H50.2c-2.5,0-4.5,2-4.5,4.5v40.3c0,2.5,2,4.5,4.5,4.5h40.3
+	c2.5,0,4.5-2,4.5-4.5V50.2C94.9,47.7,92.9,45.7,90.5,45.7z M65.4,70.3c0,2.7,2.2,4.9,4.9,4.9c2.7,0,4.9-2.2,4.9-4.9
+	c0-2.7-2.2-4.9-4.9-4.9S65.4,67.6,65.4,70.3z M144.5,55.5V85H115V55.5H144.5z M149.8,45.7h-40.3c-2.5,0-4.5,2-4.5,4.5v40.3
+	c0,2.5,2,4.5,4.5,4.5h40.3c2.5,0,4.5-2,4.5-4.5V50.2C154.3,47.7,152.3,45.7,149.8,45.7z M124.8,70.3c0,2.7,2.2,4.9,4.9,4.9
+	s4.9-2.2,4.9-4.9l0,0c0-2.7-2.2-4.9-4.9-4.9S124.8,67.6,124.8,70.3z M85.1,114.9v29.5H55.5v-29.5C55.5,114.9,85.1,114.9,85.1,114.9z
+	 M90.5,105.1H50.2c-2.5,0-4.5,2-4.5,4.5v40.3c0,2.5,2,4.5,4.5,4.5h40.3c2.5,0,4.5-2,4.5-4.5v-40.3C94.9,107.1,92.9,105.1,90.5,105.1
+	L90.5,105.1z M65.4,129.7c0,2.7,2.2,4.9,4.9,4.9c2.7,0,4.9-2.2,4.9-4.9l0,0c0-2.7-2.2-4.9-4.9-4.9C67.6,124.8,65.4,127,65.4,129.7z
+	 M149.8,105.1h-5.5v19.7h-9.8v-19.7h-25c-2.5,0-4.5,2-4.5,4.5v40.3c0,2.5,2,4.5,4.5,4.5h5.4v-29.5h9.8v9.8h29.5v-25.1
+	C154.3,107.1,152.3,105.1,149.8,105.1L149.8,105.1z"/>
+</svg>

文件差异内容过多而无法显示
+ 0 - 0
src/packages/sjgj/assets/images/icons/unionpay.svg


+ 1 - 0
src/packages/sjgj/assets/images/icons/wechatpay.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1733465393133" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10440" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M910.1 317.5l-516 298-3.1 2.1c-4.1 2.1-8.3 3.1-13.5 3.1-11.4 0-20.8-6.2-26-15.6l-2.1-4.1-82-178.7c-1-2.1-1-4.1-1-6.2 0-8.3 6.2-14.6 14.6-14.6 3.1 0 6.2 1 9.3 3.1l96.6 68.6c7.2 4.1 15.6 7.2 24.9 7.2 5.2 0 10.3-1 15.6-3.1l452.8-201.5C799.2 180.4 665.3 118 513.6 118 266.5 118 65 285.3 65 491.9c0 112.1 60.2 213.9 154.7 282.5 7.2 5.2 12.4 14.6 12.4 23.9 0 3.1-1 6.2-2.1 9.3-7.2 28-19.8 73.8-19.8 75.8-1 3.1-2.1 7.2-2.1 11.4 0 8.3 6.2 14.6 14.6 14.6 3.1 0 6.2-1 8.3-3.1l97.6-57.1c7.2-4.1 15.6-7.2 23.9-7.2 4.1 0 9.3 1 13.5 2.1 45.7 13.5 95.6 20.8 146.5 20.8C759.5 864.8 961 697.5 961 491c0-62.4-18.7-121.5-50.9-173.5z" fill="#09BB07" p-id="10441"></path></svg>

+ 10 - 0
src/packages/sjgj/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;
+}

+ 76 - 0
src/packages/sjgj/assets/themes/default/default.less

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

+ 487 - 0
src/packages/sjgj/assets/themes/global/global.less

@@ -0,0 +1,487 @@
+[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 {
+    &-normal {
+        color: #333333;
+    }
+
+    &-up {
+        color: #ff3333;
+    }
+
+    &-down {
+        color: #0baf1f;
+    }
+}
+
+.g-risk {
+    &-green {
+        color: #0baf1f;
+    }
+
+    &-red {
+        color: #ff3333;
+    }
+
+    &-orange {
+        color: orange;
+    }
+
+    &-yellow {
+        color: #ebce12;
+    }
+}
+
+.g-form {
+    &__container {
+        display: flex;
+        flex-direction: column;
+        padding-bottom: 16px;
+
+        /* 父元素的第一个子元素 */
+        .van-cell-group--inset:first-of-type {
+            margin-top: 16px;
+        }
+
+        /* 相邻兄弟元素 */
+        .van-cell-group--inset+.van-cell-group--inset {
+            margin-top: 12px;
+        }
+
+        .van-field {
+            &__right-icon {
+                align-self: normal;
+            }
+
+            .van-stepper {
+                display: flex;
+                align-items: center;
+                width: 100%;
+
+                &__input {
+                    flex: 1;
+                }
+            }
+        }
+    }
+
+    &__footer {
+        display: flex;
+        align-items: center;
+
+        &:empty {
+            display: none;
+        }
+
+        &.inset {
+            gap: 10px;
+            padding: 10px 16px;
+        }
+    }
+}
+
+.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%;
+
+        .g-icon {
+            width: 18px;
+            height: 18px;
+            font-size: 18px;
+        }
+
+        &__label {
+            font-size: 13px;
+            margin-left: 12px
+        }
+    }
+}
+
+/* 商品列表 */
+.g-goods-list {
+    padding: 10px;
+
+    .goods {
+        background-color: #fff;
+        border-radius: 6px;
+        overflow: hidden;
+
+        &-image {
+            display: flex;
+            justify-content: center;
+            align-items: center;
+            min-height: 120px;
+            font-size: 0;
+        }
+
+        &-info {
+            padding: 10px;
+
+            &__title {
+                font-size: 13px;
+                margin-bottom: 5px;
+            }
+
+            &__price {
+                color: #f2270c;
+
+                .unit {
+                    font-size: 12px;
+                }
+
+                .integer {
+                    font-size: 15px;
+                }
+            }
+        }
+    }
+}
+
+/* 订单列表 */
+.g-order-list {
+    padding: 10px;
+    padding-bottom: 0;
+
+    &__box {
+        &:not(:first-child) {
+            margin-top: 10px;
+        }
+
+        background-color: #fff;
+        border-radius: 8px;
+        padding: 12px;
+
+    }
+
+    &__titlebar {
+        display: flex;
+        justify-content: space-between;
+        margin-bottom: 10px;
+
+        .left {
+            h4 {
+                font-weight: bold;
+            }
+
+            span {
+                font-size: 12px;
+                color: #999;
+            }
+        }
+
+        .right {
+            font-size: 12px;
+            color: #999;
+        }
+    }
+
+    &__content {
+        font-size: 12px;
+
+        ul {
+            display: flex;
+            flex-wrap: wrap;
+            justify-content: space-between;
+
+            li {
+                display: flex;
+                justify-content: space-between;
+                line-height: 24px;
+                width: calc(~"50% - 12px");
+
+                span {
+                    &:first-child {
+                        color: #999;
+                        white-space: nowrap;
+                        padding-right: 12px;
+                    }
+                }
+            }
+        }
+    }
+
+    &__btnbar {
+        display: flex;
+        justify-content: flex-end;
+        gap: 8px;
+        margin-top: 10px;
+
+        .van-button {
+            width: 80px;
+            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: 10px 12px;
+
+            &-left {
+                .price-text {
+                    font-size: 14px;
+                }
+
+                .price-integer {
+                    font-size: 22px;
+                }
+            }
+
+            &-right {
+                display: flex;
+                flex-direction: column;
+                font-size: 12px;
+            }
+        }
+
+        .title {
+            font-size: 15px;
+            font-weight: bold;
+            line-height: 24px;
+            padding: 12px;
+            padding-bottom: 0;
+
+            .van-tag {
+                font-weight: normal;
+            }
+
+            span {
+                margin-right: 5px;
+            }
+        }
+
+        .qty {
+            font-size: 12px;
+            color: #999;
+            padding: 5px 12px 0 12px;
+        }
+
+        .info {
+            background-color: #fff;
+            padding: 10px;
+
+            ul {
+                display: flex;
+                flex-wrap: wrap;
+                font-size: 13px;
+
+                li {
+                    display: flex;
+                    justify-content: space-between;
+                    width: 50%;
+                    padding: 4px 12px;
+
+                    span {
+                        &:first-child {
+                            color: #999;
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    &__desc {
+        background-color: #fff;
+        margin-top: 12px;
+    }
+
+    &__footer {
+        display: flex;
+        justify-content: space-between;
+        align-items: center;
+        height: 44px;
+        background-color: #fff;
+
+        .price {
+            padding-left: 16px;
+
+            &-text,
+            &-unit {
+                font-size: 12px;
+            }
+
+            &-unit {
+                color: #f2270c;
+            }
+
+            &-integer {
+                font-size: 16px;
+                color: #f2270c;
+            }
+        }
+
+        .submit {
+            align-self: stretch;
+            display: flex;
+            margin-left: auto;
+
+            &-button {
+                display: flex;
+                justify-content: center;
+                align-items: center;
+                height: 100%;
+                min-width: 100px;
+                font-weight: bold;
+                color: #fff;
+                padding: 0 24px;
+
+                &.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: 5px;
+        width: 100%;
+
+        .van-stepper {
+            flex: 1;
+            display: flex;
+
+            &__input {
+                flex: 1;
+            }
+        }
+    }
+
+    .van-radio-group {
+        display: flex;
+        flex-wrap: wrap;
+        width: 100%;
+        margin-top: 10px;
+    }
+
+    .van-radio {
+        width: calc(~'100% / 4');
+        padding: 2px;
+        margin-right: 0;
+
+        .van-radio__icon {
+            display: none;
+        }
+
+        &__label {
+            display: block;
+            width: 100%;
+            font-size: 12px;
+            text-align: center;
+            color: #666;
+            border: 1px solid #e5e5e5;
+            border-radius: 4px;
+            padding: 2px;
+            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: 14px;
+            line-height: 22px;
+        }
+    }
+
+    &-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/sjgj/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/sjgj/assets/themes/style.less

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

+ 72 - 0
src/packages/sjgj/index.html

@@ -0,0 +1,72 @@
+<!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">
+  <link rel="apple-touch-icon-precomposed" href="<%= BASE_URL %>apple-touch-icon-precomposed.png">
+  <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>

+ 35 - 0
src/packages/sjgj/main.ts

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

+ 10 - 0
src/packages/sjgj/postcss.config.js

@@ -0,0 +1,10 @@
+module.exports = {
+    plugins: {
+        'postcss-px-to-viewport': {
+            viewportWidth: 375,
+            landscape: true, // 是否处理横屏情况
+            landscapeUnit: 'vw', // 横屏时使用的单位
+            landscapeWidth: 844, // 横屏时使用的视口宽度
+        },
+    },
+}

+ 395 - 0
src/packages/sjgj/router/index.ts

@@ -0,0 +1,395 @@
+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('@mobile/views/error/404.vue'),
+    meta: {
+      ignoreAuth: true,
+    },
+  },
+  {
+    path: '/boot',
+    name: 'boot',
+    component: () => import('../../sbyj/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: 'market',
+            name: 'home-market',
+            component: () => import('../../sbyj/views/market/list/index.vue'),
+            meta: {
+              ignoreAuth: true,
+            },
+          },
+          {
+            path: 'news',
+            name: 'home-news',
+            component: () => import('@mobile/views/news/list/Index.vue'),
+            meta: {
+              ignoreAuth: true,
+            },
+            props: {
+              showBackButton: false
+            }
+          },
+          {
+            path: 'mine',
+            name: 'home-mine',
+            component: () => import('../../sbyj/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('../../sbyj/views/account/certification/Index.vue'),
+      },
+      {
+        path: 'authresult',
+        name: 'account-authresult',
+        component: () => import('@mobile/views/account/authresult/Index.vue'),
+      },
+      {
+        path: 'protocol',
+        name: 'account-protocol',
+        component: () => import('../../sbyj/views/account/protocol/Index.vue'),
+      }
+    ],
+  },
+  {
+    path: '/news',
+    component: Page,
+    children: [
+      {
+        path: '',
+        name: 'news-list',
+        component: () => import('@mobile/views/news/list/Index.vue'),
+        meta: {
+          ignoreAuth: true,
+        },
+      },
+    ],
+  },
+  {
+    path: '/market',
+    component: Page,
+    children: [
+      {
+        path: '',
+        name: 'market-list',
+        component: () => import('../../sbyj/views/market/list/index.vue'),
+        meta: {
+          ignoreAuth: true,
+        },
+      },
+      {
+        path: 'detail',
+        name: 'market-detail',
+        component: () => import('../../sbyj/views/market/detail/index.vue'),
+      },
+      {
+        path: 'chart',
+        name: 'market-chart',
+        component: () => import('@mobile/views/market/detail/Index.vue'),
+      },
+    ],
+  },
+  {
+    path: '/bank',
+    component: Page,
+    children: [
+      {
+        path: 'wallet',
+        name: 'bank-wallet',
+        component: () => import('../../sbyj/views/bank/wallet/index.vue'),
+      },
+      {
+        path: 'sign',
+        name: 'bank-sign',
+        component: () => import('@mobile/views/bank/sign/Index.vue'),
+      },
+      {
+        path: 'capital',
+        name: 'bank-capital',
+        component: () => import('@mobile/views/bank/capital/index.vue'),
+      }
+    ]
+  },
+  {
+    path: '/order',
+    component: Page,
+    children: [
+      {
+        path: '',
+        name: 'order-list',
+        component: () => import('../../sbyj/views/order/list/index.vue'),
+      },
+      {
+        path: 'history',
+        name: 'history-list',
+        component: () => import('../../sbyj/views/order/history/index.vue'),
+      },
+      {
+        path: 'close',
+        name: 'close-list',
+        component: () => import('../../sbyj/views/order/close/index.vue'),
+      }
+    ]
+  },
+  {
+    path: '/delivery',
+    component: Page,
+    children: [
+      {
+        path: '',
+        name: 'delivery-list',
+        component: () => import('../../sbyj/views/delivery/index.vue'),
+        props: {
+          title: '交料订单',
+          buyorsell: 1
+        }
+      }
+    ]
+  },
+  {
+    path: '/inventory',
+    component: Page,
+    children: [
+      {
+        path: '',
+        name: 'inventory-list',
+        component: () => import('../../sbyj/views/inventory/index.vue'),
+        props: {
+          title: '我的库存'
+        }
+      }
+    ]
+  },
+  {
+    path: '/pickup',
+    component: Page,
+    children: [
+      {
+        path: '',
+        name: 'pickup-list',
+        component: () => import('../../sbyj/views/delivery/index.vue'),
+        props: {
+          title: '提料订单',
+          buyorsell: 0
+        }
+      }
+    ]
+  },
+  {
+    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: 'wechat',
+        name: 'mine-wechat',
+        component: () => import('@mobile/views/mine/wechat/Index.vue'),
+      },
+      {
+        path: 'email',
+        name: 'mine-email',
+        component: () => import('@mobile/views/mine/email/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 {
+      if (to.matched.some((e) => e.name === 'home')) {
+        // 如果是主页导航页面,强制跳转到首页
+        next({
+          name: 'home-market',
+          replace: true,
+        })
+      } 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

+ 7 - 0
src/packages/sjgj/views/home/index.vue

@@ -0,0 +1,7 @@
+<template>
+  <home-view />
+</template>
+
+<script lang="ts" setup>
+import HomeView from '../../../sbyj/views/home/index.vue'
+</script>

+ 141 - 0
src/packages/sjgj/views/home/main/index.less

@@ -0,0 +1,141 @@
+@import '@mobile/assets/themes/base/mixin.less';
+
+.home-main {
+    &__title {
+        display: flex;
+        flex-direction: column;
+        align-items: center;
+
+        span {
+            &:first-child {
+                font-size: 16px;
+            }
+
+            &:last-child {
+                font-size: 14px;
+            }
+        }
+    }
+
+    &__banner {
+        position: relative;
+        overflow: hidden;
+        padding: 10px;
+        padding-bottom: 0;
+
+        &::before {
+            content: '';
+            width: 140%;
+            height: 150px;
+            position: absolute;
+            left: -20%;
+            top: 0;
+            border-radius: 0 0 50% 50%;
+            background-color: var(--color-primary);
+        }
+
+        .app-banner {
+            position: relative;
+            z-index: 1;
+            border-radius: 10px;
+            overflow: hidden;
+        }
+    }
+
+    &__iconbar {
+        ul {
+            display: flex;
+            flex-wrap: wrap;
+            padding-top: 12px;
+
+            &:last-child {
+                padding-bottom: 12px;
+            }
+
+            li {
+                display: flex;
+                flex-direction: column;
+                align-items: center;
+                width: calc(~'100% / 4');
+                text-align: center;
+
+                .g-icon {
+                    width: 42px;
+                    height: 42px;
+                    font-size: 24px;
+                    color: #fff;
+                    border-radius: 50%;
+                    margin-bottom: 4px;
+
+                    &-quote--line {
+                        background-color: #79b933;
+                    }
+
+                    &-order--line {
+                        background-color: #ff8917;
+                    }
+
+                    &-delivery--line {
+                        background-color: #9d6969;
+                    }
+
+                    &-pickup--line {
+                        background-color: #69869d;
+                    }
+
+                    &-inventory {
+                        background-color: #8b699d;
+                    }
+                }
+            }
+        }
+    }
+
+    &__titlebar {
+        .van-cell__title {
+            display: flex;
+            align-items: center;
+            line-height: 1;
+            font-size: 16px;
+            font-weight: bold;
+
+            img {
+                width: 16px;
+                height: 16px;
+                margin-right: 5px;
+            }
+
+            span {
+                +span {
+                    color: #999;
+                    font-size: 13px;
+                    font-weight: normal;
+                    margin-left: 5px;
+                }
+            }
+        }
+
+        .van-cell__value {
+            flex: none;
+            color: #666;
+        }
+    }
+
+    &__news {
+        .article {
+            &-item {
+                .van-cell__title {
+                    span {
+                        .mixin-text-overflow()
+                    }
+                }
+
+                .van-cell__value {
+                    flex: initial;
+                    font-size: 12px;
+                    margin-left: 24px;
+                }
+            }
+        }
+    }
+}

+ 95 - 0
src/packages/sjgj/views/home/main/index.vue

@@ -0,0 +1,95 @@
+<template>
+  <app-view class="home-main">
+    <template #header>
+      <app-navbar :show-back-button="false">
+        <div class="home-main__title">
+          <span>{{ globalStore.getSystemInfo('appName') }}</span>
+          <span>订单管理系统</span>
+        </div>
+      </app-navbar>
+    </template>
+    <div class="home-main__banner">
+      <Banner :data-list="topBanners" />
+    </div>
+    <PullRefresh class="home-main__container" v-model="refreshing" @refresh="onRefresh">
+      <app-block>
+        <Cell title="通知公告" value="更多" :to="{ name: 'notice-list' }" icon="volume" is-link />
+      </app-block>
+      <app-block class="home-main__iconbar bg">
+        <ul>
+          <li @click="routerTo('home-market', true)">
+            <Iconfont label-direction="bottom" icon="g-icon-quote--line">行情</Iconfont>
+          </li>
+          <li @click="routerTo('order-list')">
+            <Iconfont label-direction="bottom" icon="g-icon-order--line">持有订单</Iconfont>
+          </li>
+          <li @click="routerTo('delivery-list')">
+            <Iconfont label-direction="bottom" icon="g-icon-delivery--line">交料订单</Iconfont>
+          </li>
+          <li @click="routerTo('pickup-list')">
+            <Iconfont label-direction="bottom" icon="g-icon-pickup--line">提料订单</Iconfont>
+          </li>
+        </ul>
+        <ul>
+          <li @click="routerTo('inventory-list')">
+            <Iconfont label-direction="bottom" icon="g-icon-inventory">我的库存</Iconfont>
+          </li>
+        </ul>
+      </app-block>
+      <app-block class="home-main__news">
+        <CellGroup class="article">
+          <Cell class="home-main__titlebar" title="市场资讯" value="更多" icon="fire" @click="routerTo('home-news', true)"
+            is-link />
+          <template v-for="(item, index) in newsList" :key="index">
+            <Cell class="article-item" :title="item.data.content" :value="formatDate(item.time, 'MM/DD')"
+              @click="routerTo('home-news', true)" />
+          </template>
+        </CellGroup>
+      </app-block>
+    </PullRefresh>
+  </app-view>
+</template>
+
+<script lang="ts" setup>
+import { shallowRef } from "vue";
+import { Cell, CellGroup, PullRefresh } from "vant";
+import { formatDate } from "@/filters";
+import { useNavigation } from '@mobile/router/navigation';
+import { queryImageConfigs, getJ10News } from "@/services/api/common";
+import { useGlobalStore } from '@/stores'
+import Banner from '@mobile/components/base/banner/index.vue'
+import Iconfont from '@/components/base/iconfont/index.vue'
+
+const { routerTo } = useNavigation()
+const globalStore = useGlobalStore()
+const refreshing = shallowRef(false) // 是否处于加载中状态
+const topBanners = shallowRef<string[]>([]) // 轮播图列表
+const newsList = shallowRef<Model.J10NewsRsp[]>([]) // 资讯列表
+
+// 下拉刷新
+const onRefresh = () => {
+  queryImageConfigs({
+    data: {
+      imageType: 1,
+    }
+  }).then((res) => {
+    topBanners.value = res.data.map((e) => e.imagepath)
+  })
+  // 市场资讯
+  getJ10News({
+    data: {
+      limit: 10
+    }
+  }).then((res) => {
+    newsList.value = res.data
+  }).finally(() => {
+    refreshing.value = false
+  })
+}
+
+onRefresh()
+</script>
+
+<style lang="less">
+@import "./index.less";
+</style>

+ 13 - 0
src/packages/sjgj/views/user/login/index.less

@@ -0,0 +1,13 @@
+.login {
+    &::before {
+        background: linear-gradient(35deg, #c49430, #c49430);
+    }
+
+    &-logo {
+        padding: 40px 0;
+
+        img {
+            width: 180px;
+        }
+    }
+}

+ 11 - 0
src/packages/sjgj/views/user/login/index.vue

@@ -0,0 +1,11 @@
+<template>
+  <login-view />
+</template>
+
+<script lang="ts" setup>
+import LoginView from '../../../../sbyj/views/user/login/Index.vue'
+</script>
+
+<style lang="less">
+@import './index.less';
+</style>

部分文件因为文件数量过多而无法显示