{{ titleText }}
diff --git a/src/components/sp-web-decoration/panels/ProductTabBlockPanel.vue b/src/components/sp-web-decoration/panels/ProductTabBlockPanel.vue
index 0a31bf4..d4a1f7d 100644
--- a/src/components/sp-web-decoration/panels/ProductTabBlockPanel.vue
+++ b/src/components/sp-web-decoration/panels/ProductTabBlockPanel.vue
@@ -98,22 +98,6 @@
@input="updateField('tab_label', $event)"
/>
-
-
@@ -154,10 +138,6 @@ export default {
return this.selectedProducts.map(
(id) => snapshotMap.get(id) || { item_id: id, item_name: id }
)
- },
- sectionSize() {
- const value = this.section?.settings?.size
- return ['xsmall', 'small', 'medium', 'large', 'xlarge'].includes(value) ? value : 'medium'
}
},
methods: {
@@ -173,9 +153,6 @@ export default {
product_snapshots: snapshots
})
},
- updateSize(value) {
- this.$emit('change', { size: value, size_override: true })
- },
clearProducts() {
this.$emit('change', { product_ids: [], product_snapshots: [] })
},
diff --git a/src/components/sp-web-decoration/utils/dsl.js b/src/components/sp-web-decoration/utils/dsl.js
index 9962827..9ae5788 100644
--- a/src/components/sp-web-decoration/utils/dsl.js
+++ b/src/components/sp-web-decoration/utils/dsl.js
@@ -367,6 +367,13 @@ export function serializeDsl(dsl) {
const nextDsl = cloneValue(dsl)
Object.keys(nextDsl.sections || {}).forEach((sectionId) => {
const section = nextDsl.sections[sectionId]
+ Object.keys(section.blocks || {}).forEach((blockId) => {
+ const block = section.blocks[blockId]
+ if (block?.type === 'product-tab' && block.settings) {
+ delete block.settings.size
+ delete block.settings.size_override
+ }
+ })
section.block_order = cloneValue(section.blockOrder || [])
})
return nextDsl
diff --git a/src/components/sp-web-decoration/utils/panelState.js b/src/components/sp-web-decoration/utils/panelState.js
index b7977e9..01c2d6b 100644
--- a/src/components/sp-web-decoration/utils/panelState.js
+++ b/src/components/sp-web-decoration/utils/panelState.js
@@ -51,16 +51,8 @@ export function normalizeProductTabBlockSettings(settings = {}) {
nextSettings.limit = Number.isFinite(Number(nextSettings.limit))
? Math.min(24, Math.max(2, Number(nextSettings.limit)))
: 8
- if (
- nextSettings.size !== undefined &&
- !['xsmall', 'small', 'medium', 'large', 'xlarge'].includes(nextSettings.size)
- ) {
- delete nextSettings.size
- delete nextSettings.size_override
- }
- if (!nextSettings.size_override) {
- delete nextSettings.size_override
- }
+ delete nextSettings.size
+ delete nextSettings.size_override
if (nextSettings.columns !== undefined) {
nextSettings.columns = [2, 3, 4].includes(Number(nextSettings.columns))
? Number(nextSettings.columns)
diff --git a/src/i18n/locales/ar.json b/src/i18n/locales/ar.json
index 8b5db31..5017378 100644
--- a/src/i18n/locales/ar.json
+++ b/src/i18n/locales/ar.json
@@ -17960,6 +17960,8 @@
"39e3acc2.45394d": "مشاركة النشاط",
"39e3acc2.5925d6": "يظهر عند المشاركة عبر بطاقة البرنامج. مقاس 300*240، png/jpg، 2M كحد أقصى",
"39e3acc2.9742f1": "يرجى اختيار صورة النشاط",
+ "39e3acc2.a8c1e2": "ملصق قائمة النشاط",
+ "39e3acc2.b9d3f4": "يرجى رفع ملصق قائمة النشاط",
"39e3acc2.98fbb0": "ملصق النشاط",
"39e3acc2.818403": "مقترح: عرض 640px، ارتفاع تلقائي",
"39e3acc2.90a4b4": "يرجى اختيار ملصق النشاط",
@@ -18000,8 +18002,8 @@
"39e3acc2.040c4d": "قائمة السلع / التفاصيل",
"39e3acc2.c017be": "السلة",
"39e3acc2.482b55": "الدفع",
- "39e3acc2.028f5b": "وصف الخصم",
- "39e3acc2.8e568f": "عرض وصف الخصم في صفحة الدفع عند التفعيل",
+ "39e3acc2.028f5b": "تذكير الشراء الداخلي",
+ "39e3acc2.8e568f": "عرض تذكير الشراء الداخلي في صفحة الدفع عند التفعيل",
"39e3acc2.d0bea4": "تذكير الشراء للموظفين",
"39e3acc2.6a03e7": "مواضع العرض: صفحة تفاصيل المنتج، صفحة سلة التسوق، صفحة الدفع",
"39e3acc2.592c59": "وقت البداية",
@@ -22590,8 +22592,9 @@
"223cc8af.d50361": "طلب استلام ذاتي",
"223cc8af.e5f71f": "بحث",
"223cc8af.e366cc": "تبديل اللغة",
- "223cc8af.f2d3e5": "",
- "223cc8af.3b02dd": "",
+ "223cc8af.f2d3e5": "مكتبة حالات Kujiale",
+ "223cc8af.3b02dd": "قائمة جميع المتاجر",
+ "223cc8af.437974": "قائمة المنتجات",
"223cc8af.5c34aa": "دعم الفعالية",
"223cc8af.94b1e6": "طلبات التعزيز",
"223cc8af.1107a8": "انضمام التاجر",
diff --git a/src/i18n/locales/en.json b/src/i18n/locales/en.json
index 0fa4273..6660878 100644
--- a/src/i18n/locales/en.json
+++ b/src/i18n/locales/en.json
@@ -17962,6 +17962,8 @@
"39e3acc2.45394d": "Share activity",
"39e3acc2.5925d6": "Shown when sharing via mini-program card. Recommended 300*240, png/jpg, max 2M",
"39e3acc2.9742f1": "Please select activity image",
+ "39e3acc2.a8c1e2": "Activity list poster",
+ "39e3acc2.b9d3f4": "Please upload activity list poster",
"39e3acc2.98fbb0": "Activity poster",
"39e3acc2.818403": "Recommended: width 640px, height auto",
"39e3acc2.90a4b4": "Please select activity poster",
@@ -18002,8 +18004,8 @@
"39e3acc2.040c4d": "Goods list / detail",
"39e3acc2.c017be": "Cart",
"39e3acc2.482b55": "Checkout",
- "39e3acc2.028f5b": "Discount description",
- "39e3acc2.8e568f": "Show discount description on checkout when enabled",
+ "39e3acc2.028f5b": "Internal purchase reminder",
+ "39e3acc2.8e568f": "Show internal purchase reminder on checkout when enabled",
"39e3acc2.d0bea4": "Employee purchase reminder",
"39e3acc2.6a03e7": "Display locations: product detail page, shopping cart, checkout page",
"39e3acc2.592c59": "Start time",
@@ -22591,8 +22593,9 @@
"223cc8af.d50361": "Self-pickup order",
"223cc8af.e5f71f": "Search",
"223cc8af.e366cc": "Switch language",
- "223cc8af.f2d3e5": "",
- "223cc8af.3b02dd": "",
+ "223cc8af.f2d3e5": "Kujiale case library",
+ "223cc8af.3b02dd": "All store list",
+ "223cc8af.437974": "Product list",
"223cc8af.5c34aa": "Support the event",
"223cc8af.94b1e6": "Boost orders",
"223cc8af.1107a8": "Merchant entry",
diff --git a/src/i18n/locales/zh-CN.json b/src/i18n/locales/zh-CN.json
index 092c1c0..364151c 100644
--- a/src/i18n/locales/zh-CN.json
+++ b/src/i18n/locales/zh-CN.json
@@ -18052,6 +18052,8 @@
"39e3acc2.45394d": "分享活动",
"39e3acc2.5925d6": "员工通过小程序卡片分享活动时展示,建议尺寸300*240,支持 png、jpg 格式,文件大小为 2M 内",
"39e3acc2.9742f1": "请选择活动图片",
+ "39e3acc2.a8c1e2": "活动列表海报",
+ "39e3acc2.b9d3f4": "请上传活动列表海报",
"39e3acc2.98fbb0": "活动海报",
"39e3acc2.818403": "建议尺寸:(宽度640px,高度自适应)",
"39e3acc2.90a4b4": "请选择活动海报",
@@ -18092,8 +18094,8 @@
"39e3acc2.040c4d": "商品列表/商详页面",
"39e3acc2.c017be": "购物车",
"39e3acc2.482b55": "结算页",
- "39e3acc2.028f5b": "优惠说明",
- "39e3acc2.8e568f": "开启优惠说明展示在结算页,关闭不展示",
+ "39e3acc2.028f5b": "内购提醒",
+ "39e3acc2.8e568f": "开启内购提醒展示在结算页,关闭不展示",
"39e3acc2.d0bea4": "内购提醒",
"39e3acc2.6a03e7": "显示位置:商品详情页、购物车页面、结算页",
"39e3acc2.592c59": "开始时间",
@@ -22593,6 +22595,7 @@
"223cc8af.e366cc": "切换语言",
"223cc8af.f2d3e5": "酷家乐案例库",
"223cc8af.3b02dd": "所有门店列表",
+ "223cc8af.437974": "商品列表",
"223cc8af.5c34aa": "助力活动",
"223cc8af.94b1e6": "助力订单",
"223cc8af.1107a8": "商家入驻",
diff --git a/src/router/routes/modules/apps.js b/src/router/routes/modules/apps.js
index fb65980..5b34c39 100755
--- a/src/router/routes/modules/apps.js
+++ b/src/router/routes/modules/apps.js
@@ -438,6 +438,17 @@ const routes = [
permissions: ['applications.kujiale.kujiale-products']
},
component: () => import('@/views/applications/kujiale/list')
+ },
+ {
+ name: 'appcenter',
+ path: 'shopex/appcenter',
+ meta: {
+ aliasName: 'shopex-appcenter',
+ icon: 'icon-products',
+ title: '商派应用中心',
+ permissions: ['applications.shopex-appcenter']
+ },
+ component: () => import('@/views/applications/application-center/shopex-appcenter')
}
]
}
diff --git a/src/router/src/route-applications.js b/src/router/src/route-applications.js
index a20b417..b94d982 100755
--- a/src/router/src/route-applications.js
+++ b/src/router/src/route-applications.js
@@ -405,6 +405,11 @@ export default {
path: 'community/chiefupload',
name: '5286ac37.5ad881',
component: () => import('@/view/member/members/upload_chief')
+ },
+ {
+ path: 'shopex/appcenter',
+ name: '商派用户中心',
+ component: () => import('@/views/applications/application-center/shopex-appcenter')
}
]
}
diff --git a/src/view/decorate/index.vue b/src/view/decorate/index.vue
index 4739406..8eb77e5 100644
--- a/src/view/decorate/index.vue
+++ b/src/view/decorate/index.vue
@@ -360,9 +360,11 @@ export default {
findWidgetForPersistedName(persistedName) {
const key = String(persistedName || '').toLowerCase()
if (!key || !this.widgets.length) return null
- let w = this.widgets.find((item) => (item.name || '').toLowerCase() === key)
+ // 附近商家已合并到店铺挂件,历史数据 name 仍为 nearbyShop
+ const lookupKey = key === 'nearbyshop' ? 'shop' : key
+ let w = this.widgets.find((item) => (item.name || '').toLowerCase() === lookupKey)
if (w) return w
- w = this.widgets.find((item) => String(item.config?.name || '').toLowerCase() === key)
+ w = this.widgets.find((item) => String(item.config?.name || '').toLowerCase() === lookupKey)
if (w) return w
if (String(this.localScene) === '1005' && key === 'goods') {
return (
diff --git a/src/view/decorate/wgts/index.js b/src/view/decorate/wgts/index.js
index d5217e3..ad361a9 100755
--- a/src/view/decorate/wgts/index.js
+++ b/src/view/decorate/wgts/index.js
@@ -9,7 +9,6 @@ import WgtFilm from './wgt_film'
import WgtCoupon from './wgt_coupon'
import WgtShop from './wgt_shop'
import WgtMarquees from './wgt_marquees'
-import WgtNearbyShop from './wgt_nearbyShop'
import WgtGoodsCard from './wgt_goodsCard'
import WgtWriting from './wgt_writing'
import WgtHeading from './wgt_heading'
diff --git a/src/view/decorate/wgts/wgt_shop/config.js b/src/view/decorate/wgts/wgt_shop/config.js
index 58c49d6..90b46d0 100644
--- a/src/view/decorate/wgts/wgt_shop/config.js
+++ b/src/view/decorate/wgts/wgt_shop/config.js
@@ -3,6 +3,60 @@ import { i18n } from '@/i18n'
import AttrStore from './attr-store'
import { transformInBase, createTransformOutBase } from '../../comps/transform-utils'
+const NEARBY_SETTING_KEYS = [
+ 'title',
+ 'subtitle',
+ 'padded',
+ 'show_nearby_merchants',
+ 'merchantsNumber',
+ 'quantityNumber'
+]
+
+const SHARED_BASE_KEYS = [
+ 'dataType',
+ 'outerMargin',
+ 'innerPadding',
+ 'outerBackground',
+ 'innerBackground',
+ 'wgtCustName',
+ 'track',
+ ...NEARBY_SETTING_KEYS
+]
+
+function isNearbyDataType(v, raw = {}) {
+ if (raw.name === 'nearbyShop') return true
+ const base = raw.base || {}
+ return (base.dataType || v.dataType) === 'nearby'
+}
+
+function buildNearbySetting() {
+ return [
+ { label: i18n.t('9b7fb994.4707ba'), key: 'padded', component: 'switch', value: false },
+ {
+ label: i18n.t('9b7fb994.f417a5'),
+ key: 'show_nearby_merchants',
+ component: 'switch',
+ value: false
+ },
+ {
+ label: i18n.t('9b7fb994.35f408'),
+ key: 'merchantsNumber',
+ component: 'number',
+ value: 4,
+ min: 1,
+ max: 100
+ },
+ {
+ label: i18n.t('9b7fb994.81756c'),
+ key: 'quantityNumber',
+ component: 'number',
+ value: 4,
+ min: 1,
+ max: 100
+ }
+ ]
+}
+
const config = {
name: 'shop',
setting: [
@@ -22,13 +76,17 @@ const config = {
label: i18n.t('ca99873f.185f7b'),
key: 'dataType',
component: 'select',
- options: [{ label: i18n.t('ca99873f.fcf7d8'), value: 'specify' }],
+ options: [
+ { label: i18n.t('ca99873f.fcf7d8'), value: 'specify' },
+ { label: i18n.t('5e1ae7f2.0c0d95'), value: 'nearby' }
+ ],
value: 'specify',
onchange: function (e, vm) {
- vm.value.data = []
+ if (e === 'nearby') {
+ vm.value.data = []
+ }
}
},
-
{
label: i18n.t('ca99873f.e7af71'),
key: 'data',
@@ -38,117 +96,86 @@ const config = {
v-model={this.value[key]}
on-change={() => {
if (this.value[key].id === '') {
- this.value['items'] = []
- this.value['tags'] = []
+ this.value.items = []
+ this.value.tags = []
}
}}
/>
)
},
value: [],
- isShow: function () {
+ isShow() {
return this.value.dataType === 'specify'
}
- }
- // {
- // label: '组件外边距',
- // key: 'outerMargin',
- // component: function (h, { key }) {
- // return (
- //
- // )
- // },
- // value: {
- // paddedt: 10,
- // paddedb: 10
- // }
- // },
- // {
- // label: '组件内边距',
- // key: 'innerPadding',
- // component: function (h, { key }) {
- // return (
- //
- // )
- // },
- // value: {
- // paddedt: 10,
- // paddedb: 10,
- // paddedl: 10,
- // paddedr: 10
- // }
- // },
- // {
- // label: '组件外背景',
- // key: 'outerBackground',
- // component: function (h, { key }) {
- // return
- // },
- // value: { color: '#f8f8f8', image: '' }
- // },
- // {
- // label: '组件内背景',
- // key: 'innerBackground',
- // component: function (h, { key }) {
- // return
- // },
- // value: { type: 'solid', color: '#ffffff', startColor: '#ffffff', endColor: '#ffffff' }
- // }
+ },
+ ...buildNearbySetting().map((item) => ({
+ ...item,
+ isShow() {
+ return this.value.dataType === 'nearby'
+ }
+ }))
],
transformIn: (v) => {
- const { name, base, data, meber_tags = [], no_meber_tags = [], tagsType } = v
- // 使用公共函数处理 base 中的样式数据转换
+ const nearby = isNearbyDataType(v, v)
+ const base = v.base || {}
const transformedBase = transformInBase(base, ['outerMargin', 'innerPadding'])
- return {
+ const tags = {
+ type: v.tagsType || '2',
+ meber_tags: v.meber_tags || [],
+ no_meber_tags: v.no_meber_tags || []
+ }
+ const common = {
id: v?.id,
- name,
+ name: 'shop',
+ dataType: nearby ? 'nearby' : base.dataType || 'specify',
...transformedBase,
- data: data,
- tags: {
- type: tagsType || '2',
- meber_tags: meber_tags || [],
- no_meber_tags: no_meber_tags || []
+ wgtCustName: base.wgtCustName ?? '',
+ track: v.track ?? base.track ?? '',
+ tags
+ }
+ if (nearby) {
+ return {
+ ...common,
+ data: [],
+ title: base.title ?? '',
+ subtitle: base.subtitle ?? '',
+ padded: base.padded ?? false,
+ show_nearby_merchants: base.show_nearby_merchants ?? false,
+ merchantsNumber: base.merchantsNumber ?? 4,
+ quantityNumber: base.quantityNumber ?? 4
}
}
+ return {
+ ...common,
+ data: v.data || [],
+ padded: false,
+ show_nearby_merchants: false,
+ merchantsNumber: 4,
+ quantityNumber: 4,
+ title: '',
+ subtitle: ''
+ }
},
transformOut: (v, wgtList, regionauth_id) => {
- return pickBy(v, {
+ const nearby = v.dataType === 'nearby'
+ const baseKeys = nearby
+ ? SHARED_BASE_KEYS
+ : SHARED_BASE_KEYS.filter((k) => !NEARBY_SETTING_KEYS.includes(k))
+ const out = {
id: 'id',
- name: 'name',
- base: (v) => {
- // 使用公共函数处理 outerMargin 和 innerPadding 转换,同时保留其他字段
- const baseData = createTransformOutBase(
- [
- 'dataType',
- 'outerMargin',
- 'innerPadding',
- 'outerBackground',
- 'innerBackground',
- 'wgtCustName',
- 'track'
- ],
- ['outerMargin', 'innerPadding']
- )(v)
- return baseData
- },
- data: 'data',
+ name: () => 'shop',
+ base: createTransformOutBase(baseKeys, ['outerMargin', 'innerPadding']),
meber_tags: 'tags.meber_tags',
no_meber_tags: 'tags.no_meber_tags',
tagsType: 'tags.type',
noRegionauth: !regionauth_id
- })
+ }
+ if (nearby) {
+ out.data = () => []
+ } else {
+ out.data = 'data'
+ }
+ return pickBy(v, out)
}
}
diff --git a/src/view/decorate/wgts/wgt_shop/index.vue b/src/view/decorate/wgts/wgt_shop/index.vue
index fbb7796..6654ffa 100644
--- a/src/view/decorate/wgts/wgt_shop/index.vue
+++ b/src/view/decorate/wgts/wgt_shop/index.vue
@@ -4,21 +4,21 @@