Commit de7b2757 authored by 前端-黄佳鑫's avatar 前端-黄佳鑫
parents ef0fadb0 9f795857
......@@ -2,7 +2,7 @@
* @Author: XieZhiXiong
* @Date: 2020-11-05 18:02:18
* @LastEditors: XieZhiXiong
* @LastEditTime: 2021-08-30 19:38:32
* @LastEditTime: 2021-09-07 15:24:26
* @Description: 退款明细
*/
import React, { useState } from 'react';
......@@ -360,7 +360,7 @@ const ReturnDetailInfo: React.FC<ReturnDetailInfoProps> = ({
</Descriptions.Item>
<Descriptions.Item label="支付环节">{item.payNode}</Descriptions.Item>
<Descriptions.Item label="已支付金额(元)">{item.payAmount}</Descriptions.Item>
<Descriptions.Item label="支付比例">{item.payRatio}%</Descriptions.Item>
<Descriptions.Item label="支付比例">{item.payRatio * 100}%</Descriptions.Item>
<Descriptions.Item label="退款金额(元)">{item.refundAmount}</Descriptions.Item>
<Descriptions.Item label="支付方式">{item.payWayName}</Descriptions.Item>
<Descriptions.Item label="退款时间">{item.refundTime}</Descriptions.Item>
......
......@@ -2,7 +2,7 @@
* @Author: XieZhiXiong
* @Date: 2020-11-05 17:36:45
* @LastEditors: XieZhiXiong
* @LastEditTime: 2021-09-07 10:02:55
* @LastEditTime: 2021-09-07 15:22:20
* @Description: 查看退货数量与退款金额 抽屉
*/
import React, { useEffect, useState } from 'react';
......@@ -194,7 +194,10 @@ const ReturnInfoDrawer: React.FC<ReturnInfoDrawerProps> = ({
if (!applyInfo || !applyInfo.orderId) {
return;
}
let payList = applyInfo.payList || [];
let payList = applyInfo.payList ? applyInfo.payList.map((item) => ({
...item,
payRatio: item.payRatio * 100,
})) : [];
setPayInfoLoading(true);
try {
// 编辑状态才请求支付信息,否则默认取申请信息里边的支付信息
......
......@@ -8,6 +8,7 @@ import { findLastIndex } from 'lodash';
import { PageHeaderWrapper } from '@ant-design/pro-layout';
import { SaveOutlined, PlusOutlined } from '@ant-design/icons';
import { createFormActions, FormEffectHooks, FormPath } from '@formily/antd';
import BigNumber from 'bignumber.js';
import { PublicApi } from '@/services/api';
import { normalizeFiledata, FileData } from '@/utils';
import {
......@@ -691,7 +692,7 @@ const ReturnForm: React.FC<BillsFormProps> = ({
id: item.id,
returnReason: '',
taskTypeKey: item.processKey,
remaining: item.quantity - (item.returnCount || 0), // 可退货数量
remaining: new BigNumber(item.quantity).minus(item.returnCount || 0), // 可退货数量
orderId: item.orderId,
},
isHasTax: item.tax,
......
......@@ -125,6 +125,14 @@ const TemplateDetail: React.FC<TemplateDetailPropsType> = (props) => {
<LayoutOutlined />
<label>渠道商城装修</label>
</div>
{
detailInfo?.environment === 4 && (
<div className={cx(styles.btn, styles.fit)}>
<LayoutOutlined />
<label>渠道品类导航装修</label>
</div>
)
}
<div className={cx(styles.btn, detailInfo?.use === 1 ? styles.use : '')} onClick={() => detailInfo?.use !== 1 ? setUseModalVisible(true) : {}}>
<PushpinOutlined />
<label>{detailInfo?.use === 1 ? '使用中' : '使用'}</label>
......
......@@ -303,7 +303,7 @@ const AddProducts: React.FC<{}> = (props) => {
throw new Error('请完善商品其他信息!')
}
} catch (e) {
return e
return { message: '请完善商品其他信息!' }
}
// 校验价格
try {
......
......@@ -7,7 +7,7 @@ import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilte
import { FORM_FILTER_PATH } from '@/formSchema/const';
import { unstable_batchedUpdates as batchedUpdates } from 'react-dom';
import { ColumnsType } from 'antd/es/table';
import { GetMarketingPlatformActivityListAdornResponseDetail } from '@/services/MaketingV2Api';
import { GetMarketingAdornMerchantActivityListAdornResponseDetail } from '@/services/MarketingApi';
import StatusTag from '@/components/StatusTag';
import schema from './schema';
import styles from './activityProductDrawer.less';
......@@ -31,7 +31,7 @@ type SubmitType = {
activityName: string,
}
const columns: ColumnsType<GetMarketingPlatformActivityListAdornResponseDetail["productList"][0]> = [
const columns: ColumnsType<GetMarketingAdornMerchantActivityListAdornResponseDetail["goodsList"][0]> = [
{
title: '商品信息',
dataIndex: 'productInfo',
......@@ -91,11 +91,11 @@ const ActivityProductDrawer: React.FC<Iprops> = (props: Iprops) => {
const { visible, onCancel, fetchData = null, onOk, products = [], activityImage, mode = 'checked' } = props;
const [current, setPage] = useState<number>(1);
const [currentPageSize, setPageSize] = useState<number>(10);
const [dataSource, setDataSource] = useState<GetMarketingPlatformActivityListAdornResponseDetail[]>([]);
const [dataSource, setDataSource] = useState<GetMarketingAdornMerchantActivityListAdornResponseDetail[]>([]);
const [totalCount, setTotalCount] = useState<number>(0);
const [selectedKey, setSelectKey] = useState<number | null>(null);
const [selectedActivityProductList, setSelectedActivityProductList] = useState<GetMarketingPlatformActivityListAdornResponseDetail["productList"]>();
const [checkedProduct, setCheckedProduct] = useState<GetMarketingPlatformActivityListAdornResponseDetail["productList"]>([]);
const [selectedActivityProductList, setSelectedActivityProductList] = useState<GetMarketingAdornMerchantActivityListAdornResponseDetail["goodsList"]>();
const [checkedProduct, setCheckedProduct] = useState<GetMarketingAdornMerchantActivityListAdornResponseDetail["goodsList"]>([]);
const [loading, setLoading] = useState<boolean>(false);
const selectedRowKeys = useMemo(() => checkedProduct.map((_item) => `${_item.activityId!}-${_item.id!}`), [checkedProduct]);
......@@ -148,14 +148,14 @@ const ActivityProductDrawer: React.FC<Iprops> = (props: Iprops) => {
const onSelect = (id: number) => {
setSelectKey(id);
const target = dataSource.filter((_item) => _item.id === id)[0];
setSelectedActivityProductList(target.productList);
setSelectedActivityProductList(target.goodsList);
};
const handleOk = () => {
onOk?.(checkedProduct);
};
const handleRowSelect = (record: GetMarketingPlatformActivityListAdornResponseDetail["productList"][0], selected: boolean, selectedRows: GetMarketingPlatformActivityListAdornResponseDetail["productList"]) => {
const handleRowSelect = (record: GetMarketingAdornMerchantActivityListAdornResponseDetail["goodsList"][0], selected: boolean, selectedRows: GetMarketingAdornMerchantActivityListAdornResponseDetail["goodsList"]) => {
if (mode === 'checked') {
if (selected) {
setCheckedProduct((prev) => prev.concat(record));
......
......@@ -113,10 +113,6 @@ const CommodityDrawer: React.FC<CommodityDrawerProps> = (props: CommodityDrawerP
);
}
},
{
title: '商家名称',
dataIndex: 'memberName',
},
]
const _onConfirm = () => {
......@@ -140,6 +136,7 @@ const CommodityDrawer: React.FC<CommodityDrawerProps> = (props: CommodityDrawerP
if (selectId) {
_params.idNotInList = Array.isArray(selectId) ? selectId : [selectId]
}
console.log(_params, '_params')
const { data } = await PublicApi.getMarketingAdornGoodsListAdorn(_params);
setExpandedRowKeys(data?.data?.map((item) => item.id) || []);
return data;
......
import React, { useState, useEffect, useRef } from 'react';
import React, { useState, useEffect } from 'react';
import { history } from 'umi';
import { Input, Radio, Space, Button, Tag, Tooltip } from 'antd';
import { Button, Tooltip } from 'antd';
import cloneDeep from 'lodash/cloneDeep';
import { PlusOutlined } from '@ant-design/icons';
import { changeProps, updatePageConfig, PageConfigType } from '@lingxi-disign/core';
import StatusTag from '@/components/StatusTag'
import { PublicApi } from '@/services/api';
import { GetMarketingPlatformActivityListAdornRequest } from '@/services/MaketingV2Api';
import { GetMarketingAdornActivityGoodsAdornRequest } from '@/services/MarketingApi';
import ActivityProductDrawer from '@/pages/editor/components/drawer/activityProductDrawer/activityProductDrawer';
import ActivityImage from '@/assets/couponIcons/ActivityImage.svg';
......@@ -36,7 +35,7 @@ const MarketingCardGood: React.FC<MarketingCardGoodProps> = (props: MarketingCar
useEffect(() => {
if (id && id != record[0]?.id) {
PublicApi.getMarketingAdornGoodsAdorn({ ids: id }).then((res) => {
PublicApi.postMarketingAdornActivityGoodsBatchAdorn({ ids: id }).then((res) => {
if (res.code === 1000) {
setRecord(res.data);
}
......@@ -46,13 +45,13 @@ const MarketingCardGood: React.FC<MarketingCardGoodProps> = (props: MarketingCar
}
}, [id])
const fetchData = async (params: GetMarketingPlatformActivityListAdornRequest) => {
const fetchData = async (params: GetMarketingAdornActivityGoodsAdornRequest) => {
const common = {
...params,
shopId
};
const isWithActivityType = actType ? { ...common, activityType: actType } : common;
return await PublicApi.getMarketingAdornListAdorn(isWithActivityType as any);
return await PublicApi.getMarketingAdornMerchantActivityListAdorn(isWithActivityType as any);
};
const onOk = (data: any) => {
......@@ -61,42 +60,43 @@ const MarketingCardGood: React.FC<MarketingCardGoodProps> = (props: MarketingCar
let _exData;
switch (actType) {
case 1:
_exData = { ..._data, img: _data.productImgUrl, originalPrice: priceFormat(_data.price), discountPrice: priceFormat(_data.activityPrice), isnull: false }
_exData = { ..._data, name: _data.productName, img: _data.productImgUrl, originalPrice: priceFormat(_data.price), discountPrice: priceFormat(_data.activityPrice), isnull: false }
break;
case 2:
_exData = { ..._data, img: _data.productImgUrl, info: '直降60元', originalPrice: priceFormat(_data.price), discountPrice: priceFormat(_data.activityPrice), isnull: false }
_exData = { ..._data, name: _data.productName, img: _data.productImgUrl, info: '直降60元', originalPrice: priceFormat(_data.price), discountPrice: priceFormat(_data.activityPrice), isnull: false }
break;
case 3:
_exData = { ..._data, img: _data.productImgUrl, info: '5折起', originalPrice: priceFormat(_data.price), discountPrice: priceFormat(_data.activityPrice), isnull: false }
_exData = { ..._data, name: _data.productName, img: _data.productImgUrl, info: '5折起', originalPrice: priceFormat(_data.price), discountPrice: priceFormat(_data.activityPrice), isnull: false }
break;
case 4:
if (exType === 1) {
_exData = { ..._data, img: _data.productImgUrl, info: '满3件减50', originalPrice: priceFormat(_data.price), discountPrice: priceFormat(_data.activityPrice), isnull: false }
_exData = { ..._data, name: _data.productName, img: _data.productImgUrl, info: '满3件减50', originalPrice: priceFormat(_data.price), discountPrice: priceFormat(_data.activityPrice), isnull: false }
} else {
_exData = { ..._data, img: _data.productImgUrl, info: '满3件8折', discountPrice: priceFormat(_data.activityPrice), isnull: false }
_exData = { ..._data, name: _data.productName, img: _data.productImgUrl, info: '满3件8折', discountPrice: priceFormat(_data.activityPrice), isnull: false }
}
break;
case 5:
if (exType === 1) {
_exData = { ..._data, img: _data.productImgUrl, info: '满100减10', originalPrice: priceFormat(_data.price), discountPrice: priceFormat(_data.activityPrice), isnull: false }
_exData = { ..._data, name: _data.productName, img: _data.productImgUrl, info: '满100减10', originalPrice: priceFormat(_data.price), discountPrice: priceFormat(_data.activityPrice), isnull: false }
} else {
_exData = { ..._data, img: _data.productImgUrl, info: '满100打5折', originalPrice: priceFormat(_data.price), discountPrice: priceFormat(_data.activityPrice), isnull: false }
_exData = { ..._data, name: _data.productName, img: _data.productImgUrl, info: '满100打5折', originalPrice: priceFormat(_data.price), discountPrice: priceFormat(_data.activityPrice), isnull: false }
}
break;
case 6:
_exData = { ..._data, img: _data.productImgUrl, info: `原价${_data.price}元`, isnull: false }
_exData = { ..._data, name: _data.productName, img: _data.productImgUrl, info: `原价${_data.price}元`, isnull: false }
break;
case 7:
_exData = { ..._data, img: _data.productImgUrl, info: `第2件5折`, originalPrice: priceFormat(_data.price), discountPrice: priceFormat(_data.activityPrice), isnull: false }
_exData = { ..._data, name: _data.productName, img: _data.productImgUrl, info: `第2件5折`, originalPrice: priceFormat(_data.price), discountPrice: priceFormat(_data.activityPrice), isnull: false }
break;
case 8:
_exData = { ..._data, img: _data.productImgUrl, info: `99元4件`, discountPrice: priceFormat(_data.activityPrice), isnull: false }
_exData = { ..._data, name: _data.productName, img: _data.productImgUrl, info: `99元4件`, discountPrice: priceFormat(_data.activityPrice), isnull: false }
break;
case 9:
_exData = {
..._data,
detail: {
title: _data.productName,
name: _data.productName,
img: _data.productImgUrl,
info: '打骨折',
originalPrice: priceFormat(_data.price),
......@@ -109,21 +109,22 @@ const MarketingCardGood: React.FC<MarketingCardGoodProps> = (props: MarketingCar
}
break;
case 11:
_exData = { ..._data, img: _data.productImgUrl, info: `已送出 186 件`, discountPrice: priceFormat(_data.activityPrice), isnull: false }
_exData = { ..._data, name: _data.productName, img: _data.productImgUrl, info: `已送出 186 件`, discountPrice: priceFormat(_data.activityPrice), isnull: false }
break;
case 12:
_exData = { ..._data, img: _data.productImgUrl, direction: 'column', originalPrice: priceFormat(_data.price), discountPrice: priceFormat(_data.activityPrice), isnull: false }
_exData = { ..._data, name: _data.productName, img: _data.productImgUrl, direction: 'column', originalPrice: priceFormat(_data.price), discountPrice: priceFormat(_data.activityPrice), isnull: false }
break;
case 13:
_exData = { ..._data, img: _data.productImgUrl, info: `加20元换购`, isnull: false }
_exData = { ..._data, name: _data.productName, img: _data.productImgUrl, info: `加20元换购`, isnull: false }
break;
case 14:
_exData = { ..._data, img: _data.productImgUrl, info: `10元抵100`, originalPrice: priceFormat(_data.price), discountPrice: priceFormat(_data.activityPrice), isnull: false }
_exData = { ..._data, name: _data.productName, img: _data.productImgUrl, info: `10元抵100`, originalPrice: priceFormat(_data.price), discountPrice: priceFormat(_data.activityPrice), isnull: false }
break;
case 15:
_exData = {
..._data,
detail: {
name: _data.productName,
img: _data.productImgUrl,
title: _data.productName,
discountPrice: priceFormat(_data.price),
......@@ -134,11 +135,12 @@ const MarketingCardGood: React.FC<MarketingCardGoodProps> = (props: MarketingCar
}
break;
case 16:
_exData = { ..._data, img: _data.productImgUrl, info: `已送出 186 件`, originalPrice: priceFormat(_data.price), discountPrice: priceFormat(_data.activityPrice), isnull: false }
_exData = { ..._data, name: _data.productName, img: _data.productImgUrl, info: `已送出 186 件`, originalPrice: priceFormat(_data.price), discountPrice: priceFormat(_data.activityPrice), isnull: false }
break;
default:
break;
}
_exData.mode ='horizontal'
if (actType !== 15) {
changeProps({
title: _data.productName,
......@@ -177,6 +179,7 @@ const MarketingCardGood: React.FC<MarketingCardGoodProps> = (props: MarketingCar
componentName: 'MarketingCard.GoodsItem',
props: {
...child,
name: child.productName,
img: child.productImgUrl,
title: child.productName,
discountPrice: priceFormat(child.price),
......
......@@ -6,10 +6,8 @@
* @Description: In User Settings Edit
* @FilePath: /lingxi-business-paltform/src/pages/mobileTemplate/channelTemplateEdit/config.ts
*/
import { PROPS_SETTING_TYPES, PageConfigType } from '@lingxi-disign/core'
import { PageConfigType } from '@lingxi-disign/core'
import categoryNavTemplateDefault from '../shopTemplateEdit/img/category_template_default.png'
import styleThemeImgDefault from './imgs/style_theme_default.png'
import styleThemeImgScience from './imgs/style_theme_science.png'
import RED_PACKAGE from '../shopTemplateEdit/img/red_package.png';
export const defaultHeaderNavData = [
......@@ -194,190 +192,3 @@ export const defaultConfig: PageConfigType = {
},
},
}
export const mallLayoutConfig = {
key: "0",
"0": {
"componentName": "MallLayout",
"props": {
"style": {
"width": "100%",
"minHeight": "100%",
"background": "#F7F8FA",
"overflowX": "hidden",
"paddingBottom": "50px",
}
},
"childNodes": ["1", "2", "4", "5", "6", "7"]
},
}
export const mobileChannelHeaderNav = {
key: "1",
"1": {
"componentName": "MobileChannelHeaderNav",
"componentType": PROPS_SETTING_TYPES.mobileHeaderNav,
"title": "顶部导航栏",
"canEdit": true,
"canHide": false,
"props": {
styleTheme: 1,
dataList: [
{
name: "进货单",
content: "",
status: true,
},
{
name: "我的",
content: "",
status: true,
},
{
name: "搜索框",
content: "请输入商品名称或者品类",
status: true,
}
],
stylesThemeList: [
{
key: 0,
img: styleThemeImgDefault,
},
{
key: 1,
img: styleThemeImgScience,
}
]
},
}
}
export const divWrap = {
key: "2",
"2": {
"componentName": "div",
"props": {
"style": {
position: "relative",
marginTop: -48,
zIndex: 6,
}
},
"childNodes": ["3"]
}
}
export const mobileBanner = {
key: "3",
"3": {
"componentName": "MobileChannelBanner",
"componentType": "mobileChannelBanner",
"title": "轮播广告",
"canEdit": true,
"canHide": false,
"props": {
dataList: []
}
}
}
export const mobileChannelCategory = {
key: "4",
"4": {
"componentName": "MobileChannelCategory",
"componentType": PROPS_SETTING_TYPES.moibileChannelCategory,
"title": "商品品类",
"canEdit": false,
"canHide": false,
"props": {
dataList: []
}
}
}
export const mobileChannelGoodsCard = {
key: "5",
"5": {
"componentName": "MobileChannelGoodsCard",
"componentType": PROPS_SETTING_TYPES.mobileChannelGoodsCard,
"title": "推荐商品",
"canEdit": true,
"canHide": false,
"props": {
dataList: [
// {
// style: 0,
// title: "电气电工",
// viceTitle: "ELECTRICAL",
// },
// {
// style: 1,
// title: "机械设备",
// viceTitle: "EQUIPMENT",
// }
]
}
}
}
export const mobileChannelInformation = {
key: "6",
"6": {
"componentName": "MobileChannelInformation",
"componentType": PROPS_SETTING_TYPES.moibileChannelInformation,
"title": "行业资讯",
"canEdit": true,
"canHide": false,
"props": {
title: "行业资讯",
dataList: []
}
}
}
export const mobileBottomNavigation = {
key: "7",
"7": {
"componentName": "MobileBottomNavigation",
"componentType": PROPS_SETTING_TYPES.mobileBottomNavigation,
"title": "底部导航",
"canEdit": true,
"canHide": false,
"props": {
/** 类型:1-首页 2-积分 3-工作台 4-资讯 5-进货单 6-我的 */
dataList: [
{
name: "首页",
icon: "https://shushangyun-lingxi.oss-cn-shenzhen.aliyuncs.com/f8d1c35d735e47c187d8c0b0e12830971612351028389.png",
type: 1,
status: false,
},
{
name: "积分",
icon: "https://shushangyun-lingxi.oss-cn-shenzhen.aliyuncs.com/d4b7e96e136e4a2eade7e0d3e441eb611612351032370.png",
type: 2,
status: false,
},
{
name: "工作台",
icon: "https://shushangyun-lingxi.oss-cn-shenzhen.aliyuncs.com/f8492d51f9234c43bf631e9f2482a6751612351036609.png",
type: 3,
status: false,
},
{
name: "进货单",
icon: "https://shushangyun-lingxi.oss-cn-shenzhen.aliyuncs.com/50433de84ee046b19882e21c920b3f6b1612351040608.png",
type: 5,
status: false,
},
{
name: "我的",
icon: "https://shushangyun-lingxi.oss-cn-shenzhen.aliyuncs.com/aa76edefd91f4e82b4f8fa56e169cd3f1612351044724.png",
type: 6,
status: false,
}
]
}
}
}
......@@ -19,7 +19,7 @@ import { buildColumns, expertColumns, initConditionData, selectExpertColumns, se
import { selectBidSchema } from './schema/modal'
import { formatTimeString, omit } from '@/utils'
import DateRangePickerUnix from '@/components/NiceForm/components/DateRangePickerUnix'
import { BidInsideWorkState, BidOuterWorkState } from '@/constants/procurement'
import { ExpertTypeMap, SpecialityTypeMap } from '@/constants/procurement'
export interface AddRemarkBidCommitteeProps {}
......@@ -41,18 +41,16 @@ const AddRemarkBidCommittee:React.FC<AddRemarkBidCommitteeProps> = (props) => {
const [conditionVisible, setConditionVisible] = useState(false)
const [expertVisible, setExpertVisible] = useState(false)
const [previewVisible, setPreviewVisible] = useState(false) // 查看评标专家弹框
const [preViewRow, setPreviewRow] = useState<any>({})
const [selectRow, setSelectRow] = useState<any[]>([]) // 选择评标项目抽屉的行数据
const [selectedRowKeys, setSelectedRowKeys] = useState<Array<string>>([])
const [selectExpertRow, setSelectExpertRow] = useState<any[]>([]) // 选择评标专家抽屉的行数据
const [selectedExpertRowKeys, setSelectedExpertRowKeys] = useState<Array<string>>([])
const productRef = useRef<any>({})
const {
id,
code,
preview,
pageStatus
} = usePageStatus()
......@@ -118,17 +116,24 @@ const AddRemarkBidCommittee:React.FC<AddRemarkBidCommitteeProps> = (props) => {
dataIndex: 'ctl',
title: '操作',
align: 'center',
render: (t, r) => pageStatus !== PageStatus.PREVIEW && <>
<Button type="link">
render: (t, r) => pageStatus !== PageStatus.PREVIEW ? <>
<Button type="link" onClick={() => handlePreview(r)}>
查看
</Button>
<Button type="link" onClick={() => removeExpert(r)}>
删除
</Button>
</>
</> : <Button type="link" onClick={() => handlePreview(r)}>
查看
</Button>
}
])
const handlePreview = (record) => {
setPreviewRow({...record})
setPreviewVisible(true)
}
const removeExpert = (record) => {
const hasExpertList = addSchemaAction.getFieldValue('expertExtractRecordList')
const temp = hasExpertList.filter(item => item.expert.id !== record.expert.id)
......@@ -248,7 +253,6 @@ const AddRemarkBidCommittee:React.FC<AddRemarkBidCommitteeProps> = (props) => {
const onConfirm = () => {
setProjectVisible(false)
console.log('确定', selectRow)
addSchemaAction.setFieldValue('inviteTender', { id: selectRow[0]['id'] })
addSchemaAction.setFieldValue('status', selectRow[0]['inviteTenderInStatusValue'])
addSchemaAction.setFieldValue('code', selectRow[0]['code'])
......@@ -260,7 +264,6 @@ const AddRemarkBidCommittee:React.FC<AddRemarkBidCommitteeProps> = (props) => {
const onExpertConfirm = () => {
setExpertVisible(false)
console.log('确定', selectExpertRow)
addSchemaAction.setFieldValue('expertExtractRecordList', transformSelectExpertField(selectExpertRow))
}
......@@ -292,7 +295,6 @@ const AddRemarkBidCommittee:React.FC<AddRemarkBidCommitteeProps> = (props) => {
}
const cancelCondition = () => {
console.log('取消组件条件')
setConditionVisible(false)
}
......@@ -440,43 +442,39 @@ const AddRemarkBidCommittee:React.FC<AddRemarkBidCommitteeProps> = (props) => {
>
<Row className='card-list'>
<Col span={6} className='card-list_title'>评标专家编号:</Col>
<Col>基本信息</Col>
<Col>{preViewRow?.id}</Col>
</Row>
<Row className='card-list'>
<Col span={6} className='card-list_title'>专家专业类别:</Col>
<Col>基本信息</Col>
<Col>{preViewRow?.expert?.speciality ? SpecialityTypeMap[preViewRow.expert.speciality] : null}</Col>
</Row>
<Row className='card-list'>
<Col span={6} className='card-list_title'>专家资格证书:</Col>
<Col>基本信息</Col>
<Col>{preViewRow?.expert?.qualification}</Col>
</Row>
<Row className='card-list'>
<Col span={6} className='card-list_title'>专家专家职称:</Col>
<Col>{preViewRow?.expert?.title}</Col>
</Row>
<Row className='card-list'>
<Col span={6} className='card-list_title'>从事年限:</Col>
<Col>基本信息</Col>
<Col>{preViewRow?.expert?.years}</Col>
</Row>
<Row className='card-list'>
<Col span={6} className='card-list_title'>所属行业:</Col>
<Col>基本信息</Col>
<Col>{preViewRow?.expert?.trade}</Col>
</Row>
<Row className='card-list'>
<Col span={6} className='card-list_title'>所在地区:</Col>
<Col>基本信息</Col>
<Col>{`${preViewRow?.expert?.provinceName}/${preViewRow?.expert?.cityName}/${preViewRow?.expert?.areaName}`}</Col>
</Row>
<Row className='card-list'>
<Col span={6} className='card-list_title'>工作单位:</Col>
<Col>基本信息</Col>
<Col>{preViewRow?.expert?.unit}</Col>
</Row>
<Row className='card-list'>
<Col span={6} className='card-list_title'>专家类型:</Col>
<Col>基本信息</Col>
</Row>
<Row className='card-list'>
<Col span={6} className='card-list_title'>状态:</Col>
<Col>基本信息</Col>
</Row>
<Row className='card-list'>
<Col span={6} className='card-list_title'>拒绝原因:</Col>
<Col>基本信息</Col>
<Col>{preViewRow?.expert?.type ? ExpertTypeMap[preViewRow.expert.type] : null}</Col>
</Row>
</Drawer>
......
import React, { useRef, useEffect, useState, useContext } from 'react'
import { Button, Table } from 'antd'
import { StandardTable } from 'god'
import { formatTimeString } from '@/utils'
import './index.less'
import cx from 'classnames'
import { ReadyAddOrderDetailContext } from '../../context'
import StatusColors from '../StatusColors'
export interface CirculationRecordProps {}
/**
* 流转记录控制
*/
const outOrderCols: any[] = [
{
title: '流转顺序号',
dataIndex: 'no',
align: 'center',
key: 'no',
render: (_, __, index: number) => index + 1
},
{
title: '操作角色',
dataIndex: 'roleName',
align: 'center',
key: 'roleName',
},
{
title: '状态',
dataIndex: 'state',
align: 'center',
key: 'state',
render: text => <StatusColors status={text} type='out'/>
// @todo 需传递工作流状态重新render
},
{
title: '操作',
dataIndex: 'operation',
align: 'center',
key: 'operation',
},
{
title: '操作时间',
dataIndex: 'operationTime',
align: 'center',
key: 'operationTime',
render: time => formatTimeString(time)
},
{
title: '审核意见',
dataIndex: 'auditOpinion',
align: 'center',
key: 'auditOpinion',
},
]
const sideOrderCols: any[] = [
{
title: '流转记录',
dataIndex: 'no',
align: 'center',
key: 'no',
render: (_, __, index: number) => index + 1
},
{
title: '操作人',
dataIndex: 'roleName',
align: 'center',
key: 'roleName',
},
{
title: '部门',
dataIndex: 'department',
align: 'center',
key: 'department',
},
{
title: '职位',
dataIndex: 'position',
align: 'center',
key: 'position',
},
{
title: '状态',
dataIndex: 'state',
align: 'center',
key: 'state',
render: text => <StatusColors status={text} type='inside'/>
},
{
title: '操作',
dataIndex: 'operation',
align: 'center',
key: 'operation',
},
{
title: '操作时间',
dataIndex: 'operationTime',
align: 'center',
key: 'operationTime',
},
{
title: '审核意见',
dataIndex: 'auditOpinion',
align: 'center',
key: 'auditOpinion',
},
]
const CirculationRecord:React.FC<CirculationRecordProps> = (props) => {
const colRef = useRef<any>({
columns: outOrderCols
})
const { detailData } = useContext(ReadyAddOrderDetailContext)
const [orderState, setOrderState] = useState<number>(0)
const [dataSource, setDataSource] = useState<any>([])
useEffect(() => {
if (detailData) {
colRef.current = {
columns: orderState === 1 ? sideOrderCols : outOrderCols
}
setDataSource(orderState === 1 ? detailData.interiorProcurementOrderLogResponses : detailData.externalProcurementOrderLogResponses)
}
}, [colRef, orderState, detailData])
return (
<div>
<div className='com-switch-btn-group' style={{margin: '20px 0'}}>
<div className={cx('switch-btn', orderState === 0 ? 'active' : '')} onClick={() => setOrderState(0)}>外部单据</div>
<div className={cx('switch-btn', orderState === 1 ? 'active' : '')} onClick={() => setOrderState(1)}>内部单据</div>
</div>
<Table
columns={colRef.current.columns}
dataSource={dataSource}
rowKey="id"
/>
</div>
)
}
CirculationRecord.defaultProps = {}
export default CirculationRecord
\ No newline at end of file
import React, { useRef, useEffect, useState, useContext } from 'react'
import { Button, Table } from 'antd'
import { StandardTable } from 'god'
import { formatTimeString } from '@/utils'
import './index.less'
import cx from 'classnames'
import { ReadyAddOrderDetailContext } from '../../context'
import StatusColors from '../statusColors'
export interface CirculationRecordProps {}
/**
* 流转记录控制
*/
const outOrderCols: any[] = [
{
title: '流转顺序号',
dataIndex: 'no',
align: 'center',
key: 'no',
render: (_, __, index: number) => index + 1
},
{
title: '操作角色',
dataIndex: 'roleName',
align: 'center',
key: 'roleName',
},
{
title: '状态',
dataIndex: 'state',
align: 'center',
key: 'state',
render: text => <StatusColors status={text} type='out'/>
// @todo 需传递工作流状态重新render
},
{
title: '操作',
dataIndex: 'operation',
align: 'center',
key: 'operation',
},
{
title: '操作时间',
dataIndex: 'operationTime',
align: 'center',
key: 'operationTime',
render: time => formatTimeString(time)
},
{
title: '审核意见',
dataIndex: 'auditOpinion',
align: 'center',
key: 'auditOpinion',
},
]
const sideOrderCols: any[] = [
{
title: '流转记录',
dataIndex: 'no',
align: 'center',
key: 'no',
render: (_, __, index: number) => index + 1
},
{
title: '操作人',
dataIndex: 'roleName',
align: 'center',
key: 'roleName',
},
{
title: '部门',
dataIndex: 'department',
align: 'center',
key: 'department',
},
{
title: '职位',
dataIndex: 'position',
align: 'center',
key: 'position',
},
{
title: '状态',
dataIndex: 'state',
align: 'center',
key: 'state',
render: text => <StatusColors status={text} type='inside'/>
},
{
title: '操作',
dataIndex: 'operation',
align: 'center',
key: 'operation',
},
{
title: '操作时间',
dataIndex: 'operationTime',
align: 'center',
key: 'operationTime',
},
{
title: '审核意见',
dataIndex: 'auditOpinion',
align: 'center',
key: 'auditOpinion',
},
]
const CirculationRecord:React.FC<CirculationRecordProps> = (props) => {
const colRef = useRef<any>({
columns: outOrderCols
})
const { detailData } = useContext(ReadyAddOrderDetailContext)
const [orderState, setOrderState] = useState<number>(0)
const [dataSource, setDataSource] = useState<any>([])
useEffect(() => {
if (detailData) {
colRef.current = {
columns: orderState === 1 ? sideOrderCols : outOrderCols
}
setDataSource(orderState === 1 ? detailData.interiorProcurementOrderLogResponses : detailData.externalProcurementOrderLogResponses)
}
}, [colRef, orderState, detailData])
return (
<div>
<div className='com-switch-btn-group' style={{margin: '20px 0'}}>
<div className={cx('switch-btn', orderState === 0 ? 'active' : '')} onClick={() => setOrderState(0)}>外部单据</div>
<div className={cx('switch-btn', orderState === 1 ? 'active' : '')} onClick={() => setOrderState(1)}>内部单据</div>
</div>
<Table
columns={colRef.current.columns}
dataSource={dataSource}
rowKey="id"
/>
</div>
)
}
CirculationRecord.defaultProps = {}
export default CirculationRecord
import React from 'react'
import { Tag } from 'antd'
export interface IStatusColor {
[key: string]: {
value: string | number,
color: string
}
}
// 用于标签状态控制
export interface StatusColorsProps {
status: number,
text?: string,
type: 'out' | 'inside' | 'saleInside'
}
export enum ORDER_EXAMINE_ENUM {
/**
* 新增订单
*/
ADD_ORDER = 1,
/**
* 一级审核
*/
ONE_LEVEL_VALIDATE,
/**
* 二级审核
*/
TWO_LEVEL_VALIDATE,
/**
* 提交订单中
*/
SUBMIT_ORDER_PROCESS,
/**
* 提交订单成功
*/
SUBMIT_ORDER_SUCCESS,
/**
* 一级审核失败
*/
ONE_LEVEL_VALIDATE_ERROR,
/**
* 二级审核失败
*/
TWO_LEVEL_VALIDATE_ERROR
}
export const ORDER_EXAMINE_LIST = ['',
'新增订单',
'一级审核中',
'二级审核中',
'提交订单',
'提交成功',
'一级审核不通过',
'二级审核不通过'
]
// 状态颜色映射
export const StatusColorsMaps = {
ready: '#C0C4CC',
process: '#FFC400',
submit: '#6C9CEB',
success: '#41CC9E',
error: '#EF6260'
}
const matchStatusColor = (status: number): string => {
const maps = {
[ORDER_EXAMINE_ENUM.ADD_ORDER]: StatusColorsMaps.ready,
[ORDER_EXAMINE_ENUM.ONE_LEVEL_VALIDATE]: StatusColorsMaps.process,
[ORDER_EXAMINE_ENUM.TWO_LEVEL_VALIDATE]: StatusColorsMaps.process,
[ORDER_EXAMINE_ENUM.SUBMIT_ORDER_PROCESS]: StatusColorsMaps.submit,
[ORDER_EXAMINE_ENUM.SUBMIT_ORDER_SUCCESS]: StatusColorsMaps.success
}
// 默认返回错误的状态颜色
return maps[status] || StatusColorsMaps.error
}
// 订单内部状态显示
const StatusColors: React.FC<StatusColorsProps> = (props) => {
const { status, type, text = null } = props
const statusShowColor = matchStatusColor(status)
// 优先显示 后端返回的状态文本
return (<Tag color={statusShowColor}>{ text }</Tag>)
}
StatusColors.defaultProps = {}
export default StatusColors
import React from 'react'
import { history } from 'umi'
import { formatTimeString } from '@/utils'
import StatusColors from '../components/StatusColors'
import StatusColors from '../components/statusColors'
import EyePreview from '@/components/EyePreview'
export const baseOrderListColumns: any = () => {
......
......@@ -50,6 +50,8 @@ const InquiryModalTable:React.FC<InquiryModalTableProps> = (props) => {
let newData = data.map((v: any) => {
v.memberId = item.offerMemberId
v.memberRoleId = item.offerMemberRoleId
v.orderMode = schemaAction.getFieldValue('orderMode')
v.shopId = schemaAction.getFieldValue('shopId')
return v
})
......
......@@ -70,6 +70,9 @@ export const procurementRenderField = (data) => {
memberRoleId: data.vendorRoleId,
// 冗余运费
freight: data.product.freight,
// 冗余shopId orderMode查询支付方式使用
shopId: data.shopId,
orderMode: data.orderMode,
}
})
}
......@@ -84,8 +87,9 @@ export const procurementProcessField = (value) => {
name: item.productName,
logo: item.imgUrl,
quantity: item.purchaseCount,
logisticTemplateId: item.logistics.templateId,
logisticsTemplateId: item.logistics.templateId,
weight: item.logistics.weight,
stockId: item.upperCommoditySkuId,
}
})
return value
......
......@@ -3,7 +3,6 @@ import { usePageStatus, PageStatus } from '@/hooks/usePageStatus';
import { useLinkageUtils } from '@/utils/formEffectUtils';
import { fetchOrderApi } from '../apis';
import { PublicApi } from '@/services/api';
import moment from 'moment';
// 异步填充表格字段
......@@ -18,39 +17,20 @@ const asyncPadDataForProduct = async (ctx: ISchemaFormActions | ISchemaFormAsync
ctx.setFieldState(productValue.path, state => {
state.loading = true
})
// // 折扣请求
// const asyncPriceRequests: any[] = await Promise.all(productData.filter(v => v.memberPrice === undefined).map(async v => {
// const {code, data} = await PublicApi.getMemberManageUpperCreditParamGet({
// parentMemberId: v.memberId,
// parentMemberRoleId: v.memberRoleId
// }, {ttl: 60 * 1000, useCache: true})
// return code === 1000 ? { value: data.parameter, id: v.id } : { value: '', id: 0 }
// }
// ))
// // 存在需要异步请求的, 则进行赋值
// if (asyncPriceRequests.length > 0) {
const newData = productData.map((v, i) => {
// if (!v.memberPrice) {
// v.memberPrice = asyncPriceRequests.find(j => j.id === v.id)?.value || ''
// }
// // @ b2b订单不考虑会员折扣 字段固定100
v.discount = 100
return v
})
ctx.setFieldValue('products', newData)
// }
const newData = productData.map((v, i) => {
//@ b2b订单不考虑会员折扣 字段固定100
v.discount = 100
return v
})
ctx.setFieldValue('products', newData)
ctx.setFieldState(productValue.path, state => {
state.loading = false
})
}
export const createEffects = context => () => {
}
export const useModelTypeChange = (callback) => {
const utils = useLinkageUtils()
// 下单模式发生改变时
FormEffectHooks.onFieldValueChange$('orderMode').subscribe(state => {
callback(state)
......@@ -83,39 +63,37 @@ export const useProductTableChangeForPay = (ctx: ISchemaFormActions | ISchemaFor
if (value && value.length > 0 && !state.loading){ // 添加loading判断避免二次调用
// 请求一次并复制给支付信息
const productItem = value[0]
if(pageStatus === PageStatus.EDIT) { // 编辑下 支付信息联动实现
} else if(pageStatus === PageStatus.ADD) { // 新增下 需要支付信息生成支付次数
const shopId = ctx.getFieldValue('shopId')
const products = value.map(item => ({ productId: item.commodityId, skuId: item.productId }))
if(shopId && products?.length) {
// 判断不存在物流 隐藏交付地址
if(!value.some(item => item.logistics.deliveryType === 1)) {
ctx.setFieldState('deliveryAddresId', state => state.visible = false )
} else {
ctx.setFieldState('deliveryAddresId', state => state.visible = true )
if(pageStatus === PageStatus.ADD) { // 新增下 需要支付信息生成支付次数
const shopId = ctx.getFieldValue('shopId')
const products = value.map(item => ({ productId: item.commodityId, skuId: item.productId }))
if(shopId && products?.length) {
// 判断不存在物流 隐藏交付地址
if(!value.some(item => item.logistics.deliveryType === 1)) {
ctx.setFieldState('deliveryAddresId', state => state.visible = false )
} else {
ctx.setFieldState('deliveryAddresId', state => state.visible = true )
}
fetchOrderApi.getPayInfoList({
products: products,
memberId: productItem?.memberId,
roleId: productItem?.memberRoleId,
orderMode: orderMode,
shopId: shopId
}).then(data => {
ctx.setFieldValue('payments', data.map(item => ({
...item,
payPrice: (sumPrice * Number(item.payRate) / 100).toFixed(2)
})))
}).catch(err => { })
}
fetchOrderApi.getPayInfoList({
products: products,
memberId: productItem?.memberId,
roleId: productItem?.memberRoleId,
orderMode: orderMode,
shopId: shopId
}).then(data => {
ctx.setFieldValue('payments', data.map(item => ({
...item,
payPrice: (sumPrice * Number(item.payRate) / 100).toFixed(2)
})))
}).catch(err => {
})
}
}
}
// 确认后 需根据商品id请求会员折扣接口, 以及配送方式
// 由于商品存在多个, 需对接口做一定缓存
asyncPadDataForProduct(ctx, state)
const numberInputs = document.getElementsByClassName("purchase_amount_input")
if(numberInputs?.length) {
for(let i = 0; i < numberInputs.length; i++) {
......@@ -132,17 +110,14 @@ export const useOrderFormInitEffect = (ctx: ISchemaFormActions | ISchemaFormAsyn
// 写入收货地址数据
useProductAddress(ctx)
})
FormEffectHooks.onFieldValueChange$('hasInvoice').subscribe(state => {
if (state.value) {
useInvoiceList(ctx)
}
})
}
export const useProductAddress = (ctx: ISchemaFormActions | ISchemaFormAsyncActions) => {
fetchOrderApi.getProductAddressAll().then(data => {
ctx.setFieldState('deliveryAddresId', state => {
if (data.length > 0 && !state.value) {
......@@ -169,62 +144,6 @@ export const useInvoiceList = (ctx: ISchemaFormActions | ISchemaFormAsyncActions
})
}
// 编辑订单 地址和发票变动 触发订单更新
export const useOrderUpdateChangeOther = (ctx: ISchemaFormActions | ISchemaFormAsyncActions) => {
const { pageStatus, id } = usePageStatus()
FormEffectHooks.onFieldValueChange$('theInvoiceId').subscribe(state => {
const { value, path } = state
if(pageStatus === PageStatus.EDIT){
if(state?.dataSource?.length && state.loading && state.props["x-component-props"].times > 2) {
ctx.submit((values) => {
if(values){
PublicApi.postOrderProcurementOrderUpdate({
...values,
deliveryTime: moment(values.deliveryTime).valueOf(),
theInvoiceId: value?.id || null,
hasInvoice: values.hasInvoice,
deliveryAddresId: values.deliveryAddresId,
id,
}, { ctlType: "none" })
}
})
} else {
ctx.setFieldState(path, _state => {
_state.loading = true
_state.props["x-component-props"].times++
})
}
}
})
FormEffectHooks.onFieldValueChange$('deliveryAddresId').subscribe(state => {
const { value, path } = state
if(pageStatus === PageStatus.EDIT){
if(state?.dataSource?.length && state.loading && state.props["x-component-props"].times > 2) {
ctx.submit((values) => {
if(values){
PublicApi.postOrderProcurementOrderUpdate({
...values,
deliveryTime: moment(values.deliveryTime).valueOf(),
theInvoiceId: values.theInvoiceId,
hasInvoice: values.hasInvoice,
deliveryAddresId: value?.id ? value.id : value,
id,
}, { ctlType: "none" })
}
})
} else {
ctx.setFieldState(path, _state => {
_state.loading = true
_state.props["x-component-props"].times++
})
}
}
})
}
// 高级筛选schema中用于输入搜索商品品类的Effect
/**
* @param ctx 外部表单action
......
......@@ -8,7 +8,7 @@ import { createFormActions, registerVirtualBox, useFormSpy } from '@formily/antd
import { SaveOutlined, LinkOutlined, PlusOutlined } from '@ant-design/icons'
import NiceForm from '@/components/NiceForm'
import { mergeAllSchemas } from './schema'
import { useModelTypeChange, useEditHideField, useOrderFormInitEffect, useProductTableChangeForPay, useOrderUpdateChangeOther } from './effects'
import { useModelTypeChange, useEditHideField, useOrderFormInitEffect, useProductTableChangeForPay } from './effects'
import { orderCombination, orderTypeLabelMap, procurementProcessField, procurementRenderField, procurmentRenderInit } from './constant'
import { OrderModalType } from '@/constants/order'
import ProductModalTable from './components/productModalTable'
......@@ -83,18 +83,10 @@ export const MoneyTotalBox = registerVirtualBox('moneyTotalBox', props => {
if (logsiticsDataMaps.length > 0) {
PublicApi.postLogisticsFreightTemplateCalFreightPrice({
orderProductList: pageStatus === PageStatus.ADD
?
logsiticsDataMaps.map(v => ({
templateId: v.logistics.templateId,
weight: v.logistics.weight,
orderProductList: logsiticsDataMaps.map(v => ({
templateId: v.logistics.templateId || v.logisticsTemplateId,
weight: v.logistics.weight || v.weight,
count: v?.purchaseCount || 0
}))
:
logsiticsDataMaps.map(v => ({
templateId: v.logisticTemplateId,
weight: v.weight,
count: v.purchaseCount
})),
receiverAddressId: typeof receiverAddressId === 'object' ? receiverAddressId.id : receiverAddressId
}, {ttl: 10 * 1000, useCache: true, ctlType: 'none'}).then(res => {
......@@ -147,8 +139,6 @@ const PurchaseOrderDetail:React.FC<PurchaseOrderDetailProps> = (props) => {
const [products, setProducts] = useState<any>([])
const [paymentColumns, paymentComponents, paymentSave] = usePaymentInfo(
addSchemaAction,
addSchemaAction.getFieldValue('vendorMemberId'),
addSchemaAction.getFieldValue('vendorRoleId'),
pageStatus === PageStatus.ADD ? addSchemaAction.getFieldValue('products') : products
)
// 订单商品
......@@ -332,7 +322,7 @@ const PurchaseOrderDetail:React.FC<PurchaseOrderDetailProps> = (props) => {
memberRef.current.setVisible(true)
}
const orderNoPrice = pageStatus !== PageStatus.PREVIEW && <div className='connectBtn' onClick={handleOrderNo}><LinkOutlined style={{marginRight: 4}}/>选择</div>
const orderNoPrice = pageStatus === PageStatus.ADD && <div className='connectBtn' onClick={handleOrderNo}><LinkOutlined style={{marginRight: 4}}/>选择</div>
const orderMember = pageStatus !== PageStatus.PREVIEW && <div className='connectBtn' onClick={handleOrderMember}><LinkOutlined style={{marginRight: 4}}/>选择</div>
// @todo 未实现金额合计
......@@ -388,28 +378,6 @@ const PurchaseOrderDetail:React.FC<PurchaseOrderDetailProps> = (props) => {
]}
>
<ReadyAddOrderDetailContext.Provider value={providerValue}>
{/* { pageStatus !== PageStatus.ADD && initFormValue && initFormValue.externalWorkflowFlowRecordLogResponses && <AuditProcess
customTitleKey='operationalProcess'
customKey='state'
outerVerifyCurrent={findLastIndexFlowState(initFormValue.externalWorkflowFlowRecordLogResponses)}
innerVerifyCurrent={findLastIndexFlowState(initFormValue.interiorWorkflowFlowRecordLogResponses)}
outerVerifySteps={
initFormValue.externalWorkflowFlowRecordLogResponses ?
initFormValue.externalWorkflowFlowRecordLogResponses.map(item => ({
...item,
status: item.isExecute ? 'finish' : 'wait',
})) :
[]
}
innerVerifySteps={
initFormValue.interiorWorkflowFlowRecordLogResponses ?
initFormValue.interiorWorkflowFlowRecordLogResponses.map(item => ({
...item,
status: item.isExecute ? 'finish' : 'wait',
})) :
[]
}
></AuditProcess> } */}
<Card className={styles.orderCollectCard} style={{marginTop: 24}}>
<NiceForm
loading={formLoading}
......@@ -431,6 +399,11 @@ const PurchaseOrderDetail:React.FC<PurchaseOrderDetailProps> = (props) => {
state.editable = false
})
}
if (id) {
ctx.setFieldState('shopId', state => {
state.editable = false
})
}
})
$('onFieldInputChange', 'orderMode').subscribe(state => {
const { value } = state
......@@ -459,9 +432,6 @@ const PurchaseOrderDetail:React.FC<PurchaseOrderDetailProps> = (props) => {
// 商品信息的改动 驱动支付信息变化
useProductTableChangeForPay(ctx, update)
// 编辑 地址和发票信息变动 触发订单更新
useOrderUpdateChangeOther(ctx)
// 监听商品总价的变更, 支付比例计算
$('sumPrice').subscribe(payload => {
const payment = addSchemaAction.getFieldValue('payments')
......@@ -486,6 +456,14 @@ const PurchaseOrderDetail:React.FC<PurchaseOrderDetailProps> = (props) => {
}
})
// 新增下 切换商城 清空受影响的字段
$('onFieldValueChange', 'shopId').subscribe(state => {
pageStatus === PageStatus.ADD && ctx.reset({
validate: false,
selector: '*(quoteNo,quoteId,vendorMemberName,vendorMemberId,vendorRoleId,products,payments)'
})
})
}}
expressionScope={{
orderNoPrice,
......
......@@ -4,7 +4,7 @@ import { ISchemaFormActions, ISchemaFormAsyncActions } from '@formily/antd'
import { useEffect, useState, useRef } from 'react'
import { PublicApi } from '@/services/api'
export const usePaymentInfo = (ctx: ISchemaFormActions | ISchemaFormAsyncActions, memberId: any, memberRoleId: any, products: any = []): any => {
export const usePaymentInfo = (ctx: ISchemaFormActions | ISchemaFormAsyncActions, products: any = []): any => {
const paywayData = useRef<any>({})
const [columns, setColumns] = useState<any[]>(paymentInformationColumns)
const markRef = useRef<boolean>(true)
......@@ -40,11 +40,12 @@ export const usePaymentInfo = (ctx: ISchemaFormActions | ISchemaFormAsyncActions
}
const getPayLists = (memberId, memberRoleId) => {
console.log('1')
PublicApi.postOrderBuyerCreateB2bPaymentFind({
memberId,
roleId: memberRoleId,
shopId: ctx.getFieldValue('shopId'),
orderMode: ctx.getFieldValue('orderMode'),
shopId: products[0]['shopId'],
orderMode: products[0]['orderMode'],
products: products.map(item => ({ productId: item.commodityId, skuId: item.productId }))
}, { ctlType: 'none' }).then(res => {
const { code, data } = res
......
......@@ -74,63 +74,6 @@ export const useProductTableChangeForPay = (ctx: ISchemaFormActions | ISchemaFor
})
}
// 编辑订单 地址和发票变动 触发订单更新
export const useOrderUpdateChangeOther = (ctx: ISchemaFormActions | ISchemaFormAsyncActions) => {
// const { pageStatus, id } = usePageStatus()
// FormEffectHooks.onFieldValueChange$('theInvoiceId').subscribe(state => {
// const { value, path } = state
// if(pageStatus === PageStatus.EDIT){
// if(state?.dataSource?.length && state.loading && state.props["x-component-props"].times > 2) {
// ctx.submit((values) => {
// if(values){
// PublicApi.postOrderProcurementOrderUpdate({
// ...values,
// deliveryTime: moment(values.deliveryTime).valueOf(),
// theInvoiceId: value?.id || null,
// hasInvoice: Number(values.hasInvoice),
// deliveryAddresId: values.deliveryAddresId,
// id,
// }, { ctlType: "none" })
// }
// })
// } else {
// ctx.setFieldState(path, _state => {
// _state.loading = true
// _state.props["x-component-props"].times++
// })
// }
// }
// })
// FormEffectHooks.onFieldValueChange$('deliveryAddresId').subscribe(state => {
// const { value, path } = state
// if(pageStatus === PageStatus.EDIT){
// if(state?.dataSource?.length && state.loading && state.props["x-component-props"].times > 2) {
// ctx.submit((values) => {
// if(values){
// PublicApi.postOrderProcurementOrderUpdate({
// ...values,
// deliveryTime: moment(values.deliveryTime).valueOf(),
// theInvoiceId: values.theInvoiceId,
// hasInvoice: Number(values.hasInvoice),
// deliveryAddresId: value?.id ? value.id : value,
// id,
// }, { ctlType: "none" })
// }
// })
// } else {
// ctx.setFieldState(path, _state => {
// _state.loading = true
// _state.props["x-component-props"].times++
// })
// }
// }
// })
}
// 高级筛选schema中用于输入搜索商品品类的Effect
/**
* @param ctx 外部表单action
......
......@@ -8,7 +8,7 @@ import { createFormActions, registerVirtualBox, useFormSpy } from '@formily/antd
import { SaveOutlined, LinkOutlined, PlusOutlined } from '@ant-design/icons'
import NiceForm from '@/components/NiceForm'
import { mergeAllSchemas } from './schema'
import { useModelTypeChange, useEditHideField, useOrderFormInitEffect, useOrderUpdateChangeOther, useProductTableChangeForPay } from './effects'
import { useModelTypeChange, useEditHideField, useOrderFormInitEffect, useProductTableChangeForPay } from './effects'
import { orderCombination, orderTypeLabelMap, procurementProcessField, procurementRenderField, procurmentRenderInit } from './constant'
import CirculationRecord from '../components/circulationRecord'
import SelectAddress from './components/selectAddress'
......@@ -16,11 +16,9 @@ import TheInvoiceList from './components/theInvoiceList'
import styled from 'styled-components'
import { useUpdate } from '@umijs/hooks'
import { PublicApi } from '@/services/api'
import { findLastIndexFlowState } from '@/utils'
import { changeRouterTitleByStatus } from '../../_public/order/utils'
import { help } from '../../common'
import { ReadyAddOrderDetailContext } from '../context'
import AuditProcess from '@/components/AuditProcess'
import styles from './index.less'
import { useMaterialTable } from './model/useMaterialTable'
import ContractModalTable from './components/contractModalTable'
......@@ -253,7 +251,7 @@ const PurchaseOrderDetail:React.FC<PurchaseOrderDetailProps> = (props) => {
contractOrderRef.current.setVisible(true)
}
const orderContract = pageStatus !== PageStatus.PREVIEW && <div className='connectBtn' onClick={handleOrderContract}><LinkOutlined style={{marginRight: 4}}/>选择</div>
const orderContract = pageStatus === PageStatus.ADD && <div className='connectBtn' onClick={handleOrderContract}><LinkOutlined style={{marginRight: 4}}/>选择</div>
// 新增收货地址
const addNewAddress = <Button block icon={<PlusOutlined/>}>新增收货地址</Button>
......@@ -275,28 +273,6 @@ const PurchaseOrderDetail:React.FC<PurchaseOrderDetailProps> = (props) => {
]}
>
<ReadyAddOrderDetailContext.Provider value={providerValue}>
{/* { pageStatus !== PageStatus.ADD && initFormValue && initFormValue.externalWorkflowFlowRecordLogResponses && <AuditProcess
customTitleKey='operationalProcess'
customKey='state'
outerVerifyCurrent={findLastIndexFlowState(initFormValue.externalWorkflowFlowRecordLogResponses)}
innerVerifyCurrent={findLastIndexFlowState(initFormValue.interiorWorkflowFlowRecordLogResponses)}
outerVerifySteps={
initFormValue.externalWorkflowFlowRecordLogResponses ?
initFormValue.externalWorkflowFlowRecordLogResponses.map(item => ({
...item,
status: item.isExecute ? 'finish' : 'wait',
})) :
[]
}
innerVerifySteps={
initFormValue.interiorWorkflowFlowRecordLogResponses ?
initFormValue.interiorWorkflowFlowRecordLogResponses.map(item => ({
...item,
status: item.isExecute ? 'finish' : 'wait',
})) :
[]
}
></AuditProcess> } */}
<Card className={styles.orderCollectCard} style={{marginTop: 24}}>
<NiceForm
loading={formLoading}
......@@ -336,9 +312,6 @@ const PurchaseOrderDetail:React.FC<PurchaseOrderDetailProps> = (props) => {
// 商品信息的改动 驱动支付信息变化
useProductTableChangeForPay(ctx, update)
// 编辑 地址和发票信息变动 触发订单更新
useOrderUpdateChangeOther(ctx)
}}
expressionScope={{
orderContract,
......
......@@ -57,7 +57,8 @@ export const useMaterialTable = (ctx: ISchemaFormActions | ISchemaFormAsyncActio
// 渲染单价
materialInfoColumns[7].render = (t, r) => <span style={{color: 'red'}}>{Number(r.price).toFixed(2)}</span>
materialInfoColumns[materialInfoColumns.length - 1].render = (t, r) => null
// materialInfoColumns[materialInfoColumns.length - 1].render = (t, r) => null
materialInfoColumns.pop()
}
return materialInfoColumns
......
......@@ -4,7 +4,7 @@ import { Row, Col, Progress } from 'antd'
import { PublicApi } from '@/services/api'
import EyePreview from '@/components/EyePreview'
import { formatTimeString } from '@/utils'
import StatusColors from '../../components/StatusColors'
import StatusColors from '../../components/statusColors'
import { FieldTimeOutlined } from '@ant-design/icons'
import {
Chart,
......
import React from 'react'
import React, { useRef, useState } from 'react'
import { formatTimeString } from '@/utils'
import StatusColors from '@/pages/transaction/components/statusColors'
import EyePreview from '@/components/EyePreview'
import { history } from 'umi'
import { FORM_FILTER_PATH } from '@/formSchema/const';
import { getSaleOrderAuditPageSelectOption } from '@/pages/transaction/effect';
import { ISchemaFormActions, ISchemaFormAsyncActions } from '@formily/antd'
import { useModalTable } from '../../purchaseOrder/orderCollectB2b/model/useModalTable'
import { Button } from 'antd'
import { PublicApi } from '@/services/api'
import { setAuth, setRouters } from '@/utils/auth'
/** 订单审核各个页面 只有订单类型查询的Schema */
export const tableListSchema: any = (align?: String, colStyle?: Object) => {
......@@ -105,6 +110,7 @@ export const baseOrderListColumns: any = () => {
align: 'center',
dataIndex: 'memberName',
key: 'memberName',
render: (t, r) => r.memberName ? t : r.buyerMemberName
},
{
title: '下单时间',
......@@ -141,3 +147,93 @@ export const baseOrderListColumns: any = () => {
},
]
}
// 转单适用
export const useTransformOrderTable = (ctx: ISchemaFormActions | ISchemaFormAsyncActions) => {
const transformRef = useRef<any>({})
const { visible, setVisible } = useModalTable()
const handleDelete = (record) => {
}
const handleModify = (record) => {
alert('转单修改')
// PublicApi.postMemberLoginSwitchrole({
// memberRoleId: 11,
// }).then(res => {
// if (res.code === 1000) {
// // @ts-ignore
// setAuth(res.data);
// setRouters(res.data.urls);
// setTimeout(() => {
// window.location.replace(`/memberCenter/tranactionAbility/productInquiry/waitAddInquiry/two?id=${record.order}`);
// }, 800);
// }
// }).catch(err => { })
}
const [orderColumns, setOrderColumns] = useState(() => {
const orderInfoColumns = [
{
title: '订单号',
align: 'center',
dataIndex: 'orderNo',
key: 'orderNo',
render: (text, record) => {
return (
<EyePreview url={`${history.location.pathname}/preview?id=${record.orderId}`}>
{text}
</EyePreview>
)
},
ellipsis: true,
},
{
title: '订单摘要',
align: 'center',
dataIndex: 'digest',
key: 'digest',
ellipsis: true,
},
{
title: '供应会员',
align: 'center',
dataIndex: 'vendorMemberName',
key: 'vendorMemberName',
ellipsis: true,
render: (t, r) => t ? t : r.memberName
},
{
title: '下单时间',
align: 'center',
dataIndex: 'createTime',
key: 'createTime',
render: (text) => formatTimeString(text)
},
{
title: '订单总额',
align: 'center',
dataIndex: 'amount',
key: 'amount',
ellipsis: true,
render: (t) => `¥${t}`
},
]
// 渲染操作
orderInfoColumns[orderInfoColumns.length - 1].render = (text, record) => <>
<Button type='link' size="small" onClick={() => handleModify(record)}>修改</Button>
<Button type='link' size="small" onClick={() => handleDelete(record)}>删除</Button>
</>
return orderInfoColumns
})
return {
transformRef,
orderColumns,
visible,
setVisible,
}
}
......@@ -25,7 +25,7 @@ const FirstApprovedOrderDetail: React.FC = () => {
approvedRef.current.actions.submit().then(async (v) => {
const params = {
orderId: Number(id),
...v,
...v.values,
}
const result = await run(params)
......
import React, { useCallback, useRef } from 'react'
import { Card, Button, Dropdown, Menu } from 'antd'
import React, { useRef } from 'react'
import { Card, Button, Space } from 'antd'
import { StandardTable } from 'god'
import { PageHeaderWrapper } from '@ant-design/pro-layout'
import { PublicApi } from '@/services/api'
import { baseOrderListColumns } from './constant'
import { baseOrderListColumns, useTransformOrderTable } from './constant'
import { history } from 'umi'
import { PurchaseOrderOutWorkState } from '@/constants/order'
import { saleTableListSchema as tableListSchema } from '../_public/order/constant'
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch'
import { FORM_FILTER_PATH } from '@/formSchema/const'
import DateRangePickerUnix from '@/components/NiceForm/components/DateRangePickerUnix'
import Submit from '@/components/NiceForm/components/Submit'
import NiceForm from '@/components/NiceForm'
import { createFormActions } from '@formily/antd'
import { createFormActions, registerVirtualBox } from '@formily/antd'
import ModalForm from '@/components/ModalForm'
import { useHttpRequest } from '@/hooks/useHttpRequest'
import { CaretDownOutlined } from '@ant-design/icons'
import TableOperation from '@/components/TableOperation'
// 销售订单查询
......@@ -30,6 +28,7 @@ const fetchTableData = async (params) => {
const formActions = createFormActions();
const destroyActions = createFormActions();
const pauseActions = createFormActions();
const transformActions = createFormActions();
const SaleOrder: React.FC<SaleOrderProps> = (props) => {
const ref = useRef<any>({})
......@@ -38,6 +37,8 @@ const SaleOrder: React.FC<SaleOrderProps> = (props) => {
const { run, loading } = useHttpRequest(PublicApi.postOrderVendorCancel)
const { run: runPause, loading: loadingEnd } = useHttpRequest(PublicApi.postOrderVendorTerminate)
const { transformRef, orderColumns } = useTransformOrderTable(transformActions)
// 提交取消
const handleSubmit = () => {
destroyActions.submit().then(async ({values}: any) => {
......@@ -80,14 +81,30 @@ const SaleOrder: React.FC<SaleOrderProps> = (props) => {
pauseActions.setFieldValue('state', 1)
}
// 单个转单
const handelTransformOrder = (r) => {
console.log(r)
transformRef.current.setVisible(true)
transformActions.setFieldValue('orders', [
{ id: 1, orderNo: 'TYBHU', digest: '666', vendorMemberName: '999', createTime: '2015-12-20 20:15:12', amount: '123'},
{ id: 2, orderNo: 'IYGUIH', digest: '56', vendorMemberName: '651', createTime: '2015-02-15 20:15:12', amount: '123'}
])
}
// 批量转单
const handleSubmitTransform = () => {
}
/** 参照后台数据生成 */
const renderOptionButton = (record: any) => {
const buttonGroup = { '取消订单': record.showCancel, '中止': record.showTerminate, '评价': record.showComment }
const buttonGroup = { '取消订单': record.showCancel, '中止': record.showTerminate, '评价': record.showComment, '转单': true }
const operationHandler = {
'取消订单': () => handleCancel(record),
'中止': () => handleSuspend(record),
'评价': () => handleEvaluate(record.orderId),
'转单': () => handelTransformOrder(record),
}
return (
......@@ -113,7 +130,14 @@ const SaleOrder: React.FC<SaleOrderProps> = (props) => {
}
}
const controllerBtns = <Button style={{width: 140}} onClick={() => {}} type='default'>导出</Button>
const controllerBtns = <Space>
<Button style={{width: 140}} onClick={() => {}} type='default'>导出</Button>
<Button type="primary">转单</Button>
</Space>
registerVirtualBox("CustomTitle", ({ children, schema }) => {
return <p>当前勾运了3张订单进行转单,转单后生成的采购订单可通过账号“广州中石科技采购商角色”进行查看</p>
})
return <PageHeaderWrapper>
<Card>
......@@ -148,6 +172,7 @@ const SaleOrder: React.FC<SaleOrderProps> = (props) => {
}}
/>
</Card>
{/* 取消原因 */}
<ModalForm
modalTitle='取消原因'
currentRef={destoryRef}
......@@ -192,6 +217,7 @@ const SaleOrder: React.FC<SaleOrderProps> = (props) => {
}}
modalProps={{confirmLoading: loading}}
/>
{/* 中止原因 */}
<ModalForm
modalTitle='中止原因'
currentRef={pauseRef}
......@@ -241,6 +267,38 @@ const SaleOrder: React.FC<SaleOrderProps> = (props) => {
}}
modalProps={{confirmLoading: loadingEnd}}
/>
{/* 确认转单 */}
<ModalForm
modalTitle='确认转单'
currentRef={transformRef}
confirm={handleSubmitTransform}
actions={transformActions}
schema={{
type: 'object',
properties: {
NOT_SUBMIT_TITLE: {
type: 'object',
"x-component": "CustomTitle",
},
orders: {
type: 'array',
"x-component": 'MultTable',
"x-component-props": {
rowKey: 'id',
columns: "{{orderColumns}}",
pagination: false,
},
},
}
}}
expressionScope={{
orderColumns,
}}
// components={{
// CustomTitle
// }}
// modalProps={{confirmLoading: loadingTransform}}
/>
</PageHeaderWrapper>
}
......
......@@ -29,7 +29,6 @@ import * as EnhanceV2Api from './EnhanceV2Api';
import * as MessageV2 from './MessageV2Api';
import * as LogiticsV2 from './LogiticsV2Api';
import * as MarketingApi from './MarketingApi';
import * as MaketingV2Api from './MaketingV2Api'
import * as AfterServiceV2Api from './AfterServiceV2Api';
......@@ -73,6 +72,5 @@ export const PublicApi = {
...MessageV2,
...LogiticsV2,
...MarketingApi,
...MaketingV2Api,
...AfterServiceV2Api,
}
......@@ -31,7 +31,6 @@ const tokenList = [
{ name: 'MessageV2', token: '69a667ec9861e8bdc25b89238d0b908a2123d9fce26e72fec3cdf6cd0b1f2681', categoryIds: [0], }, // 消息中心v2
{ name: 'LogiticsV2', token: '732fb8e33970ff5dee830423a630e8e85c3ef3293abba7581b16749dfce8608b', categoryIds: [0], }, // 物流能力v2
{ name: 'Marketing', token: 'd952d25c4e8272a6dff69245dbddf983dc886521e2623464e476922fc95f43af', categoryIds: [0], }, // 营销能力
{ name: 'MaketingV2', token: 'f6d5cee2383ca203dfa2882b84dfa02a1d79de3c3ad892b42f030437fdc5ea21', categoryIds: [0] }, // 营销活动v2
{ name: 'AfterServiceV2', token: '58748fc89dcdb33ec5cac520c00293ba92abca362a8ddb979df589effd0db9bd', 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