sqlite-web 0.7.2
gitea.db
issue
Create
Query
access
access_token
action
action_artifact
action_run
action_run_index
action_run_job
action_runner
action_runner_token
action_schedule
action_schedule_spec
action_task
action_task_output
action_task_step
action_tasks_version
action_variable
app_state
attachment
auth_token
badge
branch
collaboration
comment
commit_status
commit_status_index
commit_status_summary
commit_sync_log
commit_sync_status
dbfs_data
dbfs_meta
deploy_key
email_address
email_hash
external_login_user
follow
gpg_key
gpg_key_import
hook_task
issue
issue_assignees
issue_content_history
issue_dependency
issue_index
issue_label
issue_pin
issue_user
issue_watch
label
language_stat
lfs_lock
lfs_meta_object
login_source
milestone
mirror
notice
notification
oauth2_application
oauth2_authorization_code
oauth2_grant
org_user
package
package_blob
package_blob_upload
package_cleanup_rule
package_file
package_property
package_version
project
project_board
project_issue
protected_branch
protected_tag
public_key
pull_auto_merge
pull_request
push_mirror
reaction
release
renamed_branch
repo_archiver
repo_hidden_file
repo_indexer_status
repo_license
repo_redirect
repo_topic
repo_transfer
repo_unit
repository
review
review_state
secret
session
sqlite_sequence
star
stopwatch
system_setting
task
team
team_invite
team_repo
team_unit
team_user
topic
tracked_time
two_factor
upload
user
user_badge
user_blocking
user_open_id
user_redirect
user_setting
version
watch
webauthn_credential
webhook
Toggle helper tables
Structure
Content
Query
Insert
Drop
Import
Export
Update row 640 in issue
id
Primary key.
INTEGER NOT NULL
repo_id
INTEGER
index
INTEGER
poster_id
INTEGER
original_author
TEXT
original_author_id
INTEGER
name
🔍 代码审查报告:pay-260616 - Merge branch 'pay-260616' of https://gitea.g-hi.co
TEXT
content
## 自动代码审查报告 **分支**: pay-260616 **提交**: `be804c006c02219ec0f21228b9f5ac11d2eb78de` **提交人**: LITTLEMAIDI (11833999+littlemaidi@user.noreply.gitee.com) **时间**: 2026-06-09 16:12:55 --- ## 📋 审查摘要 - **变更文件数**: 10 - **严重问题**: 2 - **高危问题**: 4 - **中危问题**: 3 - **建议优化**: 2 ## 🐛 发现的问题 ### <font color="red">[语法错误] 未定义变量 `qrcode` 导致运行时 ReferenceError</font> - **严重程度**: <font color="red">严重</font> - **文件**: `web/Hi-Zan/Hi-Zan/pages/table-tennis/scan-order/scan-order.js` - **行号**: 约 188 行 - **问题描述**: 在 `openRoomCheckPackageTime` 方法中调用 `this.exchange('qr_code', qrcode)`,变量 `qrcode` 未定义。当前作用域内只有局部参数 `qr_code` 和 `this.data.qr_code`,直接运行将抛出 `ReferenceError: qrcode is not defined` 导致页面崩溃。 - **修复建议**: ```javascript // 修改为: this.exchange('qr_code', this.data.qr_code) ``` ### <font color="red">[语法错误] 函数名拼写错误 `handeleCancel`</font> - **严重程度**: <font color="red">严重</font> - **文件**: `web/Hi-Zan/Hi-Zan/pages/community-reserve/apply-refund/apply-refund.js` - **行号**: 约 38 行 - **问题描述**: 方法名定义为 `handeleCancel()`,存在明显拼写错误(应为 `handleCancel`)。若 WXML 模板中绑定的是标准命名 `bindtap="handleCancel"`,将导致点击事件无法触发,弹窗无法关闭。 - **修复建议**: ```javascript // 将 handeleCancel 重命名为 handleCancel handleCancel() { this.setData({ showConfirm: false }) } ``` ### <font color="red">[跨文件调用] 模块级 WebSocket 变量导致多实例状态污染</font> - **严重程度**: <font color="red">高危</font> - **文件**: `open-result/open-result.js`, `pay-success/pay-success.js` - **行号**: 文件顶部 `let SocketTask = null` / `let socketOpen = false` - **问题描述**: 微信小程序中,模块级变量在页面多次打开、复用或快速切换时会**全局共享**。`SocketTask` 和 `socketOpen` 定义在模块作用域,会导致不同页面实例或多次进入时连接状态混乱、旧连接未正确关闭、内存泄漏或重复触发 `onMessage`。 - **修复建议**: 将 WebSocket 实例移至页面实例属性或 `data` 中,确保生命周期隔离: ```javascript Page({ data: { socketTask: null, socketOpen: false }, // 使用时改为 this.data.socketTask 或 this.socketTask }) ``` ### [逻辑 BUG] `handleConfirm` 复用确认弹窗导致业务逻辑冲突 - **严重程度**: 高危 - **文件**: `order-list/order-list.js` - **行号**: 约 385 行 - **问题描述**: `handleConfirm` 方法通过 `tabIndex` 同时处理了“确认提前开机”(tabIndex==0)和“删除酒水订单”(tabIndex==2)。共用同一个 `showConfirm` 状态和 `confirmTxt` 极易引发状态覆盖、误操作或回调错位。 - **修复建议**: 拆分确认逻辑,或增加 `confirmType` 标识区分业务: ```javascript handleConfirm() { if (this.data.confirmType === 'open_machine') { // 执行开机逻辑 } else if (this.data.confirmType === 'delete_order') { this.deleteOrder() } } ``` ### [逻辑 BUG] 数组删除操作未处理 `findIndex` 返回 `-1` 的情况 - **严重程度**: 高危 - **文件**: `order-list/order-list.js` - **行号**: 约 408 行 - **问题描述**: `let index = this.data.goods_order_list.findIndex(...)` 后直接使用 `slice(0, index)`。若订单未找到(`index === -1`),`slice(0, -1)` 会**错误地删除数组最后一个元素**,导致数据错乱。 - **修复建议**: 增加边界判断: ```javascript if (index === -1) return; // 未找到则直接返回 this.setData({ goods_order_list: [...this.data.goods_order_list.slice(0, index), ...this.data.goods_order_list.slice(index + 1)] }) ``` ### [逻辑 BUG] `reserveModel.openMachine` 方法调用参数数量不一致 - **严重程度**: 高危 - **文件**: `order-detail/order-detail.js`, `open-result/open-result.js`, `order-list/order-list.js` - **行号**: 多处调用 `reserveModel.openMachine` - **问题描述**: 同一模型方法在不同页面调用时参数数量不一致(4个、5个、6个参数)。例如 `order-detail.js` 传入了6个参数,而 `open-result.js` 传入了4个。若模型方法未做严格的参数兼容处理,极易导致回调函数错位或逻辑异常。 - **修复建议**: 统一模型方法签名,或改用配置对象传参: ```javascript // 推荐统一为:reserveModel.openMachine({ family_server_id, order_id, forward_open, success, fail }) ``` ### [安全隐患] 动态 URL 参数未统一编码导致解析异常 - **严重程度**: 中危 - **文件**: `apply-refund/apply-refund.js`, `order-detail/order-detail.js`, `open-result/open-result.js` 等 - **行号**: 多处 `wx.navigateTo` / `wx.redirectTo` 的 `url` 拼接处 - **问题描述**: 部分参数(如 `voucher_name`, `room_name`, `msg`)直接拼接进 URL,未使用 `encodeURIComponent`。若参数包含 `&`, `=`, `?`, 空格或特殊字符,会导致 URL 截断、参数丢失或路由解析失败。部分文件已使用编码,但标准不统一。 - **修复建议**: 统一对所有动态参数值进行编码: ```javascript url: `/pages/xxx/xxx?name=${encodeURIComponent(this.data.voucher_name)}` ``` ### [逻辑 BUG] `wx.showLoading` 未配对 `wx.hideLoading` - **严重程度**: 中危 - **文件**: `apply-refund/apply-refund.js` - **行号**: 约 55 行 - **问题描述**: `doRefund` 中调用 `wx.showLoading()`,但在 `reserveModel.applyBookRefund` 回调中直接执行 `wx.redirectTo`,未调用 `wx.hideLoading()`。若网络请求失败、回调未触发或跳转被拦截,Loading 遮罩将永久显示,阻塞用户操作。 - **修复建议**: 在回调入口处或跳转前显式关闭 Loading,并补充 `fail` 处理: ```javascript reserveModel.applyBookRefund(..., (res) => { wx.hideLoading() wx.redirectTo({ ... }) }, (err) => { wx.hideLoading() wx.showToast({ title: '退款失败', icon: 'none' }) }) ``` ### [代码质量] `setData` 中存在重复键值声明 - **严重程度**: 低危 - **文件**: `order-detail/order-detail.js` - **行号**: 约 235 行 - **问题描述**: 在同一个 `setData` 对象中,`showCancelBtn: false` 被声明了两次。虽然 JS 引擎会覆盖,但属于冗余代码,易引发维护困惑。 - **修复建议**: 删除重复的键值对。 ### [代码质量] `import` 路径扩展名不一致 - **严重程度**: 低危 - **文件**: `apply-result.js`, `continue-packages.js`, `pay-success.js`, `package.js`, `scan-order.js` - **行号**: 文件顶部 `import` 语句 - **问题描述**: 部分文件省略了 `.js` 后缀(如 `'../../../config'`),而部分文件保留了(如 `'../../../config.js'`)。虽然微信小程序支持省略,但混用会降低代码规范性和 IDE 提示准确性。 - **修复建议**: 全局统一添加 `.js` 后缀,保持风格一致。 ## ✅ 代码亮点 1. **生命周期管理清晰**:页面在 `onUnload`/`onHide` 中正确清理了 WebSocket 连接和定时器,避免了内存泄漏。 2. **动态 Tab 逻辑健壮**:`continue-packages.js` 和 `package.js` 中根据 `package_list` 和 `hour_list` 动态生成 `tab_list` 的逻辑处理严谨,边界情况(全空、单有、双有)覆盖完整。 3. **状态机设计合理**:`open-result.js` 和 `order-detail.js` 对开机结果 `type`(1~6)的分发处理清晰,弹窗与路由跳转逻辑解耦良好。 ## 📝 总体建议 1. **统一跨模块调用规范**:当前 `reserveModel.openMachine` 等核心方法在不同页面传参差异较大。建议在后端/模型层统一使用**配置对象传参**(如 `{ params, success, fail }`),彻底解决参数错位风险。 2. **强化 WebSocket 实例隔离**:小程序页面具有复用特性,务必将 `SocketTask` 等网络实例绑定到 `this` 或 `data` 上,避免模块级变量引发的竞态条件。 3. **完善异常兜底机制**:多处 `wx.getStorageSync('userInfo')` 未做空值保护,建议封装统一的 Storage 读取工具函数,返回默认空对象,防止 `undefined` 穿透至 UI 或网络请求。 4. **补充 PHP 框架关联检查提示**:本次审查代码均为微信小程序前端 JS,未涉及 PHP CodeIgniter 控制器/模型文件。若后续提交包含 PHP 代码,请确保 `$this->load->model('xxx_model')` 与 `application/models/Xxx_model.php` 严格对应,并检查拼写一致性。 --- *此 Issue 由代码审查服务自动创建*
TEXT
milestone_id
INTEGER
priority
INTEGER
is_closed
INTEGER
is_pull
INTEGER
num_comments
INTEGER
ref
TEXT
deadline_unix
INTEGER
created_unix
INTEGER
updated_unix
INTEGER
closed_unix
INTEGER
is_locked
INTEGER NOT NULL (default 0
content_version
INTEGER NOT NULL (default 0
time_estimate
INTEGER NOT NULL (default 0
Update
Cancel