diff --git a/App.vue b/App.vue
index 09f2e4e..e638aa6 100644
--- a/App.vue
+++ b/App.vue
@@ -266,7 +266,6 @@
imgUrl: this.$util.img(share_data.imgUrl)
},
res => {
- console.log(res);
}
);
}
diff --git a/common/js/ai-service.js b/common/js/ai-service.js
index f88c7a2..9bda135 100644
--- a/common/js/ai-service.js
+++ b/common/js/ai-service.js
@@ -5,6 +5,17 @@ import store from '@/store/index.js'
let currentConversationId = null;
const CONVERSATION_KEY = 'ai_conversation_id';
+/**
+ * 获取域名配置参数(避免重复代码)
+ */
+function getDomainParams() {
+ return {
+ imgDomain: Config.imgDomain,
+ h5Domain: Config.h5Domain,
+ baseUrl: Config.baseUrl
+ };
+}
+
// 初始化时从本地读取会话ID
try {
const saved = uni.getStorageSync(CONVERSATION_KEY);
@@ -16,12 +27,19 @@ try {
}
export default {
+ /**
+ * 获取uniacid
+ * @returns {number} uniacid
+ */
+ getUniacid() {
+ return uni.getStorageSync('uniacid') || Config.uniacid; // 从缓存中获取uniacid,或使用默认uniacid
+ },
+
/**
* 发送普通消息(blocking 模式)
*/
async sendMessage(message, options = {}) {
try {
- const aiConfig = store.getters.globalAIKefuConfig;
const params = {
url: '/api/kefu/chat',
data: {
@@ -31,16 +49,14 @@ export default {
query: message,
response_mode: 'blocking', // 强制 blocking
user: store.state.memberInfo?.id || 'anonymous',
- conversation_id: this.getConversationId() || ''
+ conversation_id: this.getConversationId() || '',
+ ...getDomainParams()
},
header: {
'Content-Type': 'application/json'
}
};
- console.log('Sending blocking request to:', params.url);
- console.log('Request data:', params.data);
-
const response = await http.sendRequest({
...params,
async: false
@@ -52,7 +68,14 @@ export default {
}
return result;
} catch (error) {
- console.error('Dify API请求失败:', error);
+ console.error('[AI Service] Dify API请求失败,详细错误:', error);
+ console.error('[AI Service] 错误堆栈:', error.stack);
+ // 打印更多信息帮助调试
+ console.error('[AI Service] store 状态:', {
+ memberInfo: store.state.memberInfo,
+ uniacid: this.getUniacid(),
+ token: store.state.token
+ });
throw new Error('AI服务暂时不可用,请稍后重试');
}
},
@@ -63,21 +86,23 @@ export default {
async sendStreamMessage(message, onChunk, onComplete) {
// #ifdef MP-WEIXIN
return new Promise((resolve, reject) => {
- const socketTask = wx.connectSocket({
- url: 'wss://dev.aigc-quickapp.com/ws/aikefu',
- header: {}
- });
+ const match = Config.baseUrl.match(/^(?:https?:\/\/|wss?:\/\/)([^\/\s:]+)/);
+ const domain = match ? match[1] : '';
+ const wssUrl = `wss://${domain}/ws/aikefu`;
+ const socketTask = wx.connectSocket({
+ url: wssUrl,
+ header: {}
+ });
let content = '';
let conversationId = '';
let isAuthenticated = false;
socketTask.onOpen(() => {
- console.log('WebSocket 连接成功,开始认证...');
socketTask.send({
data: JSON.stringify({
action: 'auth',
- uniacid: store.state.uniacid || '1',
+ uniacid: this.getUniacid(),
token: store.state.token || 'test_token',
user_id: store.state.memberInfo?.id || 'anonymous'
})
@@ -87,18 +112,17 @@ export default {
socketTask.onMessage((res) => {
try {
const data = JSON.parse(res.data);
- console.log('收到 WebSocket 消息:', data);
if (data.type === 'auth_success') {
- console.log('认证成功,发送聊天消息...');
isAuthenticated = true;
socketTask.send({
data: JSON.stringify({
action: 'chat',
- uniacid: store.state.uniacid || '1',
+ uniacid: this.getUniacid(),
query: message,
user_id: store.state.memberInfo?.id || 'anonymous',
- conversation_id: this.getConversationId() || ''
+ conversation_id: this.getConversationId() || '',
+ ...getDomainParams()
})
});
} else if (data.type === 'auth_failed') {
@@ -110,20 +134,20 @@ export default {
}
// 处理流式消息块
- else if (data.type === 'message' || data.event === 'message') {
+ else if (data.event === 'message') {
const text = data.answer || data.content || data.text || '';
content += text;
if (onChunk) onChunk(text);
}
// 处理流结束
- else if (data.event === 'message_end' || data.type === 'message_end') {
+ else if (data.event === 'message_end') {
conversationId = data.conversation_id || '';
if (conversationId) {
this.setConversationId(conversationId);
}
if (onComplete) {
- onComplete({ content, conversation_id: conversationId });
+ onComplete({ content, conversation_id: conversationId });
}
resolve({ content, conversation_id: conversationId });
socketTask.close();
@@ -131,7 +155,6 @@ export default {
// 可选:处理 done
else if (data.type === 'done') {
- console.log('对话完成:', data);
}
} catch (e) {
@@ -147,7 +170,6 @@ export default {
});
socketTask.onClose(() => {
- console.log('WebSocket 连接已关闭');
});
const timeout = setTimeout(() => {
@@ -175,12 +197,14 @@ export default {
'Accept': 'text/event-stream',
},
body: JSON.stringify({
- uniacid: store.state.uniacid || '1',
+ uniacid: this.getUniacid(),
+ token: store.state.token || 'test_token',
inputs: {},
query: message,
response_mode: 'streaming',
user_id: store.state.memberInfo?.id || 'anonymous',
- conversation_id: this.getConversationId() || ''
+ conversation_id: this.getConversationId() || '',
+ ...getDomainParams()
})
});
@@ -314,17 +338,19 @@ export default {
* 生成新会话(如需)
*/
async generateConversationId() {
- const params = {
- url: '/api/kefu/createConversation',
- data: {
- uniacid: store.state.uniacid,
- user_id: store.state.memberInfo?.id || 'anonymous',
- member_id: store.state.memberInfo?.id || '',
- },
- header: {
- 'Content-Type': 'application/json'
- }
- };
+ const params = {
+ url: '/api/kefu/createConversation',
+ data: {
+ uniacid: this.getUniacid(),
+ token: store.state.token || 'test_token',
+ user_id: store.state.memberInfo?.id || 'anonymous',
+ member_id: store.state.memberInfo?.id || 'anonymous',
+ ...getDomainParams()
+ },
+ header: {
+ 'Content-Type': 'application/json'
+ }
+ };
const response = await http.sendRequest({
...params,
async: false
@@ -363,7 +389,10 @@ export default {
try {
const response = await http.sendRequest({
url: '/api/kefu/clear-conversation',
- data: { conversation_id: conversationId },
+ data: {
+ conversation_id: conversationId,
+ ...getDomainParams()
+ },
async: false
});
return response.success;
@@ -382,13 +411,14 @@ export default {
throw new Error('会话ID(conversation_id)是必填参数');
}
const requestData = {
- uniacid: params.uniacid || store.state.uniacid || '1',
+ uniacid: params.uniacid || this.getUniacid(),
conversation_id: params.conversation_id,
user_id: params.user_id || store.state.memberInfo?.id || 'anonymous',
limit: params.limit || 20,
offset: params.offset || 0,
- member_id: params.member_id || store.state.memberInfo?.id || '',
- token: params.token || ''
+ member_id: params.member_id || store.state.memberInfo?.id || 'anonymous',
+ token: params.token || '',
+ ...getDomainParams()
};
const response = await http.sendRequest({
url: '/api/kefu/getHistory',
@@ -427,13 +457,17 @@ export default {
if (window.currentEventSource) {
window.currentEventSource.close();
}
- const params = new URLSearchParams({
- uniacid: store.state.uniacid || '1',
- user_id: store.state.memberInfo?.id || '123456',
+ const paramsObj = {
+ uniacid: this.getUniacid(),
+ user_id: store.state.memberInfo?.id || 'anonymous',
+ member_id: store.state.memberInfo?.id || 'anonymous',
+ token: store.state.token || 'test_token',
query: message,
conversation_id: conversationId || '',
- stream: 'true'
- });
+ stream: 'true',
+ ...getDomainParams()
+ };
+ const params = new URLSearchParams(paramsObj);
const url = `${Config.baseUrl}/api/kefu/chat?${params.toString()}`;
try {
const eventSource = new EventSource(url);
diff --git a/common/js/config.js b/common/js/config.js
index ec8d65b..06779c6 100644
--- a/common/js/config.js
+++ b/common/js/config.js
@@ -59,7 +59,6 @@ if (process?.env?.NODE_ENV === 'development') {
// 如果本地配置文件不存在或加载失败,保持使用默认配置
// 只在开发模式下输出提示信息
// #ifdef WEB
- console.log('本地配置文件 .local.config.js 不存在,使用默认配置');
// #endif
}
}
diff --git a/common/js/customer-service.js b/common/js/customer-service.js
index cd68ed5..288770f 100644
--- a/common/js/customer-service.js
+++ b/common/js/customer-service.js
@@ -2,6 +2,8 @@
* 客服统一处理服务
* 整合各种客服方式,提供统一的调用接口
*/
+import IMAGE_CONFIG from './image-config.js';
+
export class CustomerService {
constructor(vueInstance, externalConfig = null) {
this.vm = vueInstance;
@@ -30,7 +32,6 @@ export class CustomerService {
// 优先级:外部传入 > vuex store > 空对象
const servicerConfig = this.externalConfig || this.vm.$store.state.servicerConfig || {};
- console.log(`【实时客服配置】`, servicerConfig);
let platformConfig = null;
@@ -165,8 +166,6 @@ export class CustomerService {
}
const config = this.getPlatformConfig();
- console.log('【当前客服配置】', config);
- console.log('【客服类型】', config.type);
const { niushop = {}, sendMessageTitle = '', sendMessagePath = '', sendMessageImg = '' } = options;
@@ -178,31 +177,24 @@ export class CustomerService {
// 核心路由:根据 type 决定行为
switch (config.type) {
case 'aikefu':
- console.log('【跳转 AI 客服】目标路径: /pages_tool/ai-chat/index');
this.openDifyService();
break;
case 'wxwork':
- console.log('【跳转企业微信客服】');
this.openWxworkService(false, config, options);
break;
case 'third':
- console.log('【跳转第三方客服】');
this.openThirdService(config);
break;
case 'miniprogram':
- console.log('【跳转第三方小程序客服】');
this.openThirdService(config);
break;
case 'niushop':
- console.log('【跳转牛商客服】');
this.openNiushopService(niushop);
break;
case 'weapp':
- console.log('【跳转微信官方客服】');
this.openWeappService(config, options);
break;
case 'aliapp':
- console.log('【跳转支付宝客服】');
this.openAliappService(config);
break;
default:
@@ -223,7 +215,7 @@ export class CustomerService {
wx.navigateToMiniProgram({
appId: 'wxeb490c6f9b154ef9',
path: `pages/contacts/externalContactDetail?url=${encodeURIComponent(wxworkConfig.contact_url)}`,
- success: () => console.log('跳转企业微信成功'),
+ success: () => {},
fail: (err) => {
console.error('跳转企业微信失败:', err);
this.fallbackToOriginalService();
@@ -260,24 +252,20 @@ export class CustomerService {
}
openThirdService(config) {
- console.log('【第三方客服配置】', config);
- console.log('【配置字段】', Object.keys(config));
// 支持多种可能的字段名
const miniAppId = config.mini_app_id || config.miniAppId || config.appid || config.appId || config.app_id;
const miniAppPath = config.mini_app_path || config.miniAppPath || config.path || config.page_path || '';
- console.log('【解析后的小程序配置】AppID:', miniAppId, 'Path:', miniAppPath);
+
// 优先处理第三方微信小程序客服
if (miniAppId) {
- console.log('【跳转第三方小程序】AppID:', miniAppId, 'Path:', miniAppPath);
// #ifdef MP-WEIXIN
wx.navigateToMiniProgram({
appId: miniAppId,
path: miniAppPath,
success: () => {
- console.log('【跳转第三方小程序成功】');
},
fail: (err) => {
console.error('【跳转第三方小程序失败】', err);
@@ -293,7 +281,6 @@ export class CustomerService {
// 处理第三方链接客服
if (config.third_url) {
- console.log('【跳转第三方链接】', config.third_url);
// #ifdef H5
window.location.href = config.third_url;
// #endif
@@ -324,7 +311,7 @@ export class CustomerService {
// 此方法仅用于自定义跳转(如 useOfficial: false)
if (config.useOfficial !== false) {
// 不做任何事,应由
@@ -178,7 +186,6 @@ export default {
uni.getStorage({
key: 'shopInfo',
success: (e) => {
- console.log('【调试】当前 shopInfo:', e.data);
this.shopInfo = e.data;
},
fail: () => {
@@ -304,6 +311,13 @@ export default {
font-weight: bold;
}
+.kefu-img {
+ width: 100%;
+ height: 100%;
+ display: block;
+ border-radius: 50%;
+}
+
.ai-icon {
font-size: 40rpx;
width: 100%;
diff --git a/components/mescroll/components/mescroll-top.vue b/components/mescroll/components/mescroll-top.vue
index 70b9597..9df8e5c 100644
--- a/components/mescroll/components/mescroll-top.vue
+++ b/components/mescroll/components/mescroll-top.vue
@@ -8,7 +8,7 @@
:src="mOption.src"
mode="widthFix"
@click="toTopClick"
- />
+ show-menu-by-longpress/>
+
+
diff --git a/components/ns-login/ns-login.vue b/components/ns-login/ns-login.vue
index f14421e..a1a28a5 100644
--- a/components/ns-login/ns-login.vue
+++ b/components/ns-login/ns-login.vue
@@ -18,7 +18,7 @@
验证码
-
+
动态码
@@ -79,7 +79,7 @@
头像
+ @error="avatarUrl = $util.getDefaultImage().head" mode="aspectFill" show-menu-by-longpress/>
@@ -96,7 +96,7 @@
+ @error="avatarUrl = $util.getDefaultImage().head" mode="aspectFill" show-menu-by-longpress/>
diff --git a/components/ns-navbar/ns-navbar.vue b/components/ns-navbar/ns-navbar.vue
index 963537f..a2b4c5e 100644
--- a/components/ns-navbar/ns-navbar.vue
+++ b/components/ns-navbar/ns-navbar.vue
@@ -16,7 +16,7 @@
-
+
{{ data.title }}
@@ -24,7 +24,7 @@
-
+
diff --git a/components/privacy-popup/privacy-popup.vue b/components/privacy-popup/privacy-popup.vue
index 35fb347..f34767f 100644
--- a/components/privacy-popup/privacy-popup.vue
+++ b/components/privacy-popup/privacy-popup.vue
@@ -55,31 +55,27 @@ export default {
mounted() {
this.listenPrivacySettingChange()
this.curPageShow()
+ this.proactive()
},
created() {
try {
// #ifdef MP-WEIXIN
- //查询微信侧记录的用户是否有待同意的隐私政策信息
wx.getPrivacySetting({
success: (res) => {
- // console.log('隐私政策信息', res);
- // console.log(res.privacyContractName);
this.privacyContractName = res.privacyContractName
}
});
// #endif
// #ifdef QUICKAPP-WEBVIEW || H5
- if (this.$util.isQuickApp()) {
- if (typeof has != 'undefined' && has?.getPrivacySetting) {
- has.getPrivacySetting({
- success: (res) => {
- if (res.privacyContractName) {
- this.privacyContractName = res.privacyContractName
- }
- },
- })
- }
+ if (this.$util.isQuickApp() && typeof has != 'undefined' && has?.getPrivacySetting) {
+ has.getPrivacySetting({
+ success: (res) => {
+ if (res.privacyContractName) {
+ this.privacyContractName = res.privacyContractName
+ }
+ },
+ })
}
// #endif
} catch (e) {
@@ -87,39 +83,50 @@ export default {
}
},
methods: {
+ /**
+ * 统一弹窗 + 关闭其他页面的弹窗
+ */
+ showPrivacyPopup() {
+ this.popUp()
+ this.closeOtherPagePopUp(this.disPopUp)
+ },
+
+ /**
+ * 根据是否需要授权决定弹窗或 emit agree
+ */
+ checkAndShow(needAuthorization) {
+ if (needAuthorization) {
+ const privacyAgreed = uni.getStorageSync('privacyAgreed');
+ if (privacyAgreed) {
+ this.$emit('agree')
+ } else {
+ this.showPrivacyPopup()
+ }
+ } else {
+ this.$emit('agree')
+ }
+ },
+
getPrivacySettingByQuickApp() {
// #ifdef QUICKAPP-WEBVIEW || H5 || WEB
- if (this.$util.isQuickApp()) {
- if (typeof has != 'undefined' && has?.getPrivacySetting) {
- has.getPrivacySetting({
- success: (res) => {
- // console.log(res)
- if (res.needAuthorization) {
- this.popUp()
- // 额外逻辑:当前页面的隐私弹窗弹起的时候,关掉其他页面的隐私弹窗
- this.closeOtherPagePopUp(this.disPopUp)
- } else {
- this.$emit('agree')
- }
- },
- })
- } else {
- // 属于嵌入到快应用Webview组件中的情况,按照H5的方式来处理,判断是否已经授权
- if (uni.getStorageSync('privacyAgreed')) {
- this.$emit('agree')
- } else {
- this.popUp()
- // 额外逻辑:当前页面的隐私弹窗弹起的时候,关掉其他页面的隐私弹窗
- this.closeOtherPagePopUp(this.disPopUp)
- }
- }
+ if (!this.$util.isQuickApp()) return;
+ if (typeof has != 'undefined' && has?.getPrivacySetting) {
+ has.getPrivacySetting({
+ success: (res) => {
+ this.checkAndShow(res.needAuthorization)
+ },
+ })
+ } else {
+ this.checkAndShow(!uni.getStorageSync('privacyAgreed'))
}
// #endif
},
+ /**
+ * 监听平台侧的隐私授权事件
+ */
listenPrivacySettingChange() {
// #ifdef MP-WEIXIN
- // 监听微信侧隐私政策授权变化事件
if (wx.onNeedPrivacyAuthorization) {
wx.onNeedPrivacyAuthorization((resolve) => {
if (typeof this.privacyAuthorization === 'function') {
@@ -130,58 +137,28 @@ export default {
// #endif
// #ifdef QUICKAPP-WEBVIEW || H5 || WEB
- if (this.$util.isQuickApp()) {
- // 监听快速应用侧隐私政策授权变化事件
- if (typeof has != 'undefined' && has?.onPrivacySettingChange) {
- has.onPrivacySettingChange((res) => {
- // console.log(res)
- if (res.needAuthorization) {
- this.popUp()
- // 额外逻辑:当前页面的隐私弹窗弹起的时候,关掉其他页面的隐私弹窗
- this.closeOtherPagePopUp(this.disPopUp)
- } else {
- this.$emit('agree')
- }
- })
- }
+ if (this.$util.isQuickApp() && typeof has != 'undefined' && has?.onPrivacySettingChange) {
+ has.onPrivacySettingChange((res) => {
+ this.checkAndShow(res.needAuthorization)
+ })
}
// #endif
-
- // 主动查询用户隐私政策授权状态,针对快速应用
- this.getPrivacySettingByQuickApp();
},
- // 主动查询用户隐私政策授权状态
+
+ /**
+ * 主动查询隐私授权状态并弹窗
+ */
proactive() {
// #ifdef MP-WEIXIN
if (wx.getPrivacySetting) {
wx.getPrivacySetting({
success: (res) => {
- // console.log(res)
- if (res.needAuthorization) {
- // 检查本地存储中是否已经同意过隐私政策
- const privacyAgreed = uni.getStorageSync('privacyAgreed');
- if (!privacyAgreed) {
- this.popUp()
- // 额外逻辑:当前页面的隐私弹窗弹起的时候,关掉其他页面的隐私弹窗
- this.closeOtherPagePopUp(this.disPopUp)
- } else {
- this.$emit('agree')
- }
- } else {
- this.$emit('agree')
- }
+ this.checkAndShow(res.needAuthorization)
},
});
} else {
- // 检查本地存储中是否已经同意过隐私政策
- const privacyAgreed = uni.getStorageSync('privacyAgreed');
- if (privacyAgreed) {
- this.$emit('agree');
- } else {
- this.popUp()
- // 额外逻辑:当前页面的隐私弹窗弹起的时候,关掉其他页面的隐私弹窗
- this.closeOtherPagePopUp(this.disPopUp)
- }
+ // 低版本基础库直接检查本地存储
+ this.checkAndShow(!uni.getStorageSync('privacyAgreed'))
}
// #endif
@@ -190,29 +167,24 @@ export default {
// #endif
// #ifdef H5 || WEB
- // 检查本地存储中是否已经同意过隐私政策
- const privacyAgreed = uni.getStorageSync('privacyAgreed');
- if (privacyAgreed) {
- this.$emit('agree');
- } else {
- this.popUp()
- // 额外逻辑:当前页面的隐私弹窗弹起的时候,关掉其他页面的隐私弹窗
- this.closeOtherPagePopUp(this.disPopUp)
- }
+ this.checkAndShow(!uni.getStorageSync('privacyAgreed'))
// #endif
},
- //初始化监听程序
+
+ /**
+ * 初始化监听程序(页面级)
+ */
curPageShow() {
closeOtherPagePopUpHooks.add(this.disPopUp)
this.privacyAuthorization = resolve => {
this.privacyResolves.add(resolve)
- //打开弹窗
- this.popUp()
- // 额外逻辑:当前页面的隐私弹窗弹起的时候,关掉其他页面的隐私弹窗
- this.closeOtherPagePopUp(this.disPopUp)
+ this.showPrivacyPopup()
}
},
- // 额外逻辑:当前页面的隐私弹窗弹起的时候,关掉其他页面的隐私弹窗
+
+ /**
+ * 弹窗时关掉其他页面的隐私弹窗,避免重叠
+ */
closeOtherPagePopUp(closePopUp) {
closeOtherPagePopUpHooks.forEach(hook => {
if (closePopUp !== hook) {
@@ -220,16 +192,12 @@ export default {
}
})
},
- //打开隐私协议
+
openPrivacyContract() {
// #ifdef MP-WEIXIN
wx.openPrivacyContract({
- success(res) {
- // console.log('打开隐私协议', res);
- },
- fail(err) {
- // console.error('打开隐私协议失败', err)
- }
+ success(res) {},
+ fail(err) {}
});
// #endif
@@ -237,59 +205,44 @@ export default {
if (this.$util.isQuickApp()) {
if (typeof has != 'undefined' && has?.openPrivacySetting) {
has.openPrivacySetting({
- success: (res) => {
- // console.log('打开隐私协议', res);
- },
- fail: (err) => {
- // console.error('打开隐私协议失败', err)
- }
+ success: (res) => {},
+ fail: (err) => {}
});
} else {
- // 属于嵌入到快应用Webview组件中的情况,按照H5的方式来处理
this.$util.redirectTo(privacyContractPage);
}
} else {
- // H5 环境下的处理逻辑
this.$util.redirectTo(privacyContractPage);
}
// #endif
},
- //打开用户服务协议
+
openPrivacyService() {
// #ifdef QUICKAPP-WEBVIEW || H5 || WEB
if (this.$util.isQuickApp()) {
if (typeof has != 'undefined' && has?.openPrivacySetting) {
has.openPrivacySetting({
- success: (res) => {
- // console.log('打开用户服务协议', res);
- },
- fail: (err) => {
- // console.error('打开用户服务协议失败', err)
- }
+ success: (res) => {},
+ fail: (err) => {}
});
} else {
- // 属于嵌入到快应用Webview组件中的情况,按照H5的方式来处理
this.$util.redirectTo(privacyServicePage);
}
} else {
- // H5 环境下的处理逻辑
this.$util.redirectTo(privacyServicePage);
}
// #endif
},
- // 不同意
+
handleDisagree() {
this.privacyResolves.forEach(resolve => {
- resolve({
- event: 'disagree',
- })
+ resolve({ event: 'disagree' })
})
this.privacyResolves.clear()
- //关闭弹窗
this.disPopUp()
- // 保存用户授权状态到本地存储,无论同意还是不同意,都不再重复弹出
+
uni.setStorageSync('privacyAgreed', true);
- //退出小程序
+
uni.showModal({
content: '未同意隐私协议,无法使用相关功能',
success: () => {
@@ -297,7 +250,7 @@ export default {
}
})
},
- // 同意并继续
+
handleAgree() {
this.privacyResolves.forEach(resolve => {
resolve({
@@ -306,28 +259,23 @@ export default {
})
})
this.privacyResolves.clear()
- //关闭弹窗
this.disPopUp()
- // 保存用户授权状态到本地存储,用于所有环境
- uni.setStorageSync('privacyAgreed', true);
+ uni.setStorageSync('privacyAgreed', true);
this.$emit('agree')
},
- //打开弹窗
+
popUp() {
this.showPop = true;
},
- //关闭弹窗
+
disPopUp() {
this.showPop = false;
},
},
beforeDestroy() {
- // 清理事件监听器和集合
this.privacyResolves.clear()
closeOtherPagePopUpHooks.delete(this.disPopUp)
- // 注意:这里需要根据实际情况清理微信和快速应用的事件监听器
- // 由于微信的 wx.onNeedPrivacyAuthorization 没有对应的 off 方法,这里可能需要其他方式处理
},
}
diff --git a/components/to-top/to-top.vue b/components/to-top/to-top.vue
index 3bc1c29..c94419e 100644
--- a/components/to-top/to-top.vue
+++ b/components/to-top/to-top.vue
@@ -6,7 +6,7 @@
:src="$util.img('public/uniapp/common/mescroll-totop.png')"
mode="widthFix"
@click="toTopClick"
- />
+ show-menu-by-longpress/>
@@ -314,74 +199,6 @@ export default {
.small-bot-close i {
font-size: 60rpx;
}
-
-/* 新增:隐私弹窗样式 */
-.privacy-modal-mask {
- position: fixed;
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
- background-color: rgba(0, 0, 0, 0.6); // 半透明背景
- z-index: 9999; // 确保层级最高
- display: flex;
- justify-content: center;
- align-items: center;
-}
-
-.privacy-modal-container {
- width: 80%;
- background-color: #ffffff;
- border-radius: 12rpx;
- padding: 40rpx 30rpx;
- text-align: center;
-}
-
-.modal-header {
- font-size: 36rpx;
- font-weight: bold;
- color: #333;
- margin-bottom: 20rpx;
-}
-
-.modal-body {
- font-size: 28rpx;
- color: #666;
- line-height: 1.6;
- text-align: left;
- margin-bottom: 30rpx;
-}
-
-.link {
- color: #007aff; // 蓝色链接
- margin: 0 4rpx;
-}
-
-.modal-footer {
- display: flex;
- justify-content: space-between;
- padding: 0 20rpx;
-}
-
-.btn {
- flex: 1;
- height: 80rpx;
- line-height: 80rpx;
- border-radius: 40rpx;
- font-size: 30rpx;
- text-align: center;
- margin: 0 15rpx;
-}
-
-.btn-disagree {
- background-color: #f5f5f5;
- color: #333;
-}
-
-.btn-agree {
- background-color: #07c160; // 微信绿
- color: #fff;
-}
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/pages_goods/_components/ns-goods-promotion/ns-goods-promotion.vue b/pages_goods/_components/ns-goods-promotion/ns-goods-promotion.vue
index d102e84..93c8905 100644
--- a/pages_goods/_components/ns-goods-promotion/ns-goods-promotion.vue
+++ b/pages_goods/_components/ns-goods-promotion/ns-goods-promotion.vue
@@ -6,38 +6,38 @@
限时折扣
当前商品正在参加{{ item.promotion_name }}
-
+
团购
当前商品正在参加{{ item.promotion_name }}
-
+
拼团
当前商品正在参加{{ item.promotion_name }}
-
+
秒杀
当前商品正在参加{{ item.promotion_name }}
-
+
专题活动
当前商品正在参加{{ item.promotion_name }}
-
+
砍价
当前商品正在参加{{ item.promotion_name }}
-
+
拼团返利
diff --git a/pages_goods/_components/pengpai-fadein-out/pengpai-fadein-out.vue b/pages_goods/_components/pengpai-fadein-out/pengpai-fadein-out.vue
index 31c32aa..9539555 100644
--- a/pages_goods/_components/pengpai-fadein-out/pengpai-fadein-out.vue
+++ b/pages_goods/_components/pengpai-fadein-out/pengpai-fadein-out.vue
@@ -4,7 +4,7 @@
-
+
@@ -151,8 +151,7 @@ export default {
// #endif
}, this.wait);
- // console.log('this.top', this.top);
- // console.log('this.radius', this.radius);
+
setTimeout(() => {
this.animationData = uni
diff --git a/pages_goods/cart.vue b/pages_goods/cart.vue
index 86e160d..b8dea99 100644
--- a/pages_goods/cart.vue
+++ b/pages_goods/cart.vue
@@ -34,7 +34,7 @@
@click="singleElection(siteIndex, cartIndex)">
+ @error="imageError(siteIndex, cartIndex)" mode="aspectFill" show-menu-by-longpress/>
@@ -66,7 +66,7 @@
.{{
parseFloat(item.member_price).toFixed(2).split('.')[1]
}}
-
+
@@ -81,7 +81,7 @@
parseFloat(item.discount_price).toFixed(2).split('.')[1]
}}
+ :src="$util.img('public/uniapp/index/discount.png')" show-menu-by-longpress/>
@@ -96,7 +96,7 @@
.{{
parseFloat(item.member_price).toFixed(2).split('.')[1]
}}
-
+
@@ -150,7 +150,7 @@
+ mode="aspectFill" show-menu-by-longpress/>
{{ goodsItem.sku_name }}
@@ -176,7 +176,7 @@
.{{
parseFloat(goodsItem.member_price).toFixed(2).split('.')[1]
}}
-
+
{{
@@ -256,7 +256,7 @@
:style="{ backgroundColor: discount.coupon_info.receive_type != 'wait' ? '#F2F2F2' : 'var(--main-color-shallow)' }">
+ :src="$util.img('public/uniapp/coupon/coupon_line.png')" show-menu-by-longpress/>
{{ $lang('common.currencySymbol') }}
diff --git a/pages_goods/category.vue b/pages_goods/category.vue
index be21c82..7f265db 100644
--- a/pages_goods/category.vue
+++ b/pages_goods/category.vue
@@ -26,7 +26,8 @@
export default {
data() {
return {
- diyData: null
+ diyData: null,
+ mpShareData: null //小程序分享数据
};
},
onLoad() {
@@ -38,6 +39,25 @@ export default {
onShow() {
this.$util.hideHomeButton();
if (this.$refs.category) this.$refs.category[0].pageShow();
+
+ //小程序分享
+ // #ifdef MP-WEIXIN
+ this.$util.getMpShare('/pages_goods/category').then(res => {
+ this.mpShareData = res;
+ }).catch(err => {
+ // 如果后台没配置,用默认值
+ this.mpShareData = {
+ appMessage: {
+ title: '发现超多好物,快来看看',
+ path: '/pages_goods/category'
+ },
+ timeLine: {
+ title: '发现超多好物,快来看看',
+ query: '/pages_goods/category'
+ }
+ };
+ });
+ // #endif
},
onUnload() {
if (!this.storeToken && this.$refs.login) this.$refs.login.cancelCompleteInfo();
@@ -69,6 +89,24 @@ export default {
onPullDownRefresh() {
uni.hideTabBar();
this.getDiyInfo();
+ },
+ onShareAppMessage() {
+ return this.mpShareData?.appMessage || {
+ title: '发现超多好物,快来看看',
+ path: '/pages_goods/category'
+ };
+ },
+ onShareTimeline() {
+ return this.mpShareData?.timeLine || {
+ title: '发现超多好物,快来看看',
+ query: '/pages_goods/category'
+ };
+ },
+ onAddToFavorites() {
+ return {
+ title: '发现超多好物,快来看看',
+ path: '/pages_goods/category'
+ };
}
};
diff --git a/pages_goods/detail.vue b/pages_goods/detail.vue
index 7db396b..a968582 100644
--- a/pages_goods/detail.vue
+++ b/pages_goods/detail.vue
@@ -6,7 +6,7 @@
-->
-
+
@@ -49,7 +49,7 @@
{{ parseFloat(goodsSkuDetail.member_price).toFixed(2).split('.')[0] }}
.{{ parseFloat(goodsSkuDetail.member_price).toFixed(2).split('.')[1] }}
-
+
原价
@@ -77,7 +77,6 @@
- {{$lang('makebtn')}}
@@ -141,7 +140,7 @@
v-for="(item, index) in goodsSkuDetail.card_info.relation_goods"
@click="$util.redirectTo('/pages_goods/detail', { goods_id: item.goods_id })"
>
-
+
{{ item.sku_name }}
¥{{ item.price }}
@@ -222,13 +221,13 @@
{{ bundling[0].bl_name }}
-
+
-
+
{{ $lang('common.currencySymbol') }}
{{ goodsSkuDetail.price }}
@@ -240,7 +239,7 @@
-
+
{{ $lang('common.currencySymbol') }}
{{ item.price }}
@@ -273,7 +272,7 @@
-
+
{{ $lang('common.currencySymbol') }}
{{ goodsSkuDetail.price }}
@@ -285,7 +284,7 @@
-
+
{{ $lang('common.currencySymbol') }}
{{ goods.price }}
@@ -324,7 +323,7 @@
-
+
{{ $lang('common.currencySymbol') }}
@@ -461,11 +460,12 @@
-
+
-
-
-
+
+
+
+
@@ -515,6 +515,19 @@
+
+
+
+
+
@@ -531,9 +544,61 @@ export default {
goodsDetailView,
nsGoodsPromotion
},
- mixins: [base, detail, scroll]
+ mixins: [base, detail, scroll],
+ methods: {
+ /**
+ * 发送商品信息到智能客服
+ * @param {Object} item 商品信息
+ */
+ sendToAIChat(item) {
+ this.$refs.contactPopup.open();
+ },
+
+ /**
+ * 跳转到智能客服页面
+ */
+ goToAIChat() {
+ const productInfo = {
+ goods_id: this.goodsSkuDetail.goods_id || '',
+ goods_name: this.goodsSkuDetail.goods_name || '',
+ price: this.goodsSkuDetail.discount_price || this.goodsSkuDetail.member_price || this.goodsSkuDetail.price || '',
+ image: this.goodsSkuDetail.sku_image || '',
+ category_id: this.goodsSkuDetail.category_id || ''
+ };
+
+ uni.setStorageSync('selectedProduct', productInfo);
+
+ uni.navigateTo({
+ url: '/pages_tool/ai-chat/index'
+ });
+ },
+
+ /**
+ * 关闭联系电话弹窗
+ */
+ closeContactPopup() {
+ this.$refs.contactPopup.close();
+ },
+
+ /**
+ * 复制电话号码到剪切板
+ */
+ copyPhoneNumber() {
+ uni.setClipboardData({
+ data: '021-51815181',
+ success: () => {
+ uni.showToast({
+ title: '复制成功',
+ icon: 'success'
+ });
+ this.closeContactPopup();
+ }
+ });
+ }
+ }
};
+
diff --git a/pages_goods/list.vue b/pages_goods/list.vue
index 76c8fe0..e413fc4 100644
--- a/pages_goods/list.vue
+++ b/pages_goods/list.vue
@@ -51,7 +51,7 @@
-
+
{{ goodsTag(item) }}
@@ -75,68 +75,23 @@
.{{
parseFloat(showPrice(item)).toFixed(2).split('.')[1] }}
-
- {{ langstatus ? $lang('Make') : '询底价' }}
-
-
-
-
-
-
-
-
-
-
- {{ $lang('common.currencySymbol') }}
- {{ showMarketPrice(item) }}
-
- 已售{{ item.sale_num }}{{ item.unit
+ 已售{{ item.sale_num }}{{ item.unit
? item.unit : '件' }}
-
-
+ 购买
-
-
-
-
-
-
-
-
- {{ config.text }}
-
-
-
-
-
-
-
-
+
+
+
+
+ 立即咨询
@@ -147,7 +102,7 @@
@click="toDetail(item)"
:style="{ left: listPosition[index] ? listPosition[index].left : '', top: listPosition[index] ? listPosition[index].top : '' }">
-
+
{{ goodsTag(item) }}
@@ -168,66 +123,23 @@
.{{
parseFloat(showPrice(item)).toFixed(2).split('.')[1] }}
-
- {{ langstatus ? $lang('Make') : '询底价' }}
-
-
-
-
-
-
-
-
- {{ $lang('common.currencySymbol') }}
- {{ showMarketPrice(item) }}
-
- 已售{{ item.sale_num }}{{ item.unit
+ 已售{{ item.sale_num }}{{ item.unit
? item.unit : '件' }}
-
-
+ 购买
-
-
-
-
-
-
-
-
- {{ config.text }}
-
-
-
-
-
-
-
-
+
+
+
+
+ 立即咨询
@@ -311,7 +223,14 @@ export default {
data() {
return {};
},
- mixins: [list]
+ mixins: [list],
+ methods: {
+ sendToAIChat(item) {
+ this.$util.redirectTo('/pages_goods/detail', {
+ goods_id: item.goods_id
+ });
+ }
+ }
};
@@ -327,4 +246,24 @@ export default {
::v-deep .sku-layer .uni-popup__wrapper.uni-custom .uni-popup__wrapper-box {
max-height: unset !important;
}
+
+.ai-chat-btn-wrap {
+ display: flex;
+ justify-content: flex-end;
+ margin-top: auto;
+ padding-top: 10rpx;
+}
+
+.ai-chat-btn {
+ background-color: #ff0000;
+ color: #fff;
+ padding: 12rpx 30rpx;
+ border-radius: 40rpx;
+ font-size: 26rpx;
+ font-weight: 500;
+ line-height: 1.2;
+ text-align: center;
+ white-space: nowrap;
+ display: inline-block;
+}
\ No newline at end of file
diff --git a/pages_goods/public/css/list.scss b/pages_goods/public/css/list.scss
index 15aa9ca..ffb41c4 100644
--- a/pages_goods/public/css/list.scss
+++ b/pages_goods/public/css/list.scss
@@ -295,7 +295,8 @@
.lineheight-clear {
display: flex;
- justify-content: flex-end;
+ justify-content: space-between;
+ align-items: center;
}
// 商品列表单列样式
@@ -386,46 +387,30 @@
display: inline-block;
font-weight: bold;
line-height: 1;
- margin-top: 16rpx;
-
- background-color: var(--main-color);
- border-radius: 35rpx;
- padding: 12rpx 24rpx;
- box-shadow: 0 0 10rpx rgba(0, 0, 0, 0.1);
+ margin-top: 0;
.unit {
margin-right: 6rpx;
- color: var(--price-color);
+ color: #ff4444;
}
.price {
- color: var(--price-color);
- color: #fff !important;
- font-size: 27rpx !important;
+ color: #ff4444;
+ font-size: 32rpx !important;
font-weight: bold !important;
}
}
.pro-info {
+ margin-top: 10rpx;
display: flex;
- margin-top: auto;
+ justify-content: space-between;
align-items: center;
- position: relative;
- .delete-price {
- text-decoration: line-through;
- font-size: $font-size-tag !important;
- flex: 1;
-
- .unit {
- margin-right: 0;
- }
- }
.block-wrap {
- flex: 1;
line-height: 1;
- margin-right: 20rpx;
.sale {
font-size: $font-size-tag !important;
+ color: #999;
}
}
}
@@ -543,6 +528,9 @@
.lineheight-clear {
margin-top: 16rpx;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
}
.discount-price {
@@ -552,24 +540,26 @@
.unit {
margin-right: 6rpx;
- color: var(--price-color);
+ color: #ff4444;
}
.price {
- color: var(--price-color);
+ color: #ff4444;
+ font-size: 32rpx !important;
+ font-weight: bold !important;
}
}
.pro-info {
+ margin-top: 10rpx;
display: flex;
- margin-top: auto;
+ justify-content: space-between;
align-items: center;
.block-wrap {
- flex: 1;
line-height: 1;
- margin-right: 20rpx;
.sale {
font-size: $font-size-tag !important;
+ color: #999;
}
}
}
@@ -644,9 +634,9 @@
}
.buy-btn {
- background-color: $base-color;
- color: var(--btn-text-color);
- border-radius: 50rpx;
+ background-color: #ff4444;
+ color: #fff;
+ border-radius: 30rpx;
font-size: $font-size-tag;
padding: 12rpx 30rpx;
line-height: 1;
diff --git a/pages_goods/public/js/cart.js b/pages_goods/public/js/cart.js
index ba8fbc2..35134f6 100644
--- a/pages_goods/public/js/cart.js
+++ b/pages_goods/public/js/cart.js
@@ -566,7 +566,6 @@ export default {
// 手指触摸事件 用于菜单左滑
touchS(e) {
this.startX = e.touches[0].clientX;
- // console.log('开始' + e.touches[0].clientX);
},
touchE(e, cartIndex) {
this.endX = e.changedTouches[0].clientX;
diff --git a/pages_goods/public/js/list.js b/pages_goods/public/js/list.js
index e4ee7ff..84cefc0 100644
--- a/pages_goods/public/js/list.js
+++ b/pages_goods/public/js/list.js
@@ -72,7 +72,6 @@ export default {
url: '/api/lucky/status',
data: {},
success: res => {
- console.log(res)
this.langstatus = res.status
if(this.langstatus == 1){
// this.$langConfig.refresh();
diff --git a/pages_order/_components/common-payment/common-payment.vue b/pages_order/_components/common-payment/common-payment.vue
index 974612b..57ea79d 100644
--- a/pages_order/_components/common-payment/common-payment.vue
+++ b/pages_order/_components/common-payment/common-payment.vue
@@ -59,7 +59,7 @@
-
+
@@ -112,7 +112,7 @@
-
+
@@ -154,7 +154,7 @@
当前无自提门店,请选择其它配送方式
-
+
@@ -170,7 +170,7 @@
-
+
@@ -521,7 +521,7 @@
-
+
{{ $lang('common.currencySymbol') }}
diff --git a/pages_order/_components/common-payment/payment.js b/pages_order/_components/common-payment/payment.js
index 8e26c06..a6501ab 100644
--- a/pages_order/_components/common-payment/payment.js
+++ b/pages_order/_components/common-payment/payment.js
@@ -762,13 +762,10 @@ export default {
}
this.$forceUpdate();
// this.orderCreateData.coupon[merch_id].coupon_id = data.coupon_id
- console.log(this.selectCouponId)
},
//确定使用优惠券
useCpopon() {
- console.log(this.merchCoupon.merch_id)
this.orderCreateData.coupon[this.merchCoupon.merch_id].coupon_id = this.selectCouponId;
- console.log(this.orderCreateData.coupon)
this.$refs.couponPopup.close();
this.calculate();
},
diff --git a/pages_order/detail.vue b/pages_order/detail.vue
index cb41360..0b578a0 100644
--- a/pages_order/detail.vue
+++ b/pages_order/detail.vue
@@ -111,9 +111,9 @@
+ mode="widthFix" show-menu-by-longpress/>
+ class="qrcode" mode="widthFix" show-menu-by-longpress/>
@@ -126,7 +126,7 @@
+ @error="imageError(goodsIndex)" mode="aspectFill" show-menu-by-longpress/>
{{ goodsItem.sku_name }}
@@ -174,7 +174,7 @@
+ @click="previewMedia($util.img(img))" show-menu-by-longpress/>
@@ -314,7 +314,7 @@
{{ item.value.title }}:
-
+
@@ -345,8 +345,8 @@
-
-
+
+
请将条形码或二维码出示给核销员
@@ -426,8 +426,8 @@
-
-
+
+
请将条形码或二维码出示给核销员
diff --git a/pages_order/detail_point.vue b/pages_order/detail_point.vue
index 38046e3..2b816c4 100644
--- a/pages_order/detail_point.vue
+++ b/pages_order/detail_point.vue
@@ -24,7 +24,7 @@
-
+
{{ orderData.exchange_name }}
diff --git a/pages_order/list.vue b/pages_order/list.vue
index f7f7573..576efdd 100644
--- a/pages_order/list.vue
+++ b/pages_order/list.vue
@@ -43,7 +43,7 @@
+ :lazy-load="true" show-menu-by-longpress/>
@@ -85,12 +85,12 @@
:key="goodsIndex">
+ :lazy-load="true" show-menu-by-longpress/>
-
+
@@ -108,7 +108,7 @@
-
+
剩余时间:
-
+
请填写申请信息
-
+
@@ -65,7 +65,7 @@
-
+
{{ goodsTag(item) }}
@@ -88,7 +88,7 @@
-
+
申请成为{{ fenxiaoWords.fenxiao_name }},需要您的消费次数需要达到{{ fenxiaoConfig.consume_count }}次
申请成为{{ fenxiaoWords.fenxiao_name }},需要您的消费金额需要达到{{ fenxiaoConfig.consume_money | moneyFormat }}元
@@ -102,7 +102,7 @@
-
+
{{ goodsTag(item) }}
@@ -122,12 +122,12 @@
-
+
您还不是分销商
-
+
您已提交{{ fenxiaoWords.fenxiao_name }}申请,等待平台审核
您提交的{{ fenxiaoWords.fenxiao_name }}申请,已被拒绝,请再接再厉
diff --git a/pages_promotion/fenxiao/bill.vue b/pages_promotion/fenxiao/bill.vue
index f879171..511e122 100644
--- a/pages_promotion/fenxiao/bill.vue
+++ b/pages_promotion/fenxiao/bill.vue
@@ -4,8 +4,8 @@
-
+ mode="widthFix" show-menu-by-longpress>
+
{{ item.type_name }}
账单编号: {{ item.account_no }}
diff --git a/pages_promotion/fenxiao/child_fenxiao.vue b/pages_promotion/fenxiao/child_fenxiao.vue
index 5263f1f..a7acb2c 100644
--- a/pages_promotion/fenxiao/child_fenxiao.vue
+++ b/pages_promotion/fenxiao/child_fenxiao.vue
@@ -6,8 +6,8 @@
@click="toFenxiaoOrder(item)">
-
+ mode="aspectFill" show-menu-by-longpress>
+
diff --git a/pages_promotion/fenxiao/goods_list.vue b/pages_promotion/fenxiao/goods_list.vue
index 5b61b31..ca3f01f 100644
--- a/pages_promotion/fenxiao/goods_list.vue
+++ b/pages_promotion/fenxiao/goods_list.vue
@@ -23,7 +23,7 @@
@click="navToDetailPage(item)">
+ mode="aspectFill" show-menu-by-longpress />
@@ -109,7 +109,7 @@
-
+
保存图片
diff --git a/pages_promotion/fenxiao/index.vue b/pages_promotion/fenxiao/index.vue
index af42dc4..60abb9f 100644
--- a/pages_promotion/fenxiao/index.vue
+++ b/pages_promotion/fenxiao/index.vue
@@ -8,7 +8,7 @@
+ @error="info.headimg = $util.getDefaultImage().head" mode="aspectFill" show-menu-by-longpress/>
@@ -79,14 +79,14 @@
+ style="width: 100%;border-radius:24rpx" show-menu-by-longpress/>
@@ -118,7 +118,6 @@
this.categoryId = 'category-' + index;
// 阻止切换分类之后滚动事件也立即执行
this.scrollLock = true;
- console.log(index)
// this.goodsList = []
// this.getgoodslist()
@@ -174,9 +173,8 @@
data: {
is_type_show:1,
},
- success: res => {
- console.log( res.data)
- this.categoryTree = res.data
+ success: res => {
+ this.categoryTree = res.data
},
fail: () => {
this.$util.showToast({
diff --git a/pages_promotion/merch/public/edit.js b/pages_promotion/merch/public/edit.js
index f115d2a..68198e0 100644
--- a/pages_promotion/merch/public/edit.js
+++ b/pages_promotion/merch/public/edit.js
@@ -164,11 +164,8 @@ export default {
id:this.goodsData.id
},
success: res => {
- console.log(res)
if(res.result.detail){
this.goodsData = res.result.detail
- console.log(this.goodsData.goods_image)
- }else{
this.$util.showToast({
title: '商品不存在',
});
@@ -737,7 +734,6 @@ export default {
})
// 清空规格的图片
- console.log(this.goodsData)
return false
for (var i = 0; i < this.goodsData.goods_sku_data.length; i++) {
if (this.goodsData.goods_sku_data[i].sku_images.length == 0) this.goodsData.goods_sku_data[i].sku_image = '';
@@ -796,9 +792,6 @@ export default {
} else if (this.goodsData.verify_validity_type == 2) {
data.virtual_indate = this.virtualTime;
}
-
- // console.log(this.goodsData.goods_spec_format,'format')
- // if(this.goodsData.goods_spec_format == '[]'){
// data.carmichael= data.carmichael
// }
var save = null;
diff --git a/pages_promotion/merch/public/js/list.js b/pages_promotion/merch/public/js/list.js
index a6d244e..40fda9c 100644
--- a/pages_promotion/merch/public/js/list.js
+++ b/pages_promotion/merch/public/js/list.js
@@ -150,9 +150,8 @@ export default {
data: {
merch_id:this.merch_id
},
- success: res => {
- console.log(res)
- this.merch = res.data
+ success: res => {
+ this.merch = res.data
}
});
},
diff --git a/pages_promotion/point/detail.vue b/pages_promotion/point/detail.vue
index e45b9ff..6b8f00d 100644
--- a/pages_promotion/point/detail.vue
+++ b/pages_promotion/point/detail.vue
@@ -17,17 +17,17 @@
+ mode="aspectFit" show-menu-by-longpress/>
+ mode="aspectFit" show-menu-by-longpress/>
+ mode="aspectFit" show-menu-by-longpress>
@@ -82,7 +82,7 @@