Commit 8d08fc75 authored by 前端-钟卫鹏's avatar 前端-钟卫鹏

Merge branch 'dev-srm' of http://10.0.0.22:3000/lingxi/lingxi-business-paltform into dev-srm

parents 8db3aea9 42af0b13
......@@ -28,6 +28,8 @@ const defaultCityData = { index: 0, provinceCode: 0, province: '', cityCode: 0,
const LogisticsInfo: React.FC<LogisticsInfoPropsType> = (props) => {
const { siteUrl, siteId } = props.SiteStore
const [door, setDoor] = useState<string>('');
const [resUrl, setResUrl] = useState<string>('');
const [formIsHalfFilledOut, setFormIsHalfFilledOut] = useState(false)
const [form] = Form.useForm()
const [allMallList, setAllMallList] = useState([])
......@@ -163,7 +165,6 @@ const LogisticsInfo: React.FC<LogisticsInfoPropsType> = (props) => {
}
const handleInputChange = (data: any) => {
console.log(data, 100086)
setMainBusiness(data);
form.setFieldsValue({
mainBusiness: data
......@@ -346,13 +347,12 @@ const LogisticsInfo: React.FC<LogisticsInfoPropsType> = (props) => {
const { value } = e.target;
const result = [...slideshowBOList];
result[index].link = value;
console.log(result)
setSlideshowBOList(result)
form.setFieldsValue({
slideshowBOList: result
})
}
/**
const handleMallSelectChange = (mallId: number) => {
setShopId(mallId)
if (!shopInfo) {
......@@ -395,10 +395,6 @@ const LogisticsInfo: React.FC<LogisticsInfoPropsType> = (props) => {
return result
}
const handleFormValueChange = () => {
setFormIsHalfFilledOut(true)
}
const getSelectMallStoreUrl = () => {
if (!shopInfo) {
return null
......@@ -415,6 +411,28 @@ const LogisticsInfo: React.FC<LogisticsInfoPropsType> = (props) => {
}
return null
}
*/
const handleFormValueChange = () => {
setFormIsHalfFilledOut(true)
}
/** 获取店铺链接 */
const checkUrl = (url) => {
if (url && typeof url === 'string') {
if (url.indexOf('/') === 0) {
return url.replace('/', '').trim()
} else {
return `${url}`.trim()
}
}
}
const handleMallSelectChange = (val, option) => {
setDoor(option.children);
if (option.url) {
checkUrl(option.url) ? setResUrl(`${checkUrl(option.url)}.${siteUrl}`) : setResUrl(`${siteUrl}`)
}
}
return (
<PageHeaderWrapper
......@@ -583,13 +601,17 @@ const LogisticsInfo: React.FC<LogisticsInfoPropsType> = (props) => {
<Select allowClear value={shopId} className={styles.form_item} onChange={handleMallSelectChange}>
{
allMallList.map(item => (
<Select.Option key={item.id} value={item.id}>{item.name}</Select.Option>
<Select.Option key={item.id} value={item.id} url={item.url}>{item.name}</Select.Option>
))
}
</Select>
{
getSelectMallStoreUrl()
}
{resUrl && (
<div className={styles.shop_url}>
<span>当前{door}链接:</span>
<label>{resUrl}</label>
<CopyOutlined className={styles.copy_icon} onClick={() => handleCopyLinke(resUrl)} />
</div>
)}
</Form.Item>
</TabPane>
<TabPane tab='SEO' key='2' forceRender>
......
......@@ -92,7 +92,7 @@ const BidCommonLayout: React.FC<BidCommonLayoutProps> = (props: any) => {
<Divider dashed style={{ color: '#EBECF0' }} />
<div className={selfStyles.baseItem}>
<h5 className={selfStyles.label}>授标意见: </h5>
<h5 className={selfStyles.content}>{effect.signUpIdea}</h5>
<h5 className={selfStyles.content}>{effect.signUpIdea || '-'}</h5>
</div>
<div className={selfStyles.baseItem}>
<h5 className={selfStyles.label}>附件: </h5>
......
......@@ -148,8 +148,8 @@ const ContrastLyout1: React.FC<IProps> = (props: any) => {
if (data.length > 0) {
formatting(data, i);
} else {
message.error('当前暂无比价信息');
setDisabled(true);
// message.error('当前暂无比价信息');
setDisabled(false);
}
setLoading(false);
......
......@@ -2,7 +2,7 @@ import React, { useEffect, useState } from 'react';
import { Modal } from 'antd';
import {
SchemaForm, SchemaMarkupField as Field,
createAsyncFormActions,
createFormActions,
FormEffectHooks,
} from '@formily/antd'
import { Input, Radio, DatePicker, Checkbox } from '@formily/antd-components'
......@@ -11,7 +11,7 @@ import moment from 'moment';
import styles from './index.less';
import { isEmpty } from 'lodash';
const actions = createAsyncFormActions()
const actions = createFormActions()
const { onFieldChange$ } = FormEffectHooks;
export interface IProps {
......@@ -42,6 +42,7 @@ const ModalOperate: React.FC<IProps> = (props: any) => {
const [confirmLoading, setConfirmLoading] = useState<boolean>(false);
const useFormEffects = () => {
const { setFieldState } = createFormActions()
if (modalType === 'audit') {
onFieldChange$('state').subscribe(({ value }) => {
actions.setFieldState('auditOpinion', state => {
......
......@@ -81,6 +81,8 @@ const CrossSellProducts: React.FC<IProps> = (props: any) => {
const handleClose = () => {
onClose()
resetValue()
setFiles([])
setProductId(0)
}
/** 确定 */
const handleConfirm = () => {
......@@ -89,6 +91,8 @@ const CrossSellProducts: React.FC<IProps> = (props: any) => {
attribute,
files,
})
setProductId(0)
setFiles([])
resetValue()
}
......@@ -146,9 +150,18 @@ const CrossSellProducts: React.FC<IProps> = (props: any) => {
if (record.productId) {
GetCommodityAttribute(record.productId);
}
record.enclosureUrls && setFiles(record.enclosureUrls)
}
}, [rel, record])
const handleSelProduct = (data) => {
console.log(data);
data.id && setProductId(data.id);
data.productId && setProductId(data.productId);
setFlag(true)
}
return (
<>
<Drawer
......@@ -169,10 +182,10 @@ const CrossSellProducts: React.FC<IProps> = (props: any) => {
>
<Button onClick={handleClose} style={{ marginRight: 8 }}>
取消
</Button>
</Button>
<Button onClick={handleConfirm} type="primary">
确定
</Button>
</Button>
</div>
)}
</>
......@@ -226,7 +239,7 @@ const CrossSellProducts: React.FC<IProps> = (props: any) => {
}}
>
基本信息
</span>
</span>
</>
}
/>
......@@ -261,7 +274,7 @@ const CrossSellProducts: React.FC<IProps> = (props: any) => {
<div className={cx(style.box, style.boxBlue)}>
<div className={cx(style.title, style.tagBlue)}>
报价商品
<Text type='danger'>*</Text>
<Text type='danger'>*</Text>
</div>
<div className={style.content}>
{Object.keys(product).length > 0
......@@ -282,7 +295,7 @@ const CrossSellProducts: React.FC<IProps> = (props: any) => {
</>
)}
{!preview && (
<Button onClick={() => { setFlag(true); setProductId(product.id); console.log(product) }} block type="dashed" style={{ margin: '16px 0px' }}>
<Button onClick={() => handleSelProduct(product)} block type="dashed" style={{ margin: '16px 0px' }}>
<PlusSquareOutlined />
选择商品
</Button>
......@@ -349,7 +362,7 @@ const CrossSellProducts: React.FC<IProps> = (props: any) => {
}}
>
附件
</span>
</span>
</>
}
/>
......
......@@ -159,9 +159,12 @@ const SelectProduct: React.FC<Iprops> = (props: any) => {
}
useEffect(() => {
console.log(id)
if (id) {
console.log(2)
RowCtl.setSelectedRowKeys([id]);
} else {
console.log(1)
RowCtl.setSelectedRowKeys([]);
}
}, [visible])
......
......@@ -316,7 +316,6 @@ const PurchasInfo: React.FC<PurchasInfoPropsType> = (props) => {
const { value } = e.target;
const result = [...slideshowBOList];
result[index].link = value;
console.log(result)
setSlideshowBOList(result)
form.setFieldsValue({
slideshowBOList: result
......@@ -385,9 +384,10 @@ const PurchasInfo: React.FC<PurchasInfoPropsType> = (props) => {
setFormIsHalfFilledOut(true)
}
/** 获取店铺链接 */
const checkUrl = (url) => {
if (url && typeof url === 'string') {
if (url.indexOf('/') > -1) {
if (url.indexOf('/') === 0) {
return url.replace('/', '').trim()
} else {
return `${url}`.trim()
......@@ -395,11 +395,10 @@ const PurchasInfo: React.FC<PurchasInfoPropsType> = (props) => {
}
}
/** 获取店铺链接 */
const handleMallSelectChange = (val, option) => {
setDoor(option.children);
if (option.url) {
setResUrl(`${siteUrl}/${checkUrl(option.url)}`)
checkUrl(option.url) ? setResUrl(`${checkUrl(option.url)}.${siteUrl}`) : setResUrl(`${siteUrl}`)
}
}
......
......@@ -15,6 +15,7 @@ import style from './index.less';
import DrawerWrite from '../modal/drawerWrite';
import { PublicApi } from '@/services/api';
import UploadImport from '@/components/UploadImport';
import EyePreview from '@/components/EyePreview';
const layout: any = {
colon: false,
......@@ -40,7 +41,9 @@ const Material: React.FC<Iprops> = (props: any) => {
/** 表单表头 */
const [flag, setFlag] = useState<boolean>(false);
const [edit, setEdit] = useState<any>({});
const [dataSource, setDataSource] = useState<any>([])
const [dataSource, setDataSource] = useState<any>([]);
const [eidtIndex, setEditIndex] = useState<number | null>();
const [isPreview, setIsPreview] = useState<boolean>(false);
/** 删除列表 */
const handleRemove = (index: number) => {
......@@ -50,9 +53,11 @@ const Material: React.FC<Iprops> = (props: any) => {
}
/** 编辑列表 */
const handleEdit = (data) => {
const handleEdit = (data, index, preview?) => {
setEditIndex(index)
setEdit(data);
setFlag(true)
setIsPreview(preview)
}
const columns: ColumnType<Object>[] = [
......@@ -65,6 +70,9 @@ const Material: React.FC<Iprops> = (props: any) => {
title: '物料名称',
key: 'name',
dataIndex: 'name',
render: (text: any, record: any, index: number) => (
<EyePreview type='button' handleClick={() => handleEdit(record, index, true) } >{text}</EyePreview>
)
},
{
title: '规格型号',
......@@ -97,7 +105,7 @@ const Material: React.FC<Iprops> = (props: any) => {
dataIndex: 'operate',
render: (_text: any, record: any, index: number) => (
<>
<Button type='link' onClick={() => handleEdit(record) }>编辑</Button>
<Button type='link' onClick={() => handleEdit(record, index)}>编辑</Button>
<Button onClick={() => handleRemove(index)} type='link'>删除</Button>
</>
)
......@@ -113,12 +121,23 @@ const Material: React.FC<Iprops> = (props: any) => {
/** 打开添加方式 */
const handleAddmode = () => {
setFlag(true)
setEdit({})
setEditIndex(null)
}
/** 关闭 */
const handleClose = () => {
setFlag(false)
setIsPreview(false)
}
/** 添加列表 */
const fetchTableList = (data: any) => {
if (Object.keys(data).length > 0) {
console.log(data, 98)
setDataSource([...dataSource, data]);
if (eidtIndex || eidtIndex === 0) {
dataSource[eidtIndex] = data;
setDataSource([...dataSource]);
} else {
setDataSource([...dataSource, data]);
}
setFlag(false);
}
}
......@@ -202,9 +221,10 @@ const Material: React.FC<Iprops> = (props: any) => {
{materielMode === 1
&& (
<DrawerWrite
preview={isPreview}
edit={edit}
flag={flag}
onClose={() => setFlag(false)}
onClose={handleClose}
onConfirm={fetchTableList}
/>
)}
......
......@@ -16,10 +16,13 @@ import {
} from 'antd';
import style from './index.less';
import { UPLOAD_TYPE } from '@/constants'
import { ColumnType } from 'antd/lib/table/interface';
import { DeleteOutlined, LinkOutlined, UploadOutlined } from '@ant-design/icons';
import SelectProduct from './selectProduct';
import { PublicApi } from '@/services/api';
import { isEmpty } from 'lodash';
import TableModal from '@/pages/transaction/components/TableModal';
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch';
import { FORM_FILTER_PATH } from '@/formSchema/const';
const layout: any = {
colon: false,
......@@ -34,6 +37,8 @@ interface Iprops {
onConfirm?(e: any),
/** 编辑的数据 */
edit?: any,
/** 查看 */
preview?: boolean
}
const DrawerWrite: React.FC<Iprops> = (props: any) => {
......@@ -41,7 +46,8 @@ const DrawerWrite: React.FC<Iprops> = (props: any) => {
flag,
onClose,
onConfirm,
edit
edit,
preview
} = props;
const [form] = Form.useForm();
const [visible, setVisile] = useState<boolean>(false)
......@@ -51,16 +57,20 @@ const DrawerWrite: React.FC<Iprops> = (props: any) => {
const [product, setProduct] = useState<any>({});
const [category, setcategory] = useState([]);
/** 选择货品点击 */
const confirm = (item: any) => {
const { selectRow } = item;
const confirm = (selectRowKeys: string[] | number[], selectRowRecord: any) => {
const selectRow = selectRowRecord;
if (selectRow.length > 0) {
const data = selectRow[0]
const data: any = selectRow[0]
if (data.customerCategory.category) {
const fullId = data.customerCategory.category.fullId;
const ids = fullId.replace(/\b(0+)/gi, '').split('.');
form.setFieldsValue({
ids: ids.join(',').split(','),
})
} else {
form.setFieldsValue({
ids: data.ids
})
}
form.setFieldsValue({
......@@ -75,7 +85,6 @@ const DrawerWrite: React.FC<Iprops> = (props: any) => {
} else {
message.error('请选择货品!')
}
console.log(item)
}
/**查询品类树 */
const searchCategoryTree = (id: any) => {
......@@ -159,8 +168,9 @@ const DrawerWrite: React.FC<Iprops> = (props: any) => {
useEffect(() => {
form.resetFields();
searchCategoryTree('0');
searchCategoryTree(null);
if (!isEmpty(edit)) {
console.log(edit)
form.setFieldsValue({
number: edit.number,
name: edit.name,
......@@ -174,6 +184,54 @@ const DrawerWrite: React.FC<Iprops> = (props: any) => {
}
}, [flag]);
const fetchGoodsData = (params: any) => {
return new Promise(resolve => {
PublicApi.getProductGoodsGetGoodsList(params).then(res => {
const { data } = res
resolve(data)
})
})
}
const toggle = (flag: boolean) => {
setVisile(flag)
}
const columns: ColumnType<any>[] = [
{
title: '货号',
key: 'code',
dataIndex: 'code'
},
{
title: '货品名称',
key: 'name',
dataIndex: 'name',
},
{
title: '规格型号',
key: 'type',
dataIndex: 'type'
},
{
title: '品类',
key: 'customerCategory',
dataIndex: 'customerCategory',
render: (text: any) => <span>{(text && Object.keys(text).length > 0) && text.name}</span>
},
{
title: '品牌',
key: 'brand',
dataIndex: 'brand',
render: (text: any) => <span>{(text && Object.keys(text).length > 0) && text.name}</span>
},
{
title: '单位',
key: 'unitName',
dataIndex: 'unitName'
},
]
return (
<>
<Drawer
......@@ -184,18 +242,19 @@ const DrawerWrite: React.FC<Iprops> = (props: any) => {
onClose={handleClose}
className={style.drawer}
footer={
<div
style={{
textAlign: 'right',
}}
>
<Button onClick={handleClose} style={{ marginRight: 8 }}>
取消
</Button>
<Button onClick={handleSubmit} type="primary">
确定
</Button>
</div>
!preview ?
<div
style={{
textAlign: 'right',
}}
>
<Button onClick={handleClose} style={{ marginRight: 8 }}>
取消
</Button>
<Button onClick={handleSubmit} type="primary">
确定
</Button>
</div> : null
}
>
<Row>
......@@ -244,7 +303,7 @@ const DrawerWrite: React.FC<Iprops> = (props: any) => {
}}
>
基本信息
</span>
</span>
</>
}
/>
......@@ -255,7 +314,7 @@ const DrawerWrite: React.FC<Iprops> = (props: any) => {
>
<Input.Search
readOnly
enterButton={<><LinkOutlined /> 选择</>}
enterButton={<Button disabled={preview}><LinkOutlined /> 选择</Button>}
onSearch={() => setVisile(true)}
/>
</Form.Item>
......@@ -291,7 +350,7 @@ const DrawerWrite: React.FC<Iprops> = (props: any) => {
label='品牌'
name='brand'
>
<Input />
<Input disabled={preview} />
</Form.Item>
{/* 采购数量 */}
<Form.Item
......@@ -314,7 +373,7 @@ const DrawerWrite: React.FC<Iprops> = (props: any) => {
}}
>
采购数量
</span>
</span>
</>
}
/>
......@@ -330,7 +389,7 @@ const DrawerWrite: React.FC<Iprops> = (props: any) => {
name='purchaseCount'
rules={[{ required: true, message: '请输入采购数量' }]}
>
<InputNumber min={1} style={{ width: '100%' }} />
<InputNumber disabled={preview} min={1} style={{ width: '100%' }} />
</Form.Item>
{/* 附件 */}
<Form.Item
......@@ -353,7 +412,7 @@ const DrawerWrite: React.FC<Iprops> = (props: any) => {
}}
>
附件
</span>
</span>
</>
}
/>
......@@ -368,9 +427,9 @@ const DrawerWrite: React.FC<Iprops> = (props: any) => {
<LinkOutlined />
<span>{v.name}</span>
</div>
<div className={style.upload_right}>
{!preview && <div className={style.upload_right}>
<DeleteOutlined />
</div>
</div>}
</div>
))}
</div>
......@@ -382,7 +441,7 @@ const DrawerWrite: React.FC<Iprops> = (props: any) => {
beforeUpload={beforeDocUpload}
onChange={handleChange}
>
<Button loading={loading} icon={<UploadOutlined />}>上传文件</Button>
<Button disabled={preview} loading={loading} icon={<UploadOutlined />}>上传文件</Button>
<div style={{ marginTop: '8px' }}>一次上传一个文件,每个附件大小不能超过 20M</div>
</Upload>
</Form.Item>
......@@ -390,11 +449,117 @@ const DrawerWrite: React.FC<Iprops> = (props: any) => {
</Col>
</Row>
</Drawer>
<SelectProduct
<TableModal
modalType="Drawer"
visible={visible}
onclose={() => setVisile(false)}
confirm={confirm}
title="选择货品"
mode="radio"
tableProps={{
rowKey: 'id',
}}
fetchData={fetchGoodsData}
onClose={() => toggle(false)}
onOk={confirm}
columns={columns}
effects={($, actions) => {
actions.reset()
useStateFilterSearchLinkageEffect($, actions, "name", FORM_FILTER_PATH)
}}
schema={{
type: 'object',
properties: {
megalayout: {
type: 'object',
"x-component": 'mega-layout',
properties: {
name: {
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: {
code: {
type: 'string',
"x-component-props": {
placeholder: '货号'
}
},
customerCategoryId: {
type: 'string',
"x-component": 'SearchSelect',
"x-component-props": {
placeholder: '请选择品类',
className: 'fixed-ant-selected-down', // 该类强制将显示的下拉框出现在select下, 只有这里出现问题, ??
fetchSearch: PublicApi.getProductSelectGetSelectCustomerCategory,
style: {
width: 160
}
}
},
brandId: {
type: 'string',
"x-component": 'SearchSelect',
"x-component-props": {
placeholder: '请选择品牌',
fetchSearch: PublicApi.getProductSelectGetSelectBrand,
style: {
width: 160
}
}
},
type: {
type: 'string',
"x-component-props": {
placeholder: '规格型号'
}
},
}
},
sumbit: {
"x-component": 'Submit',
"x-mega-props": {
span: 1
},
"x-component-props": {
children: '查询'
}
}
}
}
}
}}
/>
</>
)
}
......
......@@ -95,7 +95,7 @@ const SelectProduct: React.FC<Iprops> = (props: any) => {
<StandardTable
currentRef={ref}
columns={columns}
tableProps={{ rowKew: 'id' }}
tableProps={{ rowkey: 'id' }}
rowSelection={rowSelection}
fetchTableData={(params) => fetchGoodsData(params)}
controlRender={
......
......@@ -20,7 +20,7 @@ const tokenList = [
{ name: 'TransactionV2', token: '3ad04435494d01c359b9f07948338e019133a3e6c0fccdbe1bc3adc19cf1e0b1', categoryIds: [0] }, // 交易服务V2
{ name: 'ContractV2', token: 'bbf1f327cfe7c59d1e7fd9c5d25119829dd79d238b1f1c79ed97331e220721a4', categoryIds: [0] }, // 合同能力V2
{ name: 'OrderV2', token: '033f83bd5f519506f65f46d1513b1f8028a1dc1b5238d22edd0a2feb53cd3a19', categoryIds: [0], }, //订单服务V2
{ name: 'Platform', token: 'cadc3b13452c3ec67b5ef0c57063f12142e857a9eaa64669e80165adf42f5861', categoryIds: [0] }, // 平台后台v2
{ name: 'Platform', token: 'db3b086157528c865a1a1a9fafffa574e9c3f098c0518a7c374a72988ba1edbb', categoryIds: [0] }, // 平台后台v2
{ name: 'ProductV2', token: 'b915026587fa1f6edf056f3335817fe2d4b350b0aa84da456786e15e83d45827', categoryIds: [0], }, // 商品服务V2
{ name: 'TemplateV2', token: 'f0187aed046ac19accbed5c780cade01cf11b50a37099dab9d456195a4abd0d3', categoryIds: [0], }, // 页面模板服务V2
{ name: 'MemberV2', token: '87f86a297246fbf1c0dff7d34f13729cb194935a95db077a5009ac4ea48cea6f', categoryIds: [0]}, //会员服务 V2
......
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