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 000000000..c982804c7 Binary files /dev/null and b/apps/web-ele/src/assets/imgs/diy/app-nav-bar-mp.png differ diff --git a/apps/web-ele/src/assets/imgs/diy/statusBar.png b/apps/web-ele/src/assets/imgs/diy/statusBar.png new file mode 100644 index 000000000..b85562e42 Binary files /dev/null and b/apps/web-ele/src/assets/imgs/diy/statusBar.png differ 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(