Commit fecfccdc authored by 前端-黄佳鑫's avatar 前端-黄佳鑫
parents fd350c8c e8034817
......@@ -15,105 +15,105 @@
/**
* 待提交审核
*/
export const CREDIT_INNER_STATUS_UNCOMMITTED = 1;
/**
* 提交审核失败
*/
export const CREDIT_INNER_STATUS_COMMITTED_FAILED = 2;
/**
* 提交审核成功
*/
export const CREDIT_INNER_STATUS_COMMITTED_SUCCESS = 3;
/**
* 一级审核失败
*/
export const CREDIT_INNER_STATUS_FAILED_1 = 4;
/**
* 一级审核通过
*/
export const CREDIT_INNER_STATUS_SUCCESS_1 = 5;
/**
* 二级审核失败
*/
export const CREDIT_INNER_STATUS_FAILED_2 = 6;
/**
* 二级审核通过
*/
export const CREDIT_INNER_STATUS_SUCCESS_2 = 7;
/**
* 三级审核失败
*/
export const CREDIT_INNER_STATUS_FAILED_3 = 8;
/**
* 三级审核通过
*/
export const CREDIT_INNER_STATUS_SUCCESS_3 = 9;
/**
* 审核不通过
*/
export const CREDIT_INNER_STATUS_FAILED = 10;
/**
* 审核通过
*/
export const CREDIT_INNER_STATUS_CONFIRM_SUCCESS = 11;
export const CREDIT_INNER_STATUS = {
[CREDIT_INNER_STATUS_UNCOMMITTED]: '待提交审核',
[CREDIT_INNER_STATUS_COMMITTED_FAILED]: '提交审核失败',
[CREDIT_INNER_STATUS_COMMITTED_SUCCESS]: '提交审核成功',
[CREDIT_INNER_STATUS_FAILED_1]: '一级审核失败',
[CREDIT_INNER_STATUS_SUCCESS_1]: '一级审核通过',
[CREDIT_INNER_STATUS_FAILED_2]: '二级审核失败',
[CREDIT_INNER_STATUS_SUCCESS_2]: '二级审核通过',
[CREDIT_INNER_STATUS_FAILED_3]: '三级审核失败',
[CREDIT_INNER_STATUS_SUCCESS_3]: '三级审核通过',
[CREDIT_INNER_STATUS_FAILED]: '审核不通过',
[CREDIT_INNER_STATUS_CONFIRM_SUCCESS]: '审核通过',
};
export const CREDIT_INNER_STATUS_UNCOMMITTED = 1;
/**
* 提交审核失败
*/
export const CREDIT_INNER_STATUS_COMMITTED_FAILED = 2;
/**
* 提交审核成功
*/
export const CREDIT_INNER_STATUS_COMMITTED_SUCCESS = 3;
/**
* 一级审核失败
*/
export const CREDIT_INNER_STATUS_FAILED_1 = 4;
/**
* 一级审核通过
*/
export const CREDIT_INNER_STATUS_SUCCESS_1 = 5;
/**
* 二级审核失败
*/
export const CREDIT_INNER_STATUS_FAILED_2 = 6;
/**
* 二级审核通过
*/
export const CREDIT_INNER_STATUS_SUCCESS_2 = 7;
/**
* 三级审核失败
*/
export const CREDIT_INNER_STATUS_FAILED_3 = 8;
/**
* 三级审核通过
*/
export const CREDIT_INNER_STATUS_SUCCESS_3 = 9;
/**
* 审核不通过
*/
export const CREDIT_INNER_STATUS_FAILED = 10;
/**
* 审核通过
*/
export const CREDIT_INNER_STATUS_CONFIRM_SUCCESS = 11;
export const CREDIT_INNER_STATUS = {
[CREDIT_INNER_STATUS_UNCOMMITTED]: '待提交审核',
[CREDIT_INNER_STATUS_COMMITTED_FAILED]: '提交审核失败',
[CREDIT_INNER_STATUS_COMMITTED_SUCCESS]: '提交审核成功',
[CREDIT_INNER_STATUS_FAILED_1]: '一级审核失败',
[CREDIT_INNER_STATUS_SUCCESS_1]: '一级审核通过',
[CREDIT_INNER_STATUS_FAILED_2]: '二级审核失败',
[CREDIT_INNER_STATUS_SUCCESS_2]: '二级审核通过',
[CREDIT_INNER_STATUS_FAILED_3]: '三级审核失败',
[CREDIT_INNER_STATUS_SUCCESS_3]: '三级审核通过',
[CREDIT_INNER_STATUS_FAILED]: '审核不通过',
[CREDIT_INNER_STATUS_CONFIRM_SUCCESS]: '审核通过',
};
// 授信内部状态(下级)
// 授信内部状态(下级)
/**
* 待提交
*/
export const CREDIT_INNER_STATUS_UNCOMMITTED_PURCHASER = 1;
/**
* 已提交
*/
export const CREDIT_INNER_STATUS_COMMITTED_PURCHASER = 2;
export const CREDIT_INNER_STATUS_PURCHASER = {
[CREDIT_INNER_STATUS_UNCOMMITTED_PURCHASER]: '待提交',
[CREDIT_INNER_STATUS_COMMITTED_PURCHASER]: '已提交',
};
/**
* 待提交
*/
export const CREDIT_INNER_STATUS_UNCOMMITTED_PURCHASER = 1;
/**
* 已提交
*/
export const CREDIT_INNER_STATUS_COMMITTED_PURCHASER = 2;
export const CREDIT_INNER_STATUS_PURCHASER = {
[CREDIT_INNER_STATUS_UNCOMMITTED_PURCHASER]: '待提交',
[CREDIT_INNER_STATUS_COMMITTED_PURCHASER]: '已提交',
};
// 授信外部状态
// 授信外部状态
/**
* 待提交
*/
export const CREDIT_OUTER_STATUS_UNCOMMITTED = 1;
/**
* 待确认
*/
export const CREDIT_OUTER_STATUS_UNCONFIRMED = 2;
/**
* 接受申请
*/
export const CREDIT_OUTER_STATUS_SUCCESS = 3;
/**
* 不接受申请
*/
export const CREDIT_OUTER_STATUS_FAILED = 4;
export const CREDIT_OUTER_STATUS = {
[CREDIT_OUTER_STATUS_UNCOMMITTED]: '待提交',
[CREDIT_OUTER_STATUS_UNCONFIRMED]: '待确认',
[CREDIT_OUTER_STATUS_SUCCESS]: '接受申请',
[CREDIT_OUTER_STATUS_FAILED]: '不接受申请',
};
/**
* 待提交
*/
export const CREDIT_OUTER_STATUS_UNCOMMITTED = 1;
/**
* 待确认
*/
export const CREDIT_OUTER_STATUS_UNCONFIRMED = 2;
/**
* 接受申请
*/
export const CREDIT_OUTER_STATUS_SUCCESS = 3;
/**
* 不接受申请
*/
export const CREDIT_OUTER_STATUS_FAILED = 4;
export const CREDIT_OUTER_STATUS = {
[CREDIT_OUTER_STATUS_UNCOMMITTED]: '待提交',
[CREDIT_OUTER_STATUS_UNCONFIRMED]: '待确认',
[CREDIT_OUTER_STATUS_SUCCESS]: '接受申请',
[CREDIT_OUTER_STATUS_FAILED]: '不接受申请',
};
// 授信还款状态
// 授信还款状态
/**
* 账单待还
......@@ -144,28 +144,28 @@ export const CREDIT_REPAYMENT_STATUS = {
/**
* 未申请
*/
export const CREDIT_STATUS_NOT_APPLIED = 1;
/**
* 申请中
*/
export const CREDIT_STATUS_APPLYING = 2;
/**
* 正常
*/
export const CREDIT_STATUS_NORMAL = 3;
/**
* 已冻结
*/
export const CREDIT_STATUS_FROZEN = 4;
export const CREDIT_STATUS = {
[CREDIT_STATUS_NOT_APPLIED]: '未申请',
[CREDIT_STATUS_APPLYING]: '申请中',
[CREDIT_STATUS_NORMAL]: '正常',
[CREDIT_STATUS_FROZEN]: '已冻结',
};
export const CREDIT_STATUS_NOT_APPLIED = 1;
/**
* 申请中
*/
export const CREDIT_STATUS_APPLYING = 2;
/**
* 正常
*/
export const CREDIT_STATUS_NORMAL = 3;
/**
* 已冻结
*/
export const CREDIT_STATUS_FROZEN = 4;
export const CREDIT_STATUS = {
[CREDIT_STATUS_NOT_APPLIED]: '未申请',
[CREDIT_STATUS_APPLYING]: '申请中',
[CREDIT_STATUS_NORMAL]: '正常',
[CREDIT_STATUS_FROZEN]: '已冻结',
};
// 账单交易项目
// 账单交易项目
/**
* 订单支付
......@@ -189,50 +189,49 @@ export const BILL_TRADE_OPERATION = {
// 支付渠道
/**
* 无需支付
*/
export const PAY_CHANNEL_FREE = 0;
/**
* 支付宝
*/
export const PAY_CHANNEL_ALI = 1;
/**
* 微信
*/
export const PAY_CHANNEL_WECHAT = 2;
/**
* 银联
*/
export const PAY_CHANNEL_UNION = 3;
/**
* 余额
*/
export const PAY_CHANNEL_BALANCE = 4;
/**
* 线下支付线上确认
*/
export const PAY_CHANNEL_OFFLINE = 5;
/**
* 授信
*/
export const PAY_CHANNEL_CREDIT = 6;
/**
* 货到付款
*/
export const PAY_CHANNEL_COD = 7;
/**
* 月结
*/
export const PAY_CHANNEL_MONTHLY_STATEMENT = 8;
/**
* 账期
*/
export const PAY_CHANNEL_PAYMENT_DAYS = 9;
/**
* 积分支付
*/
export const PAY_CHANNEL_INTEGRAL = 0;
/**
* 支付宝
*/
export const PAY_CHANNEL_ALI = 1;
/**
* 微信
*/
export const PAY_CHANNEL_WECHAT = 2;
/**
* 银联
*/
export const PAY_CHANNEL_UNION = 3;
/**
* 余额
*/
export const PAY_CHANNEL_BALANCE = 4;
/**
* 线下支付线上确认
*/
export const PAY_CHANNEL_OFFLINE = 5;
/**
* 授信
*/
export const PAY_CHANNEL_CREDIT = 6;
/**
* 货到付款
*/
export const PAY_CHANNEL_COD = 7;
/**
* 支付渠道对应中文
*/
export const PAY_CHANNEL = {
[PAY_CHANNEL_INTEGRAL]: '积分支付',
[PAY_CHANNEL_ALI]: '支付宝',
[PAY_CHANNEL_WECHAT]: '微信',
[PAY_CHANNEL_UNION]: '银联',
[PAY_CHANNEL_BALANCE]: '余额',
[PAY_CHANNEL_OFFLINE]: '线下支付线上确认',
[PAY_CHANNEL_CREDIT]: '授信',
[PAY_CHANNEL_COD]: '货到付款',
};
export const PAY_CHANNEL_INTEGRAL = 10;
......@@ -241,35 +240,35 @@ export const BILL_TRADE_OPERATION = {
/**
* 线上支付
*/
export const PAY_WAY_ONLINE = 1;
/**
* 线下支付
*/
export const PAY_WAY_OFFLINE = 2;
/**
* 授信支付
*/
export const PAY_WAY_CREDIT = 3;
/**
* 货到付款
*/
export const PAY_WAY_COD = 4;
/**
* 账期
*/
export const PAY_WAY_DEADLINE = 5;
/**
* 月结
*/
export const PAY_WAY_MONTH = 6;
/**
* 合同内清算
*/
export const PAY_WAY_CONTRACT = 7;
/**
* 支付方式对应中文
export const PAY_WAY_ONLINE = 1;
/**
* 线下支付
*/
export const PAY_WAY_OFFLINE = 2;
/**
* 授信支付
*/
export const PAY_WAY_CREDIT = 3;
/**
* 货到付款
*/
export const PAY_WAY_COD = 4;
/**
* 账期
*/
export const PAY_WAY_DEADLINE = 5;
/**
* 月结
*/
export const PAY_WAY_MONTH = 6;
/**
* 合同内清算
*/
export const PAY_WAY_CONTRACT = 7;
/**
* 支付方式对应中文
*/
export const PAYWAY = {
[PAY_WAY_ONLINE]: '线上支付',
[PAY_WAY_OFFLINE]: '线下支付',
......
/* --------------------------------- 结算方式 -------------------------------- */
/**
* 现结
*/
export const PAY_TYPE_CASH = 1;
/**
* 账期(按天)
*/
export const PAY_TYPE_PAYMENT_DAYS_DAY = 2;
/**
* 账期(按月)
*/
export const PAY_TYPE_PAYMENT_DAYS_MONTH = 3;
/**
* 月结
*/
export const PAY_TYPE_MONTHLY_STATEMENT = 4;
\ No newline at end of file
......@@ -3,6 +3,7 @@ import { Dropdown, Space, Menu, message } from 'antd';
import { CaretDownOutlined } from '@ant-design/icons';
import { getAuth, setAuth, setRouters } from '@/utils/auth';
import { postMemberLoginSwitchrole } from '@/services/MemberV2Api';
import { useIntl } from 'umi'
interface MemberRole {
memberRoleId: number;
......@@ -11,6 +12,7 @@ interface MemberRole {
};
const Roles: React.FC = () => {
const intl = useIntl()
const [curRole, setCurRole] = useState<MemberRole>(null);
const [roles, setRoles] = useState<MemberRole[]>([]);
......
......@@ -203,6 +203,16 @@ export default {
'Please enter 0 or a positive integer, up to 8 digits',
'member.management.memberPrComingClassify.drawer.form.classify.invoiceTypeName':'Invoice Type',
'member.management.memberPrComingClassify.drawer.form.classify.taxPoint':'Tax Point',
'member.management.memberPrComingClassify.drawer.form.classify.payType': 'Settlement Method',
'member.management.memberPrComingClassify.drawer.form.classify.payType.required': 'Please choose a settlement method',
'member.management.memberPrComingClassify.drawer.form.classify.month.addonAfter': 'months',
'member.management.memberPrComingClassify.drawer.form.classify.month.legal': 'Please enter a positive integer',
'member.management.memberPrComingClassify.drawer.form.classify.monthDay': 'Settlement Date',
'member.management.memberPrComingClassify.drawer.form.classify.monthDay.addonAfter': 'monthDay',
'member.management.memberPrComingClassify.drawer.form.classify.monthDay.legal': 'Please enter a positive integer',
'member.management.memberPrComingClassify.drawer.form.classify.monthDay.limit': 'Please enter a value greater than 0 but less than or equal to 28',
'member.management.memberPrComingClassify.drawer.form.classify.days.addonAfter': 'days',
'member.management.memberPrComingClassify.drawer.form.classify.days.legal': 'Please enter a positive integer',
'member.management.memberPrComingClassify.drawer.form.verify':'Document review',
'member.management.memberPrComingClassify.drawer.form.verify.agree':'Whether it passes',
'member.management.memberPrComingClassify.drawer.form.verify.agree.pass':'Approval passed',
......@@ -528,8 +538,9 @@ export default {
'member.components.MemberDocCategory.partnerTypeName':'Membership',
'member.components.MemberDocCategory.category':'Main category',
'member.components.MemberDocCategory.category.name':'Category',
'member.components.MemberDocCategory.category.paymentDay':'Payment cycle (days)',
'member.components.MemberDocCategory.category.paymentDay':'결제 방식',
'member.components.MemberDocCategory.category.invoiceTypeName':'Invoice Type',
'member.components.MemberDocCategory.category.taxPoint':'Tax Point',
'member.components.MemberDocCategory.title':'Category Information',
'member.components.MemberDocCategory.edit':'Modify',
'member.components.MemberDocCategory.edit.message':'Submitting, please wait...',
......
......@@ -19,7 +19,7 @@ export default {
'priceManage.constant.memberColumns.roleName':'Role',
'priceManage.constant.memberColumns.ctl':'Operation',
'priceManage.effect.goods':'Corresponding goods',
'priceManage.effect.unitPrice':'Unit Price',
'priceManage.effect.unitPrice':'Unit price',
'priceManage.effect.index':'Index',
'priceManage.effect.goodsId':'Product ID',
'priceManage.effect.goodsName':'Product name',
......@@ -114,4 +114,4 @@ export default {
'priceManage.schema.formProduct.customerCategoryId':'Product category',
'priceManage.schema.formProduct.brandId':'Please select a brand',
'priceManage.schema.formProduct.submit':'Query',
}
\ No newline at end of file
}
......@@ -161,6 +161,11 @@ export default {
'afterService.components.UploadPaymentVoucher.bankDeposit': '계좌 개설 은행',
'afterService.components.UploadPaymentVoucher.fileList': '환불 증명서 업로드',
'afterService.components.UploadPaymentVoucher.fileList.required': '환불 증명서를 올려주세요.',
'afterService.components.MonthlyStatement.title': '월 정산 지급 환불 확인',
'afterService.components.MonthlyStatement.payChannel': '지불 경로',
'afterService.components.MonthlyStatement.tip': '지불방식은 월결산 주문으로, 사용자가 환불방식과 환불금액을 확인한후 시스템은 지불절차에 따라 환불작업이 완성된다. 실제 자금의 환불은 거래 쌍방이 결산절차를 통해 처리한다.',
'afterService.components.PaymentDays.title': '정기 지급 환불 확인',
'afterService.components.PaymentDays.tip': '지불방식은 계정기간의 주문으로, 사용자가 환불방식과 환불금액을 확인한후 시스템은 지불절차에 따라 환불동작을 완성한다. 실제 자금의 환불은 거래 쌍방이 결산과정을 통해 처리한다.',
'afterService.components.RepairAddressInfo.title': '수리 주소',
......
......@@ -83,8 +83,7 @@ export default {
'member.management.maintain.black.getBlocked.form.reason.placeholder': '최대 120자, 한자 60자를 입력하십시오',
'member.management.maintain.eliminate.remove': '관계를 해제하다',
'member.management.maintain.eliminate.remove.title': '회원 관계 해제',
'member.management.maintain.eliminate.remove.title-description':
'현재 회원 관계를 해제하고 회원의 권익을 누리지 않는다.회원 관계 재신청 가능',
'member.management.maintain.eliminate.remove.title-description': '현재 회원 관계를 해제하고 회원의 권익을 누리지 않는다.회원 관계 재신청 가능',
'member.management.maintain.eliminate.remove.form.select.placeholder': '선택하십시오.',
'member.management.maintain.eliminate.remove.form.date': '해제 날짜',
'member.management.maintain.eliminate.remove.form.date.rules-required': '해제 날짜를 선택하십시오',
......@@ -93,8 +92,7 @@ export default {
'member.management.maintain.eliminate.remove.form.reason.rules-required': '원인을 기입해 주십시오',
'member.management.maintain.freeze.freeze': '얼어붙다',
'member.management.maintain.freeze.freeze.title': '회원 동결',
'member.management.maintain.freeze.freeze.title-description':
'현재 회원 관계를 해제하고 회원의 권익을 누리지 않는다.회원 관계 재신청 가능',
'member.management.maintain.freeze.freeze.title-description': '현재 회원 관계를 해제하고 회원의 권익을 누리지 않는다.회원 관계 재신청 가능',
'member.management.maintain.freeze.freeze.form.reason': '회원 동결 원인',
'member.management.maintain.freeze.freeze.form.reason.placeholder': '최대 120자, 한자 60자를 입력하십시오',
'member.management.maintain.freeze.freeze.form.reason.rules-required': '원인을 기입해 주십시오',
......@@ -166,8 +164,7 @@ export default {
'member.management.memberPrComingInvestigate.drawer.form.inspect.score': '고찰 평점',
'member.management.memberPrComingInvestigate.drawer.form.inspect.score.rules-money': '소수점 두 자리 입력',
'member.management.memberPrComingInvestigate.drawer.form.inspect.result': '고찰 결과',
'member.management.memberPrComingInvestigate.drawer.form.inspect.result-placeholder':
'최대 60자, 한자 30자를 입력하십시오',
'member.management.memberPrComingInvestigate.drawer.form.inspect.result-placeholder': '최대 60자, 한자 30자를 입력하십시오',
'member.management.memberPrComingInvestigate.drawer.form.inspect.reports': '고찰 보고',
'member.management.memberPrComingInvestigate.drawer.form.inspect.reports.rules-required': '답사 보고서를 올려주세요.',
'member.management.memberPrComingInvestigate.drawer.form.verify': '영수증 심사',
......@@ -175,8 +172,7 @@ export default {
'member.management.memberPrComingInvestigate.drawer.form.verify.agree.pass': '심사 통과',
'member.management.memberPrComingInvestigate.drawer.form.verify.agree.noPass': '심사가 통과하지 못하다',
'member.management.memberPrComingInvestigate.drawer.form.verify.reason': '불통과 원인',
'member.management.memberPrComingInvestigate.drawer.form.verify.placeholder':
'최대 120자, 한자 60자를 입력하십시오',
'member.management.memberPrComingInvestigate.drawer.form.verify.placeholder': '최대 120자, 한자 60자를 입력하십시오',
// 待入库分类
'member.management.memberPrComingClassify.verify.commiting': '커밋 중입니다. 잠시 기다려 주십시오...',
......@@ -185,24 +181,30 @@ export default {
'member.management.memberPrComingClassify.drawer.form.classify': '입고 분류 정보',
'member.management.memberPrComingClassify.drawer.form.classify.code': '회원 번호',
'member.management.memberPrComingClassify.drawer.form.classify.code.description-1': '최대 10비트 길이, 중복 불가',
'member.management.memberPrComingClassify.drawer.form.classify.code.description-2':
'특수 기호는 지원되지 않습니다(영문 "-", 밑줄 및 중간줄 제외).',
'member.management.memberPrComingClassify.drawer.form.classify.code.rules-legal':
'숫자, 영어, -를 입력하십시오.최대 10자 지원',
'member.management.memberPrComingClassify.drawer.form.classify.code.description-2': '특수 기호는 지원되지 않습니다(영문 "-", 밑줄 및 중간줄 제외).',
'member.management.memberPrComingClassify.drawer.form.classify.code.rules-legal': '숫자, 영어, -를 입력하십시오.최대 10자 지원',
'member.management.memberPrComingClassify.drawer.form.classify.partnerType': '협력 관계',
'member.management.memberPrComingClassify.drawer.form.classify.maxAmount': '1회 합작금액',
'member.management.memberPrComingClassify.drawer.form.classify.maxAmount.description-1': '1회 구매 허용 최대 금액',
'member.management.memberPrComingClassify.drawer.form.classify.maxAmount.rules-legal':
'소수점 이하 두 자리까지 사용할 수 있는 값을 입력하십시오',
'member.management.memberPrComingClassify.drawer.form.classify.maxAmount.rules-legal': '소수점 이하 두 자리까지 사용할 수 있는 값을 입력하십시오',
'member.management.memberPrComingClassify.drawer.form.classify.maxAmount.rules-max': '최대 8자 지원',
'member.management.memberPrComingClassify.drawer.form.classify.areaCodes': '적용 구역',
'member.management.memberPrComingClassify.drawer.form.classify.categories': '주류',
'member.management.memberPrComingClassify.drawer.form.classify.category': '종류',
'member.management.memberPrComingClassify.drawer.form.classify.paymentDay': '결제 주기(일)',
'member.management.memberPrComingClassify.drawer.form.classify.paymentDay.rules-legal':
'0자릿수 또는 양의 정수(최대 8자릿수)를 입력하십시오.',
'member.management.memberPrComingClassify.drawer.form.classify.paymentDay.rules-legal': '0자릿수 또는 양의 정수(최대 8자릿수)를 입력하십시오.',
'member.management.memberPrComingClassify.drawer.form.classify.invoiceTypeName': '청구서 유형',
'member.management.memberPrComingClassify.drawer.form.classify.taxPoint': '세점',
'member.management.memberPrComingClassify.drawer.form.classify.payType': '결제 방식',
'member.management.memberPrComingClassify.drawer.form.classify.payType.required': '결제 방식을 선택하다',
'member.management.memberPrComingClassify.drawer.form.classify.month.addonAfter': '개월',
'member.management.memberPrComingClassify.drawer.form.classify.month.legal': '양의 정수를 입력하십시오',
'member.management.memberPrComingClassify.drawer.form.classify.monthDay': '결산일',
'member.management.memberPrComingClassify.drawer.form.classify.monthDay.addonAfter': '일',
'member.management.memberPrComingClassify.drawer.form.classify.monthDay.legal': '양의 정수를 입력하십시오',
'member.management.memberPrComingClassify.drawer.form.classify.monthDay.limit': '0보다 크고 28보다 작은 값을 입력하십시오',
'member.management.memberPrComingClassify.drawer.form.classify.days.addonAfter': '일수',
'member.management.memberPrComingClassify.drawer.form.classify.days.legal': '양의 정수를 입력하십시오',
'member.management.memberPrComingClassify.drawer.form.verify': '영수증 심사',
'member.management.memberPrComingClassify.drawer.form.verify.agree': '통과 여부',
'member.management.memberPrComingClassify.drawer.form.verify.agree.pass': '심사 통과',
......@@ -530,6 +532,7 @@ export default {
'member.components.MemberDocCategory.category.name': '종류',
'member.components.MemberDocCategory.category.paymentDay': '결제 주기(일)',
'member.components.MemberDocCategory.category.invoiceTypeName': '청구서 유형',
'member.components.MemberDocCategory.category.taxPoint': '세점',
'member.components.MemberDocCategory.title': '분류 정보',
'member.components.MemberDocCategory.edit': '수정',
'member.components.MemberDocCategory.edit.message': '커밋 중입니다. 잠시 기다려 주십시오...',
......
......@@ -161,6 +161,11 @@ export default {
'afterService.components.UploadPaymentVoucher.bankDeposit': '开户行',
'afterService.components.UploadPaymentVoucher.fileList': '上传退款凭证',
'afterService.components.UploadPaymentVoucher.fileList.required': '请上传退款凭证',
'afterService.components.MonthlyStatement.title': '月结支付退款确认',
'afterService.components.MonthlyStatement.payChannel': '支付渠道',
'afterService.components.MonthlyStatement.tip': '支付方式为月结的订单,用户确认退款方式与退款金额后,系统会按照支付流程来完成退款动作,实际资金的退款由交易双方通过结算流程处理。',
'afterService.components.PaymentDays.title': '账期支付退款确认',
'afterService.components.PaymentDays.tip': '支付方式为账期的订单,用户确认退款方式与退款金额后,系统会按照支付流程来完成退款动作,实际资金的退款由交易双方通过结算流程处理。',
'afterService.components.RepairAddressInfo.title': '维修地址',
......
......@@ -185,24 +185,30 @@ export default {
'member.management.memberPrComingClassify.drawer.form.classify': '入库分类信息',
'member.management.memberPrComingClassify.drawer.form.classify.code': '会员编码',
'member.management.memberPrComingClassify.drawer.form.classify.code.description-1': '长度最多10位,不可重复',
'member.management.memberPrComingClassify.drawer.form.classify.code.description-2':
'不支持特殊符号(除英文"_-";下划线和中划线)',
'member.management.memberPrComingClassify.drawer.form.classify.code.rules-legal':
'请输入数字、英文、_-,最多支持10个字符',
'member.management.memberPrComingClassify.drawer.form.classify.code.description-2': '不支持特殊符号(除英文"_-";下划线和中划线)',
'member.management.memberPrComingClassify.drawer.form.classify.code.rules-legal': '请输入数字、英文、_-,最多支持10个字符',
'member.management.memberPrComingClassify.drawer.form.classify.partnerType': '合作关系',
'member.management.memberPrComingClassify.drawer.form.classify.maxAmount': '单次合作金额',
'member.management.memberPrComingClassify.drawer.form.classify.maxAmount.description-1': '允许单次采购最大金额',
'member.management.memberPrComingClassify.drawer.form.classify.maxAmount.rules-legal':
'请输入数值,最多支持小数点后两位',
'member.management.memberPrComingClassify.drawer.form.classify.maxAmount.rules-legal': '请输入数值,最多支持小数点后两位',
'member.management.memberPrComingClassify.drawer.form.classify.maxAmount.rules-max': '最多支持8个字符',
'member.management.memberPrComingClassify.drawer.form.classify.areaCodes': '适用区域',
'member.management.memberPrComingClassify.drawer.form.classify.categories': '主营品类',
'member.management.memberPrComingClassify.drawer.form.classify.category': '品类',
'member.management.memberPrComingClassify.drawer.form.classify.paymentDay': '付款周期(天)',
'member.management.memberPrComingClassify.drawer.form.classify.paymentDay.rules-legal':
'请输入0 或 正整数,最多8位数',
'member.management.memberPrComingClassify.drawer.form.classify.paymentDay.rules-legal': '请输入0 或 正整数,最多8位数',
'member.management.memberPrComingClassify.drawer.form.classify.invoiceTypeName': '发票类型',
'member.management.memberPrComingClassify.drawer.form.classify.taxPoint': '税点',
'member.management.memberPrComingClassify.drawer.form.classify.payType': '结算方式',
'member.management.memberPrComingClassify.drawer.form.classify.payType.required': '请选择结算方式',
'member.management.memberPrComingClassify.drawer.form.classify.month.addonAfter': '个月',
'member.management.memberPrComingClassify.drawer.form.classify.month.legal': '请输入正整数',
'member.management.memberPrComingClassify.drawer.form.classify.monthDay': '结算日',
'member.management.memberPrComingClassify.drawer.form.classify.monthDay.addonAfter': '号',
'member.management.memberPrComingClassify.drawer.form.classify.monthDay.legal': '请输入正整数',
'member.management.memberPrComingClassify.drawer.form.classify.monthDay.limit': '请输入大于0 小于等于 28的数值',
'member.management.memberPrComingClassify.drawer.form.classify.days.addonAfter': '天',
'member.management.memberPrComingClassify.drawer.form.classify.days.legal': '请输入正整数',
'member.management.memberPrComingClassify.drawer.form.verify': '单据审核',
'member.management.memberPrComingClassify.drawer.form.verify.agree': '是否通过',
'member.management.memberPrComingClassify.drawer.form.verify.agree.pass': '审核通过',
......@@ -528,8 +534,9 @@ export default {
'member.components.MemberDocCategory.partnerTypeName': '会员关系',
'member.components.MemberDocCategory.category': '主营品类',
'member.components.MemberDocCategory.category.name': '品类',
'member.components.MemberDocCategory.category.paymentDay': '付款周期(天)',
'member.components.MemberDocCategory.category.paymentDay': '结算方式',
'member.components.MemberDocCategory.category.invoiceTypeName': '发票类型',
'member.components.MemberDocCategory.category.taxPoint': '税点',
'member.components.MemberDocCategory.title': '分类信息',
'member.components.MemberDocCategory.edit': '修改',
'member.components.MemberDocCategory.edit.message': '正在提交,请稍候...',
......
......@@ -19,7 +19,8 @@
.tip {
padding: @padding-xss @padding-xs;
color: @primary-color;
background-color: color(~`colorPalette('@{primary-color}', 0.04) `);
color: @text-color-secondary;
background-color: @background-color-light;
border-radius: 4px;
}
}
\ No newline at end of file
@import '~antd/es/style/themes/default.less';
.monthly-statement {
:global {
.ant-descriptions-item-container {
align-items: center;
}
}
.amount {
font-size: @font-size-lg;
font-weight: 500;
&-plus {
color: @error-color;
font-size: 24px;
}
}
.tip {
padding: @padding-xss @padding-xs;
color: @text-color-secondary;
background-color: @background-color-light;
border-radius: 4px;
}
}
\ No newline at end of file
import React from 'react';
import { useIntl } from 'umi';
import { Descriptions, Divider } from 'antd';
import { priceFormat } from '@/utils/numberFomat';
import styles from './index.less';
interface MonthlyStatementProps {
/**
* 弹窗需要的数据值
*/
value: {
/**
* 退款金额
*/
refundAmount: number,
/**
* 支付方式
*/
payWay: string,
/**
* 支付渠道
*/
payChannel: string,
};
};
const MonthlyStatement: React.FC<MonthlyStatementProps> = ({
value,
}) => {
const intl = useIntl();
return (
<div className={styles['monthly-statement']}>
<Descriptions column={1}>
<Descriptions.Item label={`${intl.formatMessage({ id: 'afterService.components.RefundModal.refundAmount' }, { default: '当前退款金额' })}(${intl.formatMessage({ id: 'common.money.yuan' }, { default: '元' })})`}>
<span className={styles['amount-plus']}>{`${intl.formatMessage({ id: 'common.money' }, { default: '¥' })}${priceFormat(value.refundAmount)}`}</span>
</Descriptions.Item>
<Descriptions.Item
label={intl.formatMessage({ id: 'afterService.components.COD.payType' }, { default: '支付方式' })}
style={{
paddingBottom: 0,
}}
>
{value.payWay}
</Descriptions.Item>
<Descriptions.Item
label={intl.formatMessage({ id: 'afterService.components.MonthlyStatement.payChannel' }, { default: '支付渠道' })}
style={{
paddingBottom: 0,
}}
>
{value.payChannel}
</Descriptions.Item>
</Descriptions>
<Divider dashed />
<p className={styles.tip}>
{intl.formatMessage({ id: 'afterService.components.MonthlyStatement.tip' }, { default: '支付方式为月结的订单,用户确认退款方式与退款金额后,系统会按照支付流程来完成退款动作,实际资金的退款由交易双方通过结算流程处理。' })}
</p>
</div>
)
};
export default MonthlyStatement;
\ No newline at end of file
@import '~antd/es/style/themes/default.less';
.payment-days {
:global {
.ant-descriptions-item-container {
align-items: center;
}
}
.amount {
font-size: @font-size-lg;
font-weight: 500;
&-plus {
color: @error-color;
font-size: 24px;
}
}
.tip {
padding: @padding-xss @padding-xs;
color: @text-color-secondary;
background-color: @background-color-light;
border-radius: 4px;
}
}
\ No newline at end of file
import React from 'react';
import { useIntl } from 'umi';
import { Descriptions, Divider } from 'antd';
import { priceFormat } from '@/utils/numberFomat';
import styles from './index.less';
interface MonthlyStatementProps {
/**
* 弹窗需要的数据值
*/
value: {
/**
* 退款金额
*/
refundAmount: number,
/**
* 支付方式
*/
payWay: string,
/**
* 支付渠道
*/
payChannel: string,
};
};
const MonthlyStatement: React.FC<MonthlyStatementProps> = ({
value,
}) => {
const intl = useIntl();
return (
<div className={styles['payment-days']}>
<Descriptions column={1}>
<Descriptions.Item label={`${intl.formatMessage({ id: 'afterService.components.RefundModal.refundAmount' }, { default: '当前退款金额' })}(${intl.formatMessage({ id: 'common.money.yuan' }, { default: '元' })})`}>
<span className={styles['amount-plus']}>{`${intl.formatMessage({ id: 'common.money' }, { default: '¥' })}${priceFormat(value.refundAmount)}`}</span>
</Descriptions.Item>
<Descriptions.Item
label={intl.formatMessage({ id: 'afterService.components.COD.payType' }, { default: '支付方式' })}
style={{
paddingBottom: 0,
}}
>
{value.payWay}
</Descriptions.Item>
<Descriptions.Item
label={intl.formatMessage({ id: 'afterService.components.MonthlyStatement.payChannel' }, { default: '支付渠道' })}
style={{
paddingBottom: 0,
}}
>
{value.payChannel}
</Descriptions.Item>
</Descriptions>
<Divider dashed />
<p className={styles.tip}>
{intl.formatMessage({ id: 'afterService.components.PaymentDays.tip' }, { default: '支付方式为账期的订单,用户确认退款方式与退款金额后,系统会按照支付流程来完成退款动作,实际资金的退款由交易双方通过结算流程处理。' })}
</p>
</div>
)
};
export default MonthlyStatement;
\ No newline at end of file
......@@ -5,6 +5,8 @@ import { useIntl } from 'umi';
const Balance = React.lazy(() => import('./Balance'));
const Credit = React.lazy(() => import('./Credit'));
const COD = React.lazy(() => import('./COD'));
const MonthlyStatement = React.lazy(() => import('./MonthlyStatement'));
const PaymentDays = React.lazy(() => import('./PaymentDays'));
export interface RefundModalProps {
/**
......@@ -91,6 +93,28 @@ const RefundModal: React.FC<RefundModalProps> = ({
</Suspense>
),
},
monthlyStatement: {
width: 600,
title: intl.formatMessage({ id: 'afterService.components.MonthlyStatement.title' }, { default: '月结支付退款确认' }),
render: () => (
<Suspense fallback={null}>
<MonthlyStatement
value={rest as any}
/>
</Suspense>
),
},
paymentDays: {
width: 600,
title: intl.formatMessage({ id: 'afterService.components.PaymentDays.title' }, { default: '账期支付退款确认' }),
render: () => (
<Suspense fallback={null}>
<PaymentDays
value={rest as any}
/>
</Suspense>
),
},
};
const template = tempMap[modalName] || {
......
......@@ -19,7 +19,9 @@ import {
PAY_CHANNEL_OFFLINE,
PAY_CHANNEL_BALANCE,
PAY_CHANNEL_CREDIT,
PAY_CHANNEL_COD,
PAY_CHANNEL_COD,
PAY_CHANNEL_MONTHLY_STATEMENT,
PAY_CHANNEL_PAYMENT_DAYS,
} from '@/constants/payment';
import {
RETURN_OUTER_STATUS_TO_BE_REFUNDED,
......@@ -67,6 +69,14 @@ type RefundModalValueType = {
* 供应会员角色id
*/
supplierRoleId?: number,
/**
* 支付方式
*/
payWay?: string,
/**
* 支付渠道
*/
payChannel?: string,
}
interface ReturnDetailInfoProps extends MellowCardProps {
......@@ -216,7 +226,15 @@ const ReturnDetailInfo: React.FC<ReturnDetailInfoProps> = ({
},
];
const handleRefund = (id, channel, amount) => {
/**
* 打开确认退款弹窗
* @param id 退款id
* @param channel 支付渠道
* @param amount 退款金额
* @param payWayName 支付方式名称
* @param channelName 支付渠道名称
*/
const handleRefund = (id, channel, amount, payWayName, channelName) => {
switch(channel) {
// 余额支付
case PAY_CHANNEL_BALANCE: {
......@@ -261,6 +279,20 @@ const ReturnDetailInfo: React.FC<ReturnDetailInfoProps> = ({
setRefundModalValue({ id, refundAmount: amount });
break;
};
// 月结
case PAY_CHANNEL_MONTHLY_STATEMENT: {
setModalName('monthlyStatement');
setRefundModalVisible(true);
setRefundModalValue({ id, refundAmount: amount, payWay: payWayName, payChannel: channelName });
break;
};
// 账期
case PAY_CHANNEL_PAYMENT_DAYS: {
setModalName('paymentDays');
setRefundModalVisible(true);
setRefundModalValue({ id, refundAmount: amount, payWay: payWayName, payChannel: channelName });
break;
};
default: {
if (onRefund) {
confirm({
......@@ -385,7 +417,7 @@ const ReturnDetailInfo: React.FC<ReturnDetailInfoProps> = ({
) && (
<div
className={styles['deliver-item-return']}
onClick={() => handleRefund(item.refundId, item.channel, item.refundAmount)}
onClick={() => handleRefund(item.refundId, item.channel, item.refundAmount, item.payWayName, item.channelName)}
>
{intl.formatMessage({ id: 'afterService.components.ReturnDetailInfo.refund' }, { default: '退款' })}
</div>
......
......@@ -41,6 +41,7 @@ const AddAtttribute: React.FC<{}> = () => {
const [isSee, setIsSee] = useState(false) // 判断查看依据
const [isSpecial, setIsSpecial] = useState(false) //特殊属性禁用展示方式
const [submitLoading, setSubmitLoading] = useState<boolean>(false)
const [isDisabledEmpty, setIsDisabledEmpty] = useState<boolean>(false) // 禁用必填
useEffect(() => {
const { location } = history
......@@ -160,6 +161,16 @@ const AddAtttribute: React.FC<{}> = () => {
menuForm.setFieldsValue({ isDate: false })
}
const priceAttributeChange = (e) => {
if(e.target.checked) {
setIsDisabledEmpty(true)
menuForm.setFieldsValue({"isEmpty": true})
} else {
setIsDisabledEmpty(false)
menuForm.setFieldsValue({"isEmpty": false})
}
}
return <PageHeaderWrapper
onBack={() => history.goBack()}
backIcon={<ReutrnEle description={intl.formatMessage({ id: 'classAndProperty.attribute.addAttribute.back' })}/>}
......@@ -245,7 +256,9 @@ const AddAtttribute: React.FC<{}> = () => {
>
<Row>
<Col span={24}>
<Form.Item name="isEmpty" valuePropName="checked" initialValue={false} noStyle><Checkbox disabled={isSee}>{intl.formatMessage({ id: 'classAndProperty.attribute.addAttribute.form.isEmpty' })}</Checkbox></Form.Item>
<Form.Item name="isEmpty" valuePropName="checked" initialValue={false} noStyle>
<Checkbox disabled={isSee || isDisabledEmpty}>{intl.formatMessage({ id: 'classAndProperty.attribute.addAttribute.form.isEmpty' })}</Checkbox>
</Form.Item>
</Col>
{/* <Col span={24}>
<Form.Item name="isImage" valuePropName="checked" initialValue={false} noStyle><Checkbox disabled={isSee}>上传图片</Checkbox></Form.Item>
......@@ -261,7 +274,12 @@ const AddAtttribute: React.FC<{}> = () => {
</Col> */}
<Col span={24}>
{/* 规格属性 -> 原价格属性 */}
<Form.Item name="isPrice" valuePropName="checked" initialValue={false} noStyle><Checkbox disabled={isSee}>{intl.formatMessage({ id: 'classAndProperty.attribute.addAttribute.form.isPrice' })}</Checkbox></Form.Item>
<Form.Item name="isPrice" valuePropName="checked" initialValue={false} noStyle>
<Checkbox
onChange={priceAttributeChange}
disabled={isSee}>{intl.formatMessage({ id: 'classAndProperty.attribute.addAttribute.form.isPrice' })}
</Checkbox>
</Form.Item>
<Tooltip title={intl.formatMessage({ id: 'classAndProperty.attribute.addAttribute.form.isPrice.tooltip' })}>
<InfoCircleOutlined />
</Tooltip>
......
......@@ -26,17 +26,6 @@ import { getProductGoodsGetGoodsList, postProductGoodsDeleteBatchGoods } from '@
const { Option } = Select;
const { confirm } = Modal
// 定义选择的行数据的类型
interface Item {
key: string;
role: string;
specification: string;
type: string;
brand: string;
unit: string;
unitPrice: string;
batch: string;
}
let timeChange: any;
......@@ -45,15 +34,17 @@ const formActions = createFormActions();
const Goods: React.FC<{}> = () => {
const intl = useIntl();
const ref = useRef<any>({})
const [selectRow, setSelectRow] = useState<Item[]>([]) // 模态框选择的行数据
const [selectedRowKeys, setSelectedRowKeys] = useState<Array<number>>([])
const currentRefRow = useRef<any>([])
const [importModal, setImportModal] = useState(false)
const [deleteBatchModal, setDeleteBatchModal] = useState(false)
const [modalTitle, setModalTitle] = useState(intl.formatMessage({ id: 'commodity.goods.modalTitle.1' }))
const [modalStep, setModalStep] = useState(0)
const [batchDeleteKeys, setBatchDeleteKeys] = useState<any>([])
const [goodsRowSelection, goodsRowCtl] = useRowSelectionTable()
useEffect(() => {
currentRefRow.current = goodsRowCtl.selectRow
}, [goodsRowCtl])
const columns: ColumnType<any>[] = [
{
title: intl.formatMessage({ id: 'commodity.goods.columns.code' }),
......@@ -148,16 +139,6 @@ const Goods: React.FC<{}> = () => {
setImportModal(false)
}
const rowSelection = {
selectedRowKeys: selectedRowKeys,
onChange: (selectedRowKeys: any, selectedRows: any) => {
setSelectRow(selectedRows);
setSelectedRowKeys(selectedRowKeys);
setBatchDeleteKeys([...batchDeleteKeys, ...selectedRowKeys]);
console.log(`selectedRowKeys: ${selectedRowKeys}`, 'selectedRows: ', selectedRows);
}
}
const modalLoadTemplate = () => {
console.log('模板下载!')
}
......@@ -286,8 +267,8 @@ const Goods: React.FC<{}> = () => {
title: intl.formatMessage({ id: 'commodity.goods.handleMenuClick.title' }),
icon: <ExclamationCircleOutlined />,
onOk() {
if (!goodsRowCtl.selectedRowKeys.length) { return message.error(intl.formatMessage({ id: 'commodity.goods.handleMenuClick.error' })) }
postProductGoodsDeleteBatchGoods({ idList: goodsRowCtl.selectedRowKeys }).then(res => {
if (!currentRefRow.current.length) { return message.error(intl.formatMessage({ id: 'commodity.goods.handleMenuClick.error' })) }
postProductGoodsDeleteBatchGoods({ idList: currentRefRow.current.map(item => item.id) }).then(res => {
ref.current.reload()
})
},
......
.giudeContainer {
display: flex;
flex: 1;
.guideItem {
position: relative;
width: 180px;
height: 180px;
margin: 8px;
width: 180px;
background: #F5F6F7;
border-radius: 8px;
padding: 16px;
p {
height: 20px;
font-size: 12px;
color: #A2A2A2;
line-height: 20px;
}
:global {
.ant-btn {
position: absolute;
bottom: 16px;
}
}
.stepNumber {
width: 65px;
height: 132px;
opacity: 0.09;
font-weight: Bold;
font-size: 110px;
color: #8B9190;
position: absolute;
right: 0;
bottom: 0;
}
}
}
import React from 'react'
import { useIntl } from 'umi';
import { Button, Modal, ModalProps } from 'antd';
import styles from './index.less'
export interface PutawayGuideProps extends ModalProps {
visible?: boolean,
}
/**
* 商品 上架引导
* @param props
* @returns
*/
const PutawayGuide: React.FC<PutawayGuideProps> = (props) => {
const intl = useIntl();
const {visible = false, ...restProps } = props
return (
<Modal
title="商品上架引导"
visible={visible}
footer={null}
destroyOnClose={true}
{...restProps}
>
<div className={styles.giudeContainer}>
<div className={styles.guideItem}>
<h3>创建自营商城(店铺)</h3>
<p>您还没有创建店铺。</p>
<Button>创建店铺</Button>
<span className={styles.stepNumber}>1</span>
</div>
<div className={styles.guideItem}>
<h3>配置仓位库存</h3>
<p>您还没有配置仓位库存。</p>
<Button>配置仓位库存</Button>
<span className={styles.stepNumber}>2</span>
</div>
<div className={styles.guideItem}>
<h3>配置订单流程</h3>
<p>您还没有配置订单流程。</p>
<Button>配置订单流程</Button>
<span className={styles.stepNumber}>3</span>
</div>
<div className={styles.guideItem}>
<h3>上架商品</h3>
{/* <p>您还没有创建店铺。</p>
<Button>创建店铺</Button> */}
<span className={styles.stepNumber}>4</span>
</div>
</div>
</Modal>
)
}
PutawayGuide.defaultProps = {}
export default PutawayGuide
import React, { useState, useRef } from 'react'
import React, { useState, useRef, useEffect } from 'react'
import { history, useIntl } from 'umi'
import { Button, Form, Card, Modal, Row, Col, Dropdown, Tooltip, Menu, Space, message, Checkbox, Badge } from 'antd'
import { PageHeaderWrapper } from '@ant-design/pro-layout'
......@@ -25,19 +25,7 @@ import moment from 'moment'
import { productStatusColor, productStatusLabel } from './constant'
import { getProductChannelCommodityGetChannelCommodityList, getProductChannelCommodityGetShop, getProductChannelCommodityGetShopBatch, GetProductChannelCommodityGetShopResponse, postProductChannelCommodityBatchOffPublishCommodity, postProductChannelCommodityBatchPublishCommodity, postProductChannelCommodityDeleteBatchChannelCommodity, postProductChannelCommodityPublishCommodity } from '@/services/ProductV2Api'
import { getTemplateWebMemberChannelWebFindCurrMemberChannel } from '@/services/TemplateV2Api'
// 定义选择的行数据的类型
interface Item {
id: string;
role: string;
specification: string;
type: string;
brand: string;
unit: string;
price: string;
batch: string;
status: string;
}
import { useRowSelectionTable } from '@/hooks/useRowSelectionTable'
const { confirm } = Modal;
const formActions = createFormActions();
......@@ -45,8 +33,7 @@ const formActions = createFormActions();
const DirectChannel: React.FC<{}> = () => {
const intl = useIntl();
const ref = useRef<any>({})
const [selectRow, setSelectRow] = useState<Item[]>([]) // 模态框选择的行数据
const [selectedRowKeys, setSelectedRowKeys] = useState<number[]>([])
const currentRefRow = useRef<any>([])
const [isUp, setIsUp] = useState(1) // 1上0下架状态
const [upDownModal, setUpDownModal] = useState(false)
const [shopsOption, setShopsOption] = useState<GetProductChannelCommodityGetShopResponse>([])
......@@ -56,8 +43,11 @@ const DirectChannel: React.FC<{}> = () => {
const [currentOptionId, setCurrentOptionId] = useState<number>()
const [isDisabledOKbtn, setIsDisabledOKbtn] = useState<boolean>(false)
const [isBatchOption, setIsBatchOption] = useState<boolean>(false) // 是否是批量上下架操作
const currentRef = useRef<any>([])
const currentRowRef = useRef<any>([])
const [rowSelection, rowCtl] = useRowSelectionTable()
useEffect(() => {
currentRefRow.current = rowCtl.selectRow
}, [rowCtl])
const columns: ColumnType<any>[] = [
{
......@@ -187,7 +177,8 @@ const DirectChannel: React.FC<{}> = () => {
// paramId ? 单个删除 : 批量删除
const clickDelete = (paramId?: number) => {
if (currentRef.current.length || paramId)
const ids = currentRefRow.current.map(item => item.id)
if (ids.length || paramId)
confirm({
title: intl.formatMessage({ id: 'commodity.products.directChannel.clickDelete.title' }),
icon: <ExclamationCircleOutlined />,
......@@ -195,8 +186,7 @@ const DirectChannel: React.FC<{}> = () => {
okType: 'danger',
cancelText: intl.formatMessage({ id: 'commodity.products.directChannel.clickDelete.cancelText' }),
onOk() {
console.log(currentRef.current)
postProductChannelCommodityDeleteBatchChannelCommodity({ idList: paramId ? [paramId] : currentRef.current }).then(res => {
postProductChannelCommodityDeleteBatchChannelCommodity({ idList: paramId ? [paramId] : ids }).then(res => {
if (res.code === 1000)
ref.current.reload()
})
......@@ -218,24 +208,12 @@ const DirectChannel: React.FC<{}> = () => {
})
}
const rowSelection = {
selectedRowKeys: selectedRowKeys,
onChange: (selectedRowKeys: any, selectedRows: any) => {
setSelectRow(selectedRows);
setSelectedRowKeys(selectedRowKeys);
currentRef.current = selectedRowKeys
currentRowRef.current = selectedRows
}
}
// 判断所选商品 priceType, ?source, status一致
const judgeType = () => {
// let sourceArr = Array.from(new Set(selectRow.map((item:any) => item.channelCommodity.source)))
let priceTypeArr = Array.from(new Set(currentRowRef.current.map((item: any) => item.channelCommodity.commodity.priceType)))
let statusArr = Array.from(new Set(currentRowRef.current.map((item: any) => item.status)))
let priceTypeArr = Array.from(new Set(currentRefRow.current.map((item: any) => item.channelCommodity.commodity.priceType)))
let statusArr = Array.from(new Set(currentRefRow.current.map((item: any) => item.status)))
return {
isPassJudge: priceTypeArr.length === 1 && statusArr.length === 1,
// source: sourceArr,
priceType: priceTypeArr
}
}
......@@ -243,7 +221,7 @@ const DirectChannel: React.FC<{}> = () => {
const handleBatchClick = (param: string) => {
setIsBatchOption(true)
setShopsOption([])
if (currentRef.current.length) {
if (currentRefRow.current.length) {
let _judge = judgeType()
if (_judge.isPassJudge) {
setUpDownModal(true)
......@@ -296,7 +274,7 @@ const DirectChannel: React.FC<{}> = () => {
let params: any = {}
if (isBatchOption) {
params = {
idList: currentRowRef.current.map(item => item.id),
idList: currentRefRow.current.map(item => item.id),
shopList: checkedValues
}
} else {
......
This diff is collapsed.
......@@ -29,7 +29,7 @@ const pageToBeSubmitExamine = () => {
return new Date(Date.parse(time.replace(/-/g, "/"))).getTime() / 1000;
}
const columns: ColumnType<any>[] = [{
title: intl.formatMessage({id: 'contract.hetongbianhaozhaiyao'}),
title: intl.formatMessage({ id: 'contract.hetongbianhaozhaiyao' }),
dataIndex: 'contractNo',
align: 'left',
render: (text, record) =>
......@@ -42,7 +42,7 @@ const pageToBeSubmitExamine = () => {
<p>{record.contractAbstract}</p>
</div>
}, {
title: intl.formatMessage({id: 'contract.hetongshengxiaoshixiaoshi'}),
title: intl.formatMessage({ id: 'contract.hetongshengxiaoshixiaoshi' }),
dataIndex: 'startTime',
align: 'left',
sorter: {
......@@ -56,12 +56,12 @@ const pageToBeSubmitExamine = () => {
</div>
},
{
title: intl.formatMessage({id: 'contract.hetongjiafang'}),
title: intl.formatMessage({ id: 'contract.hetongjiafang' }),
dataIndex: 'partyAName',
align: 'left',
},
{
title: intl.formatMessage({id: 'contract.hetongzongjine'}),
title: intl.formatMessage({ id: 'contract.hetongzongjine' }),
dataIndex: 'totalAmount',
align: 'left',
render: (text) =>
......@@ -70,7 +70,7 @@ const pageToBeSubmitExamine = () => {
</div>
},
{
title: intl.formatMessage({id: 'contract.duiyingdanjuxunyuanlei'}),
title: intl.formatMessage({ id: 'contract.duiyingdanjuxunyuanlei' }),
dataIndex: 'sourceNo',
align: 'left',
render: (text, record) =>
......@@ -88,7 +88,7 @@ const pageToBeSubmitExamine = () => {
</div>
},
{
title: intl.formatMessage({id: 'contract.waibuzhuangtai'}),
title: intl.formatMessage({ id: 'contract.waibuzhuangtai' }),
dataIndex: 'outerStatusName',
align: 'left',
render: (text) => {
......@@ -98,7 +98,7 @@ const pageToBeSubmitExamine = () => {
}
},
{
title: intl.formatMessage({id: 'contract.neibuzhuangtai'}),
title: intl.formatMessage({ id: 'contract.neibuzhuangtai' }),
dataIndex: 'innerStatusName',
align: 'left',
render: (text) => {
......@@ -111,13 +111,13 @@ const pageToBeSubmitExamine = () => {
}
},
{
title: intl.formatMessage({id: 'contract.caozuo'}),
title: intl.formatMessage({ id: 'contract.caozuo' }),
dataIndex: 'innerStatusName',
align: 'left',
render: (text, record) => {
return (
<div>
<span style={{ color: '#00B37A', cursor: 'pointer' }} onClick={() => history.push(`/memberCenter/contract/coordination/pageToBeSubmitExamine/details?contractId=${record.id}&type=submitExamine`)}>{intl.formatMessage({id: 'contract.tijiaoshenhe'})}</span>
<span style={{ color: '#00B37A', cursor: 'pointer' }} onClick={() => history.push(`/memberCenter/contract/coordination/pageToBeSubmitExamine/details?contractId=${record.id}&type=submitExamine`)}>{intl.formatMessage({ id: 'contract.tijiaoshenhe' })}</span>
</div>
)
}
......
......@@ -41,19 +41,52 @@ export type DocCategoryProps = Omit<CustomizeColumnProps, 'data' | 'columns'> &
/**
* 主营品类
*/
categories: {
categories: {
/**
* 数据id
* 品类信息id
*/
id: number,
/**
* 品类名称
* 品类列表 ,BusinessCategoryDetailQueryVO
*/
name: string,
details: {
/**
* 品类层级
*/
level?: number,
/**
* 品类Id
*/
categoryId?: number,
/**
* 品类名称
*/
name?: string,
}[]
/**
* 付款周期(天)
* 结算方式,1-现结,2-账期(按天),3-账期(按月),4-月结
*/
paymentDay: number,
payType: number,
/**
* 结算方式名称
*/
payTypeName: string,
/**
* 月,结算方式为账期(按月)时大于0
*/
month: number,
/**
* 每月几号,结算方式为“账期(按月)”或“月结”时大于0
*/
monthDay: number,
/**
* 天,结算方式为账期(按天)时大于0
*/
days: number,
/**
* 发票类型,1-增值税专用发票,2-普通发票,3-机动车专用发票,4-机打发票,5-定额发票
*/
invoiceType: number,
/**
* 发票类型名称
*/
......@@ -108,9 +141,11 @@ const MemberDocCategory: React.FC<DocCategoryProps> = (props: DocCategoryProps)
partnerType: res.data?.partnerType,
maxAmount: res.data?.maxAmount,
areaCodes: res.data?.areaCodes,
categories: res.data?.categories.map(({ names, paymentDay, taxPoint, ...rest }) => ({
category: names,
paymentDay: `${paymentDay}`,
categories: res.data?.categories.map(({ details, month, monthDay, days, taxPoint, ...rest }) => ({
category: details?.map((item) => `${item.categoryId}`),
month: month ? `${month}` : '',
monthDay: monthDay ? `${monthDay}` : '',
days: days ? `${days}` : '',
taxPoint: +taxPoint,
...rest
})),
......@@ -181,8 +216,15 @@ const MemberDocCategory: React.FC<DocCategoryProps> = (props: DocCategoryProps)
{dataSource?.categories.map((item) => (
<li className={styles['category-list-item']} key={item.id}>
<Descriptions column={1}>
<Descriptions.Item label={intl.formatMessage({ id: 'member.components.MemberDocCategory.category.name' })}>{item.name}</Descriptions.Item>
<Descriptions.Item label={intl.formatMessage({ id: 'member.components.MemberDocCategory.category.paymentDay' })}>{item.paymentDay}</Descriptions.Item>
<Descriptions.Item label={intl.formatMessage({ id: 'member.components.MemberDocCategory.category.name' })}>
{item.details?.map((item) => item.name).join(' / ')}
</Descriptions.Item>
<Descriptions.Item label={intl.formatMessage({ id: 'member.components.MemberDocCategory.category.paymentDay' })}>
{`${item.payTypeName} `}
{item.month ? `${item.month}个月` : ''}
{item.monthDay ? `${item.monthDay}号` : ''}
{item.days ? `${item.days}天` : ''}
</Descriptions.Item>
<Descriptions.Item label={intl.formatMessage({ id: 'member.components.MemberDocCategory.category.invoiceTypeName' })}>{item.invoiceTypeName}</Descriptions.Item>
<Descriptions.Item label={intl.formatMessage({ id: 'member.components.MemberDocCategory.category.taxPoint' })}>{item.taxPoint}%</Descriptions.Item>
</Descriptions>
......
......@@ -5,7 +5,7 @@
* @LastEditTime: 2021-12-04 16:06:39
* @Description: 修改入库分类信息 抽屉
*/
import React, { useEffect } from 'react';
import React, { useEffect, useRef } from 'react';
import { useIntl } from 'umi';
import {
Drawer,
......@@ -20,25 +20,61 @@ import {
} from '@formily/antd';
import { useLinkageUtils } from '@/utils/formEffectUtils';
import { ArrayCards } from '@formily/antd-components';
import {
getMemberAbilityMaintenanceDetailRecordClassifyCategoryItems,
getMemberAbilityMaintenanceDetailRecordClassifyCity,
getMemberAbilityMaintenanceDetailRecordClassifyProvince,
} from '@/services/MemberV2Api';
import { getProductCustomerGetCustomerCategoryTree } from '@/services/ProductV2Api';
import {
PAY_TYPE_CASH,
PAY_TYPE_MONTHLY_STATEMENT,
PAY_TYPE_PAYMENT_DAYS_DAY,
PAY_TYPE_PAYMENT_DAYS_MONTH,
} from '@/constants/settlement';
import { schema } from './schema';
import { CategoryItemType, completeCategory } from '../../utils';
import CascaderFormItem from '../CascaderFormItem';
import styles from './index.less';
import { getMemberAbilityMaintenanceDetailRecordClassifyCity, getMemberAbilityMaintenanceDetailRecordClassifyProvince } from '@/services/MemberV2Api';
import { getProductCustomerGetCustomerCategoryTree } from '@/services/ProductV2Api';
type CategoriesType = {
/**
* 品类名称
* 品类明细
*/
details: {
/**
* 层级
*/
level: number,
/**
* 品类id
*/
categoryId: number,
/**
* 品类名称
*/
name: string,
}[],
/**
* 结算方式
*/
payType: number,
/**
* 月份数
*/
month?: number,
/**
* 结算日
*/
names: string[],
monthDay?: number,
/**
* 付款周期(天)
* 天数
*/
paymentDay: number,
days?: number,
/**
* 发票类型名称
* 发票类型
*/
invoiceTypeName: string,
invoiceType: number,
/**
* 税点,只要百分比的分子部分,不要转换为小数
*/
......@@ -47,12 +83,8 @@ type CategoriesType = {
export type ValueType = {
/**
* 会员编码
*/
code: string,
/**
* 合作关系类型枚举
*/
* 合作关系类型枚举
*/
partnerType: number,
/**
* 单次合作金额
......@@ -79,6 +111,10 @@ export type ValueType = {
export interface FormValueType extends Omit<ValueType, ('maxAmount' | 'categories')> {
/**
* 会员编码
*/
code: string,
/**
* 单次合作金额
*/
maxAmount: string,
......@@ -87,17 +123,29 @@ export interface FormValueType extends Omit<ValueType, ('maxAmount' | 'categorie
*/
categories: {
/**
* 已选品类
* 已选品类,id string[]
*/
category: string[],
/**
* 付款周期(天)
* 结算方式
*/
payType: number,
/**
* 月份数
*/
paymentDay: string,
month?: string,
/**
* 发票类型名称
* 结算日
*/
invoiceTypeName: string,
monthDay?: string,
/**
* 天数
*/
days?: string,
/**
* 发票类型
*/
invoiceType: number,
/**
* 税点,只要百分比的分子部分,不要转换为小数
*/
......@@ -105,48 +153,6 @@ export interface FormValueType extends Omit<ValueType, ('maxAmount' | 'categorie
}[],
}
interface CategoryItem {
/**
* 数据id
*/
id: string,
/**
* 父级id
*/
parentId: string,
/**
* 标题
*/
title: string,
/**
* 是否选中
*/
checked: boolean,
/**
* 图片url路径
*/
imageUrl: string,
/**
* 子元素
*/
children: CategoryItem[],
}
type CategoryType = {
/**
* label
*/
label: string,
/**
* 值
*/
value: string,
/**
* 子元素
*/
children: CategoryType[],
}
export type PartnerTypesItem = {
/**
* label
......@@ -202,6 +208,8 @@ const ComingClassifyDrawer: React.FC<IProps> = (props: IProps) => {
submitLoading,
} = props;
const categoryTreeRef = useRef<CategoryItemType[]>([]);
const intl = useIntl();
useEffect(() => {
......@@ -221,12 +229,22 @@ const ComingClassifyDrawer: React.FC<IProps> = (props: IProps) => {
const handleSubmit = (values: FormValueType) => {
if (onSubmit) {
const { maxAmount, categories, ...rest } = values;
const formated = categories.map((item) => ({
names: item.category,
paymentDay: +item.paymentDay,
invoiceTypeName: item.invoiceTypeName,
taxPoint: +item.taxPoint,
}));
const formated = categories.map((item) => {
const categoryArr = completeCategory(item.category, categoryTreeRef.current);
return {
details: categoryArr.map((category, level) => ({
level: level + 1,
categoryId: +category.id,
name: category.title,
})),
payType: item.payType,
month: item.month ? +item.month : undefined,
monthDay: item.monthDay ? +item.monthDay : undefined,
days: item.days ? +item.days : undefined,
invoiceType: item.invoiceType,
taxPoint: +item.taxPoint,
};
});
onSubmit({
maxAmount: +maxAmount,
categories: formated,
......@@ -297,6 +315,51 @@ const ComingClassifyDrawer: React.FC<IProps> = (props: IProps) => {
);
});
});
// 结算方式改变,联动显示对应的 FormItem
onFieldValueChange$('categories.*.payType').subscribe((fieldState) => {
formActions.setFieldState(
FormPath.transform(fieldState.name, /\d/, $1 => `categories.${$1}.*(PAYMENT_DAYS_MONTH_WRAP,PAYMENT_DAYS_DAY_WRAP,MONTHLY_TATEMENT_WRAP)`),
state => {
FormPath.setIn(state, 'visible', false);
}
);
switch (fieldState.value) {
case PAY_TYPE_CASH: {
break;
}
case PAY_TYPE_PAYMENT_DAYS_DAY: {
formActions.setFieldState(
FormPath.transform(fieldState.name, /\d/, $1 => `categories.${$1}.PAYMENT_DAYS_MONTH_WRAP`),
state => {
FormPath.setIn(state, 'visible', true);
}
);
break;
}
case PAY_TYPE_PAYMENT_DAYS_MONTH: {
formActions.setFieldState(
FormPath.transform(fieldState.name, /\d/, $1 => `categories.${$1}.PAYMENT_DAYS_DAY_WRAP`),
state => {
FormPath.setIn(state, 'visible', true);
}
);
break;
}
case PAY_TYPE_MONTHLY_STATEMENT: {
formActions.setFieldState(
FormPath.transform(fieldState.name, /\d/, $1 => `categories.${$1}.MONTHLY_TATEMENT_WRAP`),
state => {
FormPath.setIn(state, 'visible', true);
}
);
break;
}
default:
break;
}
});
}
return (
......@@ -356,6 +419,7 @@ const ComingClassifyDrawer: React.FC<IProps> = (props: IProps) => {
getProductCustomerGetCustomerCategoryTree().then(res => {
if (res.code === 1000) {
const { data = [] } = res;
categoryTreeRef.current = data as CategoryItemType[];
formActions.setFieldState('categories.*.category', state => {
FormPath.setIn(state, 'props.x-component-props.options', data);
});
......@@ -363,6 +427,27 @@ const ComingClassifyDrawer: React.FC<IProps> = (props: IProps) => {
}).catch((err) => {
console.warn(err);
});
// 请求结算方式与发票类型数据
getMemberAbilityMaintenanceDetailRecordClassifyCategoryItems().then(res => {
if (res.code === 1000 && res.data) {
const { payTypes = [], invoiceTypes } = res.data;
formActions.setFieldState('categories.*.payType', state => {
FormPath.setIn(state, 'props.enum', payTypes.map((item) => ({
label: item.payTypeName,
value: item.payType,
})));
});
formActions.setFieldState('categories.*.invoiceType', state => {
FormPath.setIn(state, 'props.enum', invoiceTypes.map((item) => ({
label: item.invoiceTypeName,
value: item.invoiceType,
})));
});
}
}).catch((err) => {
console.warn(err);
});
});
}}
actions={formActions}
......
......@@ -8,12 +8,6 @@
import { ISchema } from '@formily/antd';
import { getIntl } from 'umi';
import {
MEMBER_INVOICE_TYPE_1,
MEMBER_INVOICE_TYPE_2,
MEMBER_INVOICE_TYPE_3,
MEMBER_INVOICE_TYPE_4,
MEMBER_INVOICE_TYPE_5,
MEMBER_INVOICE_TYPE,
MEMBER_TAX_POINT_1,
MEMBER_TAX_POINT_2,
MEMBER_TAX_POINT_3,
......@@ -132,7 +126,7 @@ export const schema: ISchema = {
title: intl.formatMessage({ id: 'member.management.memberPrComingClassify.drawer.form.classify.category' }),
'x-component': 'CascaderFormItem',
'x-component-props': {
fieldNames: { label: 'title', value: 'title', children: 'children' },
fieldNames: { label: 'title', value: 'id', children: 'children' },
changeOnSelect: true,
expandTrigger: 'hover',
},
......@@ -182,41 +176,130 @@ export const schema: ISchema = {
// },
// },
// },
paymentDay: {
payType: {
type: 'string',
title: intl.formatMessage({ id: 'member.management.memberPrComingClassify.drawer.form.classify.paymentDay' }),
required: true,
enum: [],
'x-component': 'Radio',
title: intl.formatMessage({ id: 'member.management.memberPrComingClassify.drawer.form.classify.payType' }, { default: '结算方式' }),
'x-rules': [
{
pattern: /^([0]|[1-9][0-9]{0,7})$/,
message: intl.formatMessage({ id: 'member.management.memberPrComingClassify.drawer.form.classify.paymentDay.rules-legal' }),
required: true,
message: intl.formatMessage({ id: 'member.management.memberPrComingClassify.drawer.form.classify.payType.required' }, { default: '请选择结算方式' }),
},
],
},
invoiceTypeName: {
type: 'string',
enum: [
{
label: MEMBER_INVOICE_TYPE[MEMBER_INVOICE_TYPE_1],
value: MEMBER_INVOICE_TYPE[MEMBER_INVOICE_TYPE_1],
},
{
label: MEMBER_INVOICE_TYPE[MEMBER_INVOICE_TYPE_2],
value: MEMBER_INVOICE_TYPE[MEMBER_INVOICE_TYPE_2],
PAYMENT_DAYS_MONTH_WRAP: {
type: 'object',
'x-component': 'Mega-Layout',
'x-component-props': {
grid: true,
full: true,
autoRow: true,
columns: 2,
label: ' ',
labelCol: 8,
},
properties: {
month: {
type: 'string',
title: '',
'x-component-props': {
addonAfter: intl.formatMessage({ id: 'member.management.memberPrComingClassify.drawer.form.classify.month.addonAfter' }, { default: '个月' }),
},
'x-rules': [
{
pattern: PATTERN_MAPS.quantity,
message: intl.formatMessage({ id: 'member.management.memberPrComingClassify.drawer.form.classify.month.legal' }, { default: '请输入正整数' }),
},
],
},
{
label: MEMBER_INVOICE_TYPE[MEMBER_INVOICE_TYPE_3],
value: MEMBER_INVOICE_TYPE[MEMBER_INVOICE_TYPE_3],
monthDay: {
type: 'string',
title: intl.formatMessage({ id: 'member.management.memberPrComingClassify.drawer.form.classify.monthDay' }, { default: '结算日' }),
'x-component-props': {
addonAfter: intl.formatMessage({ id: 'member.management.memberPrComingClassify.drawer.form.classify.monthDay.addonAfter' }, { default: '号' }),
},
'x-rules': [
{
pattern: PATTERN_MAPS.quantity,
message: intl.formatMessage({ id: 'member.management.memberPrComingClassify.drawer.form.classify.monthDay.legal' }, { default: '请输入正整数' }),
},
{
validator(value) {
const intVal = +value;
return intVal > 28 || intVal < 0 ? intl.formatMessage({ id: 'member.management.memberPrComingClassify.drawer.form.classify.monthDay.limit' }, { default: '请输入大于0 小于等于 28的数值' }) : '';
}
},
],
},
{
label: MEMBER_INVOICE_TYPE[MEMBER_INVOICE_TYPE_4],
value: MEMBER_INVOICE_TYPE[MEMBER_INVOICE_TYPE_4],
},
visible: false,
},
PAYMENT_DAYS_DAY_WRAP: {
type: 'object',
'x-component': 'Mega-Layout',
'x-component-props': {
grid: true,
full: true,
autoRow: true,
columns: 2,
label: ' ',
labelCol: 8,
},
properties: {
days: {
type: 'string',
title: '',
'x-component-props': {
addonAfter: intl.formatMessage({ id: 'member.management.memberPrComingClassify.drawer.form.classify.days.addonAfter' }, { default: '天' }),
},
'x-rules': [
{
pattern: PATTERN_MAPS.quantity,
message: intl.formatMessage({ id: 'member.management.memberPrComingClassify.drawer.form.classify.days.legal' }, { default: '请输入正整数' }),
},
],
},
{
label: MEMBER_INVOICE_TYPE[MEMBER_INVOICE_TYPE_5],
value: MEMBER_INVOICE_TYPE[MEMBER_INVOICE_TYPE_5],
},
visible: false,
},
MONTHLY_TATEMENT_WRAP: {
type: 'object',
'x-component': 'Mega-Layout',
'x-component-props': {
grid: true,
full: true,
autoRow: true,
columns: 2,
label: ' ',
labelCol: 8,
},
properties: {
monthDay: {
type: 'string',
title: intl.formatMessage({ id: 'member.management.memberPrComingClassify.drawer.form.classify.monthDay' }, { default: '结算日' }),
'x-component-props': {
addonAfter: intl.formatMessage({ id: 'member.management.memberPrComingClassify.drawer.form.classify.monthDay.addonAfter' }, { default: '号' }),
},
'x-rules': [
{
pattern: PATTERN_MAPS.quantity,
message: intl.formatMessage({ id: 'member.management.memberPrComingClassify.drawer.form.classify.monthDay.legal' }, { default: '请输入正整数' }),
},
{
validator(value) {
const intVal = +value;
return intVal > 28 || intVal < 0 ? intl.formatMessage({ id: 'member.management.memberPrComingClassify.drawer.form.classify.monthDay.limit' }, { default: '请输入大于0 小于等于 28的数值' }) : '';
}
},
],
},
],
},
visible: false,
},
invoiceType: {
type: 'string',
enum: [],
title: intl.formatMessage({ id: 'member.management.memberPrComingClassify.drawer.form.classify.invoiceTypeName' }),
required: true,
},
......
......@@ -5,7 +5,7 @@
* @LastEditTime: 2021-12-03 17:52:44
* @Description: 审核Form抽屉
*/
import React, { useEffect } from 'react';
import React, { useEffect, useRef } from 'react';
import {
Drawer,
Button,
......@@ -18,27 +18,59 @@ import {
FormEffectHooks,
FormPath,
} from '@formily/antd';
import { getMemberDepositClassifyCity, getMemberDepositClassifyProvince } from '@/services/MemberV2Api';
import { getMemberDepositClassifyCategoryItems, getMemberDepositClassifyCity, getMemberDepositClassifyProvince } from '@/services/MemberV2Api';
import { getProductCustomerGetCustomerCategoryTree } from '@/services/ProductV2Api';
import { useLinkageUtils } from '@/utils/formEffectUtils';
import {
PAY_TYPE_CASH,
PAY_TYPE_PAYMENT_DAYS_DAY,
PAY_TYPE_PAYMENT_DAYS_MONTH,
PAY_TYPE_MONTHLY_STATEMENT,
} from '@/constants/settlement';
import { ArrayCards } from '@formily/antd-components';
import { schema } from './schema';
import { CategoryItemType, completeCategory } from '../../../utils';
import CascaderFormItem from '../../../components/CascaderFormItem';
import styles from './index.less';
type CategoriesType = {
/**
* 品类名称
* 品类明细
*/
names: string[],
details: {
/**
* 层级
*/
level: number,
/**
* 品类id
*/
categoryId: number,
/**
* 品类名称
*/
name: string,
}[],
/**
* 付款周期(天)
* 结算方式
*/
paymentDay: number,
payType: number,
/**
* 月份数
*/
month?: number,
/**
* 发票类型名称
* 结算日
*/
invoiceTypeName: string,
monthDay?: number,
/**
* 天数
*/
days?: number,
/**
* 发票类型
*/
invoiceType: number,
/**
* 税点,只要百分比的分子部分,不要转换为小数
*/
......@@ -75,6 +107,10 @@ export type ValueType = {
interface FormValueType extends Omit<ValueType, ('maxAmount' | 'categories')> {
/**
* 会员编码
*/
code: string,
/**
* 单次合作金额
*/
maxAmount: string,
......@@ -83,17 +119,29 @@ interface FormValueType extends Omit<ValueType, ('maxAmount' | 'categories')> {
*/
categories: {
/**
* 已选品类
* 已选品类,id string[]
*/
category: string[],
/**
* 付款周期(天)
* 结算方式
*/
payType: number,
/**
* 月份数
*/
paymentDay: string,
month?: string,
/**
* 发票类型名称
* 结算日
*/
invoiceTypeName: string,
monthDay?: string,
/**
* 天数
*/
days?: string,
/**
* 发票类型
*/
invoiceType: number,
/**
* 税点,只要百分比的分子部分,不要转换为小数
*/
......@@ -101,33 +149,6 @@ interface FormValueType extends Omit<ValueType, ('maxAmount' | 'categories')> {
}[],
}
interface CategoryItem {
/**
* 数据id
*/
id: string,
/**
* 父级id
*/
parentId: string,
/**
* 标题
*/
title: string,
/**
* 是否选中
*/
checked: boolean,
/**
* 图片url路径
*/
imageUrl: string,
/**
* 子元素
*/
children: CategoryItem[],
}
type CategoryType = {
/**
* label
......@@ -143,7 +164,7 @@ type CategoryType = {
children: CategoryType[],
}
function recursionCategoryData(dataSource: CategoryItem[]): CategoryType[] {
function recursionCategoryData(dataSource: CategoryItemType[]): CategoryType[] {
const ret: CategoryType[] = [];
dataSource.forEach((item) => {
......@@ -208,6 +229,8 @@ const ComingClassifyDrawer: React.FC<IProps> = (props: IProps) => {
submitLoading,
} = props;
const categoryTreeRef = useRef<CategoryItemType[]>([]);
const intl = useIntl();
useEffect(() => {
......@@ -227,12 +250,22 @@ const ComingClassifyDrawer: React.FC<IProps> = (props: IProps) => {
const handleSubmit = (values: FormValueType) => {
if (onSubmit) {
const { maxAmount, categories, ...rest } = values;
const formated = categories.map((item) => ({
names: item.category,
paymentDay: +item.paymentDay,
invoiceTypeName: item.invoiceTypeName,
taxPoint: +item.taxPoint,
}));
const formated = categories.map((item) => {
const categoryArr = completeCategory(item.category, categoryTreeRef.current);
return {
details: categoryArr.map((category, level) => ({
level: level + 1,
categoryId: +category.id,
name: category.title,
})),
payType: item.payType,
month: item.month ? +item.month : undefined,
monthDay: item.monthDay ? +item.monthDay : undefined,
days: item.days ? +item.days : undefined,
invoiceType: item.invoiceType,
taxPoint: +item.taxPoint,
};
});
onSubmit({
maxAmount: +maxAmount,
categories: formated,
......@@ -303,6 +336,51 @@ const ComingClassifyDrawer: React.FC<IProps> = (props: IProps) => {
);
});
});
// 结算方式改变,联动显示对应的 FormItem
onFieldValueChange$('categories.*.payType').subscribe((fieldState) => {
formActions.setFieldState(
FormPath.transform(fieldState.name, /\d/, $1 => `categories.${$1}.*(PAYMENT_DAYS_MONTH_WRAP,PAYMENT_DAYS_DAY_WRAP,MONTHLY_TATEMENT_WRAP)`),
state => {
FormPath.setIn(state, 'visible', false);
}
);
switch (fieldState.value) {
case PAY_TYPE_CASH: {
break;
}
case PAY_TYPE_PAYMENT_DAYS_DAY: {
formActions.setFieldState(
FormPath.transform(fieldState.name, /\d/, $1 => `categories.${$1}.PAYMENT_DAYS_MONTH_WRAP`),
state => {
FormPath.setIn(state, 'visible', true);
}
);
break;
}
case PAY_TYPE_PAYMENT_DAYS_MONTH: {
formActions.setFieldState(
FormPath.transform(fieldState.name, /\d/, $1 => `categories.${$1}.PAYMENT_DAYS_DAY_WRAP`),
state => {
FormPath.setIn(state, 'visible', true);
}
);
break;
}
case PAY_TYPE_MONTHLY_STATEMENT: {
formActions.setFieldState(
FormPath.transform(fieldState.name, /\d/, $1 => `categories.${$1}.MONTHLY_TATEMENT_WRAP`),
state => {
FormPath.setIn(state, 'visible', true);
}
);
break;
}
default:
break;
}
});
}
return (
......@@ -361,6 +439,7 @@ const ComingClassifyDrawer: React.FC<IProps> = (props: IProps) => {
getProductCustomerGetCustomerCategoryTree().then(res => {
if (res.code === 1000) {
const { data = [] } = res;
categoryTreeRef.current = data as CategoryItemType[];
formActions.setFieldState('categories.*.category', state => {
FormPath.setIn(state, 'props.x-component-props.options', data);
});
......@@ -368,6 +447,27 @@ const ComingClassifyDrawer: React.FC<IProps> = (props: IProps) => {
}).catch((err) => {
console.warn(err);
});
// 请求结算方式与发票类型数据
getMemberDepositClassifyCategoryItems().then(res => {
if (res.code === 1000 && res.data) {
const { payTypes = [], invoiceTypes } = res.data;
formActions.setFieldState('categories.*.payType', state => {
FormPath.setIn(state, 'props.enum', payTypes.map((item) => ({
label: item.payTypeName,
value: item.payType,
})));
});
formActions.setFieldState('categories.*.invoiceType', state => {
FormPath.setIn(state, 'props.enum', invoiceTypes.map((item) => ({
label: item.invoiceTypeName,
value: item.invoiceType,
})));
});
}
}).catch((err) => {
console.warn(err);
});
});
onFieldValueChange$('agree').subscribe(fieldState => {
......
......@@ -8,12 +8,6 @@
import { ISchema } from '@formily/antd';
import { getIntl } from 'umi';
import {
MEMBER_INVOICE_TYPE_1,
MEMBER_INVOICE_TYPE_2,
MEMBER_INVOICE_TYPE_3,
MEMBER_INVOICE_TYPE_4,
MEMBER_INVOICE_TYPE_5,
MEMBER_INVOICE_TYPE,
MEMBER_TAX_POINT_1,
MEMBER_TAX_POINT_2,
MEMBER_TAX_POINT_3,
......@@ -132,7 +126,7 @@ export const schema: ISchema = {
title: intl.formatMessage({ id: 'member.management.memberPrComingClassify.drawer.form.classify.category' }),
'x-component': 'CascaderFormItem',
'x-component-props': {
fieldNames: { label: 'title', value: 'title', children: 'children' },
fieldNames: { label: 'title', value: 'id', children: 'children' },
changeOnSelect: true,
expandTrigger: 'hover',
},
......@@ -182,41 +176,130 @@ export const schema: ISchema = {
// },
// },
// },
paymentDay: {
payType: {
type: 'string',
title: intl.formatMessage({ id: 'member.management.memberPrComingClassify.drawer.form.classify.paymentDay' }),
required: true,
enum: [],
'x-component': 'Radio',
title: intl.formatMessage({ id: 'member.management.memberPrComingClassify.drawer.form.classify.payType' }, { default: '结算方式' }),
'x-rules': [
{
pattern: /^([0]|[1-9][0-9]{0,7})$/,
message: intl.formatMessage({ id: 'member.management.memberPrComingClassify.drawer.form.classify.paymentDay.rules-legal' }),
required: true,
message: intl.formatMessage({ id: 'member.management.memberPrComingClassify.drawer.form.classify.payType.required' }, { default: '请选择结算方式' }),
},
],
},
invoiceTypeName: {
type: 'string',
enum: [
{
label: MEMBER_INVOICE_TYPE[MEMBER_INVOICE_TYPE_1],
value: MEMBER_INVOICE_TYPE[MEMBER_INVOICE_TYPE_1],
},
{
label: MEMBER_INVOICE_TYPE[MEMBER_INVOICE_TYPE_2],
value: MEMBER_INVOICE_TYPE[MEMBER_INVOICE_TYPE_2],
PAYMENT_DAYS_MONTH_WRAP: {
type: 'object',
'x-component': 'Mega-Layout',
'x-component-props': {
grid: true,
full: true,
autoRow: true,
columns: 2,
label: ' ',
labelCol: 8,
},
properties: {
month: {
type: 'string',
title: '',
'x-component-props': {
addonAfter: intl.formatMessage({ id: 'member.management.memberPrComingClassify.drawer.form.classify.month.addonAfter' }, { default: '个月' }),
},
'x-rules': [
{
pattern: PATTERN_MAPS.quantity,
message: intl.formatMessage({ id: 'member.management.memberPrComingClassify.drawer.form.classify.month.legal' }, { default: '请输入正整数' }),
},
],
},
{
label: MEMBER_INVOICE_TYPE[MEMBER_INVOICE_TYPE_3],
value: MEMBER_INVOICE_TYPE[MEMBER_INVOICE_TYPE_3],
monthDay: {
type: 'string',
title: intl.formatMessage({ id: 'member.management.memberPrComingClassify.drawer.form.classify.monthDay' }, { default: '结算日' }),
'x-component-props': {
addonAfter: intl.formatMessage({ id: 'member.management.memberPrComingClassify.drawer.form.classify.monthDay.addonAfter' }, { default: '号' }),
},
'x-rules': [
{
pattern: PATTERN_MAPS.quantity,
message: intl.formatMessage({ id: 'member.management.memberPrComingClassify.drawer.form.classify.monthDay.legal' }, { default: '请输入正整数' }),
},
{
validator(value) {
const intVal = +value;
return intVal > 28 || intVal < 0 ? intl.formatMessage({ id: 'member.management.memberPrComingClassify.drawer.form.classify.monthDay.limit' }, { default: '请输入大于0 小于等于 28的数值' }) : '';
}
},
],
},
{
label: MEMBER_INVOICE_TYPE[MEMBER_INVOICE_TYPE_4],
value: MEMBER_INVOICE_TYPE[MEMBER_INVOICE_TYPE_4],
},
visible: false,
},
PAYMENT_DAYS_DAY_WRAP: {
type: 'object',
'x-component': 'Mega-Layout',
'x-component-props': {
grid: true,
full: true,
autoRow: true,
columns: 2,
label: ' ',
labelCol: 8,
},
properties: {
days: {
type: 'string',
title: '',
'x-component-props': {
addonAfter: intl.formatMessage({ id: 'member.management.memberPrComingClassify.drawer.form.classify.days.addonAfter' }, { default: '天' }),
},
'x-rules': [
{
pattern: PATTERN_MAPS.quantity,
message: intl.formatMessage({ id: 'member.management.memberPrComingClassify.drawer.form.classify.days.legal' }, { default: '请输入正整数' }),
},
],
},
{
label: MEMBER_INVOICE_TYPE[MEMBER_INVOICE_TYPE_5],
value: MEMBER_INVOICE_TYPE[MEMBER_INVOICE_TYPE_5],
},
visible: false,
},
MONTHLY_TATEMENT_WRAP: {
type: 'object',
'x-component': 'Mega-Layout',
'x-component-props': {
grid: true,
full: true,
autoRow: true,
columns: 2,
label: ' ',
labelCol: 8,
},
properties: {
monthDay: {
type: 'string',
title: intl.formatMessage({ id: 'member.management.memberPrComingClassify.drawer.form.classify.monthDay' }, { default: '结算日' }),
'x-component-props': {
addonAfter: intl.formatMessage({ id: 'member.management.memberPrComingClassify.drawer.form.classify.monthDay.addonAfter' }, { default: '号' }),
},
'x-rules': [
{
pattern: PATTERN_MAPS.quantity,
message: intl.formatMessage({ id: 'member.management.memberPrComingClassify.drawer.form.classify.monthDay.legal' }, { default: '请输入正整数' }),
},
{
validator(value) {
const intVal = +value;
return intVal > 28 || intVal < 0 ? intl.formatMessage({ id: 'member.management.memberPrComingClassify.drawer.form.classify.monthDay.limit' }, { default: '请输入大于0 小于等于 28的数值' }) : '';
}
},
],
},
],
},
visible: false,
},
invoiceType: {
type: 'string',
enum: [],
title: intl.formatMessage({ id: 'member.management.memberPrComingClassify.drawer.form.classify.invoiceTypeName' }),
required: true,
},
......
......@@ -252,4 +252,44 @@ export function renderFieldTypeContent(fieldType: FieldType, fieldValue: any): R
break;
}
return node;
};
export type CategoryItemType = {
/**
* 数据id
*/
id: string,
/**
* 父级id
*/
parentId: string,
/**
* 标题
*/
title: string,
/**
* 是否选中
*/
checked: boolean,
/**
* 图片url路径
*/
imageUrl: string,
/**
* 子元素
*/
children: CategoryItemType[],
}
export function completeCategory(ids: string[], dataSource: CategoryItemType[]): CategoryItemType[] {
const ret: CategoryItemType[] = [];
if (!Array.isArray(dataSource)) {
return ret;
}
ids.forEach((curId, index) => {
const target = (ret[index - 1]?.children || dataSource).find((item) => item.id === curId);
if (target) {
ret.push(target);
}
});
return ret;
};
\ No newline at end of file
......@@ -172,16 +172,20 @@ const OwnMallTempleteEdit: React.FC<ShopPreviewPropsType> = props => {
};
const getInfoList = async () => {
const param: any = {
current: 1,
pageSize: 1,
};
const res = await getManageMemberInformationListAdorn(param);
message.destroy()
if (res.code === 1000 && res.data.data && res.data.data.length > 0) {
return res.data.data[0].title;
try {
const param: any = {
current: 1,
pageSize: 1,
};
const res = await getManageMemberInformationListAdorn(param);
message.destroy()
if (res.code === 1000 && res.data.data && res.data.data.length > 0) {
return res.data.data[0].title;
}
return '';
} catch (error) {
return '';
}
return '';
};
const getComponentsConfig = async () => {
......
......@@ -479,9 +479,12 @@ const EAccountDetail: React.FC<{}> = () => {
lg={14}
>
<p className={styles.rightInfo}>
{
{/* {
details?.accountStatus &&
<StatusTag title={memberStatusMap[details.accountStatus]['title']} type={memberStatusMap[details.accountStatus]['type']} />
} */}
{
details?.accountStatusName
}
</p>
</Col>
......
......@@ -299,10 +299,10 @@ const Company: React.FC<{}> = () => {
required: true,
message: intl.formatMessage({ id: 'payandSettle.eAccountApprove.components.company.mellowCard.1.uniCredit.message' })
},
{
pattern: /^\d{12}$/,
message: intl.formatMessage({ id: 'payandSettle.eAccountApprove.components.company.mellowCard.1.uniCredit.message1' })
}
// {
// pattern: /^\d{12}$/,
// message: intl.formatMessage({ id: 'payandSettle.eAccountApprove.components.company.mellowCard.1.uniCredit.message1' })
// }
]}
>
<Input placeholder={intl.formatMessage({ id: 'payandSettle.eAccountApprove.components.company.mellowCard.1.uniCredit.placeholder' })} />
......
import React from 'react'
import React, { useState } from 'react'
import { history, useIntl } from 'umi'
import { Button, Card, message } from 'antd'
import { PageHeaderWrapper } from '@ant-design/pro-layout'
......@@ -31,10 +31,12 @@ const AddRepository: React.FC<{}> = (props) => {
pageStatus
} = usePageStatus()
const [loading, setLoading] = useState<boolean>(false)
// 整体表单提交
const formSubmit = async (values) => {
setLoading(true)
const params = omit(values, ['NO_SUBMIT3'])
console.log(params, 'params')
if (params['applyMember']) {
params['applyMember'] = params['applyMember']
}
......@@ -52,10 +54,11 @@ const AddRepository: React.FC<{}> = (props) => {
let res = await postProductFreightSpaceAdd(params)
if (res.code === 1000) {
setTimeout(() => {
history.goBack(-1)
history.goBack()
}, 1000)
}
}
setLoading(false)
}
return (
......@@ -67,7 +70,7 @@ const AddRepository: React.FC<{}> = (props) => {
extra={(
pageStatus !== PageStatus.PREVIEW
? (
<Button key="1" onClick={() => addSchemaAction.submit()} type="primary" icon={<SaveOutlined />}>
<Button key="1" loading={loading} onClick={() => addSchemaAction.submit()} type="primary" icon={<SaveOutlined />}>
{intl.formatMessage({ id: 'repositories.addRepository.extra' })}
</Button>
)
......
import React, { useCallback, useRef } from 'react';
import React from 'react';
import { OrderDetailContext } from '../../../_public/order/context';
import { Button } from 'antd';
import OrderDetailHeader from '@/pages/transaction/components/orderDetailHeader';
import OrderDetailWrapper from '@/pages/transaction/components/orderDetailWrapper';
import PreLoading from '@/components/PreLoading';
import { useOrderDetail } from '../../../_public/order/effects/useOrderDetail';
import OrderHandDeleved from '../../../components/orderHandDeleved';
import OrderDetailSection from '../../../components/orderDetailSection';
import { usePageStatus } from '@/hooks/usePageStatus';
import { useIntl } from 'umi';
const ReadyConfirmDelevedOrderDetail: React.FC = () => {
const { formContext, id, detailList } = useOrderDetail({type: 's_readyConfirmDelevedOrder'})
const { batchNo } = usePageStatus()
const intl = useIntl()
// // 是否是手工发货
// const isHandDeleved = formContext.data && formContext.data.purchaseOrderInteriorState === SaleOrderInsideWorkState.HAND_DELEVED_ORDER
// // 所有发货单都是否已经发货了
// const isShowBtn = isHandDeleved || formContext.data?.orderDeliveryDetailsResponses?.some(v => v.interiorState === DeliverySideState.ADD_LOGISTICS_ORDER)
// 是否发过货
// const isHandDeleved = Number(batchNo) <= 0
const isHandDeleved = true
// 是否发货完成
const approvedRef = useRef<any>({})
const handleClick = useCallback(() => {
if (isHandDeleved) {
approvedRef.current.setVisible(true)
} else {
const deleveBox = document.querySelector('#deleveBox') as any
window.scrollTo(0, deleveBox.offsetTop)
}
}, [isHandDeleved])
const ReadyDelevedOrderDetail: React.FC = () => {
const { formContext, detailList } = useOrderDetail({type: 'purchaseOrder'})
return (
<div>
<OrderDetailContext.Provider value={formContext}>
<OrderDetailHeader detailList={detailList} detailData={formContext.data} extraRight={
<Button type='primary' onClick={handleClick}>
{ isHandDeleved ? intl.formatMessage({ id: 'saleOrder.querenshougongfa', defaultMessage: '确认手工发货' }) : intl.formatMessage({ id: 'saleOrder.qufahuo', defaultMessage: '去发货' }) }
</Button>
} />
<OrderDetailHeader detailList={detailList} detailData={formContext.data}/>
<OrderDetailWrapper>
<PreLoading loading={!formContext.data} active paragraph={{rows: 6}}>
<OrderDetailSection formContext={formContext} type='saleOrder'/>
<OrderDetailSection formContext={formContext}/>
</PreLoading>
</OrderDetailWrapper>
{/* 提交时触发的弹窗集合 */}
<OrderHandDeleved
currentRef={approvedRef}
/>
</OrderDetailContext.Provider>
</div>
);
};
export default ReadyConfirmDelevedOrderDetail;
export default ReadyDelevedOrderDetail;
......@@ -21,7 +21,7 @@ export const useSelfTable = () => {
render: (text, record) => {
// 查看订单, 需根据状态显示不同schema
return (
<EyePreview url={`/memberCenter/tranactionAbility/saleOrder/readyConfirmDelevedOrder/preview?id=${record.orderId}`}>
<EyePreview url={`/memberCenter/tranactionAbility/purchaseOrder/readyDelevedOrder/detail?id=${record.orderId}`}>
{text}
</EyePreview>
)
......
......@@ -66,7 +66,7 @@ class ProductStore implements IProductModule {
tempObj[item] = attributeValueIdArr[index]
}
else if(this.attributeLists.filter(_item => _item.id === item)[0]?.type === 3){ // 输入
tempObj[item] = attributeValueArr[index][0].value
tempObj[item] = attributeValueArr[index][0]?.value || ''
}
else{
tempObj[item] = attributeValueIdArr[index][0]
......
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