fly 1 周之前
父节点
当前提交
c6e3908faa
共有 12 个文件被更改,包括 814 次插入671 次删除
  1. 150 29
      package-lock.json
  2. 2 0
      package.json
  3. 二进制
      public/IMG_2299.MP4
  4. 20 2
      src/assets/css/main.css
  5. 201 206
      src/components/FloatService.vue
  6. 50 47
      src/views/Dynamic.vue
  7. 51 56
      src/views/Medical.vue
  8. 4 8
      src/views/Mention.vue
  9. 5 4
      src/views/Profile.vue
  10. 17 3
      src/views/home/index.vue
  11. 0 2
      vue.config.js
  12. 314 314
      yarn.lock

+ 150 - 29
package-lock.json

@@ -1,11 +1,11 @@
 {
-  "name": "红旗资本",
+  "name": "test",
   "version": "0.1.0",
   "lockfileVersion": 3,
   "requires": true,
   "packages": {
     "": {
-      "name": "红旗资本",
+      "name": "test",
       "version": "0.1.0",
       "dependencies": {
         "axios": "^0.19.2",
@@ -31,9 +31,11 @@
         "eslint": "^6.7.2",
         "eslint-plugin-prettier": "^3.1.1",
         "eslint-plugin-vue": "^6.2.2",
+        "file-loader": "^6.2.0",
         "prettier": "^1.19.1",
         "sass": "^1.26.10",
         "sass-loader": "^9.0.2",
+        "url-loader": "^4.1.1",
         "vue-template-compiler": "^2.6.11"
       }
     },
@@ -2380,12 +2382,69 @@
         "ms": "^2.1.1"
       }
     },
+    "node_modules/@vue/cli-service/node_modules/file-loader": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmmirror.com/file-loader/-/file-loader-4.3.0.tgz",
+      "integrity": "sha512-aKrYPYjF1yG3oX0kWRrqrSMfgftm7oJW5M+m4owoldH5C51C0RkIwB++JbRvEW3IU6/ZG5n8UvEcdgwOt2UOWA==",
+      "dev": true,
+      "dependencies": {
+        "loader-utils": "^1.2.3",
+        "schema-utils": "^2.5.0"
+      },
+      "engines": {
+        "node": ">= 8.9.0"
+      },
+      "peerDependencies": {
+        "webpack": "^4.0.0"
+      }
+    },
     "node_modules/@vue/cli-service/node_modules/ms": {
       "version": "2.1.2",
       "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
       "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
       "dev": true
     },
+    "node_modules/@vue/cli-service/node_modules/schema-utils": {
+      "version": "2.7.1",
+      "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-2.7.1.tgz",
+      "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==",
+      "dev": true,
+      "dependencies": {
+        "@types/json-schema": "^7.0.5",
+        "ajv": "^6.12.4",
+        "ajv-keywords": "^3.5.2"
+      },
+      "engines": {
+        "node": ">= 8.9.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/webpack"
+      }
+    },
+    "node_modules/@vue/cli-service/node_modules/url-loader": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmmirror.com/url-loader/-/url-loader-2.3.0.tgz",
+      "integrity": "sha512-goSdg8VY+7nPZKUEChZSEtW5gjbS66USIGCeSJ1OVOJ7Yfuh/36YxCwMi5HVEJh6mqUYOoy3NJ0vlOMrWsSHog==",
+      "dev": true,
+      "dependencies": {
+        "loader-utils": "^1.2.3",
+        "mime": "^2.4.4",
+        "schema-utils": "^2.5.0"
+      },
+      "engines": {
+        "node": ">= 8.9.0"
+      },
+      "peerDependencies": {
+        "file-loader": "*",
+        "webpack": "^4.0.0"
+      },
+      "peerDependenciesMeta": {
+        "file-loader": {
+          "optional": true
+        }
+      }
+    },
     "node_modules/@vue/cli-shared-utils": {
       "version": "4.3.1",
       "resolved": "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-4.3.1.tgz",
@@ -6745,32 +6804,63 @@
       }
     },
     "node_modules/file-loader": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-4.3.0.tgz",
