From e7fc44715b2be9daa1d5b9e516c6b2930e758302 Mon Sep 17 00:00:00 2001 From: lrl <252048765@qq.com> Date: Tue, 5 Aug 2025 15:32:12 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20(web-ele)=E6=96=B0=E5=A2=9E=E9=A2=9C?= =?UTF-8?q?=E8=89=B2=E8=BE=93=E5=85=A5=E6=A1=86=E7=BB=84=E4=BB=B6=E5=B9=B6?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=9B=BE=E7=89=87=E4=B8=8A=E4=BC=A0=E7=BB=84?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 ColorInput 组件用于颜色选择 - 重构 ImageUpload 组件,增加编辑和删除功能 - 更新 DIY 编辑器相关组件,优化用户体验 - 添加商城 H5 预览地址配置 - 优化导航栏单元格属性配置 --- .vscode/extensions.json | 3 +- apps/web-ele/.env.development | 2 + apps/web-ele/.env.production | 2 + .../src/assets/imgs/diy/app-nav-bar-mp.png | Bin 0 -> 3595 bytes .../web-ele/src/assets/imgs/diy/statusBar.png | Bin 0 -> 8917 bytes apps/web-ele/src/bootstrap.ts | 3 +- .../app-link-input/app-link-select-dialog.vue | 35 +- .../src/components/app-link-input/index.vue | 9 +- .../src/components/color-input/index.vue | 38 ++ .../components/ComponentContainer.vue | 48 +- .../components/ComponentContainerProperty.vue | 74 +-- .../components/ComponentLibrary.vue | 20 +- .../components/diy-editor/components/indxe.ts | 5 - .../components/mobile/Carousel/index.vue | 20 +- .../components/mobile/Carousel/property.vue | 115 +++-- .../components/mobile/CouponCard/index.vue | 27 +- .../components/mobile/CouponCard/property.vue | 101 ++-- .../mobile/FloatingActionButton/index.vue | 20 +- .../mobile/FloatingActionButton/property.vue | 62 ++- .../components/HotZoneEditDialog/index.vue | 24 +- .../components/mobile/HotZone/property.vue | 1 + .../components/mobile/ImageBar/property.vue | 1 + .../components/mobile/MagicCube/property.vue | 7 +- .../components/mobile/MenuGrid/index.vue | 12 +- .../components/mobile/MenuGrid/property.vue | 70 ++- .../components/mobile/MenuList/property.vue | 7 +- .../components/mobile/MenuSwiper/property.vue | 7 +- .../NavigationBar/components/CellProperty.vue | 82 ++-- .../components/mobile/NavigationBar/index.vue | 5 +- .../mobile/NavigationBar/property.vue | 1 + .../components/mobile/NoticeBar/property.vue | 6 +- .../components/mobile/PageConfig/property.vue | 6 +- .../components/mobile/Popover/property.vue | 7 +- .../components/mobile/ProductCard/index.vue | 36 +- .../mobile/ProductCard/property.vue | 186 ++++---- .../mobile/ProductList/property.vue | 7 +- .../mobile/PromotionCombination/index.vue | 36 +- .../mobile/PromotionCombination/property.vue | 178 +++---- .../mobile/PromotionPoint/index.vue | 36 +- .../mobile/PromotionPoint/property.vue | 184 ++++---- .../mobile/PromotionSeckill/index.vue | 36 +- .../mobile/PromotionSeckill/property.vue | 185 ++++---- .../components/mobile/SearchBar/index.vue | 9 +- .../components/mobile/SearchBar/property.vue | 114 +++-- .../components/mobile/TabBar/index.vue | 10 +- .../components/mobile/TabBar/property.vue | 102 ++-- .../components/mobile/TitleBar/property.vue | 7 +- .../mobile/VideoPlayer/property.vue | 1 + .../src/components/diy-editor/index.ts | 5 - .../src/components/diy-editor/index.vue | 445 +++++++++--------- .../src/components/draggable/index.vue | 96 ++++ .../src/components/input-with-color/index.vue | 44 ++ .../components/magic-cube-editor/index.vue | 300 ++++++++++++ .../src/components/magic-cube-editor/util.ts | 72 +++ .../src/components/upload/image-upload.vue | 213 +++++++-- .../vertical-button-group/index.vue | 44 ++ apps/web-ele/src/router/routes/modules/diy.ts | 12 +- apps/web-ele/src/utils/constants.ts | 21 + .../product/spu/components/spu-showcase.vue | 18 +- .../spu/components/spu-table-select.vue | 92 ++-- .../promotion/diy/page/modules/decorate.vue | 2 +- .../diy/template/modules/decorate.vue | 68 +-- .../point/components/point-showcase.vue | 16 +- .../seckill/components/seckill-showcase.vue | 18 +- 64 files changed, 2248 insertions(+), 1165 deletions(-) create mode 100644 apps/web-ele/src/assets/imgs/diy/app-nav-bar-mp.png create mode 100644 apps/web-ele/src/assets/imgs/diy/statusBar.png create mode 100644 apps/web-ele/src/components/color-input/index.vue delete mode 100644 apps/web-ele/src/components/diy-editor/components/indxe.ts delete mode 100644 apps/web-ele/src/components/diy-editor/index.ts create mode 100644 apps/web-ele/src/components/draggable/index.vue create mode 100644 apps/web-ele/src/components/input-with-color/index.vue create mode 100644 apps/web-ele/src/components/magic-cube-editor/index.vue create mode 100644 apps/web-ele/src/components/magic-cube-editor/util.ts create mode 100644 apps/web-ele/src/components/vertical-button-group/index.vue diff --git a/.vscode/extensions.json b/.vscode/extensions.json index e8dc9ed9b..c67d983e2 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -21,7 +21,8 @@ // CSS 变量提示 "vunguyentuan.vscode-css-variables", // 在 package.json 中显示 PNPM catalog 的版本 - "antfu.pnpm-catalog-lens" + "antfu.pnpm-catalog-lens", + "augment.vscode-augment" ], "unwantedRecommendations": [ // 和 volar 冲突 diff --git a/apps/web-ele/.env.development b/apps/web-ele/.env.development index 02edf8dd7..77c13d398 100644 --- a/apps/web-ele/.env.development +++ b/apps/web-ele/.env.development @@ -19,3 +19,5 @@ VITE_INJECT_APP_LOADING=true VITE_APP_DEFAULT_USERNAME=admin # 默认登录密码 VITE_APP_DEFAULT_PASSWORD=admin123 + +VITE_MALL_H5_DOMAIN='http://mall.yudao.iocoder.cn' diff --git a/apps/web-ele/.env.production b/apps/web-ele/.env.production index 910fd64cc..ac0408ec4 100644 --- a/apps/web-ele/.env.production +++ b/apps/web-ele/.env.production @@ -21,3 +21,5 @@ VITE_INJECT_APP_LOADING=true # 打包后是否生成dist.zip VITE_ARCHIVER=true + +VITE_MALL_H5_DOMAIN='http://mall.yudao.iocoder.cn' diff --git a/apps/web-ele/src/assets/imgs/diy/app-nav-bar-mp.png b/apps/web-ele/src/assets/imgs/diy/app-nav-bar-mp.png new file mode 100644 index 0000000000000000000000000000000000000000..c982804c7287c904468dad6252fd393c6cbd271f GIT binary patch literal 3595 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 Y)KD1lT9stKL4Yr5ae1*HB8Gwg2lSJ;0RR91 literal 0 HcmV?d00001 diff --git a/apps/web-ele/src/bootstrap.ts b/apps/web-ele/src/bootstrap.ts index c366b2784..9b31950f4 100644 --- a/apps/web-ele/src/bootstrap.ts +++ b/apps/web-ele/src/bootstrap.ts @@ -1,4 +1,5 @@ import { createApp, watchEffect } from 'vue'; +import VueDOMPurifyHTML from 'vue-dompurify-html'; import { registerAccessDirective } from '@vben/access'; import { registerLoadingDirective } from '@vben/common-ui'; @@ -34,7 +35,7 @@ async function bootstrap(namespace: string) { // zIndex: 2000, // }); const app = createApp(App); - + app.use(VueDOMPurifyHTML); // 注册Element Plus提供的v-loading指令 app.directive('loading', ElLoading.directive); diff --git a/apps/web-ele/src/components/app-link-input/app-link-select-dialog.vue b/apps/web-ele/src/components/app-link-input/app-link-select-dialog.vue index a1a106a79..06d71be76 100644 --- a/apps/web-ele/src/components/app-link-input/app-link-select-dialog.vue +++ b/apps/web-ele/src/components/app-link-input/app-link-select-dialog.vue @@ -7,6 +7,8 @@ import { nextTick, ref } from 'vue'; import { getUrlNumberValue } from '@vben/utils'; +import { ElScrollbar } from 'element-plus'; + import ProductCategorySelect from '#/views/mall/product/category/components/product-category-select.vue'; import { APP_LINK_GROUP_LIST, APP_LINK_TYPE_ENUM } from './data'; @@ -28,7 +30,6 @@ const dialogVisible = ref(false); const open = (link: string) => { activeAppLink.value.path = link; dialogVisible.value = true; - // 滚动到当前的链接 const group = APP_LINK_GROUP_LIST.find((group) => group.links.some((linkItem) => { @@ -127,7 +128,7 @@ const scrollToGroupBtn = (group: string) => { // 是否为相同的链接(不比较参数,只比较链接) const isSameLink = (link1: string, link2: string) => { - return link1.split('?')[0] === link2.split('?')[0]; + return link2 ? link1.split('?')[0] === link2.split('?')[0] : false; }; // 详情选择对话框 @@ -154,10 +155,10 @@ const handleProductCategorySelected = (id: number) => { }; - - - + + + + diff --git a/apps/web-ele/src/components/app-link-input/index.vue b/apps/web-ele/src/components/app-link-input/index.vue index 45938d6f2..5b608c4e1 100644 --- a/apps/web-ele/src/components/app-link-input/index.vue +++ b/apps/web-ele/src/components/app-link-input/index.vue @@ -1,12 +1,17 @@ + + + + diff --git a/apps/web-ele/src/components/diy-editor/components/ComponentContainer.vue b/apps/web-ele/src/components/diy-editor/components/ComponentContainer.vue index cc7b76a42..d573fc57e 100644 --- a/apps/web-ele/src/components/diy-editor/components/ComponentContainer.vue +++ b/apps/web-ele/src/components/diy-editor/components/ComponentContainer.vue @@ -6,11 +6,16 @@ import type { import { computed } from 'vue'; +import { ElButton, ElTooltip } from 'element-plus'; + +import { components } from '#/components/diy-editor/components/mobile'; +import VerticalButtonGroup from '#/components/vertical-button-group/index.vue'; + /** * 组件容器:目前在中间部分 * 用于包裹组件,为组件提供 背景、外边距、内边距、边框等样式 */ -defineOptions({ name: 'ComponentContainer' }); +defineOptions({ name: 'ComponentContainer', components }); const props = defineProps({ component: { @@ -29,6 +34,10 @@ const props = defineProps({ type: Boolean, default: false, }, + showToolbar: { + type: Boolean, + default: false, + }, }); const emits = defineEmits<{ @@ -106,34 +115,37 @@ const handleDeleteComponent = () => { {{ component.name }} -
+
- - + - - - - + + + - - - - + + + + - - - - + + + + - - + +
diff --git a/apps/web-ele/src/components/diy-editor/components/ComponentContainerProperty.vue b/apps/web-ele/src/components/diy-editor/components/ComponentContainerProperty.vue index becfe404e..2ebcccccf 100644 --- a/apps/web-ele/src/components/diy-editor/components/ComponentContainerProperty.vue +++ b/apps/web-ele/src/components/diy-editor/components/ComponentContainerProperty.vue @@ -2,6 +2,20 @@ import type { ComponentStyle } from '#/components/diy-editor/util'; import { useVModel } from '@vueuse/core'; +import { + ElCard, + ElForm, + ElFormItem, + ElRadio, + ElRadioGroup, + ElSlider, + ElTabPane, + ElTabs, + ElTree, +} from 'element-plus'; + +import ColorInput from '#/components/color-input/index.vue'; +import UploadImg from '#/components/upload/image-upload.vue'; /** * 组件容器属性:目前右边部分 @@ -110,48 +124,54 @@ const handleSliderChange = (prop: string) => { diff --git a/apps/web-ele/src/components/diy-editor/components/mobile/CouponCard/property.vue b/apps/web-ele/src/components/diy-editor/components/mobile/CouponCard/property.vue index 3b65e91ae..39dfd6b35 100644 --- a/apps/web-ele/src/components/diy-editor/components/mobile/CouponCard/property.vue +++ b/apps/web-ele/src/components/diy-editor/components/mobile/CouponCard/property.vue @@ -5,11 +5,23 @@ import type { MallCouponTemplateApi } from '#/api/mall/promotion/coupon/couponTe import { ref, watch } from 'vue'; +import { IconifyIcon } from '@vben/icons'; import { floatToFixed2 } from '@vben/utils'; import { useVModel } from '@vueuse/core'; +import { + ElCard, + ElForm, + ElFormItem, + ElRadioButton, + ElRadioGroup, + ElSlider, + ElTooltip, +} from 'element-plus'; import * as CouponTemplateApi from '#/api/mall/promotion/coupon/couponTemplate'; +import ColorInput from '#/components/color-input/index.vue'; +import UploadImg from '#/components/upload/image-upload.vue'; import { CouponTemplateTakeTypeEnum, PromotionDiscountTypeEnum, @@ -52,15 +64,15 @@ watch(