Commit cfc780b1 authored by 前端-钟卫鹏's avatar 前端-钟卫鹏
parents 563b6190 15f1c1df
......@@ -71,7 +71,7 @@
"@linkseeks/design-core": "^1.0.0",
"@linkseeks/design-react": "^1.0.0",
"@linkseeks/design-react-web": "^1.0.0",
"@linkseeks/design-ui": "^1.0.5",
"@linkseeks/design-ui": "1.0.5",
"@linkseeks/god": "^1.0.0",
"@linkseeks/umi-plugin-yapi": "1.0.1",
"@turf/turf": "^6.4.0",
......
......@@ -117,6 +117,7 @@ const MemberDetail: React.FC<{}> = () => {
}),
});
const actionRef = useRef<any>({});
const formInitValue = nodeRecord ? getButtonAuth(nodeRecord.key) : {};
const [errors, setErrors] = useState<boolean>(false);
......@@ -126,7 +127,7 @@ const MemberDetail: React.FC<{}> = () => {
const [buttonInfos, setButtonInfos] = useState<any>([]);
// 储存的数据权限选项
const [authInfos, setAuthInfos] = useState<any>({});
const [plateformTreeList, setplateformTreeList] = useState<any>([])
// 存储默认勾选的id
const [checkIds, setcheckIds] = useState<any>({});
const modalRef = useRef<any>({})
......@@ -157,6 +158,11 @@ const MemberDetail: React.FC<{}> = () => {
menuId: node ? node.id : nodeRecord.id,
...params,
});
if (!isAdd && data.orgIds) {
let plateformTreeDataList = mapkey(plateformTreeData, data.orgIds)
setplateformTreeList(plateformTreeDataList)
}
setButtonAuth(node.id, data);
// 该配置由pass平台控制, 如果为1 则表示该角色可以配置数据权限
......@@ -382,12 +388,33 @@ const MemberDetail: React.FC<{}> = () => {
</Space>
);
const mapkey = (plateformTreeData: any, selectKeys: any) => {
let plateformTreeDataList = [];
plateformTreeData.map((item: any) => {
if (selectKeys.includes(item.id)) {
plateformTreeDataList.push(
{
id: item.id,
title: item.title
}
)
if (item.children) {
const arr = mapkey(item.children, selectKeys)
plateformTreeDataList = [...plateformTreeDataList, ...arr];
}
}
})
return plateformTreeDataList
}
const handleOrgSuccess = selectKeys => {
console.log(selectKeys, 'selectKeys')
// console.log(selectKeys, 'selectKeys')
if (!dataId.includes(nodeRecord.id)) {
dataId.push(nodeRecord.id)
setdataId(dataId)
}
// console.log(dataId)
setAuthInfos({
...authInfos,
[nodeRecord.id]: Object.assign(
......@@ -395,6 +422,9 @@ const MemberDetail: React.FC<{}> = () => {
{ orgIds: selectKeys },
),
});
let plateformTreeDataList = mapkey(plateformTreeData, selectKeys)
setplateformTreeList(plateformTreeDataList)
// console.log(plateformTreeDataList, 'plateformTreeData')
setOrgModalVisible(false);
};
const handleOrgCancel = () => {
......@@ -507,17 +537,21 @@ const MemberDetail: React.FC<{}> = () => {
</Checkbox>
<div style={{ marginTop: 16 }}>
<p style={{ color: '#909399' }}>{intl.formatMessage({ id: 'authConfig.OrganizationAuthorization' })}</p>
{disabledCheckAuthConfig.orgIds.map(v => {
const node = getTreeNode(plateformTreeData, v);
if (!node || !node.id) return null;
{plateformTreeList.map(v => {
//
// {disabledCheckAuthConfig.orgIds.map(v => {
// const node = getTreeNode(plateformTreeData, v);
// // console.log(node, '1111')
// if (!node || !node.id) return null;
return (
<div className="org-tag-container" key={node.id}>
<div className="org-tag-container" key={v.id}>
<Tag color={'#F4F5F7'} className="org-tag">
{node.title}
{v.title}
</Tag>
</div>
);
})}
<Button block type="dashed" onClick={handleOpenOrg}>
<PlusOutlined /> {intl.formatMessage({ id: 'authConfig.orientation' })}
</Button>
......
......@@ -70,8 +70,8 @@ const SearchDetail = () => {
},
{
col: [
{ label: intl.formatMessage({ id: 'balance.shoukuanfang' }), extra: data.payer, type: 'text' },
{ label: intl.formatMessage({ id: 'balance.fukuanfang' }), extra: data.payee, type: 'text' },
{ label: intl.formatMessage({ id: 'balance.shoukuanfang' }), extra: data.payee, type: 'text' },
{ label: intl.formatMessage({ id: 'balance.fukuanfang' }), extra: data.payer, type: 'text' },
{ label: intl.formatMessage({ id: 'balance.faqiduizhangfang' }), extra: data.launchReconciliation, type: 'text' },
{ label: intl.formatMessage({ id: 'balance.duizhangzongjine' }), extra: ${priceFormat(data.reconciliationMoneyAmount)}`, type: 'text' },
{ label: intl.formatMessage({ id: 'balance.danjushijian' }), extra: data.createTime, type: 'text' },
......
......@@ -25,6 +25,8 @@ const TABLINK = [
{ id: 'fileLayout', title: intl.formatMessage({ id: 'balance.fujian' }), },
]
const reg = /(^[1-9]{1}[0-9]*$)|(^[0-9]*\.[0-9]{0,3}$)/
const Add = () => {
const {
query: {
......@@ -77,8 +79,34 @@ const Add = () => {
}
const basicFormCol = [
{ label: intl.formatMessage({ id: 'balance.danjuzhaiyao' }), name: 'reconciliationAbstract', placeholder: '请输入对账单摘要', maxLength: 60, rules: [{ required: true, message: '请输入对账单摘要' }] },
{ label: intl.formatMessage({ id: 'balance.beizhu' }), name: 'remark', placeholder: '请输入对备注', maxLength: 120 },
{
label: intl.formatMessage({ id: 'balance.danjuzhaiyao' }), name: 'reconciliationAbstract', placeholder: '请输入对账单摘要', rules: [{ required: true, message: '请输入对账单摘要' }, {
validator: (_, value) => {
let _str = value;
_str = _str.replace(/[\u4E00-\u9FA5]/g, "AA");
if (_str.length > 30 * 2) {
return Promise.reject(new Error(`最长60个字符,30个汉字`))
} else {
return Promise.resolve();
}
}
}]
},
{
label: intl.formatMessage({ id: 'balance.beizhu' }), name: 'remark', placeholder: '请输入对备注', rules: [
{
validator: (_, value) => {
let _str = value;
_str = _str.replace(/[\u4E00-\u9FA5]/g, "AA");
if (value.length > 60 * 2) {
return Promise.reject(new Error(`最长120个字符`))
} else {
return Promise.resolve();
}
}
}
]
},
]
const basicFormColRight = [
......@@ -257,7 +285,13 @@ const Add = () => {
{ required: true, message: intl.formatMessage({ id: 'balance.qingshuruduizhangshuliang' }) },
{
validator: (_, value) => {
return value > record.reconciliationQuantity ? Promise.reject(new Error('不能大于待对账数量')) : Promise.resolve()
if (!reg.test(value)) {
return Promise.reject(new Error('数量需要大于0'))
}
if(value > record.reconciliationQuantity){
return Promise.reject(new Error('不能大于待对账数量'))
}
return Promise.resolve()
}
},
]}
......@@ -371,7 +405,7 @@ const Add = () => {
<Form.Item
{...item}
>
{_editAble ? <Input placeholder={item.placeholder} maxLength={item.maxLength} /> : dataSource[item.name]}
{_editAble ? <Input placeholder={item.placeholder} /> : dataSource[item.name]}
</Form.Item>
</Col>
))}
......
......@@ -100,8 +100,8 @@ const ReadyReconciliation: React.FC = () => {
const childColumns: ColumnType<any>[] = [{
title: intl.formatMessage({ id: 'balance.jiesuanfangshi' }),
key: 'payWay',
dataIndex: 'payWay',
key: 'payWayName',
dataIndex: 'payWayName',
}, {
title: intl.formatMessage({ id: 'balance.yujijiesuanriqi' }),
key: 'expectPayTime',
......@@ -148,6 +148,10 @@ const ReadyReconciliation: React.FC = () => {
key: 'receiveQuantity',
dataIndex: 'receiveQuantity',
}, {
title: '已对账数量',
key: 'reconciledQuantity',
dataIndex: 'reconciledQuantity',
}, {
title: intl.formatMessage({ id: 'balance.yiduizhangjine' }),
key: 'reconciledMoney',
dataIndex: 'reconciledMoney',
......
......@@ -138,7 +138,7 @@ const ModalOperate: React.FC<IProps> = (props: any) => {
let _str = value;
_str = _str.replace(/[\u4E00-\u9FA5]/g, "AA");
if (_str.length > maxNumber * 2) {
return { type: 'error', message: `${intl.formatMessage({ id: 'detail.purchase.tips19' })}${maxNumber * 2}${intl.formatMessage({ id: 'detail.purchase.tips20' })},${maxNumber}${intl.formatMessage({ id: 'detail.purchase.tips18' })}` };
return { type: 'error', message: `最长${maxNumber * 2}个字符,${maxNumber}个汉字` };
} else {
return null;
}
......
......@@ -79,8 +79,8 @@ const SearchDetail = () => {
},
{
col: [
{ label: intl.formatMessage({ id: 'balance.shoukuanfang' }), extra: data.payer, type: 'text' },
{ label: intl.formatMessage({ id: 'balance.fukuanfang' }), extra: data.payee, type: 'text' },
{ label: intl.formatMessage({ id: 'balance.shoukuanfang' }), extra: data.payee, type: 'text' },
{ label: intl.formatMessage({ id: 'balance.fukuanfang' }), extra: data.payer, type: 'text' },
{ label: intl.formatMessage({ id: 'balance.faqiduizhangfang' }), extra: data.launchReconciliation, type: 'text' },
{ label: intl.formatMessage({ id: 'balance.duizhangzongjine' }), extra: ${priceFormat(data.reconciliationMoneyAmount)}`, type: 'text' },
{ label: intl.formatMessage({ id: 'balance.danjushijian' }), extra: data.createTime, type: 'text' },
......
......@@ -78,7 +78,7 @@ const ReadyConfirm: React.FC = () => {
title: intl.formatMessage({ id: 'balance.caozuo' }),
key: 'operate',
dataIndex: 'operate',
render: (text: any, record: any) => <Link to={`readyConfirm/detail?id=${record.reconciliationId}&no=${text}`}>{intl.formatMessage({ id: 'balance.queren' })}</Link>
render: (text: any, record: any) => <Link to={`readyConfirm/detail?id=${record.reconciliationId}&no=${record.reconciliationNo}`}>{intl.formatMessage({ id: 'balance.queren' })}</Link>
}];
return (
......
......@@ -43,6 +43,9 @@ const TABLINK = [
{ id: 'billLayout', title: '请款明细' },
]
const reg = /(^[1-9]{1}[0-9]*$)|(^[0-9]*\.[0-9]{0,3}$)/
const createMonthOrDays = (number: number, type: string) => {
let _list = [];
for (let i = 1; i <= number; i++) {
......@@ -359,7 +362,17 @@ const Add = () => {
<Col>
<Form.Item
name='payDate'
rules={[{ required: true, message: '请选择账期' }]}
rules={[
{ required: true, message: '请选择账期' },
{
validator: (_, value) => {
if (!(/(^[1-9]\d*$)/.test(value))) {
return Promise.reject(new Error('请输入整数'))
}
return Promise.resolve()
}
},
]}
>
<Input placeholder={'请输入账期'} addonAfter={'天'} />
</Form.Item>
......@@ -510,6 +523,9 @@ const Add = () => {
rules={[
{
validator: (_, value) => {
if (!reg.test(value)) {
return Promise.reject(new Error('请款金额需要大于0'))
}
if (value > (record.billAmount - record.paid - record.appliedUnpaid)) {
return Promise.reject(new Error('请款金额不能超过单据金额减去已付款及已请款待付款的和'))
}
......
......@@ -3,12 +3,29 @@
flex-direction: row;
}
.period {
.flexRow();
margin-bottom: 20px;
.radiosContainer {
display: flex;
flex-direction: row;
.dayRadio {
margin-right: 20px
}
}
.values {
.days {
.flexRow();
margin-left: 25px;
// margin-left: 25px;
margin-top: 25px;
}
}
\ No newline at end of file
}
// .period {
// .flexRow();
// margin-bottom: 20px;
// .days {
// .flexRow();
// margin-left: 25px;
// }
// }
\ No newline at end of file
......@@ -5,6 +5,9 @@ import { Radio, Input, Tooltip } from 'antd';
import { QuestionCircleOutlined } from '@ant-design/icons';
import styles from './index.less';
import { registerValidationRules } from '@formily/antd' // 或者 @formily/next
import SettleMethod, { SettleActiveType } from './settleMethod';
type SettleMethodProps = React.ComponentProps<typeof SettleMethod>;
const DAY = 1;
const MONTH = 2;
......@@ -12,106 +15,52 @@ const MONTH = 2;
registerValidationRules({
settleMethodRule: value => {
const { active, otherValues } = value;
const isNumber = /^\d+$/; // 数字
const pattern = /[0-9]+\.[0-9]*/;
if (active == MONTH) {
return (otherValues[1] < 0 || otherValues[1] > 31) || pattern.test(otherValues[1]) ? getIntl().formatMessage({ id: 'balance.components.settleMethod.registerValidationRules.1' }) : ''
} else {
return !isNumber.test(otherValues[0]) || pattern.test(otherValues[0]) ? getIntl().formatMessage({ id: 'balance.components.settleMethod.registerValidationRules.2' }) : ""
}
return !isNumber.test(otherValues[1]) || ((otherValues[1] < 0 || otherValues[1] > 31) || pattern.test(otherValues[1])) ? getIntl().formatMessage({ id: 'balance.components.settleMethod.registerValidationRules.1' }) : ''
}
return !isNumber.test(otherValues[0]) || pattern.test(otherValues[0]) ? getIntl().formatMessage({ id: 'balance.components.settleMethod.registerValidationRules.2' }) : ""
}
})
const SettleMethod = (props) => {
const { active = DAY, otherValues = [30, 1] } = props.value || {};
const { daysVisible, monthVisible } = props;
const intl = useIntl();
const handleChange = (e, type) => {
if (active == type) {
return;
}
const previewValue = otherValues
// setActive(type)
props.onChange({
active: type,
otherValues: previewValue
})
}
type XcomponenetProps = {
options: {
days: boolean,
month: boolean
},
default: any
}
const handleInputChange = (value, type) => {
const target = type - 1;
const temp = [...otherValues];
temp[target] = value;
props.onChange({
active: type,
otherValues: temp
})
interface Iprops {
/** 编辑状态 */
editable: boolean,
initialValue?: SettleMethodProps['value'],
value: SettleMethodProps['value'],
props: {
['x-component-props']: XcomponenetProps
}
if (!monthVisible && !daysVisible) {
return null
mutators: {
change: (value: any) => void
}
return (
<div>
{
daysVisible
? (
<div className={styles.period}>
<div>
<Radio name="method" checked={active == DAY} onChange={(e) => handleChange(e, DAY)}>{intl.formatMessage({ id: 'balance.components.settleMethod.method.1' })}</Radio>
<Tooltip title={intl.formatMessage({ id: 'balance.components.settleMethod.method.1.tooltip' })}>
<QuestionCircleOutlined />
</Tooltip>
</div>
<div className={styles.days}>
<div style={{ margin: '0 20px 0 12px' }}>{intl.formatMessage({ id: 'balance.components.settleMethod.days.1' })}</div>
<div>
<Input
addonAfter={intl.formatMessage({ id: 'balance.components.settleMethod.days.1.addonAfter' })}
value={otherValues[DAY - 1]}
onChange={(e) => handleInputChange(e.target.value, DAY)}
disabled={active !== DAY}
style={{ width: '160px' }}
/></div>
</div>
</div>
)
: null
}
{
monthVisible
? <div className={styles.period}>
<div >
<Radio name="method" checked={active == MONTH} onChange={(e) => handleChange(e, MONTH)}>{intl.formatMessage({ id: 'balance.components.settleMethod.method.2' })}</Radio>
<Tooltip title={intl.formatMessage({ id: 'balance.components.settleMethod.method.2.tooltip' })}>
<QuestionCircleOutlined />
</Tooltip>
</div>
<div className={styles.days}>
<div style={{ marginRight: '20px' }}>{intl.formatMessage({ id: 'balance.components.settleMethod.days.2' })}</div>
<div><Input addonAfter={intl.formatMessage({ id: 'balance.components.settleMethod.days.2.addonAfter' })} style={{ width: '160px' }} value={otherValues[MONTH - 1]} onChange={(e) => handleInputChange(e.target.value, MONTH)} disabled={active !== MONTH} /></div> </div>
</div>
: null
}
</div>
)
}
const Index = (props) => {
const Index: React.FC<Iprops> & { isFieldComponent: boolean } = (props: Iprops) => {
const editable = props.editable;
const value = props.value || { active: 0, otherValues: [30, 1] };
const componentProps = props.props['x-component-props'] || {};
const options = componentProps.options || {};
const value = props.value || { active: 1, otherValues: [30, 1] };
const componentProps = props.props['x-component-props'] || {} as XcomponenetProps;
const options = componentProps.options || ({} as XcomponenetProps['options']);
const intl = useIntl();
// 默认选择
useEffect(() => {
// const componentProps = props.props['x-component-props'] || {};
const defaultValue = componentProps.default || {};
if (!options.days && !options.month) {
if (!options?.days && !options?.month) {
return
}
if (typeof props.initialValue == 'undefined') {
......@@ -127,15 +76,19 @@ const Index = (props) => {
}
if (!editable) {
return value.active == 1 ? intl.formatMessage({ id: 'balance.components.settleMethod.index.1' }, { data: value.otherValues[0] }) : intl.formatMessage({ id: 'balance.components.settleMethod.index.2' }, { data: value.otherValues[1] })
return (
<div>
{value.active == DAY ? intl.formatMessage({ id: 'balance.components.settleMethod.index.1' }, { data: value.otherValues[0] }) : intl.formatMessage({ id: 'balance.components.settleMethod.index.2' }, { data: value.otherValues[1] })}
</div>
)
}
return (
<div>
<SettleMethod
value={value}
daysVisible={options.days}
monthVisible={options.month}
daysVisible={options?.days || false}
monthVisible={options.month || false}
onChange={onChange}
/>
</div>
......
import { QuestionCircleOutlined } from "@ant-design/icons";
import { Input, Radio, Tooltip } from "antd";
import { useIntl } from "umi";
import styles from './index.less';
const DAY = 1;
const MONTH = 2;
/** 1 => 账期,2 => 月结 */
export type SettleActiveType = 1 | 2;
interface Iprops {
value: {
active: SettleActiveType,
/** 账期天数, 每月结算日 */
otherValues: [number, number]
},
onChange: (params: {active: 1 | 2, otherValues: [number, number]}) => void,
/** 是否显示账期结算 */
daysVisible: boolean,
/** 是否显示月结 */
monthVisible: boolean
}
const SettleMethod: React.FC<Iprops> = (props: Iprops) => {
const { value, daysVisible, monthVisible, onChange } = props;
const { active = DAY, otherValues = [30, 1] } = value || {};
const intl = useIntl();
const handleChange = (e, type: SettleActiveType) => {
if (active == type) {
return;
}
const previewValue = otherValues
// setActive(type)
onChange({
active: type,
otherValues: previewValue
})
}
const handleInputChange = (value: string, type: SettleActiveType) => {
const target = type - 1;
const temp = [...otherValues];
temp[target] = value as unknown as number;
props.onChange({
active: type,
otherValues: temp as [number, number]
})
}
if (!monthVisible && !daysVisible) {
return null
}
return (
<div>
<div>
<div className={styles.radiosContainer}>
{
daysVisible && (
<div className={styles.dayRadio}>
<Radio name="method" checked={active == DAY} onChange={(e) => handleChange(e, DAY)}>{intl.formatMessage({ id: 'balance.components.settleMethod.method.1' })}</Radio>
<Tooltip title={intl.formatMessage({ id: 'balance.components.settleMethod.method.1.tooltip' })}>
<QuestionCircleOutlined />
</Tooltip>
</div>
) || null
}
{
monthVisible && (
<div>
<Radio name="method" checked={active == MONTH} onChange={(e) => handleChange(e, MONTH)}>{intl.formatMessage({ id: 'balance.components.settleMethod.method.2' })}</Radio>
<Tooltip title={intl.formatMessage({ id: 'balance.components.settleMethod.method.2.tooltip' })}>
<QuestionCircleOutlined />
</Tooltip>
</div>
) || null
}
</div>
<div className={styles.values}>
{
active === DAY
? <div className={styles.days}>
<div style={{margin: '0 20px 0 0px'}}>{intl.formatMessage({ id: 'balance.components.settleMethod.days.1' })}</div>
<div>
<Input
addonAfter={intl.formatMessage({ id: 'balance.components.settleMethod.days.1.addonAfter' })}
value={otherValues[0]}
onChange={(e) => handleInputChange(e.target.value, DAY)}
disabled={active !== DAY}
style={{width: '160px'}}
/></div>
</div>
: <div className={styles.days}>
<div style={{marginRight: '20px'}}>{intl.formatMessage({ id: 'balance.components.settleMethod.days.2' })}</div>
<div>
<Input
// addonAfter={"号"}
addonAfter={intl.formatMessage({ id: 'balance.components.settleMethod.days.2.addonAfter' })}
style={{width: '160px'}}
value={otherValues[1]}
onChange={(e) => handleInputChange(e.target.value, MONTH)}
disabled={active !== MONTH}
/>
</div>
</div>
}
</div>
</div>
</div>
)
}
export default SettleMethod
\ No newline at end of file
......@@ -16,6 +16,8 @@ interface WriteOffDrawerProps {
onOk?: (rows: any[]) => void
}
const intl = getIntl();
const reg = /(^[1-9]{1}[0-9]*$)|(^[0-9]*\.[0-9]{0,3}$)/
const WriteOffDrawer: React.FC<WriteOffDrawerProps> = (props: WriteOffDrawerProps) => {
const { visible, record, editAble = false, onClose, onOk } = props;
const ref = useRef<any>({})
......@@ -119,7 +121,10 @@ const WriteOffDrawer: React.FC<WriteOffDrawerProps> = (props: WriteOffDrawerProp
rules={[
{
validator: (_, value) => {
return value > record.canWriteAmount ? Promise.reject(new Error('可以核销金额')) : Promise.resolve()
if (!reg.test(value)) {
return Promise.reject(new Error('本次核销金额需要大于0'))
}
return value > record.canWriteAmount ? Promise.reject(new Error('本次核销金额不能大于可以核销金额')) : Promise.resolve()
}
},
]}
......
......@@ -32,7 +32,7 @@ import {
} from '@/services/SettleV2Api';
import { getMemberManageLowerPageBynamerole, getMemberManageRoleSubList, getMemberManageUpperPage } from '@/services/MemberV2Api';
import { getManageRuleConfigurationList } from '@/services/ManageV2Api';
import { getOrderPlatformSettlementTypeList } from '@/services/OrderNewV2Api';
import { getOrderPlatformSettlementCategoryList, getOrderPlatformSettlementTypeList } from '@/services/OrderNewV2Api';
const formActions = createFormActions();
......@@ -92,7 +92,7 @@ const MemberSettleAdd: React.FC = () => {
title: intl.formatMessage({ id: 'balance.settleRules.memberSettle.info.columns.operation' }),
render: (text, record) => {
return (
<div onClick={() => handleRemove(record.uniqueId)}>{intl.formatMessage({ id: 'balance.settleRules.memberSettle.info.columns.operation.button' })}</div>
<a onClick={() => handleRemove(record.uniqueId)}>{intl.formatMessage({ id: 'balance.settleRules.memberSettle.info.columns.operation.button' })}</a>
)
}
}
......@@ -110,12 +110,21 @@ const MemberSettleAdd: React.FC = () => {
// 从PAAS平台--规则配置--平台规则配置取已勾选的结算方式决定是否显示结算方式
const fetchBalancedMethods = async () => {
const { data } = await getManageRuleConfigurationList({ platformType: '5' });
const length = data.length
return {
days: length > 0 && data[0].check,
month: length > 1 && data[1].check
};
const { data, code } = await getOrderPlatformSettlementCategoryList();
// const length = data.length
let config = {
days: false,
month: false,
}
if (code !== 1000) {
return config
}
const codeToMap = ["", "days", "month"]
data.forEach((_item) => {
config[codeToMap[_item.methodCode]] = true
})
return config
}
// 获取适用会员
......
......@@ -82,6 +82,10 @@ export const addSchema = {
type: 'string',
'x-rules': [
{ required: true, message: intl.formatMessage({ id: 'balance.settleRules.memberSettle.info.schema.addSchema.basicTab.name.message' }) },
{
limitByte: true,
maxByte: 48,
}
]
},
settlementWay: {
......
......@@ -338,13 +338,16 @@ const MemberProfile: React.FC<IProps> = (props) => {
{/* 入库信息 */}
{(
dataSource?.depositDetailTexts?.length > 0
(
dataSource?.depositDetailTexts?.length
|| dataSource?.depositDetails?.length
) > 0
&& !editableDeposit
) ? (
<Col span={24}>
<AnchorPage.Item itemKey="incomingInfo">
<MemberDocIncomingInfo
dataSource={dataSource?.depositDetailTexts || []}
dataSource={dataSource?.depositDetailTexts || dataSource?.depositDetails || []}
showNew={showNew}
id="incomingInfo"
/>
......
......@@ -57,6 +57,10 @@
font-size: @font-size-sm * 2;
color: @error-color;
}
&-webs {
.textOverflow();
}
&-actions {
margin-top: @margin-xss;
......
......@@ -140,10 +140,12 @@ const CouponCard: React.FC<CouponCardProps> = (props: CouponCardProps) => {
券码:
{data.code}
</div>
<div className={styles['coupon-card-webs']}>
适用商城:
{data.shopList.map((item) => item.shopName).join('、')}
</div>
<Tooltip title={data.shopList.map((item) => item.shopName).join('、')}>
<div className={styles['coupon-card-webs']}>
适用商城:
{data.shopList.map((item) => item.shopName).join('、')}
</div>
</Tooltip>
</div>
<div className={styles['coupon-card-right']}>
<div className={styles['coupon-card-yuanWrap']}>
......
......@@ -7,6 +7,8 @@ import styles from './index.less';
import { enumName, WEB } from '@/constants/environment';
import StatusTag from '@/components/StatusTag';
import fixture from '@/assets/activity/fixture.png'
import { REQUEST_HEADER, TOP_DOMAIN } from '@/constants';
// REQUEST_HEADER
const { Paragraph } = Typography;
interface Iprops {
......@@ -18,6 +20,8 @@ interface Iprops {
endTime: string,
statusName: string,
id: number,
/** 商城子域名 */
url: string,
/** 1.WEB 2.H5 3.小程序 4.APP */
environment: 1 | 2 | 3 | 4 | number,
onRemove?: ((id: number) => void )| null,
......@@ -54,7 +58,8 @@ const ActiveItem: React.FC<Iprops> = (props: Iprops) => {
onRemove,
status,
onChangeStatus,
environment
environment,
url,
} = props;
const handleRemove = () => {
......@@ -104,7 +109,7 @@ const ActiveItem: React.FC<Iprops> = (props: Iprops) => {
{
environment === WEB && status !== END && (
<div className={styles.copyLink}>
<Paragraph copyable={{ text: `http://b2b.lingxidev.com/activity/${id}` }} />
<Paragraph copyable={{ text: `${REQUEST_HEADER}${url}.${TOP_DOMAIN}/activity/${id}` }} />
</div>
)
}
......
......@@ -38,6 +38,27 @@
height: 100%;
overflow: auto;
:global {
.ant-tabs-nav {
margin-bottom: 0px;
}
.ant-tabs-nav-wrap {
flex: 1;
width: 100%;
padding: 0 16px;
}
.ant-tabs-nav-list {
width: 100%;
}
.ant-tabs-tab {
flex: 1;
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
}
}
.expand-icon {
position: absolute;
top: 35px;
......
......@@ -128,6 +128,7 @@ const ActivePage = () => {
endTime={_item.endTime as unknown as string}
environment={_item.environment}
status={_item.status}
url={_item.url}
onRemove={handleRemove}
onChangeStatus={onChangeStatus}
/>
......
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