Browse Source
-调整了 app.config.ts 中的页面路径和顺序 - 移除了 article 页面 - 重构了 cart、find、order 和 user 页面的布局和功能 - 优化了导航栏和订单状态的显示逻辑 - 统一了页面样式和图标使用demo
23 changed files with 206 additions and 354 deletions
After Width: | Height: | Size: 2.5 KiB |
After Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 1.9 KiB |
@ -1,3 +0,0 @@ |
|||||
export default definePageConfig({ |
|
||||
navigationBarTitleText: '学习' |
|
||||
}) |
|
@ -1,50 +0,0 @@ |
|||||
import {useEffect, useState} from "react"; |
|
||||
import {ArrowRight} from '@nutui/icons-react-taro' |
|
||||
import {pageCmsArticle} from "@/api/cms/cmsArticle"; |
|
||||
import {CmsArticle} from "@/api/cms/cmsArticle/model"; |
|
||||
import Taro from '@tarojs/taro' |
|
||||
|
|
||||
/** |
|
||||
* 文章终极列表 |
|
||||
* @constructor |
|
||||
*/ |
|
||||
const Article = () => { |
|
||||
// const {params} = useRouter();
|
|
||||
// const [categoryId, setCategoryId] = useState<number>(3494)
|
|
||||
const [list, setList] = useState<CmsArticle[]>([]) |
|
||||
|
|
||||
const reload = () => { |
|
||||
// if (params.id) {
|
|
||||
// setCategoryId(Number(params.id))
|
|
||||
// }
|
|
||||
pageCmsArticle({}).then(res => { |
|
||||
if (res?.list) { |
|
||||
setList(res?.list) |
|
||||
} |
|
||||
}) |
|
||||
} |
|
||||
|
|
||||
useEffect(() => { |
|
||||
reload() |
|
||||
}, []) |
|
||||
|
|
||||
return ( |
|
||||
<div className={'px-3 mt-4 mb-10'}> |
|
||||
<div className={'flex flex-col justify-between items-center bg-white rounded-lg p-4'}> |
|
||||
<div className={'bg-white w-full'}> |
|
||||
{ |
|
||||
list.map((item, index) => { |
|
||||
return ( |
|
||||
<div key={index} className={'flex justify-between items-center py-2'} onClick={() => Taro.navigateTo({url: `/cms/help?id=${item.articleId}`}) }> |
|
||||
<div className={'text-sm'}>{item.title}</div> |
|
||||
<ArrowRight color={'#cccccc'} size={18} /> |
|
||||
</div> |
|
||||
) |
|
||||
}) |
|
||||
} |
|
||||
</div> |
|
||||
</div> |
|
||||
</div> |
|
||||
) |
|
||||
} |
|
||||
export default Article |
|
@ -1,211 +0,0 @@ |
|||||
import {useEffect, useState} from 'react' |
|
||||
import {navigateTo} from '@tarojs/taro' |
|
||||
import Taro from '@tarojs/taro' |
|
||||
import {Button} from '@tarojs/components'; |
|
||||
import {Image} from '@nutui/nutui-react-taro' |
|
||||
import {getUserInfo, getWxOpenId} from "@/api/layout"; |
|
||||
import {TenantId} from "@/config/app"; |
|
||||
import {User} from "@/api/system/user/model"; |
|
||||
// import News from "./News";
|
|
||||
import {myPageBszxBm} from "@/api/bszx/bszxBm"; |
|
||||
import {listCmsNavigation} from "@/api/cms/cmsNavigation"; |
|
||||
|
|
||||
const OrderIcon = () => { |
|
||||
|
|
||||
const [loading, setLoading] = useState(true) |
|
||||
const [isLogin, setIsLogin] = useState<boolean>(false) |
|
||||
const [userInfo, setUserInfo] = useState<User>() |
|
||||
const [bmLogs, setBmLogs] = useState<any>() |
|
||||
const [navItems, setNavItems] = useState<any>([]) |
|
||||
|
|
||||
/* 获取用户手机号 */ |
|
||||
const handleGetPhoneNumber = ({detail}) => { |
|
||||
const {code, encryptedData, iv} = detail |
|
||||
Taro.login({ |
|
||||
success: function () { |
|
||||
if (code) { |
|
||||
Taro.request({ |
|
||||
url: 'https://server.websoft.top/api/wx-login/loginByMpWxPhone', |
|
||||
method: 'POST', |
|
||||
data: { |
|
||||
code, |
|
||||
encryptedData, |
|
||||
iv, |
|
||||
notVerifyPhone: true, |
|
||||
refereeId: 0, |
|
||||
sceneType: 'save_referee', |
|
||||
tenantId: TenantId |
|
||||
}, |
|
||||
header: { |
|
||||
'content-type': 'application/json', |
|
||||
TenantId |
|
||||
}, |
|
||||
success: function (res) { |
|
||||
Taro.setStorageSync('access_token', res.data.data.access_token) |
|
||||
Taro.setStorageSync('UserId', res.data.data.user.userId) |
|
||||
setUserInfo(res.data.data.user) |
|
||||
Taro.setStorageSync('Phone', res.data.data.user.phone) |
|
||||
setIsLogin(true) |
|
||||
Taro.showToast({ |
|
||||
title: '登录成功', |
|
||||
icon: 'success' |
|
||||
}); |
|
||||
} |
|
||||
}) |
|
||||
} else { |
|
||||
console.log('登录失败!') |
|
||||
} |
|
||||
} |
|
||||
}) |
|
||||
} |
|
||||
|
|
||||
const onLogin = (item: any, index: number) => { |
|
||||
if(!isLogin){ |
|
||||
return navigateTo({url: `/pages/category/category?id=${item.navigationId}`}) |
|
||||
}else { |
|
||||
// 报名链接
|
|
||||
if(index == 0){ |
|
||||
console.log(bmLogs,'bmLogs') |
|
||||
if(bmLogs && bmLogs.length > 0){ |
|
||||
return navigateTo({url: `/bszx/bm-cert/bm-cert?id=${bmLogs[0].id}`}) |
|
||||
}else { |
|
||||
navigateTo({url: `/user/profile/profile`}) |
|
||||
} |
|
||||
} |
|
||||
// 善款明细
|
|
||||
if(item.navigationId == 4119){ |
|
||||
return navigateTo({url: `/bszx/pay-record/pay-record`}) |
|
||||
} |
|
||||
return navigateTo({url: `/pages/category/category?id=${item.navigationId}`}) |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
const reload = () => { |
|
||||
// 读取栏目
|
|
||||
listCmsNavigation({parentId: 2828,hide: 0}).then(res => { |
|
||||
console.log(res,'9999') |
|
||||
setNavItems(res); |
|
||||
}) |
|
||||
Taro.getUserInfo({ |
|
||||
success: (res) => { |
|
||||
const avatar = res.userInfo.avatarUrl; |
|
||||
setUserInfo({ |
|
||||
avatar, |
|
||||
nickname: res.userInfo.nickName, |
|
||||
sexName: res.userInfo.gender == 1 ? '男' : '女' |
|
||||
}) |
|
||||
getUserInfo().then((data) => { |
|
||||
if (data) { |
|
||||
setUserInfo(data) |
|
||||
setIsLogin(true); |
|
||||
console.log(userInfo, 'userInfo...') |
|
||||
Taro.setStorageSync('UserId', data.userId) |
|
||||
// 获取openId
|
|
||||
if (!data.openid) { |
|
||||
Taro.login({ |
|
||||
success: (res) => { |
|
||||
getWxOpenId({code: res.code}).then(() => { |
|
||||
}) |
|
||||
} |
|
||||
}) |
|
||||
} |
|
||||
} |
|
||||
}).catch(() => { |
|
||||
console.log('未登录') |
|
||||
}); |
|
||||
} |
|
||||
}); |
|
||||
// 报名日志
|
|
||||
myPageBszxBm({limit: 1}).then(res => { |
|
||||
if (res.list) { |
|
||||
setBmLogs(res.list); |
|
||||
} |
|
||||
}) |
|
||||
setLoading(false); |
|
||||
}; |
|
||||
|
|
||||
const showAuthModal = () => { |
|
||||
Taro.showModal({ |
|
||||
title: '授权提示', |
|
||||
content: '需要获取您的用户信息', |
|
||||
confirmText: '去授权', |
|
||||
cancelText: '取消', |
|
||||
success: (res) => { |
|
||||
if (res.confirm) { |
|
||||
// 用户点击确认,打开授权设置页面
|
|
||||
openSetting(); |
|
||||
} |
|
||||
} |
|
||||
}); |
|
||||
}; |
|
||||
|
|
||||
const openSetting = () => { |
|
||||
// Taro.openSetting:调起客户端小程序设置界面,返回用户设置的操作结果。设置界面只会出现小程序已经向用户请求过的权限。
|
|
||||
Taro.openSetting({ |
|
||||
success: (res) => { |
|
||||
if (res.authSetting['scope.userInfo']) { |
|
||||
// 用户授权成功,可以获取用户信息
|
|
||||
reload(); |
|
||||
} else { |
|
||||
// 用户拒绝授权,提示授权失败
|
|
||||
Taro.showToast({ |
|
||||
title: '授权失败', |
|
||||
icon: 'none' |
|
||||
}); |
|
||||
} |
|
||||
} |
|
||||
}); |
|
||||
}; |
|
||||
|
|
||||
useEffect(() => { |
|
||||
Taro.getSetting({ |
|
||||
success: (res) => { |
|
||||
if (res.authSetting['scope.userInfo']) { |
|
||||
// 用户已经授权过,可以直接获取用户信息
|
|
||||
console.log('用户已经授权过,可以直接获取用户信息') |
|
||||
reload(); |
|
||||
} else { |
|
||||
// 用户未授权,需要弹出授权窗口
|
|
||||
console.log('用户未授权,需要弹出授权窗口') |
|
||||
showAuthModal(); |
|
||||
} |
|
||||
} |
|
||||
}); |
|
||||
reload(); |
|
||||
}, []) |
|
||||
|
|
||||
return ( |
|
||||
<div className={'my-3'}> |
|
||||
<div className={'pt-4 bg-yellow-50 rounded-2xl'} |
|
||||
style={{background: 'linear-gradient(to bottom, #ffffff, #ffffcc)'}}> |
|
||||
<div className={'flex justify-between pb-2 px-1'}> |
|
||||
{ |
|
||||
navItems.map((item, index) => ( |
|
||||
<div key={index} className={'text-center'}> |
|
||||
{ |
|
||||
isLogin && !loading ? |
|
||||
<div className={'flex flex-col justify-center items-center'} onClick={() => { |
|
||||
onLogin(item, index) |
|
||||
}}> |
|
||||
<Image src={item.icon} height={28} width={28} lazyLoad={false}/> |
|
||||
<div className={'mt-2'} style={{fontSize: '15px'}}>{item?.title}</div> |
|
||||
</div> |
|
||||
: |
|
||||
<Button className={'text-white'} open-type="getPhoneNumber" onGetPhoneNumber={handleGetPhoneNumber}> |
|
||||
<div className={'flex flex-col justify-center items-center'}> |
|
||||
<Image src={item.icon} height={28} width={28} lazyLoad={false}/> |
|
||||
<div className={'mt-2 text-gray-700'} style={{fontSize: '15px'}}>{item?.title}</div> |
|
||||
</div> |
|
||||
</Button> |
|
||||
} |
|
||||
</div> |
|
||||
)) |
|
||||
} |
|
||||
</div> |
|
||||
</div> |
|
||||
{/*<image src={'https://oss.wsdns.cn/20250224/18a2f3b807c94aac8a67af34e95534d6.jpeg'} className={'book'}>倡议书</image>*/} |
|
||||
{/*<News id={categoryId}/>*/} |
|
||||
</div> |
|
||||
) |
|
||||
} |
|
||||
export default OrderIcon |
|
@ -0,0 +1,69 @@ |
|||||
|
import {useEffect} from "react"; |
||||
|
import navTo from "@/utils/common"; |
||||
|
import {View, Text} from '@tarojs/components'; |
||||
|
import {ArrowRight, Wallet, Comment, Transit, Refund, Package} from '@nutui/icons-react-taro'; |
||||
|
|
||||
|
function UserOrder() { |
||||
|
|
||||
|
const reload = () => { |
||||
|
|
||||
|
}; |
||||
|
|
||||
|
useEffect(() => { |
||||
|
reload() |
||||
|
}, []); |
||||
|
|
||||
|
return ( |
||||
|
<> |
||||
|
<View className={'px-4 pb-2'}> |
||||
|
<View |
||||
|
className={'user-card w-full flex flex-col justify-around rounded-xl shadow-sm'} |
||||
|
style={{ |
||||
|
background: 'linear-gradient(to bottom, #ffffff, #ffffff)', // 这种情况建议使用类名来控制样式(引入外联样式)
|
||||
|
// margin: '10px auto 0px auto',
|
||||
|
height: '120px', |
||||
|
// borderRadius: '22px 22px 0 0',
|
||||
|
}} |
||||
|
> |
||||
|
<View className={'title-bar flex justify-between pt-2'}> |
||||
|
<Text className={'title font-medium px-4'}>我的订单</Text> |
||||
|
<View className={'more flex items-center px-2'} onClick={() => navTo('/user/order/order', true)}> |
||||
|
<Text className={'text-xs text-gray-500'}>全部订单</Text> |
||||
|
<ArrowRight color="#cccccc" size={12}/> |
||||
|
</View> |
||||
|
</View> |
||||
|
<View className={'flex justify-around pb-1'}> |
||||
|
<View className={'item flex justify-center flex-col items-center'} |
||||
|
onClick={() => navTo('/user/order/order?statusFilter=0', true)}> |
||||
|
<Wallet size={26} className={'font-normal text-gray-500'}/> |
||||
|
<Text className={'text-sm text-gray-600 py-1'}>待付款</Text> |
||||
|
</View> |
||||
|
<View className={'item flex justify-center flex-col items-center'} |
||||
|
onClick={() => navTo('/user/order/order?statusFilter=1', true)}> |
||||
|
<Package size={26} className={'text-gray-500 font-normal'}/> |
||||
|
<Text className={'text-sm text-gray-600 py-1'}>待发货</Text> |
||||
|
</View> |
||||
|
<View className={'item flex justify-center flex-col items-center'} |
||||
|
onClick={() => navTo('/user/order/order?statusFilter=3', true)}> |
||||
|
<Transit size={24} className={'text-gray-500 font-normal'}/> |
||||
|
<Text className={'text-sm text-gray-600 py-1'}>待收货</Text> |
||||
|
</View> |
||||
|
<View className={'item flex justify-center flex-col items-center'} |
||||
|
onClick={() => navTo('/user/order/order?statusFilter=5', true)}> |
||||
|
<Comment size={24} className={'text-gray-500 font-normal'}/> |
||||
|
<Text className={'text-sm text-gray-600 py-1'}>待评价</Text> |
||||
|
</View> |
||||
|
<View className={'item flex justify-center flex-col items-center'} |
||||
|
onClick={() => navTo('/user/order/order?statusFilter=7', true)}> |
||||
|
<Refund size={26} className={'font-normal text-gray-500'}/> |
||||
|
<Text className={'text-sm text-gray-600 py-1'}>退货/售后</Text> |
||||
|
</View> |
||||
|
</View> |
||||
|
</View> |
||||
|
</View> |
||||
|
</> |
||||
|
|
||||
|
) |
||||
|
} |
||||
|
|
||||
|
export default UserOrder; |
Loading…
Reference in new issue