Commit 7ce5b41d authored by 前端-黄佳鑫's avatar 前端-黄佳鑫
parents cf643f5b 60b0794c
......@@ -4,7 +4,7 @@ import AntdDayjsWebpackPlugin from 'antd-dayjs-webpack-plugin'
// import LodashModuleReplacementPlugin from 'lodash-webpack-plugin'
export default defineConfig({
devtool: false,
devtool: 'cheap-module-source-map',
// externals: {
// "react": 'React',
// "react-dom": 'ReactDOM',
......
......@@ -364,6 +364,20 @@ export default [
hideInMenu: true,
noMargin: true,
},
// 待发货订单
{
path: '/memberCenter/tranactionAbility/purchaseOrder/readyDelevedOrder',
name: 'readyDelevedOrder',
component: '@/pages/transaction/purchaseOrder/readyDelevedOrder'
},
// 待发货订单-详情
{
path: '/memberCenter/tranactionAbility/purchaseOrder/readyDelevedOrder/detail',
name: 'readyDelevedOrderDetail',
component: '@/pages/transaction/purchaseOrder/readyDelevedOrder/detail',
hideInMenu: true,
noMargin: true,
},
]
}
]
......@@ -912,6 +912,16 @@ export default {
'commodity.products.schema.fastSchema.min':'Lowest price',
'commodity.products.schema.fastSchema.max':'Highest price',
'commodity.products.schema.fastSchema.submit':'Query',
'commodity.products.schema.fastSchema.qingxuanzeshangjiashangpin' : 'Please select the goods on the shelves',
'commodity.products.schema.fastSchema.daochuchenggong' : 'Export success',
'commodity.products.menuMore.5' : 'Export product QR code',
'commodity.products.liebiaogouxuan' : 'List check:',
'commodity.products.geshangpin' : 'A commodity',
'commodity.products.shuoming' : 'xplain:',
'commodity.products.textone' : '1. a maximum of 1000 product two-dimensional code export',
'commodity.products.texttwo' : '2. The size of the QR code of the exported product is 400*400',
'commodity.products.textthree' : '3. The QR code of the product shall be in. JPG format, and the picture shall be named as the product ID+ the product name (for example: 10001 DIR Cool and Refreshing Yi Xia Zhenggong Red Lipstick).',
'commodity.products.textfour' : '4. The qr code picture of the exported product is packaged according to the store. The file name of the package is the store name + the date of the current export (for example: APP Store 20121201).',
}
\ No newline at end of file
}
......@@ -409,6 +409,8 @@ export default {
'saleOrder.querenshougongfa': 'Confirm manual delivery',
'saleOrder.qufahuo': 'Go to ship',
'saleOrder.querenfahuo': 'Confirm shipment',
'saleOrder.haoyoupintuan': 'Invite friends to join a group',
'saleOrder.shouhou': 'after sale',
'saleOrder.xianshangzhifu': 'Online payment',
'saleOrder.xianxiazhifu': 'Offline payment',
'saleOrder.shouxinzhifu': 'Credit Payment',
......@@ -468,6 +470,8 @@ export default {
'saleOrder.querenshenhecao': 'Confirm review operation',
'saleOrder.shifouquerenshen': 'Are you sure to review the invoice number?',
'saleOrder.dexiaoshoufahuo': 'The sales invoice',
'saleOrder.xuanzeleixin': 'selective type',
'saleOrder.xiaochengxu': 'mini program',
// Requisitions
......@@ -568,4 +572,4 @@ export default {
'purchaseRequisition.bianjiqinggoudan': 'Edit purchase requisition',
'purchaseRequisition.xinzengqinggoudan': 'New purchase requisition',
'purchaseRequisition.baocun': 'Save'
}
\ No newline at end of file
}
......@@ -1025,6 +1025,7 @@ export default {
'payandSettle.capitalAccounts.eAccount.jiebangshoujihao': 'Untie mobile phone number',
'payandSettle.capitalAccounts.eAccount.bangdingxinshouji': 'Bind new phone number',
'payandSettle.capitalAccounts.eAccount.caozuochenggong': 'Operation successful',
'payandSettle.capitalAccounts.eAccount.caozuoshibai': 'operation failure',
'payandSettle.capitalAccounts.eAccount.tijiao': 'Submit',
'payandSettle.capitalAccounts.eAccount.tonglianzhanghu': 'Tonglian Account',
'payandSettle.capitalAccounts.eAccount.jiekouqingqiuyi': 'Interface request exception',
......@@ -1056,4 +1057,7 @@ export default {
'payandSettle.capitalAccounts.eAccount.shurunideshou': 'Enter your mobile phone number',
'payandSettle.capitalAccounts.eAccount.qingtianxieyanzheng': 'Please fill in the verification code',
'payandSettle.capitalAccounts.eAccount.qingshuruduanxin': 'Please enter the SMS verification code',
'payandSettle.capitalAccounts.eAccount.yiwanchengzhifu': 'Payment completed',
'payandSettle.capitalAccounts.eAccount.weiwanchengzhifu': 'Outstanding payment',
'payandSettle.capitalAccounts.eAccount.fukuanwanchengqianqingbuyaoguanbi': 'Please do not close this window until payment is completed. After completing the payment, please click the button below according to your situation.',
}
......@@ -311,4 +311,14 @@ export default {
'transaction_components.wenjianleixingbixuwei': 'File type must be',
'transaction_components.shangchuanwenjiandaxiaobuchao1': 'Upload file size does not exceed',
'transaction_components.yicishangchuanyigewenjian1': 'Upload one file at a time, and the size of each attachment cannot exceed',
'transaction_components.qingsaomawanchengzhifu': 'Please scan the code to complete payment',
'transaction_components.liantongzhifuqueren': 'Confirmation of payment through link',
'transaction_components.liantongzhifu': 'Allinpay',
'transaction_components.yanzhengma': 'verification code',
'transaction_components.yifasongweihaozhi': 'A verification code has been sent to you ending with',
'transaction_components.deshoujihao': 'The mobile phone number',
'transaction_components.zhifu': 'payment',
'transaction_components.yiwanchengzhifu': 'Payment completed',
'transaction_components.weiwanchengzhifu': 'Outstanding payment',
'transaction_components.fukuanqianqingbuyaoguanbi': 'Please do not close this window until payment is completed. After completing the payment, please click the button below according to your situation.',
}
......@@ -179,6 +179,7 @@ export default {
'afterService.components.ReturnDetailInfo.title': '환불 내역',
'afterService.components.ReturnDetailInfo.refund.tip': '프롬프트',
'afterService.components.ReturnDetailInfo.refund.okText': '확인',
'afterService.components.ReturnDetailInfo.refund.content': '환불 확인되나요?',
'afterService.components.ReturnDetailInfo.refund.cancelText': '취소',
'afterService.components.ReturnDetailInfo.payCount': '지불 횟수',
'afterService.components.ReturnDetailInfo.outerStatus': '컨디션',
......
......@@ -912,6 +912,16 @@ export default {
'commodity.products.schema.fastSchema.min' : '최저 가격',
'commodity.products.schema.fastSchema.max' : '최고 가격',
'commodity.products.schema.fastSchema.submit' : '조회',
'commodity.products.schema.fastSchema.qingxuanzeshangjiashangpin' : '진열대 상품 조작을 선택하세요',
'commodity.products.schema.fastSchema.daochuchenggong' : '성공적으로 내보내기',
'commodity.products.menuMore.5' : '상품의 qr 코드를 내보내다',
'commodity.products.liebiaogouxuan' : '목록 체크:',
'commodity.products.geshangpin' : '몇 가지 상품',
'commodity.products.shuoming' : '해설',
'commodity.products.textone' : '1. 한번에 최대 1000개의 상품 qr 코드를 내보냅니다',
'commodity.products.texttwo' : '2. 상품 내보내기 qr 코드 크기는 400*400입니다',
'commodity.products.textthree' : '3. 상품 qr 코드는.jpg 형식, 사진 이름은 상품 id + 상품명 (예:10001_dir 시원한 여름 정궁 립스틱) ',
'commodity.products.textfour' : '4. 상품 2차원 코드 내보내기 그림 쇼핑몰 패키지 압축 패키지, 압축 패키지 파일 이름 규칙에 따라 쇼핑몰 이름 + 현재 내보내기 년월일 (예:app 쇼핑몰 20121201) ',
}
......@@ -409,6 +409,8 @@ export default {
'saleOrder.querenshougongfa': '수동 배송 확인',
'saleOrder.qufahuo': '출하하다',
'saleOrder.querenfahuo': '배송 확인',
'saleOrder.haoyoupintuan': '친한 친구를 초청하여 단체 모임을 결성하다',
'saleOrder.shouhou': '판매 후',
'saleOrder.xianshangzhifu': '온라인 지불',
'saleOrder.xianxiazhifu': '오프라인 지불',
'saleOrder.shouxinzhifu': '여신 지불',
......@@ -468,6 +470,8 @@ export default {
'saleOrder.querenshenhecao': '감사 작업 확인',
'saleOrder.shifouquerenshen': '승인 송장 번호가',
'saleOrder.dexiaoshoufahuo': '의 판매 송장',
'saleOrder.xuanzeleixin': '선택 형식:',
'saleOrder.xiaochengxu': '애플릿',
// 请购单
......
......@@ -1025,6 +1025,7 @@ export default {
'payandSettle.capitalAccounts.eAccount.jiebangshoujihao': '휴대폰 번호를 묶다',
'payandSettle.capitalAccounts.eAccount.bangdingxinshouji': '새 휴대폰 번호 바인딩',
'payandSettle.capitalAccounts.eAccount.caozuochenggong': '작업 성공',
'payandSettle.capitalAccounts.eAccount.caozuoshibai': '작업 실패',
'payandSettle.capitalAccounts.eAccount.tijiao': '커밋',
'payandSettle.capitalAccounts.eAccount.tonglianzhanghu': '통관 계좌',
'payandSettle.capitalAccounts.eAccount.jiekouqingqiuyi': '인터페이스 요청 예외',
......@@ -1056,4 +1057,7 @@ export default {
'payandSettle.capitalAccounts.eAccount.shurunideshou': '핸드폰 번호 입력',
'payandSettle.capitalAccounts.eAccount.qingtianxieyanzheng': '인증번호를 입력하십시오.',
'payandSettle.capitalAccounts.eAccount.qingshuruduanxin': '문자 인증번호 입력',
'payandSettle.capitalAccounts.eAccount.yiwanchengzhifu': '지불이 완료되다',
'payandSettle.capitalAccounts.eAccount.weiwanchengzhifu': '미지급',
'payandSettle.capitalAccounts.eAccount.fukuanwanchengqianqingbuyaoguanbi': '付款完成前请不要关闭此窗口。完成付款后请根据您的情况点击下面的按钮。',
}
......@@ -311,4 +311,14 @@ export default {
'transaction_components.wenjianleixingbixuwei': '파일 유형은 다음과 같아야 합니다.',
'transaction_components.shangchuanwenjiandaxiaobuchao1': '업로드 파일 크기 초과 안 함',
'transaction_components.yicishangchuanyigewenjian1': '한 번에 하나의 파일을 업로드하며, 각 첨부 파일의 크기는 초과할 수 없습니다.',
'transaction_components.qingsaomawanchengzhifu': '코드를 스캔해서 결제를 마쳐 주세요',
'transaction_components.liantongzhifuqueren': '통화 지불 확인',
'transaction_components.liantongzhifu': '통화 결제',
'transaction_components.yanzhengma': '인증번호',
'transaction_components.yifasongweihaozhi': '끝 번호로 확인 번호가 전송되었습니다',
'transaction_components.deshoujihao': '핸드폰 번호',
'transaction_components.zhifu': '지불',
'transaction_components.yiwanchengzhifu': '지불이 완료되다',
'transaction_components.weiwanchengzhifu': '미지급',
'transaction_components.fukuanqianqingbuyaoguanbi': '결제가 완료되기 전에는이 창을 닫지 마십시오. 결제 완료 후 귀하의 상황에 맞게 아래 단추를 클릭해 주십시오. ',
}
......@@ -179,6 +179,7 @@ export default {
'afterService.components.ReturnDetailInfo.title': '退款明细',
'afterService.components.ReturnDetailInfo.refund.tip': '提示',
'afterService.components.ReturnDetailInfo.refund.okText': '确认',
'afterService.components.ReturnDetailInfo.refund.content': '是否确认退款?',
'afterService.components.ReturnDetailInfo.refund.cancelText': '取消',
'afterService.components.ReturnDetailInfo.payCount': '支付次数',
'afterService.components.ReturnDetailInfo.outerStatus': '状态',
......
......@@ -913,6 +913,16 @@ export default {
'commodity.products.schema.fastSchema.min' : '最低价格',
'commodity.products.schema.fastSchema.max' : '最高价格',
'commodity.products.schema.fastSchema.submit' : '查询',
'commodity.products.schema.fastSchema.qingxuanzeshangjiashangpin' : '请选择上架的商品操作',
'commodity.products.schema.fastSchema.daochuchenggong' : '导出成功',
'commodity.products.menuMore.5' : '导出商品二维码',
'commodity.products.liebiaogouxuan' : '列表勾选:',
'commodity.products.geshangpin' : '个商品',
'commodity.products.shuoming' : '说明:',
'commodity.products.textone' : '1、一次最多导出1000个商品二维码',
'commodity.products.texttwo' : '2、导出商品二维码大小为400*400',
'commodity.products.textthree' : '3、商品二维码为.jpg格式,图片命名为商品ID+商品名称(例如:10001_DIR清凉一夏正宫红口红)',
'commodity.products.textfour' : '4、导出的商品二维码图片按商城打包压缩包,压缩包文件命名规则为商城名称+当前导出年月日(例如:APP商城_20121201)',
}
......@@ -409,6 +409,8 @@ export default {
'saleOrder.querenshougongfa': '确认手工发货',
'saleOrder.qufahuo': '去发货',
'saleOrder.querenfahuo': '确认发货',
'saleOrder.haoyoupintuan': '邀请好友拼团',
'saleOrder.shouhou': '售后',
'saleOrder.xianshangzhifu': '线上支付',
'saleOrder.xianxiazhifu': '线下支付',
'saleOrder.shouxinzhifu': '授信支付',
......@@ -468,6 +470,8 @@ export default {
'saleOrder.querenshenhecao': '确认审核操作',
'saleOrder.shifouquerenshen': '是否确认审核发货单号为',
'saleOrder.dexiaoshoufahuo': '的销售发货单',
'saleOrder.xuanzeleixin': '选择类型:',
'saleOrder.xiaochengxu': '小程序',
// 请购单
......
......@@ -1025,6 +1025,7 @@ export default {
'payandSettle.capitalAccounts.eAccount.jiebangshoujihao': '解绑手机号',
'payandSettle.capitalAccounts.eAccount.bangdingxinshouji': '绑定新手机号',
'payandSettle.capitalAccounts.eAccount.caozuochenggong': '操作成功',
'payandSettle.capitalAccounts.eAccount.caozuoshibai': '操作成功',
'payandSettle.capitalAccounts.eAccount.tijiao': '提交',
'payandSettle.capitalAccounts.eAccount.tonglianzhanghu': '通联账户',
'payandSettle.capitalAccounts.eAccount.jiekouqingqiuyi': '接口请求异常',
......@@ -1056,4 +1057,7 @@ export default {
'payandSettle.capitalAccounts.eAccount.shurunideshou': '输入你的手机号码',
'payandSettle.capitalAccounts.eAccount.qingtianxieyanzheng': '请填写验证码',
'payandSettle.capitalAccounts.eAccount.qingshuruduanxin': '请输入短信验证码',
'payandSettle.capitalAccounts.eAccount.yiwanchengzhifu': '已完成支付',
'payandSettle.capitalAccounts.eAccount.weiwanchengzhifu': '未完成支付',
'payandSettle.capitalAccounts.eAccount.fukuanwanchengqianqingbuyaoguanbi': '付款完成前请不要关闭此窗口。完成付款后请根据您的情况点击下面的按钮。',
}
......@@ -311,4 +311,14 @@ export default {
'transaction_components.wenjianleixingbixuwei': '文件类型必须为',
'transaction_components.shangchuanwenjiandaxiaobuchao1': '上传文件大小不超过',
'transaction_components.yicishangchuanyigewenjian1': '一次上传一个文件,每个附件大小不能超过',
'transaction_components.qingsaomawanchengzhifu': '请扫码完成支付',
'transaction_components.liantongzhifuqueren': '通联支付确认',
'transaction_components.liantongzhifu': '通联支付',
'transaction_components.yanzhengma': '验证码',
'transaction_components.yifasongweihaozhi': '已将验证码发送至您尾号为',
'transaction_components.deshoujihao': '的手机号',
'transaction_components.zhifu': '支付',
'transaction_components.yiwanchengzhifu': '已完成支付',
'transaction_components.weiwanchengzhifu': '未完成支付',
'transaction_components.fukuanqianqingbuyaoguanbi': '付款完成前请不要关闭此窗口。完成付款后请根据您的情况点击下面的按钮。',
}
import React, { useState } from 'react';
import React, { useEffect, useState } from 'react';
import { Button, Input, message, Modal } from 'antd';
import styles from './index.less'
import useCountDown from '@/utils/hooks';
......@@ -13,7 +13,9 @@ interface Iprops {
// onResendCode: () => void,
/** 商户订单号 */
tradeCode: string
onClose?: () => void
onClose?: () => void,
// /** 时间戳随机码 */
// randomCode: string
}
const GetCodeModal: React.FC<Iprops> = (props: Iprops) => {
......@@ -35,13 +37,19 @@ const GetCodeModal: React.FC<Iprops> = (props: Iprops) => {
onOk?.(code)
}
useEffect(() => {
if (visible) {
start();
}
}, [visible])
const handleChange = (e) => {
setCode(e.target.value);
}
const handleSendCode = async () => {
const { code, data } = await getPayEAccountAllInPayReSendPayCode({
tradeCode: tradeCode
tradeCode: `${tradeCode}`
})
if (code === 1000) {
start();
......@@ -70,7 +78,7 @@ const GetCodeModal: React.FC<Iprops> = (props: Iprops) => {
</div>
<Button disabled={isActive} onClick={handleSendCode}>{text}</Button>
</div>
<div className={styles.tips}>已将验证码发送到您尾号为2800的手机号</div>
{/* <div className={styles.tips}>已将验证码发送到您尾号为2800的手机号</div> */}
</div>
</Modal>
)
......
......@@ -8,7 +8,8 @@ interface Iprops {
mode: 'wechat' | 'alipay'
visible: boolean,
qrcode: string,
onClose: () => void
onClose: () => void,
onOk: () => void
}
const MODE_TEXT = {
......@@ -16,17 +17,23 @@ const MODE_TEXT = {
alipay: '支付宝'
}
const QrcodeModal: React.FC<Iprops> = (props: Iprops) => {
const { mode, visible, qrcode, onClose } = props;
const { mode, visible, qrcode, onClose, onOk } = props;
const currentImage = mode === 'wechat' ? wechat : alipay;
const handleClose = () => {
onClose?.()
}
const handleOk = () => {
onOk?.();
}
return (
<Modal
visible={visible}
title={`请用${MODE_TEXT[mode]}支付`}
onCancel={handleClose}
okText="我已付款"
onOk={handleOk}
>
<div className={styles.container}>
<div className={styles.tips}>
......
......@@ -15,7 +15,16 @@ import { fetchOptions } from '../../common'
import UploadVoucherModal from '../../components/UploadVoucherModal';
import Voucher from '../../components/Voucher';
import useSetSearchValueInTable from '@/hooks/useSetSearchValueInTable';
import { getSettleAccountsCommonGetSettlementOrderType, getSettleAccountsCommonGetSettlementStatus, getSettleAccountsMemberSettlementGetPayablePayProve, getSettleAccountsMemberSettlementPagePayableSettlement, GetSettleAccountsMemberSettlementPagePayableSettlementRequest, postSettleAccountsMemberSettlementCommunicationPay, postSettleAccountsMemberSettlementCommunicationPayResult, postSettleAccountsMemberSettlementPay } from '@/services/SettleV2Api';
import {
getSettleAccountsCommonGetSettlementOrderType,
getSettleAccountsCommonGetSettlementStatus,
getSettleAccountsMemberSettlementCommunicationPayResult,
getSettleAccountsMemberSettlementGetCommunicationPayTradeNo,
getSettleAccountsMemberSettlementGetPayablePayProve,
getSettleAccountsMemberSettlementPagePayableSettlement,
GetSettleAccountsMemberSettlementPagePayableSettlementRequest,
postSettleAccountsMemberSettlementCommunicationPay,
postSettleAccountsMemberSettlementPay } from '@/services/SettleV2Api';
import { postReportSettlementMemberManualSettlement } from '@/services/ReportV2Api';
import OtherPayModal from '../components/OtherPayModal';
import useHandleSettlementList from './hooks/useHandleSettlementList';
......@@ -54,6 +63,11 @@ const SettlementList = () => {
const [files, setFiles] = useState([]);
const [qrcodeUrl, setQrcodeUrl] = useState<string>("");
const [currentUniversalPay, setCurrentUniversalPay] = useState<UniversalPay | null>(null);
/**
* 时间戳做随机码,
* 这里有个场景就是当我付款时,点微信支付等,然后取消了付款,再次点付款(微信支付),此时通联那边会认为这个支付订单会重复了,所以需要虚构一个随机码去标识一下
* */
const [randomCode, setRandomCode] = useState<string>("");
/** 轮询请求支付状态 */
const { cycleCancel, cycleStart, result } = useCycleRequest({ offsetTime: 3, endCount: 10 });
......@@ -144,12 +158,13 @@ const SettlementList = () => {
}
/** 通联支付,短信验证码支付 */
/** 通联支付,短信验证码支付, 这里是后台随机生成的结算单 */
const handleCompleteSmsCode = async (codeString: string) => {
const { code, data, message: msg } = await postPayEAccountAllInPayConfirmPay({
tradeCode: itemInfo.settlementNo,
// tradeCode: `${itemInfo.settlementNo}-${randomCode}`,
tradeCode: randomCode,
verificationCode: codeString
})
}, { ctlType: 'none' })
if (code !== 1000) {
message.error(msg);
return;
......@@ -163,14 +178,25 @@ const SettlementList = () => {
const channel = params.payChannel;
try {
setUniversalPayLoading(true)
const res = await getSettleAccountsMemberSettlementGetCommunicationPayTradeNo({
id: itemInfo.id.toString()
})
if (res.code !== 1000) {
message.error(res.message);
return;
}
setRandomCode(res.data);
// TODO 加一个随机数
const { data, code, message: msg } = await postSettleAccountsMemberSettlementCommunicationPay({
id: itemInfo.id,
payChannelType: params.payChannel,
})
}, {ctlType: 'none'})
if (code !== 1000) {
message.error(msg);
return;
}
setCurrentUniversalPay(channel as UniversalPay);
if ([UNIVERSAL_PAY_WECHAT, UNIVERSAL_PAY_ALIPAY].includes(channel)) {
message.loading({
......@@ -201,13 +227,14 @@ const SettlementList = () => {
/** 轮询接口 */
useEffect(() => {
if (modals.qrcodeModal) {
cycleStart(postSettleAccountsMemberSettlementCommunicationPayResult, { settlementNo: itemInfo.settlementNo });
cycleStart(getSettleAccountsMemberSettlementCommunicationPayResult, { settlementNo: itemInfo.settlementNo });
}
}, [modals])
useEffect(() => {
if (result && result.code === 1000 && result.data ) {
message.success('支付成功')
handleClose('qrcodeModal');
cycleCancel();
formActions.submit();
}
......@@ -223,6 +250,11 @@ const SettlementList = () => {
ref.current.reload({ ...values, startTime, endTime });
}
const handleIhadPay = () => {
handleClose('qrcodeModal');
formActions.submit();
}
return (
<PageHeaderWrapper>
<Card>
......@@ -295,6 +327,7 @@ const SettlementList = () => {
<QrcodeModal
visible={modals.qrcodeModal}
mode={currentUniversalPay === UNIVERSAL_PAY_WECHAT ? 'wechat' : 'alipay' }
onOk={handleIhadPay}
// mode={'wechat'}
qrcode={qrcodeUrl}
onClose={() => handleClose('qrcodeModal')}
......@@ -302,9 +335,9 @@ const SettlementList = () => {
<GetCodeModal
visible={modals.smsCodeModal}
onOk={handleCompleteSmsCode}
tradeCode={itemInfo?.settlementNo}
tradeCode={randomCode}
onClose={() => handleClose('smsCodeModal')}
// randomCode={randomCode}
/>
</PageHeaderWrapper>
)
......
......@@ -174,7 +174,6 @@ const PriceAttributeForm: React.FC<Iprops> = (props) => {
let _temp_attributeValObjArr = [] // 取id备用
let _attributeNameArr = []
let _attributeValueArr = []
if (hasAttribute.length) { // 提取价格属性 属性名数组 属性值SKU数组 /*编辑情况下直接进入此页面length为空 此时需获取调用接口返回的数据生成*/
hasAttribute.map(_item => {
_attributeNameArr.push(_item.attributeName) // 用于列header
......@@ -313,7 +312,7 @@ const PriceAttributeForm: React.FC<Iprops> = (props) => {
if (assistPrice && Array.isArray(assistPrice)) {
return assistPrice.map(p => <p>{planPrice === 3 ? p : `${intl.formatMessage({ id: 'commodity.products.addProductsItem.priceAttributeForm.currency' })}${p}`}</p>)
} else if (assistPrice) {
return planPrice === 3 ? assistPrice : `${intl.formatMessage({ id: 'commodity.products.addProductsItem.priceAttributeForm.currency' })}${assistPrice}`
return planPrice === 3 ? assistPrice : (isNaN(assistPrice) ? `¥${0.00}` : `${intl.formatMessage({ id: 'commodity.products.addProductsItem.priceAttributeForm.currency' })}${assistPrice}`)
}
}
})
......
......@@ -523,7 +523,11 @@ const Products: React.FC<{}> = () => {
} else if (e.key === '3' || e.key === '4') {
handleBatch(e.key)
} else if(e.key === '5') {
currentRef.current.length ? setExportQrcodeModal(true) : message.error('请选择需要操作的商品')
console.log(currentRefRow.current)
if(!currentRefRow.current.every(item => item.status === 5)) {
return message.error(intl.formatMessage({ id: 'commodity.products.handleBatch.qingxuanzeshangjiashangpin' }))
}
currentRef.current.length ? setExportQrcodeModal(true) : message.error(intl.formatMessage({ id: 'commodity.products.handleBatchDelete.error' }))
}
}
......@@ -533,25 +537,17 @@ const Products: React.FC<{}> = () => {
a.style = "display: none"
setExportLoading(true)
postProductCommodityExportCommodityQrCode({idList: currentRef.current}, { responseType: 'blob', getResponse: true }).then((res:any) => {
const { code, data, response } = res
const { data, response } = res
const filename = response.headers.get('content-disposition').split('=')[1]
if(code) {
throw new TypeError(res.message)
} else {
let blob = new Blob([data], {type: "application/x-zip-compressed"})
// let objectUrl = URL.createObjectURL(blob)
// window.location.href = objectUrl
const url = window.URL.createObjectURL(blob);
a.href = url;
a.download = filename;
a.click();
window.URL.revokeObjectURL(url);
}
}).catch(error =>{
message.error(error)
let blob = new Blob([data], {type: "application/x-zip-compressed"})
const url = window.URL.createObjectURL(blob);
a.href = url;
a.download = filename;
a.click();
window.URL.revokeObjectURL(url);
}).finally(() => {
setExportLoading(false)
message.success('导出成功')
message.success(intl.formatMessage({ id: 'commodity.products.handleBatch.daochuchenggong' }))
setExportQrcodeModal(false)
})
}
......@@ -624,7 +620,7 @@ const Products: React.FC<{}> = () => {
{intl.formatMessage({ id: 'commodity.products.menuMore.4' })}
</Menu.Item>
<Menu.Item key="5" icon={<ExportOutlined />}>
导出商品二维码
{intl.formatMessage({ id: 'commodity.products.menuMore.5' })}
</Menu.Item>
</Menu>
)
......@@ -789,18 +785,18 @@ const Products: React.FC<{}> = () => {
</Form>
</Modal>
<Modal
title='导出商品二维码'
title={intl.formatMessage({ id: 'commodity.products.menuMore.5' })}
visible={exportQrcodeModal}
onOk={handleExportQrcode}
onCancel={() => setExportQrcodeModal(false)}
confirmLoading={exportLoading}
>
<h1>列表勾选:{currentRef.current.length || 0}个商品</h1>
<h2>说明:</h2>
<p>1、一次最多导出1000个商品二维码</p>
<p>2、导出商品二维码大小为400*400</p>
<p>3、商品二维码为.jpg格式,图片命名为商品ID+商品名称(例如:10001_DIR清凉一夏正宫红口红)</p>
<p>4、导出的商品二维码图片按商城打包压缩包,压缩包文件命名规则为商城名称+当前导出年月日(例如:APP商城_20121201)</p>
<h1>{intl.formatMessage({ id: 'commodity.products.liebiaogouxuan' })}{currentRef.current.length || 0}{intl.formatMessage({ id: 'commodity.products.geshangpin' })}</h1>
<h2>{intl.formatMessage({ id: 'commodity.products.shuoming' })}</h2>
<p>{intl.formatMessage({ id: 'commodity.products.textone' })}</p>
<p>{intl.formatMessage({ id: 'commodity.products.texttwo' })}</p>
<p>{intl.formatMessage({ id: 'commodity.products.textthree' })}</p>
<p>{intl.formatMessage({ id: 'commodity.products.textfour' })}</p>
</Modal>
{/* 选择上游商品 */}
<UpperProductModalTable currentRef={upperRef} type="checkbox" tableRef={ref} />
......
......@@ -100,7 +100,7 @@ const EAccountDetail: React.FC<{}> = () => {
const { code, data, message: msg } = res
if(code !== 1000) { return false }
setDetails(data)
setExtra(`已将验证码发送至您尾号为${data.phone.substr(7, 4)}的手机号`)
setExtra(`${intl.formatMessage({id: 'payandSettle.capitalAccounts.eAccount.yijiangyanzhengma'})}${data.phone.substr(7, 4)}${intl.formatMessage({id: 'payandSettle.capitalAccounts.eAccount.deshoujihao'})}`)
getPayEAccountAllInPayGetEAccountStatusRecord({id: data.id + ''}).then(res => {
const { data } = res
setMoveData(data)
......@@ -268,6 +268,7 @@ const EAccountDetail: React.FC<{}> = () => {
modalRef.current.setVisible(false)
setSendCodeVisible(true)
setTradeCode(data.tradeCode)
start()
} else if(code === 1000 && parasm.type === 'GATEWAY_VSP') {
modalRef.current.setVisible(false)
setPayResultVisible(true)
......@@ -283,6 +284,7 @@ const EAccountDetail: React.FC<{}> = () => {
const handleRecharge = () => {
modalRef.current.setVisible(true)
}
const applyWithdraw = () => {
......@@ -291,11 +293,11 @@ const EAccountDetail: React.FC<{}> = () => {
}
const handleWithdraw = () => {
setLoading(true)
withdrawForm.submit()
}
const handleWidthdrawSubmit = (values) => {
setLoading(true)
const amount = Number(values.amount)
if (amount > 0 && amount <= details.usableBalance) { // 大于0并且小于可用金额
let params = {
......@@ -649,7 +651,7 @@ const EAccountDetail: React.FC<{}> = () => {
</Modal>
{/* 网银/快捷验证码 */}
<Modal
title='验证码'
title={intl.formatMessage({ id: 'payandSettle.eAccountApprove.components.personalFinish.mellowCard.4.captcha'})}
visible={sendCodeVisible}
onOk={handleSendCode}
onCancel={() => setSendCodeVisible(false)}
......@@ -690,14 +692,14 @@ const EAccountDetail: React.FC<{}> = () => {
</Form>
</Modal>
<Modal
title="支付"
title={intl.formatMessage({ id: 'payandSettle.amountAccountManage.paymentWithdraw.columns.option.1'})}
visible={payResultVisible}
onOk={()=>{getAccountInfo();setPayResultVisible(false)}}
onCancel={()=>setPayResultVisible(false)}
okText="已完成支付"
cancelText="未完成支付"
okText={intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.yiwanchengzhifu'})}
cancelText={intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.weiwanchengzhifu'})}
>
<p>付款完成前请不要关闭此窗口。完成付款后请根据您的情况点击下面的按钮。</p>
<p>{intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.fukuanwanchengqianqingbuyaoguanbi'})}</p>
</Modal>
</PageHeaderWrapper>
)
......
import React, { useContext, useEffect, useState } from 'react'
import { useIntl } from 'umi';
import { Button, Col, Form, Input, Row, Select } from 'antd'
import { Button, Col, Form, Input, message, Row, Select } from 'antd'
import MellowCard from '@/components/MellowCard';
import { BIND_PHONE, EDetailContext, formItemLayout, formItemLayoutCompany, prefixSelector, prefixSelectorEle, tailFormItemLayout, tailFormItemLayoutCompany } from '../../constant';
import { EditOutlined } from '@ant-design/icons';
......@@ -90,17 +90,21 @@ const Company: React.FC<{}> = () => {
picture: values[item]
}))
const fns = pictures.map((item, index) => new Promise(() => {
setTimeout(() => postPayAllInPayIdCardCollect(item), 500 * index)
const fns = pictures.map((item, index) => new Promise((resolve, reject) => {
setTimeout(() => {
const res = postPayAllInPayIdCardCollect(item, {ctlType: "none"})
resolve(res)
}, 500 * index)
}))
Promise.all(fns).then(res => {
console.log(res)
}).finally(() => {
setTimeout(() => {
setLoading(false)
reloadFormData()
}, 2000)
Promise.all(fns).then((res) => {
if(res.every(item => item['code'] === 1000)) {
message.success(intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.caozuochenggong' }))
} else {
message.success(intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.caozuoshibai' }))
}
setLoading(false)
reloadFormData()
})
}
......
......@@ -103,7 +103,7 @@ const CompanyFinish: React.FC<{}> = () => {
</Col>
<Col span={12}>
<Row className={styles['card-list']}>
<Col span={6} className={styles['card-list_title']}>{intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.zhihanghanghao', defaultMessage: '支行号' })}</Col>
<Col span={6} className={styles['card-list_title']}>{intl.formatMessage({ id: 'payandSettle.capitalAccounts.eAccount.zhihanghanghao', defaultMessage: '支行号' })}</Col>
<Col>{data.bankNo}</Col>
</Row>
</Col>
......@@ -169,22 +169,27 @@ const CompanyFinish: React.FC<{}> = () => {
confirm={handleBindSubmit}
actions={bindActions}
schema={data?.phone ? unbindSchema : bindSchema}
modalProps={{confirmLoading: bindLoading}}
modalProps={{confirmLoading: bindLoading, destroyOnClose: true}}
components={{PhoneCode}}
effects={($, actions) => {
useAsyncSelect('areaCode', fetchTelCode)
$('onFormMount').subscribe(() => {
$('onFormInit').subscribe(() => {
if(data?.phone) {
actions.setFieldValue('phone', data.phone)
actions.setFieldState('verificationCode', state => {
state.props['x-component-props']['type'] = UNBIND_PHONE
})
actions.setFieldState('phone', state => {
state.props['x-component-props']['disabled'] = true
})
} else {
actions.setFieldState('phone', state => {
state.props['x-component-props']['disabled'] = false
})
actions.setFieldState('verificationCode', state => {
state.props['x-component-props']['type'] = BIND_PHONE
})
}
})
}}
/>
......
......@@ -33,7 +33,6 @@ const PersonalFinish: React.FC<{}> = () => {
}, [data])
const onFinish = async (values: any) => {
console.log('Received values of form: ', values);
// 绑定银行卡
const p1 = await postPayAllInPayBindBankCard({phone: data.phone, verificationCode: values.captcha, cardNo: values.cardNo}, { ctlType: "none" })
// 进一步完善个人信息
......@@ -110,9 +109,9 @@ const PersonalFinish: React.FC<{}> = () => {
// 绑定解绑手机
const handleBindSubmit = () => {
setBindLoading(true)
const fn = data?.phone ? postPayAllInPayUnbindPhone : postPayAllInPayBindPhone
bindActions.submit().then(async ({values}: any) => {
setBindLoading(true)
fn(values).then(res => {
if(res.code === 1000) {
reloadFormData()
......@@ -295,22 +294,27 @@ const PersonalFinish: React.FC<{}> = () => {
confirm={handleBindSubmit}
actions={bindActions}
schema={data?.phone ? unbindSchema : bindSchema}
modalProps={{confirmLoading: bindLoading}}
modalProps={{confirmLoading: bindLoading, destroyOnClose: true}}
components={{PhoneCode}}
effects={($, actions) => {
useAsyncSelect('areaCode', fetchTelCode)
$('onFormMount').subscribe(() => {
$('onFormInit').subscribe(() => {
if(data?.phone) {
actions.setFieldValue('phone', data.phone)
actions.setFieldState('verificationCode', state => {
state.props['x-component-props']['type'] = UNBIND_PHONE
})
actions.setFieldState('phone', state => {
state.props['x-component-props']['disabled'] = true
})
} else {
actions.setFieldState('phone', state => {
state.props['x-component-props']['disabled'] = false
})
actions.setFieldState('verificationCode', state => {
state.props['x-component-props']['type'] = BIND_PHONE
})
}
})
}}
/>
......
......@@ -36,7 +36,6 @@ const PhoneCode = (props) => {
}
setLoading(true)
form.validate('phone').then(result => {
console.log(result, type)
// 发送验证码
const phone = form.getFieldValue('phone')
postPayAllInPaySendVerificationCode({phone, verificationCodeType: type}).then(res => {
......
import { useIntl } from 'umi';
import { getIntl } from 'umi';
import { ISchemaFormActions, ISchemaFormAsyncActions } from '@formily/antd';
import { columnsUnitProduct } from '../constant';
import { GlobalConfig } from '@/global/config';
......@@ -33,7 +33,7 @@ export const searchCustomerCategoryOptionEffect = (context: any, fieldName: stri
// 构建设置价格 table 所需要的data和columns
export const constructTableData = (data: any, ctx: ISchemaFormActions | ISchemaFormAsyncActions, pageStatus: any) => {
const intl = useIntl();
const intl = getIntl();
let col: any = [...columnsUnitProduct]
let temp: any = []
// 兼容编辑价格策略 新增使用data 编辑使用data[0].commodityUnitPrice
......@@ -94,7 +94,7 @@ export const constructTableData = (data: any, ctx: ISchemaFormActions | ISchemaF
// 生成 Api 所需要的参数
export const transformParamsForApi = (data: any, ctx: ISchemaFormActions | ISchemaFormAsyncActions) => {
const intl = useIntl();
const intl = getIntl();
let _params: any = {}
_params["name"] = data.name
_params["priceType"] = data.priceType
......
......@@ -264,7 +264,7 @@ const PriceModal: React.FC<PriceModalProps> = (props) => {
},
{
pattern: /^\d+(\.\d{1,4})?$/,
message: intl.formatMessage({ id: 'priceManage.priceStrategy.priceModal.uniquePrice.rule1' }),
message: intl.formatMessage({ id: 'priceManage.priceStrategy.priceModal.uniquePrice.rule.2' }),
}
]}
>
......
......@@ -41,7 +41,7 @@ const SetStrategy: React.FC<{}> = () => {
let res = await postProductCommoditySaveOrUpdateUnitPriceStrategy({ ...params, ..._params })
if (res.code === 1000) {
setTimeout(() => {
history.goBack(-1)
history.goBack()
}, 1000)
}
setBtnLoading(false)
......
......@@ -104,8 +104,6 @@ export const useOrderDetail = (options: OrderDetailHookProps) => {
const payObj = data.payments.filter(item => item.showPayment)[0]
setCurrentPayInfoId(payObj?.paymentId ? payObj.paymentId : data.payments[0].paymentId)
}
} else {
message.error(msg)
}
})
}
......
......@@ -74,7 +74,7 @@ const OrderMergeInfo: React.FC<OrderMergeInfoProps> = (props) => {
name: 'invoice',
render: item => item && <div className={style.invoice_list_item}>
<div className={style.invoice_list_item_content}>
<div className={cx(style.invoice_list_item_content_tag, item.invoiceKind !== 1 ? style.special : '')}>{item.invoiceType === 1 ? intl.formatMessage({id: 'transaction_components.zengzhishuiputongfapiao'}) : intl.formatMessage({id: 'transaction_components.zengzhishuizhuanyongfapiao'})}</div>
<div className={cx(style.invoice_list_item_content_tag, item.invoiceKind !== 1 ? style.special : '')}>{item.invoiceKind === 1 ? intl.formatMessage({id: 'transaction_components.zengzhishuiputongfapiao'}) : intl.formatMessage({id: 'transaction_components.zengzhishuizhuanyongfapiao'})}</div>
<div className={style.invoice_list_item_content_name}>
<div>{item.title}</div>
<div>{item.taxNo}</div>
......@@ -234,8 +234,8 @@ const OrderMergeInfo: React.FC<OrderMergeInfoProps> = (props) => {
{/* 查看发票 */}
<Modal title={intl.formatMessage({id: 'transaction_components.fapiaoxinxi'})} visible={isModalVisible} onOk={()=>setIsModalVisible(false)} onCancel={()=>setIsModalVisible(false)}>
<Row gutter={[0 ,10]} style={{fontSize: 14}}>
<Col span={4} style={{fontSize: 12, color: "#909399"}}>{intl.formatMessage({id: 'transaction_components.kaijuleixing'})}</Col><Col span={20}>{invoice?.invoiceKind === 1 ? intl.formatMessage({id: 'transaction_components.qiye'}) : intl.formatMessage({id: 'transaction_components.geren'})}</Col>
<Col span={4} style={{fontSize: 12, color: "#909399"}}>{intl.formatMessage({id: 'transaction_components.fapiaozhonglei'})}</Col><Col span={20}>{invoice?.invoiceTypeName}</Col>
<Col span={4} style={{fontSize: 12, color: "#909399"}}>{intl.formatMessage({id: 'transaction_components.kaijuleixing'})}</Col><Col span={20}>{invoice?.invoiceTypeName}</Col>
<Col span={4} style={{fontSize: 12, color: "#909399"}}>{intl.formatMessage({id: 'transaction_components.fapiaozhonglei'})}</Col><Col span={20}>{invoice?.invoiceKindName}</Col>
<Col span={4} style={{fontSize: 12, color: "#909399"}}>{intl.formatMessage({id: 'transaction_components.fapiaotaitou'})}</Col><Col span={20}>{invoice?.title}</Col>
<Col span={4} style={{fontSize: 12, color: "#909399"}}>{intl.formatMessage({id: 'transaction_components.nashuihao'})}</Col><Col span={20}>{invoice?.taxNo}</Col>
<Col span={4} style={{fontSize: 12, color: "#909399"}}>{intl.formatMessage({id: 'transaction_components.kaihuhang'})}</Col><Col span={20}>{invoice?.bank}</Col>
......@@ -262,7 +262,7 @@ const OrderMergeInfo: React.FC<OrderMergeInfoProps> = (props) => {
<div className={cx(style.invoice_list_item_content_tag, item.kind !== 1 ? style.special : '')}>{item.kind === 1 ? intl.formatMessage({id: 'transaction_components.zengzhishuiputongfapiao'}) : intl.formatMessage({id: 'transaction_components.zengzhishuizhuanyongfapiao'})}</div>
<div className={style.invoice_list_item_content_name}>
<span>{item.invoiceTitle}</span>
<span>({item.type === 1 ? intl.formatMessage({id: 'transaction_components.qiye'}) : intl.formatMessage({id: 'transaction_components.geren'})})</span>
<span>{item.type === 1 ? intl.formatMessage({id: 'transaction_components.qiye'}) : intl.formatMessage({id: 'transaction_components.geren'})}</span>
{
item.isDefault === 1 ? <div className={style.default}>{intl.formatMessage({id: 'transaction_components.moren'})}</div> :
<div className={style.set_default} onClick={e => handleSetDefault(item, e)}>{intl.formatMessage({id: 'transaction_components.sheweimoren'})}</div>
......
......@@ -12,9 +12,8 @@ import { encryptedByAES } from '@/utils/cryptoAes'
import QRCode from 'qrcode'
import { getOrderBuyerValidatePayResult, postOrderBuyerValidatePay } from '@/services/OrderNewV2Api'
import { getSettleAccountsCommonCorporateAccountDetail } from '@/services/SettleV2Api'
import { getPayAssetAccountBalance, getPayCreditGetCredit, getPayEAccountAllInPayGetUserBalance, getPayEAccountAllInPayReSendPayCode } from '@/services/PayV2Api'
import { getPayAssetAccountBalance, getPayCreditGetCredit, getPayEAccountAllInPayGetAccountDetail, getPayEAccountAllInPayGetUserBalance, getPayEAccountAllInPayReSendPayCode, postPayEAccountAllInPayConfirmPay } from '@/services/PayV2Api'
import useCountDown from '@/utils/hooks'
import { postPayEAccountAllInPayConfirmPay } from '@/services/PayV2Api/id13209'
const intl = getIntl();
export interface OrderPayModalProps {
currentRef: any,
......@@ -61,6 +60,7 @@ const OrderPayModal: React.FC<OrderPayModalProps> = (props) => {
const [fileLists, setFileLists] = useState<any>([])
const [tradeCode, setTradeCode] = useState<string>('') // 交易号
const [payResultVisible, setPayResultVisible] = useState<boolean>(false)
const [phoneEndNumber, setPhoneEndNumber] = useState('')
useEffect(() => {
if (currentRef) {
......@@ -272,6 +272,12 @@ const OrderPayModal: React.FC<OrderPayModalProps> = (props) => {
setIsSpin(false)
})
}
// 查询e账户手机尾号
getPayEAccountAllInPayGetAccountDetail().then(res => {
if(res.code === 1000) {
setPhoneEndNumber(res.data.phone)
}
})
setCurrent(99)
setPayStep(1)
} else if(checked.id === 14) {
......@@ -327,7 +333,7 @@ const OrderPayModal: React.FC<OrderPayModalProps> = (props) => {
handleSubmitPay()
} else if(current === 4 || current === 6) {
// 微信 支付宝 提示扫码支付
return message.info('请扫码完成支付')
return message.info(intl.formatMessage({id: 'transaction_components.qingsaomawanchengzhifu'}))
} else if(current === 99) {
// 提交通联支付
handleSubmitPay()
......@@ -384,6 +390,7 @@ const OrderPayModal: React.FC<OrderPayModalProps> = (props) => {
setPayStep(3)
setTradeCode(res.data.tradeNo)
setCurrent(1000)
start()
} else if(tonglian && checked.id === 14) {
console.log(current, checked, '通联快捷跳转')
setCurrent(1000)
......@@ -770,7 +777,7 @@ const OrderPayModal: React.FC<OrderPayModalProps> = (props) => {
</p>
<p>
<span className={style.title}>
支付金额(元)
{intl.formatMessage({id: 'transaction_components.zhifujineyuan'})}
</span>
<span className={cx(style.amount, style.amount2)}>
{Number(paymentAmount).toFixed(2)}
......@@ -782,23 +789,33 @@ const OrderPayModal: React.FC<OrderPayModalProps> = (props) => {
{
current === 99 &&
<div>
<p style={{fontWeight: "bold"}}>通联支付确认</p>
<p style={{fontWeight: "bold"}}>{intl.formatMessage({id: 'transaction_components.liantongzhifuqueren'})}</p>
<p>
<span className={style.title}>
支付方式
{intl.formatMessage({id: 'transaction_components.zhifufangshi'})}
</span>
<span className={style.amount}>
通联支付
{intl.formatMessage({id: 'transaction_components.liantongzhifu'})}
</span>
</p>
<p>
<span className={style.title}>
支付渠道
{intl.formatMessage({id: 'transaction_components.zhifuqudao'})}
</span>
<span className={style.amount}>
{checked?.channel}
</span>
</p>
{
checked.id === 15 && <p>
<span className={style.title}>
{intl.formatMessage({id: 'transaction_components.zhanghukeyongyueyuan'})}
</span>
<span className={style.amount}>
{balanceInfo?.toFixed(2)}
</span>
</p>
}
<p>
<span className={style.title}>
{intl.formatMessage({id: 'transaction_components.zhifujineyuan'})}
......@@ -823,8 +840,8 @@ const OrderPayModal: React.FC<OrderPayModalProps> = (props) => {
onFinish={submitFormCode}
>
<Form.Item
label="验证码"
// extra={extra}
label={intl.formatMessage({id: 'transaction_components.yanzhengma'})}
extra={phoneEndNumber ? `${intl.formatMessage({id: 'transaction_components.yifasongweihaozhi'})}${phoneEndNumber.substr(7, 4)}${intl.formatMessage({id: 'transaction_components.deshoujihao'})}` : ''}
style={{textAlign: "left"}}
>
<Row gutter={8}>
......@@ -847,14 +864,14 @@ const OrderPayModal: React.FC<OrderPayModalProps> = (props) => {
}
</Modal>
<Modal
title="支付"
title={intl.formatMessage({id: 'transaction_components.zhifu'})}
visible={payResultVisible}
onOk={()=>{history.goBack();setPayResultVisible(false)}}
onCancel={()=>setPayResultVisible(false)}
okText="已完成支付"
cancelText="未完成支付"
okText={intl.formatMessage({id: 'transaction_components.yiwanchengzhifu'})}
cancelText={intl.formatMessage({id: 'transaction_components.weiwanchengzhifu'})}
>
<p>付款完成前请不要关闭此窗口。完成付款后请根据您的情况点击下面的按钮。</p>
<p>{intl.formatMessage({id: 'transaction_components.fukuanqianqingbuyaoguanbi'})}</p>
</Modal>
</>)
}
......
......@@ -112,6 +112,8 @@ export const MoneyTotalBox = registerVirtualBox('moneyTotalBox', props => {
</Col>
</RowStyle>
})
/** 此文件模块 包含orderCollect文件夹备用 暂不起作用 */
// 采购订单详情页. 包含新增和编辑
const PurchaseOrderDetail:React.FC<PurchaseOrderDetailProps> = (props) => {
......@@ -161,23 +163,23 @@ const PurchaseOrderDetail:React.FC<PurchaseOrderDetailProps> = (props) => {
useEffect(() => {
if (id) {
setFormLoading(true)
// @ts-ignore
getOrderProcurementOrderDetails({
id
}).then(res => {
const { data } = res
const _orderProductRequests = data.orderModel > 30 ? procurementRenderField(data.orderProductRequests) : data.orderProductRequests
setInitFormValue({
...data,
// 判断是否合同下单
orderProductRequests: [],
deliveryTime: formatTimeString(data.deliveryTime)
})
setTimeout(() => {
addSchemaAction.setFieldValue('orderProductRequests', _orderProductRequests)
}, 1000)
setFormLoading(false)
})
// // @ts-ignore
// getOrderProcurementOrderDetails({
// id
// }).then(res => {
// const { data } = res
// const _orderProductRequests = data.orderModel > 30 ? procurementRenderField(data.orderProductRequests) : data.orderProductRequests
// setInitFormValue({
// ...data,
// // 判断是否合同下单
// orderProductRequests: [],
// deliveryTime: formatTimeString(data.deliveryTime)
// })
// setTimeout(() => {
// addSchemaAction.setFieldValue('orderProductRequests', _orderProductRequests)
// }, 1000)
// setFormLoading(false)
// })
}
if (modelType) {
......
......@@ -131,7 +131,6 @@ const AddressModal:React.FC<AddressModalProps> = (props) => {
effects={($, ctx) => {
$('onFormMount').subscribe(() => {
// 四级联动
console.log($, ctx, 1)
useChainEffects($, ctx)
})
......
import React, { useCallback, useRef } 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])
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>
} />
<OrderDetailWrapper>
<PreLoading loading={!formContext.data} active paragraph={{rows: 6}}>
<OrderDetailSection formContext={formContext} type='saleOrder'/>
</PreLoading>
</OrderDetailWrapper>
{/* 提交时触发的弹窗集合 */}
<OrderHandDeleved
currentRef={approvedRef}
/>
</OrderDetailContext.Provider>
</div>
);
};
export default ReadyConfirmDelevedOrderDetail;
import React from 'react'
import { Card } from 'antd'
import { StandardTable } from 'god'
import { PageHeaderWrapper } from '@ant-design/pro-layout'
import { useSelfTable } from './model/useSelfTable'
import { baseOrderListColumns } from '../constant'
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch'
import { FORM_FILTER_PATH } from '@/formSchema/const'
import Submit from '@/components/NiceForm/components/Submit'
import DateRangePickerUnix from '@/components/NiceForm/components/DateRangePickerUnix'
import '../index.less'
import { getOrderBuyerValidateDeliveryPage } from '@/services/OrderNewV2Api'
// 待发货订单
export interface ReadyDelevedOrderProps {}
const fetchTableData = async (params) => {
const { data } = await getOrderBuyerValidateDeliveryPage(params)
return data
}
const ReadyDelevedOrder:React.FC<ReadyDelevedOrderProps> = () => {
const {
columns
} = useSelfTable()
return <PageHeaderWrapper>
<Card>
<StandardTable
fetchTableData={params => fetchTableData(params)}
columns={columns}
rowKey={'orderNo'}
formilyLayouts={{
justify: 'space-between'
}}
formilyProps={{
ctx: {
inline: false,
schema: baseOrderListColumns(),
effects: ($, actions) => {
useStateFilterSearchLinkageEffect(
$,
actions,
'orderNo',
FORM_FILTER_PATH,
);
},
components: {
DateRangePickerUnix,
Submit
}
}
}}
/>
</Card>
</PageHeaderWrapper>
}
ReadyDelevedOrder.defaultProps = {}
export default ReadyDelevedOrder
import { useRef } from 'react'
import { history, useIntl } from 'umi'
import { Button } from 'antd'
import EyePreview from '@/components/EyePreview'
import { formatTimeString } from '@/utils'
import StatusColors from '@/pages/transaction/components/statusColors'
import { FieldTimeOutlined } from '@ant-design/icons'
import { ORDER_TYPE_CHANNEL_POINTS, ORDER_TYPE_POINTS } from '@/constants/order'
// 业务hooks, 待支付订单
export const useSelfTable = () => {
const ref = useRef<any>({})
const intl = useIntl()
const customOrderColumns: any[] = [
{
title: intl.formatMessage({ id: 'saleOrder.dingdanhao', defaultMessage: '订单号' }),
align: 'center',
dataIndex: 'orderNo',
key: 'orderNo',
render: (text, record) => {
// 查看订单, 需根据状态显示不同schema
return (
<EyePreview url={`/memberCenter/tranactionAbility/saleOrder/readyConfirmDelevedOrder/preview?id=${record.orderId}`}>
{text}
</EyePreview>
)
}
},
{
title: intl.formatMessage({ id: 'saleOrder.dingdanzhaiyao', defaultMessage: '订单摘要/下单时间' }),
align: 'center',
dataIndex: 'digest',
key: 'digest',
render: (text, record) => <>
<div>{text}</div>
<div><FieldTimeOutlined />{formatTimeString(record.createTime)}</div>
</>,
width: 200
},
{
title: intl.formatMessage({ id: 'saleOrder.caigouhuiyuan', defaultMessage: '采购会员' }),
align: 'left',
dataIndex: 'memberName',
key: 'memberName',
},
{
title: intl.formatMessage({ id: 'saleOrder.zongjine', defaultMessage: '总金额' }),
align: 'center',
dataIndex: 'amount',
key: 'amount',
render: (t, r) => (r.orderType === ORDER_TYPE_POINTS || r.orderType === ORDER_TYPE_CHANNEL_POINTS) ? t : `¥${t}`
},
{
title: intl.formatMessage({ id: 'saleOrder.dingdanleixing', defaultMessage: '订单类型' }),
align: 'center',
dataIndex: 'orderTypeName',
key: 'orderTypeName',
},
{
title: intl.formatMessage({ id: 'saleOrder.waibuzhuangtai', defaultMessage: '外部状态' }),
align: 'center',
dataIndex: 'outerStatus',
key: 'outerStatus',
render: (text, record) => <StatusColors status={text} type='out' text={record['outerStatusName']} />,
},
{
title: intl.formatMessage({ id: 'saleOrder.neibuzhuangtai', defaultMessage: '内部状态' }),
align: 'center',
dataIndex: 'innerStatus',
key: 'innerStatus',
render: (text, record) => <StatusColors status={text} type='saleInside' text={record['innerStatusName']} />,
},
{
title: intl.formatMessage({ id: 'saleOrder.caozuo', defaultMessage: '操作' }),
align: 'center',
dataIndex: 'ctl',
key: 'ctl',
render: (text, record) => <>
{
record.showInvite &&
<Button type='link' onClick={() => handleConfirm(record)}>{intl.formatMessage({ id: 'saleOrder.haoyoupintuan', defaultMessage: '邀请好友拼团' })}</Button>
}
{
record.showAfterSales &&
<Button type='link' onClick={() => handleConfirm(record)}>{intl.formatMessage({ id: 'saleOrder.shouhou', defaultMessage: '售后' })}</Button>
}
</>
}
]
const handleConfirm = async (record) => {
// history.push(`/memberCenter/tranactionAbility/saleOrder/readyConfirmDelevedOrder/detail?id=${record.orderId}&batchNo=${record.batchNo}`)
}
return {
columns: customOrderColumns
}
}
import { ISchema } from '@formily/antd';
import { FORM_FILTER_PATH } from '@/formSchema/const';
import { getSaleOrderAuditPageSelectOption } from '@/pages/transaction/effect';
import { useIntl } from 'umi';
export const tableListSchema: any = () => {
const intl = useIntl()
const res = getSaleOrderAuditPageSelectOption()
if(res) {
const {
orderTypes: OrderType,
} = res
return {
type: 'object',
properties: {
orderNo: {
type: 'string',
"x-component": 'SearchFilter',
'x-component-props': {
placeholder: intl.formatMessage({ id: 'saleOrder.qingshurudingdanOrderNo', defaultMessage: '请输入订单编号' }),
align: 'flex-start',
},
},
[FORM_FILTER_PATH]: {
type: 'object',
'x-component': 'flex-layout',
'x-component-props': {
inline: true,
colStyle: {
marginRight: 20
}
},
properties: {
digest: {
type: 'string',
'x-component-props': {
placeholder: intl.formatMessage({ id: 'saleOrder.qingshurudingdanDigest', defaultMessage: '请输入订单摘要' }),
}
},
"memberName": {
type: 'string',
"x-component-props": {
placeholder: intl.formatMessage({ id: 'saleOrder.qingshurucaigouMemberName', defaultMessage: '请输入采购会员名称' })
}
},
"orderType": {
type: 'string',
"x-component-props": {
placeholder: intl.formatMessage({ id: 'saleOrder.qingxuanzedingdanOrderType', defaultMessage: '请选择订单类型' })
},
enum: OrderType.map(item => ({
label: item['text'],
value: item['id'],
}))
},
"[startDate,endDate]": {
type: 'daterange',
// "x-component": 'DateRangePickerUnix',
'x-component-props': {
placeholder: [intl.formatMessage({ id: 'saleOrder.kaishishijian', defaultMessage: '开始时间' }),intl.formatMessage({ id: 'saleOrder.jieshushijian', defaultMessage: '结束时间' })],
},
},
submit: {
'x-component': 'Submit',
'x-component-props': {
children: intl.formatMessage({ id: 'saleOrder.chaxun', defaultMessage: '查询' }),
},
},
},
},
}
}
}
}
......@@ -557,11 +557,11 @@ const SaleOrder: React.FC<SaleOrderProps> = () => {
>
<div>
<div style={{marginBottom: 10}}>
<p>选择类型:</p>
<p>{intl.formatMessage({ id: 'saleOrder.xuanzeleixin', defaultMessage: '选择类型:' })}选择类型:</p>
<Radio.Group onChange={onChangePayModel} value={payModel}>
<Radio value='web'>WEB</Radio>
<Radio value='app'>APP</Radio>
<Radio value='miniapp'>小程序</Radio>
<Radio value='miniapp'>{intl.formatMessage({ id: 'saleOrder.xiaochengxu', defaultMessage: '小程序' })}</Radio>
<Radio value='H5'>H5</Radio>
</Radio.Group>
</div>
......
......@@ -61,7 +61,7 @@ import {
getExchangeDeliveryList,
getExchangeWarehousingList,
} from '../fetchBillList';
import { getIntl } from '@/.umi/plugin-locale/localeExports';
import { getIntl } from 'umi';
const intl = getIntl();
const {
......
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