import React, { useState, useEffect } from 'react'; import { Button, Spin, Input, message, Divider, Radio, Form, Select, DatePicker, Upload } from 'antd'; import { formItemLayout, base, formRules, setFormData, stateTransforToStore } from './entity'; import BraftEditor, { EditorState } from 'braft-editor'; import * as IF from './interface'; import { UploadOutlined } from '@ant-design/icons'; import COS from "@/utils/COS"; import ImageUploaderInfo from './components/ImageUploader'; import AsksCard from './components/AsksCard'; // @ts-ignore import { ContentUtils } from 'braft-utils'; import PositionSelector from "@/components/PositionSelector"; import moment from 'moment'; import useInitail from '@/hooks/useInitail'; import { useStore } from '@/pages/mkt/ActivityCreate/index'; import * as api from './api'; interface Props { onNext: Function; } const { RangePicker } = DatePicker; const FormItem = Form.Item; const TextArea = Input.TextArea; const RadioGroup = Radio.Group; interface InfoParams { errMsg?: string; loading?: boolean; } function Index({ onNext }: Props) { const { baseInfo, setBaseInfo } = useStore(); const [form] = Form.useForm(); const [readOnly, setReadOnly] = useState(false); const [Infos, setnfos] = useState({ loading: false }); const [saveLoading, setSaveLoading] = useState(false); const [editor, setEditor] = useState(BraftEditor.createEditorState('')); const [fileList, setFileList] = useState([]); const [activityType, setActivityType] = useState(0); const { data: ActivityTypeList, errMsg: TypeErr } = useInitail(api.getActivityType, [], {}); const { changeEnable, activityNo, bizType } = baseInfo; useEffect(() => { activityNo && fetchDetail(activityNo); }, [activityNo]); function fetchDetail(no: string) { setnfos({ loading: true }); // const detailApi = changeEnable? api.getBasicInfoApi({ activityNo: no, change: changeEnable }).then(res => { const { data } = res; let _data = { ...data }; setBaseInfo({ ...baseInfo, bizType: _data.bizType, addressType: _data.addressType, activityType: _data.activityType }); if (![1, 3].includes(_data.status || 0)) { setReadOnly(true); } setEditor(BraftEditor.createEditorState(_data.remark)); form.setFieldsValue(setFormData(_data)); setnfos({ loading: false }); }).catch(e => { setnfos({ loading: false, errMsg: e.message }); message.error(e.message); }); } function submitHandle() { form.validateFields().then(values => { // setSaveLoading(true); const content = editor.toHTML(); const _va = stateTransforToStore(values); const params = { activityNo: baseInfo.activityNo, remark: content === '

' ? '' : content, ..._va, }; const changePramas = { activityNo: baseInfo.activityNo, }; if (changeEnable) { // for (let key in params) { // if (key === 'asks' && (params[key] || []).length != (data.asks || []).length) { // changePramas[key] = params[key]; // } else if (params[key] != data[key]) { // changePramas[key] = params[key]; // } // } params.bizType = undefined; params.activityType = undefined; params.address = undefined; params.addressType = undefined; params.startTime = undefined; params.couponValidTime = undefined; } const currentApi = changeEnable ? api.changeBasicInfoApi : api.saveBasicInfoApi; currentApi(params).then((res) => { message.success('保存成功'); if (changeEnable) { setSaveLoading(false); return; } setBaseInfo({ ...baseInfo, bizType: params.bizType, activityNo: res.data, addressType: values.addressType, activityType: values.activityType }); onNext && onNext(); setSaveLoading(false); }).catch(e => { setSaveLoading(false); message.error(e.message); }); }); } /** 编辑器 */ function uplodaChange(info: any) { let _editor = editor; let _fileList = []; if (Array.isArray(info)) { _fileList = info; } else { _fileList = info.fileList; } if (_fileList.length > 0) { _fileList = _fileList.slice(-1); } if (_fileList[0].status === 'done') { _editor = ContentUtils.insertMedias(_editor, [ { type: 'IMAGE', url: _fileList[0].response.data } ]); } setEditor(_editor); setFileList(_fileList); } return (
{Infos.errMsg ? (
{Infos.errMsg || "加载错误!"}
) : (
setBaseInfo({ ...baseInfo, bizType: e.target.value })}> 售前活动 售后活动 setEditor(editorState)} readOnly={readOnly && !changeEnable} extendControls={[ { key: 'antd-uploader', type: 'component', component: ( COS.cosUpload({ ...data, uploadPath: "/api/file/upload" })} onChange={uplodaChange} fileList={fileList} > ) } ]} /> current && current < moment().subtract(1, "days")} format="YYYY-MM-DD HH:mm:ss" /> {![5, 6, 9].includes(activityType) && 按门店地址} 统一地址 prevValues.addressType != currentValues.addressType}> {({ getFieldValue }): any => { return getFieldValue("addressType") === 2 ? ( ) : null; }} 上传图片
{readOnly && !changeEnable ? () : ( )}
)}
); } export default Index;