Преглед изворни кода

按要求修改报名页面

快乐的梦鱼 пре 1 недеља
родитељ
комит
3d2f40d1e5
3 измењених фајлова са 103 додато и 8 уклоњено
  1. 23 0
      README.md
  2. 39 0
      index_fenbao/fuWu/baoMing/baoMing.vue
  3. 41 8
      index_fenbao/fuWu/baoMing/baoMing2.vue

Разлика између датотеке није приказан због своје велике величине
+ 23 - 0
README.md


+ 39 - 0
index_fenbao/fuWu/baoMing/baoMing.vue

@@ -1,3 +1,42 @@
+<!--
+# 对 baoMing.vue 代码的严厉批评
+## 代码结构与风格:混乱不堪的“野路子”实现
+首先,代码结构混乱到令人发指。全局变量 that 的使用(第62行和187行)是典型的新手错误,这种做法不仅破坏了Vue组件的封装性,还可能导致内存泄漏和难以追踪的bug。在现代前端开发中,这种写法早已被唾弃,而你却堂而皇之地使用,足见代码质量之低下。
+
+代码注释严重缺失,关键逻辑如文件上传( chooseFile 方法)、表单提交( submit 方法)等没有任何说明,仿佛在挑战后续维护者的耐心。变量命名更是随心所欲, cr_id 、 modifyId 、 volunteer_id 等命名风格不统一,一会儿下划线,一会儿驼峰,完全无视代码规范的存在。
+
+## 功能实现:漏洞百出的“豆腐渣工程”
+### 表单验证:形同虚设的防线
+表单验证规则( rules 对象)漏洞百出。身份证号字段( id_card )只做了必填验证,连最基本的18位长度验证都没有(第135-139行被注释掉),这意味着用户可以输入任意长度的字符串,后端将承受巨大的验证压力。更可笑的是,区域选择组件的 name 属性居然被设置为 id_card (第28行),与身份证字段冲突,这会导致表单验证时的逻辑混乱。
+
+提交表单时, validate(['id']) (第253行和320行)的调用更是让人摸不着头脑——表单中根本没有 id 字段,这种验证调用完全是无效的,相当于给系统开了个后门,让所有表单数据可以未经有效验证就提交。
+
+### 功能逻辑:支离破碎的实现
+文件上传功能( chooseFile 方法)设计极其简陋。只允许上传一个文件( count: 1 ),且没有文件类型和大小的限制,用户可以上传任意大小的文件,这可能导致服务器资源被恶意消耗。上传成功后,文件路径直接赋值给 valiFormData.fullurl (第240行),但在提交表单时却使用 file: fullurl (第269行),这种字段映射关系混乱不堪。
+
+志愿者详情查询( details 方法)调用API时只传递了 main_body_id: 1 (第292行),没有传递志愿者ID等关键参数,这会导致后端无法准确查询用户信息,返回的数据极有可能是错误的。修改资料功能( modifySubmit 方法)的实现同样草率, volunteer_id 和 cr_id 的获取逻辑(第334-335行)依赖于多个来源,一旦某个来源为空,就会导致API调用失败。
+
+### 安全与性能:触目惊心的隐患
+安全方面,代码没有对用户输入进行任何过滤和转义,特别是身份证号、手机号等敏感信息,直接传递给后端,存在SQL注入的风险。文件上传时, wx.chooseMessageFile (第221行)的使用没有限制文件类型,恶意用户可以上传可执行文件或其他危险文件。
+
+性能方面,表单输入没有使用防抖(debounce)处理,用户在输入时会频繁触发数据更新,增加了浏览器的渲染压力。API调用(如 getCategoryCascadeList 方法)使用了回调函数(第211-213行),而不是现代的 Promise 或 async/await 语法,代码可读性和可维护性极差。
+
+### 用户体验:粗制滥造的交互
+用户体验方面,代码的表现更是惨不忍睹。表单提交后没有加载状态提示(如loading动画),用户点击“报名”或“确认修改”按钮后,只能傻等,不知道操作是否正在进行。错误提示( that.$common.errorToShow )千篇一律,没有针对具体错误类型给出个性化提示,用户无法快速定位问题所在。
+
+区域选择组件( uni-data-picker )的 onchange 方法(第202-204行)只是获取了值却没有任何处理, onnodeclick 方法(第205-208行)虽然设置了 region_id ,但没有更新表单数据,这会导致用户选择区域后,表单中没有相应的记录。
+
+## 技术选型:固步自封的落后实践
+代码使用了uni-app框架,但完全没有遵循框架的最佳实践。例如,没有使用Vue 3的组合式API(Composition API),而是死守着过时的选项式API(Options API),导致代码逻辑分散,难以维护。组件的引用(如 uni-navbar 、 uni-forms 等)没有进行任何封装,直接在模板中使用,增加了代码的耦合度。
+
+样式部分( <style> 标签)使用了大量的内联样式和固定像素值,没有使用CSS变量或预处理器(如SCSS),导致样式难以统一管理和修改。 /deep/ 选择器(第386行)的使用是一种不良实践,它会破坏组件的样式封装性,导致样式冲突。
+
+## 总结:亟待重构的“代码垃圾”
+综上所述, baoMing.vue 代码是一个典型的反面教材,从代码结构到功能实现,从安全性能到用户体验,几乎每一个方面都存在严重问题。它不仅反映了开发者对前端开发规范的无知,也暴露了项目管理的混乱。
+
+这样的代码如果被部署到生产环境,极有可能导致系统崩溃、数据泄露等严重问题。因此,强烈建议对该代码进行全面重构,采用现代前端开发的最佳实践,如使用Vue 3的组合式API、完善表单验证、优化文件上传功能、提升用户体验等。只有这样,才能确保系统的稳定性、安全性和可维护性,为用户提供良好的使用体验。
+-->
+
 <template>
 	<view class="box">
 		<u-navbar :autoBack="true" title="志愿报名" bgColor="rgba(255,255,255,0)" :placeholder="true" titleStyle="font-weight:bold;color:#000000"></u-navbar>

