Commit 573c6cc0 authored by 前端-钟卫鹏's avatar 前端-钟卫鹏
parents 357331ae 13afc035
......@@ -114,6 +114,21 @@ const BalancedRoute = {
component: '@/pages/balance/platformSettlement/integral/info',
hideInMenu: true,
},
// 平台结算管理 -> 优惠券管理
{
path: '/memberCenter/balance/platformSettlement/coupon',
name: 'coupon',
icon: 'smile',
component: '@/pages/balance/platformSettlement/couponSettlement',
},
// 平台结算管理 -> 优惠券管理详情页
{
path: '/memberCenter/balance/platformSettlement/coupon/detail',
name: 'couponInfo',
icon: 'smile',
component: '@/pages/balance/platformSettlement/couponSettlement/info',
hideInMenu: true,
},
],
},
// 应付账款管理
......
......@@ -16,6 +16,7 @@ import CommodityRoute from './commodityRoute' // 商品能力路由
// import HandlingRoute from './handlingRoute'; // 加工能力
// import DealAbilityRoute from './dealAbilityRoute'; //
// import marketingRoute from './marketingRoute';
// import BalancedRoute from './balanceRoute';
import asyncRoutes from '../router.config.json';
// import ProcurementRoute from './procurementRoute';
// import { callForBidsRoute } from './procurementRoute/callForBids';
......@@ -23,7 +24,6 @@ import asyncRoutes from '../router.config.json';
// import contracRoute from './contracRoute';
// export const routes = [CommodityRoute, MemberRoute, ShopRoute, ChannelRoute, TranactionRoute, AfterService, PayandSettleRoute, LogisticsRoute, AuthConfigRoute, HandlingRoute, BalaceRoute]
/** process.env.NODE_ENV === "development" */
const isDev = false;
const homeRoute = {
path: `/memberCenter/home`,
......@@ -32,8 +32,8 @@ const homeRoute = {
key: 'home',
component: '@/pages/home',
};
// const routes = isDev ? [ homeRoute, marketingRoute, MemberRoute ] : asyncRoutes;
const routes = isDev ? [ CommodityRoute ] : asyncRoutes;
const routes = isDev ? [ homeRoute ] : asyncRoutes;
// const routes = isDev ? [ CommodityRoute ] : asyncRoutes;
const memberCenterRoute = {
path: '/memberCenter',
......
......@@ -129,7 +129,7 @@ module.exports = {
ssh: JSON.stringify({
user: "root",
// Password optional, prompted if none given
password: "123456",
password: "SsyLingxi@test666",
host: "10.0.0.17",
port: 22,
localRoot: path.resolve('./dist/'),
......
import React, { RefObject, useRef } from 'react';
import React, { RefObject, useRef, useEffect } from 'react';
import { Button, Checkbox } from 'antd';
import { useSelections } from '@umijs/hooks';
import { findTreeKeys } from '@/utils';
......@@ -13,6 +13,7 @@ export interface CheckboxTreeProps {
showSave?;
disabled?: boolean;
actions?: RefObject<any>;
checkIds: any;
}
const CheckboxTree: React.FC<CheckboxTreeProps> = props => {
......@@ -24,6 +25,7 @@ const CheckboxTree: React.FC<CheckboxTreeProps> = props => {
disabled,
showSave,
handleSubmit,
checkIds,
} = props;
const checkedKeys = findTreeKeys(checkedNodes, 'id');
const {
......@@ -49,8 +51,13 @@ const CheckboxTree: React.FC<CheckboxTreeProps> = props => {
selectAll();
}
};
useEffect(() => {
for (let i = 0; i < checkIds?.length; i++) {
selected.push(checkIds[i])
}
}, [checkIds])
const checkChange = (e?) => {
handleChange && handleChange(e);
};
return (
......@@ -60,11 +67,11 @@ const CheckboxTree: React.FC<CheckboxTreeProps> = props => {
<div>{props.title}</div>
<div>
<Button onClick={toggleSelectAll} type="link" disabled={disabled}>
{allSelected ? intl.formatMessage({id: 'components.quxiaoquanxuan'}) : intl.formatMessage({id: 'components.quanxuan'})}
{allSelected ? intl.formatMessage({ id: 'components.quxiaoquanxuan' }) : intl.formatMessage({ id: 'components.quanxuan' })}
</Button>
{showSave && (
<Button onClick={handleSubmit} type="link" disabled={disabled}>
{intl.formatMessage({id: 'components.baocun'})}
{intl.formatMessage({ id: 'components.baocun' })}
</Button>
)}
</div>
......@@ -80,8 +87,9 @@ const CheckboxTree: React.FC<CheckboxTreeProps> = props => {
disabled={disabled}
onClick={() => toggle(v.id)}
checked={isSelected(v.id)}
// checked={checkIds?.indexOf[v?.id] != -1 ? false : true}
>
{v.buttonName}
{v.name}
</Checkbox>
</li>
);
......
import React, { memo, useState, Fragment, forwardRef, useEffect } from 'react'
/*
* @Author: ghua
* @Date: 2021-05-10 11:36:58
* @LastEditors: ghua
* @LastEditTime: 2021-05-11 10:16:12
* @Description: 地区选择组件
*/
import React, { useState, Fragment, forwardRef, useEffect } from 'react'
import { Select } from 'antd'
import { PlusOutlined, MinusOutlined } from '@ant-design/icons'
import cx from 'classnames'
......@@ -34,6 +41,11 @@ const CityCascader: React.FC<CitySelectPropsType> = (props) => {
fetchAreaList()
}, [])
/**
* 根据省编码获取省份信息
* @param id
* @returns
*/
const getProviceById = (id: number) => {
let result = 0
provinceData && provinceData.map(item => {
......@@ -44,6 +56,12 @@ const CityCascader: React.FC<CitySelectPropsType> = (props) => {
return result
}
/**
* 根绝id获取区信息
* @param id 城市编码
* @param provinceCode 省编码
* @returns
*/
const getCityById = (id: number, provinceCode: string) => {
let result = 0
!isEmpty(cityData) && cityData[provinceCode].map(item => {
......@@ -54,7 +72,9 @@ const CityCascader: React.FC<CitySelectPropsType> = (props) => {
return result
}
/**
* 查询省市区数据
*/
const fetchAreaList = () => {
getManageAreaAll().then(res => {
initProvinceAndCityData(res.data)
......
......@@ -45,7 +45,7 @@ export const useTreeTabs = (options: useTreeTabOptions = {}) => {
setTreeData(res.data || [])
}
}
const handleSelect = (selectKey?, node?) => {
if (selectCallback) {
selectCallback(selectKey, node)
......@@ -76,7 +76,7 @@ export const useTreeTabs = (options: useTreeTabOptions = {}) => {
handleFindDetail(selectKey)
setIsEditForm(false)
resetDetail && resetDetail()
resolve()
resolve(true)
},
onCancel() {
reject()
......@@ -154,4 +154,4 @@ export const useTreeTabs = (options: useTreeTabOptions = {}) => {
toolsRender,
handleDeleteMenu
}
}
\ No newline at end of file
}
......@@ -574,4 +574,6 @@ export default {
'balance.jisongriqi':'Delivery date',
'balance.fapiaohaoma':'Invoice number',
'balance.querenduizhangdan':'Confirm the statement',
'balance.coupon.amout': 'couponAmount',
'balance.coupon.couponNo': 'couponNo',
}
\ No newline at end of file
......@@ -575,4 +575,6 @@ export default {
'balance.jisongriqi': '발송 일자',
'balance.fapiaohaoma': '영수증 번호',
'balance.querenduizhangdan': '청구서 확인',
'balance.coupon.amout': '쿠폰 금액',
'balance.coupon.couponNo': '쿠폰 쿠폰',
}
......@@ -762,5 +762,7 @@ export default {
'balance.businessRequestFunds.detail.columns.canWriteOffAmount' : '可核销金额',
'balance.businessRequestFunds.search.columns.payee' : '收款方',
'balance.coupon.amout': '优惠券金额',
'balance.coupon.couponNo': '优惠券券码',
}
......@@ -125,6 +125,8 @@ const MemberDetail: React.FC<{}> = () => {
const formInitValue = nodeRecord ? getButtonAuth(nodeRecord.key) : {};
const [errors, setErrors] = useState<boolean>(false);
const [formValue, setFormValue] = useState<any>(null);
// 控制按钮权限是否能勾选
const [checkflag, setcheckflag] = useState<boolean>(false)
// 储存的按钮数据
const [buttonInfos, setButtonInfos] = useState<any>([]);
......@@ -161,12 +163,8 @@ const MemberDetail: React.FC<{}> = () => {
menuId: node ? node.id : nodeRecord.id,
...params,
});
console.log(data, 'data')
if (!isAdd && data.orgIds) {
console.log(plateformTreeData, 'plateformTreeData');
console.log(data.orgIds, 'data.orgIds');
let plateformTreeDataList = mapkey(plateformTreeData, data.orgIds, [])
console.log(plateformTreeDataList)
setplateformTreeList(plateformTreeDataList)
}
setButtonAuth(node.id, data);
......@@ -195,8 +193,12 @@ const MemberDetail: React.FC<{}> = () => {
});
const handleNodeSelected = async (selectKey, selectNode) => {
console.log(actionRef.current.selected)
try {
const { node } = await handleSelect(selectKey, selectNode);
const res = getMemberRoleAuthButton({ menuId: selectKey })
setcheckflag(treeActions.getSelectKeys().indexOf(selectKey) != -1)
// console.log(node)
if (nodeRecord) {
return new Promise((resolve, reject) => {
if (selectKey !== nodeRecord.key) {
......@@ -204,6 +206,7 @@ const MemberDetail: React.FC<{}> = () => {
.then(() => {
setNodeRecord(node);
fetchItemDetailData(node);
setButtonInfos(node.buttons)
resolve(true);
})
.catch(() => {
......@@ -220,6 +223,12 @@ const MemberDetail: React.FC<{}> = () => {
} catch (error) { }
};
const handleCheck = async (e) => {
const { checked } = e;
if (nodeRecord) {
setcheckflag(checked.indexOf(nodeRecord.id) != -1 ? true : false)
}
}
// 编辑和预览模式下需回显数据
const fetchRoleMenuDetail = async id => {
// 10秒缓存
......@@ -243,10 +252,8 @@ const MemberDetail: React.FC<{}> = () => {
}, []);
useEffect(() => {
// console.log(formInitValue)
if (formInitValue) {
// 显示右侧checkbox
setButtonInfos(formInitValue.buttons || []);
// 回显右侧checkbox的值
if (actionRef.current.setSelected) {
actionRef.current.setSelected();
}
......@@ -310,6 +317,7 @@ const MemberDetail: React.FC<{}> = () => {
list = publicarr.filter((element, index, self) => {
return self.findIndex(x => x.menuId === element.menuId) === index
})
console.log(actionRef.current.selected)
const publicParams = {
...values,
imFlag: !!values.imFlag,
......@@ -317,21 +325,13 @@ const MemberDetail: React.FC<{}> = () => {
auth: (flag && dataId.length === 0) ? [] : list.map(v => ({
menuId: v.menuId,
// @todo 暂时写死为空
buttonIds: [],
buttonIds: actionRef.current.selected,
checked: v.checked,
hasDataAuth: authInfos[v.menuId]?.hasDataAuth ? authInfos[v.menuId]?.hasDataAuth : 0,
orgIds: authInfos[v.menuId]?.hasDataAuth ? authInfos[v.menuId]?.orgIds : [],
}))
// auth: treeCheckIds.map(v => ({
// menuId: v,
// // @todo 暂时写死为空
// buttonIds: [],
// checked: true,
// hasDataAuth: authInfos[v]?.hasDataAuth,
// orgIds: authInfos[v]?.orgIds
// })),
};
console.log(publicarr, 'publicarr', flag, 'flag', publicParams)
delete publicParams.checkIds
if (pageStatus === PageStatus.EDIT) {
await postMemberRoleUpdate({
......@@ -346,7 +346,7 @@ const MemberDetail: React.FC<{}> = () => {
history.goBack(-1);
})
.catch(err => {
console.log(err);
// console.log(err);
if (Array.isArray(err)) {
setErrors(true);
}
......@@ -354,7 +354,7 @@ const MemberDetail: React.FC<{}> = () => {
};
const changeTabs = key => {
console.log(key)
// console.log(key)
// if (key === '2' && id) {
// fetchRoleMenuDetail(id).then(res => {
// const { data } = res;
......@@ -428,10 +428,10 @@ const MemberDetail: React.FC<{}> = () => {
{ orgIds: selectKeys },
),
});
console.log(plateformTreeData, 'plateformTreeData');
console.log(selectKeys, 'selectKeys');
// console.log(plateformTreeData, 'plateformTreeData');
// console.log(selectKeys, 'selectKeys');
let plateformTreeDataList = mapkey(plateformTreeData, selectKeys, [])
console.log(plateformTreeDataList)
// console.log(plateformTreeDataList)
setplateformTreeList(plateformTreeDataList)
// console.log(plateformTreeDataList, 'plateformTreeData')
setOrgModalVisible(false);
......@@ -517,6 +517,7 @@ const MemberDetail: React.FC<{}> = () => {
treeData={treeData}
handleSelect={handleNodeSelected}
checkStrictly={true}
handleCheck={handleCheck}
customKey="id"
disabled={pageStatus === PageStatus.PREVIEW}
/>
......@@ -525,8 +526,9 @@ const MemberDetail: React.FC<{}> = () => {
<Col span={7} className={styled['menu-role-tree']}>
<CheckboxTree
actions={actionRef}
disabled={pageStatus === PageStatus.PREVIEW}
disabled={!checkflag}
checkedNodes={buttonInfos}
checkIds={checkIds}
title={intl.formatMessage({ id: 'authConfig.MenuInterfaceAccess' })}
/>
</Col>
......
......@@ -152,9 +152,38 @@ function useHandleSettlementList() {
const prefix = `/memberCenter/balance/accountsPayable/settlementList/` ;
const url = URL_MAP[record.orderType];
let fullUrl = `${prefix}${url}?id=${record.id}`;
if(record.orderType === CONTRACT_FUND_BILL) {
fullUrl = `/memberCenter/contract/funds/bill/details?applyId=${record.orderId}`;
switch (record.orderType) {
// 生产单
case 1:
fullUrl = `/memberCenter/balance/accountsPayable/settlementList/productNoticeSettlementDetail?id=${record.orderId}`;
break;
// 物流单
case 2:
fullUrl = `/memberCenter/balance/accountsPayable/settlementList/logisticsDetail?id=${record.orderId}`;
break;
// 订单
case 3:
case 4:
fullUrl = `/memberCenter/tranactionAbility/saleOrder/orderList/preview?orderNo=${record.orderNo}`;
break;
// 退货
case 5:
fullUrl = `/memberCenter/afterService/returnManage/returnQuery/detail?id=${record.orderId}`;
break;
// 请款单
case 6:
case 7:
fullUrl = `/memberCenter/balance/businessRequestFunds/search/preview?id=${record.orderId}&no=${record.orderNo}`;
break;
// case 7:
// window.open(`/memberCenter/balance/businessReconciliation/search/preview?id=${record.dataId}&no=${record.orderNo}`)
// break;
default:
break;
}
// if(record.orderType === CONTRACT_FUND_BILL) {
// fullUrl = `/memberCenter/contract/funds/bill/details?applyId=${record.orderId}`;
// }
return (
<EyePreview url={fullUrl} >
{record.settlementNo}
......
......@@ -18,7 +18,7 @@ import { useAsyncInitSelect } from '@/formSchema/effects/useAsyncInitSelect';
import { detailSchema } from './schema'
import { usePageStatus } from '@/hooks/usePageStatus';
// import StatusTag from '../../components/StatusTag'
import { productNoticecolumns } from '../../common/columns';
import { orderColumns, productNoticecolumns } from '../../common/columns';
import { priceFormat } from '@/utils/numberFomat';
import useFetchBillData from '../../hooks/useFetchBillData';
import useBalanceInfo from '../../hooks/useBalanceInfo';
......@@ -49,7 +49,7 @@ const OrderDetail: React.FC = () => {
tableProps={{
rowKey: 'orderNo',
}}
columns={productNoticecolumns}
columns={orderColumns}
currentRef={ref}
fetchTableData={(params: any) => fetchListData(getSettleAccountsMemberSettlementPagePayableOrderSettlement, { settlementId: id, ...params })}
controlRender={
......
......@@ -14,7 +14,7 @@ import { schema } from './schema';
import StatusTag, { STATUS_TYPE } from '@/components/StatusTag'
import { fetchOptions } from '../../common';
import useSetSearchValueInTable from '@/hooks/useSetSearchValueInTable';
import { priceFormat } from '@/utils/numberFomat';
import { numFormat, priceFormat } from '@/utils/numberFomat';
import {
getSettleAccountsCommonGetPayStatus,
getSettleAccountsCommonGetReceiptInvoiceStatus,
......@@ -143,9 +143,6 @@ const SettlementList: React.FC = () => {
return {
...rest,
// TODO, 修改
// kind: kindName == intl.formatMessage({id: 'balance.zengzhishuiputongfapiao'}) ? 1 : 2,
// type: typeName == intl.formatMessage({id: 'balance.qiye'}) ? 1 : 2,
proveList: res[`list-${key}`]
}
})
......@@ -166,8 +163,6 @@ const SettlementList: React.FC = () => {
const defaultPostData = {
receiptInvoiceId: activeData.id,
...rest,
// kind: kindName == intl.formatMessage({id: 'balance.zengzhishuiputongfapiao'}) ? 1 : 2,
// type: typeName == intl.formatMessage({id: 'balance.qiye'}) ? 1 : 2,
proveList: res[`list-0`]
}
setSubmitLoading(true);
......@@ -236,7 +231,7 @@ const SettlementList: React.FC = () => {
title: intl.formatMessage({ id: 'balance.accountsReceivable.invoice.columns.tax' }),
dataIndex: 'tax',
render: (text, record) => {
return record.isHasTax ? `${record.isHasTaxName}/${record.taxRate * 100}%` : intl.formatMessage({ id: 'balance.accountsReceivable.invoice.columns.tax.none' });
return record.isHasTax ? `${record.isHasTaxName}/${priceFormat(record.taxRate * 100)}%` : intl.formatMessage({ id: 'balance.accountsReceivable.invoice.columns.tax.none' });
}
},
{
......@@ -294,7 +289,13 @@ const SettlementList: React.FC = () => {
title: intl.formatMessage({ id: 'balance.accountsReceivable.invoice.columns.operation' }),
render: (text, record) => {
return (
<a onClick={() => handleShow(record)}>{record.invoiceStatus == 1 ? intl.formatMessage({ id: 'balance.accountsReceivable.invoice.columns.operation.1' }) : intl.formatMessage({ id: 'balance.accountsReceivable.invoice.columns.operation.2' })}</a>
<a onClick={() => handleShow(record)}>
{
record.invoiceStatus == 1
? intl.formatMessage({ id: 'balance.accountsReceivable.invoice.columns.operation.1' })
: intl.formatMessage({ id: 'balance.accountsReceivable.invoice.columns.operation.2' })
}
</a>
)
}
}
......
......@@ -88,9 +88,38 @@ function useHandleSettlementList() {
const prefix = '/memberCenter/balance/accountsReceivable/settlementList/';
const url = URL_MAP[record.orderType];
let fullUrl = `${prefix}${url}?id=${record.id}`;
if(record.orderType === CONTRACT_FUND_BILL) {
fullUrl = `/memberCenter/contract/funds/bill/details?applyId=${record.orderId}`;
switch (record.orderType) {
// 生产单
case 1:
fullUrl = `/memberCenter/balance/accountsPayable/settlementList/productNoticeSettlementDetail?id=${record.orderId}`;
break;
// 物流单
case 2:
fullUrl = `/memberCenter/balance/accountsPayable/settlementList/logisticsDetail?id=${record.orderId}`;
break;
// 订单
case 3:
case 4:
fullUrl = `/memberCenter/tranactionAbility/saleOrder/orderList/preview?orderNo=${record.orderNo}`;
break;
// 退货
case 5:
fullUrl = `/memberCenter/afterService/returnManage/returnQuery/detail?id=${record.orderId}`;
break;
// 请款单
case 6:
case 7:
fullUrl = `/memberCenter/balance/businessRequestFundsCollaboration/search/preview?id=${record.orderId}&no=${record.orderNo}`;
break;
// case 7:
// window.open(`/memberCenter/balance/businessReconciliation/search/preview?id=${record.dataId}&no=${record.orderNo}`)
// break;
default:
break;
}
// if(record.orderType === CONTRACT_FUND_BILL) {
// fullUrl = `/memberCenter/contract/funds/bill/details?applyId=${record.orderId}`;
// }
return (
<EyePreview url={fullUrl} >
{record.settlementNo}
......
......@@ -13,10 +13,9 @@ import { FORM_FILTER_PATH } from '@/formSchema/const';
import { createFormActions } from '@formily/antd';
import StandardTable from '@/components/StandardTable';
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch';
import { useAsyncInitSelect } from '@/formSchema/effects/useAsyncInitSelect';
import { detailSchema } from './schema'
import { usePageStatus } from '@/hooks/usePageStatus';
import { productNoticecolumns } from '../../common/columns';
import { orderColumns, productNoticecolumns } from '../../common/columns';
import { priceFormat } from '@/utils/numberFomat';
import useFetchBillData from '../../hooks/useFetchBillData';
import useBalanceInfo from '../../hooks/useBalanceInfo';
......@@ -47,7 +46,7 @@ const OrderDetail: React.FC = () => {
tableProps={{
rowKey: 'orderNo',
}}
columns={productNoticecolumns}
columns={orderColumns}
currentRef={ref}
fetchTableData={(params: any) => fetchListData(getSettleAccountsMemberSettlementPagePayableOrderSettlement, { settlementId: id, ...params })}
controlRender={
......
......@@ -104,10 +104,10 @@ export const orderColumns = [
return record.isHasTax ? `${record.isHasTaxName}/${record.taxRate}` : intl.formatMessage({ id: 'balance.common.columns.orderColumns.tax.none' });
}
},
{ title: intl.formatMessage({ id: 'balance.common.columns.orderColumns.batch' }), dataIndex: 'batch' },
{ title: intl.formatMessage({ id: 'balance.common.columns.orderColumns.batch' }), dataIndex: 'payCount' },
{
title: intl.formatMessage({ id: 'balance.common.columns.orderColumns.amount' }),
dataIndex: 'amount',
dataIndex: 'payAmount',
render: (text) => {
return (
<div style={{ display: "flex", flexDirection: "row", alignItems: 'center' }}>
......@@ -121,7 +121,7 @@ export const orderColumns = [
)
}
},
{ title: intl.formatMessage({ id: 'balance.common.columns.orderColumns.payTime' }), dataIndex: intl.formatMessage({ id: 'balance.common.columns.orderColumns.payTime' }) },
{ title: intl.formatMessage({ id: 'balance.common.columns.orderColumns.payTime' }), dataIndex: 'payTime' },
{
title: intl.formatMessage({ id: 'balance.common.columns.orderColumns.settlementAmount' }),
dataIndex: 'settlementAmount',
......
......@@ -106,7 +106,7 @@ const InvoiceDrawerInfo: React.FC<Iprops> = (props: Iprops) => {
<div className={styles.header}>
<div className={styles['header-item']}>
{disabled ? '原订单发票号码' : <>
{intl.formatMessage({ id: 'balance.fapiaoguanli' })}<span className={styles.required}>*</span>
{intl.formatMessage({ id: 'balance.fapiaohaoma' })}<span className={styles.required}>*</span>
</>}
</div>
<div className={styles['header-item']}>
......
import EyePreview from '@/components/EyePreview';
// import StatusTag from '../components/StatusTag';
// import { TO_BE_RECONCILED, TO_BE_PAY, TO_BE_COLLECTED, COMPLETED, PRODUCT_NOTICE_SETTLEMENT_DETAIL, LOGISTICS_DETAIL, ORDER_DETAIL, CONTRACT_FUND_BILL } from '../common/constants';
import { priceFormat } from '@/utils/numberFomat'
import { numFormat, priceFormat } from '@/utils/numberFomat'
import StatusTag, { STATUS_TYPE } from '@/components/StatusTag';
import React, { useMemo, useState } from 'react';
// import { payStatus } from '../common';
......@@ -66,36 +66,31 @@ function useHandleSettlementList() {
render: (text, record) => {
return (
<EyePreview
url={`/memberCenter/balance/platformSettlement/integral/detail?id=${record.id}`}
url={`/memberCenter/balance/platformSettlement/coupon/detail?id=${record.id}`}
>{record.settlementNo}</EyePreview>
)
}
},
{ title: intl.formatMessage({ id: 'balance.platformSettlement.integral.columns.settlementDate' }), dataIndex: 'settlementDate' },
{ title: intl.formatMessage({ id: 'balance.platformSettlement.integral.columns.settlementWayName' }), dataIndex: 'settlementWayName' },
{ title: intl.formatMessage({ id: '结算方' }), dataIndex: 'settlementName' },
{ title: intl.formatMessage({ id: 'balance.platformSettlement.integral.columns.settlementDate' }), dataIndex: 'settlementDate' },
{ title: intl.formatMessage({ id: 'balance.platformSettlement.integral.columns.totalCount' }), dataIndex: 'totalCount' },
// { title: intl.formatMessage({ id: 'balance.platformSettlement.integral.columns.score' }), dataIndex: 'score' },
// {
// title: intl.formatMessage({ id: 'balance.platformSettlement.integral.columns.ratio' }),
// dataIndex: 'ratio',
// render: (text, record) => {
// return (record.ratio + "%");
// }
// },
{ title: intl.formatMessage({ id: 'balance.platformSettlement.integral.columns.amount' }), dataIndex: 'amount' },
{
title: intl.formatMessage({ id: 'balance.platformSettlement.integral.columns.amount' }),
dataIndex: 'amount',
render: (text) => `¥${priceFormat(text)}`
},
{ title: intl.formatMessage({ id: 'balance.platformSettlement.integral.columns.settlementTime' }), dataIndex: 'settlementTime' },
{ title: intl.formatMessage({ id: 'balance.platformSettlement.integral.columns.payWayName' }), dataIndex: 'payWayName' },
{ title: '预计付款时间', dataIndex: 'payTime' },
{ title: '实际付款时间', dataIndex: 'actualPayTime' },
{
title: intl.formatMessage({ id: 'balance.platformSettlement.integral.columns.status' }), dataIndex: 'status',
filters: payStatus,
onFilter: (value: number, record: any) => record.status == value,
render: (text, record) => {
return (
// <StatusTag status={record.status || 1} />
<StatusTag type={STATUS_TYPE[record.status] as 'success'} title={STATUS_TEXT[record.status]} />
<StatusTag type={STATUS_TYPE[record.status] as 'success'} title={record.statusName} />
)
}
},
......
......@@ -13,7 +13,14 @@ import { useAsyncSelect } from '@/formSchema/effects/useAsyncSelect';
import Voucher from '../../components/Voucher';
import ConfirmAccount from '../../components/ConfirmAccount';
import useSetSearchValueInTable from '@/hooks/useSetSearchValueInTable';
import { getSettleAccountsCommonGetSettlementStatus, getSettleAccountsPlatformScoreSettlementGetReceivablePayProve, getSettleAccountsPlatformScoreSettlementPageReceivableSettlement, GetSettleAccountsPlatformScoreSettlementPageReceivableSettlementRequest, postSettleAccountsPlatformScoreSettlementConfirmAccountComplete, postSettleAccountsPlatformScoreSettlementConfirmPayProve } from '@/services/SettleV2Api';
import {
getSettleAccountsCommonGetSettlementStatus,
getSettleAccountsPlatformCouponSettlementGetReceivablePayProve,
getSettleAccountsPlatformCouponSettlementPageReceivableSettlement,
GetSettleAccountsPlatformCouponSettlementPageReceivableSettlementRequest,
postSettleAccountsPlatformCouponSettlementConfirmAccountComplete,
postSettleAccountsPlatformCouponSettlementConfirmPayProve,
} from '@/services/SettleV2Api';
import useHandleSettlementList from './hooks/useHandleSettlementList';
import ViewUniversalPay from '../../components/ViewUniversalPay';
......@@ -33,7 +40,7 @@ const CouponSettlement: React.FC = () => {
}), [itemInfo])
const fetchListData = async (params: GetSettleAccountsPlatformScoreSettlementPageReceivableSettlementRequest) => {
const fetchListData = async (params: GetSettleAccountsPlatformCouponSettlementPageReceivableSettlementRequest) => {
const searchParams = {
...searchData,
...params,
......@@ -43,7 +50,7 @@ const CouponSettlement: React.FC = () => {
status: searchParams.status || '0',
}
// /settle/accounts/platform/score/settlement/pageReceivableSettlement
const { data } = await getSettleAccountsPlatformScoreSettlementPageReceivableSettlement(postData);
const { data } = await getSettleAccountsPlatformCouponSettlementPageReceivableSettlement(postData);
return data
}
......@@ -51,7 +58,7 @@ const CouponSettlement: React.FC = () => {
* 确认对账
*/
const handleConfirm = async (params: { id: number }) => {
const { code } = await postSettleAccountsPlatformScoreSettlementConfirmAccountComplete({ settlementId: params.id })
const { code } = await postSettleAccountsPlatformCouponSettlementConfirmAccountComplete({ settlementId: params.id })
if (code === 1000) {
// reconciliationOnCancel();
handleClose('reconciledComfirm')
......@@ -63,7 +70,7 @@ const CouponSettlement: React.FC = () => {
* 确认付款凭证
*/
const handleConfirmPayStatus = async (params: { status: 0 | 1, id: number }) => {
const { code } = await postSettleAccountsPlatformScoreSettlementConfirmPayProve({ id: params.id, status: params.status });
const { code } = await postSettleAccountsPlatformCouponSettlementConfirmPayProve({ id: params.id, status: params.status });
if (code) {
// confirmPayOnCancel();
handleClose('confirmCompletePaymentStatus')
......@@ -72,7 +79,7 @@ const CouponSettlement: React.FC = () => {
}
const fetchVouchers = useCallback(async (id: number) => {
const { code, data } = await getSettleAccountsPlatformScoreSettlementGetReceivablePayProve({ id: id.toString() })
const { code, data } = await getSettleAccountsPlatformCouponSettlementGetReceivablePayProve({ id: id.toString() })
if (code === 1000) {
setFiles(data);
}
......@@ -108,8 +115,7 @@ const CouponSettlement: React.FC = () => {
controlRender={
<NiceForm
actions={formActions}
components={{ DatePicker }}
expressionScope={{}}
components={{ RangePicker: DatePicker.RangePicker }}
effects={($, actions) => {
useStateFilterSearchLinkageEffect($, actions, 'megaLayout.settlementNo', FORM_FILTER_PATH);
useAsyncSelect(
......@@ -121,8 +127,6 @@ const CouponSettlement: React.FC = () => {
onSubmit={handleSearch}
onReset={() => {
clear()
// formActions.setFieldValue('startTime', null);
// formActions.setFieldValue('endTime', null);
}}
{...formatInitialValue}
/>
......
import React, { useRef, useState, useEffect, useMemo } from 'react';
import { PageHeaderWrapper } from '@ant-design/pro-layout'
import { Card, PageHeader, Descriptions, Button, message } from 'antd';
import { history, useIntl, getIntl } from 'umi';
import NiceForm from '@/components/NiceForm';
import { FORM_FILTER_PATH } from '@/formSchema/const';
import { createFormActions } from '@formily/antd';
import StandardTable from '@/components/StandardTable';
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch';
import { detailSchema } from './schema';
import moment from 'moment';
import { usePageStatus } from '@/hooks/usePageStatus';
import useInitialValue from '@/pages/member/common/hooks/useInitialValue';
import useBalanceInfo from '../../hooks/useBalanceInfo';
import {
getSettleAccountsPlatformCouponSettlementGetReceivableDetail,
GetSettleAccountsPlatformCouponSettlementGetReceivableDetailResponse,
getSettleAccountsPlatformCouponSettlementPageReceivableSettlementDetail,
getSettleAccountsPlatformCouponSettlementReceivableExport,
} from '@/services/SettleV2Api';
import CustomizeColumn from '@/components/CustomizeColumn';
import { priceFormat } from '@/utils/numberFomat';
const intl = getIntl();
const formActions = createFormActions();
const columns = [
{ title: intl.formatMessage({ id: 'balance.platformSettlement.integral.info.columns.orderNo' }), dataIndex: 'orderNo' },
{ title: intl.formatMessage({ id: 'balance.platformSettlement.integral.info.columns.orderAbstract' }), dataIndex: 'orderAbstract' },
{ title: intl.formatMessage({ id: 'balance.platformSettlement.integral.info.columns.settlementOrderTypeName' }), dataIndex: 'settlementOrderTypeName' },
{ title: intl.formatMessage({ id: 'balance.platformSettlement.integral.info.columns.orderTime' }), dataIndex: 'orderTime' },
{ title: intl.formatMessage({ id: 'balance.platformSettlement.integral.info.columns.orderTypeName' }), dataIndex: 'orderTypeName' },
{ title: intl.formatMessage({ id: 'balance.common.columns.productNoticecolumns.orderAmount' }), dataIndex: 'orderAmount', render: (text) => `¥${priceFormat(text)}` },
{ title: intl.formatMessage({ id: 'balance.coupon.amount' }), dataIndex: 'couponAmount', render: (text) => `¥${priceFormat(text)}` },
{ title: intl.formatMessage({ id: 'balance.coupon.couponNo' }), dataIndex: 'couponNo' },
{ title: intl.formatMessage({ id: 'balance.platformSettlement.integral.info.columns.payTime' }), dataIndex: 'payTime' },
{ title: intl.formatMessage({ id: 'balance.platformSettlement.integral.info.columns.settlementAmount' }), dataIndex: 'settlementAmount' }
]
const Info: React.FC = () => {
const ref = useRef<any>({});
const intl = useIntl();
const { id, preview } = usePageStatus();
const params = useMemo(() => { return id ? { id: id.toString() } : null }, [id]);
const { loading, initialValue } = useInitialValue<GetSettleAccountsPlatformCouponSettlementGetReceivableDetailResponse, { id: string }>(getSettleAccountsPlatformCouponSettlementGetReceivableDetail, params)
const { infoList } = useBalanceInfo(initialValue, { type: "score" })
const fetchListData = async (params) => {
const postData = {
settlementId: id,
...params
}
const res = await getSettleAccountsPlatformCouponSettlementPageReceivableSettlementDetail(postData)
return res.data
}
/**
* 搜索
*/
const handleSearch = (values) => {
console.log(values);
ref.current.reload({ ...values });
}
const handleExport = async () => {
const loadingMsg = message.loading('正在导出', 0)
const { data } = await getSettleAccountsPlatformCouponSettlementReceivableExport(
{ settlementId: id } as any,
{ responseType: 'blob', getResponse: true }
);
loadingMsg();
let blob = new Blob([data as any]);
let downloadFilename = `${moment().format('YYYY-MM-DD HH:mm:ss')}.xlsx`;//设置导出的文件名
createDownloadLink(blob, downloadFilename)
}
const createDownloadLink = (blob: Blob, fileName: string) => {
let url = window.URL.createObjectURL(blob);
let downloadElement = document.createElement("a");
downloadElement.style.display = "none";
downloadElement.href = url;
downloadElement.download = fileName;
document.body.appendChild(downloadElement);
downloadElement.click();
document.body.removeChild(downloadElement);
window.URL.revokeObjectURL(url);
}
return (
<PageHeaderWrapper
title={intl.formatMessage({ id: 'balance.platformSettlement.integral.info.title' }, { data: initialValue?.settlementNo })}
>
<div style={{ marginBottom: '16px' }}>
<CustomizeColumn data={infoList} title="" column={3} />
</div>
<Card>
<StandardTable
tableProps={{
rowKey: record => (`${record.orderNo}-${record.payTime}`),
}}
columns={columns}
currentRef={ref}
fetchTableData={(params: any) => fetchListData(params)}
keepAlive={false}
controlRender={
<NiceForm
actions={formActions}
components={{
ExportBtn: () => {
return (
<div>
<Button onClick={handleExport}>{intl.formatMessage({ id: 'balance.platformSettlement.integral.info.exportBtn' })}</Button>
</div>
)
}
}}
effects={($, actions) => {
useStateFilterSearchLinkageEffect($, actions, 'megaLayout.topLayout.orderNo', FORM_FILTER_PATH);
}}
schema={detailSchema}
onSubmit={handleSearch}
/>
}
/>
</Card>
</PageHeaderWrapper>
)
}
export default Info
......@@ -42,8 +42,7 @@ export const schema: ISchema = {
},
properties: {
"[startTime, endTime]": {
type: 'object',
"x-component": 'RangePicker',
type: 'daterange',
'x-component-props': {
allowClear: true,
placeholder: [intl.formatMessage({ id: 'balance.platformSettlement.integral.schema.schema.startTime' }), intl.formatMessage({ id: 'balance.platformSettlement.integral.schema.schema.endTime' })],
......@@ -112,10 +111,7 @@ export const detailSchema: ISchema = {
properties: {
ctl: {
type: 'object',
'x-component': 'Children',
'x-component-props': {
children: '{{exportBtn}}',
},
'x-component': 'ExportBtn',
},
orderNo: {
type: 'string',
......@@ -141,19 +137,18 @@ export const detailSchema: ISchema = {
placeholder: intl.formatMessage({ id: 'balance.platformSettlement.integral.schema.detailSchema.orderAbstract' })
}
},
orderTime: {
type: 'string',
enum: orderTime,
'[orderStartTime, orderEndTime]': {
type: 'daterange',
// enum: orderTime,
'x-component-props': {
placeholder: intl.formatMessage({ id: 'balance.platformSettlement.integral.schema.detailSchema.orderTime' }),
placeholder: [intl.formatMessage({ id: 'balance.accountsReceivable.invoice.schema.orderStartTime' }), intl.formatMessage({ id: 'balance.accountsReceivable.invoice.schema.orderEndTime' })],
allowClear: true,
},
},
payTime: {
type: 'string',
enum: payTime,
'[payStartTime, payEndTime]': {
type: 'daterange',
'x-component-props': {
placeholder: intl.formatMessage({ id: 'balance.platformSettlement.integral.schema.detailSchema.payTime' }),
placeholder: [intl.formatMessage({ id: 'balance.platformSettlement.integral.schema.detailSchema.payStartTime' }), intl.formatMessage({ id: 'balance.platformSettlement.integral.schema.detailSchema.payStartTime' })],
allowClear: true,
},
},
......
......@@ -51,7 +51,6 @@ const Integral: React.FC = () => {
}
/**
* TODO 需要换成优惠券结算
* 确认对账
*/
const handleConfirm = async (params: { id: number }) => {
......@@ -65,7 +64,6 @@ const Integral: React.FC = () => {
/**
* 确认付款凭证
* TODO 需要换成优惠券结算
*/
const handleConfirmPayStatus = async (params: { status: 0 | 1, id: number }) => {
const { code } = await postSettleAccountsPlatformScoreSettlementConfirmPayProve({ id: params.id, status: params.status });
......@@ -77,7 +75,6 @@ const Integral: React.FC = () => {
}
/**
* TODO 需要换成优惠券结算
*/
const fetchVouchers = useCallback(async (id: number) => {
const { code, data } = await getSettleAccountsPlatformScoreSettlementGetReceivablePayProve({ id: id.toString() })
......@@ -116,8 +113,7 @@ const Integral: React.FC = () => {
controlRender={
<NiceForm
actions={formActions}
components={{ DatePicker }}
expressionScope={{}}
components={{ RangePicker: DatePicker.RangePicker }}
effects={($, actions) => {
useStateFilterSearchLinkageEffect($, actions, 'megaLayout.settlementNo', FORM_FILTER_PATH);
useAsyncSelect(
......
......@@ -305,13 +305,13 @@ const ChannelInfo: React.FC<ShopInfoPropsType> = (props) => {
let url = ''
switch (option.type) {
case 3:
url = `${CHANNEL_CENTER_URL}/m${shopInfo.memberId}`
url = `${CHANNEL_CENTER_URL}/${shopInfo.memberId}`
break
case 4:
url = `${ICHANNEL_CENTER_URL}/m${shopInfo.memberId}`
url = `${ICHANNEL_CENTER_URL}/${shopInfo.memberId}`
break
case 5:
url = `${CHANNEL_CENTER_URL}/m${shopInfo.memberId}/integral`
url = `${CHANNEL_CENTER_URL}/${shopInfo.memberId}/integral`
break
}
setResUrl(url)
......
......@@ -159,7 +159,7 @@ const ViewDriectChannel: React.FC<{}> = () => {
href={
channelDetails?.channelCommodity?.source === 1
?
`${CHANNEL_CENTER_URL}/m${channelDetails?.channelCommodity?.parentMemberId}/commodity/detail/${channelDetails?.channelCommodity?.commodity?.id}`
`${CHANNEL_CENTER_URL}/${channelDetails?.channelCommodity?.parentMemberId}/commodity/detail/${channelDetails?.channelCommodity?.commodity?.id}`
:
`/memberCenter/commodityAbility/commodity/products/detail?id=${channelDetails?.channelCommodity?.commodity?.id}`
}
......
......@@ -138,7 +138,7 @@ const Announcements = () => {
? (
<Dropdown overlay={menu}>
<a>
{intl.formatMessage({ id: 'common.text.most' })} <DownOutlined />
{intl.formatMessage({ id: 'common.text.more' })} <DownOutlined />
</a>
</Dropdown>
)
......
......@@ -125,7 +125,7 @@ const Infomation = () => {
CAN_MODIFY.includes(record.status)
? <Dropdown overlay={menu}>
<a>
{intl.formatMessage({ id: 'common.text.most' })} <DownOutlined />
{intl.formatMessage({ id: 'common.text.more' })} <DownOutlined />
</a>
</Dropdown>
: null
......
......@@ -13,15 +13,15 @@ type HeadersType = {
[key: string]: any,
}
type Ires = {
type Ires<T> = {
code: number,
data: { [key: string]: any },
data: T,
message: string
}
function useInitialValue<T, P extends Object>(api: (params: P, headers?: HeadersType) => Promise<T & Ires>, params: P, headers?: HeadersType): { loading: boolean, initialValue: T, refresh: (params: P) => void, setInitialValue: any} {
function useInitialValue<T, P extends Object>(api: (params: P, headers?: HeadersType) => Promise<Ires<T>>, params: P, headers?: HeadersType): { loading: boolean, initialValue: T, refresh: (params: P) => void, setInitialValue: any} {
const [loading, setLoading] = useState<boolean>(false);
const [initialValue, setInitialValue] = useState<null | Ires["data"]>(null);
const [initialValue, setInitialValue] = useState<null | T>(null);
const fetchData = useCallback(async (params) => {
setLoading(true)
......
......@@ -50,10 +50,10 @@ const Commodity: React.FC = () => {
switch (detail.commodity.priceType) {
case 1:
case 2:
el.href = `${mallUrl}/m${detail.channelMemberId}/commodity/detail/${detail.commodity.id}`;
el.href = `${mallUrl}/${detail.channelMemberId}/commodity/detail/${detail.commodity.id}`;
break
case 3:
el.href = `${mallUrl}/m${detail.channelMemberId}/integral/detail/${detail.commodity.id}`;
el.href = `${mallUrl}/${detail.channelMemberId}/integral/detail/${detail.commodity.id}`;
break
}
} else {
......
......@@ -36,10 +36,11 @@ const WEB_FIXTURE_LINK = `/memberCenter/marketingAbility/activityPages/managemen
const PENDIGN_ONLINE = 1;
const ONLINE = 2;
/** 进行中 */
const IN_PROGRESS = 3;
/** 下线 */
const OFFLINE = 4;
/** 借宿 */
/** 结束 */
const END = 5;
const format = 'YYYY-MM-DD HH:mm:ss';
......@@ -114,7 +115,7 @@ const ActiveItem: React.FC<Iprops> = (props: Iprops) => {
)
}
{
[PENDIGN_ONLINE, OFFLINE].includes(status) && (
[PENDIGN_ONLINE, IN_PROGRESS, ONLINE, OFFLINE].includes(status) && (
// <Link to={`/memberCenter/marketingAbility/activityPages/management/edit?id=${id}`}>
<Link to={`${environment === WEB ? WEB_FIXTURE_LINK : APP_FIXTURE_LINK}?id=${id}`}>
{/* <Button icon={<EditOutlined />}></Button> */}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment