Commit 78a4e998 authored by Aivs's avatar Aivs

feat:接口调试

parent 467f6487
......@@ -67,5 +67,34 @@ export const fetchSignatures = async () => {
// alert(JSON.stringify(response))
return response.data.data;
}
// 获取客户信息
export const getBaseInfoByWxId = async (params:any) => {
const response = await api.get('/user_center/getBaseInfoByWxId', {
params
})
// alert(JSON.stringify(response))
return response.data;
}
// 查找用户信息
export const selectUserBase = async (params:any) => {
const response = await api.get('/user_center/selectUserBase', {
params
})
return response.data;
}
// 关联客户
export const linkData = async (params:any) => {
const response = await api.get('/user_center/linkData', {
params
})
return response.data;
}
// 取消关联客户
export const unlinkData = async (params:any) => {
const response = await api.get('/user_center/unlinkData', {
params
})
return response.data;
}
export default api
p{
.flex p{
margin:0;
padding:0;
}
......@@ -175,6 +175,60 @@ p{
border: 1px solid #D9D9D9;
}
.avatar{
width:60px;
height:60px;
}
\ No newline at end of file
display: block;
width: 56px;
height: 56px;
border-radius: 4px;
}
.search{
padding:10px;
}
.cancel{
font-size: 17px;
font-weight: 400;
color: #467DB9;
line-height: 24px;
margin-left:20px;
}
.searchInt{
width:80% !important;
}
.content{
padding:10px 20px;
}
.customItem{
width: 100%;
height: 204px;
background: #FFFFFF;
box-shadow: 0px 0px 14px 0px rgba(168, 168, 168, 0.3);
border-radius: 6px;
border: 1px solid #D9D9D9;
padding:20px;
margin-bottom:20px;
}
.w100{
width:100%;
align-items: flex-start;
}
.leftItem{
font-size: 14px;
font-weight: 400;
color: #9B9B9B;
line-height: 22px
}
.ant-tabs > .ant-tabs-nav, .ant-tabs > div > .ant-tabs-nav {
padding-left: 20px;
}
.mgt{
margin-top:84px;
}
.customName{
font-size: 24px;
font-weight: 500;
color: #2D3034;
line-height: 34px;
}
.leftItem .customFhone{
font-size: 17px;
margin-bottom:18px;
}
import React, {FC, useEffect, useState} from "react";
import Cookies from "js-cookie";
import {fetchUser} from "../api";
import {fetchUser,getBaseInfoByWxId} from "../api";
import {Spin,Form, Input, Button, Select,Radio,Tag} from "antd";
import { SearchOutlined } from '@ant-design/icons';
import './../css/home.css'
......@@ -114,8 +114,15 @@ const tailLayout = {
const getExternalUserInfo = async () => {
const res = await jsSdk.invoke<{ userId?: string }>('getCurExternalContact', {})
// alert(JSON.stringify(res))
debugger
if (!res || !res.userId) return
let data:any = {wxId:res.userId}
const userInfo = await getBaseInfoByWxId(data)
console.log(userInfo.data.userInfo)
debugger
if(userInfo.data.userInfo){
setCustomInfo({...userInfo.data.userInfo})
}
console.log('外部联系人 ID', res.userId);
debugger
......@@ -172,7 +179,7 @@ const tailLayout = {
<Form {...layout} name="control-hooks" onFinish={onFinish} initialValues={customInfo}>
{!customInfoEdit?(<div className="flex spaceBetween showt">
<span>{customInfo.realName || '-' }</span>
<div className='grad'>{ customInfo.account_level }</div>
<div className='grad'>{ customInfo.account_level || '重要客户' }</div>
</div>): ('')}
{customInfoEdit?(
<Form.Item name="realName" label="客户名称" >
......
import * as React from 'react'
import {useCallback, useState} from 'react'
import {useCallback,useEffect, useState} from 'react'
import {jsSdk} from "../index";
import {Button, Input,Table,Tabs,Space} from "antd";
import {SearchOutlined } from '@ant-design/icons';
import {selectUserBase,linkData,unlinkData} from "../api";
const {TextArea} = Input
const { TabPane } = Tabs;
......@@ -38,33 +40,23 @@ const Actions: React.FC = () => {
title: '操作',
align:'center',
dataIndex: 'action',
render: (text:string, record:any) => (
<Space size="middle">
{record.link?
<Button type="primary" danger onClick={unlink.bind(this,record)}>取消关联</Button>:
<Button type="primary" onClick={link.bind(this,record)}>关联</Button>}
</Space>
),
// render: (text:string, record:any) => (
// <Space size="middle">
// {record.link?
// <Button type="primary" danger onClick={unlink.bind(this,record)}>取消关联</Button>:
// <Button type="primary" onClick={link.bind(this,record)}>关联</Button>}
// </Space>
// ),
}
])
const [listData, setListData] = useState<any>([
const [listQuery, setListQuery] = useState<any>(
{
key: '1',
name: 'John Brown',
avatar: 'https://t7.baidu.com/it/u=1595072465,3644073269&fm=193&f=GIF',
phone: '13323232323',
org:'行知',
link:true
},
{
key: '2',
name: 'John Brown2',
avatar: 'https://t7.baidu.com/it/u=1595072465,3644073269&fm=193&f=GIF',
phone: '13323232323',
org:'行知',
link:false
mobileOrUserName:'',
page:1,
limit:10
}
])
)
const [listData, setListData] = useState<any>([])
const [tabs]=useState<any>(['客户档案','纷享销客','戈友好物','戈友圈'])
// const tabIndex ='0'
const [tabIndex,setTabindex] = useState('0')
......@@ -82,12 +74,31 @@ const Actions: React.FC = () => {
// })
}
//关联
const link = (value:any,e:any)=>{
console.log(e)
const link =async (value:any,index:any)=>{
const res = await jsSdk.invoke<{ userId?: string }>('getCurExternalContact', {})
if (!res || !res.userId) return
let data:any = {wxId:res.userId,userId:value.id}
const linkdata = await linkData(data)
if(linkdata.data==='bind OK'){
let data = listData
data[index].islink = true
setListData([...data])
}
}
//取消关联
const unlink = (value:any,e:any)=>{
console.log(e,value)
const unlink = async (value:any,index:any)=>{
const res = await jsSdk.invoke<{ userId?: string }>('getCurExternalContact', {})
// alert(JSON.stringify(res))
debugger
if (!res || !res.userId) return
let data:any = {wxId:res.userId,userId:value.id}
const linkdata = await unlinkData(data)
console.log(linkdata)
if(linkdata.data==='unlink OK'){
let data = listData
data[index].islink = false
setListData([...data])
}
}
const sendMsg = useCallback(async () => {
if (!msg) alert('消息不能为空')
......@@ -99,19 +110,75 @@ const Actions: React.FC = () => {
}
});
}, [msg])
const getUserBase = async () => {
const res = await jsSdk.invoke<{ userId?: string }>('getCurExternalContact', {})
if (!res || !res.userId) return
let data:any = {...listQuery}
data.wxId=res.userId
const baseItem = await selectUserBase(data)
console.log(baseItem)
if(baseItem.data.data)setListData([...baseItem.data.data])
}
const inputChange=(e:any)=>{
let Query = {...listQuery}
Query.mobileOrUserName=e.target.value
setListQuery(Query)
}
const getInput = (e:any) => {
if (e.key === 'Enter') {
getUserBase()
}
}
useEffect(() => {
getUserBase()
}, [])
return (
<div>
<Tabs defaultActiveKey={tabIndex} onChange={callback.bind(this)} >
<div className="flex search">
<Input className='searchInt' allowClear placeholder="请输入客户信息" prefix={<SearchOutlined />} onChange={inputChange} onKeyDown={getInput}/>
{/* <Button size='small'>取消</Button> */}
<div className="cancel">取消</div>
</div>
<Tabs defaultActiveKey={tabIndex} onChange={callback.bind(this)}>
{
tabs.map((item:any,idx:number)=> <TabPane tab={item} key={idx}>
<Table
columns={columns}
dataSource={listData}
scroll={{ x: 300 }}
bordered
/>
</TabPane>)
tabs.map((item:any,idx:number)=>
<TabPane tab={item} key={idx} >
<div className="content">
{listData.map((list:any,index:number)=>
<div className="customItem">
<div className="flex spaceBetween w100">
<div className="leftItem">
<p className='customName'>{list.realName}</p>
<p className='customFhone'>{list.mobileNumber}</p>
<p className="detail">{list.sex===1?'男':'女'}</p>
<p className="detail">{list.email}</p>
<p className="detail">身份证</p>
<p className="detail">{list.idNumber}</p>
</div>
<div className="rightItem">
{list.avatar?<img src={list.avatar} className='avatar' alt="" />:( <div className="avatar"></div> )}
<div className="mgt">
{list.islink?
<Button type="primary" size='small' danger onClick={unlink.bind(this,list,index)}>取消关联</Button>:
<Button type="primary" size='small' onClick={link.bind(this,list,index)}>关联客户</Button>
}
</div>
</div>
</div>
</div>
)}
</div>
{/* <Table
columns={columns}
dataSource={listData}
scroll={{ x: 300 }}
bordered
/> */}
</TabPane>
)
}
</Tabs>
</div>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment