Commit 428f5f29 authored by GuanHua's avatar GuanHua
parents bdb42e83 96a63824
......@@ -44,12 +44,6 @@ const TranactionRoute = {
component: '@/pages/transaction/electronicContracts/enterpriseCertified/index',
},
{
path: '/memberCenter/tranactionAbility/electronicContracts/personalCertified',
name: 'personalCertified',
hideInMenu: true,
component: '@/pages/transaction/electronicContracts/personalCertified/index',
},
{
path: '/memberCenter/tranactionAbility/electronicContracts/addContract',
name: 'addContract',
hideInMenu: true,
......@@ -263,7 +257,28 @@ const TranactionRoute = {
]
},
/**
* @description: 询价单查询
* @param {type}
* @return {type}
*/
{
path:'/memberCenter/tranactionAbility/goodsOffer',
name:'goodsOffer',
key:'goodsOffer',
routes:[
{
path: '/memberCenter/tranactionAbility/goodsOffer/enquiryOrder',
name: 'enquiryOrder',
component: '@/pages/transaction/goodsOffer/enquiryOrder'
},
{
path: '/memberCenter/tranactionAbility/goodsOffer/addEnquiryOrder',
name: 'addEnquiryOrder',
component: '@/pages/transaction/goodsOffer/addEnquiryOrder'
}
]
},
// 采购订单
{
path: '/memberCenter/tranactionAbility/purchaseOrder',
......
......@@ -117,10 +117,14 @@ export default {
'menu.tranactionAbility.electronicContracts': '电子合同',
'menu.tranactionAbility.electronicContracts.apply': '电子签章申请',
'menu.tranactionAbility.electronicContracts.enterpriseCertified': '企业信息核验',
'menu.tranactionAbility.electronicContracts.personalCertified': '个人信息核验',
'menu.tranactionAbility.electronicContracts.classSearch': '合同模板参数查询',
'menu.tranactionAbility.electronicContracts.template': '合同模板',
'menu.tranactionAbility.electronicContracts.addContract': '新建合同模板',
// 商品报价
'menu.tranactionAbility.goodsOffer': '商品询价',
'menu.tranactionAbility.goodsOffer.enquiryOrder': '询价单查询',
'menu.tranactionAbility.goodsOffer.addEnquiryOrder': '待新增询价单',
//进销存
'menu.tranactionAbility.stockSellStorage': '进销存',
'menu.tranactionAbility.stockSellStorage.warehouse': '仓库',
......
......@@ -23,7 +23,6 @@ const { Option } = Select
const LogisticsForm: React.FC<Iprops> = (props) => {
const { onRef } = props
const logisticsFormRef = useRef()
const [logisticsForm] = Form.useForm()
const [logisticsCompanyLists, setLogisticsCompanyLists] = useState<GetLogisticsSelectListCompanyResponse>()
......@@ -32,14 +31,20 @@ const LogisticsForm: React.FC<Iprops> = (props) => {
const [isTemplate, setIsTemplate] = useState<boolean>(false)
const [deliveryType, setDeliveryType] = useState<number>(1)
const [carriageType, setCarriageType] = useState<number>()
const { productInfoByEdit } = ProductStore
const flagRef = useRef<boolean>(false)
const { productInfoByEdit, selectCategoryId } = ProductStore
useEffect(()=>{
//传入ref给父级
onRef(logisticsFormRef)
if(history.location.query?.id)
if(history.location.query?.id){
setDeliveryType(productInfoByEdit.logistics?.deliveryType)
logisticsForm.setFieldsValue(productInfoByEdit.logistics)
}else{
logisticsForm.setFieldsValue({deliveryType:1, carriageType:1})
}
// 获取发货地址 物流公司 运费模板
PublicApi.getLogisticsSelectListShipperAddress().then(res=>{
......@@ -56,6 +61,16 @@ const LogisticsForm: React.FC<Iprops> = (props) => {
}, [])
useEffect(() => {
// 品类 变动清空form
if(history.location.query?.id && !flagRef.current) {
flagRef.current = true
} else {
logisticsForm.resetFields()
logisticsForm.setFieldsValue({deliveryType:1, carriageType:1})
}
}, [selectCategoryId])
const changeDeliveryType = (e) => {
setDeliveryType(e.target.value)
setCarriageType(1)
......@@ -77,7 +92,7 @@ const LogisticsForm: React.FC<Iprops> = (props) => {
labelAlign="left"
ref={logisticsFormRef}
colon={false}
initialValues={history.location.query?.id ? productInfoByEdit.logistics : {deliveryType:1, carriageType:1}}
// initialValues={history.location.query?.id ? productInfoByEdit.logistics : {deliveryType:1, carriageType:1}}
autoComplete="off"
>
<Form.Item
......
......@@ -24,14 +24,27 @@ const { TextArea } = Input
const OtherForm: React.FC<Iprops> = (props) => {
const { onRef } = props
const otherFormRef = useRef()
const flagRef = useRef<boolean>(false)
const [otherForm] = Form.useForm()
const { getOtherFormParamsByEdit } = ProductStore
const { getOtherFormParamsByEdit, selectCategoryId } = ProductStore
useEffect(()=>{
//传入ref给父级
onRef(otherFormRef)
if(history.location.query?.id)
otherForm.setFieldsValue(getOtherFormParamsByEdit)
}, [])
useEffect(() => {
// 品类 变动清空form
if(history.location.query?.id && !flagRef.current) {
flagRef.current = true
} else {
otherForm.resetFields()
}
}, [selectCategoryId])
return (<>
<Form
{...layout}
......@@ -41,7 +54,6 @@ const OtherForm: React.FC<Iprops> = (props) => {
ref={otherFormRef}
colon={false}
autoComplete="off"
initialValues={history.location.query?.id ? getOtherFormParamsByEdit : {}}
>
<Form.Item
name="isInvoice"
......
......@@ -43,8 +43,7 @@ const PriceAttributeForm: React.FC<Iprops> = (props) => {
const updateFlag = useRef(true) // 是否第一次构建
const [priceForm] = Form.useForm()
const [setPriceForm] = Form.useForm()
const [planPrice, setPlanPrice] = useState(1) //商品定价类型 ref替代
// const priceTypeRef = useRef<number>(1)
const [planPrice, setPlanPrice] = useState(1)
const [unitData, setUnitData] = useState<any>([])
const [unitValue, setUnitValue] = useState(undefined)
const [setPriceModal, setSetPriceModal] = useState(false)
......@@ -56,6 +55,7 @@ const PriceAttributeForm: React.FC<Iprops> = (props) => {
const [attributeValObjArr, setAttributeValObjArr] = useState<any[]>([])
const [minOrderNumber, setMinOrderNumber] = useState<number>()
const [isBatchSetting, setIsBatchSetting] = useState<boolean>(false) //是否点击批量设置
const flagRef = useRef<boolean>(false)
const [colums, setColumns] = useState<ColumnType<any>[]>()
const { ProductStore } = store
......@@ -63,12 +63,14 @@ const PriceAttributeForm: React.FC<Iprops> = (props) => {
productName,
selectedGoods,
productSelectAttribute,
setProductSelectAttribute,
tableDataSource,
setTableDataSource,
clearData,
setPriceAttributeParams,
productInfoByEdit,
getPriceAttributeFormParamsByEdit,
selectCategoryId,
} = ProductStore
_tableDataSource = useMemo(() => tableDataSource, [tableDataSource]) // 保持最新值
......@@ -77,9 +79,9 @@ const PriceAttributeForm: React.FC<Iprops> = (props) => {
onRef(priceFormRef)
if(history.location.query?.id){ // 编辑情况下 用于判断价格类型和显示单位
setPlanPrice(productInfoByEdit?.priceType)
// priceTypeRef.current = productInfoByEdit?.priceType
handleUnitSearch(getPriceAttributeFormParamsByEdit.unitName)
setMinOrderNumber(productInfoByEdit?.minOrder)
priceForm.setFieldsValue(getPriceAttributeFormParamsByEdit)
}
return ()=>{
console.log('价格属性组件卸载')
......@@ -87,6 +89,17 @@ const PriceAttributeForm: React.FC<Iprops> = (props) => {
}
},[])
useEffect(() => {
// 品类 变动清空form和属性组合
if(history.location.query?.id && !flagRef.current) {
flagRef.current = true
} else {
setProductSelectAttribute([])
priceForm.resetFields()
priceForm.setFieldsValue({isMemberPrice: false, priceType: planPrice})
}
}, [selectCategoryId])
useEffect(()=>{
constructedCallback()
// console.log(productSelectAttribute, 'productSelectAttribute')
......@@ -300,10 +313,10 @@ const PriceAttributeForm: React.FC<Iprops> = (props) => {
_tableDataSource = _tableData
// 有前面tab变动引起的二次构建 需要清空价格数据
if(updateFlag.current){
// *****bug编辑积分商品(非现货价格)会导致价格类型变动引发重复渲染*****
// ***** bug编辑积分商品(非现货价格)会导致价格类型变动引发重复渲染 *****
updateFlag.current = false
} else {
// ***** 编辑情况下且是积分商品 不做清空单价处理*****
// ***** 编辑情况下且是积分商品 不做清空单价处理 *****
if(!(productInfoByEdit?.id && planPrice === 3))
_tableDataSource.map(item => item['单价'] = {})
}
......@@ -552,7 +565,7 @@ const PriceAttributeForm: React.FC<Iprops> = (props) => {
labelAlign="left"
ref={priceFormRef}
colon={false}
initialValues={productInfoByEdit?.id ? getPriceAttributeFormParamsByEdit : {isMemberPrice: false, priceType: planPrice}}
// initialValues={productInfoByEdit?.id ? getPriceAttributeFormParamsByEdit : {isMemberPrice: false, priceType: planPrice}}
autoComplete="off"
>
<Form.Item
......
......@@ -15,12 +15,6 @@ const layout = {
span: 12,
},
}
const tailLayout = {
wrapperCol: {
offset: 2,
span: 12,
},
}
export interface Iprops {
attributesData: any[];
......@@ -36,7 +30,6 @@ let paramsArray = [];
const ProductAttributeForm: React.FC<Iprops> = (props) => {
const { attributesData, onRef } = props
const [attributeParamsArray, setAttributeParamsArray] = useState<any>([])
const [isClearFormAndDataInEdit, setIsClearFormAndDataInEdit] = useState<boolean>(false) // 编辑情况下 是否要清空商品属性表单数据和页面全局数据
const productAttributeFormRef = useRef()
const [attributeForm] = Form.useForm()
......
import React, { useState, useEffect } from 'react'
import React, { useState, useEffect, useRef } from 'react'
import {history} from 'umi'
import { Button, message, Upload } from 'antd'
import cx from 'classnames'
import { Player } from 'video-react';
import styles from '../index.less'
import { PlusOutlined, DeleteOutlined } from '@ant-design/icons'
// import { PublicApi } from '@/services/api'
import { UPLOAD_TYPE } from '@/constants'
export interface Iprops {
}
import { inject, observer } from 'mobx-react'
import { store } from '@/store'
const ProductDescFormDefualt: React.FC<Iprops> = (props) => {
const ProductDescFormDefualt: React.FC<{}> = (props) => {
const [fileImageList, setFileImageList] = useState<any>([])
const [videoList, setVideoList] = useState<any>([])
const flagRef = useRef<boolean>(false)
const { ProductStore } = store
const { productInfoByEdit, setProductDescription } = ProductStore
const { productInfoByEdit, setProductDescription, selectCategoryId } = ProductStore
useEffect(()=>{
if(history.location.query?.id){ // 编辑状态下
......@@ -35,6 +30,18 @@ const ProductDescFormDefualt: React.FC<Iprops> = (props) => {
}, [])
useEffect(() => {
// 品类 变动清空数据
// 编辑下 flag为false 不清空;编辑下 flag为true 新建清空
if(history.location.query?.id && !flagRef.current) {
flagRef.current = true
} else {
setFileImageList([])
setVideoList([])
}
}, [selectCategoryId])
useEffect(() => {
// 设置传输数据
setProductDescription({
video: videoList,
......
import React, { useState, useEffect } from 'react'
import React, { useState, useEffect, useRef } from 'react'
import {history} from 'umi'
import { Button, Form, Select, Checkbox, message, Input, Table, Modal, Row, Col, Alert, Upload, Radio } from 'antd'
import { PlusOutlined } from '@ant-design/icons'
......@@ -12,34 +12,44 @@ import { inject, observer } from 'mobx-react'
// import { IStore } from '@/store';
import { store } from '@/store'
export interface Iprops {
}
const layoutAdd = {
labelCol: { span: 4 },
wrapperCol: { span: 20 },
}
const ProductImageForm: React.FC<Iprops> = (props) => {
const [addTabsForm] = Form.useForm()
const ProductImageForm: React.FC<{}> = (props) => {
const [defaultChecked, setDefaultChecked] = useState(-1)
const [priceAttributeParamsByRender, setPriceAttributeParamsByRender] = useState<any[]>([])
const [commonImageList, setCommonImageList] = useState<any>([])
const [previewVisible, setPreviewVisible] = useState(false)
const [previewImage, setPreviewImage] = useState('')
const [previewTitle, setPreviewTitle] = useState('')
const [setImageType, setSetImageType] = useState<boolean>(true)
const flagRef = useRef<boolean>(false)
const { ProductStore } = store
const { priceAttributeParams, productInfoByEdit, setProductAttributeAndImageParams, setIsAllAttributePic } = ProductStore
const { priceAttributeParams, productInfoByEdit, setProductAttributeAndImageParams, setIsAllAttributePic, selectCategoryId } = ProductStore
useEffect(() => {
if(history.location.query?.id){
setSetImageType(productInfoByEdit.isAllAttributePic)
}
}, [])
useEffect(() => {
// 品类 变动清空数据
// 编辑下 flag为false 不清空;编辑下 flag为true 新建清空
if(history.location.query?.id && !flagRef.current) {
flagRef.current = true
console.log('不清空')
} else {
// constructImageListByRender([])
// setSetImageType(true)
onChangeSetImageType({target: { value: true }})
console.log('清空')
}
}, [selectCategoryId])
useEffect(()=>{
if(priceAttributeParams.length > 0){
console.log(priceAttributeParams, '对比')
constructImageListByRender(priceAttributeParams)
}else if(history.location.query?.id){
}else if(history.location.query?.id){ // 不点击前面 直接进入图片tab
console.log(productInfoByEdit.unitPriceAndPicList, '对比')
constructImageListByRender(productInfoByEdit.unitPriceAndPicList)
}
......@@ -50,18 +60,28 @@ const ProductImageForm: React.FC<Iprops> = (props) => {
const constructImageListByRender = (priceAttributeParams?: any) => {
let _priceAttributeParams: any = []
if(productInfoByEdit?.id){ // id判断是否新增还是编辑
setSetImageType(productInfoByEdit.isAllAttributePic)
// setSetImageType(productInfoByEdit.isAllAttributePic)
setIsAllAttributePic(productInfoByEdit.isAllAttributePic)
let _commodityPicList = productInfoByEdit.unitPriceAndPicList.map(_ => _.commodityPic)
_priceAttributeParams = priceAttributeParams.map((_item, _index) => {
// 为图片字符串数组手动添加 uid 和 status
let _commodityPicItem = Array.isArray(_commodityPicList[_index]) ? _commodityPicList[_index].map((__ele, __i) => {
// console.log(_item, '_____')
// 查询编辑详情中属性值id相匹配的图片
let _pic = null
let _priceAndPicList = productInfoByEdit.unitPriceAndPicList
for(let i = 0; i < _priceAndPicList.length; i++) {
if(_priceAndPicList[i].attributeAndValueList.map(item => item.customerAttributeValue.id).sort().toString() == _item.attributeAndValueList.map(item => item.customerAttributeValue.id).sort().toString()){
_pic = _priceAndPicList[i].commodityPic
}
}
let _commodityPicItem = Array.isArray(_pic) ? _pic.map((__ele, __i) => {
return {
uid: __i * -1,
status: 'done',
url: __ele,
}
}) :[]
}) : []
let _obj = {..._item}
_obj.commodityPic = _commodityPicItem
return _obj
......@@ -77,7 +97,7 @@ const ProductImageForm: React.FC<Iprops> = (props) => {
clickItemTab(0)
setPriceAttributeParamsByRender(_priceAttributeParams)
setProductAttributeAndImageParams(_priceAttributeParams)
console.log(_priceAttributeParams, priceAttributeParams, '_p') // 这里可能为空数组 ** 如果不到此页面 前一个是旧数据 后面的为新数据
// console.log(_priceAttributeParams, priceAttributeParams, '_p')
// 初始化若是按所有属性共用做显示处理
if(setImageType && _priceAttributeParams.length>0){
setCommonImageList(_priceAttributeParams[0].commodityPic)
......
......@@ -10,7 +10,7 @@ import { QuestionCircleOutlined, StarOutlined, FileWordFilled, UploadOutlined, D
import styles from './index.less'
const AddContract: React.FC<{}> = (props) => {
const { type, id } = history.location.query
const { page_type, id } = history.location.query
const { TextArea } = Input;
const [form] = Form.useForm();
const [fileExampleUrl, setFileExampleUrl] = useState<any>({});
......@@ -51,7 +51,7 @@ const AddContract: React.FC<{}> = (props) => {
/**新增&修改 */
const sharedFn = async (parmas: any) => {
if (type === 'add') {
if (page_type === 'add') {
await PublicApi.postOrderContractTemplateAdd(parmas).then(res => {
setTimeout(() => {
history.goBack()
......@@ -107,7 +107,7 @@ const AddContract: React.FC<{}> = (props) => {
name: res.data.fileName,
file: res.data.fileUrl
})
if (type === 'edit') {
if (page_type === 'edit') {
form.setFieldsValue(res.data)
}
})
......@@ -131,19 +131,19 @@ const AddContract: React.FC<{}> = (props) => {
<Card>
<div className={styles.addcontract_wrap}>
<Form form={form}>
<Form.Item label='合同模板名称' colon={false} name='name' rules={[{ required: type && true, message: '请输入合同模板名称' }]}>
{type ? <Input /> : <span>{data.name}</span>}
<Form.Item label='合同模板名称' colon={false} name='name' rules={[{ required: page_type && true, message: '请输入合同模板名称' }]}>
{page_type ? <Input /> : <span>{data.name}</span>}
</Form.Item>
<Form.Item label='版本号' colon={false} name='version' rules={[{ required: type && true, message: '请输入版本号' }]}>
{type ? <Input /> : <span>{data.version}</span>}
<Form.Item label='版本号' colon={false} name='version' rules={[{ required: page_type && true, message: '请输入版本号' }]}>
{page_type ? <Input /> : <span>{data.version}</span>}
</Form.Item>
{!type &&
{!page_type &&
<Form.Item label='状态' colon={false} name='status'>
<span>{data.state === 1 ? <><Badge status="success" /> 有效</> : <><Badge status="error" /> 失效</>}</span>
</Form.Item>
}
<Form.Item label='合同模板说明' colon={false} name='description'>
{type ? <TextArea rows={4} /> : <span>{data.description}</span>}
{page_type ? <TextArea rows={4} /> : <span>{data.description}</span>}
</Form.Item>
<Form.Item label={<div>合同文件模板样例&nbsp;<Tooltip placement="top" title='制作合同模板前,可下载合同模板样例,按照样例指引制作合同模板,其中需要添加的参数可以在合同模板参数查询中查找。'><QuestionCircleOutlined /></Tooltip></div>} colon={false}>
<div className={styles.upload_item}>
......@@ -166,13 +166,13 @@ const AddContract: React.FC<{}> = (props) => {
</div>
<div className={styles.upload_right}>
<span onClick={()=> onView(uploadFile)}>预览</span>
{type && <DeleteOutlined onClick={delectContract} />}
{page_type && <DeleteOutlined onClick={delectContract} />}
</div>
</div>
}
</div>
{
(Object.keys(uploadFile).length === 0 && type) &&
(Object.keys(uploadFile).length === 0 && page_type) &&
<Upload
action="/api/file/file/upload"
data={{ fileType: UPLOAD_TYPE }}
......@@ -186,7 +186,7 @@ const AddContract: React.FC<{}> = (props) => {
</Upload>
}
</Form.Item>
{type &&
{page_type &&
<Form.Item style={{ marginLeft: '174px' }}>
<Button type="primary" style={{ marginRight: '24px' }} onClick={onSubmit}>保存</Button>
<Popconfirm
......
......@@ -10,7 +10,9 @@ import Test from '../components/test'
const Apply = () => {
const ref = useRef<any>({});
/**头部状态的颜色值 */
/**头部状态的颜色值
* 申请状态 1-未申请 2-申请中 3-申请不通过 4-申请通过
*/
const applyStaus = [{
status: 1,
name: '未申请',
......@@ -18,19 +20,19 @@ const Apply = () => {
color: '#909399',
}, {
status: 2,
name: '申请通过',
icon: <CheckCircleFilled />,
color: '#00B37A',
}, {
status: 3,
name: '申请中',
icon: <ClockCircleFilled />,
color: '#4279DF',
}, {
status: 4,
status: 3,
name: '申请不通过',
icon: <CloseCircleFilled />,
color: '#D32F2F',
}, {
status: 4,
name: '申请通过',
icon: <CheckCircleFilled />,
color: '#00B37A',
}]
const [authType, setAuthType] = useState<number>(1); // 认证方式 1-法人认证 2-经办人认证 3-个人认证
const [signatureAuthLogId, setSignatureAuthLogId] = useState<number>(0); // 电子签章认证记录id
......@@ -45,7 +47,7 @@ const Apply = () => {
/**电子签章认证申请 */
const AuthApply = async () => {
if (ref) {
if (ref && data.state === 1) {
const vaildDetail = await ref.current.validateFields();
if (vaildDetail) {
await PublicApi.postOrderSignatureAuthApply({}).then(res => {
......@@ -54,8 +56,13 @@ const Apply = () => {
history.push(`/memberCenter/tranactionAbility/electronicContracts/enterpriseCertified?authTypeEdit=${authType}`)
})
}
} else {
await PublicApi.postOrderSignatureAuthApply({}).then(res => {
setSignatureAuthLogId(res.data.signatureAuthLogId);
sessionStorage.setItem('signatureAuthLogId', res.data.signatureAuthLogId.toString())
history.push(`/memberCenter/tranactionAbility/electronicContracts/enterpriseCertified?authTypeEdit=${authType}`)
})
}
}
return (
......@@ -86,31 +93,40 @@ const Apply = () => {
{/* 企业 */}
{(authType === 1 || authType === 2) &&
<>
<div className={styles.apply_item}>
<Descriptions title="申请信息" column={1}>
<Descriptions.Item label="公司名称">{data.orgName}</Descriptions.Item>
<Descriptions.Item label="统一社会信用代码">{data.orgCode}</Descriptions.Item>
<Descriptions.Item label="法人姓名">{data.legalRepName}</Descriptions.Item>
<Descriptions.Item label="法人手机号">{data.legalRepMobile}</Descriptions.Item>
<Descriptions.Item label="法人身份证号">{data.legalRepIdNo}</Descriptions.Item>
<Descriptions.Item label="认证方式">-</Descriptions.Item>
<Descriptions.Item label="验证方式">-</Descriptions.Item>
</Descriptions>
</div>
<Test actionRef={ref} />
{data.state !== 1 ?
<div className={styles.apply_item}>
<Descriptions title="申请信息" column={1}>
<Descriptions.Item label="公司名称">{data.orgName}</Descriptions.Item>
<Descriptions.Item label="统一社会信用代码">{data.orgCode}</Descriptions.Item>
<Descriptions.Item label="法人姓名">{data.legalRepName}</Descriptions.Item>
<Descriptions.Item label="法人手机号">{data.legalRepMobile}</Descriptions.Item>
<Descriptions.Item label="法人身份证号">{data.legalRepIdNo}</Descriptions.Item>
<Descriptions.Item label="认证方式">-</Descriptions.Item>
<Descriptions.Item label="验证方式">-</Descriptions.Item>
</Descriptions>
</div>
:
<Test authType={authType} actionRef={ref} />
}
</>
}
{/* 个人 */}
{authType === 3 &&
<div className={styles.apply_item}>
<Descriptions title="申请信息" column={1}>
<Descriptions.Item label="姓名">{data.legalRepName}</Descriptions.Item>
<Descriptions.Item label="手机号">{data.legalRepMobile}</Descriptions.Item>
<Descriptions.Item label="身份证号">{data.legalRepIdNo}</Descriptions.Item>
<Descriptions.Item label="验证方式">-</Descriptions.Item>
</Descriptions>
</div>
<>
{data.state !== 1 ?
<div className={styles.apply_item}>
<Descriptions title="申请信息" column={1}>
<Descriptions.Item label="姓名">{data.transactorName}</Descriptions.Item>
<Descriptions.Item label="手机号">{data.transactorMobile}</Descriptions.Item>
<Descriptions.Item label="身份证号">{data.transactorIdNumber}</Descriptions.Item>
<Descriptions.Item label="验证方式">-</Descriptions.Item>
</Descriptions>
</div>
:
<Test authType={authType} actionRef={ref} />
}
</>
}
</div>
</PageHeaderWrapper>
......
import React, { useState, useRef } from 'react'
import React, { useState, useRef, ReactNode } from 'react'
import { PageHeaderWrapper } from '@ant-design/pro-layout';
import { Card, Row, Col, Input, Button } from 'antd';
import statuStyle from '../../common/colorTag'
import { ColumnType } from 'antd/lib/table/interface';
import { StandardTable } from 'god';
import { PublicApi } from '@/services/api'
const ClassSearch = () => {
const ref = useRef<any>({});
const [filterParams, setFilterParams] = useState<any>({})
//表头
const columns: ColumnType<any>[] = [{
title: 'ID',
......@@ -17,22 +19,41 @@ const ClassSearch = () => {
dataIndex: 'name',
}, {
title: '参数描述',
dataIndex: 'describe',
dataIndex: 'description',
}, {
title: '状态',
dataIndex: 'status',
dataIndex: 'state',
render: (text: any, reconds: any) => {
let component: ReactNode = null;
if (text === 1) {
component = <><span style={statuStyle.success}>有效</span></>
}
return component
}
}]
// 列表数据
const fetchData = (params?: any) => {
console.log(params)//可以直接打印参数
return new Promise((resolve, reject) => {
PublicApi.getOrderContractParamPage({ ...params }).then(res => {
PublicApi.getOrderContractParamPage({ ...filterParams, ...params }).then(res => {
resolve(res.data)
})
})
}
// 搜索
const handleSearch = (val: string) => {
let obj = { ...filterParams, name: val }
setFilterParams(obj)
ref.current.reload(obj)
}
// 重置
const handleReset = () => {
setFilterParams({})
setTimeout(() => {
ref.current.reload()
}, 500)
}
return (
<PageHeaderWrapper>
<Card>
......@@ -47,10 +68,13 @@ const ClassSearch = () => {
<Row>
<Col span={12}>
<Input.Search
style={{ width: '256px',marginRight: '24px',marginBottom: '24px' }}
style={{ width: '256px', marginRight: '24px', marginBottom: '24px' }}
placeholder='搜索'
/>
<Button>重置</Button>
value={filterParams.name}
onChange={(e) => setFilterParams({ ...filterParams, name: e.target.value })}
onSearch={(val) => handleSearch(val)}
/>
<Button onClick={handleReset}>重置</Button>
</Col>
</Row>
}
......
......@@ -157,16 +157,16 @@ const Corporate: React.FC<queryProps> = (props) => {
<div className={styles.item_label}>认证方式 <QuestionCircleOutlined style={{ color: '#C0C4CC' }} /></div>
<div className={styles.item_control}>
<Row className={styles.card_checkbox}>
<Col className={cx(styles.card_checkbox_item, styles.active)}>支付宝验证</Col>
<Col className={cx(styles.card_checkbox_item, styles.active)}>手机验证码验证</Col>
<Col className={cx(styles.card_checkbox_item, payWay === 1 && styles.active)} onClick={() => CheckPayWay(1)}>支付宝验证</Col>
<Col className={cx(styles.card_checkbox_item, payWay === 3 && styles.active)} onClick={() => CheckPayWay(3)}>手机验证码验证</Col>
</Row>
</div>
</div>
<div className={styles.item_con}>
<div className={styles.item_label}></div>
<div className={styles.item_control}>
<Button type='primary'>下一步</Button>
<Button>上一步</Button>
<Button type='primary' onClick={() => authTypeFn('', 2, 'personal')}>下一步</Button>
<Button onClick={() => authTypeFn('', 0, 'stepUp')}>上一步</Button>
</div>
</div>
</div>
......
......@@ -82,20 +82,20 @@ const EnterpriseInfoCheck: React.FC<queryProps> = (props) => {
<div className={styles.info_item_con}>
<div className={styles.item_con}>
<div className={styles.item_label}>姓名:</div>
<div className={styles.item_control}>张三</div>
<div className={styles.item_control}>{data.transactorName}</div>
</div>
<div className={styles.item_con}>
<div className={styles.item_label}>手机号:</div>
<div className={styles.item_control}>+86 185 2929 6758</div>
<div className={styles.item_control}>+86 {data.transactorMobile}</div>
</div>
<div className={styles.item_con}>
<div className={styles.item_label}>身份证号:</div>
<div className={styles.item_control}>321023 19891205 3746</div>
<div className={styles.item_control}>{data.transactorIdNumber}</div>
</div>
<div className={styles.item_con}>
<div className={styles.item_label}></div>
<div className={styles.item_control}>
<Button type='primary'>下一步</Button>
<Button type='primary' onClick={()=>authTypeFn(3, 1, 'personal')}>下一步</Button>
</div>
</div>
</div>
......
import React, { useState, useEffect } from 'react'
import { history } from 'umi'
import { Result, Button, Form, Input, Row, Col, Alert } from 'antd'
import { Result, Button, Form, Input, Row, Col, Alert, Spin } from 'antd'
import styles from '../index.less'
import { AlipaySquareFilled } from '@ant-design/icons';
import { PublicApi } from '@/services/api';
......@@ -82,7 +82,7 @@ const PublicAccount: React.FC<queryProps> = (props) => {
}
/**发起手机认证 */
/**发起授权签署实名认证 */
const mobileVerifyFn = () => {
const parmas = {
signatureAuthLogId: Number(sessionStorage.getItem('signatureAuthLogId')),
......@@ -98,19 +98,68 @@ const PublicAccount: React.FC<queryProps> = (props) => {
})
}
// 获取验证码,并且倒计时60s
let time = 60
const [btnDisabled, setBtnDisabled] = useState(false);
const [btnContent, setBtnContent] = useState('获取验证码');
// 倒计时fn
const hanleCountdown = () => {
if (time > 0 && time <= 60) {
time -= 1;
setBtnContent(`${time}s后重发`);
setBtnDisabled(true);
setTimeout(() => {
hanleCountdown();
}, 1000)
} else {
time = 60;
setBtnDisabled(false);
setBtnContent('获取验证码');
}
}
/** 发起手机认证*/
const handleVerifyCode = async () => {
await PublicApi.postOrderSignatureAuthMobileVerify({
signatureAuthLogId: Number(sessionStorage.getItem('signatureAuthLogId')),
mobileNo: data.transactorMobile
}).then(res => {
if(res.code === 1000) {
hanleCountdown()
}else {
console.log(res)
}
})
}
/**手机认证验证码校验 */
const onSubmit = async () => {
const value = await form.validateFields();
if(value) {
await PublicApi.postOrderSignatureAuthMobileVerifyCode({
signatureAuthLogId: Number(sessionStorage.getItem('signatureAuthLogId')),
authcode: value.authcode
}).then(res => {
if(res.code === 1000) {
history.goBack()
}
})
}
}
return (
<>
{payWay === 1 &&
<div className={styles.info_wrap}>
{/** 支付宝认证*/}
<Result
title="请使用法人手机号注册的支付宝账号登录支付"
title={authType !== 3 ? '请使用法人手机号注册的支付宝账号登录支付':'请使用当前会员手机号注册的支付宝账号登录支付宝APP'}
extra={[
<div key='key'>
<div className={styles.info_wran}>并使用支付宝首页的扫一扫功能</div>
<div className={styles.info_wran}>扫描下面的二维码,然后按照支付宝APP的提示进行验证</div>
<div className={styles.alipay_qrcode}>
<img src={qrCode} alt="" />
{qrCode ? <img src={qrCode} alt="" /> : <Spin />}
</div>
<div className={styles.alipay_wran}>
<AlipaySquareFilled
......@@ -144,15 +193,15 @@ const PublicAccount: React.FC<queryProps> = (props) => {
<div className={styles.bank_info}>
<div className={styles.bank_info_item}>
<div className={styles.bank_info_label}>账户名称:</div>
<div className={styles.bank_info_control}>{data.orgName}</div>
<div className={styles.bank_info_control}>{query.orgName}</div>
</div>
<div className={styles.bank_info_item}>
<div className={styles.bank_info_label}>银行账号:</div>
<div className={styles.bank_info_control}>{data.bankName}</div>
<div className={styles.bank_info_control}>{query.cardNo}</div>
</div>
<div className={styles.bank_info_item}>
<div className={styles.bank_info_label}>开户行:</div>
<div className={styles.bank_info_control}>{data.cardNo}</div>
<div className={styles.bank_info_control}>{query.bankName}</div>
</div>
</div>
<div className={styles.bank_btn}>
......@@ -202,7 +251,7 @@ const PublicAccount: React.FC<queryProps> = (props) => {
<div className={styles.info_wran}>法人收到验证短信后,根据短信中的链接,在手机端完成委托书签署</div>
<div className={styles.info_phone_number}>
<div>法人手机号:</div>
<div>+86 {data.transactorMobile}</div>
<div>+86 {data.legalRepMobile}</div>
</div>
<div className={styles.bank_btn} style={{ textAlign: 'center' }}>
<Button type='primary' onClick={mobileVerifyFn}>发送授权短信</Button>
......@@ -238,33 +287,34 @@ const PublicAccount: React.FC<queryProps> = (props) => {
<div className={styles.info_wran}>会员收到短信验证码后,填写验证码完成认证</div>
<div className={styles.info_phone_number}>
<div>法人手机号:</div>
<div>+86 186 7700 2345</div>
<div>+86 {data.transactorMobile}</div>
</div>
<Form style={{ width: '338px', margin: 'auto' }}>
<Form style={{ width: '338px', margin: 'auto' }} form={form}>
<Form.Item noStyle>
<Row gutter={6}>
<Col span={16}>
<Form.Item name='code' rules={[{ required: true, message: '请输入短信验证码' }]}>
<Form.Item name='authcode' rules={[{ required: true, message: '请输入短信验证码' }]}>
<Input placeholder='请输入短信验证码' />
</Form.Item>
</Col>
<Col span={8}>
<Button>获取验证码</Button>
<Button
disabled={btnDisabled}
onClick={handleVerifyCode}
>获取验证码</Button>
</Col>
</Row>
</Form.Item>
</Form>
<div className={styles.bank_btn} style={{ textAlign: 'center' }}>
<Button type='primary'>开始认证</Button>
<Button style={{ width: '116px' }}>上一步</Button>
<Button style={{ width: '116px' }} onClick={() => authTypeFn('', 1, 'stepUp')}>上一步</Button>
</div>
</div>
]}
/>
</div>
}
</>
)
}
......
......@@ -5,17 +5,18 @@ const { Step } = Steps;
interface stepProps {
step: number,
authTypeEdit: string,
}
const StepComponents: React.FC<stepProps> = (props) => {
const { step } = props;
const { step, authTypeEdit } = props;
return (
<div className={styles.step_info}>
<Steps size="small" current={step}>
<Step title="企业信息核验" />
<Step title="经办人/法人认证" />
<Step title="企业认证" />
<Step title={authTypeEdit !== '3' ? "企业信息核验" : "个人信息核验"} />
<Step title={authTypeEdit !== '3' ? "经办人/法人认证" : "选择认证方式"} />
<Step title={authTypeEdit !== '3' ?"企业认证" : "个人认证" }/>
</Steps>
</div>
)
......
import React, {useEffect, useState} from 'react'
import React, { useEffect, useState } from 'react'
import { Result, Button, Form, Input, Select, Row, Col } from 'antd'
import styles from '../index.less'
import { AlipaySquareFilled } from '@ant-design/icons';
import { PublicApi } from '@/services/api';
interface queryProps {
actionRef?: any
actionRef?: any,
authType: number
}
const Test:React.FC<queryProps> = (props) => {
const {actionRef} = props;
const Test: React.FC<queryProps> = (props) => {
const { actionRef, authType } = props;
const { Option } = Select;
const [form] = Form.useForm();
const [options,setOptions] = useState<any>([])
const [options, setOptions] = useState<any>([])
// 手机号码验证
const userPhoneRule = (rule, value) => {
......@@ -62,36 +63,68 @@ const Test:React.FC<queryProps> = (props) => {
<div className={styles.info_item}>
<div className={styles.info_item_con}>
<Form form={form}>
<Form.Item label='公司名称' name='orgName' colon={false} rules={[{ required: true, message: '请输入经办人' }]}>
<Input />
</Form.Item>
<Form.Item label='统一社会信用代码' name='orgCode' colon={false} rules={[{ required: true, message: '统一社会信用代码' }]}>
<Input />
</Form.Item>
<Form.Item label='法人姓名' name='legalRepName' colon={false} rules={[{ required: true, message: '法人姓名' }]}>
<Input />
</Form.Item>
<Form.Item label='法人手机号' colon={false} required={true} style={{marginBottom: '0px'}}>
<Row gutter={24}>
<Col span={7}>
<Form.Item style={{ width: '150px' }} name='code' rules={[{ required: true, message: '请选择区号' }]}>
<Select style={{ width: '100%' }}>
{options.map(v => (
<Option key={v} value={v}>{v}</Option>
))}
</Select>
</Form.Item>
</Col>
<Col span={17}>
<Form.Item style={{ width: '398px' }} name='legalRepMobile' rules={[{ required: true, validator: userPhoneRule, }]}>
<Input />
</Form.Item>
</Col>
</Row>
</Form.Item>
<Form.Item label='法人身份证号' name='legalRepIdNo' colon={false} rules={[{ required: true, message: '请输入身份证号码' }]}>
<Input />
</Form.Item>
{authType !== 3 ?
<>
<Form.Item label='公司名称' name='orgName' colon={false} rules={[{ required: true, message: '请输入经办人' }]}>
<Input />
</Form.Item>
<Form.Item label='统一社会信用代码' name='orgCode' colon={false} rules={[{ required: true, message: '统一社会信用代码' }]}>
<Input />
</Form.Item>
<Form.Item label='法人姓名' name='legalRepName' colon={false} rules={[{ required: true, message: '法人姓名' }]}>
<Input />
</Form.Item>
<Form.Item label='法人手机号' colon={false} required={true} style={{ marginBottom: '0px' }}>
<Row gutter={24}>
<Col span={7}>
<Form.Item style={{ width: '150px' }} name='code' rules={[{ required: true, message: '请选择区号' }]}>
<Select style={{ width: '100%' }}>
{options.map(v => (
<Option key={v} value={v}>{v}</Option>
))}
</Select>
</Form.Item>
</Col>
<Col span={17}>
<Form.Item style={{ width: '398px' }} name='legalRepMobile' rules={[{ required: true, validator: userPhoneRule, }]}>
<Input />
</Form.Item>
</Col>
</Row>
</Form.Item>
<Form.Item label='法人身份证号' name='legalRepIdNo' colon={false} rules={[{ required: true, message: '请输入身份证号码' }]}>
<Input />
</Form.Item>
</>
:
<>
<Form.Item label='姓名' name='transactorName' colon={false} rules={[{ required: true, message: '姓名' }]}>
<Input />
</Form.Item>
<Form.Item label='手机号' colon={false} required={true} style={{ marginBottom: '0px' }}>
<Row gutter={24}>
<Col span={7}>
<Form.Item style={{ width: '150px' }} name='code' rules={[{ required: true, message: '请选择区号' }]}>
<Select style={{ width: '100%' }}>
{options.map(v => (
<Option key={v} value={v}>{v}</Option>
))}
</Select>
</Form.Item>
</Col>
<Col span={17}>
<Form.Item style={{ width: '398px' }} name='transactorMobile' rules={[{ required: true, validator: userPhoneRule, }]}>
<Input />
</Form.Item>
</Col>
</Row>
</Form.Item>
<Form.Item label='身份证号' name='transactorIdNumber' colon={false} rules={[{ required: true, message: '请输入身份证号码' }]}>
<Input />
</Form.Item>
</>
}
</Form>
</div>
</div>
......
......@@ -38,6 +38,17 @@ const EnterpriseCertified = () => {
})
} else if(name === 'stepUp' || (name === 'company' && type === 2) || name === 'company') {
setStep(steps)
} else {
delete data.code;
const parmas = {
signatureAuthLogId: Number(sessionStorage.getItem('signatureAuthLogId')),
...data
}
PublicApi.postOrderSignatureAuthPersonalAuth(parmas).then(res => {
if(res.code === 1000) {
setStep(steps)
}
})
}
}
......@@ -56,7 +67,7 @@ const EnterpriseCertified = () => {
onBack={() => history.goBack()}
backIcon={<ReutrnEle description="返回" />}
>
<StepComponents step={step} />
<StepComponents step={step} authTypeEdit={authTypeEdit} />
{step === 0 &&
<EnterpriseInfoCheck
authTypeEdit={authTypeEdit}
......
import React from 'react'
import { history } from 'umi'
import ReutrnEle from '@/components/ReturnEle';
import { PageHeaderWrapper } from '@ant-design/pro-layout';
const PersonalCertified = () => {
return (
<PageHeaderWrapper
onBack={() => history.goBack()}
backIcon={<ReutrnEle description="返回" />}
>
<div>123</div>
</PageHeaderWrapper>
)
}
export default PersonalCertified
\ No newline at end of file
......@@ -68,7 +68,7 @@ const Template: React.FC<{}> = () => {
let component: ReactNode = null
component = (
<>
<Button disabled={record.state === 1} style={{padding: '0px', marginRight: '24px'}} type='link'><Link to={`/memberCenter/tranactionAbility/electronicContracts/addContract?type=edit&id=${record.id}`}>编辑</Link></Button>
<Button disabled={record.state === 1} style={{padding: '0px', marginRight: '24px'}} type='link'><Link to={`/memberCenter/tranactionAbility/electronicContracts/addContract?page_type=edit&id=${record.id}`}>编辑</Link></Button>
<Popconfirm
title="确定要执行这个操作?"
onConfirm={() => confirmDel(record)}
......@@ -104,7 +104,7 @@ const Template: React.FC<{}> = () => {
pathname:
'/memberCenter/tranactionAbility/electronicContracts/addContract',
query: {
type: 'add',
page_type: 'add',
},
});
};
......
......@@ -79,7 +79,6 @@ const List:React.FC<{listParams}> = (props) => {
const fetchData = async (params: any) => {
const res = await PublicApi.getOrderQuotationList(params);
return res.data
}
......
import React, { ReactNode, useRef, useState, useEffect } from 'react';
import { history } from 'umi';
import {
Button,
Card,
Space,
Row,
Col,
Dropdown,
Menu,
Popconfirm
} from 'antd';
import { PageHeaderWrapper } from '@ant-design/pro-layout';
import {
PlusOutlined, DownOutlined, DeleteOutlined
} from '@ant-design/icons';
import { StandardTable } from 'god';
import { ColumnType } from 'antd/lib/table/interface';
import {
IFormFilter,
IButtonFilter,
} from 'god/dist/src/standard-table/TableController';
import EyePreview from '@/components/EyePreview';
import StatusSwitch from '@/components/StatusSwitch';
import { interiorState } from '../../common/tableStatusList'
import statuStyle from '../../common/colorTag'
import NiceForm from '@/components/NiceForm';
import { timeRange } from '@/utils/index'
import moment from 'moment'
import { createFormActions, FormEffectHooks } from '@formily/antd';
import { PageStatus } from '@/hooks/usePageStatus'
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch';
import { FORM_FILTER_PATH } from '@/formSchema/const';
import { commonEnquieryOfferSchema } from '../schema';
import { PublicApi } from '@/services/api';
import { values, action } from 'mobx';
const formActions = createFormActions();
const fetchData = async (params: any) => {
const res = await PublicApi.getOrderStayProductQuotationList(params);
return res.data
}
const AddEnquiryOrder: React.FC<{}> = () => {
const ref = useRef<any>({})
const [more, setmore] = useState(false)
const [selectRow, setSelectRow] = useState([])
const [selectedRowKeys, setSelectedRowKeys] = useState<Array<number>>([])
const format = (text) => {
return <>{moment(text).format("YYYY-MM-DD HH:mm:ss")}</>
}
const columns: ColumnType<any>[] = [
{
title: '询价单号',
key: 'inquiryListNo',
dataIndex: 'inquiryListNo',
},
{
title: '询价单摘要',
key: 'details',
dataIndex: 'details',
},
{
title: '被询价会员',
key: 'memberName',
dataIndex: 'memberName',
},
{
title: '交付日期',
key: 'deliveryTime',
dataIndex: 'deliveryTime',
},
{
title: '报价截止时间',
key: 'quotationAsTime',
dataIndex: 'quotationAsTime',
render: (text: any) => format(text)
},
{
title: '询价时间',
key: 'voucherTime',
dataIndex: 'voucherTime',
render: (text: any) => format(text)
},
{
title: '外部状态',
key: 'externalState',
dataIndex: 'externalState',
render: (text: any, reconds) => {
let component: ReactNode = null
if (text == 3) {
component = <><span style={statuStyle.warn}>审核不通过</span></>
} else if (text == 1) {
component = <><span style={statuStyle.default}>待提交</span></>
}
return component
}
},
{
title: '内部状态',
key: 'interiorState',
dataIndex: 'interiorState',
render: (text: any) => interiorState(text)
},
{
title: '操作',
key: 'options',
dataIndex: 'options',
render: (_: any, record: any) => {
return (
<>
{
(record.interiorState !== 3 &&
<Button type="link" onClick={() => toEdit(record.id)}>编辑</Button>
)
}
{
(record.interiorState === 1) &&
<>
<Popconfirm title="确定要删除吗?" okText="是" cancelText="否" onConfirm={() => handleDelete([record.id])}>
<Button type='link'>
删除
</Button>
</Popconfirm>
<Popconfirm title="确定要提交吗?" okText="是" cancelText="否" onConfirm={() => handleSubmit(record.id)}>
<Button type='link'>提交</Button>
</Popconfirm>
</>
}
</>
)
}
},
]
useEffect(() => {
}, [])
const toEdit = (id: number | string) => {
history.push(`/memberCenter/tranactionAbility/enquiryOffer/addEnquiry?id=${id}`)
}
/**
* @description: 删除
* @param {type}
* @return {type}
*/
const handleDelete = (arr: number[] | string[]) => {
PublicApi.postOrderQuotationDelete({ ids: arr }).then(res => {
ref.current.reload()
})
}
//批量提交
const handleSubmitAll = (ids: number[]) => {
PublicApi.postOrderQuotationSubmitAuditAll({ ids: ids }).then(res => {
ref.current.reload()
})
}
//提交审核
const handleSubmit = (id) => {
PublicApi.postOrderQuotationSubmitAudit({ id: id }).then(res => {
ref.current.reload()
})
}
const handleSumbit = (values: any) => {
if (values.voucherTime) {
values.startDocumentsTime = timeRange(values.voucherTime).st
values.endDocumentsTime = timeRange(values.voucherTime).et
}
delete values.voucherTime
ref.current.reload(values)
}
const menu = (
<Menu onClick={() => handleDelete(selectedRowKeys)}>
<Menu.Item key='1' icon={<DeleteOutlined />}>
批量删除
</Menu.Item>
</Menu>
)
const handleBatchDel = (e: any) => {
}
const rowSelection = {
selectedRowKeys: selectedRowKeys,
onChange: (selectedRowKeys: any, selectedRows: any) => {
setSelectRow(selectedRows);
setSelectedRowKeys(selectedRowKeys);
console.log(`selectedRowKeys: ${selectedRowKeys}`, 'selectedRows: ', selectedRows)
},
}
const controllerBtns = <Row>
<Col span={24}>
<Space direction="horizontal" size={16}>
<Button type="primary" onClick={() => history.push('/memberCenter/tranactionAbility/enquiryOffer/addEnquiry')} icon={<PlusOutlined />}>新建</Button>
<Button onClick={() => handleSubmitAll(selectedRowKeys)}>批量提交审核</Button>
<Dropdown.Button
overlay={menu}
trigger={['click']}
icon={<DownOutlined />}
>
更多
</Dropdown.Button>
</Space>
</Col>
</Row>
return (
<PageHeaderWrapper>
<Card>
<StandardTable
currentRef={ref}
columns={columns}
tableProps={{ rowKew: 'id' }}
fetchTableData={(params: any) => fetchData(params)}
rowSelection={rowSelection}
controlRender={
<NiceForm
actions={formActions}
onSubmit={values => handleSumbit(values)}
effects={($, actions) => {
useStateFilterSearchLinkageEffect($, actions, 'quotationNo', FORM_FILTER_PATH)
}}
expressionScope={{
controllerBtns
}}
schema={commonEnquieryOfferSchema}
>
</NiceForm>
}
/>
</Card>
</PageHeaderWrapper>
)
}
export default AddEnquiryOrder
\ No newline at end of file
import React, { useRef, useEffect } from 'react';
import { PageHeaderWrapper } from '@ant-design/pro-layout';
import { Card } from 'antd';
import { StandardTable } from 'god';
import NiceForm from '@/components/NiceForm';
import { createFormActions, FormEffectHooks } from '@formily/antd';
import { enquieryOfferSearchSchema } from '../schema';
import { FORM_FILTER_PATH } from '@/formSchema/const';
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch';
import {searchSelectGetSelectCategoryOptionEffect} from '../../effect/index'
import { ColumnType } from 'antd/lib/table/interface';
import { PublicApi } from '@/services/api';
const formActions = createFormActions();
const EnquiryOrder: React.FC<{}> = (props) => {
const ref = useRef<any>({});
const columns: ColumnType<any>[] = [{
title: '询价单号',
key: 'inquiryListNo',
dataIndex: 'inquiryListNo',
}, {
title: '询价单摘要',
key: 'details',
dataIndex: 'details',
}, {
title: '被询价会员',
key: 'memberName',
dataIndex: 'memberName',
}, {
title: '交付日期',
key: 'deliveryTime',
dataIndex: 'deliveryTime',
}, {
title: '报价截止时间',
key: 'quotationAsTime',
dataIndex: 'quotationAsTime',
}, {
title: '单据时间',
key: 'voucherTime',
dataIndex: 'voucherTime',
}, {
title: '外部状态',
key: 'externalState',
dataIndex: 'externalState',
}, {
title: '内部状态',
key: 'interiorState',
dataIndex: 'interiorState',
}];
//交易能力 询价报价 询价单查询
const fetchData = async (params: any) => {
const res = await PublicApi.getOrderProductInquiryList(params);
return res.data
}
return (
<PageHeaderWrapper>
<Card>
<StandardTable
currentRef={ref}
columns={columns}
tableProps={{ rowKew: 'id' }}
fetchTableData={(params: any) => fetchData(params)}
controlRender={
<NiceForm
actions={formActions}
effects={($, actions) => {
useStateFilterSearchLinkageEffect($,actions,'inquiryListNo',FORM_FILTER_PATH)
FormEffectHooks.onFieldChange$('category').subscribe(state => {
searchSelectGetSelectCategoryOptionEffect(actions,'category')
})
}}
schema={enquieryOfferSearchSchema}
>
</NiceForm>
}
/>
</Card>
</PageHeaderWrapper>
)
}
export default EnquiryOrder;
\ No newline at end of file
import { ISchema} from '@formily/antd'
import { FORM_FILTER_PATH } from '@/formSchema/const'
import {TimeList} from '../../common/statusList'
import TranactionRoute from 'config/routes/tranactionRoute'
/**
* @description: 公用
* @param {type}
* @return {type}
*/
export const commonEnquieryOfferSchema: ISchema = {
type:'object',
properties:{
megalayout:{
type:'object',
"x-component":'mega-layout',
"x-component-props":{
grid:true
},
properties:{
ctl:{
type:'object',
"x-component":"Children",
"x-component-props":{
children:"{{controllerBtns}}"
}
},
quotationNo:{//报价单号
type:'string',
"x-component":"Search",
"x-mega-props":{
},
"x-component-props":{
placeholder:'报价单搜索'
}
}
}
},
[FORM_FILTER_PATH]:{
type:'object',
"x-component":"flex-layout",
"x-component-props":{
rowStyle:{
flexWrap:'nowrap'
},
colStyle:{
marginLeft: 20
}
},
properties:{
PRO_LAYOUT:{
type:'object',
"x-component":'mega-layout',
"x-mega-props":{
span: 5
},
"x-component-props":{
inline: true
},
properties:{
inquiryListNo:{//需求单号
type:'string',
"x-mega-props":{
},
"x-component-props":{
placeholder:'询价单号'
}
},
details:{
type:'string',
"x-component-props":{
placeholder:'询价单摘要'
}
},
memberName:{
type:'string',
"x-component-props":{
placeholder:'被询价会员'
}
},
// category:{
// type:'string',
// 'x-component': 'CustomInputSearch',
// 'x-component-props': {
// placeholder: '商品品类',
// showSearch: true,
// showArrow: true,
// defaultActiveFirstOption: false,
// filterOption: false,
// notFoundContent: null,
// style: { width: '174px', lineHeight: '32px' },
// searchValue: null,
// dataoption: []
// }
// // "x-component-props":{
// // placeholder:'请选择品类'
// // },
// // enum:[]
// },
voucherTime:{
type:'string',
default: 0,
"x-component-props":{
placeholder:'请选择单据时间'
},
enum: TimeList
},
}
},
sumbit:{
"x-component":'Submit',
"x-mega-props":{
span:1
},
"x-component-props":{
children:'查询'
}
}
}
}
}
}
/**
* @description: 需求报价-需求单查询
* @param {type}
* @return {type}
*/
export const enquierySearchSchema: ISchema = {
type:'object',
properties:{
megalayout:{
type:'object',
"x-component":'mega-layout',
properties:{
requisitionFormNo:{
type:'string',
"x-component":"Search",
"x-mega-props":{
},
"x-component-props":{
placeholder:'搜索',
align: 'flex-left',
}
}
}
},
[FORM_FILTER_PATH]:{
type:'object',
"x-component":"flex-layout",
"x-component-props":{
rowStyle:{
justifyContent: 'flex-start',
flexWrap:'nowrap'
},
colStyle:{//改变间隔
marginRight: 20
}
},
properties:{
PRO_LAYOUT:{
type:'object',
"x-component":'mega-layout',
"x-mega-props":{
span: 5
},
"x-component-props":{
inline: true
},
properties:{
demandMembers:{
type:'string',
"x-component-props":{
placeholder:'询价会员'
}
},
// category:{
// type:'string',
// 'x-component': 'CustomInputSearch',
// 'x-component-props': {
// placeholder: '商品品类',
// showSearch: true,
// showArrow: true,
// defaultActiveFirstOption: false,
// filterOption: false,
// notFoundContent: null,
// style: { width: '174px', lineHeight: '32px' },
// searchValue: null,
// dataoption: []
// }
// // "x-component-props":{
// // placeholder:'请选择品类'
// // },
// // enum:[]
// },
voucherTime:{
type:'string',
default: 0,
"x-component-props":{
placeholder:'请选择单据时间'
},
enum: TimeList
},
}
},
sumbit:{
"x-component":'Submit',
"x-mega-props":{
span: 1
},
"x-component-props":{
children:'查询'
}
}
}
}
}
}
/**
* @description: 需求报价-报价查询
* @param {type}
* @return {type}
*/
export const enquieryOfferSearchSchema: ISchema = {
type:'object',
properties:{
megalayout:{
type:'object',
"x-component":'mega-layout',
properties:{
inquiryListNo:{
type:'string',
"x-component":"Search",
"x-mega-props":{
},
"x-component-props":{
placeholder:'搜索',
align: 'flex-left',
}
}
}
},
[FORM_FILTER_PATH]:{
type:'object',
"x-component":"flex-layout",
"x-component-props":{
rowStyle:{
justifyContent: 'flex-start',
flexWrap:'nowrap'
},
colStyle:{//改变间隔
marginRight: 20
}
},
properties:{
PRO_LAYOUT:{
type:'object',
"x-component":'mega-layout',
"x-mega-props":{
span: 5
},
"x-component-props":{
inline: true
},
properties:{
memberName:{
type:'string',
"x-component-props":{
placeholder:'询价会员'
}
},
voucherTime:{
type:'string',
default: 0,
"x-component-props":{
placeholder:'请选择单据时间'
},
enum: TimeList
},
externalState:{
type:'string',
default: 0,
"x-component-props":{
placeholder:'外部状态'
},
enum: TimeList
},
interiorState :{
type:'string',
default: 0,
"x-component-props":{
placeholder:'内部状态'
},
enum: TimeList
},
}
},
sumbit:{
"x-component":'Submit',
"x-mega-props":{
span: 1
},
"x-component-props":{
children:'查询'
}
}
}
}
}
}
/**
* @description: 报价单新增编辑-需求单查询
* @param {type}
* @return {type}
*/
export const dialogEqformSearch: ISchema = {
type:'object',
properties:{
megalayout:{
type:'object',
"x-component":'mega-layout',
properties:{
requisitionFormNo:{
type:'string',
"x-component":"Search",
"x-mega-props":{
},
"x-component-props":{
placeholder:'需求单号',
align: 'flex-left',
}
}
}
},
[FORM_FILTER_PATH]:{
type:'object',
"x-component":"flex-layout",
"x-component-props":{
rowStyle:{
justifyContent: 'flex-start',
flexWrap:'nowrap'
},
colStyle:{//改变间隔
marginRight: 20
}
},
properties:{
PRO_LAYOUT:{
type:'object',
"x-component":'mega-layout',
"x-mega-props":{
span: 5
},
"x-component-props":{
inline: true
},
properties:{
details:{
type:'string',
"x-component-props":{
placeholder:'需求摘要'
}
},
demandMembers:{
type:'string',
"x-component-props":{
placeholder:'需求会员'
}
},
voucherTime:{
type:'string',
default: 0,
"x-component-props":{
placeholder:'请选择单据时间'
},
enum: TimeList
},
}
},
sumbit:{
"x-component":'Submit',
"x-mega-props":{
span: 1
},
"x-component-props":{
children:'查询'
}
}
}
}
}
}
\ No newline at end of file
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