-      "integrity": "sha512-aKrYPYjF1yG3oX0kWRrqrSMfgftm7oJW5M+m4owoldH5C51C0RkIwB++JbRvEW3IU6/ZG5n8UvEcdgwOt2UOWA==",
+      "version": "6.2.0",
+      "resolved": "https://registry.npmmirror.com/file-loader/-/file-loader-6.2.0.tgz",
+      "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==",
       "dev": true,
       "dependencies": {
-        "loader-utils": "^1.2.3",
-        "schema-utils": "^2.5.0"
+        "loader-utils": "^2.0.0",
+        "schema-utils": "^3.0.0"
       },
       "engines": {
-        "node": ">= 8.9.0"
+        "node": ">= 10.13.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/webpack"
       },
       "peerDependencies": {
-        "webpack": "^4.0.0"
+        "webpack": "^4.0.0 || ^5.0.0"
+      }
+    },
+    "node_modules/file-loader/node_modules/json5": {
+      "version": "2.2.3",
+      "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz",
+      "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+      "dev": true,
+      "bin": {
+        "json5": "lib/cli.js"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/file-loader/node_modules/loader-utils": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz",
+      "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
+      "dev": true,
+      "dependencies": {
+        "big.js": "^5.2.2",
+        "emojis-list": "^3.0.0",
+        "json5": "^2.1.2"
+      },
+      "engines": {
+        "node": ">=8.9.0"
       }
     },
     "node_modules/file-loader/node_modules/schema-utils": {
-      "version": "2.6.6",
-      "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.6.tgz",
-      "integrity": "sha512-wHutF/WPSbIi9x6ctjGGk2Hvl0VOz5l3EKEuKbjPlB30mKZUzb9A5k9yEXRX3pwyqVLPvpfZZEllaFq/M718hA==",
+      "version": "3.3.0",
+      "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-3.3.0.tgz",
+      "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
       "dev": true,
       "dependencies": {
-        "ajv": "^6.12.0",
-        "ajv-keywords": "^3.4.1"
+        "@types/json-schema": "^7.0.8",
+        "ajv": "^6.12.5",
+        "ajv-keywords": "^3.5.2"
       },
       "engines": {
-        "node": ">= 8.9.0"
+        "node": ">= 10.13.0"
       },
       "funding": {
         "type": "opencollective",
@@ -13788,21 +13878,25 @@
       }
     },
     "node_modules/url-loader": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-2.3.0.tgz",
-      "integrity": "sha512-goSdg8VY+7nPZKUEChZSEtW5gjbS66USIGCeSJ1OVOJ7Yfuh/36YxCwMi5HVEJh6mqUYOoy3NJ0vlOMrWsSHog==",
+      "version": "4.1.1",
+      "resolved": "https://registry.npmmirror.com/url-loader/-/url-loader-4.1.1.tgz",
+      "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==",
       "dev": true,
       "dependencies": {
-        "loader-utils": "^1.2.3",
-        "mime": "^2.4.4",
-        "schema-utils": "^2.5.0"
+        "loader-utils": "^2.0.0",
+        "mime-types": "^2.1.27",
+        "schema-utils": "^3.0.0"
       },
       "engines": {
-        "node": ">= 8.9.0"
+        "node": ">= 10.13.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/webpack"
       },
       "peerDependencies": {
         "file-loader": "*",
-        "webpack": "^4.0.0"
+        "webpack": "^4.0.0 || ^5.0.0"
       },
       "peerDependenciesMeta": {
         "file-loader": {
@@ -13810,17 +13904,44 @@
         }
       }
     },
