diff --git a/src/models/Staff.ts b/src/models/Staff.ts index ee38f7c..70a9176 100644 --- a/src/models/Staff.ts +++ b/src/models/Staff.ts @@ -29,3 +29,63 @@ export interface Invoice { modified: boolean; } +type Nullable = T | undefined | null; +export class InvoiceSearchOption{ + invoiceNo: Nullable + invoiceCode: Nullable + invoiceUploadTimeStart: Nullable + invoiceUploadTimeEnd:Nullable + invoiceState:Nullable + invoiceKind:Nullable + invoiceDateStart:Nullable + invoiceDateEnd:Nullable + invoiceNote:Nullable + invoiceUploader:Nullable + pageNum:number + pageSize:number + constructor(){ + this.invoiceNo=null + this.invoiceCode=null + this.invoiceUploadTimeStart=null + this.invoiceUploadTimeEnd=null + this.invoiceState=null + this.invoiceKind=null + this.invoiceDateStart=null + this.invoiceDateEnd=null + this.invoiceNote=null + this.invoiceUploader=null + this.pageNum=0 + this.pageSize=20 + } + clear(){ + this.invoiceNo=null + this.invoiceCode=null + this.invoiceUploadTimeStart=null + this.invoiceUploadTimeEnd=null + this.invoiceState=null + this.invoiceKind=null + this.invoiceDateStart=null + this.invoiceDateEnd=null + this.invoiceNote=null + this.invoiceUploader=null + this.pageNum=0 + this.pageSize=20 + } + private nullOrValue(){ + + } + toString(){ + let res="pageNum="+this.pageNum+"&pageSize="+this.pageSize + res+=(this.invoiceNo===null?"":("&invoiceNo="+this.invoiceNo)); + res+=(this.invoiceCode===null?"":("&invoiceCode="+this.invoiceCode)); + res+=(this.invoiceUploadTimeStart===null?"":("&invoiceUploadTimeStart="+this.invoiceUploadTimeStart?.toDateString())); + res+=(this.invoiceUploadTimeEnd===null?"":("&invoiceUploadTimeEnd="+this.invoiceUploadTimeEnd?.toDateString())); + res+=(this.invoiceState===null?"":("&invoiceState="+this.invoiceState)); + res+=(this.invoiceKind===null?"":("&invoiceKind="+this.invoiceKind)); + res+=(this.invoiceDateStart===null?"":("&invoiceDateStart="+this.invoiceDateStart?.toDateString())); + res+=(this.invoiceDateEnd===null?"":("&invoiceDateEnd="+this.invoiceDateEnd?.toDateString())); + res+=(this.invoiceNote===null?"":("&invoiceNote="+this.invoiceNote)); + res+=(this.invoiceUploader===null?"":("&invoiceUploader="+this.invoiceUploader)); + return res; + } +} \ No newline at end of file diff --git a/src/pages/login/LoginView.tsx b/src/pages/login/LoginView.tsx index 2e93f11..ac68fed 100644 --- a/src/pages/login/LoginView.tsx +++ b/src/pages/login/LoginView.tsx @@ -1,110 +1,178 @@ -import React from 'react'; -import {Button, Form, Input} from 'antd'; -import {LockOutlined, UserOutlined} from '@ant-design/icons'; -import './LoginView.css'; -import loginImg from '../../assets/login.png' +import {Card, Dropdown, List,Menu,Input,Button,Radio,Divider} from "antd"; +import type { MenuProps } from 'antd'; +import { Icon } from '@ant-design/compatible' +import { DownOutlined,UploadOutlined } from '@ant-design/icons'; +import React, {ReactElement, JSXElementConstructor, ReactFragment, ReactPortal,useState } from "react"; +import {Invoice,InvoiceSearchOption} from "../../models/Staff" +import { Space, Typography } from 'antd'; +import {SizeType} from "antd/es/config-provider/SizeContext"; import axios from "axios"; import {baseUrl} from "../../utils/axiosInstance"; -import {useNavigate} from "react-router-dom"; -import {useAppDispatch} from "../../models/hooks"; import {setToken} from "../../models/store"; +import {useAppDispatch} from "../../models/hooks"; +import {useNavigate} from "react-router-dom"; +const {Meta} = Card; +const { Search } = Input; +let invoices:Array -function LoginView() { - const navigate = useNavigate(); - const dispatch = useAppDispatch(); +class InvoiceSearch extends React.Component { + constructor(props: { handleSearchData: any; }) { + super(props); + this.state = { + activatedOption:"发票代码", + searchContent:'请在此输入', + invoiceSearchOption:new InvoiceSearchOption() + } + } + onSearch=(value: string)=>{ + if(this.state.activatedOption === "发票代码") { + this.state.invoiceSearchOption.invoiceCode = value; + } else { + this.state.invoiceSearchOption.invoiceNo = value; + } - const onFinish = (values: any) => { - console.log(values) - const data = new FormData(); - data.append('staffId', values.staffId); - data.append('staffPassword', values.staffPassword); - axios.post(baseUrl + 'login', data).then(function (response) { + const {handleSearchData} = this.props + //const dispatch = useAppDispatch(); + //const navigate = useNavigate(); + console.log(baseUrl + 'invoice/list?'+this.state.invoiceSearchOption.toString()) + axios.get(baseUrl + 'invoice/list?'+this.state.invoiceSearchOption.toString()).then(function (this:any,response) { console.log(response.data) - dispatch(setToken({ - accessToken: response.data.accessToken, - refreshToken: response.data.refreshToken - })) + //console.log(this.state) + handleSearchData(response.data.records) + //dispatch(this.props.handleSearchData(response.data.records)) //models.commit('setStaff', response.data.data) - navigate('/') + //navigate('/') }).catch(function (error) { console.log(error); //showAlert.value = true }); - console.log('Success:', values); - }; - const onFinishFailed = (errorInfo: any) => { - console.log('Failed:', errorInfo); - }; + //console.log(value) + //this.props.handleSearchData(value) + } + render(){ - - return ( -
-
-
- -
-
-
-

登录

-

欢迎回来,请登录以智能财务报销系统

- -
{ + this.state.invoiceSearchOption.clear(); + this.setState({activatedOption:"发票代码"} + )}}> + 发票代码 + ) + }, + { + key:'2', + label:({ + this.state.invoiceSearchOption.clear(); + this.setState({activatedOption:"发票编号"} + )}}> + 发票编号 + ) + } + ]; + return ( +
+ - - } placeholder="用户名"/> - - - - } - placeholder="密码"/> - - - - - - -
-
+ + + {this.state.activatedOption} + + + + } + placeholder={this.state.searchContent} + allowClear + onSearch={(value)=>this.onSearch(value)} + style={{ width: 304 }} + enterButton + /> +
-
- - ); - + ) + } } -export default LoginView; \ No newline at end of file +class InvoiceItem extends React.Component { + constructor(props: { invoice: Invoice }) { + super(props); + this.state = { + invoiceKind: props.invoice.invoiceKind, + invoiceAmount: props.invoice.invoiceAmount, + invoiceDate: props.invoice.invoiceDate, + invoiceNo: props.invoice.invoiceNo, + } + } + + render() { + return ( + } + > +
+
  • {this.state.invoiceNo}
  • +
  • {this.state.invoiceKind}
  • +
  • ¥{this.state.invoiceAmount}
  • +
  • {this.state.invoiceDate}
  • +
    +
    + ) + } +} +class InvoiceListView extends React.Component{ + constructor(props: {}) { + super(props); + this.state={ + isNoOrCode: '1', + invoices: [], + invoiceNo: null, + invoiceCode: null, + pageNum: 0, + pageSize: 20 + } + } + handleInvoice(value: string) { + if(this.state.isNoOrCode == '1') + this.setState( {invoiceNo:value, invoiceCode: null}); + else this.setState({invoiceNo:null, invoiceCode: value}) + } + handleInvoicesContent=(value:Array)=>{ + console.log(value) + this.setState({invoices:value}) + } + + render() { + return ( +
    + // TODO:复杂搜索 + +
    + {this.state.invoices.map((item:Invoice)=> + + )} + +
    +
    + ) + } +} + +export default InvoiceListView \ No newline at end of file diff --git a/src/utils/axiosInstance.ts b/src/utils/axiosInstance.ts index d6211db..5762dd5 100644 --- a/src/utils/axiosInstance.ts +++ b/src/utils/axiosInstance.ts @@ -1,7 +1,7 @@ import axios, {AxiosRequestConfig, AxiosResponse} from "axios"; //export const baseUrl = "https://www.hammer-hfut.tk/api/" -export const baseUrl = "http://127.0.0.1:4523/m1/2116708-0-default/" +export const baseUrl = "https://mock.apifox.cn/m1/2116708-0-ae5ae4e4/" const axiosInstance = axios.create({ baseURL: baseUrl,