diff --git a/src/main.jsx b/src/main.jsx
index adbde06..3c49355 100644
--- a/src/main.jsx
+++ b/src/main.jsx
@@ -6,18 +6,18 @@ import AuthApp from '@/views/AuthApp'
import DesktopApp from '@/views/DesktopApp'
import MobileApp from '@/views/MobileApp'
import Standlone from '@/views/Standlone'
-import OrderFollow from '@/views/OrderFollow'
+import OrderFollow from '@/views/orders/Follow'
import ChatHistory from '@/views/ChatHistory'
import SalesManagement from '@/views/SalesManagement'
import DingdingQRCode from '@/views/dingding/QRCode'
import DingdingCallback from '@/views/dingding/Callback'
import DingdingLogout from '@/views/dingding/Logout'
-import AccountProfile from '@/views/AccountProfile'
+import AccountProfile from '@/views/accounts/Profile'
import ErrorPage from '@/components/ErrorPage'
import Conversations from '@/views/Conversations/ChatWindow'
import MobileConversation from '@/views/mobile/Conversation'
import MobileChat from '@/views/mobile/Chat'
-import MobileLogin from '@/views/mobile/Login'
+import DingdingLogin from '@/views/dingding/Login'
import useAuthStore from '@/stores/AuthStore'
import '@/assets/index.css'
@@ -61,10 +61,11 @@ const router = createBrowserRouter([
path: '/p',
element: ,
children: [
- { path: 'dingding/qrcode', element: isMobileApp ? : },
- { path: 'dingding/callback', element: },
+ { path: 'dingding/login', element: },
{ path: 'dingding/logout', element: },
- { path: 'mobile-login', element: },
+ { path: 'dingding/qrcode', element: isMobileApp ? : },
+ { path: 'dingding/callback', element: },
+ { path: 'mobile-login', element: },
],
},
]);
diff --git a/src/views/AuthApp.jsx b/src/views/AuthApp.jsx
index 5d42f6b..60c9896 100644
--- a/src/views/AuthApp.jsx
+++ b/src/views/AuthApp.jsx
@@ -65,7 +65,7 @@ function AuthApp() {
useEffect(() => {
// 除了路由 /p...以外都需要登陆系统
if ((loginUser.userId === -1) && (href.indexOf('/p/') === -1)) {
- navigate('/p/dingding/qrcode')
+ navigate('/p/dingding/login')
}
}, [href])
diff --git a/src/views/Conversations/Components/Input/MediaUpload.jsx b/src/views/Conversations/Components/Input/MediaUpload.jsx
index 04746bc..8cb8f3e 100644
--- a/src/views/Conversations/Components/Input/MediaUpload.jsx
+++ b/src/views/Conversations/Components/Input/MediaUpload.jsx
@@ -20,7 +20,7 @@ const ImageUpload = ({ disabled, invokeUploadFileMessage, invokeSendUploadMessag
const beforeUpload = async (file) => {
const fileTypeSupport = Object.keys(whatsappSupportFileTypes).find((msgType) => whatsappSupportFileTypes[msgType].types.includes(file.type));
if (isEmpty(fileTypeSupport)) {
- appMessage.warning('不支持的粘贴内容');
+ appMessage.warning('不支持的文件格式');
return false;
}
const waFile = whatsappSupportFileTypes[fileTypeSupport];
diff --git a/src/views/Standlone.jsx b/src/views/Standlone.jsx
index 1c554b7..c26304e 100644
--- a/src/views/Standlone.jsx
+++ b/src/views/Standlone.jsx
@@ -24,7 +24,7 @@ function Standlone() {
- 聊天式销售平台
+ 销售平台
diff --git a/src/views/AccountProfile.jsx b/src/views/accounts/Profile.jsx
similarity index 85%
rename from src/views/AccountProfile.jsx
rename to src/views/accounts/Profile.jsx
index c1b18be..dd00f4d 100644
--- a/src/views/AccountProfile.jsx
+++ b/src/views/accounts/Profile.jsx
@@ -5,10 +5,11 @@ import {
import { UserOutlined, BugOutlined } from '@ant-design/icons'
import useAuthStore from '@/stores/AuthStore'
-function AccountProfile() {
+function Profile() {
const { message } = App.useApp()
- const { loginUser, copyUserSession } = useAuthStore()
+ const loginUser = useAuthStore((state) => state.loginUser)
+ const copyUserSession = useAuthStore((state) => state.copyUserSession)
useEffect(() => {
// 测试错误捕获:
@@ -37,4 +38,4 @@ function AccountProfile() {
)
}
-export default AccountProfile
+export default Profile
diff --git a/src/views/dingding/Callback.jsx b/src/views/dingding/Callback.jsx
index 6b2fcdb..15c0741 100644
--- a/src/views/dingding/Callback.jsx
+++ b/src/views/dingding/Callback.jsx
@@ -1,10 +1,8 @@
import useAuthStore from '@/stores/AuthStore'
import { isNotEmpty } from '@/utils/commons'
-import { Flex, Result, Spin, Typography } from 'antd'
+import { Flex, Result, Spin } from 'antd'
import { useEffect } from 'react'
-import { useNavigate, useParams } from 'react-router-dom'
-
-const { Title } = Typography
+import { useNavigate } from 'react-router-dom'
// 钉钉扫码开发文档:https://open.dingtalk.com/document/orgapp/obtain-identity-credentials#title-4up-u8w-5ug
// OAuth 登录授权回调
@@ -13,7 +11,8 @@ function Callback() {
const navigate = useNavigate()
- const { loginStatus, login, logout, setLoginStatus } = useAuthStore()
+ const login = useAuthStore((state) => state.login)
+ const loginStatus = useAuthStore((state) => state.loginStatus)
const urlSearch = new URLSearchParams(location.search)
const authCode = urlSearch.get('authCode')
@@ -42,7 +41,12 @@ function Callback() {
)
} else if (loginStatus === 302) {
- navigate('/m/conversation')
+ const isMobileApp = navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i) !== null
+ if (isMobileApp) {
+ navigate('/m/conversation')
+ } else {
+ navigate('/')
+ }
} else if (loginStatus === 403) {
return (
diff --git a/src/views/mobile/Login.jsx b/src/views/dingding/Login.jsx
similarity index 82%
rename from src/views/mobile/Login.jsx
rename to src/views/dingding/Login.jsx
index 1b1caeb..7280774 100644
--- a/src/views/mobile/Login.jsx
+++ b/src/views/dingding/Login.jsx
@@ -1,6 +1,6 @@
import { Flex, Result, Spin } from 'antd'
-function Chat() {
+function Login() {
window.location = 'https://login.dingtalk.com/oauth2/auth?redirect_uri=https%3A%2F%2Fsales.mycht.cn%2Fp%2Fdingding%2Fcallback&response_type=code&client_id=dingwgdx6emlxr3fcrg8&scope=openid&state=global-saels&prompt=consent'
@@ -11,11 +11,11 @@ function Chat() {
title='欢迎使用'
subTitle='正在跳转到钉钉登录页面'
extra={[
-
+
]}
/>
)
}
-export default Chat
+export default Login
diff --git a/src/views/dingding/Logout.jsx b/src/views/dingding/Logout.jsx
index 73a581d..7c9407b 100644
--- a/src/views/dingding/Logout.jsx
+++ b/src/views/dingding/Logout.jsx
@@ -14,7 +14,7 @@ function Logout() {
useEffect(() => {
logout()
reset();
- navigate('/p/dingding/qrcode')
+ navigate('/p/dingding/login')
}, [])
return (
diff --git a/src/views/dingding/QRCode.jsx b/src/views/dingding/QRCode.jsx
index 929b339..6a6c77e 100644
--- a/src/views/dingding/QRCode.jsx
+++ b/src/views/dingding/QRCode.jsx
@@ -11,7 +11,10 @@ function QRCode() {
const navigate = useNavigate()
- const { loginStatus, loginUser, login, setLoginStatus } = useAuthStore()
+ const loginStatus = useAuthStore((state) => state.loginStatus)
+ const setLoginStatus = useAuthStore((state) => state.setLoginStatus)
+ const loginUser = useAuthStore((state) => state.loginUser)
+ const login = useAuthStore((state) => state.login)
useEffect(() => {
if (loginUser.userId > 0) {
diff --git a/src/views/OrderFollow.jsx b/src/views/orders/Follow.jsx
similarity index 91%
rename from src/views/OrderFollow.jsx
rename to src/views/orders/Follow.jsx
index cc8f368..79dd042 100644
--- a/src/views/OrderFollow.jsx
+++ b/src/views/orders/Follow.jsx
@@ -2,7 +2,7 @@ import { Conditional } from '@/components/Conditional'
import useAuthStore from '@/stores/AuthStore'
import useFormStore from '@/stores/FormStore'
import { useOrderStore, OrderLabelDefaultOptions, OrderStatusDefaultOptions, RemindStateDefaultOptions } from '@/stores/OrderStore'
-import { copy, isNotEmpty } from '@/utils/commons'
+import { copy, isNotEmpty, isEmpty } from '@/utils/commons'
import { InfoCircleTwoTone, MailTwoTone, MessageTwoTone, PhoneTwoTone, WhatsAppOutlined } from '@ant-design/icons'
import {
App, Badge, Button,
@@ -228,7 +228,13 @@ function OrderGroupTable({ formValues }) {
title: '出发日期',
dataIndex: 'COLI_OrderStartDate',
width: 120,
- hidden: false
+ hidden: false,
+ sortDirections: ['ascend', 'descend'],
+ sorter: (a, b, sortOrder) => {
+ const datejsA = isEmpty(a.COLI_OrderStartDate) ? dayjs(0) : new dayjs(a.COLI_OrderStartDate)
+ const datejsB = isEmpty(b.COLI_OrderStartDate) ? dayjs(0) : new dayjs(b.COLI_OrderStartDate)
+ return datejsA.isAfter(datejsB)
+ }
},
{
title: '客人最后一次回复时间',
@@ -249,8 +255,9 @@ function OrderGroupTable({ formValues }) {
const { notification } = App.useApp()
const [loading, setLoading] = useState(false)
- const { orderList, fetchOrderList } = useOrderStore()
- const { loginUser } = useAuthStore()
+ const orderList = useOrderStore((state) => state.orderList)
+ const fetchOrderList = useOrderStore((state) => state.fetchOrderList)
+ const loginUser = useAuthStore((state) => state.loginUser)
useEffect(() => {
let canSearch = true
@@ -360,7 +367,7 @@ function OrderGroupTable({ formValues }) {
)
}
-function OrderFollow() {
+function Follow() {
const [formValues, setFormValues] = useFormStore(useShallow((state) => [state.orderFollowForm, state.setOrderFollowForm]))
const [advanceChecked, toggleAdvance] = useFormStore(useShallow((state) => [state.orderFollowAdvanceChecked, state.setOrderFollowAdvanceChecked]))
@@ -405,4 +412,4 @@ function OrderFollow() {
)
}
-export default OrderFollow
+export default Follow