+    "node_modules/url-loader/node_modules/json5": {
+      "version": "2.2.3",
+      "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz",
+      "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+      "dev": true,
+      "bin": {
+        "json5": "lib/cli.js"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/url-loader/node_modules/loader-utils": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz",
+      "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
+      "dev": true,
+      "dependencies": {
+        "big.js": "^5.2.2",
+        "emojis-list": "^3.0.0",
+        "json5": "^2.1.2"
+      },
+      "engines": {
+        "node": ">=8.9.0"
+      }
+    },
     "node_modules/url-loader/node_modules/schema-utils": {
-      "version": "2.6.6",
-      "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.6.tgz",
-      "integrity": "sha512-wHutF/WPSbIi9x6ctjGGk2Hvl0VOz5l3EKEuKbjPlB30mKZUzb9A5k9yEXRX3pwyqVLPvpfZZEllaFq/M718hA==",
+      "version": "3.3.0",
+      "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-3.3.0.tgz",
+      "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==",
       "dev": true,
       "dependencies": {
-        "ajv": "^6.12.0",
-        "ajv-keywords": "^3.4.1"
+        "@types/json-schema": "^7.0.8",
+        "ajv": "^6.12.5",
+        "ajv-keywords": "^3.5.2"
       },
       "engines": {
-        "node": ">= 8.9.0"
+        "node": ">= 10.13.0"
       },
       "funding": {
         "type": "opencollective",

+ 2 - 0
package.json

@@ -31,9 +31,11 @@
     "eslint": "^6.7.2",
     "eslint-plugin-prettier": "^3.1.1",
     "eslint-plugin-vue": "^6.2.2",
+    "file-loader": "^6.2.0",
     "prettier": "^1.19.1",
     "sass": "^1.26.10",
     "sass-loader": "^9.0.2",
+    "url-loader": "^4.1.1",
     "vue-template-compiler": "^2.6.11"
   }
 }

二进制
public/IMG_2299.MP4


+ 20 - 2
src/assets/css/main.css

@@ -1,10 +1,28 @@
+/* 只对需要的元素应用 box-sizing,避免全局影响 */
+.profile-container-v3,
+.profile-container-v3 *,
+.asset-card-v4,
+.asset-card-v4 *,
+.section-card-v3,
+.section-card-v3 * {
+	box-sizing: border-box;
+}
+
+/* 为登录页面和其他特定页面提供隔离 */
+.login-container,
+.login-container *,
+.van-cell,
+.van-field,
+.van-button {
+	box-sizing: content-box;
+}
+
+/* 基础重置样式,但不包括 box-sizing */
 * {
 	margin: 0;
 	padding: 0;
-	box-sizing: border-box;
 }
 
-
 /* 主体 */
 
 .tips {

+ 201 - 206
src/components/FloatService.vue

@@ -1,227 +1,222 @@
 <template>
-  <div 
-    class="float-service" 
-    @touchstart="startDrag"
-    @touchmove="onDrag"
-    @touchend="endDrag"
-    @click="handleServiceClick"
-    :style="serviceStyle"
-  >
-    <div class="service-icon">
-      <svg t="1751785432156" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4282" width="24" height="24"><path d="M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64z m0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z" fill="#ffffff" p-id="4283"></path><path d="M464 336h-64c-4.4 0-8 3.6-8 8v384c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V592h56c17.7 0 32 14.3 32 32v104c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V624c0-57.3-46.7-104-104-104h-40V344c0-4.4-3.6-8-8-8z" fill="#ffffff" p-id="4284"></path><path d="M672 464c26.5 0 48-21.5 48-48s-21.5-48-48-48-48 21.5-48 48 21.5 48 48 48z m0 160c26.5 0 48-21.5 48-48s-21.5-48-48-48-48 21.5-48 48 21.5 48 48 48z" fill="#ffffff" p-id="4285"></path></svg>
+    <div 
+      class="float-service" 
+      @touchstart="startDrag"
+      @touchmove="onDrag"
+      @touchend="endDrag"
+      @click="handleServiceClick"
+      :style="serviceStyle"
+    >
+      <div class="service-icon">
+        <svg t="1751785432156" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4282" width="24" height="24"><path d="M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64z m0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z" fill="#ffffff" p-id="4283"></path><path d="M464 336h-64c-4.4 0-8 3.6-8 8v384c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V592h56c17.7 0 32 14.3 32 32v104c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V624c0-57.3-46.7-104-104-104h-40V344c0-4.4-3.6-8-8-8z" fill="#ffffff" p-id="4284"></path><path d="M672 464c26.5 0 48-21.5 48-48s-21.5-48-48-48-48 21.5-48 48 21.5 48 48 48z m0 160c26.5 0 48-21.5 48-48s-21.5-48-48-48-48 21.5-48 48 21.5 48 48 48z" fill="#ffffff" p-id="4285"></path></svg>
+      </div>
+      <div class="service-text">
+        <span>在</span>
+        <span>线</span>
+        <span>客</span>
+        <span>服</span>
+      </div>
     </div>
-    <div class="service-text">
-      <span>在</span>
-      <span>线</span>
-      <span>客</span>
-      <span>服</span>
-    </div>
-  </div>
-</template>
-
-<script>
-export default {
-  name: 'FloatService',
-  data() {
-    return {
-      servicePosition: {
-        x: 0,
-        y: window.innerHeight / 2
-      },
-      isDragging: false,
-      startX: 0,
-      startY: 0,
-      lastValidX: 0,
-      lastValidY: 0,
-      dragStartTime: 0,
-      isDragMove: false
-    }
-  },
-  computed: {
-    serviceStyle() {
+  </template>
+  
+  <script>
+  export default {
+    name: 'FloatService',
+    data() {
       return {
-        transform: `translate(${this.servicePosition.x}px, ${this.servicePosition.y}px)`,
-        transition: this.isDragging ? 'none' : 'all 0.3s ease'
+        servicePosition: {
+          x: 0,
+          y: window.innerHeight / 2
+        },
+        isDragging: false,
+        startX: 0,
+        startY: 0,
+        lastValidX: 0,
+        lastValidY: 0,
+        dragStartTime: 0,
+        isDragMove: false
       }
-    }
-  },
-  methods: {
-    startDrag(event) {
-      this.isDragging = true;
-      this.dragStartTime = Date.now();
-      this.isDragMove = false;
-      const touch = event.touches[0];
-      this.startX = touch.clientX - this.servicePosition.x;
-      this.startY = touch.clientY - this.servicePosition.y;
-      this.lastValidX = this.servicePosition.x;
-      this.lastValidY = this.servicePosition.y;
-      
-      // 阻止默认事件,防止触发click
-      event.preventDefault();
-    },
-    onDrag(event) {
-      if (!this.isDragging) return;
-      this.isDragMove = true;
-      const touch = event.touches[0];
-      
-      // 计算新位置
-      let newX = touch.clientX - this.startX;
-      let newY = touch.clientY - this.startY;
-      
-      // 限制Y轴范围
-      const maxY = window.innerHeight - 100;
-      newY = Math.max(50, Math.min(newY, maxY));
-      
-      // 更新位置
-      this.servicePosition.x = newX;
-      this.servicePosition.y = newY;
-      
-      // 阻止页面滚动
-      event.preventDefault();
     },
-    endDrag(event) {
-      if (!this.isDragging) return;
-      
-      // 如果拖动时间小于200ms且移动距离小于10px,认为是点击
-      const dragTime = Date.now() - this.dragStartTime;
-      const dragDistance = Math.abs(this.servicePosition.x - this.lastValidX) + 
-                         Math.abs(this.servicePosition.y - this.lastValidY);
-      
-      if (dragTime < 200 && dragDistance < 10 && !this.isDragMove) {
-        this.$emit('service-click');
+    computed: {
+      serviceStyle() {
+        return {
+          transform: `translate(${this.servicePosition.x}px, ${this.servicePosition.y}px)`,
+          transition: this.isDragging ? 'none' : 'all 0.3s ease'
+        }
       }
-      
-      this.isDragging = false;
-      this.isDragMove = false;
-      
-      // 计算是否吸附到左边还是右边
-      const windowWidth = window.innerWidth;
-      const halfWidth = windowWidth / 2;
-      
-      // 如果在左半边,吸附到左边,否则吸附到右边
-      // 考虑按钮宽度(22px),确保完全贴边
-      this.servicePosition.x = this.servicePosition.x < halfWidth ? 0 : (windowWidth - 30);
-      
-      // 保存位置
-      localStorage.setItem('servicePosition', JSON.stringify(this.servicePosition));
-      
-      // 阻止默认事件,防止触发click
-      event.preventDefault();
     },
-    handleServiceClick(event) {
-      // 如果是通过触摸操作触发的,忽略click事件
-      if (this.isDragging || this.isDragMove) {
+    methods: {
+      startDrag(event) {
+        this.isDragging = true;
+        this.dragStartTime = Date.now();
+        this.isDragMove = false;
+        const touch = event.touches[0];
+        this.startX = touch.clientX - this.servicePosition.x;
+        this.startY = touch.clientY - this.servicePosition.y;
+        this.lastValidX = this.servicePosition.x;
+        this.lastValidY = this.servicePosition.y;
+        
+        // 阻止默认事件,防止触发click
+        event.preventDefault();
+      },
+      onDrag(event) {
+        if (!this.isDragging) return;
+        this.isDragMove = true;
+        const touch = event.touches[0];
+        
+        // 计算新位置
+        let newX = touch.clientX - this.startX;
+        let newY = touch.clientY - this.startY;
+        
+        // 限制Y轴范围
+        const maxY = window.innerHeight - 100;
+        newY = Math.max(50, Math.min(newY, maxY));
+        
+        // 更新位置
+        this.servicePosition.x = newX;
+        this.servicePosition.y = newY;
+        
+        // 阻止页面滚动
+        event.preventDefault();
+      },
+      endDrag(event) {
+        if (!this.isDragging) return;
+        
+        // 如果拖动时间小于200ms且移动距离小于10px,认为是点击
+        const dragTime = Date.now() - this.dragStartTime;
+        const dragDistance = Math.abs(this.servicePosition.x - this.lastValidX) + 
+                           Math.abs(this.servicePosition.y - this.lastValidY);
+        
+        if (dragTime < 200 && dragDistance < 10 && !this.isDragMove) {
+          this.$emit('service-click');
+        }
+        
+        this.isDragging = false;
+        this.isDragMove = false;
+        
+        // 计算是否吸附到左边还是右边
+        const windowWidth = window.innerWidth;
+        const halfWidth = windowWidth / 2;
+        
+        // 考虑按钮宽度(22px)和padding(5px),确保完全贴边
+        this.servicePosition.x = this.servicePosition.x < halfWidth ? 0 : (windowWidth - 22);
+        
+        // 保存位置
+        localStorage.setItem('servicePosition', JSON.stringify(this.servicePosition));
+        
         event.preventDefault();
-        return;
+      },
+      handleServiceClick(event) {
+        // 如果是通过触摸操作触发的,忽略click事件
+        if (this.isDragging || this.isDragMove) {
+          event.preventDefault();
+          return;
+        }
+        // 只处理非触摸设备的点击
+        if (!('ontouchstart' in window)) {
+          this.$emit('service-click');
+        }
+      },
+      handleResize() {
+        const windowWidth = window.innerWidth;
+        const windowHeight = window.innerHeight;
+        
+        const maxY = windowHeight - 100;
+        this.servicePosition.y = Math.max(50, Math.min(this.servicePosition.y, maxY));
+        
+        // 同样考虑padding
+        this.servicePosition.x = this.servicePosition.x > windowWidth / 2 ? (windowWidth - 32) : 0;
+        
+        localStorage.setItem('servicePosition', JSON.stringify(this.servicePosition));
       }
-      // 只处理非触摸设备的点击
-      if (!('ontouchstart' in window)) {
-        this.$emit('service-click');
+    },
+    mounted() {
+      // 从localStorage获取上次保存的位置
+      const savedPosition = localStorage.getItem('servicePosition');
+      if (savedPosition) {
+        try {
+          const position = JSON.parse(savedPosition);
+          // 确保位置在有效范围内
+          const windowWidth = window.innerWidth;
+          const windowHeight = window.innerHeight;
+          this.servicePosition = {
+            x: position.x > windowWidth / 2 ? windowWidth - 60 : 0,
+            y: Math.max(50, Math.min(position.y, windowHeight - 100))
+          };
+        } catch (e) {
+          console.error('Failed to parse saved position:', e);
+        }
       }
+  
+      // 监听窗口大小变化
+      window.addEventListener('resize', this.handleResize);
     },
-    handleResize() {
-      // 确保按钮在窗口大小改变时仍然可见
-      const windowWidth = window.innerWidth;
-      const windowHeight = window.innerHeight;
-      
-      // 限制Y轴范围
-      const maxY = windowHeight - 100;
-      this.servicePosition.y = Math.max(50, Math.min(this.servicePosition.y, maxY));
-      
-      // 确保X轴吸附正确,考虑按钮宽度
-      this.servicePosition.x = this.servicePosition.x > windowWidth / 2 ? (windowWidth - 22) : 0;
-      
-      // 保存新位置
+    beforeDestroy() {
+      // 保存位置到localStorage
       localStorage.setItem('servicePosition', JSON.stringify(this.servicePosition));
+      window.removeEventListener('resize', this.handleResize);
     }
-  },
-  mounted() {
-    // 从localStorage获取上次保存的位置
-    const savedPosition = localStorage.getItem('servicePosition');
-    if (savedPosition) {
-      try {
-        const position = JSON.parse(savedPosition);
-        // 确保位置在有效范围内
-        const windowWidth = window.innerWidth;
-        const windowHeight = window.innerHeight;
-        this.servicePosition = {
-          x: position.x > windowWidth / 2 ? windowWidth - 60 : 0,
-          y: Math.max(50, Math.min(position.y, windowHeight - 100))
-        };
-      } catch (e) {
-        console.error('Failed to parse saved position:', e);
-      }
-    }
-
-    // 监听窗口大小变化
-    window.addEventListener('resize', this.handleResize);
-  },
-  beforeDestroy() {
-    // 保存位置到localStorage
-    localStorage.setItem('servicePosition', JSON.stringify(this.servicePosition));
-    window.removeEventListener('resize', this.handleResize);
   }
-}
-</script>
-
-<style scoped>
-.float-service {
-  position: fixed;
-  top: 0;
-  left: 0;
-  background-color: #1989fa;
-  border-radius: 20px;
-  padding: 10px 5px;
-  display: flex;
-  flex-direction: column;
-  align-items: center;
-  cursor: pointer;
-  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
-  z-index: 999;
-  touch-action: none;
-  user-select: none;
-  width: 22px;
-}
-
-.service-icon {
-  margin-bottom: 5px;
-  display: flex;
-  justify-content: center;
-  align-items: center;
-}
-
-.service-text {
-  display: flex;
-  flex-direction: column;
-  color: white;
-  font-size: 14px;
-  line-height: 1.5;
-}
-
-.service-text span {
-  display: block;
-  text-align: center;
-  margin: 2px 0;
-}
-
-.float-service:active {
-  background-color: #0e7bfa;
-}
-
-/* 移动端适配 */
-@media (max-width: 375px) {
+  </script>
+  
+  <style scoped>
   .float-service {
-    padding: 8px 4px;
-    width: 40px;
+    position: fixed;
+    top: 0;
+    left: 0;
+    background-color: #1989fa;
+    border-radius: 20px;
+    padding: 10px 5px;
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    cursor: pointer;
+    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
+    z-index: 999;
+    touch-action: none;
+    user-select: none;
+    width: 22px;
   }
   
-  .service-icon svg {
-    width: 20px;
-    height: 20px;
+  .service-icon {
+    margin-bottom: 5px;
+    display: flex;
+    justify-content: center;
+    align-items: center;
   }
   
   .service-text {
-    font-size: 12px;
+    display: flex;
+    flex-direction: column;
+    color: white;
+    font-size: 14px;
+    line-height: 1.5;
+  }
+  
+  .service-text span {
+    display: block;
+    text-align: center;
+    margin: 2px 0;
+  }
+  
+  .float-service:active {
+    background-color: #0e7bfa;
+  }
+  
+  /* 移动端适配 */
+  @media (max-width: 375px) {
+    .float-service {
+      padding: 8px 4px;
+      width: 20px; /* 移动端稍微调小一点 */
+    }
+    
+    .service-icon svg {
+      width: 20px;
+      height: 20px;
+    }
+    
+    .service-text {
+      font-size: 12px;
+    }
   }
-}
-</style> 
+  </style> 

+ 50 - 47
src/views/Dynamic.vue

@@ -55,10 +55,10 @@ export default {
     return {
       rewards: [
         { renshu: 6, title: '邀请6人实名认证', reward: '奖励30积分以及60000元保障金', status: 'not-reached' },
-        { renshu: 15, title: '邀请15人实名认证', reward: '奖励150积分以及150000元保障金', status: 'can-receive' },
-        { renshu: 30, title: '邀请30人实名认证', reward: '奖励300积分以及300000元保障金', status: 'received' },
-        { renshu: 60, title: '邀请60人实名认证', reward: '奖励600积分以及600000元保障金', status: 'can-receive' },
-        { renshu: 150, title: '邀请150人实名认证', reward: '奖励1500积分以及1500000元保障金', status: 'can-receive' }
+        { renshu: 15, title: '邀请15人实名认证', reward: '奖励150积分以及150000元保障金', status: 'not-reached' },
+        { renshu: 30, title: '邀请30人实名认证', reward: '奖励300积分以及300000元保障金', status: 'not-reached' },
+        { renshu: 60, title: '邀请60人实名认证', reward: '奖励600积分以及600000元保障金', status: 'not-reached' },
+        { renshu: 150, title: '邀请150人实名认证', reward: '奖励1500积分以及1500000元保障金', status: 'not-reached' }
       ],
       userInfo: {},
       showAuthDialog: false
@@ -128,37 +128,41 @@ export default {
   min-height: 100vh;
   background: #b94040;
   padding-top: 30px;
-  padding-bottom: 30px;
+  padding-bottom: 100px;
   box-sizing: border-box;
   overflow-y: auto;
   position: relative;
-  padding-bottom: 100px;
+  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
 }
 
 .dynamic-title {
   text-align: center;
-  font-size: 20px;
-  font-weight: bold;
+  font-size: 22px;
+  font-weight: 600;
   color: #b94040;
   background: #fff;
   border-radius: 12px 12px 0 0;
   margin: 0 auto;
   width: 90%;
-  padding: 18px 0 8px 0;
+  padding: 20px 0 10px 0;
+  letter-spacing: 1px;
 }
 
 .dynamic-desc {
   background: #fff;
-  color: #b94040;
+  color: #333;
   font-size: 15px;
-  line-height: 1.7;
+  line-height: 1.8;
   border-radius: 0 0 12px 12px;
   margin: 0 auto 24px auto;
   width: 90%;
-  padding: 12px 18px 18px 18px;
+  padding: 15px 20px 20px 20px;
   word-break: break-all;
   overflow-wrap: break-word;
   box-sizing: border-box;
+  font-weight: 400;
+  text-align: justify;
+  letter-spacing: 0.5px;
 }
 
 .invite-list {
@@ -172,9 +176,9 @@ export default {
   display: flex;
   align-items: center;
   justify-content: space-between;
-  padding: 16px 20px;
+  padding: 18px 22px;
   border-radius: 12px;
-  box-shadow: 0 2px 8px rgba(208,2,27,0.06);
+  box-shadow: 0 2px 12px rgba(208,2,27,0.08);
 }
 
 .invite-info {
@@ -184,27 +188,30 @@ export default {
 }
 
 .invite-title {
-  font-size: 15px;
-  color: #222;
+  font-size: 16px;
+  color: #1a1a1a;
   font-weight: 600;
-  margin-bottom: 6px;
+  margin-bottom: 8px;
+  letter-spacing: 0.5px;
 }
 
 .invite-reward {
   font-size: 14px;
   color: #d0021b;
+  font-weight: 500;
+  letter-spacing: 0.3px;
 }
 
 .btn {
-  min-width: 70px;
-  height: 32px;
+  min-width: 76px;
+  height: 34px;
   border: none;
-  border-radius: 16px;
+  border-radius: 17px;
   font-size: 15px;
   font-weight: 500;
-  padding: 0 18px;
+  padding: 0 20px;
   cursor: pointer;
-  transition: all 0.2s;
+  letter-spacing: 1px;
 }
 
 .btn.not-reached {
@@ -215,12 +222,14 @@ export default {
 .btn.can-receive {
   background: #b94040;
   color: #fff;
+  font-weight: 600;
 }
 
 .btn.received {
   background: #fff;
-  color: #bdbdbd;
-  border: 1px solid #bdbdbd;
+  color: #999;
+  border: 1px solid #e0e0e0;
+  font-weight: normal;
 }
 
 .custom-dialog-mask {
@@ -229,7 +238,7 @@ export default {
   left: 0;
   right: 0;
   bottom: 0;
-  background: rgba(0, 0, 0, 0.6);
+  background: rgba(0, 0, 0, 0.65);
   display: flex;
   align-items: center;
   justify-content: center;
@@ -238,18 +247,18 @@ export default {
 
 .custom-dialog {
   position: relative;
-  width: 280px;
+  width: 300px;
   background: #fff;
-  border-radius: 12px;
-  padding: 20px;
+  border-radius: 16px;
+  padding: 24px;
   text-align: center;
   animation: dialogFadeIn 0.3s ease;
 }
 
 .dialog-icon {
-  width: 60px;
-  height: 60px;
-  margin: 0 auto 16px;
+  width: 64px;
+  height: 64px;
+  margin: 0 auto 20px;
 }
 
 .auth-icon {
@@ -258,9 +267,10 @@ export default {
 }
 
 .dialog-title {
-  font-size: 18px;
-  font-weight: 500;
+  font-size: 20px;
+  font-weight: 600;
   margin-bottom: 12px;
+  letter-spacing: 0.5px;
 }
 
 .auth-title {
@@ -268,33 +278,31 @@ export default {
 }
 
 .dialog-content {
-  font-size: 14px;
+  font-size: 15px;
   color: #666;
   line-height: 1.8;
   margin: 16px 0 24px;
+  letter-spacing: 0.3px;
 }
 
 .dialog-btn {
   width: 100%;
-  height: 40px;
+  height: 44px;
   border: none;
-  border-radius: 20px;
+  border-radius: 22px;
   font-size: 16px;
+  font-weight: 600;
   color: #fff;
   cursor: pointer;
-  transition: all 0.3s ease;
+  letter-spacing: 1px;
 }
 
 .auth-btn {
   background: #1890FF;
 }
 
-.auth-btn:hover {
-  background: #40a9ff;
-}
-
 .auth-dialog {
-  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
+  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.15);
 }
 
 .dialog-close {
@@ -307,11 +315,6 @@ export default {
   align-items: center;
   justify-content: center;
   cursor: pointer;
-  transition: all 0.3s ease;
-}
-
-.dialog-close:hover {
-  transform: rotate(90deg);
 }
 
 .dialog-close .close-icon {

+ 51 - 56
src/views/Medical.vue

@@ -37,7 +37,7 @@
         <!-- 项目头部 -->
         <div class="project-header">
           <span class="project-name">{{ item.title }}</span>
-          <span class="project-shares">获得养老金{{ item.computing_power }}.00元</span>
+          <span class="project-shares">获得养老金{{ Math.floor(item.computing_power) }}元</span>
         </div>
         
         <!-- 项目内容 -->
@@ -51,7 +51,7 @@
               <div class="income-label">每日收益</div>
             </div>
             <div class="amount-info">
-              <div class="amount-value">{{ item.money }}元</div>
+              <div class="amount-value">{{ Math.floor(item.money) }}元</div>
               <div class="amount-label">参与金额</div>
             </div>
           </div>
@@ -102,53 +102,43 @@ export default {
   padding: 20px;
   box-sizing: border-box;
   padding-bottom: 80px;
+  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
 }
 
 /* 顶部信息卡片 */
 .top-info-card {
   background: #fff;
-  border: 2px solid #fff;
-  border-radius: 8px;
-  padding: 15px;
-  margin-bottom: 15px;
+  border: none;
+  border-radius: 12px;
+  padding: 18px;
+  margin-bottom: 18px;
+  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
 }
 
 .desc-text {
-  color: #333;
-  font-size: 14px;
-  line-height: 1.5;
+  color: #1a1a1a;
+  font-size: 15px;
+  line-height: 1.8;
   text-align: justify;
-  font-weight: 700;
-  font-family: auto;
+  font-weight: 500;
+  letter-spacing: 0.3px;
 }
 
 /* 团队奖励卡片 */
 .commission-card {
-  background: linear-gradient(135deg, #fff 0%, #f8f9fa 100%);
-  border-radius: 20px;
-  padding: 16px 20px;
+  background: #fff;
+  border-radius: 12px;
+  padding: 18px 22px;
   margin-bottom: 20px;
   box-shadow: 0 4px 12px rgba(180, 58, 57, 0.15);
-  position: relative;
-}
-
-.commission-card::before {
-  content: '';
-  position: absolute;
-  top: -1px;
-  left: -1px;
-  right: -1px;
-  height: 4px;
-  background: linear-gradient(90deg, #b43a39, #d91d42, #b43a39);
-  border-radius: 20px 20px 0 0;
 }
 
 .commission-content {
   display: flex;
   align-items: center;
   justify-content: space-between;
-  font-size: 12px;
-  font-weight: bold;
+  font-size: 14px;
+  font-weight: 500;
   white-space: nowrap;
 }
 
@@ -160,13 +150,13 @@ export default {
 .reward-icon {
   font-size: 24px;
   margin-right: 8px;
-  animation: pulse 2s ease-in-out infinite;
 }
 
 .reward-label {
   color: #b53b38;
   font-weight: 600;
-  font-size: 16px;
+  font-size: 17px;
+  letter-spacing: 0.5px;
 }
 
 .reward-right {
@@ -183,22 +173,20 @@ export default {
 }
 
 .reward-level {
-  color: #666;
-  font-size: 11px;
+  color: #4a4a4a;
+  font-size: 13px;
   font-weight: 500;
-  margin-bottom: 2px;
+  margin-bottom: 4px;
 }
 
 .reward-percent {
-  background: linear-gradient(135deg, #b43a39, #d91d42);
+  background: #b43a39;
   color: #fff;
-  padding: 2px 8px;
+  padding: 3px 10px;
   border-radius: 12px;
-  font-size: 12px;
-  font-weight: bold;
+  font-size: 13px;
+  font-weight: 600;
   min-width: 32px;
-  box-shadow: 0 2px 4px rgba(180, 58, 57, 0.3);
-  transition: all 0.2s ease;
 }
 
 .reward-percent:hover {
@@ -219,35 +207,38 @@ export default {
 .project-item {
   background: #fff;
   border-radius: 12px;
-  margin-bottom: 15px;
+  margin-bottom: 16px;
   overflow: hidden;
+  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
 }
 
 .project-header {
   background: #d91d42;
   color: #fff;
-  padding: 5px 20px;
+  padding: 10px 20px;
   display: flex;
   justify-content: space-between;
   align-items: center;
 }
 
 .project-name {
-  font-size: 16px;
-  font-weight: bold;
+  font-size: 17px;
+  font-weight: 600;
+  letter-spacing: 0.5px;
 }
 
 .project-shares {
-  font-size: 14px;
-  color: #e6f11c;
+  font-size: 15px;
+  color: #fff;
+  font-weight: 500;
 }
 
 .project-content {
-  padding: 2px;
+  padding: 15px;
   display: flex;
   align-items: center;
   justify-content: space-between;
-  gap: 16px;
+  gap: 4px;
 }
 
 .project-image {
@@ -260,7 +251,6 @@ export default {
   border-radius: 12px;
   object-fit: cover;
   border: 2px solid #f0f0f0;
-  transition: all 0.3s ease;
 }
 
 .project-img:hover {
@@ -281,27 +271,28 @@ export default {
 }
 
 .income-rate, .amount-value {
-  font-size: 20px;
-  font-weight: bold;
-  color: #333;
-  margin-bottom: 5px;
+  font-size: 22px;
+  font-weight: 600;
+  color: #1a1a1a;
+  margin-bottom: 6px;
 }
 
 .income-label, .amount-label {
   font-size: 14px;
   color: #666;
+  font-weight: 500;
 }
 
 .join-btn {
   background: #d91d42;
   color: #fff;
   border: none;
-  padding: 5px 7px;
+  padding: 8px 16px;
   border-radius: 20px;
-  font-size: 14px;
-  font-weight: bold;
+  font-size: 15px;
+  font-weight: 600;
   cursor: pointer;
-  transition: all 0.3s;
+  letter-spacing: 0.5px;
 }
 
 .join-btn:hover {
@@ -312,4 +303,8 @@ export default {
 .join-btn:active {
   transform: scale(0.95);
 }
+
+.commission-card::before {
+  display: none;
+}
 </style> 

+ 4 - 8
src/views/Mention.vue

@@ -148,8 +148,6 @@ export default {
           return 20;
         case '5':  // dayred
           return 20;
-        case '6':  // guquan
-          return 20;
         default:
           return 20;
       }
@@ -157,16 +155,14 @@ export default {
     availableBalance() {
       switch(this.type) {
         case '1':  
-          return this.userInfo.coins || 0;
+        return this.userInfo.dayred || 0;
         case '2':
-          return this.userInfo.txbt|| 0;
+          return this.userInfo.kjfh|| 0;
         case '3': 
-          return this.userInfo.dyxz || 0;
+          return this.userInfo.coins || 0;
         case '4':  
-          return this.userInfo.dayred || 0;
+          return this.userInfo.score || 0;
         case '5':  
-          return this.userInfo.money || 0;
-        case '6':  
           return this.userInfo.guquan || 0;
         default:
           return 0;

+ 5 - 4
src/views/Profile.vue

@@ -21,8 +21,8 @@
           </div>
         </div>
         <div class="sign-btn" @click="goToSignin">
-          <!-- <img src="@/assets/sign.png" style="width: 60px;height: 50px;" alt="签到" /> -->
-          <span class="sign-btnn">签到有奖</span>
+          <img src="@/assets/sign.png" style="width: 60px;height: 50px;" alt="签到" />
+          <!-- <span class="sign-btnn">签到有奖</span> -->
         </div>
       </div>
     </div>
@@ -387,10 +387,11 @@ export default {
 }
 .label, .value {
   color: #fff;
-  font-size: 14px;
+    font-size: 17px;
+    font-family: ui-serif;
 }
 .sign-btn {
-  background: #ffffff;
+  /* background: #ffffff; */
   border-radius: 20px;
   height: 30px;
   width: 96px;

+ 17 - 3
src/views/home/index.vue

@@ -26,8 +26,22 @@
       </button>
     </div>
 
-    <!-- 轮播图 -->
-    <div class="carousel">
+    <!-- 视频播放 -->
+    <div class="video-container">
+      <video 
+        controls
+        autoplay
+        muted
+        loop
+        style="width: 100%; height: 200px; object-fit: cover; border-radius: 8px;"
+      >
+        <source src="/IMG_2299.MP4" type="video/mp4">
+        您的浏览器不支持 video 标签。
+      </video>
+    </div>
+
+    <!-- 轮播图 (已注释) -->
+    <!-- <div class="carousel">
       <van-swipe
         :autoplay="3000"
         indicator-color="#ed4b39"
@@ -41,7 +55,7 @@
           />
         </van-swipe-item>
       </van-swipe>
-    </div>
+    </div> -->
     
     <!-- 团队奖励部分 -->
     <div class="reward-section">

+ 0 - 2
vue.config.js

@@ -7,9 +7,7 @@ function resolve(dir) {
 module.exports = {
   publicPath: process.env.NODE_ENV === "production" ? "/" : "/",
   chainWebpack: (config) => {
-  
     config.resolve.alias.set("@", resolve("src"));
-  
   },
   configureWebpack: (config) => {
     /* gzip压缩,nginx需要开启gzip*/

文件差异内容过多而无法显示
+ 314 - 314
yarn.lock


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