-
标题
-
-
+
-
-
-
-
-
+
+
+
+
图标设置
+
支持上传 1 张图片,建议 124*32px
+
+
+
![]()
+
+
图标
+
上传图标
+
+
+
+
+
标题设置
+
+
+
更多链接
+
+
+ {{ linkText(firstItem.moreUrl) }}
+
+ 选择链接
+
+
+
+
+
+
显示内容
+
+
展示信息
+
+ 店铺logo
+ 店铺名称
+
+
+
+
+
+
店铺数据
+
+
店铺数据
+
+
+ 默认规则
+ 自定义
+
+
+
+
+
+
+
+
+ {{ shop.storeName }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
![]()
+
{{ row.storeName }}
+
+
+
+
+ {{ row.selfOperated ? "自营" : "旗舰店" }}
+
+
+
+ 取消
+ 确定
+
+
diff --git a/manager/src/views/page-decoration/wap/config-panel/PanelTitle.vue b/manager/src/views/page-decoration/wap/config-panel/PanelTitle.vue
new file mode 100644
index 000000000..cdcbec055
--- /dev/null
+++ b/manager/src/views/page-decoration/wap/config-panel/PanelTitle.vue
@@ -0,0 +1,297 @@
+
+
+
+
+
+
+
文本标题
+
+
+
+
右侧按钮
+
+
+ 显示
+ 隐藏
+
+
+
+
+
+
+
链接
+
+
+ {{ linkText(item.moreUrl) }}
+
+ 选择链接
+
+
+
+
+
+
+
选择风格
+
+
风格
+
+
+ 背景图片
+ 背景色
+
+
+
+
+
+
上传背景图
+
+
+
![]()
+
+
上传背景图
+
+
+
建议 910px*86px
+
+
+
+
+
+
文字设置
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/manager/src/views/page-decoration/wap/config-panel/PanelVideo.vue b/manager/src/views/page-decoration/wap/config-panel/PanelVideo.vue
new file mode 100644
index 000000000..3c7d6e5c3
--- /dev/null
+++ b/manager/src/views/page-decoration/wap/config-panel/PanelVideo.vue
@@ -0,0 +1,300 @@
+
+
+
+
+
+
+
视频内容设置
+
+
上传视频
+
+
+ {{ item.videoUrl ? "已选择视频" : "未选择视频" }}
+
+
+ {{ item.videoUrl ? "重新选择" : "上传视频" }}
+
+
+
+
+
视频封面
+
+
+
![]()
+
+
封面
+
+ {{ item.poster ? "重新选择" : "上传封面" }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/manager/src/views/page-decoration/wap/config-panel/index.js b/manager/src/views/page-decoration/wap/config-panel/index.js
index df99000af..e9fb1fd63 100644
--- a/manager/src/views/page-decoration/wap/config-panel/index.js
+++ b/manager/src/views/page-decoration/wap/config-panel/index.js
@@ -11,6 +11,12 @@ import PanelFlexOne from "./PanelFlexOne.vue";
import PanelCarousel from "./PanelCarousel.vue";
import PanelAdCube from "./PanelAdCube.vue";
import PanelMenu from "./PanelMenu.vue";
+import PanelSearch from "./PanelSearch.vue";
+import PanelNotice from "./PanelNotice.vue";
+import PanelVideo from "./PanelVideo.vue";
+import PanelTitle from "./PanelTitle.vue";
+import PanelPromotion from "./PanelPromotion.vue";
+import PanelGoods from "./PanelGoods.vue";
// 图片魔方及其全部可选风格共用 PanelAdCube
const adCubeTypes = [
@@ -37,5 +43,11 @@ export default {
flexOne: PanelFlexOne,
carousel: PanelCarousel,
menu: PanelMenu,
+ search: PanelSearch,
+ notice: PanelNotice,
+ video: PanelVideo,
+ title: PanelTitle,
+ promotionDetail: PanelPromotion,
+ goods: PanelGoods,
...Object.fromEntries(adCubeTypes.map((t) => [t, PanelAdCube])),
};
diff --git a/manager/src/views/page-decoration/wap/config.js b/manager/src/views/page-decoration/wap/config.js
index b55083451..c7120e75a 100644
--- a/manager/src/views/page-decoration/wap/config.js
+++ b/manager/src/views/page-decoration/wap/config.js
@@ -113,11 +113,11 @@ export const modelData = [
list: [
{
title: "标题",
- color: "#fff",
- title1: '领取',
- color1: "#fff",
- bk_color: "#FF0000",
- textAlign: "center",
+ color: "#282828",
+ title1: '副标题',
+ color1: "#999999",
+ bk_color: "#FFFFFF",
+ textAlign: "left",
link: "",
url: '',
model: "link"
@@ -473,14 +473,6 @@ export const modelData = [
title: "标题",
size: "88*88 (1:1)",
model: "link"
- },
- {
- img: "https://i.loli.net/2020/12/05/eznDa3iNby5FkYL.png",
- url: "",
- link: "",
- title: "标题",
- size: "88*88 (1:1)",
- model: "link"
}
]
}
@@ -502,74 +494,6 @@ export const modelData = [
]
}
},
- {
- type: "goods",
- name: "商品分类",
- icon: "Goods",
- group: "base",
- img: "md-image",
- notAdd: true,
- notLink: true,
- notImg: true,
- options: {
- list: [
- {
- /**
- * 2021/12/9
- * 新增索引(‘index’)判断商品归属分类
- * 之前代码没有配置index也不会收到印象
- * 新建的楼层将采用索引判断分类
- */
- titleWay: [
- {
- title: "精选",
- desc: "电子推荐",
- ___index: 0,
- bindCategory:""
- },
- {
- title: "实惠",
- desc: "便宜好货",
- ___index: 1,
- bindCategory:""
- },
- {
- title: "进口",
- desc: "国际自营",
- ___index: 2,
- bindCategory:""
- },
- {
- title: "推荐",
- desc: "喂奶推荐",
- ___index: 3,
- bindCategory:""
- }
- ],
- listWay: [
- {
- img: "https://i.loli.net/2021/05/14/KTLSrOVJmEdX12A.png",
- price: "120",
- title:
- " 微软 (Microsoft) Xbox 无线控制器/手柄 湛蓝色 | 3.5mm耳机接口蓝牙连接 Xbox主机电脑平板通用",
- type: "精选",
- ___index: 0
- },
- {
- img: "https://i.loli.net/2020/12/05/c9mptI5Pg8qJ6ny.png",
- title:
- "宏碁(acer) DP高清线1.2版 2K*4KDisplayPort公对公接线笔记本电脑显卡连接显示器视频线1.5米",
- price: "190",
- type: "精选",
- ___index: 0
- },
-
- ]
- }
- ]
- }
- },
-
{
type: "notice",
name: "公告",
@@ -606,7 +530,66 @@ export const modelData = [
subColor: "#fff",
img: "md-image",
options: {
- list: []
+ list: [
+ {
+ type: "PINTUAN",
+ title: "超值拼团",
+ title1: "惊喜折扣",
+ bk_color: "#e1212b",
+ color1: "#fff",
+ groupSuccess: "134人拼团成功",
+ data: [
+ {
+ goodsName: "iPhone 16 Pro 5G智能手机 256GB 白色钛金属",
+ price: 8999,
+ originalPrice: 9999,
+ thumbnail: "/demo/apple-phone.png",
+ groupNum: 2,
+ joined: 3
+ },
+ {
+ goodsName: "Xiaomi 15 5G智能手机 12GB+256GB 白色",
+ price: 3999,
+ originalPrice: 4299,
+ thumbnail: "/demo/xiaomi-phone.png",
+ groupNum: 2,
+ joined: 8
+ },
+ {
+ goodsName: "vivo X200 5G智能手机 12GB+256GB 宝石蓝",
+ price: 4199,
+ originalPrice: 4599,
+ thumbnail: "/demo/vivo-phone.png",
+ groupNum: 2,
+ joined: 5
+ },
+ {
+ goodsName: "iPhone 16 5G智能手机 128GB 群青色",
+ price: 5999,
+ originalPrice: 6499,
+ thumbnail: "/demo/apple-phone.png",
+ groupNum: 2,
+ joined: 12
+ },
+ {
+ goodsName: "Redmi K80 5G智能手机 12GB+256GB 玄夜黑",
+ price: 2499,
+ originalPrice: 2799,
+ thumbnail: "/demo/xiaomi-phone.png",
+ groupNum: 2,
+ joined: 21
+ },
+ {
+ goodsName: "vivo S20 5G智能手机 8GB+256GB 凤羽金",
+ price: 2299,
+ originalPrice: 2599,
+ thumbnail: "/demo/vivo-phone.png",
+ groupNum: 2,
+ joined: 16
+ }
+ ]
+ }
+ ]
}
},
{
@@ -624,7 +607,37 @@ export const modelData = [
subColor: "#fff",
img: "md-image",
options: {
- list: []
+ layoutStyle: "1",
+ list: [
+ {
+ type: "LIVE",
+ title: "精彩直播",
+ title1: "精彩抢先看",
+ bk_color: "#e1212b",
+ color1: "#fff",
+ data: [
+ {
+ title: "直播标题直播标题直播标题直播标题",
+ anchorName: "樱桃小丸子",
+ status: "LIVE",
+ cover: "/demo/apple-phone.png"
+ },
+ {
+ title: "直播标题直播标题直播标题直播标题",
+ anchorName: "樱桃小丸子",
+ status: "REPLAY",
+ cover: "/demo/xiaomi-phone.png"
+ },
+ {
+ title: "直播标题直播标题直播标题直播标题",
+ anchorName: "樱桃小丸子",
+ status: "PREVIEW",
+ startTime: "7/29 10:00",
+ cover: "/demo/vivo-phone.png"
+ }
+ ]
+ }
+ ]
}
},
{
@@ -642,7 +655,38 @@ export const modelData = [
subColor: "#fff",
img: "md-image",
options: {
- list: []
+ layoutStyle: "1",
+ list: [
+ {
+ type: "SECKILL",
+ title: "限时秒杀",
+ title1: "邀请你的好友来参与",
+ bk_color: "#e1212b",
+ color1: "#fff",
+ data: [
+ {
+ goodsName: "一家很有品的店",
+ price: 234,
+ thumbnail: "/demo/apple-phone.png"
+ },
+ {
+ goodsName: "一家很有品的店",
+ price: 177,
+ thumbnail: "/demo/xiaomi-phone.png"
+ },
+ {
+ goodsName: "一家很有品的店",
+ price: 177,
+ thumbnail: "/demo/vivo-phone.png"
+ },
+ {
+ goodsName: "一家很有品的店",
+ price: 234,
+ thumbnail: "/demo/apple-phone.png"
+ }
+ ]
+ }
+ ]
}
},
{
@@ -660,7 +704,42 @@ export const modelData = [
subColor: "#fff",
img: "md-image",
options: {
- list: []
+ layoutStyle: "1",
+ list: [
+ {
+ type: "KANJIA",
+ title: "砍价免费拿",
+ title1: "邀请好友来砍价",
+ bk_color: "#e1212b",
+ color1: "#fff",
+ data: [
+ {
+ goodsName: "一家很有品的店",
+ price: 234,
+ purchasePrice: 99,
+ thumbnail: "/demo/apple-phone.png"
+ },
+ {
+ goodsName: "一家很有品的店",
+ price: 177,
+ purchasePrice: 77,
+ thumbnail: "/demo/xiaomi-phone.png"
+ },
+ {
+ goodsName: "一家很有品的店",
+ price: 177,
+ purchasePrice: 77,
+ thumbnail: "/demo/vivo-phone.png"
+ },
+ {
+ goodsName: "一家很有品的店",
+ price: 234,
+ purchasePrice: 99,
+ thumbnail: "/demo/apple-phone.png"
+ }
+ ]
+ }
+ ]
}
},
{
@@ -754,11 +833,39 @@ export const modelData = [
group: "marketing",
img: "md-image",
options: {
- list: [{ title: "积分商城", count: 3 }],
- bgColor: "#FFFFFF",
- paddingX: 0,
- pageGap: 10,
- borderRadius: 0
+ layoutStyle: "1",
+ list: [
+ {
+ title: "积分兑好礼",
+ count: 6,
+ data: [
+ {
+ goodsName: "一家很有品的店",
+ points: 200,
+ originalPrice: 234,
+ thumbnail: "/demo/apple-phone.png"
+ },
+ {
+ goodsName: "一家很有品的店",
+ points: 150,
+ originalPrice: 177,
+ thumbnail: "/demo/xiaomi-phone.png"
+ },
+ {
+ goodsName: "一家很有品的店",
+ points: 150,
+ originalPrice: 177,
+ thumbnail: "/demo/vivo-phone.png"
+ },
+ {
+ goodsName: "一家很有品的店",
+ points: 200,
+ originalPrice: 234,
+ thumbnail: "/demo/apple-phone.png"
+ }
+ ]
+ }
+ ]
}
},
{
@@ -768,11 +875,50 @@ export const modelData = [
group: "marketing",
img: "md-image",
options: {
- list: [{ title: "优惠券", count: 3 }],
- bgColor: "#FFFFFF",
- paddingX: 0,
- pageGap: 10,
- borderRadius: 0
+ layoutStyle: "1",
+ list: [
+ {
+ title: "优惠券",
+ count: 5,
+ data: [
+ {
+ id: 1,
+ couponType: "PRICE",
+ price: 70,
+ consumeThreshold: 500,
+ storeName: "platform"
+ },
+ {
+ id: 2,
+ couponType: "PRICE",
+ price: 50,
+ consumeThreshold: 300,
+ storeName: "platform"
+ },
+ {
+ id: 3,
+ couponType: "PRICE",
+ price: 30,
+ consumeThreshold: 200,
+ storeName: "platform"
+ },
+ {
+ id: 4,
+ couponType: "PRICE",
+ price: 20,
+ consumeThreshold: 100,
+ storeName: "platform"
+ },
+ {
+ id: 5,
+ couponType: "PRICE",
+ price: 10,
+ consumeThreshold: 0,
+ storeName: "platform"
+ }
+ ]
+ }
+ ]
}
},
{
@@ -802,5 +948,48 @@ export const modelData = [
pageGap: 10,
borderRadius: 0
}
- }
+ },
+ {
+ type: "goods",
+ name: "商品列表",
+ icon: "Goods",
+ group: "base",
+ img: "md-image",
+ notAdd: true,
+ notLink: true,
+ notImg: true,
+ options: {
+ list: [
+ {
+ layout: "list",
+ showName: true,
+ showPrice: true,
+ showSales: true,
+ cartShow: true,
+ cartStyle: "plus",
+ cartAction: "detail",
+ dataMode: "category",
+ categoryId: "",
+ brandId: "",
+ storeId: "",
+ goodsList: [],
+ count: 6,
+ sortType: "default"
+ }
+ ],
+ bgColor1: "#FFFFFF",
+ bgColor2: "#FFFFFF",
+ titleColor: "#282828",
+ toneMode: "theme",
+ priceColor: "#FF5C58",
+ salesColor: "#666666",
+ paddingTop: 10,
+ paddingBottom: 10,
+ paddingX: 12,
+ contentGap: 10,
+ pageGap: 10,
+ borderRadius: 0,
+ contentRadius: 7
+ }
+ },
];
diff --git a/manager/src/views/page-decoration/wap/controls/GradientField.vue b/manager/src/views/page-decoration/wap/controls/GradientField.vue
new file mode 100644
index 000000000..618788752
--- /dev/null
+++ b/manager/src/views/page-decoration/wap/controls/GradientField.vue
@@ -0,0 +1,75 @@
+
+
+
{{ label }}
+
+
+
+
+ 重置
+
+
+
+
+ 重置
+
+
+
+
+
+
+
+
diff --git a/manager/src/views/page-decoration/wap/controls/field-common.scss b/manager/src/views/page-decoration/wap/controls/field-common.scss
index 953be6693..c9b5dead0 100644
--- a/manager/src/views/page-decoration/wap/controls/field-common.scss
+++ b/manager/src/views/page-decoration/wap/controls/field-common.scss
@@ -6,11 +6,12 @@
}
.ctrl-label {
- width: 72px;
+ width: 90px;
flex-shrink: 0;
line-height: 32px;
color: #606266;
- font-size: 13px;
+ font-size: 14px;
+ white-space: nowrap;
}
.ctrl-body {
diff --git a/manager/src/views/page-decoration/wap/controls/panel-common.scss b/manager/src/views/page-decoration/wap/controls/panel-common.scss
new file mode 100644
index 000000000..fff458153
--- /dev/null
+++ b/manager/src/views/page-decoration/wap/controls/panel-common.scss
@@ -0,0 +1,179 @@
+// 新配置面板共用的骨架样式(灰底 + 白色卡片 + 头部 tabs)
+// 使用方式:面板根类名需与 .panel-root 一起用,或在面板 scoped 样式里 @import 后把根类加上
+.panel-search,
+.panel-promotion,
+.panel-coupon,
+.panel-title,
+.panel-shop,
+.panel-goods,
+.panel-notice,
+.panel-video,
+.panel-article,
+.panel-page-setting {
+ background: #f5f7fa;
+ margin: 0 -20px;
+ padding: 0 12px 12px;
+ min-height: 100%;
+ box-sizing: border-box;
+}
+.panel-header {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ height: 50px;
+ margin-bottom: 12px;
+ padding: 0 14px;
+ background: #ffffff;
+ border-radius: 8px;
+ box-shadow: 0 1px 4px rgba(0, 0, 0, 0.04);
+ box-sizing: border-box;
+ .panel-name {
+ font-size: 16px;
+ font-weight: bold;
+ color: #303133;
+ }
+}
+.panel-tabs {
+ display: inline-flex;
+ background: #f4f4f5;
+ border-radius: 8px;
+ padding: 3px;
+ .panel-tab {
+ padding: 5px 14px;
+ font-size: 13px;
+ border-radius: 6px;
+ cursor: pointer;
+ color: #606266;
+ transition: all 0.2s ease;
+ &.active {
+ background: #ffffff;
+ color: #409eff;
+ font-weight: 600;
+ box-shadow: 0 1px 4px rgba(0, 0, 0, 0.12);
+ }
+ }
+}
+.panel-card {
+ background: #ffffff;
+ border-radius: 8px;
+ padding: 14px;
+ margin-bottom: 12px;
+ box-shadow: 0 1px 4px rgba(0, 0, 0, 0.04);
+}
+.panel-card-fill {
+ flex: 1;
+ margin-bottom: 0;
+}
+// 面板根容器改为纵向 flex,让最后一张卡片可撑满到底
+.panel-flex-one,
+.panel-carousel,
+.panel-ad-cube,
+.panel-menu,
+.panel-search,
+.panel-notice,
+.panel-video,
+.panel-title,
+.panel-integral,
+.panel-coupon,
+.panel-article,
+.panel-shop,
+.panel-goods,
+.panel-blank,
+.panel-line,
+.panel-rich-text,
+.panel-promotion,
+.panel-page-setting {
+ display: flex;
+ flex-direction: column;
+}
+.section-title {
+ font-size: 14px;
+ font-weight: 600;
+ color: #303133;
+ margin: 0 0 12px;
+}
+.section-tip {
+ font-size: 13px;
+ color: #909399;
+ margin-bottom: 10px;
+}
+.setting-row {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ margin: 14px 0;
+ .setting-label {
+ font-size: 14px;
+ color: #606266;
+ .setting-value {
+ margin-left: 8px;
+ color: #303133;
+ }
+ }
+}
+.seg {
+ display: inline-flex;
+ border: 1px solid #dcdfe6;
+ border-radius: 6px;
+ overflow: hidden;
+ .seg-item {
+ padding: 6px 14px;
+ font-size: 13px;
+ color: #606266;
+ cursor: pointer;
+ border-left: 1px solid #dcdfe6;
+ transition: all 0.2s ease;
+ &:first-child {
+ border-left: none;
+ }
+ &.active {
+ background: #ecf5ff;
+ color: #409eff;
+ font-weight: 600;
+ }
+ }
+}
+// 选项平铺选择器:一行两个,超出换行
+.layout-seg {
+ display: flex;
+ flex-wrap: wrap;
+ width: 100%;
+ .seg-item {
+ flex: 1 0 40%;
+ padding: 6px 0;
+ text-align: center;
+ white-space: nowrap;
+ box-sizing: border-box;
+ &:nth-child(3) {
+ border-left: none;
+ }
+ &:nth-child(n + 3) {
+ border-top: 1px solid #dcdfe6;
+ }
+ }
+ &.layout-seg-3 {
+ flex-wrap: nowrap;
+ .seg-item {
+ flex: 1 1 0;
+ &:nth-child(3) {
+ border-left: 1px solid #dcdfe6;
+ }
+ &:nth-child(n + 3) {
+ border-top: none;
+ }
+ }
+ }
+}
+// 选项平铺选择器(独立用法):一行三个
+.layout-seg-3 {
+ display: flex;
+ flex-wrap: nowrap;
+ width: 100%;
+ .seg-item {
+ flex: 1 1 0;
+ padding: 6px 0;
+ text-align: center;
+ white-space: nowrap;
+ box-sizing: border-box;
+ }
+}
diff --git a/manager/src/views/page-decoration/wap/decorate.scss b/manager/src/views/page-decoration/wap/decorate.scss
index 3ca7e840d..bc7389a04 100644
--- a/manager/src/views/page-decoration/wap/decorate.scss
+++ b/manager/src/views/page-decoration/wap/decorate.scss
@@ -75,7 +75,7 @@
padding: 0 20px;
height: calc(100vh - 96px);
overflow-y: auto;
- padding-bottom: 120px;
+ background: #f5f7fa;
}
.decorate-title {
diff --git a/manager/src/views/page-decoration/wap/decorate.vue b/manager/src/views/page-decoration/wap/decorate.vue
index 9e32337e6..b1049d1c1 100644
--- a/manager/src/views/page-decoration/wap/decorate.vue
+++ b/manager/src/views/page-decoration/wap/decorate.vue
@@ -37,7 +37,7 @@
@@ -580,7 +580,7 @@ const hidePanelTitle = computed(
);
// hotzoneRef/ossManageRef:模板 ref 与组件 import 同名,改名避免互相覆盖
-const liliDialog = ref(null);
+const liliDialogRef = ref(null);
const hotzoneRef = ref(null);
const ossManageRef = ref(null);
@@ -748,9 +748,9 @@ function clickDrawer(item, index) {
}
// 打开图片选择器
function liliDialogFlag(flag) {
- liliDialog.value.clearGoodsSelected();
- liliDialog.value.goodsFlag = flag;
- liliDialog.value.flag = true;
+ liliDialogRef.value.clearGoodsSelected();
+ liliDialogRef.value.goodsFlag = flag;
+ liliDialogRef.value.flag = true;
}
function changeTextAlign(val) {
diff --git a/manager/src/views/page-decoration/wap/index.vue b/manager/src/views/page-decoration/wap/index.vue
index f4bba73e8..2a06c734d 100644
--- a/manager/src/views/page-decoration/wap/index.vue
+++ b/manager/src/views/page-decoration/wap/index.vue
@@ -32,8 +32,9 @@