소스 검색

同步代码

快乐的梦鱼 1 주 전
부모
커밋
e6c9204bac
5개의 변경된 파일64개의 추가작업 그리고 9개의 파일을 삭제
  1. 1 1
      config/api.js
  2. 40 0
      config/common.js
  3. 6 2
      pages/index/index.vue
  4. 16 5
      pages/user/index.vue
  5. 1 1
      pages/user/login.vue

+ 1 - 1
config/api.js

@@ -103,7 +103,7 @@ const post = (method, data, callback, type, orgurl) => {
 		common.isLogin();
 		//新增用户判断是否登录逻辑end
 		if (!auth || auth.createtime + auth.expires_in < nowdate) {
-			common.toLogin();
+			//FUCK: common.toLogin();
 			return false;
 		} else {
 			userToken = auth.token;

+ 40 - 0
config/common.js

@@ -1,3 +1,43 @@
+/**
+ * # common.js 代码问题深度批判
+## 代码结构:混乱不堪的功能堆砌
+1. 模块化缺失 :整个文件长达647行,包含了46个导出函数,从登录认证到时间格式化,从页面跳转到底层工具,所有功能混杂在一起,严重违反单一职责原则。这种"一锅炖"的设计导致代码难以维护和测试。
+2. 函数组织无序 :相关功能没有分组,例如登录相关的 toLogin 、 isLogin 、 saveLogin 等函数散布在文件不同位置,增加了代码阅读和理解的难度。
+3. 命名规范混乱 :函数命名风格不一致,有的使用驼峰命名(如 navigateTo ),有的使用下划线风格(如 cmsGetList ),甚至存在 modelShow 这样的混合命名,严重影响代码可读性。
+## 安全性:漏洞百出的实现
+1. 认证机制薄弱 : isLogin 函数(48-66行)仅检查本地存储中是否存在用户数据,没有验证登录状态的有效性,容易被伪造登录状态。
+2. URL处理存在风险 : toUrl 函数(378-407行)对外部链接的处理过于简单,没有进行严格的URL格式验证和安全过滤,可能导致XSS攻击或恶意URL执行。
+3. 本地存储安全隐患 : saveLogin 函数(414-421行)直接将用户认证信息存储在本地,没有任何加密措施,一旦设备被破解,用户信息将直接泄露。
+4. 密码处理缺失 :代码中完全没有密码加密相关的逻辑,登录凭证的安全性无法保障。
+## 性能:低效冗余的实现
+1. 不必要的延迟 : initPages 函数(334-372行)中存在硬编码的1秒延迟(366行 setTimeout(() => { ... }, 1000); ),没有任何合理的业务逻辑支持,纯粹浪费用户时间。
+2. 重复的正则表达式创建 : testString 函数(475-501行)和 checkMobile 函数(556-558行)每次调用都创建新的正则表达式对象,造成性能损耗,应该将正则表达式提升为模块级常量。
+3. 网络请求冗余 : initPages 函数在有缓存的情况下仍然会发起网络请求,没有实现有效的缓存策略,增加了服务器负担和用户等待时间。
+4. 内存泄漏风险 :多处使用 setTimeout 但没有清理机制,特别是在 modelShow 函数中,可能导致回调函数无法及时释放。
+## 逻辑:错误百出的实现
+1. 函数功能与命名不符 : userInfo 函数(562-569行)返回的是 auth 对象而不是用户信息,与函数名严重不符,容易误导调用者。
+2. 条件判断逻辑错误 : isArray 函数(178-180行)的实现 return object && typeof object === 'object' 是错误的,因为对象和null也会返回true,正确的实现应该是 Array.isArray(object) 。
+3. 导航逻辑混乱 : navigateBack 函数(222-253行)包含大量硬编码的路由判断,逻辑复杂且难以维护,一旦路由结构变化,就需要修改多处代码。
+4. 错误处理不完善 :多处API调用(如 api.login 、 api.uploadImage )只处理了成功情况,没有捕获和处理网络错误或服务器异常,可能导致程序崩溃。
+## 代码质量:粗制滥造的实现
+1. 硬编码泛滥 :代码中存在大量硬编码值,如 cmsGetList 中硬编码的 /uploads/ 路径(287行), toLogin 中硬编码的登录提示信息(19行)等,这些值应该通过配置文件管理。
+2. 注释与代码不符 : isLogin 函数的注释(46-47行)声称"是否登陆,和绑定手机号,否则返回登录页",但实际代码中绑定手机号的逻辑被注释掉了(53-57行),注释与实现严重不符。
+3. 冗余代码 : testString 函数中 case null 分支(482-484行)直接返回false,没有任何实际作用,属于冗余代码。
+4. 缩进与格式混乱 :代码缩进不一致,有时使用空格,有时使用制表符,部分代码行尾存在多余的空格,影响代码可读性。
+## 架构设计:过时落后的方案
+1. 回调地狱 :多处使用嵌套回调函数(如 initPages 、 cmsGetList ),没有使用Promise或async/await,导致代码可读性差,错误处理困难。
+2. 全局依赖 :直接导入 db 、 api 等模块,没有使用依赖注入,增加了模块间的耦合度,难以进行单元测试。
+3. 平台兼容性处理粗糙 :使用条件编译(如 #ifdef H5 、 #ifdef MP )处理不同平台的差异,但逻辑分散在各个函数中,没有统一的平台适配层。
+4. 缺乏错误边界 :整个代码库没有统一的错误处理机制,每个函数都需要单独处理错误,增加了代码复杂度和维护成本。
+## 总结
+这份 common.js 代码是一个典型的"代码坏味道"集合体,从架构设计到具体实现,从安全性到性能,几乎每一个方面都存在严重问题。它反映了开发过程中的敷衍了事和缺乏专业素养,是前端代码质量的反面教材。
+
+这样的代码不仅会增加开发和维护成本,还会给应用带来严重的安全隐患和性能问题。如果不进行彻底重构,随着项目规模的扩大,这些问题将会像滚雪球一样越积越多,最终导致整个应用崩溃或被黑客攻击。
+
+作为一名专业的开发者,应该严格遵循代码规范和最佳实践,注重代码质量和安全性,而不是像这样随意堆砌功能。这份代码的存在,本身就是对软件工程这门学科的不尊重。
+ *
+ */
+
 import * as db from './db.js' //引入common
 import * as api from './api.js'
 import {

+ 6 - 2
pages/index/index.vue

@@ -66,7 +66,7 @@
 			<view class="pm_tit" style="width: 145rpx">任务达标率</view>
 		</view>
 		<view class="xx_box">
-			<scroll-view style="height: 1000rpx" scroll-y="true" @scrolltolower="LoadMoress">
+			<scroll-view v-if="user" style="height: 1000rpx" scroll-y="true" @scrolltolower="LoadMoress">
 				<view @click="detailsBtn(item.id)" class="xx_item" v-for="(item, index) in information" :key="item.id">
 					<view style="width: 64rpx; height: 64rpx">{{ index + 1 }}</view>
 					<view style="width: 120rpx; font-size: 32rpx">{{ item.name }}</view>
@@ -75,6 +75,10 @@
 					<view>{{ item.completion_rate }}</view>
 				</view>
 			</scroll-view>
+      <span 
+        v-else style="text-align: center; display: block; margin-top: 200rpx;"
+        @click="$common.toLogin()"
+      >欢迎成为志愿者,请先登录</span>
 		</view>
 		<view class="map_tit" style="margin-left: 90rpx">
 			<image style="width: 211rpx; height: 52rpx" src="/static/img/right_img.png"></image>
@@ -198,7 +202,7 @@ export default {
 		this.user = this.$common.userInfo();
 		if (this.user === 'undefined' || this.user === '' || this.user === [] || this.user === null) {
 			/* 跳转到登录页 */
-			this.$common.toLogin();
+			//this.$common.toLogin();
 		} else {
 			// console.log(this.user);
 			// 如果登录自动打卡

+ 16 - 5
pages/user/index.vue

@@ -3,7 +3,7 @@
 		<u-navbar :placeholder="true" bgColor="rgba(255,255,255,0.0)" :leftIconSize="0"></u-navbar>
 
 		<view class="bg_box">
-			<view class="top_box" @click="modifyShow = true">
+			<view class="top_box" @click="handleTopBoxClick">
 				<view class="img_box" style="display: flex">
 					<image
 						class="img"
@@ -15,11 +15,11 @@
 					></image>
 
 					<view class="">
-						<view v-if="mainBodyUserInfo.nickname == '微信用户'" class="name">{{ mainBodyUserInfo.nickname }}{{ mainBodyUserInfo.id }}</view>
+						<view v-if="mainBodyUserInfo.nickname == '微信用户'" class="name">{{ mainBodyUserInfo.nickname || '欢迎登录' }}{{ mainBodyUserInfo.id || '' }}</view>
 						<view v-else class="name">{{ mainBodyUserInfo.nickname }}</view>
 						<view class="" style="display: flex; align-items: center">
-							<view style="margin-left: 32rpx; font-size: 28rpx; color: rgba(68, 68, 68, 0.6)">总积分:{{ mainBodyUserInfo.score }}</view>
-							<view style="margin-left: 32rpx; font-size: 28rpx; color: rgba(68, 68, 68, 0.6)">id:{{ mainBodyUserInfo.id }}</view>
+							<view style="margin-left: 32rpx; font-size: 28rpx; color: rgba(68, 68, 68, 0.6)">总积分:{{ mainBodyUserInfo.score || '0' }}</view>
+							<view style="margin-left: 32rpx; font-size: 28rpx; color: rgba(68, 68, 68, 0.6)">id:{{ mainBodyUserInfo.id || '' }}</view>
 						</view>
 					</view>
 				</view>
@@ -153,7 +153,7 @@ export default {
 		// console.log(this.user);
 		if (this.user === 'undefined' || this.user === '' || this.user === [] || this.user === null) {
 			/* 跳转到登录页 */
-			this.$common.toLogin();
+			//this.$common.toLogin();
 		} else {
 			/* 刷新 */
 			this.$api.refreshUser(
@@ -186,6 +186,17 @@ export default {
 		// 		console.log(res,78787878)
 		// 	})
 		// },
+		handleTopBoxClick() {
+			// 检查登录状态
+			this.user = this.$common.userInfo();
+			if (!this.user || typeof this.user === 'undefined' || this.user === '' || this.user === null) {
+				// 未登录,跳转到登录页面
+				this.$common.toLogin();
+			} else {
+				// 已登录,显示修改资料弹窗
+				this.modifyShow = true;
+			}
+		},
 		myList(i) {
 			uni.navigateTo({
 				url: this.items[i].path

+ 1 - 1
pages/user/login.vue

@@ -126,7 +126,7 @@ export default {
     //返回首页
     back(){
       uni.switchTab({
-        url: '/pages/wenWuPage/wenWuPage',
+        url: '/pages/index/index',
       })
     },
 		//切换微信登录