first commit

This commit is contained in:
sjk
2025-12-19 22:36:48 +08:00
commit 6802624e59
185 changed files with 43430 additions and 0 deletions

View File

@@ -0,0 +1,312 @@
// pages/home/home.ts
import { EmployeeService, Product as ApiProduct } from '../../services/employee';
interface Product {
id: number;
name: string;
price: number;
sales: number;
image: string;
category: string;
tags: string[];
hotLevel: number; // 1-5 热度等级
description?: string;
available_copies?: number;
}
interface Category {
id: string;
name: string;
}
Page({
data: {
selectedProduct: 0 as number, // 选中的商品ID
selectedProductName: '' as string, // 选中的商品名称
products: [] as Product[],
hasMore: true,
loading: false,
page: 1,
pageSize: 6
},
onLoad() {
// 不在onLoad检查登录允许用户浏览首页
this.loadProducts();
},
// 加载商品列表
async loadProducts() {
if (this.data.loading || !this.data.hasMore) return;
this.setData({ loading: true });
try {
// 从后端API获取产品列表公开接口不需要登录
const response = await EmployeeService.getProducts();
if (response.code === 200 && response.data) {
const apiProducts = response.data.list.map((product: ApiProduct, index: number) => ({
id: product.id,
name: product.name,
price: 0, // 后端暂无价格字段
sales: product.available_copies || 0,
image: product.image || `https://picsum.photos/id/${237 + index}/300/400`,
category: 'beauty', // 后端暂无分类字段
tags: ['种草', '推荐'],
hotLevel: product.available_copies > 5 ? 5 : 3,
description: product.description,
available_copies: product.available_copies
}));
this.setData({
products: apiProducts,
loading: false,
hasMore: false
});
return;
}
} catch (error) {
console.error('加载产品失败:', error);
// API失败使用模拟数据
}
// 如果API失败使用模拟数据
const allMockProducts = [
{
id: 1,
name: '兰蔻小黑瓶精华液',
price: 680,
sales: 10234,
image: 'https://picsum.photos/id/237/300/400',
category: 'beauty',
tags: ['美白', '抗老', '保湿'],
hotLevel: 5
},
{
id: 2,
name: 'SK-II神仙水',
price: 1299,
sales: 8765,
image: 'https://picsum.photos/id/152/300/400',
category: 'beauty',
tags: ['补水', '缩毛孔', '提亮'],
hotLevel: 5
},
{
id: 3,
name: '雅诗兰黛小棕瓶',
price: 790,
sales: 9432,
image: 'https://picsum.photos/id/292/300/400',
category: 'beauty',
tags: ['修复', '抗氧化', '紧致'],
hotLevel: 4
},
{
id: 4,
name: 'Dior烈艳蓝金口红',
price: 320,
sales: 15678,
image: 'https://picsum.photos/id/365/300/400',
category: 'beauty',
tags: ['段色', '滑顺', '持久'],
hotLevel: 5
},
{
id: 5,
name: 'AirPods Pro 2',
price: 1899,
sales: 23456,
image: 'https://picsum.photos/id/180/300/400',
category: 'digital',
tags: ['降噪', '音质', '舒适'],
hotLevel: 5
},
{
id: 6,
name: 'iPhone 15 Pro',
price: 7999,
sales: 34567,
image: 'https://picsum.photos/id/119/300/400',
category: 'digital',
tags: ['性能', '拍照', '长续航'],
hotLevel: 5
},
{
id: 7,
name: '海蓝之谜精华面霜',
price: 890,
sales: 7654,
image: 'https://picsum.photos/id/225/300/400',
category: 'beauty',
tags: ['保湿', '修复', '舒缓'],
hotLevel: 4
},
{
id: 8,
name: '迪奥烈影精华',
price: 1680,
sales: 5432,
image: 'https://picsum.photos/id/177/300/400',
category: 'beauty',
tags: ['抗衰老', '紧致', '提亮'],
hotLevel: 5
},
{
id: 9,
name: 'Zara复古风衣',
price: 299,
sales: 12345,
image: 'https://picsum.photos/id/111/300/400',
category: 'fashion',
tags: ['复古', '百搭', '时尚'],
hotLevel: 4
},
{
id: 10,
name: 'Uniqlo羊绒衫',
price: 199,
sales: 23456,
image: 'https://picsum.photos/id/222/300/400',
category: 'fashion',
tags: ['保暖', '舒适', '百搭'],
hotLevel: 5
},
{
id: 11,
name: '星巴克咖啡豆',
price: 88,
sales: 34567,
image: 'https://picsum.photos/id/431/300/400',
category: 'food',
tags: ['香浓', '精品', '中烘'],
hotLevel: 5
},
{
id: 12,
name: '三只松鼠零食礼盒',
price: 158,
sales: 19876,
image: 'https://picsum.photos/id/326/300/400',
category: 'food',
tags: ['零食', '礼盒', '美味'],
hotLevel: 4
}
];
// 模拟分页加载
setTimeout(() => {
const start = (this.data.page - 1) * this.data.pageSize;
const end = start + this.data.pageSize;
const newProducts = allMockProducts.slice(start, end);
this.setData({
products: [...this.data.products, ...newProducts],
hasMore: end < allMockProducts.length,
loading: false,
page: this.data.page + 1
});
}, 800);
},
// 切换商品选中状态
toggleProduct(e: any) {
const productId = e.currentTarget.dataset.id;
const productName = e.currentTarget.dataset.name;
this.setData({
selectedProduct: productId === this.data.selectedProduct ? 0 : productId,
selectedProductName: productId === this.data.selectedProduct ? '' : productName
});
},
// 去生成内容
async goToGenerate() {
if (!this.data.selectedProduct) {
wx.showToast({
title: '请先选择商品',
icon: 'none'
});
return;
}
// 1. 检查登录状态
const token = wx.getStorageSync('token');
if (!token) {
wx.showModal({
title: '未登录',
content: '请先登录后再查看文案',
confirmText: '去登录',
success: (res) => {
if (res.confirm) {
wx.redirectTo({
url: '/pages/login/login'
});
}
}
});
return;
}
// 2. 检查小红书绑定状态
try {
const response = await EmployeeService.getProfile();
if (response.code === 200 && response.data) {
const isBoundXHS = response.data.is_bound_xhs;
if (!isBoundXHS) {
// 未绑定小红书,提示并跳转
wx.showModal({
title: '未绑定小红书',
content: '查看文案前需要先绑定小红书账号',
confirmText: '去绑定',
success: (res) => {
if (res.confirm) {
wx.navigateTo({
url: '/pages/profile/social-binding/social-binding'
});
}
}
});
return;
}
// 登录且已绑定,跳转到文案列表页面
wx.navigateTo({
url: `/pages/articles/articles?productId=${this.data.selectedProduct}`
});
} else {
throw new Error('获取用户信息失败');
}
} catch (error) {
console.error('检查绑定状态失败:', error);
wx.showToast({
title: '获取用户信息失败',
icon: 'none'
});
}
},
// 滚动到底部加载更多
onScrollToLower() {
this.loadProducts();
},
// 分享功能
onShareAppMessage() {
return {
title: '万花筒AI助手 - 智能生成种草文案',
path: '/pages/home/home',
imageUrl: '' // 可以设置分享图片
};
},
// 分享到朋友圈
onShareTimeline() {
return {
title: '万花筒AI助手 - 智能生成种草文案',
imageUrl: '' // 可以设置分享图片
};
}
});