feat:【antd】【mall】diy-editor 修复 element-plus 组件之路:部分解决 10%

This commit is contained in:
YunaiV
2025-10-26 00:02:51 +08:00
parent 0fb4f0f9eb
commit 289f6e3de4
11 changed files with 90 additions and 53 deletions

View File

@@ -5,6 +5,8 @@ import { nextTick, ref } from 'vue';
import { getUrlNumberValue } from '@vben/utils'; import { getUrlNumberValue } from '@vben/utils';
import { Button, Form, FormItem, Modal, Tooltip } from 'ant-design-vue';
import ProductCategorySelect from '#/views/mall/product/category/components/product-category-select.vue'; import ProductCategorySelect from '#/views/mall/product/category/components/product-category-select.vue';
import { APP_LINK_GROUP_LIST, APP_LINK_TYPE_ENUM } from './data'; import { APP_LINK_GROUP_LIST, APP_LINK_TYPE_ENUM } from './data';

View File

@@ -1,8 +1,8 @@
<script lang="ts" setup> <script lang="ts" setup>
// TODO @AI改成 El 标签风格,而不是 el-
// TODO @AI一些 modal 是否使用 Modal 组件,而不是 el-modal
import { ref, watch } from 'vue'; import { ref, watch } from 'vue';
import { Button, Input, InputGroup } from 'ant-design-vue';
import AppLinkSelectDialog from './app-link-select-dialog.vue'; import AppLinkSelectDialog from './app-link-select-dialog.vue';
/** APP 链接输入框 */ /** APP 链接输入框 */

View File

@@ -1,9 +1,10 @@
<script setup lang="ts"> <script setup lang="ts">
// TODO @AI改成 El 风格而不是iel- 风格;
import { computed } from 'vue'; import { computed } from 'vue';
import { PREDEFINE_COLORS } from '@vben/constants'; import { PREDEFINE_COLORS } from '@vben/constants';
import { Input, InputGroup } from 'ant-design-vue';
/** 颜色输入框 */ /** 颜色输入框 */
defineOptions({ name: 'ColorInput' }); defineOptions({ name: 'ColorInput' });

View File

@@ -2,6 +2,17 @@
import type { ComponentStyle } from '../util'; import type { ComponentStyle } from '../util';
import { useVModel } from '@vueuse/core'; import { useVModel } from '@vueuse/core';
import {
Card,
Form,
FormItem,
Radio,
RadioGroup,
Slider,
TabPane,
Tabs,
Tree,
} from 'ant-design-vue';
import UploadImg from '#/components/upload/image-upload.vue'; import UploadImg from '#/components/upload/image-upload.vue';
import { ColorInput } from '#/views/mall/promotion/components'; import { ColorInput } from '#/views/mall/promotion/components';

View File

@@ -5,6 +5,8 @@ import { computed } from 'vue';
import { IconifyIcon } from '@vben/icons'; import { IconifyIcon } from '@vben/icons';
import { Button, Tooltip } from 'ant-design-vue';
import { VerticalButtonGroup } from '#/views/mall/promotion/components'; import { VerticalButtonGroup } from '#/views/mall/promotion/components';
import { components } from './mobile'; import { components } from './mobile';

View File

@@ -6,6 +6,7 @@ import { reactive, watch } from 'vue';
import { IconifyIcon } from '@vben/icons'; import { IconifyIcon } from '@vben/icons';
import { cloneDeep } from '@vben/utils'; import { cloneDeep } from '@vben/utils';
import { Collapse, CollapsePanel } from 'ant-design-vue';
import draggable from 'vuedraggable'; import draggable from 'vuedraggable';
import { componentConfigs } from './mobile/index'; import { componentConfigs } from './mobile/index';

View File

