Merge branch 'dev' of ssh://git.online.zzfzyc.com:10022/mp/EShop into 电子商城测试版v2

This commit is contained in:
czm 2022-06-28 10:02:49 +08:00
commit 9897f085ca
23 changed files with 1781 additions and 1651 deletions

1978
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -37,6 +37,7 @@
"dependencies": {
"@babel/runtime": "^7.7.7",
"@tarojs/components": "3.3.10",
"@tarojs/plugin-framework-react": "^3.4.12",
"@tarojs/react": "3.3.10",
"@tarojs/runtime": "3.3.10",
"@tarojs/taro": "3.3.10",

View File

@ -1,13 +1,47 @@
{
"miniprogramRoot": "./dist",
"miniprogramRoot": "dist/",
"projectname": "EShop",
"description": "电子商城",
"description": "项目配置文件详见文档https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html",
"appid": "wx68d92d7cbf0b6963",
"setting": {
"urlCheck": true,
"es6": false,
"postcss": false,
"minified": false
"minified": false,
"coverView": true,
"lazyloadPlaceholderEnable": false,
"preloadBackgroundData": false,
"autoAudits": false,
"uglifyFileName": false,
"uploadWithSourceMap": true,
"enhance": true,
"useMultiFrameRuntime": true,
"showShadowRootInWxmlPanel": true,
"packNpmManually": false,
"packNpmRelationList": [],
"minifyWXSS": true,
"useStaticServer": true,
"showES6CompileOption": false,
"checkInvalidKey": true,
"compileHotReLoad": true,
"babelSetting": {
"ignore": [],
"disablePlugins": [],
"outputPath": ""
},
"compileType": "miniprogram"
"disableUseStrict": false,
"useCompilerPlugins": false
},
"compileType": "miniprogram",
"libVersion": "2.24.5",
"srcMiniprogramRoot": "dist/",
"packOptions": {
"ignore": [],
"include": []
},
"condition": {},
"editorSetting": {
"tabIndent": "insertSpaces",
"tabSize": 2
}
}

34
src/api/certification.ts Normal file
View File

@ -0,0 +1,34 @@
import { useRequest } from "@/use/useHttp"
/**
*
* @returns
*/
export const certificationDetailApi = () => {
return useRequest({
url: `/v1/mall/company/authentication`,
method: "get",
})
}
/**
*
* @returns
*/
export const certificationSaveApi = () => {
return useRequest({
url: `/v1/mall/company/authentication`,
method: "put",
})
}
/**
*
* @returns
*/
export const certificationTypeListApi = () => {
return useRequest({
url: `/v1/mall/enum/companyAuthenticationType`,
method: "get",
})
}

12
src/api/mine.ts Normal file
View File

@ -0,0 +1,12 @@
import { useRequest } from "@/use/useHttp"
/**
*
* @returns
*/
export const userassets = () => {
return useRequest({
url: `/v1/mall/user/assets`,
method: "get",
})
}

View File

@ -6,7 +6,7 @@
// export const BASE_URL = `http://192.168.1.165:40001/lymarket` // 王霞
// export const BASE_URL = `https://test.zzfzyc.com/lymarket` // 测试环境
// export const BASE_URL = `http://192.168.1.30:40001/lymarket` // 发
// export const BASE_URL = `http://192.168.1.30:50001/lymarket` // 发
// export const BASE_URL = `http://192.168.1.9:40001/lymarket` // 发
// export const BASE_URL = `https://dev.zzfzyc.com/lymarket` // 开发环境
// export const BASE_URL = `https://www.zzfzyc.com/lymarket` // 正式环境
// export const BASE_URL = `http://192.168.1.5:40001/lymarket` // 王霞

View File

@ -9,9 +9,9 @@
font-size: 28px;
font-weight: 400;
color: #000000;
margin-top: 20px;
width: 150px;
width: 200px;
border-right: 1px solid #F0F0F0;
display: flex;align-items: center;
}
.From-list-certification-label-required::before{
content: "*";
@ -19,12 +19,12 @@
font-size: 28px;
}
.From-list-certification-right{
width: 506px;
min-width: 100px;
flex: 1;
font-size: 26px;
font-weight: 400;
}
.From-list-certification-right-meet{
width: 506px;
min-height: 45px;
border-radius: 20px;
box-sizing: border-box;
@ -69,6 +69,8 @@
}
.From-list-certification-right-placeholder{
color: #ababab;
text-overflow: ellipsis;overflow: hidden;white-space: nowrap;
width: 100%;
}
.From-list-certification-right-enter .icon-a-moreback{
font-size: 28px;

View File

@ -14,12 +14,13 @@ interface ListParams{
style?: object, //整行样式
labelStyle?: object, // label样式
contentStyle?: object,
required?: boolean
required?: boolean,
showIcon?: boolean, // 是否显示右边的箭头type=select
}
// 表单列表
const FromList = memo((props:ListParams)=>{
const {type="input",value="",style={},labelStyle={},contentStyle={},required=false} = props;
const {type="input",value="",style={},labelStyle={},contentStyle={},required=false,showIcon=true} = props;
return (
<View style={style} className="From-list-certification">
@ -44,7 +45,9 @@ const FromList = memo((props:ListParams)=>{
{props.placeholder}
</View>
}
<View className="From-list-certification-right-enter"><Text className="iconfont icon-a-moreback"></Text></View>
<View className="From-list-certification-right-enter">
{showIcon&&<Text className="iconfont icon-a-moreback"></Text>}
</View>
</>
}
</View>

View File

@ -55,9 +55,9 @@ export default ()=>{
const rules = {
name: [{
message: "请输入正确收货人姓名",
validator: (value:any, rule:any)=>{ // 自定义验证返回true表示匹配到了(错误)
return value.length>5;
}
// validator: (value:any, rule:any)=>{ // 自定义验证返回true表示匹配到了(错误)
// return value.length>5;
// }
}],
phone: [{
message: "请输入正确的电话号码", regex: /^1[3|5|6|9|2|8|7]\d{9}$/

View File

@ -0,0 +1,22 @@
.select-enterprise-type{
.select-enterprise-type-btn{
color: #ABABAB;
font-size: 28px;
padding: 20px;
display: flex;justify-content: space-between;
border-bottom: 1rpx solid #eaeaea;
}
.select-enterprise-type-content{
padding: 0 20px;
padding-bottom: 120px;
}
.select-enterprise-type-content view{
padding: 20px 0;
font-size: 28px;
display: flex;justify-content: space-between;
}
.select-enterprise-type-content view text:last-child{
color: #007AFF;
font-size: 35px;
}
}

View File

@ -0,0 +1,56 @@
import { Text, View } from "@tarojs/components"
import Popup from "@/components/popup";
import "./SelectEnterpriseType.scss"
import { forwardRef, useEffect, useImperativeHandle, useState } from "react";
import {certificationTypeListApi} from "@/api/certification"
interface Params{
confirm?: (selected:any)=>void, // 确定
}
export default forwardRef((props: Params, ref)=>{
const [modalShow, setModalShow] = useState(false)
// 获取认证信息
const {fetchData, state} = certificationTypeListApi();
useEffect(()=>{
fetchData();
}, [])
const [selected, setSelected] = useState({});
// 确定
const handleSelect = (item)=>{
setSelected(item);
}
// 设置弹窗是否显示
const setShow = (ev)=>{
setModalShow(ev);
}
useImperativeHandle(ref,()=>({
setShow
}))
// 确定
const handleConfirm = ()=>{
props.confirm&&props.confirm(selected);
setModalShow(false);
}
return (
<View className="select-enterprise-type">
<Popup showTitle={false} show={modalShow} onClose={() => setModalShow(false)}>
<View className="select-enterprise-type-btn">
<View onClick={() => setModalShow(false)}></View>
<View onClick={handleConfirm}></View>
</View>
<View className="select-enterprise-type-content">
{
state.data?.list?.map((item,index)=>{
return <View onClick={()=>handleSelect(item)} key={index}>
<Text>{item.name}</Text>
{item.id==(selected as any).id?<Text className="iconfont icon-tick"/>:<Text/>}
</View>
})
}
</View>
</Popup>
</View>
)
})

View File

@ -16,6 +16,7 @@
margin-left: 30px;
padding-top: 40px;
color: #000000;
padding-bottom: 20px;
// border-top: 18px solid #F0F0F0;
}
.certification-upload{
@ -38,6 +39,10 @@
.certification-upload-no{
display: flex;flex-direction: column;align-items: center;
}
.certification-upload image{
position: absolute;width: 100%;height: 100%;
object-fit: cover;border-radius: 30px;
}
.certification-upload-no-icon{
width: 104px;
height: 104px;
@ -56,10 +61,11 @@
}
.certification-button{
position: absolute;bottom: -10px;left: -10px;right: -10px;
background-color: #858A8F;
background-color: rgba(0,0,0,0.65);
display: flex;
height: 86px;
border-radius: 0 0 30px 30px;
z-index: 1;
}
.certification-button view{
flex: 1;
@ -79,6 +85,7 @@
position: fixed;bottom: 0;left: 0;right: 0;
width: 100%;
display: flex;align-items: center;justify-content: center;
z-index: 2;
}
.certification-footer-button{
width: 696px;
@ -90,12 +97,16 @@
box-sizing: border-box;
overflow: hidden;
}
.certification-footer-button view{
.certification-footer-button view,.certification-footer-button navigator{
flex: 1;
display: flex;align-items: center;justify-content: center;
font-size: 32px;
font-weight: 400;
color: #007aff;
border: 0;border-radius: none;
}
.certification-footer-button navigator::after{
border: 0;border-radius: none;
}
.certification-footer-button view:last-child{
color: white;

View File

@ -1,72 +1,79 @@
import FromListCertification from "@/components/FromListCertification"
import { Button, Input, Text, Textarea, View } from "@tarojs/components"
import { Button, Image, Input, NavigationBar, Navigator, 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 { certificationSaveApi, certificationDetailApi } from "@/api/certification"
import { useEffect, useRef, useState } from "react"
import { alert, retrieval } from "@/common/common"
import "./index.scss"
import useUploadCDNImg from "@/use/useUploadImage";
import Message from "@/components/Message"
import { IMG_CND_Prefix } from "@/common/constant";
import SelectEnterpriseType from "./components/SelectEnterpriseType"
import { useSelector } from "@/reducers/hooks";
import useLogin from "@/use/useLogin";
export default () => {
const {type,id} = useRouter().params;
const { getAdminUserInfo } = useLogin();
const { adminUserInfo } = useSelector(state => state.userInfo);
useEffect(() => {
if(type=="add"){
setNavigationBarTitle({title:"添加码单信息"})
}else{
initalFormData();
setNavigationBarTitle({title:"修改码单信息"})
}
}, []);
// 获取编辑码单信息
const {fetchData: getFromData} = weightDetailApi()
// 获取认证信息
const { fetchData: getFromData } = certificationDetailApi()
const initalFormData = async () => {
const detail = await getFromData({id});
const detail = await getFromData();
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,
})
...detail.data ?? {},
legal_person_identity_url: detail?.data?.legal_person_identity_url ?? [],
// business_license_url: "https://test.cdn.zzfzyc.com/mall/827082e888860dd9da10f0fbb0ac3cf023081456.png"
} as any)
}
// 保存
const [formData, setFormData] = useState({
title: "",
purchaser_name: "",
phone: "",
is_default: false,
id: 0
})
authentication_type: 0,
authentication_type_name: "",
business_license_url: "",
legal_person: "",
legal_person_identity: "",
businessLicense: '',
legal_person_identity_url: [],
name: ""
});
const rules = {
title: [{
message: "请输入抬头"
authentication_type: [{
message: "请选择认证类型"
}],
purchaser_name: [{
message: "请输入客户名称"
name: [{
message: "请输入企业名称"
}],
phone: [{
message: "请输入正确的电话号码", regex: /^1[3|5|6|9|2|8|7]\d{9}$/
}]
business_license_url: [{
message: "请上传营业执照"
}],
legal_person: [{
message: "请输入法人名称"
}],
legal_person_identity: [{
message: "请输入正确法人身份证",
regex: /^[1-9]\d{5}(18|19|20|(3\d))\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/
}],
legal_person_identity_url: [{
message: "请上传法人身份证",
validator: (value: any, rule: any) => {
if (!value[0] || !value[1]) {
return true;
}
const {fetchData} = weightAddApi()
const {fetchData: editFetch} = weightEditApi()
return false;
}
}],
}
const { fetchData } = certificationSaveApi()
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
});
const result = await fetchData({ ...formData, authentication_type: 2 })
if (result.success) {
Taro.eventCenter.trigger("weightList:refresh");
// Taro.eventCenter.trigger("weightList:refresh");
getAdminUserInfo();
Taro.navigateBack();
alert.success("保存成功");
} else {
@ -83,51 +90,107 @@ export default ()=>{
retrieval(formData).then(() => setHozon(true)).catch(() => setHozon(false))
}
}, [formData])
// 选择类型弹窗显示
const selectTypeRef = useRef(null)
const handleSelectTypeModalShow = () => {
(selectTypeRef.current as any).setShow(true)
}
// 选择类型确定
const handleSelectTypeConfirm = (item) => {
setFormData({
...formData,
authentication_type: item.id,
authentication_type_name: item.name
});
}
// 上传图片
const { getWxPhoto } = useUploadCDNImg();
const handleUploadImage = async (text: any) => {
let result = await getWxPhoto('mall');
if (text == "business_license_url") {
formData.business_license_url = IMG_CND_Prefix + (result as any).url;
} else {
formData.legal_person_identity_url[text] = IMG_CND_Prefix + (result as any).url as never;
}
setFormData({ ...formData });
}
// 查看图片
const handleViewImage = (event, url) => {
event.stopPropagation();
Taro.previewImage({
current: url,
urls: [url]
})
}
return (
<View className="certification">
<Message text="认证不通过原因xxx请重新认证"/>
{(adminUserInfo as any)?.authentication_status == 3 && <Message text={`认证不通过,原因:${(formData as any).authentication_feedback},请重新认证`} />}
<View className="certification-content">
<View className="certification-title"></View>
<FromListCertification type="select" onInput={(ev:any)=>setFormData({...formData,title:ev.detail.value})}
value={formData["title"]} label="认证类型" placeholder="企业认证"/>
<FromListCertification onInput={(ev:any)=>setFormData({...formData,title:ev.detail.value})} value={formData["title"]} label="企业名称" placeholder="请输入营业执照上的企业名称" required/>
<FromListCertification style={{border: "0"}} onInput={(ev:any)=>setFormData({...formData,title:ev.detail.value})} value={formData["title"]} label="企业营业" placeholder="注册号、统一社会信用代码、组织机构代码" required/>
<View className="certification-upload">
{/* <Text></Text>
{/* <FromListCertification type="select" onClick={handleSelectTypeModalShow} value={(formData as any)?.authentication_type_name} label="认证类型" placeholder="企业认证"/> */}
<SelectEnterpriseType ref={selectTypeRef} confirm={handleSelectTypeConfirm} />
<FromListCertification onInput={(ev: any) => setFormData({ ...formData, name: ev.detail.value })} value={formData["name"]} label="企业名称" placeholder="请输入营业执照上的企业名称" required />
{/* <FromListCertification type="select" style={{border: "0"}}label="企业营业执照" placeholder="注册号、统一社会信用代码、组织机构代码" required showIcon={false}/> */}
<FromListCertification onInput={(ev: any) => setFormData({ ...formData, businessLicense: ev.detail.value })} value={formData["businessLicense"]} style={{ border: "0" }} label="企业营业执照" placeholder="注册号、统一社会信用代码、组织机构代码" required />
<View onClick={() => handleUploadImage("business_license_url")} className="certification-upload">
{(formData as any)?.business_license_url ?
<>
<Text></Text>
<View className="certification-button">
<View></View>
<View onClick={(e) => handleViewImage(e, (formData as any)?.business_license_url)}></View>
<View></View>
</View> */}
</View>
<Image mode="aspectFit" src={(formData as any)?.business_license_url} />
</> :
<View className="certification-upload-no">
<View className="certification-upload-no-icon">+</View>
<View className="certification-upload-no-tips"></View>
<View className="certification-upload-no-tips"></View>
</View>
}
</View>
</View>
<View className="certification-content">
<View className="certification-title"></View>
<FromListCertification onInput={(ev:any)=>setFormData({...formData,title:ev.detail.value})} value={formData["title"]} label="法人代表" placeholder="填写法人名称" required/>
<FromListCertification style={{border: "0"}} onInput={(ev:any)=>setFormData({...formData,title:ev.detail.value})} value={formData["title"]} label="法人身份" placeholder="填写法人代表身份证号" required/>
<View className="certification-upload">
<Text></Text>
<FromListCertification onInput={(ev: any) => setFormData({ ...formData, legal_person: ev.detail.value })} value={formData["legal_person"]} label="法人代表" placeholder="填写法人名称" required />
<FromListCertification style={{ border: "0" }} onInput={(ev: any) => setFormData({ ...formData, legal_person_identity: ev.detail.value })} value={formData["legal_person_identity"]} label="法人身份" placeholder="填写法人代表身份证号" required />
<View onClick={() => handleUploadImage(0)} className="certification-upload">
{(formData as any)?.legal_person_identity_url[0] ?
<>
<Text></Text>
<View className="certification-button">
<View></View>
<View onClick={(e) => handleViewImage(e, (formData as any)?.legal_person_identity_url[0])}></View>
<View></View>
</View>
<Image mode="aspectFit" src={(formData as any)?.legal_person_identity_url[0]} />
</> :
<View className="certification-upload-no">
<View className="certification-upload-no-icon">+</View>
<View className="certification-upload-no-tips"></View>
</View>
<View className="certification-upload">
<Text></Text>
}
</View>
<View onClick={() => handleUploadImage(1)} className="certification-upload">
{(formData as any)?.legal_person_identity_url[1] ?
<>
<Text></Text>
<View className="certification-button">
<View></View>
<View onClick={(e) => handleViewImage(e, (formData as any)?.legal_person_identity_url[1])}></View>
<View></View>
</View>
<Image mode="aspectFit" src={(formData as any)?.legal_person_identity_url[1]} />
</> :
<View className="certification-upload-no">
<View className="certification-upload-no-icon">+</View>
<View className="certification-upload-no-tips"></View>
</View>
}
</View>
</View>
<View className="certification-footer">
<View className="certification-footer-button">
<View></View>
<View></View>
<Navigator openType="navigateBack"></Navigator>
<View onClick={handleSave}>{[3, 4].includes((adminUserInfo as any)?.authentication_status) ? "重新认证" : "提交"}</View>
</View>
</View>
</View>

View File

@ -18,11 +18,12 @@
.credit-used-list-price{
font-size: 28px;
font-weight: 400;
margin-bottom: 20px;
}
.credit-used-list-right{
display: flex;align-items: center;
text-align: right;
}
.credit-used-list-right-price view{
display: flex;align-items: center;
}
.credit-used-list-right text{
font-size: 30px;
@ -36,6 +37,7 @@
.credit-used-list-orderno{
font-size: 20px;
font-weight: 400;
margin-top: 20px;
color: #ababab;
}
.green{

View File

@ -36,11 +36,11 @@ export default ()=>{
</View>
<View className="credit-used-list-right">
<View>
<View className={`credit-used-list-price ${(item as any).amount_received_this_time>0?'red':'green'}`}>
{(item as any).amount_received_this_time>0&&"+"}{formatPriceDiv((item as any).amount_received_this_time)}
<View className="credit-used-list-right-price">
<View className={`credit-used-list-price ${[1,2,3].includes((item as any).type as never)?'red':'green'}`}>
{[1,2,3].includes((item as any).type as never)?"+":"-"}{formatPriceDiv((item as any).amount_received_this_time)}
</View>
<View className="credit-used-list-orderno"></View>
{/* <View className="credit-used-list-orderno">处理中</View> */}
</View>
<Text className="iconfont icon-a-moreback"></Text>
</View>

View File

@ -8,6 +8,7 @@ import ShopCart from '@/components/shopCart'
import { goLink } from '@/common/common'
import styles from './index.module.scss'
import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'
import { useSelector } from "@/reducers/hooks";
import Taro, { Events, useDidShow, usePullDownRefresh } from '@tarojs/taro'
import { GetProductKindListApi, GetProductListApi } from '@/api/material'
import useLogin from '@/use/useLogin'
@ -50,6 +51,7 @@ export default () => {
}
//监听查询条件
useEffect(() => {
if (filtrate.product_kind_id)
getProductList()
}, [filtrate])
@ -98,8 +100,67 @@ export default () => {
return dataLoadingStatus({ list: productData.list, total: productData.total, status: productState.loading })
}, [productData, productState.loading])
useEffect(() => {
getShow()
}, [])
// const [time, setShow] = useState(false)
//拿状态存储的东西判断
const { adminUserInfo } = useSelector(state => state.userInfo);
const getShow = () => {
if (adminUserInfo?.authentication_status === 0 || adminUserInfo?.authentication_status === 1 || adminUserInfo?.authentication_status === 2 || adminUserInfo?.authentication_status === 3) {
//倒计时弹出去认证
const countTime: any = 60
//获取倒计时的变量
var time = parseInt(countTime);
const countDown = setInterval(() => {
if (time == 0) {
Taro.showModal({
title: '提示',
content: '你还未认证,认证后解锁更多功能',
cancelText: '稍后认证',
confirmText: '去认证',
success: function (res) {
if (res.confirm) {
Taro.navigateTo({ url: '/pages/certification/index' })
} else if (res.cancel) {
console.log('用户点击取消')
}
}
})
//清除定时器
clearInterval(countDown);
} else {
time--;
}
}, 1000)
}
}
//检查认证是否认证
const checkShow = () => {
if (adminUserInfo.authentication_status === 0 || adminUserInfo.authentication_status === 1 || adminUserInfo.authentication_status === 2 || adminUserInfo.authentication_status === 3) {
Taro.showModal({
title: '提示',
content: '你还未认证,认证后解锁更多功能',
cancelText: '稍后认证',
confirmText: '去认证',
success: function (res) {
if (res.confirm) {
Taro.navigateTo({ url: '/pages/certification/index' })
} else if (res.cancel) {
console.log('用户点击取消')
}
}
})
} else {
setShowShopCart(!showShopCart)
}
}
return (
<MoveBtn onClick={() => setShowShopCart(!showShopCart)}>
<MoveBtn onClick={() => checkShow()}>
<View className={styles.main}>
<Banner />
<View className={styles.search}>

View File

@ -4,23 +4,31 @@
display: flex;
flex-direction: column;
position: relative;
.header {
background: #68b4ff;
background-size: cover;
height: 560px;
position: relative;
.card-main {
margin-top: 10px;
}
}
.auth-suspension {
position: absolute;
z-index: 1;inset: 0;
z-index: 1;
inset: 0;
}
.header-card {
position: absolute;left: 50%;bottom: -18%;
position: absolute;
left: 50%;
bottom: -18%;
transform: translateX(-50%);
}
.crad {
width: 702px;
background: rgba(255, 255, 255, 0.95);
@ -29,16 +37,24 @@
box-sizing: border-box;
box-shadow: 0px 6px 12px 0px rgba(0, 0, 0, 0.05);
}
.card-info {
display: flex;justify-content: space-between;
position: absolute;top: -15%;left: 0;right: 0;
display: flex;
justify-content: space-between;
position: absolute;
top: -15%;
left: 0;
right: 0;
width: 702px;
padding: 0 30px;
box-sizing: border-box;
}
.arcd-info-left {
display: flex;align-items: flex-end;
display: flex;
align-items: flex-end;
}
.arcd-info-left-portrait {
width: 170px;
height: 170px;
@ -47,14 +63,17 @@
border-radius: 50%;
overflow: hidden;
}
.arcd-info-left-portrait image {
width: 100%;
height: 100%;
object-fit: cover;
}
.arcd-info-left-desc {
margin-left: 24px;
}
.arcd-info-left-nickname {
font-size: 44px;
font-weight: 700;
@ -62,11 +81,13 @@
display: flex;
align-items: center;
}
.arcd-info-left-phone {
font-size: 24px;
font-weight: 400;
color: #707070;
}
.arcd-info-left-phone button {
padding: 0 10px;
height: 42px;
@ -76,38 +97,49 @@
font-size: 22px;
font-weight: 400;
color: #007aff;
display: flex;align-items: center;justify-content: center;
display: flex;
align-items: center;
justify-content: center;
}
.card-info-right {
font-size: 26px;
display: flex;align-items: flex-end;
display: flex;
align-items: flex-end;
}
.setup-icon {
position: relative;
padding-bottom: 10px;
}
.icon-wrapper {
font-size: 60px;
}
.icon-point {
width: 8px;
height: 8px;
border-radius: 50%;
background: #ff0000;
position: absolute;
right: 0;top: 0;
right: 0;
top: 0;
}
.card-main {
margin: 20px auto 0;
}
.card-main-title {
display: flex;justify-content: space-between;
display: flex;
justify-content: space-between;
align-items: center;
border-bottom: 2px solid #dddddd;
padding: 0 5px 15px;
box-sizing: border-box;
}
.card-main-title text {
font-size: 22px;
font-weight: 400;
@ -116,10 +148,12 @@
text-align: right;
width: 150px;
}
.card-main-title-content {
display: grid;
grid-template-columns: repeat(5, 1fr);
}
.card-main-title-content-item {
font-size: 24px;
font-weight: 400;
@ -128,10 +162,12 @@
margin-top: 30px;
position: relative;
}
.card-main-title-content-item Text {
font-size: 56px;
color: #3C3C3C;
}
.card-main-title-content-item-badge {
padding: 0 10px;
height: 32px;
@ -143,8 +179,12 @@
font-size: 18px;
font-weight: 700;
color: #ffffff;
display: flex;align-items: center;justify-content: center;
position: absolute;top: -10px;right: 0;
display: flex;
align-items: center;
justify-content: center;
position: absolute;
top: -10px;
right: 0;
}
.assets-title {
@ -153,26 +193,34 @@
color: #3c3c3c;
margin-bottom: 20px;
}
.assets-content {
display: grid;
grid-template-columns: repeat(3, 1fr);
}
.assets-content>view,.assets-content>navigator{
.assets-content>view,
.assets-content>navigator {
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;
@ -182,26 +230,33 @@
.main-card {
margin: 131px auto 0;
}
.card-feature {
margin-bottom: 50px;
}
.card-main-list-content-item {
display: flex;align-items: center;
display: flex;
align-items: center;
justify-content: space-between;
height: 90px;
}
.card-main-list-content-item-left {
font-size: 26px;
font-weight: 400;
text-align: left;
color: #707070;
display: flex;align-items: center;
display: flex;
align-items: center;
}
.card-main-list-content-item-left text {
margin-right: 35px;
font-size: 56px;
color: #707070;
}
.card-main-list-content-item-right text {
font-size: 30px;
}
@ -209,29 +264,54 @@
.auth {
margin-top: 115px;
}
.auth-top {
display: flex;align-items: center;justify-content: space-between;
display: flex;
align-items: center;
justify-content: space-between;
}
.auth-status {
padding: 0 10px;
height: 30px;
background: #dddddd;
border-radius: 10px 4px 0px 0px;
display: flex;align-items: center;justify-content: center;
display: flex;
align-items: center;
justify-content: center;
font-size: 18px;
font-weight: 400;
color: #707070;
}
.auth-status,
.auth-status-ongoing {
color: #EE7500;
background-color: #FFE6CE;
}
.auth-status,
.auth-status-adopt {
color: #007AFF;
background-color: #CDE5FF;
}
.auth-tips {
font-size: 18px;
font-weight: 400;
color: #007aff;
width: 150px;
text-align: right;
}
.auth-tips,
.auth-tips-adopt {
color: #ABABAB;
}
.auth-tips text {
font-size: 17px;
}
.auth-company {
height: 70px;
width: 100%;
@ -241,15 +321,27 @@
font-size: 26px;
font-weight: 700;
color: #707070;
display: flex;align-items: center;justify-content: center;
display: flex;
align-items: center;
justify-content: center;
}
.auth-company,
.auth-company-adopt {
background: #ecf5ff;
border: 2px solid #cde5ff;
}
.tips-modal {
background: rgba(0, 0, 0, 0.6);
position: fixed;inset: 0;
display: flex;justify-content: center;align-items: center;
position: fixed;
inset: 0;
display: flex;
justify-content: center;
align-items: center;
z-index: 2;
}
.tips-modal-content {
width: 598px;
background: #ffffff;
@ -257,14 +349,17 @@
animation: enlargeK 0.2s linear;
overflow: hidden;
}
@keyframes enlargeK {
0% {
transform: scale(0);
}
100% {
transform: scale(1);
}
}
.tips-modal-title {
font-size: 32px;
font-weight: 700;
@ -273,6 +368,7 @@
margin-bottom: 58px;
padding-top: 48px;
}
.tips-modal-letter {
font-size: 26px;
font-weight: 400;
@ -280,32 +376,41 @@
padding: 0 30px;
line-height: 50px;
}
.tips-modal-letter-text {
text-indent: 60px;
}
.tips-modal-letter-beginn {
font-size: 28px;
font-weight: 400;
color: #000000;
margin-bottom: 25px;
}
.tips-modal-letter-end {
font-size: 26px;
font-weight: 400;
text-align: right;
margin-top: 61px;
}
.tips-modal-button {
display: flex;
border-top: 1px solid #DDDDDD;
margin-top: 45px;
}
.tips-modal-button button, .tips-modal-button view{
display: flex;align-items: center;justify-content: center;
.tips-modal-button button,
.tips-modal-button view {
display: flex;
align-items: center;
justify-content: center;
width: 50%;
height: 90px;
background-color: white;
}
.tips-modal-button button {
font-size: 26px;
font-weight: 400;
@ -313,13 +418,116 @@
border-radius: 0;
border-right: 1px solid #DDDDDD;
}
.tips-modal-button button::after {
border: 0;
border-radius: 0;
}
.tips-modal-button view {
font-size: 26px;
font-weight: 400;
color: #007aff;
}
.auth-box {
width: 614px;
height: 70px;
background: #f6f6f6;
border-radius: 10px;
display: flex;
align-items: center;
justify-content: space-between;
padding-left: 18px;
padding-right: 16px;
.auth-left-box {
display: flex;
align-items: center;
.auth-tag {
width: 86px;
height: 34px;
background: #dddddd;
border-radius: 10px;
font-size: 22px;
font-family: Microsoft YaHei, Microsoft YaHei-Regular;
font-weight: 400;
text-align: center;
color: #707070;
text-align: center;
line-height: 34px;
margin-right: 28px;
}
.auth-tagone {
width: 86px;
height: 34px;
background: #ffe6ce;
border-radius: 10px;
font-size: 22px;
font-family: Microsoft YaHei, Microsoft YaHei-Regular;
font-weight: 400;
text-align: center;
color: #707070;
text-align: center;
line-height: 34px;
margin-right: 28px;
}
.auth-tagtwo {
display: flex;
align-items: center;
overflow: hidden;
padding-left: 10px;
width: 100px;
height: 32px;
background: #cde5ff;
border-radius: 10px;
.iconFont-color {
display: flex;
align-items: center;
font-size: 30px;
margin-right: 3px;
color: #007aff;
}
.auth-font {
font-size: 20px;
font-family: Microsoft YaHei, Microsoft YaHei-Regular;
font-weight: 400;
color: #007aff;
}
}
.tagthree {
display: flex;
align-items: center;
overflow: hidden;
padding-left: 10px;
width: 100px;
height: 32px;
background: rgba(255, 0, 0, 0.10);
border-radius: 10px;
color: #ff0000;
}
.auth-cont {
margin-left: 16px;
font-size: 26px;
font-family: Microsoft YaHei, Microsoft YaHei-Bold;
font-weight: 700;
color: #ababab;
}
.auth-contone {
margin-left: 16px;
font-size: 26px;
font-family: Microsoft YaHei, Microsoft YaHei-Bold;
font-weight: 700;
color: #3c3c3c;
}
}
}
}

View File

@ -6,7 +6,9 @@ import { useSelector } from "@/reducers/hooks";
import { alert, goLink } from "@/common/common";
import useLogin from '@/use/useLogin'
import { BASE_URL } from '@/common/constant'
import Taro from "@tarojs/taro";
import { userassets } from "@/api/mine"
import { formatPriceDiv } from "@/common/fotmat"
export default () => {
// 用户信息
const { getSelfUserInfo } = useLogin();
@ -21,13 +23,16 @@ export default () => {
alert.none("授权失败,请授权后再使用");
});
}
const { fetchData, state } = userassets()
useEffect(() => {
fetchData();
}, [])
return (
<View className={styles.main}>
<Header data={adminUserInfo} />
<Assets />
<Assets data={state} />
<Main />
<Modal data={adminUserInfo}/>
{/* {(adminUserInfo as any)?.authentication_status==1&&<Modal data={adminUserInfo}/>} */}
{/* 测试暂时添加 */}
<View style={{ fontSize: '26rpx', textAlign: 'center' }}>{BASE_URL}</View>
{!adminUserInfo.is_authorize_name && <View onClick={handleAuth} className={styles["auth-suspension"]}></View>}
@ -42,7 +47,7 @@ const Modal = memo((props:any)=>{
}
return (
<>
{!data?.is_authorize_phone&&modalShow&&
{modalShow &&
<View onClick={handleouter} catchMove className={styles['tips-modal']}>
<View className={styles['tips-modal-content']} onClick={e => e.stopPropagation()}>
<View className={styles['tips-modal-title']}></View>
@ -67,7 +72,7 @@ const Header = memo((props:any) => {
const { data } = props;
let menu = [{ text: "待配布", icon: "icon-daipeibu", url: "/pages/orderList/index" }, { text: "待付款", icon: "icon-daifukuan", url: "/pages/orderList/index" },
{ text: "待发货", icon: "icon-daifahuo", url: "/pages/orderList/index" }, { text: "已发货", icon: "icon-yifahuo", url: "/pages/orderList/index" },
{ text: "退款/售后", icon: "icon-a-tuikuanshouhou", url: "/pages/salesAfterList/index" }];
{ text: "退款/售后", icon: "icon-a-tuikuanshouhou", url: "/pages/orderList/index" }];
const { getPhoneNumber } = useLogin();
const mGetPhoneNumber = (ev) => {
if (ev.detail?.code) {
@ -76,6 +81,11 @@ const Header = memo((props:any) => {
alert.none("绑定失败!");
}
}
const navTo = () => {
Taro.navigateTo({
url: '/pages/certification/index'
})
}
return (
<View className={styles.header}>
<View className={`${styles.crad} ${styles['header-card']}`}>
@ -106,17 +116,81 @@ const Header = memo((props:any) => {
</View>
</View>
<View className={styles['auth']}>
<View className={styles['auth-top']}>
<View className={styles['auth-status']}>
<Text>1</Text>
{(data?.authentication_status == 0 || data?.authentication_status == 1) &&
<View className={styles['auth-box']} onClick={() => navTo()}>
<View className={styles['auth-left-box']}>
<View className={styles['auth-tag']}>
</View>
<Navigator hoverClass="none" url="/pages/certification/index" className={styles['auth-tips']}> <Text className="iconfont icon-a-moreback"/></Navigator>
<View className={styles['auth-cont']}>
</View>
<View className={styles['auth-company']}>
</View>
<Text className="iconfont icon-a-moreback"></Text>
</View>
}
{(data?.authentication_status == 3) &&
<View className={styles['auth-box']} onClick={() => navTo()}>
<View className={styles['auth-left-box']}>
<View className={styles['auth-tagthree']}>
</View>
<View className={styles['auth-cont']}>
</View>
</View>
<Text className="iconfont icon-a-moreback"></Text>
</View>
}
{data?.authentication_status == 2 &&
<View className={styles['auth-box']} onClick={() => navTo()}>
<View className={styles['auth-left-box']}>
<View className={styles['auth-tagone']}>
</View>
<View className={styles['auth-contone']}>
{data?.company_name || '暂未加入或注册组织'}
</View>
</View>
<Text className="iconfont icon-a-moreback"></Text>
</View>
}
{data?.authentication_status == 4 &&
<View className={styles['auth-box']} onClick={() => navTo()}>
<View className={styles['auth-left-box']}>
<View className={styles['auth-tagtwo']}>
<View className={styles['iconFont-color']}>
<Text className="iconfont icon-xtianzhangqi"></Text>
</View>
<View className={styles['auth-font']}></View>
</View>
<View className={styles['auth-contone']}>
{data?.company_name}
</View>
</View>
<Text className="iconfont icon-a-moreback"></Text>
</View>
}
{/* <View className={`${styles['auth-top']} ${data?.authentication_status==4&&"auth-tips-adopt"}`}>
<View className={`${styles['auth-status']} ${data?.authentication_status==2&&styles['auth-status-ongoing']} ${data?.authentication_status==4&&styles['auth-status-adopt']}`}>
<Text>1</Text>
{data?.authentication_status==1&&"未认证"}
{data?.authentication_status==2&&"认证中"}
{data?.authentication_status==3&&"认证不通过"}
{data?.authentication_status==4&&"已认证"}
</View>
{data?.authentication_status==1&&<Navigator hoverClass="none" url="/pages/certification/index" className={styles['auth-tips']}> <Text className="iconfont icon-a-moreback"/></Navigator>}
{data?.authentication_status==2&&<Navigator hoverClass="none" url="/pages/certification/index" className={styles['auth-tips']}>1-3 <Text className="iconfont icon-a-moreback"/></Navigator>}
{data?.authentication_status==3&&<Navigator hoverClass="none" url="/pages/certification/index" className={styles['auth-tips']}> <Text className="iconfont icon-a-moreback"/></Navigator>}
{data?.authentication_status==4&&<View className={styles['auth-tips']}> <Text className="iconfont icon-a-moreback"/></View>}
</View> */}
{/* <View className={`${styles['auth-company']} ${data?.authentication_status==4&&"auth-tips-adopt"}`}>
{data?.authentication_status==1&&"暂未加入或注册组织"}
{data?.authentication_status==2&&data?.company_name}
{data?.authentication_status==3&&data?.company_name}
{data?.authentication_status==4&&data?.company_name}
</View> */}
</View>
<View className={styles['card-main']}>
<View className={styles['card-main-title']}>
<View></View>
@ -140,9 +214,9 @@ const Header = memo((props:any) => {
</View>
)
})
// 我的资产
const Assets = () => {
const Assets = (props: any) => {
console.log(props, 'propsprops')
return (
<View className={`${styles.assets} ${styles.crad} ${styles['main-card']}`}>
<View className={`${styles['assets-title']}`}></View>
@ -150,14 +224,14 @@ const Assets = () => {
<Navigator hoverClass="none" url="/pages/depositBeforehand/index">
<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>
<Text className={`${styles['assets-content-item-top-content']}`}>{formatPriceDiv(props.data.data.wallet_money || 0)}</Text>
{/* <Text className={`${styles['assets-content-item-top-after']}`}>{props.wallet_money || 0}</Text> */}
</View>
<Text className={`${styles['assets-content-item-tips']}`}></Text>
</Navigator>
<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-content']}`}>{props.data.data.coupon_count || 0}</Text>
<Text className={`${styles['assets-content-item-top-after']}`}></Text>
</View>
<Text className={`${styles['assets-content-item-tips']}`}></Text>
@ -165,8 +239,8 @@ const Assets = () => {
<Navigator hoverClass="none" url="/pages/creditLine/index">
<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>
<Text className={`${styles['assets-content-item-top-content']}`}>{formatPriceDiv(props.data.data.credit_line || 0)}</Text>
{/* <Text className={`${styles['assets-content-item-top-after']}`}>.-00</Text> */}
</View>
<Text className={`${styles['assets-content-item-tips']}`}></Text>
</Navigator>

View File

@ -65,6 +65,10 @@
font-weight: 400;
color: #707070;
}
.user-edit-content-company,.user-edit-content-company-adopt{
background: #CDF3DF;
color: #07C160;
}
.user-edit-content-company text{
margin-left: 5px;
}

View File

@ -168,13 +168,13 @@ export default ()=>{
</Picker>
</UserEditList>
<UserEditList onClick={() => onNavigate("/pages/certification/index")} label="我的认证" placeholder="待绑定" icon="">
<View className="user-edit-content-company">
<Text className="iconfont "/>
<View className={`user-edit-content-company ${(formData as any)?.authentication_status == 4 && "user-edit-content-company-adopt"}`}>
<Text className="iconfont " /> {(formData as any)?.authentication_status == 4 ? "已认证" : "未认证"}
</View>
</UserEditList>
<UserEditList label="创建人" data={(formData as any)?.founder_user_name} placeholder="完善公司/组织信息" icon=""/>
<UserEditList label="创建人" data={(formData as any)?.founder_user_name} placeholder="完善公司/组织信息" icon="" useIcon="true" />
</View>
<Button hoverClass="none" className="user-edit-logout">退</Button>
{/* <Button hoverClass="none" className="user-edit-logout">退出当前账号</Button> */}
<ModifyModal title="修改昵称" ref={ModifyIcknameEl} value={(formData as any)?.user_name} save={(value) => handleTextareaSave(value, "Ickname")} />
<ModifyModal title="修改名称" ref={ModifyCompanyNameEl} value={(formData as any)?.company_name} save={(value) => handleTextareaSave(value, "companyName")} />
@ -197,7 +197,10 @@ const UserEditList = memo((props:any)=>{
<View className="user-edit-list-right-placeholder">{props.placeholder}</View>
}
</View>
{
!props.useIcon &&
<Text className="iconfont icon-a-moreback"></Text>
}
</View>
</View>
)

View File

@ -41,6 +41,7 @@ export type UserAdminParam = {
is_authorize_name?: false|true,
is_authorize_phone?: false|true,
phone?:string,
authentication_status?:number
}
export type SortCodeParam = {

View File

@ -1231,6 +1231,29 @@
"schema-utils" "^2.6.5"
"source-map" "^0.7.3"
"@prefresh/babel-plugin@^0.4.0":
"integrity" "sha512-fYAWbU1WDSLn108kKY4eDaaeUcnszFqXjgaGKYXNZ5NLulpRTpsrY+Sbfo9q8LDpWrBpqIgzjrwNnvglWI1xNQ=="
"resolved" "https://registry.npmmirror.com/@prefresh/babel-plugin/-/babel-plugin-0.4.3.tgz"
"version" "0.4.3"
"@prefresh/core@^1.3.3":
"integrity" "sha512-s7iNsnyJ3lZEUrYIgmVIB/hKtp4U6mdD91a31Zg7Q8M49O0x2KThrbrMQYraoDDrs4STdFB8Zv6bceUguOoX1A=="
"resolved" "https://registry.npmmirror.com/@prefresh/core/-/core-1.3.4.tgz"
"version" "1.3.4"
"@prefresh/utils@^1.1.2":
"integrity" "sha512-Mb9abhJTOV4yCfkXrMrcgFiFT7MfNOw8sDa+XyZBdq/Ai2p4Zyxqsb3EgHLOEdHpMj6J9aiZ54W8H6FTam1u+A=="
"resolved" "https://registry.npmmirror.com/@prefresh/utils/-/utils-1.1.3.tgz"
"version" "1.1.3"
"@prefresh/webpack@^3.2.3":
"integrity" "sha512-uT+A7ZuA7fuuUPNEde6Gmzr4oFnzreW9xw6iqw01nPpDiv46o6YWq1j0oGCbdffzHl3fBpcgkPuY07vIfmZ9Lg=="
"resolved" "https://registry.npmmirror.com/@prefresh/webpack/-/webpack-3.3.3.tgz"
"version" "3.3.3"
dependencies:
"@prefresh/core" "^1.3.3"
"@prefresh/utils" "^1.1.2"
"@stencil/core@2.4.0":
"integrity" "sha512-gU6+Yyd6O0KrCSS/O6j8KKqmRo+/Dcs2fI0+APCpbAWK+nqhwDISpdnSEfGDCLMoAC08XOZCycBRk2K1VGnEcg=="
"resolved" "https://registry.npmjs.org/@stencil/core/-/core-2.4.0.tgz"
@ -1345,6 +1368,18 @@
"webpack-format-messages" "^2.0.5"
"yauzl" "2.10.0"
"@tarojs/plugin-framework-react@^3.4.12":
"integrity" "sha512-kc03rvuotgQ2q7gYM9rjy7IV1tjT4ZcbdfdVs2e7olpdXcY9d4x1OqF3vYy+FT/f6WXgf/xs7cBa8Btw3J44iQ=="
"resolved" "https://registry.npmmirror.com/@tarojs/plugin-framework-react/-/plugin-framework-react-3.4.12.tgz"
"version" "3.4.12"
dependencies:
"@pmmmwh/react-refresh-webpack-plugin" "0.4.3"
"@prefresh/webpack" "^3.2.3"
"@tarojs/runtime" "3.4.12"
"@tarojs/shared" "3.4.12"
"acorn" "^8.0.4"
"acorn-walk" "^8.0.0"
"@tarojs/plugin-platform-alipay@3.3.10":
"integrity" "sha512-hbsCk++etkRsi/IQNEIY4R94dwqtTSVB/1sBfgbtuzVe0fOSbrlfwFwzJOrE131CnAXmI9sWiCF/MTy0qCKWjA=="
"resolved" "https://registry.npmjs.org/@tarojs/plugin-platform-alipay/-/plugin-platform-alipay-3.3.10.tgz"
@ -1436,6 +1471,16 @@
"lodash-es" "4.17.15"
"reflect-metadata" "^0.1.13"
"@tarojs/runtime@3.4.12":
"integrity" "sha512-4bQIXoiMRQa0xzma4nm4MAmLpPtcZLOalmW/X8WtPjAVqENZ8o3FE2lZMHjhv62HhvyHf+XZWWk/V+VzAhjcGQ=="
"resolved" "https://registry.npmmirror.com/@tarojs/runtime/-/runtime-3.4.12.tgz"
"version" "3.4.12"
dependencies:
"@tarojs/shared" "3.4.12"
"inversify" "5.1.1"
"lodash-es" "4.17.15"
"reflect-metadata" "^0.1.13"
"@tarojs/service@3.3.10":
"integrity" "sha512-r2vcLDFfovVv2kJ1RMPGoH7pgk8kNFMCTDgoWXbZxpddmpbO7Q1QYVP3EDNykgidnMVfw2cKnEkQdyTSsh+lbA=="
"resolved" "https://registry.npmjs.org/@tarojs/service/-/service-3.3.10.tgz"
@ -1455,6 +1500,11 @@
"resolved" "https://registry.npmjs.org/@tarojs/shared/-/shared-3.3.10.tgz"
"version" "3.3.10"
"@tarojs/shared@3.4.12":
"integrity" "sha512-ELpEOA7Uzr5rQujfSmVS+ugTO22ZP8j3vi2AfrwJKg7zit1kZcBnDUIsN6+3Es3Vnp1oXsyQobWrgn30xYt2Ug=="
"resolved" "https://registry.npmmirror.com/@tarojs/shared/-/shared-3.4.12.tgz"
"version" "3.4.12"
"@tarojs/taro-h5@3.3.10":
"integrity" "sha512-hBVr0Ee7rGTD+cuK5ugPUHwbD0L9qOwMKHqMyUzqAb8LS6aYF3aIFDwVbCYx77ZgtpGZFUqXnpDCvnHofWVyTg=="
"resolved" "https://registry.npmjs.org/@tarojs/taro-h5/-/taro-h5-3.3.10.tgz"
@ -2030,9 +2080,9 @@
"version" "6.4.2"
"acorn@^8.0.4":
"integrity" "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ=="
"resolved" "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz"
"version" "8.7.0"
"integrity" "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A=="
"resolved" "https://registry.npmmirror.com/acorn/-/acorn-8.7.1.tgz"
"version" "8.7.1"
"acorn@^8.7.0":
"integrity" "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ=="
@ -3757,7 +3807,7 @@
"dayjs@^1.11.3":
"integrity" "sha512-xxwlswWOlGhzgQ4TKzASQkUhqERI3egRNqgV4ScR8wlANA/A9tZ7miXa44vTTKEq5l7vWoL5G57bG3zA+Kow0A=="
"resolved" "https://registry.npmjs.org/dayjs/-/dayjs-1.11.3.tgz"
"resolved" "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.3.tgz"
"version" "1.11.3"
"debug@^2.2.0", "debug@^2.3.3", "debug@^2.6.0", "debug@^2.6.9", "debug@2.6.9":
@ -8229,6 +8279,11 @@
"source-map" "^0.6.1"
"supports-color" "^6.1.0"
"preact@^10.0.0", "preact@^10.4.0":
"integrity" "sha512-AKGt0BsDSiAYzVS78jZ9qRwuorY2CoSZtf1iOC6gLb/3QyZt+fLT09aYJBjRc/BEcRc4j+j3ggERMdNE43i1LQ=="
"resolved" "https://registry.npmmirror.com/preact/-/preact-10.8.2.tgz"
"version" "10.8.2"
"prelude-ls@~1.1.2":
"integrity" "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ="
"resolved" "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz"