From 832fda813bed4906f6fc8d592dfe56a65e0f23b4 Mon Sep 17 00:00:00 2001 From: lifenlong Date: Fri, 5 Jun 2026 17:49:43 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8D=87=E7=BA=A7Vue3=EF=BC=8CiView=E6=9B=BF?= =?UTF-8?q?=E6=8D=A2ElementPlus=20-=20=E5=88=A0=E9=99=A4babel=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E3=80=81=E6=9B=B4=E6=96=B0=E4=BE=9D=E8=B5=96=E4=B8=8E?= =?UTF-8?q?=E5=85=A5=E5=8F=A3=E5=88=9D=E5=A7=8B=E5=8C=96=20-=20=E5=85=A8?= =?UTF-8?q?=E9=87=8F=E6=9B=BF=E6=8D=A2UI=E7=BB=84=E4=BB=B6=E3=80=81?= =?UTF-8?q?=E6=A0=B7=E5=BC=8F=E9=80=82=E9=85=8D=EF=BC=8C=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E8=BF=81=E7=A7=BB=E6=96=87=E6=A1=A3=E4=B8=8E=E6=A0=87=E7=AD=BE?= =?UTF-8?q?/=E8=BF=87=E6=BB=A4=E5=99=A8=E8=87=AA=E5=8A=A8=E5=8C=96?= =?UTF-8?q?=E6=9B=BF=E6=8D=A2=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- buyer/.babelrc | 12 - buyer/MIGRATION-VUE3.md | 39 + buyer/package.json | 41 +- buyer/public/index.html | 10 +- buyer/scripts/fix-broken-tags.js | 54 + buyer/scripts/fix-dialog-slots.js | 52 + buyer/scripts/fix-duplicate-size.js | 26 + buyer/scripts/fix-el-icon-click.js | 28 + buyer/scripts/fix-filters.js | 77 + buyer/scripts/fix-runtime-compat.js | 55 + buyer/scripts/fix-slots.js | 54 + buyer/scripts/fix-span-tags.js | 46 + buyer/scripts/fix-stray-templates.js | 55 + buyer/scripts/migrate-iview-to-element.js | 227 ++ buyer/scripts/replace-icon.js | 149 + buyer/scripts/replace-page.js | 63 + buyer/src/assets/styles/element.scss | 35 + buyer/src/assets/styles/theme.less | 10 +- buyer/src/components/Search.vue | 24 +- buyer/src/components/addressManage/index.vue | 66 +- buyer/src/components/advertising/FixedTop.vue | 4 +- buyer/src/components/card/index.vue | 228 +- buyer/src/components/drawer/Drawer.vue | 20 +- buyer/src/components/drawer/Main.vue | 18 +- buyer/src/components/drawer/README.md | 54 +- buyer/src/components/global.js | 69 +- .../src/components/goodsDetail/Promotion.vue | 4 +- .../src/components/goodsDetail/ShowGoods.vue | 110 +- .../goodsDetail/ShowGoodsDetail.vue | 82 +- buyer/src/components/header/Header.vue | 25 +- buyer/src/components/header/hoverSearch.vue | 11 +- .../components/indexDecorate/ModelForm.vue | 3 +- .../indexDecorate/ModelFormItem.vue | 3 +- .../indexDecorate/modelList/Carousel.vue | 12 +- .../indexDecorate/modelList/Carousel1.vue | 12 +- .../indexDecorate/modelList/Carousel2.vue | 29 +- .../indexDecorate/modelList/NewGoodsSort.vue | 11 +- .../indexDecorate/modelList/NotEnough.vue | 6 +- .../indexDecorate/modelList/Recommend.vue | 7 +- .../indexDecorate/modelList/Seckill.vue | 244 +- .../indexDecorate/modelList/forYour.vue | 6 +- .../indexDecorate/modelList/goodsAndType.vue | 2 +- .../modelList/mixs/mix-brand.vue | 5 +- .../modelList/mixs/mix-goods.vue | 2 +- .../indexDecorate/modelList/setup-box.scss | 62 + buyer/src/components/invoiceModal/index.vue | 141 +- buyer/src/components/map/index.vue | 8 +- buyer/src/components/map/multiple-map.vue | 17 +- buyer/src/components/map/region.vue | 6 +- buyer/src/components/nav/CateNav.vue | 13 +- buyer/src/components/nav/GoodsClassNav.vue | 78 +- buyer/src/components/verify/index.vue | 8 +- buyer/src/main.js | 78 +- buyer/src/pages/Cart.vue | 98 +- buyer/src/pages/CouponCenter.vue | 30 +- buyer/src/pages/ForgetPassword.vue | 85 +- buyer/src/pages/GoodsDetail.vue | 27 +- buyer/src/pages/GoodsList.vue | 53 +- buyer/src/pages/Index.vue | 27 +- buyer/src/pages/Login.vue | 96 +- buyer/src/pages/Merchant.vue | 55 +- buyer/src/pages/SignUp.vue | 79 +- buyer/src/pages/article/index.vue | 105 +- .../pages/home/memberCenter/AccountSafe.vue | 92 +- .../pages/home/memberCenter/CommentList.vue | 53 +- .../home/memberCenter/ComplainDetail.vue | 22 +- .../pages/home/memberCenter/ComplainList.vue | 53 +- .../pages/home/memberCenter/Distribution.vue | 385 ++- .../src/pages/home/memberCenter/Favorites.vue | 16 +- .../pages/home/memberCenter/MemberGrade.vue | 121 +- .../src/pages/home/memberCenter/ModifyPwd.vue | 96 +- buyer/src/pages/home/memberCenter/Point.vue | 52 +- buyer/src/pages/home/memberCenter/Profile.vue | 52 +- .../home/memberCenter/evaluation/AddEval.vue | 40 +- .../memberCenter/evaluation/EvalDetail.vue | 31 +- .../home/memberCenter/memberMsg/MsgList.vue | 160 +- .../src/pages/home/orderCenter/AddAddress.vue | 56 +- .../src/pages/home/orderCenter/AfterSale.vue | 87 +- .../home/orderCenter/AfterSaleDetail.vue | 69 +- .../pages/home/orderCenter/ApplyAfterSale.vue | 125 +- buyer/src/pages/home/orderCenter/Complain.vue | 30 +- .../src/pages/home/orderCenter/MyAddress.vue | 13 +- buyer/src/pages/home/orderCenter/MyOrder.vue | 78 +- .../pages/home/orderCenter/OrderDetail.vue | 131 +- buyer/src/pages/home/userCenter/Coupons.vue | 21 +- .../pages/home/userCenter/MoneyManagement.vue | 399 +-- .../src/pages/home/userCenter/MyGiftCards.vue | 61 +- buyer/src/pages/home/userCenter/MyTracks.vue | 19 +- buyer/src/pages/payment/Pay.vue | 97 +- buyer/src/pages/payment/PayDone.vue | 6 +- buyer/src/pages/payment/PayMent.vue | 59 +- buyer/src/pages/payment/ThirdPay.vue | 11 +- .../src/pages/promotion/PointGoodsDetail.vue | 25 +- buyer/src/pages/promotion/PointMall.vue | 18 +- buyer/src/pages/promotion/seckill.vue | 30 +- buyer/src/pages/shopEntry/FirstApply.vue | 154 +- buyer/src/pages/shopEntry/SecondApply.vue | 40 +- buyer/src/pages/shopEntry/ShopEntry.vue | 32 +- buyer/src/pages/shopEntry/ThirdApply.vue | 96 +- buyer/src/pages/user/Home.vue | 78 +- buyer/src/plugins/element.js | 11 + buyer/src/plugins/request.js | 214 +- buyer/src/router/index.js | 238 +- buyer/src/utils/iconMap.js | 83 + buyer/src/utils/message.js | 71 + buyer/src/vuex/store.js | 30 +- buyer/vue.config.js | 138 +- im/babel.config.js | 25 +- im/package.json | 40 +- im/scripts/fix-deep.js | 21 + im/src/App.vue | 5 +- im/src/assets/css/global.less | 42 +- im/src/assets/css/page/contacts.less | 2 +- im/src/assets/css/page/login-auth.less | 2 +- im/src/assets/css/talk/talk-records.less | 2 +- im/src/components/chat/TalkCodeBlock.vue | 21 +- im/src/components/chat/TalkForwardRecord.vue | 2 +- im/src/components/chat/TalkSearchRecord.vue | 2 +- .../chat/messaege/FriendApplyMessage.vue | 2 +- .../components/chat/messaege/ImageMessage.vue | 10 +- im/src/components/chat/panel/OtherLink.vue | 15 +- im/src/components/chat/panel/TalkPanel.vue | 7 +- .../chat/panel/template/footPrint.vue | 19 +- .../chat/panel/template/goodsLink.vue | 8 +- .../chat/panel/template/storeDetail.vue | 6 - im/src/components/editor/MeEditor.vue | 25 +- im/src/components/editor/MeEditorEmoticon.vue | 2 +- .../components/editor/MeEditorFileManage.vue | 10 +- .../components/editor/MeEditorImageView.vue | 6 +- im/src/components/editor/MeEditorRecorder.vue | 2 +- im/src/components/editor/MeEditorVote.vue | 17 +- im/src/components/notify/NewMessageNotify.vue | 6 +- im/src/components/svg-icon/index.vue | 2 +- im/src/components/user/UserSearch.vue | 2 +- .../user/user-card/UserCardDetail.vue | 26 +- im/src/components/user/user-card/index.js | 59 +- im/src/core/directives.js | 98 +- im/src/core/global-component.js | 44 +- im/src/core/icons.js | 39 +- im/src/core/lazy-use.js | 88 - im/src/icons/index.js | 15 +- im/src/im-server/event/base.js | 6 +- im/src/im-server/event/talk.js | 28 +- im/src/im-server/socket-instance.js | 4 +- im/src/main.js | 137 +- im/src/mixins/main-mixin.js | 2 +- im/src/plugins/contextmenu.js | 110 + im/src/plugins/element.js | 10 + im/src/plugins/ws-socket.js | 12 +- im/src/router/index.js | 70 +- im/src/store/index.js | 31 +- im/src/store/modules/emoticon.js | 8 +- im/src/store/modules/talk.js | 4 +- im/src/utils/app-bridge.js | 37 + im/src/utils/message.js | 11 + im/src/utils/request.js | 10 +- im/src/views/message/index.vue | 17 +- im/src/views/other/404.vue | 2 +- im/vue.config.js | 42 +- .../page-decoration/modelList/forYour.vue | 6 +- .../src/views/page-decoration/wap/index.vue | 2 +- seller/MIGRATION-VUE3.md | 40 + seller/babel.config.js | 11 +- seller/package.json | 51 +- seller/public/index.html | 2 +- seller/scripts/copy-manager-migrations.js | 132 + seller/scripts/migrate-iview-to-element.js | 229 ++ seller/src/App.vue | 29 +- seller/src/assets/align-text-center.png | Bin 0 -> 270 bytes seller/src/assets/align-text-left.png | Bin 0 -> 266 bytes seller/src/assets/align-text-right.png | Bin 0 -> 271 bytes seller/src/components/lili/set-password.vue | 140 + seller/src/components/price-color-scheme.vue | 58 + seller/src/libs/axios.js | 6 +- seller/src/libs/util.js | 552 ++-- seller/src/main.js | 140 +- seller/src/plugins/element.js | 11 + seller/src/router/index.js | 77 +- seller/src/store/index.js | 41 +- seller/src/store/modules/app.js | 108 +- seller/src/styles/common.scss | 6 + seller/src/styles/element.scss | 95 + seller/src/styles/table-common.scss | 15 +- seller/src/styles/theme.less | 9 +- seller/src/utils/message.js | 74 + seller/src/utils/print.js | 26 + seller/src/views/ForgetPassword.vue | 376 ++- seller/src/views/Main.vue | 234 +- .../views/change-password/change-password.vue | 191 +- .../views/distribution/distributionGoods.vue | 423 ++- .../views/distribution/distributionOrder.vue | 402 ++- seller/src/views/error-page/403.vue | 42 +- seller/src/views/error-page/404.vue | 156 +- seller/src/views/error-page/500.vue | 179 +- .../src/views/goods/goods-manage/category.vue | 525 ++-- .../views/goods/goods-seller/addGoods.scss | 25 +- .../goods/goods-seller/alertQuantity.vue | 734 ++--- .../views/goods/goods-seller/draftGoods.vue | 239 +- seller/src/views/goods/goods-seller/goods.vue | 1676 +++++------- .../goods/goods-seller/goodsOperation.vue | 10 +- .../goods-seller/goodsOperationFirst.vue | 12 +- .../goods/goods-seller/goodsOperationSec.vue | 660 +++-- seller/src/views/home/home.scss | 4 +- seller/src/views/home/home.vue | 199 +- .../src/views/lili-components/affix-time.vue | 191 +- .../views/lili-components/editor/index.vue | 2 +- .../lili-components/editor/upload-image.vue | 256 +- .../views/lili-components/multiple-region.vue | 209 +- seller/src/views/lili-dialog/goods-dialog.vue | 198 +- seller/src/views/lili-dialog/index.vue | 96 +- seller/src/views/lili-dialog/link-dialog.vue | 65 +- seller/src/views/lili-dialog/style.scss | 184 +- .../views/lili-dialog/template/category.vue | 1 + .../src/views/lili-dialog/template/index.js | 23 +- .../src/views/lili-dialog/template/other.vue | 186 +- .../src/views/lili-dialog/template/pages.vue | 9 +- .../src/views/lili-dialog/template/shops.vue | 94 +- seller/src/views/lili-dialog/wap.js | 54 +- seller/src/views/login.vue | 345 +-- .../views/main-components/config-drawer.vue | 53 +- seller/src/views/main-components/footer.vue | 11 +- .../src/views/main-components/fullscreen.vue | 85 +- seller/src/views/main-components/header.vue | 56 +- .../src/views/main-components/message-tip.vue | 33 +- .../shrinkable-menu/shrinkable-menu.vue | 128 +- .../shrinkable-menu/styles/menu.scss | 19 +- .../main-components/tags-page-opened.vue | 298 +- seller/src/views/member/memberComment.vue | 370 ++- seller/src/views/message/message.vue | 522 ++-- .../my-components/lili/circle-loading.vue | 20 +- .../my-components/lili/department-choose.vue | 56 +- .../lili/department-tree-choose.vue | 145 +- .../views/my-components/lili/set-password.vue | 157 +- .../my-components/lili/upload-pic-input.vue | 243 +- .../my-components/lili/upload-pic-thumb.vue | 306 +-- seller/src/views/my-components/map/index.vue | 63 +- .../views/my-components/map/multiple-map.vue | 117 +- .../tree-table/Checkbox/Checkbox.vue | 2 +- .../my-components/tree-table/Table/Table.vue | 9 +- .../tree-table/Table/TableBody.js | 68 +- .../tree-table/Table/utils/scrollBarWidth.js | 22 +- .../src/views/my-components/verify/index.vue | 160 +- .../order/after-order/orderComplaint.vue | 424 ++- .../after-order/orderComplaintDetail.vue | 508 ++-- .../order/after-order/returnGoodsOrder.vue | 693 ++--- .../order/after-order/returnMoneyOrder.vue | 463 ++-- .../after-order/reurnGoodsOrderDetail.vue | 850 +++--- .../views/order/order/exportOrderDeliver.vue | 118 +- seller/src/views/order/order/orderDetail.vue | 1606 ++++------- seller/src/views/order/order/orderList.vue | 763 +++--- .../views/order/order/virtualOrderList.vue | 389 ++- .../views/order/receiptManager/receipt.vue | 458 ++-- .../views/promotion/coupon/coupon-publish.vue | 519 ++-- .../views/promotion/coupon/coupon-receive.vue | 341 +-- seller/src/views/promotion/coupon/coupon.vue | 701 +++-- .../full-discount/full-discount-add.vue | 555 ++-- .../promotion/full-discount/full-discount.vue | 406 ++- seller/src/views/promotion/live/addLive.vue | 620 ++--- seller/src/views/promotion/live/live.vue | 229 +- seller/src/views/promotion/live/liveGoods.vue | 541 ++-- .../views/promotion/pintuan/pintuan-edit.vue | 316 ++- .../views/promotion/pintuan/pintuan-goods.vue | 421 +-- .../src/views/promotion/pintuan/pintuan.vue | 408 +-- .../views/promotion/seckill/seckill-goods.vue | 488 +--- .../views/promotion/seckill/seckill-setup.vue | 133 + .../src/views/promotion/seckill/seckill.vue | 394 +-- .../views/shop/bill/accountStatementBill.vue | 374 ++- seller/src/views/shop/bill/billDetail.vue | 976 +++---- seller/src/views/shop/bill/storeBill.vue | 351 +-- seller/src/views/shop/floorList.vue | 292 +- .../views/shop/hotzone/components/Zone.vue | 43 +- seller/src/views/shop/hotzone/index.vue | 41 +- seller/src/views/shop/modelForm.vue | 233 +- seller/src/views/shop/modelFormItem.vue | 122 +- seller/src/views/shop/modelList/carousel.vue | 138 +- seller/src/views/shop/modelList/carousel1.vue | 107 +- seller/src/views/shop/modelList/carousel2.vue | 199 +- .../views/shop/modelList/firstPageAdvert.vue | 330 ++- seller/src/views/shop/modelList/forYour.vue | 445 +++ .../src/views/shop/modelList/goodsAndType.vue | 365 +++ seller/src/views/shop/modelList/mixModel.vue | 326 +++ .../views/shop/modelList/mixs/mix-brand.vue | 133 + .../views/shop/modelList/mixs/mix-goods.vue | 124 + .../src/views/shop/modelList/newGoodsSort.vue | 745 ++--- seller/src/views/shop/modelList/notEnough.vue | 44 +- .../shop/modelList/oneRowThreeColumns.vue | 155 ++ .../views/shop/modelList/onlyGoodsModel.vue | 280 ++ seller/src/views/shop/modelList/recommend.vue | 110 +- .../shop/modelList/seckill-only-album.vue | 291 ++ seller/src/views/shop/modelList/seckill.vue | 6 +- seller/src/views/shop/ossManage.vue | 2391 +++++++++-------- seller/src/views/shop/ossManages.vue | 2292 +++++++++------- seller/src/views/shop/renovation.vue | 76 +- seller/src/views/shop/ship/logistics.vue | 325 +-- seller/src/views/shop/ship/shipTemplate.vue | 95 +- seller/src/views/shop/shopAddress.vue | 499 ++-- seller/src/views/shop/shopSetting.vue | 201 +- .../views/shop/system/clerk/clerkManage.vue | 486 ++-- .../department/storeDepartmentManage.vue | 390 ++- .../shop/system/role/storeRoleManage.vue | 676 ++--- seller/src/views/shop/wap/advertising.vue | 97 +- .../src/views/shop/wap/alertAdvertising.vue | 91 +- seller/src/views/shop/wap/decorate.scss | 2 +- seller/src/views/shop/wap/decorate.vue | 590 +++- seller/src/views/shop/wap/index.vue | 140 +- seller/src/views/shop/wap/main.vue | 18 +- seller/src/views/shop/wap/navbar.vue | 181 +- seller/src/views/shop/wap/style.scss | 2 +- .../views/shop/wap/template/tpl_banner.vue | 10 +- .../views/shop/wap/template/tpl_flex_one.vue | 1 - .../src/views/shop/wap/template/tpl_goods.vue | 15 +- .../src/views/shop/wap/template/tpl_menu.vue | 57 +- .../views/shop/wap/template/tpl_search.vue | 4 +- .../src/views/shop/wap/template/tpl_title.vue | 29 +- seller/src/views/shop/wap/wapList.vue | 246 +- seller/src/views/statistics/goods.vue | 124 +- seller/src/views/statistics/order.vue | 463 ++-- .../views/statistics/order/orderDetail.vue | 80 +- .../views/statistics/order/refundOrder.vue | 49 +- seller/src/views/statistics/traffic.vue | 142 +- seller/src/views/sys/oss-manage/ossManage.vue | 781 ++++-- seller/vue.config.js | 154 +- 322 files changed, 25693 insertions(+), 24453 deletions(-) delete mode 100644 buyer/.babelrc create mode 100644 buyer/MIGRATION-VUE3.md create mode 100644 buyer/scripts/fix-broken-tags.js create mode 100644 buyer/scripts/fix-dialog-slots.js create mode 100644 buyer/scripts/fix-duplicate-size.js create mode 100644 buyer/scripts/fix-el-icon-click.js create mode 100644 buyer/scripts/fix-filters.js create mode 100644 buyer/scripts/fix-runtime-compat.js create mode 100644 buyer/scripts/fix-slots.js create mode 100644 buyer/scripts/fix-span-tags.js create mode 100644 buyer/scripts/fix-stray-templates.js create mode 100644 buyer/scripts/migrate-iview-to-element.js create mode 100644 buyer/scripts/replace-icon.js create mode 100644 buyer/scripts/replace-page.js create mode 100644 buyer/src/assets/styles/element.scss create mode 100644 buyer/src/components/indexDecorate/modelList/setup-box.scss create mode 100644 buyer/src/plugins/element.js create mode 100644 buyer/src/utils/iconMap.js create mode 100644 buyer/src/utils/message.js create mode 100644 im/scripts/fix-deep.js delete mode 100644 im/src/core/lazy-use.js create mode 100644 im/src/plugins/contextmenu.js create mode 100644 im/src/plugins/element.js create mode 100644 im/src/utils/app-bridge.js create mode 100644 im/src/utils/message.js create mode 100644 seller/MIGRATION-VUE3.md create mode 100644 seller/scripts/copy-manager-migrations.js create mode 100644 seller/scripts/migrate-iview-to-element.js create mode 100644 seller/src/assets/align-text-center.png create mode 100644 seller/src/assets/align-text-left.png create mode 100644 seller/src/assets/align-text-right.png create mode 100644 seller/src/components/lili/set-password.vue create mode 100644 seller/src/components/price-color-scheme.vue create mode 100644 seller/src/plugins/element.js create mode 100644 seller/src/styles/element.scss create mode 100644 seller/src/utils/message.js create mode 100644 seller/src/utils/print.js create mode 100644 seller/src/views/promotion/seckill/seckill-setup.vue create mode 100644 seller/src/views/shop/modelList/forYour.vue create mode 100644 seller/src/views/shop/modelList/goodsAndType.vue create mode 100644 seller/src/views/shop/modelList/mixModel.vue create mode 100644 seller/src/views/shop/modelList/mixs/mix-brand.vue create mode 100644 seller/src/views/shop/modelList/mixs/mix-goods.vue create mode 100644 seller/src/views/shop/modelList/oneRowThreeColumns.vue create mode 100644 seller/src/views/shop/modelList/onlyGoodsModel.vue create mode 100644 seller/src/views/shop/modelList/seckill-only-album.vue diff --git a/buyer/.babelrc b/buyer/.babelrc deleted file mode 100644 index 3a280ba3..00000000 --- a/buyer/.babelrc +++ /dev/null @@ -1,12 +0,0 @@ -{ - "presets": [ - ["env", { - "modules": false, - "targets": { - "browsers": ["> 1%", "last 2 versions", "not ie <= 8"] - } - }], - "stage-2" - ], - "plugins": ["transform-vue-jsx", "transform-runtime"] -} diff --git a/buyer/MIGRATION-VUE3.md b/buyer/MIGRATION-VUE3.md new file mode 100644 index 00000000..566e1b4a --- /dev/null +++ b/buyer/MIGRATION-VUE3.md @@ -0,0 +1,39 @@ +# Buyer 买家端 Vue 3 迁移说明 + +## 技术栈 + +- Vue 3 + Vue Router 4 + Vuex 4 +- Element Plus(替代 view-design / iView) +- 保留 `$Message` / `$Modal` / `$Notice` 兼容层(`src/utils/message.js`) + +## 启动 + +```bash +cd buyer +yarn install +yarn dev # 默认端口 10000 +yarn build +``` + +## 迁移要点 + +1. **入口** `src/main.js` 使用 `createApp`,全局过滤器改为 `$filters` +2. **路由** `src/router/index.js` 使用 `createRouter` + 动态 `import()` +3. **请求** `src/plugins/request.js` 使用 Element Plus `ElLoading` +4. **iView 组件已全部替换**:轮播 `el-carousel`、下拉 `el-dropdown`、侧栏 `el-menu`、头像 `el-avatar` 等 +5. **图标映射** `src/utils/iconMap.js` — 动态图标(如侧边栏菜单)通过 `resolveIcon()` 使用 +6. **自定义字体图标** `icomoon` 保留为 ``(购物车步骤条、钱包等) +7. **首页装修** `indexDecorate/modelList` 保留买家端展示逻辑(非 manager 编辑版) +8. **特殊替换** + - `vue-piczoom` → `el-image` 预览 + - `mv-count-down` → 内置倒计时 + - 秒杀轮播 → 横向滚动列表 + +## 批量脚本 + +- `scripts/migrate-iview-to-element.js` — iView → Element 模板替换 +- `scripts/fix-filters.js` — Vue 2 过滤器语法修复 +- `scripts/replace-page.js` — `` → `el-pagination` +- `scripts/replace-icon.js` — 静态 `` → `el-icon` +- `scripts/fix-el-icon-click.js` — 修复 `@click` 绑定 +- `scripts/fix-broken-tags.js` — 闭合标签修复 diff --git a/buyer/package.json b/buyer/package.json index 66dd7dba..918cee50 100644 --- a/buyer/package.json +++ b/buyer/package.json @@ -8,35 +8,37 @@ "dev": "vue-cli-service serve" }, "engines": { - "node": ">=14" + "node": ">=16" }, "dependencies": { "@amap/amap-jsapi-loader": "0.0.7", - "axios": "^0.19.2", + "@element-plus/icons-vue": "^2.3.1", + "axios": "^0.21.1", + "core-js": "^3.36.0", "dplayer": "^1.27.1", + "element-plus": "^2.6.3", "js-cookie": "^2.2.1", - "less": "^2.7.0", - "less-loader": "^5.0.0", - "mv-count-down": "^0.1.15", - "sass": "^1.63.6", - "postcss-loader": "^4.3.0", + "nprogress": "^0.2.0", "psl": "^1.8.0", "qs": "^6.9.4", + "sass": "^1.63.6", + "sass-loader": "^10.4.1", + "swiper": "^5.4.5", "uuid": "^8.3.2", - "view-design": "^4.3.2", - "vue": "^2.6.11", - "vue-awesome-swiper": "^3.1.3", - "vue-piczoom": "^1.0.6", - "vue-qr": "^2.3.0", - "vue-router": "^3.0.1", - "vuex": "^3.0.1" + "vue": "^3.4.21", + "vue-awesome-swiper": "^4.1.1", + "vue-qr": "^5.0.3", + "vue-router": "^4.3.0", + "vuex": "^4.1.0" }, "devDependencies": { - "@vue/cli-service": "~4.5.0", - "compression-webpack-plugin": "^5.0.0", - "sass-loader": "^10.4.1", - "uglifyjs-webpack-plugin": "^2.2.0", - "vue-template-compiler": "^2.6.11" + "@vue/cli-plugin-babel": "^5.0.8", + "@vue/cli-service": "^5.0.8", + "@vue/compiler-sfc": "^3.4.21", + "compression-webpack-plugin": "^10.0.0", + "less": "^4.2.0", + "less-loader": "^11.1.4", + "webpack": "^5.95.0" }, "browserslist": [ "> 1%", @@ -45,7 +47,6 @@ ], "resolutions": { "minimatch": "^3.1.2", - "node-sass": "npm:sass@^1.63.6", "@achrinza/node-ipc": "9.2.2" } } diff --git a/buyer/public/index.html b/buyer/public/index.html index 3aad3f9f..1a632be6 100644 --- a/buyer/public/index.html +++ b/buyer/public/index.html @@ -7,20 +7,12 @@ <%= htmlWebpackPlugin.options.title %> - <% for(var css of htmlWebpackPlugin.options.cdn.css) { %> - - <% } %> - <% for(var js of htmlWebpackPlugin.options.cdn.js) { %> - - <% } %> - +
- diff --git a/buyer/scripts/fix-broken-tags.js b/buyer/scripts/fix-broken-tags.js new file mode 100644 index 00000000..01a4e6f7 --- /dev/null +++ b/buyer/scripts/fix-broken-tags.js @@ -0,0 +1,54 @@ +#!/usr/bin/env node +const fs = require("fs"); +const path = require("path"); + +const ROOT = path.join(__dirname, ".."); + +function walkDir(dir, files = []) { + for (const entry of fs.readdirSync(dir, { withFileTypes: true })) { + const full = path.join(dir, entry.name); + if (entry.isDirectory()) walkDir(full, files); + else if (entry.name.endsWith(".vue")) files.push(full); + } + return files; +} + +function fix(content) { + let c = content; + c = c.replace(/<\/Button>/g, ""); + c = c.replace(/<\/Button\b/g, "/g, ""); + c = c.replace(/<\/Input\b/g, "/g, ""); + c = c.replace(/<\/Option\b/g, "/g, ""); + c = c.replace(/<\/Checkbox\b/g, "/g, ""); + c = c.replace(/<\/Select\b/g, "/g, ""); + c = c.replace(/<\/Modal>/g, ""); + c = c.replace(/@click\.native/g, "@click"); + c = c.replace(/@on-search/g, "@keyup.enter"); + c = c.replace(/\bsearch\b(?=\s+enter-button)/g, ""); + c = c.replace(/\benter-button\b/g, ""); + c = c.replace(//g, ""); + c = c.replace(//g, ""); + c = c.replace(/type="error"/g, 'type="danger"'); + c = c.replace(//g, ""); + c = c.replace(/\{\{([^}|]+)\s*\|\s*secrecyMobile\s*\}\}/g, "{{ $filters.secrecyMobile($1) }}"); + return c; +} + +let count = 0; +for (const file of walkDir(path.join(ROOT, "src"))) { + const original = fs.readFileSync(file, "utf8"); + const fixed = fix(original); + if (fixed !== original) { + fs.writeFileSync(file, fixed); + count++; + } +} +console.log(`Fixed tags in ${count} files`); diff --git a/buyer/scripts/fix-dialog-slots.js b/buyer/scripts/fix-dialog-slots.js new file mode 100644 index 00000000..07b61055 --- /dev/null +++ b/buyer/scripts/fix-dialog-slots.js @@ -0,0 +1,52 @@ +#!/usr/bin/env node +const fs = require("fs"); +const path = require("path"); + +const ROOT = path.join(__dirname, ".."); + +function walkDir(dir, files = []) { + for (const entry of fs.readdirSync(dir, { withFileTypes: true })) { + const full = path.join(dir, entry.name); + if (entry.isDirectory()) walkDir(full, files); + else if (entry.name.endsWith(".vue")) files.push(full); + } + return files; +} + +function fix(content) { + let c = content; + + c = c.replace(/

/g, "