林菲菲-知识库
将内网服务映射到公网域名-教程
林菲菲-待办事项
工作日志
服务器
内网服务器
基础设施搭建
虚拟机模版-初始化脚本
Chatwoot v4.6.0 部署文档
1Panel
一键部署脚本
Gitea部署
内网服务器 172.16.72.252
测试用例
外网服务器 202.79.167.21/25/31
多Agents
多Agent
外网服务器 202.79.167.19/22/23
迁移202.61.130.102服务器至202.79.167.25
刷单台子
需求迭代1
VIP等级功能 - 修改文件清单(最终版)
文件迁移脚本
天天vip新客户
外网服务器 202.61.130.102/130/233
wifi
矿池Bugs
Kt-后台系统
工单记录
Kt001 -内网配置
KT-后台业务流程
Kt前台业务流程
KT基建
本文档使用 MrDoc 发布
-
+
首页
文件迁移脚本
# VIP等级功能 - 文件迁移脚本 **迁移日期:** 2025-10-25 **备份后缀:** -bak20251025 --- ## 迁移流程说明 1. **备份原文件**:将线上文件重命名为 `文件名-bak20251025.后缀` 2. **上传新文件**:上传本地修改后的文件到服务器 3. **执行数据库脚本**:添加字段和权限记录 4. **测试验证**:确保功能正常运行 --- ## 一、后端PHP控制器文件(4个) ### 1. Platform端会员控制器 **线上路径:** `/path/to/admin/index/app/platform/controller/Member.php` **本地路径:** `/Volumes/DataDisk/CodeSpace/tt/shuadan/admin/index/app/platform/controller/Member.php` ```bash # 备份原文件 mv /path/to/admin/index/app/platform/controller/Member.php \ /path/to/admin/index/app/platform/controller/Member-bak20251025.php # 上传新文件 scp /Volumes/DataDisk/CodeSpace/tt/shuadan/admin/index/app/platform/controller/Member.php \ user@server:/path/to/admin/index/app/platform/controller/ ``` **修改内容:** 添加 set_vip_level() 方法(约541-581行),使用 json() 返回响应 --- ### 2. Agent端会员控制器 **线上路径:** `/path/to/admin/index/app/agent/controller/Member.php` **本地路径:** `/Volumes/DataDisk/CodeSpace/tt/shuadan/admin/index/app/agent/controller/Member.php` ```bash # 备份原文件 mv /path/to/admin/index/app/agent/controller/Member.php \ /path/to/admin/index/app/agent/controller/Member-bak20251025.php # 上传新文件 scp /Volumes/DataDisk/CodeSpace/tt/shuadan/admin/index/app/agent/controller/Member.php \ user@server:/path/to/admin/index/app/agent/controller/ ``` **修改内容:** 添加 set_vip_level() 方法(约731-770行),使用 json() 返回响应 --- ### 3. Client API控制器 **线上路径:** `/path/to/admin/index/app/apiv1/controller/Member.php` **本地路径:** `/Volumes/DataDisk/CodeSpace/tt/shuadan/admin/index/app/apiv1/controller/Member.php` ```bash # 备份原文件 mv /path/to/admin/index/app/apiv1/controller/Member.php \ /path/to/admin/index/app/apiv1/controller/Member-bak20251025.php # 上传新文件 scp /Volumes/DataDisk/CodeSpace/tt/shuadan/admin/index/app/apiv1/controller/Member.php \ user@server:/path/to/admin/index/app/apiv1/controller/ ``` **修改内容:** get_info() 方法第23行,field列表添加 vip_level --- ### 4. 公共会员控制器 **线上路径:** `/path/to/admin/index/app/common/controller/Member.php` **本地路径:** `/Volumes/DataDisk/CodeSpace/tt/shuadan/admin/index/app/common/controller/Member.php` ```bash # 备份原文件 mv /path/to/admin/index/app/common/controller/Member.php \ /path/to/admin/index/app/common/controller/Member-bak20251025.php # 上传新文件 scp /Volumes/DataDisk/CodeSpace/tt/shuadan/admin/index/app/common/controller/Member.php \ user@server:/path/to/admin/index/app/common/controller/ ``` **修改内容:** 第52行,field列表添加 m.vip_level --- ## 二、路由配置文件(2个) ### 1. Agent端路由配置 **线上路径:** `/path/to/admin/index/app/agent/route/route.php` **本地路径:** `/Volumes/DataDisk/CodeSpace/tt/shuadan/admin/index/app/agent/route/route.php` ```bash # 备份原文件 mv /path/to/admin/index/app/agent/route/route.php \ /path/to/admin/index/app/agent/route/route-bak20251025.php # 上传新文件 scp /Volumes/DataDisk/CodeSpace/tt/shuadan/admin/index/app/agent/route/route.php \ user@server:/path/to/admin/index/app/agent/route/ ``` **修改内容:** 第89行,添加 `Route::any('member_set_vip_level','Member/set_vip_level');` --- ### 2. Platform端路由配置 **线上路径:** `/path/to/admin/index/app/platform/route/route.php` **本地路径:** `/Volumes/DataDisk/CodeSpace/tt/shuadan/admin/index/app/platform/route/route.php` ```bash # 备份原文件 mv /path/to/admin/index/app/platform/route/route.php \ /path/to/admin/index/app/platform/route/route-bak20251025.php # 上传新文件 scp /Volumes/DataDisk/CodeSpace/tt/shuadan/admin/index/app/platform/route/route.php \ user@server:/path/to/admin/index/app/platform/route/ ``` **修改内容:** 第156行,添加 `Route::any('member_set_vip_level','Member/set_vip_level');` --- ## 三、前端HTML视图文件(2个) ### 1. Platform端会员列表视图 **线上路径:** `/path/to/admin/index/view/platform/member/index.html` **本地路径:** `/Volumes/DataDisk/CodeSpace/tt/shuadan/admin/index/view/platform/member/index.html` ```bash # 备份原文件 mv /path/to/admin/index/view/platform/member/index.html \ /path/to/admin/index/view/platform/member/index-bak20251025.html # 上传新文件 scp /Volumes/DataDisk/CodeSpace/tt/shuadan/admin/index/view/platform/member/index.html \ user@server:/path/to/admin/index/view/platform/member/ ``` **修改内容:** - 第73行:显示VIP等级 - 第97行:添加VIP等级按钮 - 第144-224行:添加JavaScript函数 - 第210行:将 `res.code` 改为 `res.result` --- ### 2. Agent端会员列表视图 **线上路径:** `/path/to/admin/index/view/agent/member/index.html` **本地路径:** `/Volumes/DataDisk/CodeSpace/tt/shuadan/admin/index/view/agent/member/index.html` ```bash # 备份原文件 mv /path/to/admin/index/view/agent/member/index.html \ /path/to/admin/index/view/agent/member/index-bak20251025.html # 上传新文件 scp /Volumes/DataDisk/CodeSpace/tt/shuadan/admin/index/view/agent/member/index.html \ user@server:/path/to/admin/index/view/agent/member/ ``` **修改内容:** - 第81行:显示VIP等级 - 第130行:添加VIP等级按钮(含权限控制) - 第198-278行:添加JavaScript函数 - 第264行:将 `res.code` 改为 `res.result` --- ## 四、客户端H5文件(2个) ### 1. 客户端"我的"页面源码(可选) **线上路径:** `/path/to/client/h5_source/pages/my/my.vue` **本地路径:** `/Volumes/DataDisk/CodeSpace/tt/shuadan/client/h5_source/pages/my/my.vue` ```bash # 备份原文件(如果线上有源码的话) mv /path/to/client/h5_source/pages/my/my.vue \ /path/to/client/h5_source/pages/my/my-bak20251025.vue # 上传新文件 scp /Volumes/DataDisk/CodeSpace/tt/shuadan/client/h5_source/pages/my/my.vue \ user@server:/path/to/client/h5_source/pages/my/ ``` **修改内容:** 第26行,显示VIP等级数字 **注意:** 源码修改后需要重新编译才能生效,如果线上只部署编译后的文件,可以跳过源码上传。 --- ### 2. 客户端编译后的JS文件(重要) **线上路径:** `/path/to/client/index/static/js/pages-my-my.c6ccc8c8.js` **本地路径:** `/Volumes/DataDisk/CodeSpace/tt/shuadan/client/index/static/js/pages-my-my.c6ccc8c8.js` ```bash # 备份原文件 mv /path/to/client/index/static/js/pages-my-my.c6ccc8c8.js \ /path/to/client/index/static/js/pages-my-my.c6ccc8c8-bak20251025.js # 上传新文件 scp /Volumes/DataDisk/CodeSpace/tt/shuadan/client/index/static/js/pages-my-my.c6ccc8c8.js \ user@server:/path/to/client/index/static/js/ ``` **修改内容:** 修改Vue render函数,显示VIP等级数字 --- ## 五、一键迁移脚本 ### 方式1:使用Shell脚本(推荐) 创建 `migrate-vip-level.sh` 文件: ```bash #!/bin/bash # 配置变量 SERVER="user@your-server.com" REMOTE_PATH="/path/to/project" LOCAL_PATH="/Volumes/DataDisk/CodeSpace/tt/shuadan" BACKUP_SUFFIX="-bak20251025" echo "==========================================" echo "VIP等级功能文件迁移脚本" echo "备份后缀: ${BACKUP_SUFFIX}" echo "==========================================" # 函数:备份并上传文件 backup_and_upload() { local file_path=$1 local file_name=$(basename "$file_path") local file_dir=$(dirname "$file_path") local file_ext="${file_name##*.}" local file_base="${file_name%.*}" echo "" echo "处理文件: $file_path" # 备份原文件 echo " → 备份原文件..." ssh $SERVER "cd ${REMOTE_PATH}${file_dir} && [ -f ${file_name} ] && mv ${file_name} ${file_base}${BACKUP_SUFFIX}.${file_ext} || echo '文件不存在,跳过备份'" # 上传新文件 echo " → 上传新文件..." scp "${LOCAL_PATH}${file_path}" "${SERVER}:${REMOTE_PATH}${file_dir}/" if [ $? -eq 0 ]; then echo " ✓ 成功" else echo " ✗ 失败" return 1 fi } # 迁移文件列表 echo "" echo "开始迁移文件..." # PHP控制器 backup_and_upload "/admin/index/app/platform/controller/Member.php" backup_and_upload "/admin/index/app/agent/controller/Member.php" backup_and_upload "/admin/index/app/apiv1/controller/Member.php" backup_and_upload "/admin/index/app/common/controller/Member.php" # 路由配置 backup_and_upload "/admin/index/app/agent/route/route.php" backup_and_upload "/admin/index/app/platform/route/route.php" # HTML视图 backup_and_upload "/admin/index/view/platform/member/index.html" backup_and_upload "/admin/index/view/agent/member/index.html" # 客户端JS(如果需要) # backup_and_upload "/client/index/static/js/pages-my-my.c6ccc8c8.js" echo "" echo "==========================================" echo "文件迁移完成!" echo "==========================================" echo "" echo "接下来需要:" echo "1. 执行数据库SQL脚本(添加vip_level字段和权限记录)" echo "2. 在后台为代理角色分配'VIP等级'权限(ID: 336)" echo "3. 清理ThinkPHP缓存: rm -rf runtime/cache/*" echo "4. 测试VIP等级设置功能" echo "" ``` **使用方法:** ```bash # 1. 修改脚本中的配置变量 # - SERVER: SSH登录地址 # - REMOTE_PATH: 线上项目根目录 # - LOCAL_PATH: 本地项目根目录 # 2. 赋予执行权限 chmod +x migrate-vip-level.sh # 3. 执行脚本 ./migrate-vip-level.sh ``` --- ### 方式2:手动执行命令 如果不想用脚本,可以手动执行以下命令(需要替换路径变量): ```bash # 定义变量 SERVER="user@your-server.com" REMOTE="/path/to/project" # 1. PHP控制器 ssh $SERVER "mv ${REMOTE}/admin/index/app/platform/controller/Member.php ${REMOTE}/admin/index/app/platform/controller/Member-bak20251025.php" scp /Volumes/DataDisk/CodeSpace/tt/shuadan/admin/index/app/platform/controller/Member.php $SERVER:${REMOTE}/admin/index/app/platform/controller/ ssh $SERVER "mv ${REMOTE}/admin/index/app/agent/controller/Member.php ${REMOTE}/admin/index/app/agent/controller/Member-bak20251025.php" scp /Volumes/DataDisk/CodeSpace/tt/shuadan/admin/index/app/agent/controller/Member.php $SERVER:${REMOTE}/admin/index/app/agent/controller/ # ... (其他文件类似) ``` --- ## 六、数据库迁移脚本 **执行顺序:** 在文件上传完成后执行 ### 1. 添加 vip_level 字段 ```sql -- 检查字段是否已存在 SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'sq_member' AND COLUMN_NAME = 'vip_level'; -- 如果不存在,则添加字段 ALTER TABLE `sq_member` ADD COLUMN `vip_level` TINYINT(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT 'VIP等级 1-9' AFTER `is_vip`; ``` ### 2. 添加权限记录 ```sql -- 检查权限是否已存在 SELECT * FROM `sq_rule` WHERE `id` = 336; -- 如果不存在,则插入权限记录 INSERT INTO `sq_rule` ( `id`, `name`, `rule`, `route`, `level`, `sort`, `status`, `is_developer_only`, `is_to_agent`, `type`, `icon_code`, `parent_id`, `delete_time`, `create_time`, `update_time` ) VALUES ( 336, 'VIP等级', 'member_set_vip_level', 'member/set_vip_level', 0, 0, 1, 0, 1, 0, '', 112, NULL, UNIX_TIMESTAMP(), UNIX_TIMESTAMP() ); ``` ### 3. 为代理角色分配权限 **方式1:通过后台界面** 1. 登录平台端后台 2. 进入 系统设置 → 角色管理 3. 编辑代理商角色 4. 勾选"VIP等级"权限 5. 保存 **方式2:直接SQL插入**(需要知道角色ID) ```sql -- 假设代理角色ID为2,权限ID为336 INSERT INTO `sq_role_rule` (`role_id`, `rule_id`) VALUES (2, 336) ON DUPLICATE KEY UPDATE `rule_id` = 336; ``` --- ## 七、迁移后检查清单 ### 1. 文件完整性检查 ```bash # SSH登录服务器后执行 cd /path/to/project # 检查备份文件是否存在 ls -la admin/index/app/platform/controller/Member-bak20251025.php ls -la admin/index/app/agent/controller/Member-bak20251025.php # ... (检查其他备份文件) # 检查新文件是否上传成功 ls -la admin/index/app/platform/controller/Member.php ls -la admin/index/app/agent/controller/Member.php # ... (检查其他文件) ``` ### 2. 清理缓存 ```bash # ThinkPHP缓存 rm -rf /path/to/project/admin/index/runtime/cache/* rm -rf /path/to/project/admin/index/runtime/temp/* # 浏览器缓存 # 需要手动清理或强制刷新(Ctrl+Shift+R) ``` ### 3. 权限检查 ```bash # 确保PHP文件有执行权限 chmod 644 admin/index/app/*/controller/*.php chmod 644 admin/index/app/*/route/*.php chmod 644 admin/index/view/*/*.html ``` ### 4. 功能测试 - [ ] 平台端会员列表显示VIP等级 - [ ] 代理端会员列表显示VIP等级 - [ ] 代理端能看到"VIP等级"按钮 - [ ] 点击"VIP等级"按钮弹出选择框 - [ ] 设置VIP等级后显示成功提示(不显示错误) - [ ] 页面刷新后VIP等级正确显示 - [ ] 客户端H5"我的"页面显示VIP等级数字 --- ## 八、回滚方案 如果迁移后出现问题,可以快速回滚: ```bash # SSH登录服务器 cd /path/to/project # 恢复所有备份文件 mv admin/index/app/platform/controller/Member-bak20251025.php admin/index/app/platform/controller/Member.php mv admin/index/app/agent/controller/Member-bak20251025.php admin/index/app/agent/controller/Member.php mv admin/index/app/apiv1/controller/Member-bak20251025.php admin/index/app/apiv1/controller/Member.php mv admin/index/app/common/controller/Member-bak20251025.php admin/index/app/common/controller/Member.php mv admin/index/app/agent/route/route-bak20251025.php admin/index/app/agent/route/route.php mv admin/index/app/platform/route/route-bak20251025.php admin/index/app/platform/route/route.php mv admin/index/view/platform/member/index-bak20251025.html admin/index/view/platform/member/index.html mv admin/index/view/agent/member/index-bak20251025.html admin/index/view/agent/member/index.html # 清理缓存 rm -rf admin/index/runtime/cache/* # 数据库回滚(如果需要) # ALTER TABLE `sq_member` DROP COLUMN `vip_level`; # DELETE FROM `sq_rule` WHERE `id` = 336; ``` --- ## 九、注意事项 1. **务必先备份!** 确保所有文件都有备份后才上传新文件 2. **测试环境优先**:建议先在测试环境验证,再部署到生产环境 3. **数据库备份**:执行SQL脚本前先备份数据库 4. **清理缓存**:迁移完成后务必清理ThinkPHP缓存 5. **逐步迁移**:可以先迁移后端文件,测试无误后再迁移前端文件 6. **权限配置**:代理角色需要手动分配"VIP等级"权限 7. **版本标记**:建议在代码中添加版本注释,方便后续追溯 --- ## 十、联系与支持 如果迁移过程中遇到问题: 1. 检查备份文件是否存在 2. 查看服务器错误日志 3. 检查文件权限是否正确 4. 确认数据库字段和权限记录已添加 --- **文档版本:** v1.0 **创建日期:** 2025-10-25 **最后更新:** 2025-10-25
arise
2025年10月25日 23:58
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码