nieyuge 1 月之前
父節點
當前提交
7d8adc8996

+ 1 - 1
.env.development

@@ -1 +1 @@
-VITE_API_URL = https://test-tp-open.piaoquantv.com
+VITE_API_URL = https://testapi.piaoquantv.com

+ 1 - 1
.env.production

@@ -1 +1 @@
-VITE_API_URL = https://tp-open.piaoquantv.com
+VITE_API_URL = https://api.piaoquantv.com

+ 1 - 0
.env.staging

@@ -0,0 +1 @@
+VITE_API_URL = https://preapi.piaoquantv.com

+ 0 - 0
src/App.css


+ 1 - 1
src/App.tsx

@@ -11,7 +11,7 @@ const App: React.FC = () => {
   // TODO: refactor this logic
   if (window.location.pathname === '/') {
     setTimeout(() => {
-      navigate('/cooperationAccount/gzh')
+      navigate('/account/list')
     })
   }
 

+ 17 - 17
src/components/layout/headerbar.tsx

@@ -8,23 +8,23 @@ import { useNavigate } from 'react-router-dom';
 const { Header } = Layout;
 
 const Headerbar = () => {
-	const navigate = useNavigate()
-	const setAlgorithm = useConfigStore(state => state.setAlgorithm)
-	const userInfo = sso.getUserInfo()
+  const navigate = useNavigate()
+  const setAlgorithm = useConfigStore(state => state.setAlgorithm)
+  const userInfo = sso.getUserInfo()
 
-	const logoutHandle = async () => {
-		await logout()
-		message.success('已退出账号')
-		// TODO: 退出后跳转登录页
-		navigate('/login')
-	}
+  const logoutHandle = async () => {
+    await logout()
+    message.success('已退出账号')
+    // TODO: 退出后跳转登录页
+    navigate('/login')
+  }
 
   return (
-    <Header title='票圈内容合作平台' className='bg-[#20214F] !px-1'>
+    <Header title='票圈安全平台' className='bg-[#20214F] !px-1'>
       <div className='text-[#9090a7] flex items-center justify-between h-full px-[20px] '>
         <div className='flex items-center gap-[12px]'>
           <Icon component={LogoIcon} className='text-[40px]' />
-          <span className='text-lg font-bold'>票圈内容合作平台</span>
+          <span className='text-lg font-bold'>票圈安全平台</span>
         </div>
         <div className='flex items-center gap-[30px] cursor-pointer'>
           <Switch 
@@ -33,12 +33,12 @@ const Headerbar = () => {
             defaultChecked={useConfigStore.getState().themeConfig._algorithm[0] !== 'dark'} 
             onChange={(checked) => setAlgorithm(checked ? 'default' : 'dark')} 
           />
-					<Dropdown trigger={['hover']} menu={{items: [{label: (<Button type="primary" onClick={logoutHandle}>退出账号</Button>), key: 'logout'}]}}>
-						<div className='flex items-center gap-[10px] text-xl'>
-							<div>{userInfo.contactName || userInfo.name}</div>
-							<UserOutlined />
-						</div>
-					</Dropdown>
+          <Dropdown trigger={['hover']} menu={{items: [{label: (<Button type="primary" onClick={logoutHandle}>退出账号</Button>), key: 'logout'}]}}>
+            <div className='flex items-center gap-[10px] text-xl'>
+              <div>{userInfo.name}</div>
+              <UserOutlined />
+            </div>
+          </Dropdown>
         </div>
       </div>
     </Header>

+ 4 - 4
src/components/layout/index.tsx

@@ -8,13 +8,13 @@ import Headerbar from './headerbar';
 const PageLayout: React.FC = () => {
   // const {
   //   token: { colorBgContainer },
-	// } = theme.useToken();
+  // } = theme.useToken();
 
   return (
-		<Layout className='w-full min-h-screen flex flex-col'>
-			<Headerbar  />
+    <Layout className='w-full min-h-screen flex flex-col'>
+      <Headerbar  />
       <Layout className='w-full'>
-				<PageSidebar />
+        <PageSidebar />
         <PageContent></PageContent>
       </Layout>
     </Layout>

+ 7 - 7
src/components/layout/sidebar.tsx

@@ -35,7 +35,7 @@ const PageSidebar = (props: {
   const [lastOpenedMenu, setLastOpenedMenu] = useState<string[]>([])
   const location = useLocation()
 
-	const onSwitchMenu = ({ key, keyPath }: { key: string; keyPath: string[] }) => {
+  const onSwitchMenu = ({ key, keyPath }: { key: string; keyPath: string[] }) => {
     if (autoCollapse && keyPath.slice(1)) setLastOpenedMenu(keyPath.slice(1))
     navigate(key)
   }
@@ -44,12 +44,12 @@ const PageSidebar = (props: {
     setLastOpenedMenu(openKeys)
   }
 
-	useEffect(() => {
-		setSelectedKeys([`${location.pathname}`])
-		const lastOpenedMenu = location.pathname.split('/')?.[1]
-		if (lastOpenedMenu) {
-			setLastOpenedMenu([`/${lastOpenedMenu}`])
-		}
+  useEffect(() => {
+    setSelectedKeys([`${location.pathname}`])
+    const lastOpenedMenu = location.pathname.split('/')?.[1]
+    if (lastOpenedMenu) {
+      setLastOpenedMenu([`/${lastOpenedMenu}`])
+    }
     navigate(location.pathname)
   }, [location.pathname])
 

+ 2 - 44
src/http/api.ts

@@ -1,47 +1,5 @@
-/* 登录 */
-
 // 登录
-export const userLogin = `${import.meta.env.VITE_API_URL}/contentPlatform/account/login`
-
-// 获取验证码
-export const sendVerificationCode = `${import.meta.env.VITE_API_URL}/contentPlatform/account/sendMessageVerifyCode`
-
-// 手机号登录
-export const loginPhone = `${import.meta.env.VITE_API_URL}/contentPlatform/account/login`
-
-// 获取用户信息
-// export const getAgencyInfo = `${import.meta.env.VITE_API_URL}/ad/platform/user/getAgencyInfo`
-
-
+export const userLogin = `${import.meta.env.VITE_API_URL}/risk-control/user/login`
 
 /* 公众号管理 */
-export const accountGetContentType = `${import.meta.env.VITE_API_URL}/contentPlatform/cooperateAccount/gzh/getContentType`
-export const accountGetAuthQrCode = `${import.meta.env.VITE_API_URL}/contentPlatform/cooperateAccount/gzh/getAuthQrCode`
-export const accountGetAuthResult = `${import.meta.env.VITE_API_URL}/contentPlatform/cooperateAccount/gzh/getAuthResult`
-export const accountList = `${import.meta.env.VITE_API_URL}/contentPlatform/cooperateAccount/gzh/list`
-export const accountSave = `${import.meta.env.VITE_API_URL}/contentPlatform/cooperateAccount/gzh/save`
-export const accountDelete = `${import.meta.env.VITE_API_URL}/contentPlatform/cooperateAccount/gzh/delete`
-
-
-/* 内容管理 */
-export const getGzhAccountOptionsApi = `${import.meta.env.VITE_API_URL}/contentPlatform/cooperateAccount/gzh/accountList`
-export const getGzhContentTypeApi = `${import.meta.env.VITE_API_URL}/contentPlatform/cooperateAccount/gzh/getContentType`
-export const getGzhPlanListApi = `${import.meta.env.VITE_API_URL}/contentPlatform/plan/gzh/list`
-export const saveGzhPlanApi = `${import.meta.env.VITE_API_URL}/contentPlatform/plan/gzh/save`
-export const deleteGzhPlanApi = `${import.meta.env.VITE_API_URL}/contentPlatform/plan/gzh/delete`
-export const getQwPlanListApi = `${import.meta.env.VITE_API_URL}/contentPlatform/plan/qw/list`
-export const saveQwPlanApi = `${import.meta.env.VITE_API_URL}/contentPlatform/plan/qw/save`
-export const deleteQwPlanApi = `${import.meta.env.VITE_API_URL}/contentPlatform/plan/qw/delete`
-export const getVideoContentCategoryListApi = `${import.meta.env.VITE_API_URL}/contentPlatform/plan/videoContentCategoryList`
-export const getVideoContentCoverFrameListApi = `${import.meta.env.VITE_API_URL}/contentPlatform/plan/videoContentCoverFrameList`
-export const getVideoContentListApi = `${import.meta.env.VITE_API_URL}/contentPlatform/plan/videoContentList`
-export const getShareQrPic = `${import.meta.env.VITE_API_URL}/contentPlatform/plan/qw/getSharePic`
-
-/* 数据统计 */
-export const gzhDataList = `${import.meta.env.VITE_API_URL}/contentPlatform/datastat/gzh`
-export const gzhDataExport = `${import.meta.env.VITE_API_URL}/contentPlatform/datastat/gzh/export`
-export const qwDataList = `${import.meta.env.VITE_API_URL}/contentPlatform/datastat/qw`
-export const qwDataExport = `${import.meta.env.VITE_API_URL}/contentPlatform/datastat/qw/export`
-
-/* 文件上传 */
-export const adFileUpload = `${import.meta.env.VITE_API_URL}/file/upload` // 文件上传
+export const wechatUserInfoPage = `${import.meta.env.VITE_API_URL}/risk-control/work/wechat/user/info/page`

+ 4 - 4
src/http/index.ts

@@ -16,10 +16,10 @@ class Request {
     this.instance = axios.create(config)
 
     this.instance.interceptors.request.use(function(config) {
-			if (!config.headers.token) {
-				const userInfo = sso.getUserInfo()
-				config.headers.token = userInfo.token
-			}
+      if (!config.headers.token) {
+        const userInfo = sso.getUserInfo()
+        config.headers.token = userInfo.token
+      }
 
       return config
     }, function(error) {

+ 14 - 64
src/http/sso.ts

@@ -1,29 +1,21 @@
 import { message } from 'antd'
 import router from '../router/index.tsx'
 import http from './index'
-import {
-  userLogin, sendVerificationCode, loginPhone,
-} from './api.ts'
+import { userLogin } from './api.ts'
 
 type UserInfo = { 
-	channel: string,
-	contactName: string,
-	createTimestamp: number,
-	id: number,
-	identity: number,
-	name: string,
-	telNum: string,
-	token: string
+  name: string,
+  token: string
 }
 
 export function getUserInfo(): UserInfo {
   const activeUser = localStorage.getItem('userInfo')
-  return activeUser ? JSON.parse(activeUser) : {}
+  return activeUser ? JSON.parse(activeUser) : { name: '', token: '' }
 }
 
 export function getAccessToken(): string {
-	const userInfo = getUserInfo()
-	return userInfo.token
+  const userInfo = getUserInfo()
+  return userInfo.token
 }
 
 export function setUserInfo(userInfo: UserInfo): void {
@@ -35,18 +27,16 @@ export function clearUserInfo() {
   localStorage.removeItem('userInfo')
 }
 
-
-
-export function login(account: string, password: string) {
+export async function login(account: string, password: string) {
   return http.post<UserInfo>(userLogin, {
-    telNum: account,
-    password: window.btoa(password)
+    account: account,
+    password: password
   }).then((res: ApiResponse<UserInfo>) => {
     const { code, msg, data } = res
     if (code === 0) {
       message.success('登录成功')
       setUserInfo(data)
-			location.href = '/cooperationAccount/gzh'
+      location.href = '/account/list'
       return true
     }
 
@@ -56,49 +46,11 @@ export function login(account: string, password: string) {
   }).catch(() => {})
 }
 
-export function sendCode(phone: string) {
-  return http.post(sendVerificationCode, {
-    telNum: phone
-  }).then(res => {
-    const { code, msg = '发送失败' } = res
-
-    if (code === 0) {
-      message.success('短信已发送,请注意查收')
-      return true
-    }
-
-    message.error(msg)
-
-    return false
-  }).catch(() => {})
-}
-
-export function loginBySendCode(telNum: string, verifyCode: string) {
-  return http.post(loginPhone, {
-    telNum,
-    verifyCode
-  }).then(res => {
-		const { code, msg, data } = res as { code: number, msg: string, data: UserInfo }
-    if (code === 0 && data) {
-      message.success('登录成功')
-      setUserInfo(data)
-			router.navigate('/cooperationAccount/gzh')
-      return true
-    }
-
-    message.error(msg)
-    return false
-
-	}).catch((err) => {
-		console.log(err)
-	})
-}
-
 export function logout() {
-	message.success('已退出登录')
-	clearUserInfo()
-	router.navigate('/login')
-	return true
+  message.success('已退出登录')
+  clearUserInfo()
+  router.navigate('/login')
+  return true
 }
 
 export default {
@@ -106,7 +58,5 @@ export default {
   setUserInfo,
   clearUserInfo,
   login,
-  sendCode,
-  loginBySendCode,
   logout,
 }

+ 5 - 6
src/router/index.tsx

@@ -40,14 +40,13 @@ export const routes: AdminRouterItem[] = [
   ...await loadRouteModules()
 ]
 
-export default createBrowserRouter([
-  {
+const routerConfig = [{
     path: "/",
     element: <App />,
     children: routes,
-  },
-  {
+}, {
     path: "/login",
     element: <LoginPage />,
-  }
-])
+}]
+const appRouter = createBrowserRouter(routerConfig)
+export default appRouter

+ 30 - 0
src/views/account/account.router.tsx

@@ -0,0 +1,30 @@
+import { TeamOutlined } from '@ant-design/icons'
+import { AdminRouterItem } from "../../router";
+import { Outlet } from "react-router-dom";
+import List from './list';
+
+const demoRoutes: AdminRouterItem[] = [
+  {
+    path: 'account',
+    element: <Outlet />,
+    meta: {
+      label: "账号管理",
+      title: "账号管理",
+      key: "/account",
+      icon: <TeamOutlined />,
+    },
+    children: [
+      {
+        path: 'list',
+        element: <List />,
+        meta: {
+          label: "账号管理",
+          title: "账号管理",
+          key: "/account/list",
+        },
+      },
+    ]
+  }
+]
+
+export default demoRoutes;

+ 75 - 0
src/views/account/list/index.tsx

@@ -0,0 +1,75 @@
+import React from "react";
+import http from '@src/http';
+import { Button, Table, Input } from "antd";
+import { UserAddOutlined } from '@ant-design/icons'
+import { wechatUserInfoPage } from '@src/http/api';
+import type { TableProps } from 'antd';
+
+interface DataType {
+  key: string;
+  name: string;
+  ghId: string;
+}
+
+const Gzh: React.FC = () => {
+	const [loading, setLoading] = React.useState(false)
+	const [tableData, setTableData] = React.useState<DataType[]>([])
+  const columns: TableProps<DataType>['columns'] = [
+    {
+      title: '企微实名',
+      dataIndex: 'name',
+      key: 'name',
+    },
+    {
+      title: '企微主体',
+      dataIndex: 'corpName',
+      key: 'corpName',
+		},
+		{
+			title: '手机号',
+			dataIndex: 'phone',
+			key: 'phone',
+		},
+    {
+      title: '账号状态',
+      dataIndex: 'loginStatus',
+      key: 'loginStatus',
+    },
+    {
+			title: '操作',
+      key: 'action',
+      render: () => (
+				<>
+					<Button type="link" onClick={() => {}}>编辑</Button>
+        </>
+      ),
+    }
+  ]
+
+  return (
+		<>
+			<div className={"text-[20px] font-medium mb-[10px]"}>账号管理</div>
+      <div className={"flex mb-[10px]"}>
+				<div className={"flex-1 flex gap-[10px]"}>
+					<Input
+						className={"!w-[200px]"}
+						allowClear
+						placeholder="请输入手机号"
+					/>
+					<Button type="primary">搜索</Button>
+				</div>
+        <div>
+          <Button type="primary" className={"mr-[10px]"}><UserAddOutlined />添加账号</Button>
+        </div>
+      </div>
+			<Table 
+        columns={columns}
+        dataSource={tableData}
+        rowKey="uuid"
+        loading={loading}
+      />
+    </>
+  )
+}
+
+export default Gzh;

+ 0 - 30
src/views/cooperationAccount/cooperationAccount.router.tsx

@@ -1,30 +0,0 @@
-import { TeamOutlined } from '@ant-design/icons'
-import { AdminRouterItem } from "../../router";
-import { Outlet } from "react-router-dom";
-import GZH from './gzh';
-
-const demoRoutes: AdminRouterItem[] = [
-  {
-    path: 'cooperationAccount',
-    element: <Outlet />,
-		meta: {
-			label: "合作账号管理",
-			title: "合作账号管理",
-			key: "/cooperationAccount",
-			icon: <TeamOutlined />,
-		},
-		children: [
-			{
-				path: 'gzh',
-				element: <GZH />,
-				meta: {
-					label: "公众号管理",
-					title: "公众号管理",
-					key: "/cooperationAccount/gzh",
-				},
-			},
-		]
-  }
-]
-
-export default demoRoutes;

File diff suppressed because it is too large
+ 0 - 273
src/views/cooperationAccount/gzh/index.tsx


+ 14 - 17
src/views/login/login.module.css

@@ -1,9 +1,8 @@
 .loginContainer {
   display: flex;
+	flex-direction: column;
   min-height: 100vh;
   background-color: #e8f0fe;
-  background-image: url('@src/assets/images/login/bg.png');
-  background-size: 100% 100%;
   position: relative;
   overflow: hidden;
   color: #160a19;
@@ -12,19 +11,9 @@
 .leftSection {
   flex: 1;
   display: flex;
+	width: 390px;
+	margin: auto;
   flex-direction: column;
-  justify-content: flex-start;
-  padding-left: 10%;
-}
-
-.logoSection {
-  display: flex;
-  align-items: center;
-  gap: 10px;
-  font-size: 18px;
-  font-weight: 500;
-  letter-spacing: -0.11px;
-  margin: 23px 0 75px;
 }
 
 .platformTitle {
@@ -40,8 +29,9 @@
   position: absolute;
   bottom: -8px;
   left: 0;
-  width: 40px;
-  height: 8px;
+  width: 70px;
+  height: 5px;
+	border-radius: 4px;
   background-color: #1890FF;
 }
 
@@ -50,7 +40,7 @@
   display: flex;
   justify-content: center;
   align-items: center;
-  padding: 2rem;
+	margin-top: 2em;
 }
 
 .loginBox {
@@ -115,11 +105,18 @@
   background-color: #1890ff;
 }
 
+.decorationTop {
+	flex: 1;
+	display: flex;
+	align-items: center;
+	justify-content: center;
+}
 .decorationBottom {
   position: absolute;
   bottom: 0;
   right: 0;
   width: 100%;
+	height: 70px;
 	text-align: center;
 	font-size: 12px;
 }

+ 129 - 201
src/views/login/login.tsx

@@ -1,216 +1,144 @@
 import React, { useState } from "react";
 import { Form, Input, Button, Tabs, message } from "antd";
-import Icon from "@ant-design/icons";
 import styles from "./login.module.css";
-import { sendCode, loginBySendCode } from "../../http/sso";
-import LogoIcon from "@src/assets/images/login/logo.svg?react";
+import { login } from "../../http/sso";
 import GonganIcon from "@src/assets/images/login/gongan.png";
 
 const LoginPage: React.FC = () => {
-	const [form] = Form.useForm();
-	const [loading, setLoading] = useState(false);
-	const [sendingCode, setSendingCode] = useState(false);
-	const [countdown, setCountdown] = useState(0);
+  const [form] = Form.useForm();
+  const [loading, setLoading] = useState(false);
 
-	const handlePhoneLogin = async (values: any) => {
-		try {
-			setLoading(true);
-			const { phone, code } = values;
-			const success = await loginBySendCode(phone, code);
-			if (success) {
-				// Redirect will be handled by the login function
-			}
-		} catch (error) {
-			message.error((error as Error)?.message || "登录失败,请重试");
-		} finally {
-			setLoading(false);
-		}
-	};
+  const handlePhoneLogin = async (values: any) => {
+    try {
+      setLoading(true);
+      const { phone, password } = values;
+      const success = await login(phone, password);
+      if (success) {
+        // Redirect will be handled by the login function
+      }
+    } catch (error) {
+      message.error((error as Error)?.message || "登录失败,请重试");
+    } finally {
+      setLoading(false);
+    }
+  };
 
-	const handleSendCode = async () => {
-		try {
-			const phone = form.getFieldValue("phone");
-			if (!phone) {
-				message.error("请输入手机号");
-				return;
-			}
-			if (!/^1[3-9]\d{9}$/.test(phone)) {
-				message.error("请输入正确的手机号");
-				return;
-			}
+  return (
+    <div className={styles.loginContainer}>
+      <div className={styles.decorationTop}>
+        <div>
+          <div className={styles.leftSection}>
+            <div className={styles.platformTitle}>票圈安全平台</div>
+          </div>
+          <div className={styles.rightSection}>
+            <div className={styles.loginBox}>
+              <div className={styles.tabsContainer}>
+                <Tabs
+                  defaultActiveKey="account"
+                  items={[
+                    {
+                      key: "account",
+                      label: "账号登录",
+                      children: (
+                        <Form
+                          form={form}
+                          onFinish={handlePhoneLogin}
+                          layout="vertical"
+                          size="large"
+                        >
+                          <Form.Item
+                            name="phone"
+                            rules={[{
+                              required: true,
+                              message: "请输入手机号",
+                            }, {
+                              pattern: /^1[3-9]\d{9}$/,
+                              message: "请输入正确的手机号",
+                            }]}
+                          >
+                            <Input
+                              variant="borderless"
+                              addonBefore={
+                                <div className={ styles.phonePrefix }>
+                                  +86
+                                </div>
+                              }
+                              placeholder="手机号"
+                              className={
+                                styles.phoneInput + " border-b-[1px] border-b-gray-400"
+                              }
+                            />
+                          </Form.Item>
 
-			setSendingCode(true);
-			const success = await sendCode(phone);
-			if (success) {
-				let count = 60;
-				setCountdown(count);
-				const timer = setInterval(() => {
-					count -= 1;
-					setCountdown(count);
-					if (count <= 0) {
-						clearInterval(timer);
-						setCountdown(0);
-					}
-				}, 1000);
-			}
-		} catch (error) {
-			message.error(
-				(error as Error)?.message || "发送验证码失败,请重试"
-			);
-		} finally {
-			setSendingCode(false);
-		}
-	};
+                          <Form.Item
+                            name="password"
+                            rules={[{
+                                required: true,
+                                message: "请输入密码",
+                            }]}
+                          >
+                            <Input.Password
+                              placeholder="密码"
+                              variant="borderless"
+                              className="!rounded-none !border-b-[1px] !border-b-gray-400"
+                            />
+                          </Form.Item>
 
-	return (
-		<div className={styles.loginContainer}>
-			<div className={styles.leftSection}>
-				<div className={styles.logoSection}>
-					<Icon component={LogoIcon} />
-					<span>票圈风控平台</span>
-				</div>
-				<div className={styles.platformTitle}>票圈风控平台</div>
-			</div>
+                          <Form.Item>
+                            <Button
+                              type="primary"
+                              htmlType="submit"
+                              block
+                              loading={loading}
+                              className={styles.loginBtn}
+                            >
+                              登录
+                            </Button>
+                          </Form.Item>
+                        </Form>
+                      ),
+                    },
+                  ]}
+                />
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
 
-			<div className={styles.rightSection}>
-				<div className={styles.loginBox}>
-					<div className={styles.tabsContainer}>
-						<Tabs
-							defaultActiveKey="phone"
+      <div className={styles.decorationBottom}>
+        {/* You can add a decoration image here */}
+        <p>© 2020 湖南为趣时代网络科技有限公司</p>
+        <p>
+          <span className="link cursor-pointer" onClick={() => window.open('https://rescdn.yishihui.com/agreement/piaoquantvservice.html')}>
+            用户服务协议 
+          </span>
+          <span className="mx-1">|</span>
+          <span className="link cursor-pointer" onClick={() => window.open('https://rescdn.yishihui.com/agreement/piaoquantvagreement.html')}>
+            隐私政策 
+          </span>
+          <span className="mx-1">|</span>
+          <span className="link cursor-pointer" onClick={() => window.open('https://www.piaoquantv.com/upload/help')}>
+            帮助中心 
+          </span>
+          <span className="mx-1">|</span>
+          客服及举报: 0731-85679198、18974809627
+          <span className="mx-1">|</span>
+          举报邮箱:piaoquankefu@new.piaoquantv.com
+        </p>
 
-							items={[
-								{
-									key: "phone",
-									label: "验证码登录",
-									children: (
-										<Form
-											form={form}
-											name="phone_login"
-											onFinish={handlePhoneLogin}
-											layout="vertical"
-											size="large"
-										>
-											<Form.Item
-												name="phone"
-												rules={[
-													{
-														required: true,
-														message: "请输入手机号",
-													},
-													{
-														pattern:
-															/^1[3-9]\d{9}$/,
-														message:
-															"请输入正确的手机号",
-													},
-												]}
-											>
-												<Input
-													variant="borderless"
-													addonBefore={
-														<div
-															className={
-																styles.phonePrefix
-															}
-														>
-															+86
-														</div>
-													}
-													placeholder="手机号"
-													className={
-														styles.phoneInput +
-														" border-b-[1px] border-b-gray-400"
-													}
-												/>
-											</Form.Item>
-
-											<Form.Item
-												name="code"
-												rules={[
-													{
-														required: true,
-														message: "请输入验证码",
-													},
-												]}
-											>
-												<div className={styles.codeRow}>
-													<Input
-														variant="borderless"
-														placeholder="验证码"
-														className={
-															styles.codeInput + ' !rounded-none !border-b-[1px] !border-b-gray-400'
-														}
-													/>
-													<Button
-														onClick={handleSendCode}
-														disabled={countdown > 0}
-														loading={sendingCode}
-														type="text"
-														className={
-															styles.getCodeBtn
-														}
-													>
-														{countdown > 0
-															? `${countdown}s`
-															: "获取验证码"}
-													</Button>
-												</div>
-											</Form.Item>
-
-											<Form.Item>
-												<Button
-													type="primary"
-													htmlType="submit"
-													block
-													loading={loading}
-													className={styles.loginBtn}
-												>
-													登录
-												</Button>
-											</Form.Item>
-										</Form>
-									),
-								},
-								
-							]}
-						/>
-					</div>
-				</div>
-			</div>
-
-			<div className={styles.decorationBottom}>
-				{/* You can add a decoration image here */}
-				<p>© 2020 湖南为趣时代网络科技有限公司</p>
-				<p>
-					<span className="link cursor-pointer" onClick={() => window.open('https://rescdn.yishihui.com/agreement/piaoquantvservice.html')}>
-						用户服务协议 
-					</span>
-					<span className="mx-1">|</span>
-					<span className="link cursor-pointer" onClick={() => window.open('https://rescdn.yishihui.com/agreement/piaoquantvagreement.html')}>
-						隐私政策 
-					</span>
-					<span className="mx-1">|</span>
-					<span className="link cursor-pointer" onClick={() => window.open('https://www.piaoquantv.com/upload/help')}>
-						帮助中心 
-					</span>
-					<span className="mx-1">|</span>
-					客服及举报: 0731-85679198、18974809627
-					<span className="mx-1">|</span>
-					举报邮箱:piaoquankefu@new.piaoquantv.com
-				</p>
-
-				<p className="flex items-center justify-center">
-					<span className="link cursor-pointer" onClick={() => window.open('https://beian.miit.gov.cn/')}>
-						湘ICP备16013107-06号
-					</span>
-					| <img style={{ width: '16px', height: '16px' }} src={GonganIcon} />
-					<span className="link cursor-pointer" onClick={() => window.open('https://beian.mps.gov.cn/#/query/webSearch')}>
-						湘公网安备:43019002001624
-					</span>
-				</p>
-			</div>
-		</div>
-	);
+        <p className="flex items-center justify-center">
+          <span className="link cursor-pointer" onClick={() => window.open('https://beian.miit.gov.cn/')}>
+            湘ICP备16013107-06号
+          </span>
+          | <img style={{ width: '16px', height: '16px' }} src={GonganIcon} />
+          <span className="link cursor-pointer" onClick={() => window.open('https://beian.mps.gov.cn/#/query/webSearch')}>
+            湘公网安备:43019002001624
+          </span>
+        </p>
+      </div>
+    </div>
+  );
 };
 
 export default LoginPage;

+ 3 - 3
vite.config.ts

@@ -27,10 +27,10 @@ export default defineConfig({
     host: '0.0.0.0',
     port: 3305,
     proxy: {
-      '/api': {
-        target: 'https://testadmin.piaoquantv.com/',
+      '/risk-control': {
+        target: 'https://testapi.piaoquantv.com/',
         changeOrigin: true,
-        rewrite: (path) => path.replace(/^\/api/, ''),
+        rewrite: (path) => path.replace(/^\/risk-control/, ''),
       }
     }
   }

+ 3 - 3
vite.test.config.ts

@@ -28,10 +28,10 @@ export default defineConfig({
     host: '0.0.0.0',
     port: 3305,
     proxy: {
-      '/api': {
-        target: 'https://testadmin.piaoquantv.com/',
+      '/risk-control': {
+        target: 'https://testapi.piaoquantv.com/',
         changeOrigin: true,
-        rewrite: (path) => path.replace(/^\/api/, ''),
+        rewrite: (path) => path.replace(/^\/risk-control/, ''),
       }
     }
   }

Some files were not shown because too many files changed in this diff