diff --git a/buyer/src/App.vue b/buyer/src/App.vue
index ea59df2a..8130cf7d 100644
--- a/buyer/src/App.vue
+++ b/buyer/src/App.vue
@@ -6,7 +6,9 @@
diff --git a/buyer/src/api/common.js b/buyer/src/api/common.js
index b3e5e630..db827304 100644
--- a/buyer/src/api/common.js
+++ b/buyer/src/api/common.js
@@ -94,3 +94,12 @@ export function getBaseSite(){
needToken: false
})
}
+
+// 获取主题色配置
+export function getThemeSetting() {
+ return request({
+ url: `${commonUrl}/common/common/site/theme`,
+ method: Method.GET,
+ needToken: false,
+ });
+}
diff --git a/buyer/src/assets/styles/element.scss b/buyer/src/assets/styles/element.scss
index e89ef0d9..8e9cca44 100644
--- a/buyer/src/assets/styles/element.scss
+++ b/buyer/src/assets/styles/element.scss
@@ -1,18 +1,9 @@
:root {
- // --el-color-primary: #ff5c58;
- // --el-color-success: #68cabe;
- // --el-color-warning: #fa6419;
- // --el-color-danger: #ff3c2a;
+ --el-color-primary: var(--theme-color, #ff3c2a);
+ --el-color-danger: var(--theme-color, #ff3c2a);
--el-font-size-base: 14px;
}
-// .el-button--primary {
-// --el-button-bg-color: #ff5c58;
-// --el-button-border-color: #ff5c58;
-// --el-button-hover-bg-color: #ff7875;
-// --el-button-hover-border-color: #ff7875;
-// }
-
.el-table--border {
.el-table__cell {
border-right: none !important;
@@ -20,12 +11,12 @@
}
.link-text {
- color: #409eff;
+ color: var(--theme-color, #ff3c2a);
cursor: pointer;
text-decoration: none;
&:hover {
- color: #66b1ff;
+ opacity: 0.85;
}
}
@@ -34,16 +25,16 @@
color: #dcdfe6;
}
-/* 与「我的订单」确认收货按钮一致的橙色操作按钮 */
+/* 次要强调按钮,使用高亮主题色(如「立即购买」) */
.confirm-receipt-btn {
- background-color: #ff9900 !important;
- border-color: #ff9900 !important;
+ background-color: var(--theme-light, #ff6b35) !important;
+ border-color: var(--theme-light, #ff6b35) !important;
color: #fff !important;
&:hover,
&:focus {
- background-color: #e68a00 !important;
- border-color: #e68a00 !important;
+ background-color: color-mix(in srgb, var(--theme-light, #ff6b35) 88%, black) !important;
+ border-color: color-mix(in srgb, var(--theme-light, #ff6b35) 88%, black) !important;
color: #fff !important;
}
}
diff --git a/buyer/src/assets/styles/global.scss b/buyer/src/assets/styles/global.scss
index b1b298da..7f5103e9 100644
--- a/buyer/src/assets/styles/global.scss
+++ b/buyer/src/assets/styles/global.scss
@@ -10,7 +10,7 @@ $warning_color: #ff9900;
$error_color: #ed3f14;
$handle-btn-color: #438cde;
-$theme_color: #F31947;
+$theme_color: var(--theme-color, #ff3c2a);
$border_color: #dddee1;
$title_color: #8c8c8c;
diff --git a/buyer/src/components/goodsDetail/ShowGoods.vue b/buyer/src/components/goodsDetail/ShowGoods.vue
index 44e1c7df..6f801921 100644
--- a/buyer/src/components/goodsDetail/ShowGoods.vue
+++ b/buyer/src/components/goodsDetail/ShowGoods.vue
@@ -814,7 +814,7 @@ export default {
color: $theme_color;
margin: 5px 0;
font-size: 12px;
- background-color: #ffdedf;
+ background-color: var(--theme-tint-12, #ffdedf);
border: 1px dotted $theme_color;
cursor: pointer;
@@ -839,7 +839,7 @@ export default {
padding: 0 5px;
color: $theme_color;
font-size: 12px;
- background-color: #ffdedf;
+ background-color: var(--theme-tint-12, #ffdedf);
border: 1px dotted $theme_color;
cursor: pointer;
diff --git a/buyer/src/components/indexDecorate/modelList/Seckill.vue b/buyer/src/components/indexDecorate/modelList/Seckill.vue
index 93fdddbc..3e98cc50 100644
--- a/buyer/src/components/indexDecorate/modelList/Seckill.vue
+++ b/buyer/src/components/indexDecorate/modelList/Seckill.vue
@@ -130,7 +130,7 @@ export default {
width: 190px;
height: 100%;
color: #fff;
- background: linear-gradient(180deg, #ff5c58 0%, #e84a46 100%);
+ background: linear-gradient(180deg, var(--theme-color, #F31947) 0%, var(--theme-light, #ff6b35) 100%);
.title {
width: 100%;
text-align: center;
diff --git a/buyer/src/components/indexDecorate/modelList/goodsAndType.vue b/buyer/src/components/indexDecorate/modelList/goodsAndType.vue
index 55b15872..e199cf6f 100644
--- a/buyer/src/components/indexDecorate/modelList/goodsAndType.vue
+++ b/buyer/src/components/indexDecorate/modelList/goodsAndType.vue
@@ -173,7 +173,7 @@ export default {
text-align: center;
letter-spacing: 0px;
- color: #f31947;
+ color: $theme_color;
-webkit-text-stroke: #979797 0.7px; /* 浏览器可能不支持 */
}
.goods-type-line {
@@ -190,7 +190,7 @@ export default {
color: #333333;
}
.active {
- color: #f31947;
+ color: $theme_color;
}
.goods-type-labels {
cursor: pointer;
diff --git a/buyer/src/components/indexDecorate/modelList/mixs/mix-goods.vue b/buyer/src/components/indexDecorate/modelList/mixs/mix-goods.vue
index 69206be0..e6ae0a77 100644
--- a/buyer/src/components/indexDecorate/modelList/mixs/mix-goods.vue
+++ b/buyer/src/components/indexDecorate/modelList/mixs/mix-goods.vue
@@ -85,7 +85,7 @@ export default {
font-size: 14px;
font-weight: normal;
line-height: 17px;
- color: #f31947;
+ color: $theme_color;
margin-top: 8px;
}
@@ -139,7 +139,7 @@ export default {
height: 27px;
line-height: 27px;
border-radius: 13.3px 0 0 13.3px;
- background: #f31947;
+ background: $theme_color;
font-size: 12.6px;
text-align: center;
color: #ffffff;
diff --git a/buyer/src/main.js b/buyer/src/main.js
index 90953af6..dc35c0ff 100644
--- a/buyer/src/main.js
+++ b/buyer/src/main.js
@@ -10,6 +10,8 @@ import { setupLegacyMessage } from "@/utils/message";
import { registerGlobalComponents } from "@/components/global.js";
import * as filters from "./plugins/filters";
import storage from "@/plugins/storage";
+import { fetchAndApplyTheme } from "@/utils/theme";
+import { getThemeSetting } from "@/api/common.js";
const { aMapSecurityJsCode, inputMaxLength } = require("@/config");
@@ -49,6 +51,7 @@ app.config.globalProperties.connectCs = function (
window.open(url, "_blank");
};
-router.isReady().then(() => {
+router.isReady().then(async () => {
+ await fetchAndApplyTheme(getThemeSetting);
app.mount("#app");
});
diff --git a/buyer/src/utils/theme.js b/buyer/src/utils/theme.js
new file mode 100644
index 00000000..5ab17c85
--- /dev/null
+++ b/buyer/src/utils/theme.js
@@ -0,0 +1,95 @@
+/**
+ * 平台主题色工具
+ */
+const DEFAULT_THEME = {
+ themeColor: "#ff3c2a",
+ lightColor: "#ff6b35",
+ aiderLightColor: "#ff9f28",
+};
+
+const STORAGE_KEY = "theme_setting";
+const EXPIRATION_KEY = "theme_setting_expiration_time";
+
+export function getDefaultTheme() {
+ return { ...DEFAULT_THEME };
+}
+
+function applyElementColorVars(style, prefix, color) {
+ const key = `--el-color-${prefix}`;
+ style.setProperty(key, color);
+ style.setProperty(`${key}-light-3`, `color-mix(in srgb, ${color} 70%, white)`);
+ style.setProperty(`${key}-light-5`, `color-mix(in srgb, ${color} 50%, white)`);
+ style.setProperty(`${key}-light-7`, `color-mix(in srgb, ${color} 30%, white)`);
+ style.setProperty(`${key}-light-8`, `color-mix(in srgb, ${color} 20%, white)`);
+ style.setProperty(`${key}-light-9`, `color-mix(in srgb, ${color} 10%, white)`);
+ style.setProperty(`${key}-dark-2`, `color-mix(in srgb, ${color} 80%, black)`);
+}
+
+export function applyThemeToDocument(theme) {
+ if (typeof document === "undefined") return;
+ const primary = theme.themeColor || DEFAULT_THEME.themeColor;
+ const light = theme.lightColor || DEFAULT_THEME.lightColor;
+ const aider = theme.aiderLightColor || DEFAULT_THEME.aiderLightColor;
+ const root = document.documentElement.style;
+
+ root.setProperty("--theme-color", primary);
+ root.setProperty("--theme-light", light);
+ root.setProperty("--theme-aider", aider);
+ root.setProperty("--theme-tint-12", `color-mix(in srgb, ${primary} 12%, white)`);
+
+ applyElementColorVars(root, "primary", primary);
+ // 买家端大量按钮使用 type="danger",统一映射到主题色
+ applyElementColorVars(root, "danger", primary);
+}
+
+export function cacheTheme(theme) {
+ const expirationTime = new Date().setHours(new Date().getHours() + 1);
+ localStorage.setItem(EXPIRATION_KEY, String(expirationTime));
+ localStorage.setItem(STORAGE_KEY, JSON.stringify(theme));
+}
+
+export function loadCachedTheme() {
+ const expirationTime = localStorage.getItem(EXPIRATION_KEY);
+ const cacheValid =
+ expirationTime && new Date() <= new Date(Number(expirationTime));
+ if (!cacheValid) return null;
+ try {
+ const raw = localStorage.getItem(STORAGE_KEY);
+ return raw ? JSON.parse(raw) : null;
+ } catch {
+ return null;
+ }
+}
+
+export function normalizeTheme(data = {}) {
+ return {
+ themeColor: data.themeColor || DEFAULT_THEME.themeColor,
+ lightColor: data.lightColor || DEFAULT_THEME.lightColor,
+ aiderLightColor: data.aiderLightColor || DEFAULT_THEME.aiderLightColor,
+ };
+}
+
+export async function fetchAndApplyTheme(requestFn) {
+ const cachedTheme = loadCachedTheme();
+ if (cachedTheme) {
+ applyThemeToDocument(normalizeTheme(cachedTheme));
+ }
+
+ try {
+ const res = await requestFn();
+ if (res?.success && res?.result?.settingValue) {
+ const data = JSON.parse(res.result.settingValue);
+ const normalized = normalizeTheme(data);
+ applyThemeToDocument(normalized);
+ cacheTheme(normalized);
+ return normalized;
+ }
+ } catch (error) {
+ console.warn(
+ "[theme] 主题色加载失败,请确认 common-api(8890) 已启动且已执行 version4.9to4.10.sql",
+ error
+ );
+ }
+
+ return cachedTheme ? normalizeTheme(cachedTheme) : normalizeTheme();
+}
diff --git a/manager/public/config.js b/manager/public/config.js
index 9f51858a..09375686 100644
--- a/manager/public/config.js
+++ b/manager/public/config.js
@@ -3,10 +3,10 @@ var BASE = {
* @description api请求基础路径
*/
API_DEV: {
- common: "https://common-api.pickmall.cn",
- buyer: "https://buyer-api.pickmall.cn",
- seller: "https://store-api.pickmall.cn",
- manager: "https://admin-api.pickmall.cn",
+ common: "http://127.0.0.1:8890",
+ buyer: "http://127.0.0.1:8888",
+ seller: "http://127.0.0.1:8889",
+ manager: "http://127.0.0.1:8887",
},
API_PROD: {
common: "https://common-api.pickmall.cn",
diff --git a/manager/src/router/router.js b/manager/src/router/router.js
index 0546e218..faa6c5bd 100644
--- a/manager/src/router/router.js
+++ b/manager/src/router/router.js
@@ -349,6 +349,12 @@ export const otherRouter = {
name: "main",
component: () => import("@/views/page-decoration/wap/main.vue")
},
+ {
+ path: "/floorList/theme-setting",
+ title: "主题色设置",
+ name: "theme-setting",
+ component: () => import("@/views/page-decoration/theme-setting.vue")
+ },
{
path: "add-sms-sign",
title: "短信签名",
diff --git a/manager/src/views/login.vue b/manager/src/views/login.vue
index 592ad6d3..a9ea8d72 100644
--- a/manager/src/views/login.vue
+++ b/manager/src/views/login.vue
@@ -377,7 +377,7 @@ export default {
transition: background-color 0.2s ease, opacity 0.2s ease;
&:hover {
- background: darken($theme_color, 4%);
+ background: color-mix(in srgb, #{$theme_color} 96%, black);
opacity: 1;
}
}
diff --git a/manager/src/views/page-decoration/floorList.vue b/manager/src/views/page-decoration/floorList.vue
index 63f3786c..3f8b5197 100644
--- a/manager/src/views/page-decoration/floorList.vue
+++ b/manager/src/views/page-decoration/floorList.vue
@@ -11,6 +11,7 @@
添加页面
+ 主题色设置
@@ -168,6 +169,10 @@ export default {
});
},
+ goThemeSetting() {
+ this.$router.push({ name: "theme-setting" });
+ },
+
changePageNum(val) {
this.searchForm.pageNumber = val;
this.getTemplateList();
diff --git a/manager/src/views/page-decoration/theme-setting.vue b/manager/src/views/page-decoration/theme-setting.vue
new file mode 100644
index 00000000..1858fed8
--- /dev/null
+++ b/manager/src/views/page-decoration/theme-setting.vue
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+ 买家端主色,用于按钮、价格、标签等
+
+
+
+ 用于渐变、高亮背景等
+
+
+
+ 用于渐变辅助色、次要强调
+
+
+ 保存
+
+
+
+
+
+
+
+
+
diff --git a/manager/src/views/page-decoration/wap/config.js b/manager/src/views/page-decoration/wap/config.js
index ecc79cd3..ce2c5b13 100644
--- a/manager/src/views/page-decoration/wap/config.js
+++ b/manager/src/views/page-decoration/wap/config.js
@@ -660,5 +660,45 @@ export const modelData = [
options: {
list: []
}
+ },
+ {
+ type: "video",
+ name: "视频",
+ img: "md-image",
+ notAdd: true,
+ notImg: true,
+ notLink: true,
+ notTitle: true,
+ options: {
+ list: [
+ {
+ videoUrl: "",
+ poster: "",
+ autoplay: false,
+ aspectRatio: "16:9",
+ style: {
+ bgType: "color",
+ bgColorStart: "#F5F5F5",
+ bgColorEnd: "#F5F5F5",
+ bgGradientDir: "horizontal",
+ bgRadius: 0,
+ bottomBgColor: "#F5F5F5",
+ bgImage: "",
+ margin: 0,
+ padding: 0,
+ borderShow: false,
+ borderStyle: "solid",
+ borderWidth: 1,
+ borderColor: "#e5e5e5",
+ shadowShow: false,
+ shadowColor: "rgba(0,0,0,0.1)",
+ shadowX: 0,
+ shadowY: 0,
+ shadowBlur: 10,
+ shadowSpread: 0,
+ },
+ },
+ ],
+ }
}
];
diff --git a/manager/src/views/page-decoration/wap/decorate.scss b/manager/src/views/page-decoration/wap/decorate.scss
index b3e4b6ef..24471ea4 100644
--- a/manager/src/views/page-decoration/wap/decorate.scss
+++ b/manager/src/views/page-decoration/wap/decorate.scss
@@ -51,15 +51,15 @@
width: 100%;
display: flex;
flex-wrap: wrap;
+ gap: 14px;
>.drawer-item {
cursor: pointer;
border: 1px solid #ededed;
background: #f9f0ff;
- width: 170px;
- margin-right: 14px;
+ width: calc(50% - 7px);
+ box-sizing: border-box;
color: #9254de;
- margin-bottom: 14px;
border-radius: 0.8em;
height: 60px;
display: flex;
diff --git a/manager/src/views/page-decoration/wap/decorate.vue b/manager/src/views/page-decoration/wap/decorate.vue
index 55b94f03..6e49123c 100644
--- a/manager/src/views/page-decoration/wap/decorate.vue
+++ b/manager/src/views/page-decoration/wap/decorate.vue
@@ -107,7 +107,7 @@
v-for="(item, index) in res.options.list"
:key="index"
>
-
+
+
+
handleClickFile(item, index, field)"
+ />
+
@@ -531,12 +538,14 @@ import { modelData } from "./config";
import hotzone from "@/components/hotzone";
import ways from "@/components/lili-dialog/wap.js";
import categoryTemplate from "@/components/lili-dialog/template/category";
+import VideoConfig from "./video-config";
export default {
components: {
ossManage,
hotzone,
categoryTemplate,
CircleClose,
+ VideoConfig,
},
data() {
return {
@@ -556,6 +565,7 @@ export default {
enableSelectCategory: false, //商品是否绑定分类
pendingCategory: null, // 选择分类弹窗草稿
goodsSelectedIndex: 0, //绑定商品分类的索引
+ pictureField: "img", //图片选择器回写的字段
};
},
watch: {
@@ -800,16 +810,30 @@ export default {
callbackSelected(val) {
this.picModelFlag = false;
if (!val?.url) return;
- this.selectedGoods.img = val.url;
+ if (this.pictureField === "bgImage") {
+ if (!this.selectedGoods.style) {
+ this.selectedGoods.style = {};
+ }
+ this.selectedGoods.style.bgImage = val.url;
+ return;
+ }
+ this.selectedGoods[this.pictureField] = val.url;
},
// 点击选择图片
- handleClickFile(item, index) {
+ handleClickFile(item, index, field = "img") {
+ this.pictureField = field;
this.selectedGoods = item;
this.picModelFlag = true;
this.$nextTick(() => {
- if (this.$refs.ossManage) {
- this.$refs.ossManage.selectImage = true;
+ const oss = this.$refs.ossManage;
+ if (!oss) return;
+ oss.selectImage = true;
+ if (field === "videoUrl") {
+ oss.fileType = "video";
+ } else {
+ oss.fileType = "pic";
}
+ oss.changeFileType();
});
},
removeNotice(index) {
diff --git a/manager/src/views/page-decoration/wap/template/index.js b/manager/src/views/page-decoration/wap/template/index.js
index 03d4dc8f..89f29451 100644
--- a/manager/src/views/page-decoration/wap/template/index.js
+++ b/manager/src/views/page-decoration/wap/template/index.js
@@ -19,6 +19,7 @@ import tpl_group from "./tpl_group";
import tpl_ad_list from "./tpl_view_list";
import tpl_activity_list from './tpl_view_list';
// import tpl_hot_area from './tpl_hot_area';
+import tpl_video from "./tpl_video";
import tpl_goods from "./tpl_goods";
import tpl_notice from "./tpl_notice";
import tpl_promotions from "./tpl_promotions";
@@ -45,6 +46,7 @@ export default {
spike: tpl_spike,
group: tpl_group,
// hotArea: tpl_hot_area,
+ video: tpl_video,
tpl_ad_list,
promotions: tpl_promotions,
tpl_activity_list,
diff --git a/manager/src/views/page-decoration/wap/template/tpl_hot_area.vue b/manager/src/views/page-decoration/wap/template/tpl_hot_area.vue
index 7eb2da6a..4f490165 100644
--- a/manager/src/views/page-decoration/wap/template/tpl_hot_area.vue
+++ b/manager/src/views/page-decoration/wap/template/tpl_hot_area.vue
@@ -2,7 +2,7 @@
@@ -16,10 +16,7 @@ export default {
props: ["res"],
methods: {
changeHotzone(info) {
- console.log(info);
- console.log(this.res);
- this.res.zoneInfo = info;
- // this.$emit("change", res);
+ this.res.list[0].zoneInfo = info;
},
},
};
diff --git a/manager/src/views/page-decoration/wap/template/tpl_join_group.vue b/manager/src/views/page-decoration/wap/template/tpl_join_group.vue
deleted file mode 100644
index 3b60a09f..00000000
--- a/manager/src/views/page-decoration/wap/template/tpl_join_group.vue
+++ /dev/null
@@ -1,89 +0,0 @@
-
-
-
-
-
{{ res.list[0].title }}
-
-
更多
-
-
-
-
-

-
2人团
-
-
- ¥120.00
-
-
- ¥120.00
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/manager/src/views/page-decoration/wap/template/tpl_video.vue b/manager/src/views/page-decoration/wap/template/tpl_video.vue
new file mode 100644
index 00000000..50800035
--- /dev/null
+++ b/manager/src/views/page-decoration/wap/template/tpl_video.vue
@@ -0,0 +1,115 @@
+
+
+
+
+
+
+
+
+ 视频楼层
+
+
▶
+
+
+
+
+
+
+
diff --git a/manager/src/views/page-decoration/wap/video-config.vue b/manager/src/views/page-decoration/wap/video-config.vue
new file mode 100644
index 00000000..106c3f68
--- /dev/null
+++ b/manager/src/views/page-decoration/wap/video-config.vue
@@ -0,0 +1,392 @@
+
+
+
+
+ 内容设置
+
+
+
+
+
视频封面
+
+
![]()
+
+
+
+
+
+
+
+
视频比例
+
+ 16:9
+ 4:3
+ 1:1
+
+
+
+
+
+
+
+ 通用样式
+
+
+
背景设置
+
+
+ 颜色
+ 图片
+
+
+
+
+
+
+
渐变方向
+
+ 横向
+ 纵向
+ 左斜
+ 右斜
+
+
+
+
+
+
+
背景图片
+
+
![]()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
边框设置
+
+
+ 隐藏
+ 显示
+
+
+
+
+
边框样式
+
+ 实线
+ 虚线
+ 点状
+
+
+
+
+
+
+
+
+
阴影设置
+
+
+ 隐藏
+ 显示
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/manager/src/views/page-decoration/wap/video-style.js b/manager/src/views/page-decoration/wap/video-style.js
new file mode 100644
index 00000000..be295575
--- /dev/null
+++ b/manager/src/views/page-decoration/wap/video-style.js
@@ -0,0 +1,102 @@
+export const DEFAULT_VIDEO_STYLE = {
+ bgType: "color",
+ bgColorStart: "#F5F5F5",
+ bgColorEnd: "#F5F5F5",
+ bgGradientDir: "horizontal",
+ bgRadius: 0,
+ bottomBgColor: "#F5F5F5",
+ bgImage: "",
+ margin: 0,
+ padding: 0,
+ borderShow: false,
+ borderStyle: "solid",
+ borderWidth: 1,
+ borderColor: "#e5e5e5",
+ shadowShow: false,
+ shadowColor: "rgba(0,0,0,0.1)",
+ shadowX: 0,
+ shadowY: 0,
+ shadowBlur: 10,
+ shadowSpread: 0,
+};
+
+export const ASPECT_RATIO_MAP = {
+ "16:9": 56.25,
+ "4:3": 75,
+ "1:1": 100,
+};
+
+export function ensureVideoItem(item) {
+ if (!item.aspectRatio) item.aspectRatio = "16:9";
+ if (!item.style) {
+ item.style = { ...DEFAULT_VIDEO_STYLE };
+ return;
+ }
+ Object.keys(DEFAULT_VIDEO_STYLE).forEach((key) => {
+ if (item.style[key] === undefined) {
+ item.style[key] = DEFAULT_VIDEO_STYLE[key];
+ }
+ });
+}
+
+export function getVideoGradient(style) {
+ const start = style.bgColorStart || "#F5F5F5";
+ const end = style.bgColorEnd || start;
+ const colors = `${start}, ${end}`;
+ const dirMap = {
+ horizontal: `linear-gradient(to right, ${colors})`,
+ vertical: `linear-gradient(to bottom, ${colors})`,
+ skewLeft: `linear-gradient(135deg, ${colors})`,
+ skewRight: `linear-gradient(45deg, ${colors})`,
+ };
+ return dirMap[style.bgGradientDir] || dirMap.horizontal;
+}
+
+export function getVideoWrapperStyle(item) {
+ ensureVideoItem(item);
+ const style = item.style;
+ const wrapper = {
+ margin: `${style.margin || 0}px`,
+ padding: `${style.padding || 0}px`,
+ background: style.bottomBgColor || "#F5F5F5",
+ boxSizing: "border-box",
+ };
+ return wrapper;
+}
+
+export function getVideoBoxStyle(item) {
+ ensureVideoItem(item);
+ const style = item.style;
+ const box = {
+ borderRadius: `${style.bgRadius || 0}px`,
+ overflow: "hidden",
+ position: "relative",
+ width: "100%",
+ };
+
+ if (style.bgType === "image" && style.bgImage) {
+ box.backgroundImage = `url(${style.bgImage})`;
+ box.backgroundSize = "cover";
+ box.backgroundPosition = "center";
+ } else {
+ box.background = getVideoGradient(style);
+ }
+
+ if (style.borderShow) {
+ box.border = `${style.borderWidth || 1}px ${style.borderStyle || "solid"} ${
+ style.borderColor || "#e5e5e5"
+ }`;
+ }
+
+ if (style.shadowShow) {
+ box.boxShadow = `${style.shadowX || 0}px ${style.shadowY || 0}px ${
+ style.shadowBlur || 10
+ }px ${style.shadowSpread || 0}px ${style.shadowColor || "rgba(0,0,0,0.1)"}`;
+ }
+
+ return box;
+}
+
+export function getAspectPadding(ratio) {
+ return ASPECT_RATIO_MAP[ratio] || ASPECT_RATIO_MAP["16:9"];
+}
diff --git a/manager/src/views/page-decoration/wap/wapList.vue b/manager/src/views/page-decoration/wap/wapList.vue
index b3cbb984..872f3a1c 100644
--- a/manager/src/views/page-decoration/wap/wapList.vue
+++ b/manager/src/views/page-decoration/wap/wapList.vue
@@ -11,6 +11,7 @@
添加页面
+ 主题色设置
@@ -149,6 +150,9 @@ export default {
query: { pagetype: this.params.pageType },
});
},
+ goThemeSetting() {
+ this.$router.push({ name: "theme-setting" });
+ },
changePageSize(v) {
this.params.pageNumber = 1;
this.params.pageSize = v;
diff --git a/manager/src/views/sys/oss-manage/ossManage.scss b/manager/src/views/sys/oss-manage/ossManage.scss
index 03e40f2c..65281b13 100644
--- a/manager/src/views/sys/oss-manage/ossManage.scss
+++ b/manager/src/views/sys/oss-manage/ossManage.scss
@@ -140,7 +140,7 @@
height: 100%;
box-sizing: border-box;
border-right: 1px solid #e5e6eb;
- padding: 16px 0 24px;
+ padding: 20px 12px 28px;
}
.pic-list {
height: 100%;
@@ -172,11 +172,21 @@
overflow: hidden;
box-sizing: border-box;
position: relative;
- img {
+ img,
+ .card-media {
width: 100%;
height: 100%;
object-fit: cover;
}
+ .card-file {
+ width: 100%;
+ height: 100%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ background: #f5f7fa;
+ color: #909399;
+ }
.card-checkbox {
position: absolute;
top: 8px;
diff --git a/manager/src/views/sys/oss-manage/ossManage.vue b/manager/src/views/sys/oss-manage/ossManage.vue
index 4a22fb65..d21c36a1 100644
--- a/manager/src/views/sys/oss-manage/ossManage.vue
+++ b/manager/src/views/sys/oss-manage/ossManage.vue
@@ -2,9 +2,9 @@
@import "./ossManage.scss";
.group-row {
- padding-top: 10px;
+ padding-top: 16px;
+ margin-top: 8px;
border-top: 1px solid #ededed;
- margin-top: 10px;
display: flex;
align-items: center;
justify-content: center;
@@ -54,28 +54,60 @@
margin-bottom: 16px;
}
+.oss-group-tree {
+ padding: 4px 8px 0;
+
+ :deep(.el-tree-node__expand-icon) {
+ display: none;
+ }
+
+ :deep(.el-tree-node) {
+ margin-bottom: 6px;
+ }
+
+ :deep(.el-tree-node__content) {
+ padding: 0 10px !important;
+ height: 42px;
+ border-radius: 6px;
+ font-size: 15px;
+ line-height: 42px;
+ }
+
+ :deep(.el-tree-node__content:hover) {
+ background: #f5f7fa;
+ }
+
+ :deep(.el-tree-node.is-current > .el-tree-node__content) {
+ background: #ecf5ff;
+ color: #409eff;
+ font-weight: 500;
+ }
+}
+
.oss-tree-node {
display: inline-flex;
align-items: center;
justify-content: space-between;
width: 100%;
- padding-right: 8px;
+ padding-right: 4px;
+ font-size: 15px;
}
.oss-tree-more {
cursor: pointer;
color: #909399;
padding: 0 4px;
+ font-size: 16px;
}
-.oss-manage-date-popper {
- z-index: 4000 !important;
+.category-tabs-card {
+ margin-bottom: 0;
}
-
+
@@ -83,48 +115,28 @@
+
+
+
+
+
+
+
-
-
-
-
-
-
-
- 搜索
-
-
-
-
@@ -195,7 +207,16 @@
class="card-checkbox"
@click.stop
/>
-
+
+
+
+
+
@@ -207,7 +228,11 @@
-
+
@@ -459,15 +484,6 @@
:model="groupFormValidate"
:rules="groupRuleValidate"
>
-
-
-
@@ -481,7 +497,7 @@