--我的页面更新新版本

--码单管理完成
This commit is contained in:
li tong bao 2022-05-24 19:16:30 +08:00
parent 6ba8a7b137
commit 14216d3b0a
11 changed files with 538 additions and 95 deletions

56
src/api/company.ts Normal file
View File

@ -0,0 +1,56 @@
import { useRequest } from "@/use/useHttp"
/**
*
* @returns
*/
export const companyDetailApi = () => {
return useRequest({
url: `/v1/mall/company/info`,
method: "get",
})
}
/**
*
* @returns
*/
export const companyUpdateApi = () => {
return useRequest({
url: `/v1/mall/company/info`,
method: "put",
})
}
/**
*
* @returns
*/
export const addressDetailApi = () => {
return useRequest({
url: `/v1/mall/address`,
method: "get",
})
}
/**
*
* @returns
*/
export const addressEditApi = () => {
return useRequest({
url: `/v1/mall/address`,
method: "put",
})
}
/**
*
* @returns
*/
export const addressDeleteApi = () => {
return useRequest({
url: `/v1/mall/address`,
method: "delete",
})
}

View File

@ -29,3 +29,13 @@ import { useRequest } from "@/use/useHttp"
method: "post", method: "post",
}) })
} }
/**
*
*/
export const realNameUpdateApi = () => {
return useRequest({
url: `/v1/mall/user`,
method: "put",
})
}

56
src/api/weightList.ts Normal file
View File

@ -0,0 +1,56 @@
import { useRequest } from "@/use/useHttp"
/**
*
* @returns
*/
export const weightListApi = () => {
return useRequest({
url: `/v1/mall/title/list`,
method: "get",
})
}
/**
*
* @returns
*/
export const weightAddApi = () => {
return useRequest({
url: `/v1/mall/title`,
method: "post",
})
}
/**
*
* @returns
*/
export const weightDetailApi = () => {
return useRequest({
url: `/v1/mall/title`,
method: "get",
})
}
/**
*
* @returns
*/
export const weightEditApi = () => {
return useRequest({
url: `/v1/mall/title`,
method: "put",
})
}
/**
*
* @returns
*/
export const weightDeleteApi = () => {
return useRequest({
url: `/v1/mall/title`,
method: "delete",
})
}

View File

