Merge branch 'main' of github.com:hainatravel/GHHub

release
Jimmy Liow 2 years ago
commit de5fc707b6

@ -1,6 +1,7 @@
import React from "react"; import React from "react";
import dayjs from "dayjs"; import dayjs from "dayjs";
export const HT_HOST = process.env.NODE_ENV == "production" ? "https://p9axztuwd7x8a7.mycht.cn" : "http://202.103.68.100:890";
export const DATE_FORMAT = "YYYY-MM-DD"; export const DATE_FORMAT = "YYYY-MM-DD";
export const DATE_PRESETS = [ export const DATE_PRESETS = [
{ {
@ -35,4 +36,3 @@ export const DATE_PRESETS = [
// 今年: [dayjs().startOf("year"), moment().endOf("year")], // 今年: [dayjs().startOf("year"), moment().endOf("year")],
// 去年: [dayjs().subtract(1, "year").startOf("year"), moment().subtract(1, "year").endOf("year")], // 去年: [dayjs().subtract(1, "year").startOf("year"), moment().subtract(1, "year").endOf("year")],
]; ];
export const HT_HOST = process.env.NODE_ENV == "production" ? "https://p9axztuwd7x8a7.mycht.cn" : "http://202.103.68.100:890";

@ -168,7 +168,7 @@ function Detail() {
<Form.Item> <Form.Item>
<Upload <Upload
name="ghhfile" name="ghhfile"
accept="image/*" // accept="image/*"
multiple={true} multiple={true}
action={config.HT_HOST + `/service-fileServer/FileUpload?GRI_SN=${GRI_SN}&VEI_SN=${authStore.login.travelAgencyId}&token=${authStore.login.token}`} action={config.HT_HOST + `/service-fileServer/FileUpload?GRI_SN=${GRI_SN}&VEI_SN=${authStore.login.travelAgencyId}&token=${authStore.login.token}`}
fileList={fileList} fileList={fileList}

@ -96,10 +96,10 @@ function Index() {
</Row> </Row>
<Title level={3}></Title> <Title level={3}></Title>
<Row> <Row>
<Col md={24} lg={24} xxl={12}> <Col md={24} lg={24} xxl={24}>
<Table bordered={true} columns={feedbackListColumns} dataSource={toJS(feedbackList)} pagination={{ defaultPageSize: 20, showTotal: showTotal }} /> <Table bordered={true} columns={feedbackListColumns} dataSource={toJS(feedbackList)} pagination={{ defaultPageSize: 20, showTotal: showTotal }} />
</Col> </Col>
<Col md={24} lg={24} xxl={12}></Col> <Col md={24} lg={24} xxl={24}></Col>
</Row> </Row>
</Space> </Space>
); );

@ -35,44 +35,47 @@ function Detail() {
.fetchInvoiceDetail(GMDSN, GSN) .fetchInvoiceDetail(GMDSN, GSN)
.then(json => { .then(json => {
let ZDDetail = json.ZDDetail; let ZDDetail = json.ZDDetail;
let arrLen = ZDDetail.length;
const formData = ZDDetail.map((data, index) => {
if (data.GMD_Dealed == false && arrLen == index + 1) {
//
runInAction(() => {
invoiceStore.invoiceFormData = { info_money: data.GMD_Cost, info_Currency: data.GMD_Currency, info_date: isNotEmpty(data.GMD_PayDate) ? dayjs(data.GMD_PayDate) : "", info_gmdsn: data.GMD_SN };
});
return { info_money: data.GMD_Cost, info_Currency: data.GMD_Currency, info_date: isNotEmpty(data.GMD_PayDate) ? dayjs(data.GMD_PayDate) : "", info_gmdsn: data.GMD_SN };
}
});
if (form) { if (isNotEmpty(ZDDetail)){
form.setFieldsValue(formData[arrLen - 1]); //{'info_money':'111','info_Currency':'THB','info_date':''} let arrLen = ZDDetail.length;
} const formData = ZDDetail.map((data, index) => {
if (data.GMD_Dealed == false && arrLen == index + 1) {
//
runInAction(() => {
invoiceStore.invoiceFormData = { info_money: data.GMD_Cost, info_Currency: data.GMD_Currency, info_date: isNotEmpty(data.GMD_PayDate) ? dayjs(data.GMD_PayDate) : "", info_gmdsn: data.GMD_SN };
});
return { info_money: data.GMD_Cost, info_Currency: data.GMD_Currency, info_date: isNotEmpty(data.GMD_PayDate) ? dayjs(data.GMD_PayDate) : "", info_gmdsn: data.GMD_SN };
}
});
// if (form) {
let arrPicList = ZDDetail.map((data, index) => { form.setFieldsValue(formData[arrLen - 1]); //{'info_money':'111','info_Currency':'THB','info_date':''}
const GMD_Pic = data.GMD_Pic;
let picList = [];
if (isNotEmpty(GMD_Pic)) {
let js_Pic = JSON.parse(GMD_Pic);
picList = js_Pic.map((picData, pic_Index) => {
return {
uid: -pic_Index, //
name: "",
status: "done",
url: picData.url,
};
});
}
if (data.GMD_Dealed == false && arrLen == index + 1) {
runInAction(() => {
invoiceStore.invoicekImages = picList;
});
} }
return picList;
}); //
setInvoicePicList(arrPicList); let arrPicList = ZDDetail.map((data, index) => {
const GMD_Pic = data.GMD_Pic;
let picList = [];
if (isNotEmpty(GMD_Pic)) {
let js_Pic = JSON.parse(GMD_Pic);
picList = js_Pic.map((picData, pic_Index) => {
return {
uid: -pic_Index, //
name: "",
status: "done",
url: picData.url,
};
});
}
if (data.GMD_Dealed == false && arrLen == index + 1) {
runInAction(() => {
invoiceStore.invoicekImages = picList;
});
}
return picList;
});
setInvoicePicList(arrPicList);
}
}) })
.catch(ex => { .catch(ex => {
notification.error({ notification.error({
@ -181,113 +184,122 @@ function Detail() {
// //
function bindSubmitForm() { function bindSubmitForm() {
let submitForm = invoiceZDDetail.map((data, index) => { if (isNotEmpty(invoiceZDDetail)){
if (data.GMD_Dealed) { let submitForm = invoiceZDDetail.map((data, index) => {
// if (data.GMD_Dealed) {
return ( //
<Row key={data.GMD_SN} gutter={16} style={{ backgroundColor: "#f6f7f9", width: "100%", padding: "20px 40px" }}> return (
<Col span={4}></Col> <Row key={data.GMD_SN} gutter={16} style={{ backgroundColor: "#f6f7f9", width: "100%", padding: "20px 40px" }}>
<Col span={18}> <Col span={4}></Col>
<Descriptions column={4} title={"Invoice " + index + 1}> <Col span={18}>
<Descriptions.Item span={4}> <Descriptions column={4} title={"Invoice " + index + 1}>
<Upload <Descriptions.Item span={4}>
name="ghhfile" <Upload
accept="image/*" name="ghhfile"
multiple={true} // accept="image/*"
action={config.HT_HOST + `/service-fileServer/FileUpload?GRI_SN=${GSN}&VEI_SN=${authStore.login.travelAgencyId}&FilePathName=invoice&token=${authStore.login.token}`} multiple={true}
fileList={invoicePicList[index]} action={config.HT_HOST + `/service-fileServer/FileUpload?GRI_SN=${GSN}&VEI_SN=${authStore.login.travelAgencyId}&FilePathName=invoice&token=${authStore.login.token}`}
listType="picture-card"></Upload> fileList={invoicePicList[index]}
</Descriptions.Item> listType="picture-card"></Upload>
<Descriptions.Item label="Amount">{data.GMD_Cost}</Descriptions.Item> </Descriptions.Item>
<Descriptions.Item label="Currency">{data.GMD_Currency}</Descriptions.Item> <Descriptions.Item label="Amount">{data.GMD_Cost}</Descriptions.Item>
<Descriptions.Item label="Due Dat">{data.GMD_PayDate}</Descriptions.Item> <Descriptions.Item label="Currency">{data.GMD_Currency}</Descriptions.Item>
<Descriptions.Item label="Status">{invoiceStore.invoiceStatus(data.FKState)}</Descriptions.Item> <Descriptions.Item label="Due Dat">{data.GMD_PayDate}</Descriptions.Item>
</Descriptions> <Descriptions.Item label="Status">{invoiceStore.invoiceStatus(data.FKState)}</Descriptions.Item>
</Descriptions>
{addButton(index + 1 == invoiceZDDetail.length)} {addButton(index + 1 == invoiceZDDetail.length)}
</Col> </Col>
<Col span={4}></Col> <Col span={4}></Col>
</Row> </Row>
); );
} else { } else {
// //
return ( return (
<Row key={data.GMD_SN} gutter={16} style={{ backgroundColor: "#f6f7f9", width: "100%", padding: "20px 40px" }}> <Row key={data.GMD_SN} gutter={16} style={{ backgroundColor: "#f6f7f9", width: "100%", padding: "20px 40px" }}>
<Col span={4}></Col> <Col span={4}></Col>
<Col span={18}> <Col span={18}>
<Form name="invoice_submit" onFinish={onFinish} labelCol={{ span: 5 }} form={form} style={{ backgroundColor: "#fff", padding: "20px" }}> <Form name="invoice_submit" onFinish={onFinish} labelCol={{ span: 5 }} form={form} style={{ backgroundColor: "#fff", padding: "20px" }}>
<Divider orientation="left">Invoice {index + 1}</Divider> <Divider orientation="left">Invoice {index + 1}</Divider>
<Form.Item> <Form.Item>
<Upload <Upload
name="ghhfile" name="ghhfile"
accept="image/*" multiple={true}
multiple={true} action={config.HT_HOST + `/service-fileServer/FileUpload?GRI_SN=${GSN}&VEI_SN=${authStore.login.travelAgencyId}&FilePathName=invoice&token=${authStore.login.token}`}
action={config.HT_HOST + `/service-fileServer/FileUpload?GRI_SN=${GSN}&VEI_SN=${authStore.login.travelAgencyId}&FilePathName=invoice&token=${authStore.login.token}`} fileList={fileList}
fileList={fileList} listType="picture-card"
listType="picture-card" onChange={handleChange}
onChange={handleChange} onRemove={handRemove}>
onRemove={handRemove}> <div>
<div> <PlusOutlined />
<PlusOutlined /> <div style={{ marginTop: 8 }}>Click to Upload</div>
<div style={{ marginTop: 8 }}>Click to Upload</div> </div>
</div> </Upload>
</Upload> </Form.Item>
</Form.Item> <Divider orientation="left">Details</Divider>
<Divider orientation="left">Details</Divider> <Row gutter={16}>
<Row gutter={16}> <Col span={8}>
<Col span={8}> {" "}
{" "} <Form.Item
<Form.Item name="info_money"
name="info_money" label="Amount"
label="Amount" rules={[
rules={[ {
{ required: true,
required: true, message: "Please input your money!",
message: "Please input your money!", },
}, ]}>
]}> <Input />
<Input /> </Form.Item>
</Form.Item> </Col>
</Col> <Col span={8}>
<Col span={8}> <Form.Item
<Form.Item name="info_Currency"
name="info_Currency" label="Currency"
label="Currency" rules={[
rules={[ {
{ required: true,
required: true, message: "Please select Currency type!",
message: "Please select Currency type!", },
}, ]}>
]}> <Select placeholder="Select Currency type" onChange={onCurrencyChange} options={bindCurrency()}></Select>
<Select placeholder="Select Currency type" onChange={onCurrencyChange} options={bindCurrency()}></Select> </Form.Item>
</Form.Item> </Col>
</Col> <Col span={8}>
<Col span={8}> <Form.Item name="info_date" label="Due Date: ">
<Form.Item name="info_date" label="Due Date: "> <DatePicker />
<DatePicker /> </Form.Item>
</Form.Item> </Col>
</Col> </Row>
</Row> <Form.Item name="info_gmdsn" hidden={true}>
<Form.Item name="info_gmdsn" hidden={true}> <input />
<input /> </Form.Item>
</Form.Item> <Form.Item>
<Form.Item> <Button type="primary" htmlType="submit">
<Button type="primary" htmlType="submit"> Submit
Submit </Button>
</Button> </Form.Item>
</Form.Item> </Form>
<p> </Col>
Our Finance Dept makes payment during the last week in each month. So due date can only the last day of each month. If there's urgent payment, please contact the travel advisor and send invoice <Col span={4}></Col>
separately. </Row>
</p> );
</Form> }
</Col> });
return submitForm;
}else{
return(
<Row gutter={16} style={{ backgroundColor: "#f6f7f9", width: "100%", padding: "20px 40px" }}>
<Col span={4}></Col> <Col span={4}></Col>
<Col span={18}>
{addButton(1==1)}
</Col>
<Col span={4}></Col>
</Row> </Row>
); );
}
}); }
return submitForm;
} }
return ( return (

@ -1,4 +1,4 @@
import { NavLink } from "react-router-dom"; import { NavLink, useNavigate } from "react-router-dom";
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import { observer } from "mobx-react"; import { observer } from "mobx-react";
import { toJS } from "mobx"; import { toJS } from "mobx";
@ -14,6 +14,7 @@ function Index() {
const { authStore, invoiceStore } = useStore(); const { authStore, invoiceStore } = useStore();
const { invoiceList, search_date_start, search_date_end } = invoiceStore; const { invoiceList, search_date_start, search_date_end } = invoiceStore;
const [groupNo, onGroupNoChange] = useState(""); const [groupNo, onGroupNoChange] = useState("");
const navigate = useNavigate();
const { notification } = App.useApp(); const { notification } = App.useApp();
const showTotal = total => `Total ${invoiceList.length} items`; const showTotal = total => `Total ${invoiceList.length} items`;
@ -97,10 +98,15 @@ function Index() {
Search Search
</Button> </Button>
</Col> </Col>
<Col md={24} lg={4} xxl={4}>
<Button icon={<AuditOutlined />} onClick={() => navigate(`/invoice/detail/0/338787`)}>
Misc. Invoice
</Button>
</Col>
</Row> </Row>
<Title level={3}></Title> <Title level={3}></Title>
<Row> <Row>
<Col md={24} lg={24} xxl={12}> <Col md={24} lg={24} xxl={24}>
<Table bordered pagination={{ defaultPageSize: 20, showTotal: showTotal }} columns={invoiceListColumns} dataSource={toJS(invoiceList)} /> <Table bordered pagination={{ defaultPageSize: 20, showTotal: showTotal }} columns={invoiceListColumns} dataSource={toJS(invoiceList)} />
</Col> </Col>
</Row> </Row>

@ -5,8 +5,8 @@ import { toJS } from "mobx";
import { Row, Col, Space, Button, Table, Input, Typography, DatePicker, Radio, Modal, App, Select } from 'antd'; import { Row, Col, Space, Button, Table, Input, Typography, DatePicker, Radio, Modal, App, Select } from 'antd';
import dayjs from "dayjs"; import dayjs from "dayjs";
import { useStore } from '@/stores/StoreContext.js'; import { useStore } from '@/stores/StoreContext.js';
import { formatDate, isEmpty } from "@/utils/commons";
import { DATE_PRESETS } from "@/config"; import { DATE_PRESETS } from "@/config";
import { formatDate, isEmpty } from "@/utils/commons";
const { Title } = Typography; const { Title } = Typography;

Loading…
Cancel
Save