feat: 上传稿件处理

This commit is contained in:
renxiaodong
2025-08-11 22:05:48 +08:00
parent 7a6e696fc3
commit ab87185a86
10 changed files with 5907 additions and 74 deletions

View File

@ -220,7 +220,6 @@ export default {
size="large"
show-word-limit
maxLength={1000}
show-word-limit
disabled={props.checkLoading}
/>
</FormItem>
@ -327,7 +326,7 @@ export default {
<div class="flex items-center mb-16px">
{RESULT_LIST.map((item, index) => (
<div class="flex flex-col justify-center items-center flex-1 result-item" key={index}>
<span class="s1" style={{ color: item.color }}>{`${aiReview.value?.[item.value]}${
<span class="s1" style={{ color: item.color }}>{`${aiReview.value?.[item.value] ?? '-'}${
item.suffix || ''
}`}</span>
<span class="cts mt-4px !lh-20px !text-12px !color-#737478">{item.label}</span>
@ -356,7 +355,7 @@ export default {
<div class="flex items-center mb-16px">
{RESULT_LIST.map((item, index) => (
<div class="flex flex-col justify-center items-center flex-1 result-item" key={index}>
<span class="s1" style={{ color: item.color }}>{`${aiReview.value?.[item.value]}${
<span class="s1" style={{ color: item.color }}>{`${aiReview.value?.[item.value] ?? '-'}${
item.suffix || ''
}`}</span>
<span class="cts mt-4px !lh-20px !text-12px !color-#737478">{item.label}</span>

View File

@ -12,6 +12,7 @@ import {
Textarea,
} from '@arco-design/web-vue';
import { getTemplateUrlWriter, postWorksByLinkWriter, postWorksByFileWriter } from '@/api/all/generationWorkshop-writer.ts';
import { slsWithCatch } from '@/utils/stroage.ts';
import TextOverTips from '@/components/text-over-tips';
import icon1 from '@/assets/img/media-account/icon-feedback-fail.png';
@ -39,6 +40,7 @@ export default {
setup(props, { emit, expose }) {
const update = inject('update');
const router = useRouter();
const route = useRoute();
// 响应式状态
const visible = ref(false);
@ -136,7 +138,8 @@ export default {
// 跳转编辑
const goUpload = () => {
router.push(`/writer/manuscript/upload/${route.params.writerCode}/1`);
slsWithCatch('writerWaitUploadWorks', JSON.stringify(works.value));
router.push(`/writer/manuscript/upload/${route.params.writerCode}`);
onClose();
};
@ -228,7 +231,7 @@ export default {
<div key={item.id} class="rounded-8px bg-#fff px-8px py-8px flex justify-between items-center mt-8px">
<div class="flex-1 overflow-hidden flex items-center mr-12px">
<img src={item.cover} width="32" height="32" class="rounded-3px mr-8px" />
<TextOverTips class="text" context={item.title} />
<TextOverTips class="text !text-left" context={item.title} />
</div>
<icon-delete
size="16px"

View File

@ -7,6 +7,7 @@ import UploadSuccessModal from './upload-success-modal.vue';
import { EnumManuscriptType } from '@/views/creative-generation-workshop/manuscript/list/constants';
import { postWorksBatchWriter } from '@/api/all/generationWorkshop-writer.ts';
import { glsWithCatch, rlsWithCatch, slsWithCatch } from '@/utils/stroage.ts';
import icon1 from '@/assets/img/creative-generation-workshop/icon-photo.png';
import icon2 from '@/assets/img/creative-generation-workshop/icon-video.png';
@ -72,29 +73,33 @@ export default {
});
};
const onSubmit = async (check) => {
const onSubmit = async (action) => {
uploadLoading.value = true;
const filteredWorks = map(works.value, (work) => omit(work, 'videoInfo'));
const { code, data } = await postWorksBatchWriter({ works: filteredWorks });
if (code === 200) {
uploadLoading.value = false;
if (check) {
if (action === 'batchUpload') {
uploadSuccessModal.value?.open(workId);
} else {
router.push({ path: `/writer/manuscript/list/${route.params.writerCode}` });
if (action === 'uploadAndCheck') {
slsWithCatch('writerManuscriptCheckIds', [workId]);
router.push({ path: `/writer/manuscript/check/${route.params.writerCode}` });
} else {
router.push({ path: `/writer/manuscript/list/${route.params.writerCode}` });
}
}
}
};
const onUpload = async (e, check = false) => {
console.log('onUpload', works.value);
const onUpload = async (action) => {
formRef.value
?.validate()
.then(() => {
return validateDataSource();
})
.then(() => {
onSubmit(check);
onSubmit(action);
})
.catch((err) => {
console.log('catch');
@ -102,8 +107,8 @@ export default {
});
};
const onUploadAndCheck = (e) => {
onUpload(e, true);
const syncLocalStorage = () => {
slsWithCatch('writerWaitUploadWorks', JSON.stringify(works.value ?? []));
};
const handleReValidate = () => {
@ -134,6 +139,8 @@ export default {
selectCardInfo.value = {};
}
}
syncLocalStorage();
};
const renderFooterRow = () => {
@ -143,7 +150,7 @@ export default {
<Button size="medium" type="outline" onClick={onCancel} class="mr-12px">
取消上传
</Button>
<Button type="primary" size="medium" onClick={onUpload} loading={uploadLoading.value}>
<Button type="primary" size="medium" onClick={() => onUpload('batchUpload')} loading={uploadLoading.value}>
{uploadLoading.value ? '批量上传' : '批量上传'}
</Button>
</>
@ -154,10 +161,21 @@ export default {
<Button size="medium" type="outline" onClick={onCancel} class="mr-12px">
取消上传
</Button>
<Button size="medium" type="outline" onClick={onUpload} class="mr-12px" loading={uploadLoading.value}>
<Button
size="medium"
type="outline"
onClick={() => onUpload('singleUpload')}
class="mr-12px"
loading={uploadLoading.value}
>
上传
</Button>
<Button type="primary" size="medium" onClick={onUploadAndCheck} loading={uploadLoading.value}>
<Button
type="primary"
size="medium"
onClick={() => onUpload('uploadAndCheck')}
loading={uploadLoading.value}
>
上传并审核
</Button>
</>
@ -165,8 +183,12 @@ export default {
}
};
const getData = () => {
works.value = generateMockData();
selectCardInfo.value = cloneDeep(works.value[0] ?? {});
const _works = JSON.parse(glsWithCatch('writerWaitUploadWorks') ?? '[]')?.map((item) => ({
...item,
videoInfo: item?.videoInfo ? cloneDeep(item.videoInfo) : cloneDeep(INITIAL_VIDEO_INFO),
}));
works.value = _works;
selectCardInfo.value = cloneDeep(_works[0] ?? {});
};
const getCardClass = (item) => {
if (selectCardInfo.value.id === item.id) {
@ -184,6 +206,8 @@ export default {
works.value[index] = cloneDeep(val);
}
selectCardInfo.value = val;
syncLocalStorage();
};
const onUpdateVideoInfo = (newVideoInfo) => {
const index = works.value.findIndex((v) => v.id === selectCardInfo.value.id);
@ -191,11 +215,16 @@ export default {
works.value[index].videoInfo = cloneDeep(newVideoInfo);
}
selectCardInfo.value.videoInfo = { ...selectCardInfo.value.videoInfo, ...newVideoInfo };
syncLocalStorage();
};
onMounted(() => {
getData();
});
onUnmounted(() => {
rlsWithCatch('writerWaitUploadWorks');
});
return () => (
<>