@ -4,27 +4,91 @@ import FromList from "@/components/FromList"
import { Button, Input, Text, Textarea, View } from "@tarojs/components" import { Button, Input, Text, Textarea, View } from "@tarojs/components"
import Taro, { getCurrentPages, useRouter } from "@tarojs/taro" import Taro, { getCurrentPages, useRouter } from "@tarojs/taro"
import { useEffect, useState } from "react" import { useEffect, useState } from "react"
import { alert, retrieval } from "@/common/common";
import { companyDetailApi, companyUpdateApi } from "@/api/company"
import "./index.scss" import "./index.scss"
export default ()=>{ export default ()=>{
const [showSiteModal, setShowSiteModal] = useState(false); const [showSiteModal, setShowSiteModal] = useState(false);
const handleSelectSite = ()=>{ const handleSelectSite = ()=>{
setShowSiteModal(true); setShowSiteModal(true);
} }
// 获取公司信息
const {fetchData: getFromData} = companyDetailApi();
const getData = async ()=>{
const result = await getFromData();
console.log(result.data,"===");
setFormData({
...result.data,
});
}
useEffect(()=>{
getData();
},[])
// 保存 // 保存
const [formData, setFormData] = useState({ const [formData, setFormData] = useState({
aa: "", address_detail: "",
bb:"", city_id: 0,
cc:"", company_id: 0,
dd:"" company_long_name: "",
company_name: "",
company_type: [
0
],
director: "",
district_id: 0,
phone: "",
province_id: 0,
site:"",
siteArray: []
}) })
const rules = {
company_name: [{
message: "请输入公司名称"
}],
company_long_name: [{
message: "请输入公司全称"
}],
director: [{
message: "请输入联系人"
}],
phone: [{
message: "请输入正确的电话号码", regex: /^1[3|5|6|9|2|8|7]\d{9}$/
}],
district_id: [{
message: "请选择地址"
}],
address_detail: [{
message: "请输入详细地址"
}],
}
const {fetchData: saveFetch} = companyUpdateApi();
const handleSave = ()=>{ const handleSave = ()=>{
const pages = getCurrentPages(); retrieval(formData, rules).then(async ()=>{
const prevPage = pages[pages.length-2]; const result = await saveFetch({
Taro.eventCenter.trigger('message:detail', { text: 'test' }) address_detail: formData.address_detail,
city_id: formData.city_id,
company_id: formData.company_id,
company_long_name: formData.company_long_name,
company_name: formData.company_name,
company_type: formData.company_type,
director: formData.director,
district_id: formData.district_id,
phone: formData.phone,
province_id: formData.province_id
});
if(result.success){
Taro.eventCenter.trigger('company:detail')
Taro.navigateBack();
alert.success("保存成功");
}else{
alert.error(result.msg);
}
}).catch(message=>{
alert.none(message)
})
Taro.navigateBack(); Taro.navigateBack();
} }
@ -34,12 +98,34 @@ export default ()=>{
const handleActiveRadio = (index:number)=>{ const handleActiveRadio = (index:number)=>{
setRadioActive(index); setRadioActive(index);
} }
// 设置选择地址
const handleSetSite = (ev:any)=>{
if(ev.length>=3){
setFormData({
...formData,
siteArray: ev,
site: ev.map(item=>item.name+" "),
province_id: ev[0]?.id,
city_id: ev[1]?.id,
district_id: ev[ev.length-1]?.id,
})
}else{
alert.error("请选择完整地址");
}
}
// 监听表单完善
const [hozon, setHozon] = useState(false);
useEffect(()=>{
if(retrieval){
retrieval(formData).then(()=>setHozon(true)).catch(()=>setHozon(false))
}
},[formData])
return ( return (
<View className="company"> <View className="company">
<FromList value={formData["aa"]} label="公司名称" placeholder="请输入收货人姓名"/> <FromList onInput={(ev:any)=>setFormData({...formData,company_name:ev.detail.value})} value={formData["company_name"]} label="公司名称" placeholder="请输入公司名称"/>
<FromList value={formData["bb"]} label="公司全称" placeholder="请输入收货人姓名"/> <FromList onInput={(ev:any)=>setFormData({...formData,company_long_name:ev.detail.value})} value={formData["company_long_name"]} label="公司全称" placeholder="请输入公司全称"/>
<FromList value={formData["bb"]} label="公司类型" placeholder="请输入收货人姓名"> <FromList value={formData["company_type"]} label="公司类型">
<View className="form-radio"> <View className="form-radio">
{ {
radioData.map((item,index)=>{ radioData.map((item,index)=>{
@ -48,14 +134,15 @@ export default ()=>{
} }
</View> </View>
</FromList> </FromList>
<FromList value={formData["bb"]} label="联系人" placeholder="请输入收货人姓名"/> <FromList onInput={(ev:any)=>setFormData({...formData,director:ev.detail.value})} value={formData["director"]} label="联系人" placeholder="请输入联系人"/>
<FromList value={formData["bb"]} label="联系方式" placeholder="请输入收货人姓名"/> <FromList onInput={(ev:any)=>setFormData({...formData,phone:ev.detail.value})} value={formData["phone"]} label="联系方式" placeholder="请输入联系方式"/>
<FromList value={formData["cc"]} onClick={handleSelectSite} label="收货地址" type="select" placeholder="请选择/省/市/区"/> <FromList value={formData["site"]} onClick={handleSelectSite} label="收货地址" type="select" placeholder="请选择/省/市/区"/>
<FromList value={formData["dd"]} label="详细地址" type="textarea" placeholder="请输入详细地址(街道、门牌号等)"/> <FromList onInput={(ev:any)=>setFormData({...formData,address_detail:ev.detail.value})} value={formData["address_detail"]} label="详细地址" type="textarea" placeholder="请输入详细地址(街道、门牌号等)"/>
<Button hoverClass="none" className="save-button" onClick={handleSave}></Button> <Button style={{"background": hozon?'#007aff':''}} hoverClass="none" className="save-button" onClick={handleSave}></Button>
<Address addressOnClose={()=>setShowSiteModal(false)} show={showSiteModal}/> {/* <Address addressOnClose={()=>setShowSiteModal(false)} show={showSiteModal}/> */}
<Address addressOnSelect={handleSetSite} defaultValue={[ {name: "广东省", id: 193, level: 2}, {name: "佛山市", id: 202, level:3}, {name: "高明区", id: 204, level:4}]} addressOnClose={()=>setShowSiteModal(false)} show={showSiteModal}/>
</View> </View>
) )
} }

View File

@ -52,6 +52,19 @@
font-size: 44px; font-size: 44px;
font-weight: 700; font-weight: 700;
color: #000000; color: #000000;
display: flex;
align-items: center;
}
.arcd-info-left-certification{
width: 94px;
height: 28px;
background: #C7F0DF;
border-radius: 4px;
display: flex;align-items: center;justify-content: center;
font-size: 18px;
font-weight: 400;
color: #07C160;
margin-left: 16px;
} }
.arcd-info-left-phone{ .arcd-info-left-phone{
font-size: 24px; font-size: 24px;
@ -78,6 +91,9 @@
right: 0;top: 0; right: 0;top: 0;
} }
.card-main{
margin: 20px auto 0;
}
.card-main-title{ .card-main-title{
display: flex;justify-content: space-between; display: flex;justify-content: space-between;
align-items: center; align-items: center;
@ -120,10 +136,45 @@
display: flex;align-items: center;justify-content: center; display: flex;align-items: center;justify-content: center;
position: absolute;top: -10px;right: 0; position: absolute;top: -10px;right: 0;
} }
.assets{
}
.assets-title{
font-size: 28px;
font-weight: 700;
color: #3c3c3c;
margin-bottom: 20px;
}
.assets-content{
display: grid;
grid-template-columns: repeat(3,1fr);
}
.assets-content>view{
text-align: center;
}
.assets-content-item-top{
color: #007aff;
font-weight: 400;
}
.assets-content-item-top-before{
font-size: 20px;
}
.assets-content-item-top-content{
font-size: 36px;
}
.assets-content-item-top-after{
font-size: 20px;
}
.assets-content-item-tips{
font-size: 24px;
font-weight: 400;
color: #707070;
}
.main-card{ .main-card{
margin: 131px auto 0; margin: 131px auto 0;
} }
.card-main-list-content-item{ .card-main-list-content-item{
display: flex;align-items: center; display: flex;align-items: center;
justify-content: space-between; justify-content: space-between;

View File

@ -1,13 +1,16 @@
import { View, Image, Text, Navigator } from "@tarojs/components" import { View, Image, Text, Navigator } from "@tarojs/components"
import { memo } from "react" import { memo, useEffect, useState } from "react"
import styles from './index.module.scss' import styles from './index.module.scss'
import classnames from "classnames"; import classnames from "classnames";
import { useSelector } from "@/reducers/hooks";
import { GetAdminUserInfoApi } from "@/api/user";
export default () => { export default () => {
return ( return (
<View className={styles.main}> <View className={styles.main}>
<Header /> <Header />
<Assets />
<Main /> <Main />
</View> </View>
) )
@ -17,7 +20,24 @@ export default () => {
const Header = memo(() => { const Header = memo(() => {
let menu = [{ text: "待配布", icon: "icon-daipeibu" }, { text: "待付款", icon: "icon-daifukuan" }, let menu = [{ text: "待配布", icon: "icon-daipeibu" }, { text: "待付款", icon: "icon-daifukuan" },
{ text: "待发货", icon: "icon-daifahuo" }, { text: "已发货", icon: "icon-yifahuo" }, { text: "待发货", icon: "icon-daifahuo" }, { text: "已发货", icon: "icon-yifahuo" },
{ text: "退款/售后", icon: "icon-a-tuikuanshouhou" }] { text: "退款/售后", icon: "icon-a-tuikuanshouhou" }];
// 用户信息
const { fetchData, state } = GetAdminUserInfoApi();
const {userInfo} = useSelector(state => state.userInfo);
const [mUserInfo, setMUserInfo] = useState({
phone: ""
});
const getData = ()=>{
fetchData();
}
useEffect(()=>{
setMUserInfo({
...mUserInfo,
phone: userInfo?.phone?.replace(userInfo?.phone?.substring(3,7), "****") as string
})
getData();
},[])
return ( return (
<View className={styles.header}> <View className={styles.header}>
<View className={`${styles.crad} ${styles['header-card']}`}> <View className={`${styles.crad} ${styles['header-card']}`}>
@ -27,8 +47,14 @@ const Header = memo(() => {
<Image src="https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg.jj20.com%2Fup%2Fallimg%2F1113%2F052420110515%2F200524110515-2-1200.jpg&refer=http%3A%2F%2Fimg.jj20.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1652840455&t=6d2fd53931578ef6e213a929a77d059c" /> <Image src="https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg.jj20.com%2Fup%2Fallimg%2F1113%2F052420110515%2F200524110515-2-1200.jpg&refer=http%3A%2F%2Fimg.jj20.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1652840455&t=6d2fd53931578ef6e213a929a77d059c" />
</View> </View>
<View className={styles['arcd-info-left-desc']}> <View className={styles['arcd-info-left-desc']}>
<View className={styles['arcd-info-left-nickname']}></View> <View className={styles['arcd-info-left-nickname']}>
<View className={styles['arcd-info-left-phone']}>131****1132</View> {/* {state.data.user_name} */}
<View className={styles['arcd-info-left-certification']}>
</View>
</View>
<View className={styles['arcd-info-left-phone']}></View>
</View> </View>
</View> </View>
<View className={styles['card-info-right']}> <View className={styles['card-info-right']}>
@ -54,7 +80,7 @@ const Header = memo(() => {
<View className={styles['card-main-title-content-item']}> <View className={styles['card-main-title-content-item']}>
<Text className={`iconfont ${item.icon}`}></Text> <Text className={`iconfont ${item.icon}`}></Text>
<View>{item.text}</View> <View>{item.text}</View>
<View className={styles['card-main-title-content-item-badge']}>99+</View> <View className={styles['card-main-title-content-item-badge']}>{index==2?"99+":10}</View>
</View> </View>
) )
}) })
@ -67,13 +93,46 @@ const Header = memo(() => {
) )
}) })
// 我的资产
const Assets = () => {
return (
<View className={`${styles.assets} ${styles.crad} ${styles['main-card']}`}>
<View className={`${styles['assets-title']}`}></View>
<View className={`${styles['assets-content']}`}>
<View>
<View className={`${styles['assets-content-item-top']}`}>
<Text className={`${styles['assets-content-item-top-before']}`}>¥</Text>
<Text className={`${styles['assets-content-item-top-content']}`}>0</Text>
<Text className={`${styles['assets-content-item-top-after']}`}>.20</Text>
</View>
<Text className={`${styles['assets-content-item-tips']}`}></Text>
</View>
<View>
<View className={`${styles['assets-content-item-top']}`}>
<Text className={`${styles['assets-content-item-top-content']}`}>4</Text>
<Text className={`${styles['assets-content-item-top-after']}`}></Text>
</View>
<Text className={`${styles['assets-content-item-tips']}`}></Text>
</View>
<View>
<View className={`${styles['assets-content-item-top']}`}>
<Text className={`${styles['assets-content-item-top-before']}`}>¥</Text>
<Text className={`${styles['assets-content-item-top-content']}`}>99999</Text>
<Text className={`${styles['assets-content-item-top-after']}`}>.-00</Text>
</View>
<Text className={`${styles['assets-content-item-tips']}`}></Text>
</View>
</View>
</View>
)
};
// 功能 // 功能
const Main = memo(() => { const Main = memo(() => {
let menu = [{ text: "我的收藏", icon: "icon-shoucang" }, { text: "颜色对比", icon: "icon-yanseduibi" }, let menu = [{ text: "我的收藏", icon: "icon-shoucang" }, { text: "颜色对比", icon: "icon-yanseduibi" },
{ text: "分享推广", icon: "icon-fenxiang" }, { text: "团队邀请", icon: "icon-yaoqingtuandui" }] { text: "分享推广", icon: "icon-fenxiang" }, { text: "团队邀请", icon: "icon-yaoqingtuandui" }]
return ( return (
<View className={`${styles.crad} ${styles['main-card']}`}> <View className={`${styles.crad} ${styles['card-main']}`}>
<View className={styles['card-main']}>
<View className={styles['card-main-list-content']}> <View className={styles['card-main-list-content']}>
{ {
menu.map((item, index) => { menu.map((item, index) => {
@ -92,6 +151,5 @@ const Main = memo(() => {
} }
</View> </View>
</View> </View>
</View>
) )
}) })

View File

@ -119,10 +119,13 @@
background-color: white; background-color: white;
border: none; border: none;
outline: none; outline: none;
border-radius: none;
padding: 0; padding: 0;
border-radius: 0; border-radius: 0;
} }
.user-edit-popup-operation button::after,.user-edit-logout::after{
border-radius: 0;
border: none;
}
.user-edit-popup-operation .user-edit-popup-operation-save{ .user-edit-popup-operation .user-edit-popup-operation-save{
background: #007aff; background: #007aff;
color: #ffffff; color: #ffffff;

View File

@ -1,28 +1,56 @@
import { goLink } from "@/common/common"; import { alert, goLink, isEmptyObject, retrieval } from "@/common/common";
import Popup from "@/components/popup"; import Popup from "@/components/popup";
import { Button, Image, Text, Textarea, View } from "@tarojs/components" import { Button, Image, Text, Textarea, View } from "@tarojs/components"
import Taro, { chooseMedia } from "@tarojs/taro"; import Taro, { chooseMedia } from "@tarojs/taro";
import { memo, useCallback, useState } from "react" import { GetAdminUserInfoApi, realNameUpdateApi } from "@/api/user";
import { memo, useCallback, useEffect, useState } from "react"
import "./index.scss" import "./index.scss"
export default ()=>{ export default ()=>{
// 用户信息
const { fetchData, state } = GetAdminUserInfoApi();
const getData = async ()=>{
const result = await fetchData();
setFormData({
...formData,
real_name: result.data.user_name
})
}
useEffect(()=>{
getData();
},[])
// 表单数据 // 表单数据
const [formData, setFormData] = useState({ const [formData, setFormData] = useState({
nickname: "麦兜" real_name: "麦兜"
}); });
// 显示popup // 显示popup
const [popupShow,setPopupShow] = useState(false); const [popupShow,setPopupShow] = useState(false);
const triggerList = useCallback((key:string)=>{ const triggerList = useCallback((key:string)=>{
setPopupShow(true); setPopupShow(true);
},[]) },[])
// popup保存 // popup保存
const handleTextareaSave = ()=>{ const { fetchData: realNameUpdateFetch } = realNameUpdateApi();
const rules = {
real_name: [{
message: "请输入昵称"
}]
} }
Taro.eventCenter.on('message:detail', (message) => console.log(message)) const handleTextareaSave = async (real_name)=>{
retrieval({real_name},rules).then(async ()=>{
const result = await realNameUpdateFetch({real_name});
if(result.success){
getData();
setPopupShow(false);
alert.success("保存成功");
}else{
alert.none(result.msg);
}
}).catch(message=>{
alert.none(message);
})
}
// Taro.eventCenter.on('message:detail', (message) => console.log(message))
// 面面跳转 // 面面跳转
const onNavigate = (url:string)=>{ const onNavigate = (url:string)=>{
goLink(url); goLink(url);
@ -46,7 +74,7 @@ export default ()=>{
<View></View> <View></View>
</View> </View>
<View className="user-edit-content"> <View className="user-edit-content">
<UserEditList onClick={()=>triggerList('nickname')} data={formData} label="昵称" placeholder="请输入" icon=""/> <UserEditList onClick={()=>triggerList('real_name')} data={state.data.user_name} label="昵称" placeholder="请输入" icon=""/>
<UserEditList onClick={()=>onNavigate("/pages/company/index")} label="公司/组织" placeholder="请输入" icon=""/> <UserEditList onClick={()=>onNavigate("/pages/company/index")} label="公司/组织" placeholder="请输入" icon=""/>
<UserEditList onClick={()=>onNavigate("/pages/addressManager/index")} label="地址管理" placeholder="添加 / 修改收货地址" icon=""/> <UserEditList onClick={()=>onNavigate("/pages/addressManager/index")} label="地址管理" placeholder="添加 / 修改收货地址" icon=""/>
<UserEditList onClick={()=>onNavigate("/pages/weightList/index")} label="码单管理" placeholder="修改码单抬头 / 客户 / 电话等显示信息" icon=""/> <UserEditList onClick={()=>onNavigate("/pages/weightList/index")} label="码单管理" placeholder="修改码单抬头 / 客户 / 电话等显示信息" icon=""/>
@ -55,7 +83,7 @@ export default ()=>{
</View> </View>
<Button hoverClass="none" className="user-edit-logout">退</Button> <Button hoverClass="none" className="user-edit-logout">退</Button>
<PopupContent value="123" show={popupShow} setPopupShow={setPopupShow} save={handleTextareaSave}/> <PopupContent value={formData.real_name} show={popupShow} setPopupShow={setPopupShow} save={handleTextareaSave}/>
</View> </View>
) )
} }
@ -69,8 +97,10 @@ const UserEditList = memo((props:any)=>{
</View> </View>
<View className="user-edit-list-right"> <View className="user-edit-list-right">
<View> <View>
{
props.data?props.data:
<View className="user-edit-list-right-placeholder">{props.placeholder}</View> <View className="user-edit-list-right-placeholder">{props.placeholder}</View>
{/* 请输入 */} }
</View> </View>
<Text className="iconfont icon-a-moreback"></Text> <Text className="iconfont icon-a-moreback"></Text>
</View> </View>
@ -81,13 +111,16 @@ const UserEditList = memo((props:any)=>{
// popup内容 // popup内容
const PopupContent = memo((props:any)=>{ const PopupContent = memo((props:any)=>{
const [value, setValue] = useState(""); const [value, setValue] = useState("");
useEffect(()=>{
setValue(props.value);
},[props.value])
// popup输入长度 // popup输入长度
const handleTextareaInput = (ev:any)=>{ const handleTextareaInput = (ev:any)=>{
setValue(ev.detail.value.slice(0,20)); setValue(ev.detail.value.slice(0,20));
} }
// 重置 // 重置
const handleTextareaReset = ()=>{ const handleTextareaReset = ()=>{
setValue("");
} }
return ( return (
<Popup onClose={()=>props.setPopupShow(false)} title="修改昵称" show={props.show}> <Popup onClose={()=>props.setPopupShow(false)} title="修改昵称" show={props.show}>
@ -99,7 +132,7 @@ const PopupContent = memo((props:any)=>{
<Text className="user-edit-popup-tips">2-20-_组成</Text> <Text className="user-edit-popup-tips">2-20-_组成</Text>
<View className="user-edit-popup-operation"> <View className="user-edit-popup-operation">
<Button onClick={handleTextareaReset} hoverClass="none" className="user-edit-popup-operation-reset"></Button> <Button onClick={handleTextareaReset} hoverClass="none" className="user-edit-popup-operation-reset"></Button>
<Button onClick={props.save} hoverClass="none" className="user-edit-popup-operation-save"></Button> <Button onClick={()=>props.save(value)} hoverClass="none" className="user-edit-popup-operation-save"></Button>
</View> </View>
</View> </View>
</Popup> </Popup>

View File

@ -21,7 +21,10 @@
margin: 18px auto 0; margin: 18px auto 0;
border: 1px solid #ffffff; border: 1px solid #ffffff;
} }
.weight-list-list:hover{ .weight-list-list:first-child{
margin-top: 0;
}
.address-active{
border: 1px solid #68b4ff; border: 1px solid #68b4ff;
box-shadow: 0px 0px 10px 0px rgba(0,122,255,0.27); box-shadow: 0px 0px 10px 0px rgba(0,122,255,0.27);
} }

View File

@ -1,53 +1,84 @@
import { Button, Navigator, ScrollView, Text, View } from "@tarojs/components" import { Button, Navigator, ScrollView, Text, View } from "@tarojs/components"
import { memo, useState } from "react" import { memo, useEffect, useState } from "react"
import {weightListApi,weightDeleteApi} from "@/api/weightList"
import "./index.scss" import "./index.scss"
import Taro, { showModal } from "@tarojs/taro"
import { alert } from "@/common/common"
const weightListManager = ()=>{ const weightListManager = ()=>{
return( return(
<View className="weight-list-manager"> <View className="weight-list-manager">
<WeightList /> <WeightList />
</View> </View>
) )
} }
interface Params{ interface Params{
refresherEnabled?: boolean,//是否开启刷新 refresherEnabled?: boolean,//是否开启刷新
onSelect?: (item:any,index:number)=>void,//列表选择 onSelect?: (item:any,index:number)=>void,//列表选择
} }
// 码单列表 // 码单列表
const WeightList = memo((props:Params)=>{ const WeightList = (props:Params)=>{
const {fetchData, state} = weightListApi();
const getData = ()=>{
fetchData();
}
useEffect(()=>{
Taro.eventCenter.on("weightList:refresh", getData);
getData();
return ()=>{
Taro.eventCenter.off("weightList:refresh", getData);
}
},[]);
// 处理刷新 // 处理刷新
const [refreshState, setRefreshState] = useState(false); const [refreshState, setRefreshState] = useState(false);
const handleRefresh = ()=>{ const handleRefresh = async ()=>{
setRefreshState(true); setRefreshState(true);
setTimeout(()=>{ await fetchData();
setRefreshState(false); setRefreshState(false);
},500)
} }
const data = Array.from({length:0}); const data = Array.from({length:0});
// 删除码单
const {fetchData: deleteFetch} = weightDeleteApi()
const handleDelete = (item:any)=>{
showModal(({
title: "提示",
content: "是否删除码单?",
async success(ev){
if(ev.confirm){
const result = await deleteFetch({id:item.id});
if(result.success){
alert.success("删除成功");
getData();
}else{
alert.success(result.msg);
}
}
}
}))
}
return ( return (
<View className="weight-list-scroll-view"> <View className="weight-list-scroll-view">
<ScrollView scrollY refresherEnabled={props.refresherEnabled} enhanced refresherTriggered={refreshState} onRefresherRefresh={handleRefresh}> <ScrollView scrollY refresherEnabled enhanced refresherTriggered={refreshState} onRefresherRefresh={handleRefresh}>
{ {
data.length>0? // data.length>0?
data.map((item,index)=>{ state?.data?.list?.length>0?
state?.data?.list?.map((item,index)=>{
return( return(
<View onClick={()=>props.onSelect&&props.onSelect(item,index)} className="weight-list-list"> <View onClick={()=>props.onSelect&&props.onSelect(item,index)} onLongPress={()=>handleDelete(item)} className={`weight-list-list ${item.is_default&&'address-active'}`}>
<View className="weight-list-user"> <View className="weight-list-user">
XL纺织 {item.title}
<Text className="weight-list-list-default"></Text> {
{/* <Text className="weight-list-list-phone">1656488999</Text> */} item.is_default&&<Text className="weight-list-list-default"></Text>
}
</View> </View>
<View className="weight-list-list-bottom"> <View className="weight-list-list-bottom">
<View className="weight-list-list-info"> <View className="weight-list-list-info">
************ {item.purchaser_name}
<Text className="weight-list-list-phone">181****9790</Text> <Text className="weight-list-list-phone">{item.phone.replace(item.phone.substring(3,7), "****")}</Text>
</View> </View>
<Navigator url="/pages/weightListAdd/index?type=edit" hoverClass="none" className="weight-list-edit"> <Navigator url={`/pages/weightListAdd/index?type=edit&id=${item.id}`} hoverClass="none" className="weight-list-edit">
<Text className="iconfont icon-bianji"></Text> <Text className="iconfont icon-bianji"></Text>
</Navigator> </Navigator>
</View> </View>
@ -63,6 +94,6 @@ const WeightList = memo((props:Params)=>{
<Navigator url="/pages/weightListAdd/index?type=add" hoverClass="none" className="add-weight-list"></Navigator> <Navigator url="/pages/weightListAdd/index?type=add" hoverClass="none" className="add-weight-list"></Navigator>
</View> </View>
) )
}) }
export default weightListManager; export default weightListManager;

View File

@ -2,48 +2,103 @@
import FromList from "@/components/FromList" import FromList from "@/components/FromList"
import { Button, Input, Text, Textarea, View } from "@tarojs/components" import { Button, Input, Text, Textarea, View } from "@tarojs/components"
import Taro, { setNavigationBarTitle, useRouter } from "@tarojs/taro" import Taro, { setNavigationBarTitle, useRouter } from "@tarojs/taro"
import {weightAddApi, weightDetailApi,weightEditApi} from "@/api/weightList"
import { useEffect, useState } from "react" import { useEffect, useState } from "react"
import { alert, retrieval } from "@/common/common"
import "./index.scss" import "./index.scss"
export default ()=>{ export default ()=>{
const {type} = useRouter().params; const {type,id} = useRouter().params;
useEffect(()=>{ useEffect(()=>{
if(type=="add"){ if(type=="add"){
setNavigationBarTitle({title:"添加码单信息"}) setNavigationBarTitle({title:"添加码单信息"})
}else{ }else{
initalFormData();
setNavigationBarTitle({title:"修改码单信息"}) setNavigationBarTitle({title:"修改码单信息"})
} }
},[]) },[]);
// 获取编辑码单信息
const {fetchData: getFromData} = weightDetailApi()
const initalFormData = async ()=>{
const detail = await getFromData({id});
setFormData({
title: detail.data.title,
purchaser_name: detail.data.purchaser_name,
phone: detail.data.phone,
is_default: detail.data.is_default,
id: detail.data.id,
})
}
// 保存 // 保存
const [formData, setFormData] = useState({ const [formData, setFormData] = useState({
aa: "", title: "",
bb:"", purchaser_name: "",
cc:"", phone: "",
dd:"", is_default: false,
ee: 1 id: 0
}) })
const handleSave = ()=>{ const rules = {
Taro.navigateBack(); title: [{
message: "请输入抬头"
}],
purchaser_name: [{
message: "请输入客户名称"
}],
phone: [{
message: "请输入正确的电话号码", regex: /^1[3|5|6|9|2|8|7]\d{9}$/
}]
} }
const handleSelectDefault = ()=>setFormData({...formData ,ee: formData.ee?0:1}); const {fetchData} = weightAddApi()
const {fetchData: editFetch} = weightEditApi()
const handleSave = ()=>{
retrieval(formData, rules).then(async ()=>{
const result = type=="add"?await fetchData({
title: formData.title,
purchaser_name: formData.purchaser_name,
phone: formData.phone,
is_default: formData.is_default,
}):await editFetch({
title: formData.title,
purchaser_name: formData.purchaser_name,
phone: formData.phone,
is_default: formData.is_default,
id: formData.id
});
if(result.success){
Taro.eventCenter.trigger("weightList:refresh");
Taro.navigateBack();
alert.success("保存成功");
}else{
alert.error(result.msg);
}
}).catch((message)=>{
alert.none(message)
})
}
// 监听表单完善
const [hozon, setHozon] = useState(false);
useEffect(()=>{
if(retrieval){
retrieval(formData).then(()=>setHozon(true)).catch(()=>setHozon(false))
}
},[formData])
return ( return (
<View className="add-address"> <View className="add-address">
<FromList value={formData["aa"]} label="抬头" placeholder="请输入码单显示抬头信息"/> <FromList onInput={(ev:any)=>setFormData({...formData,title:ev.detail.value})} value={formData["title"]} label="抬头" placeholder="请输入码单显示抬头信息"/>
<FromList value={formData["bb"]} label="客户" placeholder="请输入码单显示客户名称"/> <FromList onInput={(ev:any)=>setFormData({...formData,purchaser_name:ev.detail.value})} value={formData["purchaser_name"]} label="客户" placeholder="请输入码单显示客户名称"/>
<FromList value={formData["bb"]} label="联系方式" placeholder="请输入码单显示联系号码"/> <FromList onInput={(ev:any)=>setFormData({...formData,phone:ev.detail.value})} value={formData["phone"]} label="联系方式" placeholder="请输入码单显示联系号码"/>
<View className="add-address-default"> <View className="add-address-default">
<Text></Text> <Text></Text>
<View onClick={handleSelectDefault}> <View onClick={()=>setFormData({...formData ,is_default: !formData.is_default})}>
{ {
formData.ee?<View className="add-address-default-active"><Text className="iconfont icon-a-tick1"/></View> formData.is_default?<View className="add-address-default-active"><Text className="iconfont icon-tick"/></View>
:<View className="add-address-default-noactive"></View> :<View className="add-address-default-noactive"></View>
} }
</View> </View>
</View> </View>
<Button hoverClass="none" className="add-address-save" onClick={handleSave}></Button> <Button style={{"background": hozon?'#007aff':''}} hoverClass="none" className="add-address-save" onClick={handleSave}></Button>
</View> </View>
) )
} }