Commit 819207a0 authored by 前端-陈智峰's avatar 前端-陈智峰

feat: 冲刺二

parent 2396e72a
......@@ -620,7 +620,32 @@ const AuthConfigRoute: RouterChild = {
name: 'parameterSetting',
component: '@/pages/systemSetting/parameterSetting'
},
/** 业务员管理 */
/** 参数管理 */
{
path: '/memberCenter/systemSetting/paramsManage',
name: '参数管理',
routes:[
{
path: '/memberCenter/systemSetting/paramsManage/paramsManageList',
name: '参数管理',
component: '@/pages/systemSetting/paramsManage/paramsManageList',
},
{
path: '/memberCenter/systemSetting/paramsManage/paramsManageList/add',
name: '新增参数',
component: '@/pages/systemSetting/paramsManage/paramsManageList/detail',
noMargin: true,
hideInMenu: true,
},
{
path: '/memberCenter/systemSetting/paramsManage/paramsManageList/edit',
name: '编辑参数',
component: '@/pages/systemSetting/paramsManage/paramsManageList/detail',
noMargin: true,
hideInMenu: true,
},
]
},
{
path: '/memberCenter/systemSetting/salesmanManage',
name: '业务员管理',
......
......@@ -679,7 +679,7 @@ export default {
'purchaseRequisition.pinlei': 'Category',
'purchaseRequisition.pinpai': 'Brand',
'purchaseRequisition.danwei': 'Unit',
'purchaseRequisition.yugudanjia': 'Estimated unit price',
'purchaseRequisition.yugudanjia': 'Unit price',
'purchaseRequisition.shuliang': 'Quantity',
'purchaseRequisition.yugujine': 'Estimated amount',
'purchaseRequisition.shuliangheji': 'Total quantity',
......
......@@ -680,7 +680,7 @@ export default {
'purchaseRequisition.pinlei': '종류',
'purchaseRequisition.pinpai': '브랜드',
'purchaseRequisition.danwei': '유닛',
'purchaseRequisition.yugudanjia': '예상 단가',
'purchaseRequisition.yugudanjia': '단가',
'purchaseRequisition.shuliang': '수량',
'purchaseRequisition.yugujine': '견적 금액',
'purchaseRequisition.shuliangheji': '총 수량',
......
......@@ -616,6 +616,11 @@ export default {
'saleOrder.hexiaozitidingdan': '核销自提订单',
// 请购单
'purchaseRequisition.cehui':'撤回审核',
'purchaseRequisition.biangeng':'变更',
'purchaseRequisition.zuofei':'作废',
'purchaseRequisition.cehuireson':'撤回审核原因',
'purchaseRequisition.quxiaodingdan': '取消订单',
'purchaseRequisition.zhongzhi': '中止',
......@@ -679,7 +684,7 @@ export default {
'purchaseRequisition.pinlei': '品类',
'purchaseRequisition.pinpai': '品牌',
'purchaseRequisition.danwei': '单位',
'purchaseRequisition.yugudanjia': '预估单价',
'purchaseRequisition.yugudanjia': '单价',
'purchaseRequisition.shuliang': '数量',
'purchaseRequisition.yugujine': '预估金额',
'purchaseRequisition.shuliangheji': '数量合计',
......
import React, { useState, useRef, useMemo, useEffect } from 'react'
import { history, useIntl } from 'umi'
import { Button, Popconfirm, Card, Input, Select, Modal, Space, Badge, Form, Radio, message } from 'antd'
import { PageHeaderWrapper } from '@ant-design/pro-layout'
import {
getMemberParameterManageGetParameterTypeList,
getMemberParameterManageGetParameterById,
postMemberParameterManageAddParameter,
postMemberParameterManageUpdateParameter
} from '@/services/MemberV2Api';
import ReutrnEle from '@/components/ReturnEle';
import { usePageStatus } from '@/hooks/usePageStatus'
import { SaveOutlined } from '@ant-design/icons';
const FormItem = Form.Item;
const { Option } = Select;
const Detail= ()=> {
const [options,setOptions] = useState([])
const [submitLoading,setSubmitLoading] = useState(false)
const [pageLoading,setPageLoading] = useState(false)
const [form] = Form.useForm()
const intl = useIntl();
const { id,preview } = usePageStatus()
useEffect(()=>{
getMemberParameterManageGetParameterTypeList().then(res=>{
setOptions(res.data)
// 现在只有一个下拉项
!id && form.setFieldsValue({key:res?.data[0]?.key})
})
if(id){
setPageLoading(true)
getMemberParameterManageGetParameterById({id}).then(res=>{
form.setFieldsValue(res.data)
setPageLoading(false)
})
}
},[id])
const onFinish = (values)=> {
setSubmitLoading(true)
if(id) {
postMemberParameterManageUpdateParameter({id:+id,...values}).then((res)=>{
if(res.code!==1000) {
message.error(res.message)
setSubmitLoading(false)
return
}
history.goBack()
setSubmitLoading(false)
})
} else {
postMemberParameterManageAddParameter(values).then((res)=>{
if(res.code!==1000) {
message.error(res.message)
setSubmitLoading(false)
return
}
history.goBack()
setSubmitLoading(false)
})
}
}
return (
<PageHeaderWrapper
style={{
padding: 24,
}}
onBack={() => history.goBack()}
backIcon={<ReutrnEle description={intl.formatMessage({ id: 'common.button.back' })} />}
title={id?'编辑参数':'新增参数'}
extra={preview==='1'?'':[
<Button
key="1"
type="primary"
icon={<SaveOutlined />}
loading={submitLoading}
onClick={() => form.submit()}
>保存</Button>,
]}>
<Card loading={pageLoading}>
<Form
form={form} labelCol={{ span: 4 }}
wrapperCol={{ span: 8 }}
onFinish={onFinish}
initialValues={{ status: 1 }}
>
<FormItem label="参数key" name="key" rules={[{ required: true }]}>
<Input></Input>
</FormItem>
<FormItem label="参数值名称" name="name" rules={[{ required: true }]}>
<Input></Input>
</FormItem>
<FormItem label="参数类型" name="type" rules={[{ required: true }]}>
<Select>
{options.map(el=>
<Option key={el.key} value={el.key}>{el.name}</Option>
)}
</Select>
</FormItem>
<FormItem label="状态" name="status" rules={[{ required: true }]} >
<Radio.Group disabled={!id || preview==='1'}>
<Radio value={1}>有效</Radio>
<Radio value={0}>无效</Radio>
</Radio.Group>
</FormItem>
</Form>
</Card>
</PageHeaderWrapper>
)
}
export default Detail
\ No newline at end of file
import React, { ReactNode, useRef, useMemo } from 'react'
import { history, useIntl } from 'umi'
import { Button, Popconfirm, Card, Dropdown, Menu, Modal, Space, Badge } from 'antd'
import { PageHeaderWrapper } from '@ant-design/pro-layout'
import {
PlusOutlined,
PlayCircleOutlined,
EyeOutlined,
PauseCircleOutlined,
CaretDownOutlined,
ExclamationCircleOutlined
} from '@ant-design/icons'
import StandardTable from '@/components/StandardTable';
import { ColumnType } from 'antd/lib/table/interface'
import moment from 'moment'
import NiceForm from '@/components/NiceForm'
import { createFormActions } from '@formily/antd'
import { FORM_FILTER_PATH } from '@/formSchema/const'
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch'
import Submit from '@/components/NiceForm/components/Submit'
import useSetSearchValueInTable from '@/hooks/useSetSearchValueInTable'
import {
postMemberParameterManageGetPageNameOrStatusList,
deleteMemberParameterManageDeleteParameter } from '@/services/MemberV2Api'
import AuthButton from '@/components/AuthButton'
import { AuthUrl } from '@/components/AuthButton/AuthUrl'
const { confirm } = Modal
const formActions = createFormActions();
const ParamsManageList: React.FC<{}> = () => {
const intl = useIntl();
const ref = useRef<any>({})
/** 带参数查询,给表单带默认值 */
const { searchData, formatInitialValue, clear } = useSetSearchValueInTable();
const formatedFormValue = useMemo(() => {
const value = formatInitialValue?.value || {};
if (value && "status" in value) {
return {
value: {
...value,
status: +value.status
}
}
}
return value
}, [formatInitialValue])
const fetchData = (params: any) => {
const searchParams = {
...searchData,
...params,
}
const postData = {
...searchParams,
name: searchParams?.name || '',
status: searchParams?.status ,
}
return new Promise((resolve, reject) => {
postMemberParameterManageGetPageNameOrStatusList(postData).then(res => {
const { data } = res
resolve(data)
})
})
}
const columns: ColumnType<any>[] = [
{
title: 'ID',
dataIndex: 'id',
},
{
title: '参数key',
dataIndex: 'key',
},
{
title: '参数值名称',
dataIndex: 'name',
className: 'commonPickColor',
render: (text: any, record: any) => <span className="commonPickColor" onClick={() => handleSet(record,1)}>{text}&nbsp;<EyeOutlined /></span>
},
{
title: '参数类型',
dataIndex: 'type',
},
{
// trademarkApply.state
title: intl.formatMessage({ id: 'trademark.columns.isEnable' }),
dataIndex: 'isEnable',
key: 'isEnable',
render: (text: any, record: any) => <Button
type="link"
style={record.status ? { color: '#00B37A' } : { color: 'red' }}>{record.status ? <>{intl.formatMessage({ id: 'trademark.columns.isEnable.button.1' })} <PlayCircleOutlined /></> : <>{intl.formatMessage({ id: 'trademark.columns.isEnable.button.2' })} <PauseCircleOutlined /></>}</Button>
},
{
title: intl.formatMessage({ id: 'trademark.columns.option' }),
dataIndex: 'option',
render: (text: any, record: any) => {
return (
<Space>
<Button type='link' onClick={()=>handleSet(record)}>修改</Button>
<Button type='link' onClick={()=>handelDelete(record)}>删除</Button>
</Space>
)
}
}
];
const handelDelete = (record: any) => {
confirm({
title: intl.formatMessage({ id: 'trademark.handelDelete.title' }),
icon: <ExclamationCircleOutlined />,
okText: intl.formatMessage({ id: 'trademark.handelDelete.okText' }),
okType: 'danger',
cancelText: intl.formatMessage({ id: 'trademark.handelDelete.cancelText' }),
onOk() {
deleteMemberParameterManageDeleteParameter({ id: record.id }).then(res => {
if (res.code === 1000)
ref.current.reloadCurrent()
})
},
onCancel() {
cancel()
},
});
}
const handleSet = (record: any,type='0') => {
history.push(`/memberCenter/systemSetting/paramsManage/paramsManageList/edit?id=${record.id}&preview=${type}`)
}
const cancel = () => {
console.log('cancel')
}
const Actions = <Space>
<AuthButton btnCode='trademarkApply.add'>
<Button type="primary" icon={<PlusOutlined />} onClick={() => history.push('/memberCenter/systemSetting/paramsManage/paramsManageList/add')}>
{intl.formatMessage({ id: 'trademark.actions' })}
</Button>
</AuthButton>
</Space>
return (
<PageHeaderWrapper>
<Card>
<StandardTable
columns={columns}
currentRef={ref}
fetchTableData={(params: any) => fetchData(params)}
controlRender={
<NiceForm
actions={formActions}
expressionScope={{
Actions,
}}
components={{
Submit
}}
effects={($, action) => {
useStateFilterSearchLinkageEffect(
$,
action,
'name',
FORM_FILTER_PATH,
);
}}
schema={{
type: 'object',
properties: {
mageLayout: {
type: 'object',
'x-component': 'mega-layout',
properties: {
topLayout: {
type: 'object',
'x-component': 'mega-layout',
'x-component-props': {
grid: true,
},
properties: {
ctl: {
type: 'object',
'x-component': 'Children',
'x-component-props': {
children: '{{Actions}}',
},
},
name: {
type: 'string',
"x-component": 'Search',
'x-component-props': {
placeholder: '请输入参数名称',
align: 'flex-end',
},
}
},
},
[FORM_FILTER_PATH]: {
type: 'object',
'x-component': 'flex-layout',
'x-component-props': {
rowStyle: {
flexWrap: 'nowrap',
},
colStyle: {
marginLeft: 20,
},
},
properties: {
status: {
type: 'string',
enum: [
{ label: '无效', value: 0 },
{ label:'有效', value: 1 },
],
'x-component-props': {
placeholder: intl.formatMessage({ id: 'trademark.schema.status.placeholder' }),
}
},
submit: {
'x-component': 'Submit',
'x-component-props': {
children: intl.formatMessage({ id: 'trademark.schema.submit' }),
},
},
},
},
},
},
}
}}
onSubmit={values => ref.current.reload(values)}
onReset={() => {
clear()
}}
{...formatedFormValue}
/>
}
/>
</Card>
</PageHeaderWrapper>
)
}
export default ParamsManageList
......@@ -145,14 +145,17 @@ const BidMaterial: React.FC<BidMaterialProps> = ({ cardTitle }) => {
key: 'goodsGroup',
},
{
title: intl.formatMessage({ id: 'purchaseRequisition.yugudanjia', defaultMessage: '预估单价' }),
title: intl.formatMessage({ id: 'purchaseRequisition.yugudanjia', defaultMessage: '单价' }),
dataIndex: 'price',
key: 'price',
render:t=>`${t}/KG`
},
{
title: intl.formatMessage({ id: 'purchaseRequisition.shuliang', defaultMessage: '数量' }),
dataIndex: 'quantity',
key: 'quantity',
render:t=>`${t}/KG`
},
{
title: '',
......
......@@ -26,7 +26,7 @@ const EditSalesman: React.FC<MemberModalTableProps> = (props) => {
const [userId, setUserIds] = useState<number[]>([])
useEffect(() => {
getMemberUserPage({ pageSize: '9999', current: '1' } as any).then(res => {
getMemberUserPage({ pageSize: '9999', current: '1' ,type:1} as any).then(res => {
if (res.code !== 1000) {
return
}
......
import { Button, Space } from "antd"
import { Input, Space } from "antd"
import { getIntl } from "umi"
/** 修改请购单 初始值转换 */
......@@ -171,21 +171,22 @@ export const materialInfoColumns: any[] = [
// key: 'unit',
// },
{
title: getIntl().formatMessage({ id: 'purchaseRequisition.yugudanjia', defaultMessage: '预估单价(元)' }),
title: getIntl().formatMessage({ id: 'purchaseRequisition.yugudanjia', defaultMessage: '单价' })+'/KG',
dataIndex: 'price',
align: 'left',
key: 'price',
formItem: 'input',
editable: true,
// render: (t) => `¥${t.toFixed(2)}`
},
{
title: getIntl().formatMessage({ id: 'purchaseRequisition.yugushuliang', defaultMessage: '预估数量' }),
title: getIntl().formatMessage({ id: 'purchaseRequisition.yugushuliang', defaultMessage: '预估数量' })+'/KG',
dataIndex: 'quantity',
align: 'center',
key: 'quantity',
formItem: 'input',
editable: true,
addonAfter:'',
},
{
title: "",
......
......@@ -624,6 +624,8 @@ const IncreaseRequisition: React.FC<{}> = () => {
const currencyMap = fnMap(res.data?.currencyMap)
const arrivalAreaMap = fnMap(res.data?.arrivalAreaMap)
linkage.enum('business', businessTypeMap)
// 默认小料
if(res.data?.businessTypeMap?.['1'] ==='小料') addSchemaAction.setFieldValue('business', '1')
linkage.enum('currency', currencyMap)
linkage.enum('arrivalArea', arrivalAreaMap);
})
......
......@@ -16,8 +16,11 @@ import {
getPurchaseRequisitionPage,
postPurchaseRequisitionCancel,
postPurchaseRequisitionPause,
postPurchaseRequisitionRevokeProcess,
postPurchaseRequisitionToVoid
} from '@/services/PurchaseV2Api';
import { useIntl } from 'umi';
import { history, useIntl } from 'umi'
import { getMemberUserPage } from '@/services/MemberV2Api';
// 请购单查询
......@@ -35,12 +38,14 @@ const fetchTableData = (parmas) => {
const formActions = createFormActions();
const destroyActions = createFormActions();
const pauseActions = createFormActions();
const cehuiActions = createFormActions();
const RequestBill: React.FC<RequestBillProps> = () => {
const intl = useIntl();
const ref = useRef<any>({});
const destoryRef = useRef<any>({});
const pauseRef = useRef<any>({});
const cehuiRef = useRef<any>({});
const [curentId, setCurrentId] = useState<number>();
const { run, loading } = useHttpRequest(postPurchaseRequisitionCancel);
......@@ -80,6 +85,18 @@ const RequestBill: React.FC<RequestBillProps> = () => {
}
});
};
// 02todo提交撤回
const handleSubmitcehui = () => {
cehuiActions.submit().then(async ({ values }: any) => {
const result = await postPurchaseRequisitionRevokeProcess({ ...values, id: curentId });
if (result.code === 1000) {
pauseRef.current.setVisible(false);
setTimeout(() => {
ref.current.reloadCurrent();
}, 800);
}
});
};
const handleCancel = r => {
destoryRef.current.setVisible(true);
......@@ -92,12 +109,32 @@ const RequestBill: React.FC<RequestBillProps> = () => {
setCurrentId(r.id);
// pauseActions.setFieldValue('id', r.id)
};
const handleOprate = (record,type)=>{
switch(type) {
case 1:
cehuiRef.current.setVisible(true);
setCurrentId(record.id);
break;
case 2:
history.push(`/memberCenter/procurementAbility/purchaseRequisition/readyAddBill/edit?id=${record.id}`)
break;
case 3:
// 02todo作废接口
postPurchaseRequisitionToVoid({id:record.id}).then(res=>{
if(res.code===1000) ref.current.reloadCurrent()
})
break
}
}
/** 参照后台数据生成 */
const renderOptionButton = record => {
const btnAuthOfOperationTextMap = {
'取消订单': 'purchaseRequisition.quxiaodingdan',
'中止': 'purchaseRequisition.zhongzhi',
'撤回审核': 'purchaseRequisition.cehui',
'变更': 'purchaseRequisition.biangeng',
'作废': 'purchaseRequisition.zuofei',
}
const buttonGroup = {
......@@ -109,6 +146,18 @@ const RequestBill: React.FC<RequestBillProps> = () => {
id: 'purchaseRequisition.zhongzhi',
defaultMessage: '中止',
})]: record.showPause,
[intl.formatMessage({
id: 'purchaseRequisition.cehui',
defaultMessage: '撤回审核',
})]: record.revokeProcessFlag,
[intl.formatMessage({
id: 'purchaseRequisition.biangeng',
defaultMessage: '变更',
})]: record.innerStatus=== 1001,
[intl.formatMessage({
id: 'purchaseRequisition.zuofei',
defaultMessage: '作废',
})]: record.innerStatus=== 1001,
}
const operationHandler = {
......@@ -120,6 +169,18 @@ const RequestBill: React.FC<RequestBillProps> = () => {
id: 'purchaseRequisition.zhongzhi',
defaultMessage: '中止',
})]: () => handleSuspend(record),
[intl.formatMessage({
id: 'purchaseRequisition.cehui',
defaultMessage: '撤回审核',
})]: () => handleOprate(record,1),
[intl.formatMessage({
id: 'purchaseRequisition.biangeng',
defaultMessage: '变更',
})]: () => handleOprate(record,2),
[intl.formatMessage({
id: 'purchaseRequisition.zuofei',
defaultMessage: '作废',
})]: () => handleOprate(record,3),
};
return (
......@@ -317,6 +378,59 @@ const RequestBill: React.FC<RequestBillProps> = () => {
}}
modalProps={{ confirmLoading: loadingEnd }}
/>
{/* 撤回原因 */}
<ModalForm
modalTitle={intl.formatMessage({
id: 'purchaseRequisition.cehuireson',
defaultMessage: '撤回审核原因',
})}
currentRef={cehuiRef}
confirm={handleSubmitcehui}
actions={cehuiActions}
schema={{
type: 'object',
properties: {
NO_SUBMIT: {
type: 'object',
'x-component': 'mega-layout',
'x-component-props': {
labelAlign: 'top',
},
properties: {
// id: {
// type: 'number',
// title: '当前id',
// visible: false,
// },
revokeRemarks: {
type: 'textarea',
'x-component-props': {
rows: 4,
placeholder: intl.formatMessage({
id: 'purchaseRequisition.zaicishuruni',
defaultMessage: '在此输入你的原因, 最多50个汉字',
}),
},
title: intl.formatMessage({
id: 'purchaseRequisition.cehuireson',
defaultMessage: '撤回审核原因',
}),
'x-rules': [
{
required: true,
},
{
limitByte: true,
maxByte: 100,
},
],
},
},
},
},
}}
modalProps={{ confirmLoading: loadingEnd }}
/>
</PageHeaderWrapper>
);
};
......
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