feat: 产品管理: 复制产品: 增加是否复制价格; 所有项目类型

perf/export-docx
Lei OT 12 months ago
parent 6cf4f81cdf
commit 2671015b43

@ -29,6 +29,7 @@
"sureCancel": "Are you sure to cancel?", "sureCancel": "Are you sure to cancel?",
"sureDelete":"Are you sure to delete?", "sureDelete":"Are you sure to delete?",
"Yes": "Yes", "Yes": "Yes",
"No": "No",
"Success": "Success", "Success": "Success",
"Failed": "Failed", "Failed": "Failed",

@ -98,6 +98,7 @@
"CopyFormMsg": { "CopyFormMsg": {
"Source": "Source ", "Source": "Source ",
"target": "Target ", "target": "Target ",
"withQuote": "Whether to copy the quotation",
"requiredVendor": "Please pick a target vendor", "requiredVendor": "Please pick a target vendor",
"requiredTypes": "Please select product types", "requiredTypes": "Please select product types",
"requiredDept": "Please pick a owner department" "requiredDept": "Please pick a owner department"

@ -29,6 +29,7 @@
"sureCancel": "确定取消?", "sureCancel": "确定取消?",
"sureDelete":"确定删除?", "sureDelete":"确定删除?",
"Yes": "是", "Yes": "是",
"No": "否",
"Success": "成功", "Success": "成功",
"Failed": "失败", "Failed": "失败",

@ -98,6 +98,7 @@
"CopyFormMsg": { "CopyFormMsg": {
"Source": "源", "Source": "源",
"target": "目标", "target": "目标",
"withQuote": "是否复制报价",
"requiredVendor": "请选择目标供应商", "requiredVendor": "请选择目标供应商",
"requiredTypes": "请选择产品类型", "requiredTypes": "请选择产品类型",
"requiredDept": "请选择所属小组" "requiredDept": "请选择所属小组"

@ -1,5 +1,5 @@
import { useState, useEffect } from 'react'; import { useState, useEffect } from 'react';
import { App, Form, Modal, DatePicker, Divider } from 'antd'; import { App, Form, Modal, DatePicker, Divider, Switch } from 'antd';
import { isEmpty, objectMapper } from '@/utils/commons'; import { isEmpty, objectMapper } from '@/utils/commons';
import { useTranslation } from 'react-i18next'; import { useTranslation } from 'react-i18next';
@ -47,11 +47,15 @@ export const CopyProductsForm = ({ action, initialValues, onFormInstanceReady, s
<DeptSelector isLeaf={true} /> <DeptSelector isLeaf={true} />
</Form.Item> </Form.Item>
</RequireAuth>} </RequireAuth>}
<Form.Item name={'source_use_year'} label={`${t('products:CopyFormMsg.Source')}${t('products:UseYear')}`} initialValue={dayjs([source.sourceYear, 1, 1])}> <Form.Item name={'source_use_year'} label={`${t('products:CopyFormMsg.Source')}${t('products:UseYear')}`} initialValue={dayjs([source.sourceYear, 1, 1])} rules={[{ required: true,}]}>
<DatePicker picker='year' allowClear /> <DatePicker picker='year' allowClear />
</Form.Item> </Form.Item>
<Form.Item name={'target_use_year'} label={`${t('products:CopyFormMsg.target')}${t('products:UseYear')}`}> <Form.Item name={'target_use_year'} label={`${t('products:CopyFormMsg.target')}${t('products:UseYear')}`} rules={[{ required: true,}]}>
<DatePicker picker='year' allowClear disabledDate={(current) => current <= dayjs([source.sourceYear, 12, 31])} /> <DatePicker picker='year' allowClear />
{/* disabledDate={(current) => current <= dayjs([source.sourceYear, 12, 31])} */}
</Form.Item>
<Form.Item name={'with_quote'} label={`${t('products:CopyFormMsg.withQuote')}`}>
<Switch checkedChildren={t('Yes')} unCheckedChildren={t('No')} />
</Form.Item> </Form.Item>
</Form> </Form>
); );
@ -69,7 +73,7 @@ const formValuesMapper = (values) => {
'products_types': { 'products_types': {
key: 'products_types', key: 'products_types',
transform: (value) => { transform: (value) => {
return Array.isArray(value) ? value.map((ele) => ele.key).join(',') : value ? value.value : ''; return Array.isArray(value) ? value.map((ele) => ele.key).join(',') : value ? value.value : '-1';
}, },
}, },
'dept': { 'dept': {
@ -78,6 +82,7 @@ const formValuesMapper = (values) => {
return Array.isArray(value) ? value.map((ele) => ele.key).join(',') : value ? value.value : ''; return Array.isArray(value) ? value.map((ele) => ele.key).join(',') : value ? value.value : '';
}, },
}, },
'with_quote': { key: 'with_quote', transform: (value) => (value ? 1 : 0) },
}; };
let dest = {}; let dest = {};
const { agency, year, ...omittedValue } = values; const { agency, year, ...omittedValue } = values;