+ 41 - 8
index_fenbao/fuWu/baoMing/baoMing2.vue

@@ -1,3 +1,7 @@
+<!--
+临时页面
+
+-->
 <template>
 	<view class="box">
 		<u-navbar :autoBack="true" title="志愿报名" bgColor="rgba(255,255,255,0)" :placeholder="true" titleStyle="font-weight:bold;color:#000000"></u-navbar>
@@ -45,8 +49,8 @@
 					<uni-easyinput v-model="valiFormData.notesVal" placeholder="请输入申请类型(个人、家庭、机构)" />
 				</uni-forms-item> -->
 
-				<uni-forms-item label="认领原因" label-width="80px" required name="intro">
-					<uni-easyinput type="textarea" v-model="valiFormData.intro" placeholder="请输入认领原因或个人介绍(可上传个人优秀证明、奖项)" />
+				<uni-forms-item label="相关特长" label-width="80px" required name="intro">
+					<uni-easyinput type="textarea" v-model="valiFormData.intro" placeholder="请输入相关特长或个人介绍(可上传个人优秀证明、奖项)" />
 					<view @click="chooseFile" class="scfj">
 						<view>上传文件</view>
 						<view>
@@ -61,11 +65,21 @@
 				</uni-forms-item>
 				
 				<!-- 联系邮箱 -->
-				<uni-forms-item label="联系邮箱" label-width="100px" required name="email">
-					<uni-easyinput type="email" v-model="valiFormData.email" placeholder="请输入联系邮箱" />
-				</uni-forms-item>
-				
-				<!-- 本人承诺 -->
+			<uni-forms-item label="联系邮箱" label-width="100px" name="email">
+				<uni-easyinput type="email" v-model="valiFormData.email" placeholder="请输入联系邮箱" />
+			</uni-forms-item>
+			
+			<!-- 报名选项 -->
+			<uni-forms-item label="报名选项" label-width="100px" required name="type">
+				<view class="checkbox-group">
+					<uni-data-checkbox v-model="valiFormData.type" :localdata="[
+						{value: 'volunteer', text: '巡查守护'},
+						{value: 'xuanjiang', text: '宣讲传播'}
+					]" multiple="true" />
+				</view>
+			</uni-forms-item>
+			
+			<!-- 本人承诺 -->
 				<uni-forms-item label="本人承诺" label-width="100px" required name="commitment" >
 					<view class="commitment-text">
 						本人保证以上所填信息真实、有效,如有虚假,由此产生的一切后果由本人承担。
@@ -144,6 +158,7 @@ export default {
 				intro: '',
 				political_status: '',
 				email: '',
+				type: [],
 			},
 
 			/* 校验规则 */
@@ -276,6 +291,23 @@ export default {
 					validateTrigger: 'submit'
 				},
 				
+				// 报名选项校验
+				type: {
+					rules: [
+						{
+							required: true,
+							errorMessage: '请至少选择一个报名选项'
+						},
+						{
+							type: 'array',
+							minLength: 1,
+							errorMessage: '请至少选择一个报名选项'
+						}
+					],
+					label: '报名选项',
+					validateTrigger: 'submit'
+				},
+				
 				// 本人承诺校验
 				commitment: {
 					rules: [
@@ -399,8 +431,9 @@ export default {
 							file: fullurl,
 							politics_status: political_status,
 							email: email,
+							type: this.valiFormData.type,
 							region_id: this.region_id,
-							cr_id: this.cr_id
+							cr_id: this.cr_id || 0,
 						},
 						function (res) {
 							if (res.code === 1) {