117 lines
3.6 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import {Input, Modal} from "antd";
import ArticleGroup from "@/components/article/group.tsx";
import {useEffect, useState} from "react";
import {useSetState} from "ahooks";
import * as article from "@/service/api/article.ts";
import {regenerate} from "@/service/api/video.ts";
type Props = {
id?: number;
type: 'news' | 'video';
onClose?: (saved?: boolean) => void;
}
export default function ArticleEditModal(props: Props) {
const [groups, setGroups] = useState<BlockContent[][]>([]);
const [title, setTitle] = useState('')
const [state, setState] = useSetState({
loading: false,
open: false,
msgTitle: '',
msgGroup: '',
})
// 保存数据
const handleSave = () => {
console.log(groups, title)
if (!title) {
// setState({msgTitle: '请输入标题内容'});
return;
}
if (groups.length == 0 || groups[0].length == 0 || !groups[0][0].content) {
// setState({msgGroup: '请输入正文文本内容'});
return;
}
const save = props.type == 'news' ? article.save : regenerate
setState({loading: true})
save(title, groups, props.id > 0 ? props.id : undefined).then(() => {
props.onClose?.(true)
}).finally(() => {
setState({loading: false})
});
props.onClose?.()
}
useEffect(() => {
if (props.id) {
if (props.id > 0) {
if (props.type == 'news') {
article.getById(props.id).then(res => {
setGroups(res.content_group)
setTitle(res.title)
})
}
} else {
// 新增
setGroups([
[{
type: 'text',
content: '韩国国会当地时间14日16时举行全体会议就在野党阵营第二次提出的尹锡悦总统弹劾案进行表决。根据投票结果有204票赞成85票反对3票弃权8票无效弹劾案最终获得通过尹锡悦的总统职务立即停止。'
}],
[
{
type: 'text',
content: '韩国宪法法院将在180天内完成弹劾案审判程序。如果宪法法院作出弹劾案不成立的裁决尹锡悦将立即恢复总统职务如果宪法法院认可弹劾案成立尹锡悦将立即被罢免预计韩国将在明年4月至6月间举行大选。'
},
{
type: 'image',
content: 'https://zverse-on.oss-cn-shanghai.aliyuncs.com/metahuman/workbench/20241214/193c442df75.jpeg'
},
],
])
setTitle('韩国国会通过总统弹劾案 尹锡悦职务立即停止')
}
}
}, [props.id])
return (<Modal
title={'编辑文章'}
open={props.id >= 0}
maskClosable={false}
keyboard={false}
width={800}
onCancel={()=>props.onClose?.()}
okButtonProps={{loading: state.loading}}
onOk={handleSave}
>
<div className="article-title mt-5">
<div className="title">
<span className="text text-base"></span>
<span className="require ml-1 font-bold text-red-500">*</span>
</div>
<div className="box mt-1">
<Input rootClassName={state.msgTitle ? 'border-red-500' : ''} value={title} onChange={e => {
setTitle(e.target.value)
setState({msgTitle: e.target.value ? '' : '请输入标题内容'})
}} placeholder={'请输入文章标题'}/>
</div>
<div className="text-red-500">{state.msgTitle}</div>
</div>
<div className="aricle-body mt-3">
<div className="title">
<span className="text text-base"></span>
<span className="require ml-1 font-bold text-red-500">*</span>
</div>
<div className="box mt-1">
<ArticleGroup
errorMessage={state.msgGroup} editable groups={groups}
onChange={list => {
setGroups(() => list)
setState({msgGroup: (list.length == 0 || list[0].length == 0 || !list[0][0].content) ? '请输入正文文本内容' : ''});
}}
/>
</div>
</div>
</Modal>);
}