@@ -2,6 +2,18 @@
import type { NavigationBarProperty } from './config'; import type { NavigationBarProperty } from './config';
import { useVModel } from '@vueuse/core'; import { useVModel } from '@vueuse/core';
import {
Card,
Checkbox,
Form,
FormItem,
Radio,
RadioGroup,
Tooltip,
} from 'ant-design-vue';
import UploadImg from '#/components/upload/image-upload.vue';
import { ColorInput } from '#/views/mall/promotion/components';
import NavigationBarCellProperty from './components/cell-property.vue'; import NavigationBarCellProperty from './components/cell-property.vue';
@@ -23,47 +35,52 @@ if (!formData.value._local) {
</script> </script>
<template> <template>
<el-form label-width="80px" :model="formData" :rules="rules"> <Form
<el-form-item label="样式" prop="styleType"> :label-col="{ span: 6 }"
<el-radio-group v-model="formData!.styleType"> :wrapper-col="{ span: 18 }"
<el-radio value="normal">标准</el-radio> :model="formData"
<el-tooltip :rules="rules"
content="沉侵式头部仅支持微信小程序、APP建议页面第一个组件为图片展示类组件" >
<FormItem label="样式" name="styleType">
<RadioGroup v-model:value="formData!.styleType">
<Radio value="normal">标准</Radio>
<Tooltip
title="沉侵式头部仅支持微信小程序、APP建议页面第一个组件为图片展示类组件"
placement="top" placement="top"
> >
<el-radio value="inner">沉浸式</el-radio> <Radio value="inner">沉浸式</Radio>
</el-tooltip> </Tooltip>
</el-radio-group> </RadioGroup>
</el-form-item> </FormItem>
<el-form-item <FormItem
label="常驻显示" label="常驻显示"
prop="alwaysShow" name="alwaysShow"
v-if="formData.styleType === 'inner'" v-if="formData.styleType === 'inner'"
> >
<el-radio-group v-model="formData!.alwaysShow"> <RadioGroup v-model:value="formData!.alwaysShow">
<el-radio :value="false">关闭</el-radio> <Radio :value="false">关闭</Radio>
<el-tooltip <Tooltip
content="常驻显示关闭后,头部小组件将在页面滑动时淡入" title="常驻显示关闭后,头部小组件将在页面滑动时淡入"
placement="top" placement="top"
> >
<el-radio :value="true">开启</el-radio> <Radio :value="true">开启</Radio>
</el-tooltip> </Tooltip>
</el-radio-group> </RadioGroup>
</el-form-item> </FormItem>
<el-form-item label="背景类型" prop="bgType"> <FormItem label="背景类型" name="bgType">
<el-radio-group v-model="formData.bgType"> <RadioGroup v-model:value="formData.bgType">
<el-radio value="color">纯色</el-radio> <Radio value="color">纯色</Radio>
<el-radio value="img">图片</el-radio> <Radio value="img">图片</Radio>
</el-radio-group> </RadioGroup>
</el-form-item> </FormItem>
<el-form-item <FormItem
label="背景颜色" label="背景颜色"
prop="bgColor" name="bgColor"
v-if="formData.bgType === 'color'" v-if="formData.bgType === 'color'"
> >
<ColorInput v-model="formData.bgColor" /> <ColorInput v-model="formData.bgColor" />
</el-form-item> </FormItem>
<el-form-item label="背景图片" prop="bgImg" v-else> <FormItem label="背景图片" name="bgImg" v-else>
<div class="flex items-center"> <div class="flex items-center">
<UploadImg <UploadImg
v-model="formData.bgImg" v-model="formData.bgImg"
@@ -74,44 +91,44 @@ if (!formData.value._local) {
/> />
<span class="mb-2 ml-2 text-xs text-gray-400">建议宽度750</span> <span class="mb-2 ml-2 text-xs text-gray-400">建议宽度750</span>
</div> </div>
</el-form-item> </FormItem>
<el-card class="property-group" shadow="never"> <Card class="property-group" :bordered="false">
<template #header> <template #title>
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<span>内容小程序</span> <span>内容小程序</span>
<el-form-item prop="_local.previewMp" class="mb-0"> <FormItem name="_local.previewMp" class="mb-0">
<el-checkbox <Checkbox
v-model="formData._local.previewMp" v-model:checked="formData._local.previewMp"
@change=" @change="
formData._local.previewOther = !formData._local.previewMp formData._local.previewOther = !formData._local.previewMp
" "
> >
预览 预览
</el-checkbox> </Checkbox>
</el-form-item> </FormItem>
</div> </div>
</template> </template>
<NavigationBarCellProperty v-model="formData.mpCells" is-mp /> <NavigationBarCellProperty v-model="formData.mpCells" is-mp />
</el-card> </Card>
<el-card class="property-group" shadow="never"> <Card class="property-group" :bordered="false">
<template #header> <template #title>
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<span>内容非小程序</span> <span>内容非小程序</span>
<el-form-item prop="_local.previewOther" class="mb-0"> <FormItem name="_local.previewOther" class="mb-0">
<el-checkbox <Checkbox
v-model="formData._local.previewOther" v-model:checked="formData._local.previewOther"
@change=" @change="
formData._local.previewMp = !formData._local.previewOther formData._local.previewMp = !formData._local.previewOther
" "
> >
预览 预览
</el-checkbox> </Checkbox>
</el-form-item> </FormItem>
</div> </div>
</template> </template>
<NavigationBarCellProperty v-model="formData.otherCells" :is-mp="false" /> <NavigationBarCellProperty v-model="formData.otherCells" :is-mp="false" />
</el-card> </Card>
</el-form> </Form>
</template> </template>
<style scoped lang="scss"></style> <style scoped lang="scss"></style>

View File

@@ -8,6 +8,7 @@ import { IconifyIcon } from '@vben/icons';
import { cloneDeep, isEmpty, isString } from '@vben/utils'; import { cloneDeep, isEmpty, isString } from '@vben/utils';
import { useQRCode } from '@vueuse/integrations/useQRCode'; import { useQRCode } from '@vueuse/integrations/useQRCode';
import { Button, Card, Modal, Tag, Tooltip } from 'ant-design-vue';
import draggable from 'vuedraggable'; import draggable from 'vuedraggable';
import statusBarImg from '#/assets/imgs/diy/statusBar.png'; import statusBarImg from '#/assets/imgs/diy/statusBar.png';

View File

@@ -1,10 +1,9 @@
<script setup lang="ts"> <script setup lang="ts">
// TODO @芋艿:后续合并到 diy-editor 里,并不是通用的;
import { IconifyIcon } from '@vben/icons'; import { IconifyIcon } from '@vben/icons';
import { cloneDeep } from '@vben/utils'; import { cloneDeep } from '@vben/utils';
import { useVModel } from '@vueuse/core'; import { useVModel } from '@vueuse/core';
import { Button, Tooltip } from 'ant-design-vue';
import VueDraggable from 'vuedraggable'; import VueDraggable from 'vuedraggable';
/** 拖拽组件封装 */ /** 拖拽组件封装 */

View File

@@ -2,6 +2,7 @@
import { PREDEFINE_COLORS } from '@vben/constants'; import { PREDEFINE_COLORS } from '@vben/constants';
import { useVModels } from '@vueuse/core'; import { useVModels } from '@vueuse/core';
import { Input, InputGroup } from 'ant-design-vue';
/** 带颜色选择器输入框 */ /** 带颜色选择器输入框 */
defineOptions({ name: 'InputWithColor' }); defineOptions({ name: 'InputWithColor' });

View File

@@ -1,4 +1,6 @@
<script setup lang="ts"> <script setup lang="ts">
import { ButtonGroup } from 'ant-design-vue';
/** /**
* 垂直按钮组 * 垂直按钮组
* Element 官方的按钮组只支持水平显示,通过重写样式实现垂直布局 * Element 官方的按钮组只支持水平显示,通过重写样式实现垂直布局