Merge branch 'main' into dev/chat

dev/chat
Lei OT 2 years ago
commit caf653ee51

@ -1,27 +1,41 @@
import { create } from 'zustand' import { create } from 'zustand'
import { devtools } from 'zustand/middleware' import { fetchJSON } from '@/utils/request'
import { fetchJSON, postJSON } from '@/utils/request'
const useAuthStore = create((set, get) => ({ const useAuthStore = create((set, get) => ({
// GLOBAL_SALES_LOGIN_USER // GLOBAL_SALES_LOGIN_USER
// {"userId":"383","username":"廖一军","avatarUrl":"https://static-legacy.dingtalk.com/media/lALPBDDrhXr716HNAoDNAoA_640_640.png","mobile":"+86-18777396951","email":"lyj@hainatravel.com","openId":"iioljiPmZ4RPoOYpkFiSn7IKAiEiE","accountList":[{"OPI_SN":383,"OPI_Code":"LYJ","OPI_NameCN":"廖一军","OPI_DEI_SN":7,"OPI_NameEN":"Jimmy Liow"},{"OPI_SN":609,"OPI_Code":"LYJAH","OPI_NameCN":"廖一军ah","OPI_DEI_SN":28,"OPI_NameEN":"Jimmy Liow"}]} // {"userId":"383","username":"廖一军","avatarUrl":"https://static-legacy.dingtalk.com/media/lALPBDDrhXr716HNAoDNAoA_640_640.png","mobile":"+86-18777396951","email":"lyj@hainatravel.com","openId":"iioljiPmZ4RPoOYpkFiSn7IKAiEiE","accountList":[{"OPI_SN":383,"OPI_Code":"LYJ","OPI_NameCN":"廖一军","OPI_DEI_SN":7,"OPI_NameEN":"Jimmy Liow"},{"OPI_SN":609,"OPI_Code":"LYJAH","OPI_NameCN":"廖一军ah","OPI_DEI_SN":28,"OPI_NameEN":"Jimmy Liow"}]}
loginUser: {}, loginUser: {
userId: -1,
userIdStr: '-1',
username: '',
avatarUrl: '',
mobile: '',
email: '',
openId: '',
accountList: [],
permissionList: [],
},
loginStatus: 0, loginStatus: 0,
authenticate: async (authCode) => { login: async (authCode) => {
const { saveUserSession, setLoginStatus } = get()
const { saveUserSession, updateLoginStatus } = get() setLoginStatus(200)
updateLoginStatus(200)
const json = await fetchJSON(`https://p9axztuwd7x8a7.mycht.cn/dingtalk/dingtalkwork/WhatsAppAuth`, { authCode }) const json = await fetchJSON(`https://p9axztuwd7x8a7.mycht.cn/dingtalk/dingtalkwork/WhatsAppAuth`, { authCode })
if (json.errcode === 0) { if (json.errcode === 0) {
set(() => ({ set(() => ({
loginUser: { loginUser: {
userId: json.result.opisn, userId: json.result.opisn,
userIdStr: json.result?.accountlist.map(acc => {
return acc.OPI_SN
}).join(','),
accountName: json.result.opicode, accountName: json.result.opicode,
username: json.result.nick, username: json.result.nick,
avatarUrl: json.result.avatarUrl, avatarUrl: json.result.avatarUrl,
@ -32,38 +46,43 @@ const useAuthStore = create((set, get) => ({
} }
})) }))
saveUserSession() saveUserSession()
updateLoginStatus(302) setLoginStatus(302)
} else { } else {
updateLoginStatus(403) setLoginStatus(403)
} }
}, },
updateLoginStatus: (code) => { setLoginStatus: (code) => {
set(() => ({ set(() => ({
loginStatus: code loginStatus: code
})) }))
}, },
logout: () => {
window.sessionStorage.clear()
set(() => ({
loginUser: {
userId: -1,
userIdStr: '-1',
username: '',
avatarUrl: '',
mobile: '',
email: '',
openId: '',
accountList: [],
permissionList: [],
}
}))
},
loadUserSession: () => { loadUserSession: () => {
const sessionData = window.sessionStorage.getItem('GLOBAL_SALES_LOGIN_USER') const sessionData = window.sessionStorage.getItem('GLOBAL_SALES_LOGIN_USER')
let userData = {
userId: -1,
username: '',
avatarUrl: '',
mobile: '',
email: '',
openId: '',
accountList: [],
permissionList: [],
}
if (sessionData !== null) { if (sessionData !== null) {
userData = JSON.parse(sessionData) set(() => ({
loginUser: JSON.parse(sessionData)
}))
} }
set(() => ({
loginUser: userData
}))
return userData
}, },
saveUserSession: () => { saveUserSession: () => {

@ -1,18 +1,17 @@
import { useEffect } from 'react';
import { Outlet, Link, useHref, useNavigate, NavLink } from 'react-router-dom'
import { Layout, Menu, ConfigProvider, theme, Empty, Row, Col, Avatar, Dropdown, Space, Typography, App as AntApp } from 'antd'
import { DownOutlined } from '@ant-design/icons'
import ErrorBoundary from '@/components/ErrorBoundary' import ErrorBoundary from '@/components/ErrorBoundary'
import zhLocale from 'antd/locale/zh_CN'
import { useThemeContext } from '@/stores/ThemeContext'
import { useAuthContext } from '@/stores/AuthContext'
import useConversationStore from '@/stores/ConversationStore'
import useAuthStore from '@/stores/AuthStore' import useAuthStore from '@/stores/AuthStore'
import useConversationStore from '@/stores/ConversationStore'
import { useThemeContext } from '@/stores/ThemeContext'
import { DownOutlined } from '@ant-design/icons'
import { App as AntApp, Avatar, Col, ConfigProvider, Dropdown, Empty, Layout, Menu, Row, Space, Typography, theme } from 'antd'
import zhLocale from 'antd/locale/zh_CN'
import 'dayjs/locale/zh-cn' import 'dayjs/locale/zh-cn'
import { useEffect } from 'react'
import { Link, NavLink, Outlet, useHref, useNavigate } from 'react-router-dom'
import 'react-chat-elements/dist/main.css'
import '@/assets/App.css' import '@/assets/App.css'
import AppLogo from '@/assets/logo-gh.png' import AppLogo from '@/assets/logo-gh.png'
import 'react-chat-elements/dist/main.css'
const { Header, Footer, Content } = Layout const { Header, Footer, Content } = Layout
const { Title } = Typography const { Title } = Typography
@ -112,9 +111,6 @@ function AuthApp() {
> >
<a onClick={(e) => e.preventDefault()} style={{ color: colorPrimary }}> <a onClick={(e) => e.preventDefault()} style={{ color: colorPrimary }}>
<Space><Avatar <Space><Avatar
style={{
backgroundColor: colorPrimary,
}}
src={loginUser.avatarUrl}>{loginUser?.username?.substring(1)}</Avatar>{loginUser.username}<DownOutlined /></Space> src={loginUser.avatarUrl}>{loginUser?.username?.substring(1)}</Avatar>{loginUser.username}<DownOutlined /></Space>
</a> </a>
</Dropdown> </Dropdown>

@ -1,8 +1,7 @@
import { Result, Spin, Flex, Typography } from 'antd'
import React, { useEffect, useState } from 'react'
import { useNavigate } from 'react-router-dom'
import useAuthStore from '@/stores/AuthStore' import useAuthStore from '@/stores/AuthStore'
import { fetchJSON } from '@/utils/request' import { Flex, Result, Spin, Typography } from 'antd'
import { useEffect } from 'react'
import { useNavigate } from 'react-router-dom'
const { Title } = Typography const { Title } = Typography
@ -12,11 +11,11 @@ function DingdingQRCode() {
const navigate = useNavigate() const navigate = useNavigate()
const { loginStatus, authenticate } = useAuthStore() const { loginStatus, login, logout, setLoginStatus } = useAuthStore()
useEffect (() => { useEffect (() => {
if (location.search === '?out') { if (location.search === '?out') {
window.sessionStorage.clear() logout()
navigate('/p/dingding/qrcode') navigate('/p/dingding/qrcode')
} }
}, []) }, [])
@ -39,10 +38,10 @@ function DingdingQRCode() {
}, },
(loginResult) => { (loginResult) => {
const { authCode } = loginResult const { authCode } = loginResult
authenticate(authCode) login(authCode)
}, },
(errorMsg) => { (errorMsg) => {
updateLoginStatus(403) setLoginStatus(403)
console.error(`Login Error: ${errorMsg}`) console.error(`Login Error: ${errorMsg}`)
}, },
) )
@ -63,7 +62,7 @@ function DingdingQRCode() {
</Flex> </Flex>
) )
} else if (loginStatus === 302) { } else if (loginStatus === 302) {
navigate('/account/profile') navigate('/')
} else if (loginStatus === 403) { } else if (loginStatus === 403) {
return ( return (
<Flex justify='center' align='center' gap='middle' vertical> <Flex justify='center' align='center' gap='middle' vertical>

@ -206,7 +206,7 @@ function OrderList({ formValues }) {
const [orderData, setOrderData] = useState([]) const [orderData, setOrderData] = useState([])
const [loading, setLoading] = useState(false) const [loading, setLoading] = useState(false)
const { loginUser } = useAuthStore() const { loginUser } = useAuthStore()
let fetchOrderUrl = `${API_HOST}/getwlorder?opisn=${loginUser.userId}&otype=${formValues.type}` let fetchOrderUrl = `${API_HOST}/getwlorder?opisn=${loginUser.userIdStr}&otype=${formValues.type}`
if (formValues.type === 'advance') { if (formValues.type === 'advance') {
const fromDate = formValues.startDateRange[0].format('YYYY-MM-DD') const fromDate = formValues.startDateRange[0].format('YYYY-MM-DD')
@ -219,7 +219,7 @@ function OrderList({ formValues }) {
confirmThruDate = formValues.confirmDateRange[1].format('YYYY-MM-DD') confirmThruDate = formValues.confirmDateRange[1].format('YYYY-MM-DD')
} }
fetchOrderUrl = prepareUrl('https://p9axztuwd7x8a7.mycht.cn/whatsapp_server/getdvancedwlorder') fetchOrderUrl = prepareUrl('https://p9axztuwd7x8a7.mycht.cn/whatsapp_server/getdvancedwlorder')
.append('opisn', loginUser.userId) .append('opisn', loginUser.userIdStr)
.append('startdate', fromDate) .append('startdate', fromDate)
.append('enddate', thruDate) .append('enddate', thruDate)
.append('tag', formValues.orderLabel) .append('tag', formValues.orderLabel)

@ -1,18 +1,26 @@
import { Outlet, Link, useHref, NavLink } from 'react-router-dom'
import { useRef, useEffect, useState } from 'react'
import { Layout, Menu, ConfigProvider, theme, Empty, Row, Col, Dropdown, Space, Typography, Result, App as AntApp } from 'antd'
import { DownOutlined } from "@ant-design/icons";
import '@/assets/App.css' import '@/assets/App.css'
import AppLogo from '@/assets/logo-gh.png' import AppLogo from '@/assets/logo-gh.png'
import useAuthStore from '@/stores/AuthStore'
import { useThemeContext } from '@/stores/ThemeContext' import { useThemeContext } from '@/stores/ThemeContext'
import { isEmpty } from '@/utils/commons' import { App as AntApp, Col, ConfigProvider, Empty, Layout, Row, Typography, theme } from 'antd'
import { NavLink, Outlet, useHref, useNavigate } from 'react-router-dom'
import { useEffect } from 'react'
const { Header, Footer, Content } = Layout const { Header, Footer, Content } = Layout
const { Title } = Typography const { Title } = Typography
function Standlone() { function Standlone() {
const {colorPrimary, borderRadius} = useThemeContext() const {colorPrimary, borderRadius} = useThemeContext()
const { loginUser } = useAuthStore()
const navigate = useNavigate()
const href = useHref()
useEffect(() => {
// /p...
if (loginUser.userId > 0) {
navigate('/');
}
}, [href])
const { const {
token: { colorBgContainer }, token: { colorBgContainer },

Loading…
Cancel
Save