363 lines
10 KiB
Vue
363 lines
10 KiB
Vue
|
|
<template>
|
|||
|
|
<div class="dialogZ">
|
|||
|
|
<el-dialog v-model="dialogVisible" v-loading="loading" width="500" :before-close="handleClose" modal-class="modal_class">
|
|||
|
|
<template #header>
|
|||
|
|
<text class="dialog_title">财报信息填写</text>
|
|||
|
|
</template>
|
|||
|
|
|
|||
|
|
<div class="container">
|
|||
|
|
<el-form label-position="top" class="formthis" ref="formRef" :model="queryFrom" :rules="rules">
|
|||
|
|
<el-form-item label="文件年份" style="width: 100%" prop="year">
|
|||
|
|
<el-select v-model="queryFrom.year" placeholder="请选择年份" style="width: 100%">
|
|||
|
|
<el-option :label="item.label" :value="item.value" v-for="(item, index) in YEAR" :key="index"></el-option>
|
|||
|
|
</el-select>
|
|||
|
|
</el-form-item>
|
|||
|
|
|
|||
|
|
<el-form-item label="文件类型" style="width: 100%" prop="reportType">
|
|||
|
|
<el-select v-model="queryFrom.reportType" placeholder="请选择类型" style="width: 100%">
|
|||
|
|
<el-option label="一季报" value="2"></el-option>
|
|||
|
|
<el-option label="半年报" value="1"></el-option>
|
|||
|
|
<el-option label="三季报" value="3"></el-option>
|
|||
|
|
<el-option label="年报" value="0"></el-option>
|
|||
|
|
<el-option label="日常公告" value="5"></el-option>
|
|||
|
|
</el-select>
|
|||
|
|
</el-form-item>
|
|||
|
|
|
|||
|
|
<!-- <el-form-item label="文件类型" style="width: 100%" prop="reportType">
|
|||
|
|
<el-select v-model="queryFrom.reportType" placeholder="请选择类型" style="width: 100%">
|
|||
|
|
<el-option label="一季报" value="2"
|
|||
|
|
v-if="(accountType == 1 && queryFrom.year <= 2025) || accountType == 0"></el-option>
|
|||
|
|
<el-option label="半年报" value="1"
|
|||
|
|
v-if="(accountType == 1 && queryFrom.year <= 2025) || (accountType == 0 && queryFrom.year <= 2025)"></el-option>
|
|||
|
|
<el-option label="三季报" value="3"
|
|||
|
|
v-if="(accountType == 1 && queryFrom.year < 2025) || (accountType == 0 && queryFrom.year < 2026)"></el-option>
|
|||
|
|
<el-option label="年报" value="0" v-if="
|
|||
|
|
(accountType == 1 && queryFrom.year != 2025 && queryFrom.year != 2024 && queryFrom.year < 2025) ||
|
|||
|
|
(accountType == 0 && queryFrom.year < 2025)
|
|||
|
|
"></el-option>
|
|||
|
|
<el-option label="日常公告" value="5"
|
|||
|
|
v-if="(textCheckSwitch == 1 && accountType == 1 && queryFrom.year <= 2025) || accountType == 0"></el-option>
|
|||
|
|
</el-select>
|
|||
|
|
</el-form-item> -->
|
|||
|
|
<!--
|
|||
|
|
<el-form-item label="算法类型" style="width: 100%" prop="sdfx"
|
|||
|
|
v-if="Session.get('userData').sdfxFlag == 1 && queryFrom.reportType == 0">
|
|||
|
|
<el-select v-model="queryFrom.sdfx" placeholder="请选择类型" style="width: 100%"
|
|||
|
|
@change="errorChange">
|
|||
|
|
<el-option label="准确性优先" value="0"></el-option>
|
|||
|
|
<el-option label="全面性优先" value="1"></el-option>
|
|||
|
|
</el-select>
|
|||
|
|
</el-form-item>
|
|||
|
|
<text :style="{ marginTop: hasError ? '0px' : '-15px', fontSize: '12px', color: 'red' }"
|
|||
|
|
v-if="queryFrom.sdfx == 0">*算法尽可能保证识别的准确性,以表格中的数据识别为主</text>
|
|||
|
|
|
|||
|
|
<text :style="{ marginTop: hasError ? '0px' : '-15px', fontSize: '12px', color: 'red' }"
|
|||
|
|
v-if="queryFrom.sdfx == 1">*全文检查,尽可能发现潜在问题,存在一定误识别率</text> -->
|
|||
|
|
|
|||
|
|
<el-form-item label="" prop="fileName">
|
|||
|
|
<Upload
|
|||
|
|
ref="uploadRef"
|
|||
|
|
:style="{
|
|||
|
|
transform: !uploadPercent ? 'scaleY(1)' : 'scaleY(0)',
|
|||
|
|
opacity: !uploadPercent ? '1' : '0',
|
|||
|
|
height: !uploadPercent ? '200px' : '0',
|
|||
|
|
}"
|
|||
|
|
class="upload"
|
|||
|
|
@handleAvatarSuccess="handleAvatarSuccess"
|
|||
|
|
@onProgress="onUploadProgress"
|
|||
|
|
@onChange="onUploadChange"
|
|||
|
|
/>
|
|||
|
|
</el-form-item>
|
|||
|
|
<el-popover :visible="isPdfTips" placement="top" :width="400">
|
|||
|
|
<div style="display: flex; align-items: center">
|
|||
|
|
<el-icon color="#FFB100">
|
|||
|
|
<WarningFilled />
|
|||
|
|
</el-icon>
|
|||
|
|
<p style="font-weight: bold; marin-gleft: 5px">确认使用PDF格式?</p>
|
|||
|
|
</div>
|
|||
|
|
<p style="margin-top: 10px">您选择的文件中包含pdf文件,推荐使用word文件进行检校,可获得更好检校结果。是否继续使用pdf文件做检校?</p>
|
|||
|
|
<div style="text-align: right; margin: 0">
|
|||
|
|
<el-button size="small" @click="delFile">取消</el-button>
|
|||
|
|
<el-button size="small" type="primary" @click="isPdfTips = false"> 确认 </el-button>
|
|||
|
|
</div>
|
|||
|
|
<template #reference>
|
|||
|
|
<div
|
|||
|
|
class="file_name"
|
|||
|
|
:style="{
|
|||
|
|
transform: !uploadPercent ? 'scaleY(0)' : 'scaleY(1)',
|
|||
|
|
opacity: !uploadPercent ? '0' : '1',
|
|||
|
|
}"
|
|||
|
|
>
|
|||
|
|
<img :src="iconFile" />
|
|||
|
|
<div style="flex: 1">
|
|||
|
|
{{ fileName }}
|
|||
|
|
<el-progress :percentage="uploadPercent" />
|
|||
|
|
</div>
|
|||
|
|
|
|||
|
|
<img :src="iconClose" @click="delFile" style="width: 16px; height: 16px; margin-top: 15px; margin-left: 10px; cursor: pointer" />
|
|||
|
|
</div>
|
|||
|
|
</template>
|
|||
|
|
<template slot="content">
|
|||
|
|
<div>
|
|||
|
|
<p>这是自定义的确认内容</p>
|
|||
|
|
<p>可以包含更多的HTML和样式</p>
|
|||
|
|
</div>
|
|||
|
|
</template>
|
|||
|
|
</el-popover>
|
|||
|
|
</el-form>
|
|||
|
|
</div>
|
|||
|
|
<template #footer>
|
|||
|
|
<div class="dialog-footer">
|
|||
|
|
<ZButton btnType="cancel" btnWidth="56px" btnHeight="32px" @btnClick="handleClose"> 取消 </ZButton>
|
|||
|
|
<ZButton
|
|||
|
|
v-loading="loading"
|
|||
|
|
btnType="submit"
|
|||
|
|
btnWidth="56px"
|
|||
|
|
btnHeight="32px"
|
|||
|
|
@btnClick="submit"
|
|||
|
|
:btnDisabled="!canSubmit"
|
|||
|
|
style="margin-left: 10px"
|
|||
|
|
>
|
|||
|
|
确认
|
|||
|
|
</ZButton>
|
|||
|
|
</div>
|
|||
|
|
</template>
|
|||
|
|
</el-dialog>
|
|||
|
|
</div>
|
|||
|
|
</template>
|
|||
|
|
|
|||
|
|
<script setup lang="ts" name="loginIndex">
|
|||
|
|
import { ref, reactive, nextTick } from 'vue';
|
|||
|
|
import { ElMessage } from 'element-plus';
|
|||
|
|
import Upload from '/@/components/Upload/index.vue';
|
|||
|
|
import ZButton from '/@/components/ZButton/index.vue';
|
|||
|
|
import { getReportAdd } from '/@/api/dashboard/index';
|
|||
|
|
import iconFile from '/@/assets/images/icon_file_big.png';
|
|||
|
|
import iconClose from '/@/assets/images/icon_close.png';
|
|||
|
|
import { YEAR } from '/@/utils/constants';
|
|||
|
|
import { useUserInfo } from '/@/stores/userInfo';
|
|||
|
|
import { addBatch, getTextCheckSwitch } from '/@/api/api';
|
|||
|
|
import { WarningFilled } from '@element-plus/icons-vue';
|
|||
|
|
import { Session } from '/@/utils/storage';
|
|||
|
|
|
|||
|
|
const hasError = ref(false);
|
|||
|
|
function errorChange(val) {
|
|||
|
|
// el-form-item__error
|
|||
|
|
const myElement = document.querySelector('.el-form-item__error');
|
|||
|
|
hasError.value = myElement ? true : false;
|
|||
|
|
}
|
|||
|
|
const show = ref(true);
|
|||
|
|
const stroes = useUserInfo();
|
|||
|
|
const emit = defineEmits(['handleClose']);
|
|||
|
|
const queryFrom = ref({});
|
|||
|
|
const loading = ref(false);
|
|||
|
|
const uploadPercent = ref(null);
|
|||
|
|
const fileName = ref('');
|
|||
|
|
const canSubmit = ref(true);
|
|||
|
|
|
|||
|
|
const textCheckSwitch = ref(0);
|
|||
|
|
async function getTextCheckSwitchFn() {
|
|||
|
|
let { code, data } = await getTextCheckSwitch({});
|
|||
|
|
if (code == 200) {
|
|||
|
|
textCheckSwitch.value = data;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
const rules = reactive({
|
|||
|
|
year: [{ required: true, message: '请选择年份', trigger: 'blur' }],
|
|||
|
|
fileName: [{ required: true, message: '请选择文件', trigger: 'blur' }],
|
|||
|
|
reportType: [{ required: true, message: '请选择类型', trigger: 'blur' }],
|
|||
|
|
sdfx: [{ required: true, message: '请选择算法类型', trigger: 'blur' }],
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
function delFile() {
|
|||
|
|
uploadPercent.value = null;
|
|||
|
|
queryFrom.value.filePath = null;
|
|||
|
|
queryFrom.value.fileName = null;
|
|||
|
|
queryFrom.value.title = null;
|
|||
|
|
uploadRef.value.clearFile();
|
|||
|
|
isPdfTips.value = false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function onUploadChange(name: string) {
|
|||
|
|
fileName.value = name;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function onUploadProgress(percent: number) {
|
|||
|
|
canSubmit.value = false;
|
|||
|
|
uploadPercent.value = Number(percent).toFixed(2);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
const isPdfTips = ref(false);
|
|||
|
|
// 文件上传完成之后
|
|||
|
|
function handleAvatarSuccess(item) {
|
|||
|
|
console.log('🚀 ~ handleAvatarSuccess ~ item:', item);
|
|||
|
|
canSubmit.value = true;
|
|||
|
|
queryFrom.value.filePath = item.filePath;
|
|||
|
|
queryFrom.value.fileName = item.fileName;
|
|||
|
|
queryFrom.value.title = item.title;
|
|||
|
|
queryFrom.value.fileMd5 = item.fileMd5;
|
|||
|
|
|
|||
|
|
let extension = item.fileName.split('.').pop();
|
|||
|
|
console.log('🚀 ~ handleAvatarSuccess ~ extension:', extension);
|
|||
|
|
// nextTick(() => {
|
|||
|
|
// setTimeout(() => {
|
|||
|
|
// if (extension == 'pdf' || extension == 'PDF') {
|
|||
|
|
// isPdfTips.value = true;
|
|||
|
|
// } else {
|
|||
|
|
// isPdfTips.value = false;
|
|||
|
|
// }
|
|||
|
|
// }, 200);
|
|||
|
|
// });
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
const formRef = ref(null);
|
|||
|
|
|
|||
|
|
async function submit() {
|
|||
|
|
if (loading.value) {
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!fileName.value) {
|
|||
|
|
ElMessage.error('请先上传文件');
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
await formRef.value.validate();
|
|||
|
|
loading.value = true;
|
|||
|
|
let { code } = await getReportAdd({
|
|||
|
|
...queryFrom.value,
|
|||
|
|
});
|
|||
|
|
loading.value = false;
|
|||
|
|
|
|||
|
|
if (code == 200) {
|
|||
|
|
ElMessage.success('系统分析中,耗时约5分钟');
|
|||
|
|
hideModal();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
const years = ref([]);
|
|||
|
|
|
|||
|
|
// 0:正式 1:试用
|
|||
|
|
const accountType = ref();
|
|||
|
|
const dialogVisible = ref(false);
|
|||
|
|
function showModal() {
|
|||
|
|
dialogVisible.value = true;
|
|||
|
|
getTextCheckSwitchFn();
|
|||
|
|
|
|||
|
|
accountType.value = Session.get('userData').accountType;
|
|||
|
|
console.log('🚀 ~ showModal ~ accountType.value:', accountType.value);
|
|||
|
|
|
|||
|
|
// if (Session.get('userData').accountType == 1) {
|
|||
|
|
// // 0:正式 1:试用
|
|||
|
|
// }
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function handleClose() {
|
|||
|
|
hideModal();
|
|||
|
|
isPdfTips.value = false;
|
|||
|
|
}
|
|||
|
|
const uploadRef = ref();
|
|||
|
|
async function hideModal() {
|
|||
|
|
uploadRef.value.clearFile();
|
|||
|
|
|
|||
|
|
queryFrom.value.filePath = null;
|
|||
|
|
queryFrom.value.fileName = null;
|
|||
|
|
queryFrom.value.title = null;
|
|||
|
|
queryFrom.value.year = null;
|
|||
|
|
queryFrom.value.reportType = null;
|
|||
|
|
|
|||
|
|
uploadPercent.value = null;
|
|||
|
|
dialogVisible.value = false;
|
|||
|
|
|
|||
|
|
emit('handleClose');
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
defineExpose({
|
|||
|
|
hideModal,
|
|||
|
|
showModal,
|
|||
|
|
});
|
|||
|
|
</script>
|
|||
|
|
|
|||
|
|
<style scoped lang="scss">
|
|||
|
|
.dialogZ {
|
|||
|
|
:deep(.el-overlay) {
|
|||
|
|
background-color: var(--mainColor);
|
|||
|
|
backdrop-filter: var(--backFilter);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.container {
|
|||
|
|
font-family: PingFang SC;
|
|||
|
|
width: 100%;
|
|||
|
|
border-top: 1px solid #f6f6f6;
|
|||
|
|
margin-top: -10px;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.formthis {
|
|||
|
|
width: 100%;
|
|||
|
|
display: flex;
|
|||
|
|
flex-direction: column;
|
|||
|
|
text-align: left;
|
|||
|
|
width: 100%;
|
|||
|
|
gap: 20px;
|
|||
|
|
margin-top: 10px;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.el-select {
|
|||
|
|
:deep(.el-input__wrapper) {
|
|||
|
|
border: 1px solid #f0f2f5;
|
|||
|
|
box-shadow: 0 0 0 0 !important;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.dialog-footer {
|
|||
|
|
display: flex;
|
|||
|
|
float: right;
|
|||
|
|
padding-bottom: 30px;
|
|||
|
|
margin-top: 80px;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.modal_class {
|
|||
|
|
background-color: red;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
:deep(.el-form-item) {
|
|||
|
|
margin-bottom: 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.dialog_title {
|
|||
|
|
color: #19213d;
|
|||
|
|
text-align: center;
|
|||
|
|
font-size: 18px;
|
|||
|
|
font-style: normal;
|
|||
|
|
font-weight: 500;
|
|||
|
|
line-height: 23.4px;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.file_name {
|
|||
|
|
border: 1px solid #f6f6f6;
|
|||
|
|
border-radius: 10px;
|
|||
|
|
padding: 16px;
|
|||
|
|
display: flex;
|
|||
|
|
transition: all 0.2s ease-in-out;
|
|||
|
|
transform-origin: top;
|
|||
|
|
align-items: center;
|
|||
|
|
|
|||
|
|
img {
|
|||
|
|
width: 32px;
|
|||
|
|
height: 32px;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
:deep(.el-select__wrapper) {
|
|||
|
|
border: 1px solid #f0f2f5;
|
|||
|
|
box-shadow: 0 0 0 rgba($color: #000000, $alpha: 0);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.upload {
|
|||
|
|
transition: all 0.2s ease-in-out;
|
|||
|
|
transform-origin: top;
|
|||
|
|
}
|
|||
|
|
</style>
|