From 14216d3b0a236f5ed910d542fa617ac8b882866f Mon Sep 17 00:00:00 2001 From: li tong bao <2903733959@qq.com> Date: Tue, 24 May 2022 19:16:30 +0800 Subject: [PATCH] =?UTF-8?q?--=E6=88=91=E7=9A=84=E9=A1=B5=E9=9D=A2=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E6=96=B0=E7=89=88=E6=9C=AC=20--=E7=A0=81=E5=8D=95?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/company.ts | 56 ++++++++++++++ src/api/user.ts | 10 +++ src/api/weightList.ts | 56 ++++++++++++++ src/pages/company/index.tsx | 123 +++++++++++++++++++++++++----- src/pages/user/index.module.scss | 53 ++++++++++++- src/pages/user/index.tsx | 104 +++++++++++++++++++------ src/pages/userEdit/index.scss | 5 +- src/pages/userEdit/index.tsx | 61 +++++++++++---- src/pages/weightList/index.scss | 5 +- src/pages/weightList/index.tsx | 71 ++++++++++++----- src/pages/weightListAdd/index.tsx | 89 ++++++++++++++++----- 11 files changed, 538 insertions(+), 95 deletions(-) create mode 100644 src/api/company.ts create mode 100644 src/api/weightList.ts diff --git a/src/api/company.ts b/src/api/company.ts new file mode 100644 index 0000000..8b72c6d --- /dev/null +++ b/src/api/company.ts @@ -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", + }) +} diff --git a/src/api/user.ts b/src/api/user.ts index c131c2f..283f55c 100644 --- a/src/api/user.ts +++ b/src/api/user.ts @@ -29,3 +29,13 @@ import { useRequest } from "@/use/useHttp" method: "post", }) } + +/** + * 修改用户昵称 + */ + export const realNameUpdateApi = () => { + return useRequest({ + url: `/v1/mall/user`, + method: "put", + }) +} diff --git a/src/api/weightList.ts b/src/api/weightList.ts new file mode 100644 index 0000000..bc31b89 --- /dev/null +++ b/src/api/weightList.ts @@ -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", + }) +} diff --git a/src/pages/company/index.tsx b/src/pages/company/index.tsx index be5e165..0472783 100644 --- a/src/pages/company/index.tsx +++ b/src/pages/company/index.tsx @@ -4,27 +4,91 @@ import FromList from "@/components/FromList" import { Button, Input, Text, Textarea, View } from "@tarojs/components" import Taro, { getCurrentPages, useRouter } from "@tarojs/taro" import { useEffect, useState } from "react" +import { alert, retrieval } from "@/common/common"; +import { companyDetailApi, companyUpdateApi } from "@/api/company" import "./index.scss" export default ()=>{ const [showSiteModal, setShowSiteModal] = useState(false); - const handleSelectSite = ()=>{ 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({ - aa: "", - bb:"", - cc:"", - dd:"" + address_detail: "", + city_id: 0, + company_id: 0, + 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 pages = getCurrentPages(); - const prevPage = pages[pages.length-2]; - Taro.eventCenter.trigger('message:detail', { text: 'test' }) + retrieval(formData, rules).then(async ()=>{ + const result = await saveFetch({ + 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(); } @@ -34,12 +98,34 @@ export default ()=>{ const handleActiveRadio = (index:number)=>{ 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 ( - - - + setFormData({...formData,company_name:ev.detail.value})} value={formData["company_name"]} label="公司名称" placeholder="请输入公司名称"/> + setFormData({...formData,company_long_name:ev.detail.value})} value={formData["company_long_name"]} label="公司全称" placeholder="请输入公司全称"/> + { radioData.map((item,index)=>{ @@ -48,14 +134,15 @@ export default ()=>{ } - - - - + setFormData({...formData,director:ev.detail.value})} value={formData["director"]} label="联系人" placeholder="请输入联系人"/> + setFormData({...formData,phone:ev.detail.value})} value={formData["phone"]} label="联系方式" placeholder="请输入联系方式"/> + + setFormData({...formData,address_detail:ev.detail.value})} value={formData["address_detail"]} label="详细地址" type="textarea" placeholder="请输入详细地址(街道、门牌号等)"/> - -
setShowSiteModal(false)} show={showSiteModal}/> + + {/*
setShowSiteModal(false)} show={showSiteModal}/> */} +
setShowSiteModal(false)} show={showSiteModal}/> ) } diff --git a/src/pages/user/index.module.scss b/src/pages/user/index.module.scss index ee56a5f..7b3acd3 100644 --- a/src/pages/user/index.module.scss +++ b/src/pages/user/index.module.scss @@ -52,6 +52,19 @@ font-size: 44px; font-weight: 700; 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{ font-size: 24px; @@ -78,6 +91,9 @@ right: 0;top: 0; } + .card-main{ + margin: 20px auto 0; + } .card-main-title{ display: flex;justify-content: space-between; align-items: center; @@ -120,10 +136,45 @@ display: flex;align-items: center;justify-content: center; 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{ margin: 131px auto 0; } - .card-main-list-content-item{ display: flex;align-items: center; justify-content: space-between; diff --git a/src/pages/user/index.tsx b/src/pages/user/index.tsx index 4ad2158..0a892c5 100644 --- a/src/pages/user/index.tsx +++ b/src/pages/user/index.tsx @@ -1,13 +1,16 @@ 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 classnames from "classnames"; +import { useSelector } from "@/reducers/hooks"; +import { GetAdminUserInfoApi } from "@/api/user"; export default () => { return (
+
) @@ -17,7 +20,24 @@ export default () => { const Header = memo(() => { let menu = [{ text: "待配布", icon: "icon-daipeibu" }, { text: "待付款", icon: "icon-daifukuan" }, { 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 ( @@ -27,8 +47,14 @@ const Header = memo(() => { - 麦兜 - 131****1132 + + {/* {state.data.user_name} */} + 麦兜 + + 已认证 + + + 佛山市带生纺织品有限公司 @@ -54,7 +80,7 @@ const Header = memo(() => { {item.text} - 99+ + {index==2?"99+":10} ) }) @@ -67,30 +93,62 @@ const Header = memo(() => { ) }) +// 我的资产 +const Assets = () => { + return ( + + 我的资产 + + + + ¥ + 0 + .20 + + 预存款 + + + + 4 + + + 优惠券 + + + + ¥ + 99999 + .-00 + + 授信额度 + + + + ) +}; + // 功能 const Main = memo(() => { let menu = [{ text: "我的收藏", icon: "icon-shoucang" }, { text: "颜色对比", icon: "icon-yanseduibi" }, { text: "分享推广", icon: "icon-fenxiang" }, { text: "团队邀请", icon: "icon-yaoqingtuandui" }] return ( - - - - { - menu.map((item, index) => { - return ( - - - - {item.text} - - - - + + + { + menu.map((item, index) => { + return ( + + + + {item.text} - ) - }) - } - + + + + + ) + }) + } ) diff --git a/src/pages/userEdit/index.scss b/src/pages/userEdit/index.scss index 154525b..56f8f31 100644 --- a/src/pages/userEdit/index.scss +++ b/src/pages/userEdit/index.scss @@ -119,10 +119,13 @@ background-color: white; border: none; outline: none; - border-radius: none; padding: 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{ background: #007aff; color: #ffffff; diff --git a/src/pages/userEdit/index.tsx b/src/pages/userEdit/index.tsx index 4f2932a..4064db7 100644 --- a/src/pages/userEdit/index.tsx +++ b/src/pages/userEdit/index.tsx @@ -1,28 +1,56 @@ -import { goLink } from "@/common/common"; +import { alert, goLink, isEmptyObject, retrieval } from "@/common/common"; import Popup from "@/components/popup"; import { Button, Image, Text, Textarea, View } from "@tarojs/components" 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" 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({ - nickname: "麦兜" + real_name: "麦兜" }); - // 显示popup const [popupShow,setPopupShow] = useState(false); const triggerList = useCallback((key:string)=>{ setPopupShow(true); },[]) - // 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)=>{ goLink(url); @@ -46,7 +74,7 @@ export default ()=>{ 点击编辑头像 - triggerList('nickname')} data={formData} label="昵称" placeholder="请输入" icon=""/> + triggerList('real_name')} data={state.data.user_name} label="昵称" placeholder="请输入" icon=""/> onNavigate("/pages/company/index")} label="公司/组织" placeholder="请输入" icon=""/> onNavigate("/pages/addressManager/index")} label="地址管理" placeholder="添加 / 修改收货地址" icon=""/> onNavigate("/pages/weightList/index")} label="码单管理" placeholder="修改码单抬头 / 客户 / 电话等显示信息" icon=""/> @@ -55,7 +83,7 @@ export default ()=>{ - + ) } @@ -69,8 +97,10 @@ const UserEditList = memo((props:any)=>{ - {props.placeholder} - {/* 请输入 */} + { + props.data?props.data: + {props.placeholder} + } @@ -81,13 +111,16 @@ const UserEditList = memo((props:any)=>{ // popup内容 const PopupContent = memo((props:any)=>{ const [value, setValue] = useState(""); + useEffect(()=>{ + setValue(props.value); + },[props.value]) // popup输入长度 const handleTextareaInput = (ev:any)=>{ setValue(ev.detail.value.slice(0,20)); } // 重置 const handleTextareaReset = ()=>{ - + setValue(""); } return ( props.setPopupShow(false)} title="修改昵称" show={props.show}> @@ -99,7 +132,7 @@ const PopupContent = memo((props:any)=>{ 请设置2-20个字符,由中文、英文、数字、-和_组成 - + diff --git a/src/pages/weightList/index.scss b/src/pages/weightList/index.scss index ba77fb1..cc6af58 100644 --- a/src/pages/weightList/index.scss +++ b/src/pages/weightList/index.scss @@ -21,7 +21,10 @@ margin: 18px auto 0; border: 1px solid #ffffff; } - .weight-list-list:hover{ + .weight-list-list:first-child{ + margin-top: 0; + } + .address-active{ border: 1px solid #68b4ff; box-shadow: 0px 0px 10px 0px rgba(0,122,255,0.27); } diff --git a/src/pages/weightList/index.tsx b/src/pages/weightList/index.tsx index 9d61745..9c67547 100644 --- a/src/pages/weightList/index.tsx +++ b/src/pages/weightList/index.tsx @@ -1,53 +1,84 @@ 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 Taro, { showModal } from "@tarojs/taro" +import { alert } from "@/common/common" const weightListManager = ()=>{ - return( ) } - interface Params{ refresherEnabled?: boolean,//是否开启刷新 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 handleRefresh = ()=>{ + const handleRefresh = async ()=>{ setRefreshState(true); - setTimeout(()=>{ - setRefreshState(false); - },500) + await fetchData(); + setRefreshState(false); } 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 ( - + { - data.length>0? - data.map((item,index)=>{ + // data.length>0? + state?.data?.list?.length>0? + state?.data?.list?.map((item,index)=>{ return( - props.onSelect&&props.onSelect(item,index)} className="weight-list-list"> + props.onSelect&&props.onSelect(item,index)} onLongPress={()=>handleDelete(item)} className={`weight-list-list ${item.is_default&&'address-active'}`}> - XL纺织 - 默认 - {/* 1656488999 */} + {item.title} + { + item.is_default&&默认 + } - **省**市**区**街道****仓库 - 181****9790 + {item.purchaser_name} + {item.phone.replace(item.phone.substring(3,7), "****")} - + @@ -63,6 +94,6 @@ const WeightList = memo((props:Params)=>{ 添加新码单信息 ) -}) +} export default weightListManager; \ No newline at end of file diff --git a/src/pages/weightListAdd/index.tsx b/src/pages/weightListAdd/index.tsx index 8ce3836..19241c7 100644 --- a/src/pages/weightListAdd/index.tsx +++ b/src/pages/weightListAdd/index.tsx @@ -2,48 +2,103 @@ import FromList from "@/components/FromList" import { Button, Input, Text, Textarea, View } from "@tarojs/components" import Taro, { setNavigationBarTitle, useRouter } from "@tarojs/taro" +import {weightAddApi, weightDetailApi,weightEditApi} from "@/api/weightList" import { useEffect, useState } from "react" +import { alert, retrieval } from "@/common/common" import "./index.scss" export default ()=>{ - const {type} = useRouter().params; + const {type,id} = useRouter().params; useEffect(()=>{ if(type=="add"){ setNavigationBarTitle({title:"添加码单信息"}) }else{ + initalFormData(); 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({ - aa: "", - bb:"", - cc:"", - dd:"", - ee: 1 + title: "", + purchaser_name: "", + phone: "", + is_default: false, + id: 0 }) - const handleSave = ()=>{ - Taro.navigateBack(); + const rules = { + 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 ( - - - + setFormData({...formData,title:ev.detail.value})} value={formData["title"]} label="抬头" placeholder="请输入码单显示抬头信息"/> + setFormData({...formData,purchaser_name:ev.detail.value})} value={formData["purchaser_name"]} label="客户" placeholder="请输入码单显示客户名称"/> + setFormData({...formData,phone:ev.detail.value})} value={formData["phone"]} label="联系方式" placeholder="请输入码单显示联系号码"/> 设为默认地址 - + setFormData({...formData ,is_default: !formData.is_default})}> { - formData.ee? + formData.is_default? : } - + ) }