@ -10,6 +10,8 @@ import { useProductsTypes, useProductsAuditStatesMapVal } from '@/hooks/useProdu
import useFormStore from '@/stores/Form'; import useFormStore from '@/stores/Form';
import { objectMapper } from '@/utils/commons'; import { objectMapper } from '@/utils/commons';
import CopyProductsFormModal from './Detail/CopyProducts'; import CopyProductsFormModal from './Detail/CopyProducts';
import useAuthStore from '@/stores/Auth';
import RequireAuth from '@/components/RequireAuth';
dayjs.extend(arraySupport); dayjs.extend(arraySupport);
@ -63,11 +65,15 @@ function Index() {
{ title: t('products:Vendor'), key: 'vendor', dataIndex: 'travel_agency_name' }, { title: t('products:Vendor'), key: 'vendor', dataIndex: 'travel_agency_name' },
{ title: t('products:CreatedBy'), key: 'poster_by', dataIndex: 'poster_name' }, { title: t('products:CreatedBy'), key: 'poster_by', dataIndex: 'poster_name' },
{ title: t('products:CreateDate'), key: 'poster_date', dataIndex: 'poster_date' }, { title: t('products:CreateDate'), key: 'poster_date', dataIndex: 'poster_date' },
{ title: t('products:AuState'), key: 'audit_state', dataIndex: 'audit_state', {
title: t('products:AuState'),
key: 'audit_state',
dataIndex: 'audit_state',
render: (_, r) => { render: (_, r) => {
const stateCls = ` text-${stateMapVal[`${r.audit_state_id}`]?.color} `; const stateCls = ` text-${stateMapVal[`${r.audit_state_id}`]?.color} `;
return <span className={stateCls}>{stateMapVal[`${r.audit_state_id}`]?.label}</span>; return <span className={stateCls}>{stateMapVal[`${r.audit_state_id}`]?.label}</span>;
}, }, },
},
{ title: t('products:AuditedBy'), key: 'audited_by', dataIndex: 'audited_by_name' }, { title: t('products:AuditedBy'), key: 'audited_by', dataIndex: 'audited_by_name' },
{ title: t('products:AuditDate'), key: 'audit_date', dataIndex: 'audit_date' }, { title: t('products:AuditDate'), key: 'audit_date', dataIndex: 'audit_date' },
{ {
@ -76,9 +82,15 @@ function Index() {
render: (_, r) => ( render: (_, r) => (
<Space size={'large'}> <Space size={'large'}>
<Link to={`/products/${r.travel_agency_id}/${searchValues.use_year || 'all'}/${searchValues.audit_state || 'all'}/edit`}>{t('Edit')}</Link> <Link to={`/products/${r.travel_agency_id}/${searchValues.use_year || 'all'}/${searchValues.audit_state || 'all'}/edit`}>{t('Edit')}</Link>
{r.audit_state_id >= 0 ? (
<Link to={`/products/${r.travel_agency_id}/${searchValues.use_year || 'all'}/${searchValues.audit_state || 'all'}/audit`}>{t('Audit')}</Link> <Link to={`/products/${r.travel_agency_id}/${searchValues.use_year || 'all'}/${searchValues.audit_state || 'all'}/audit`}>{t('Audit')}</Link>
<Button type='link' size={'small'} onClick={() => openCopyModal(r, '#')}>{t('Copy')+'-'+t('products:#')}</Button> ) : (
<Button type='link' size={'small'} onClick={() => openCopyModal(r, 'o')}>{t('Copy')+'-'+t('products:Offer')}</Button> <span className='text-muted'>{t('Audit')}</span>
)}
<Button type='link' size={'small'} onClick={() => openCopyModal(r, '#')}>
{t('Copy') + '-' + t('products:#')}
</Button>
{/* <Button type='link' size={'small'} onClick={() => openCopyModal(r, 'o')}>{t('Copy')+'-'+t('products:Offer')}</Button> */}
</Space> </Space>
), ),
}, },
@ -109,6 +121,7 @@ function Index() {
{/* 复制弹窗 */} {/* 复制弹窗 */}
<CopyProductsFormModal <CopyProductsFormModal
initialValues={{agency: {label: sourceAgency.travel_agency_name, value: sourceAgency.travel_agency_id}}}
open={copyModalVisible} open={copyModalVisible}
action={copyAction} action={copyAction}
source={{ sourceAgency, sourceYear: useYear }} source={{ sourceAgency, sourceYear: useYear }}

Loading…
Cancel
Save