项目同步

This commit is contained in:
wcq 2023-08-11 15:05:21 +08:00
parent 0827182db1
commit 4c8a962edd
4 changed files with 175 additions and 97 deletions

View File

@ -7,11 +7,11 @@ const rateLevelConfig: RateLevelConfig = {
// AR: { badge: "3", ranking: "20%" },
// BR: { ranking: "30%" },
// CR: { ranking: "40%" },
AAAʀ: { badge: "1", ranking: "5%" },
AAʀ: { badge: "2", ranking: "10" },
Aʀ: { badge: "3", ranking: "20%" },
Bʀ: { ranking: "30%" },
Cʀ: { ranking: "40%" }
AAA: { badge: "1", ranking: "5%" },
AA: { badge: "2", ranking: "10" },
A: { badge: "3", ranking: "20%" },
B: { ranking: "30%" },
C: { ranking: "40%" }
// B: { ranking: "50%" },
// CCC: { ranking: "60%" },
// CC: { ranking: "80%" },

View File

@ -41,12 +41,25 @@ interface Indicator {
得分: number;
档位: string;
}
interface {
指标: string
数值: number
单位: string
权重: number
得分: number
}
interface RateResContent {
final_scope: number;
final_level: string;
level: string;
total_score: number;
indicator: Indicator[];
:{
级别:string,
总分:number
}
指标数值与得分:指标数值与得分[]
// final_scope: number;
// final_level: string;
// level: string;
// total_score: number;
// indicator: Indicator[];
}
const RateDataMock: RateData[] = [

View File

@ -258,17 +258,18 @@
:column-config="scope.row"
v-if="tableEditAble"
class="max-w-[12rem]"
:model-value="manDataEditTemp[scope.row?.key]"
:model-value="manDataEditTemp['经营问卷'][scope.row?.key]"
:size="'small'"
@update:model-value="(newVal)=>manDataEditTemp[scope.row?.key] = newVal"
@update:model-value="(newVal)=>manDataEditTemp['经营问卷'][scope.row?.key] = newVal"
></EditFormItem>
<div v-else>{{ manDataEditTemp[scope.row?.key] }}</div>
<div v-else>{{ manDataEditTemp['经营问卷'][scope.row?.key] }}</div>
</template>
<!-- <template #default="scope">-->
<!-- {{ manDataEditTemp["问卷数据"][scope.row?.key] }}-->
<!-- </template>-->
</el-table-column>
</el-table>
<div class="flex pt-2 items-center">
<div class="ml-auto mr-2">
<span class="mr-1">编辑
@ -282,11 +283,11 @@
</div>
<div v-if="detailEditTab == '企业填报数据-财报'">
<el-table
height="65vh"
max-height="65vh"
height="60vh"
max-height="60vh"
:span-method="arraySpanMethod"
style="overflow-x: hidden"
:data="bjDataConfig.企业填报数据.财报.columns"
:data="bjDataConfig.企业填报数据.财报.columns.filter(item=>item.key!=='是否审计' && item.key!=='会计事务所')"
border
>
<el-table-column align="center" label="科目">
@ -297,26 +298,28 @@
>
{{ scope.row?.name }}
</div>
<div v-else>
{{ scope.row?.name }}
</div>
</template>
</el-table-column>
<el-table-column
v-for="item in Object.keys(manDataEditTemp['财报数据'])"
v-for="item in ['2020年','2021年','2022年']"
:label="item"
align="center"
>
<template #default="scope">
<EditFormItem
:size="'small'"
v-if="tableEditAble"
:column-config="scope.row"
class="max-w-[12rem]"
:model-value='manDataEditTemp["财报数据"][item][scope.row?.key]'
@update:model-value='(newVal)=>manDataEditTemp["财报数据"][ item ][scope.row?.key] = newVal'
></EditFormItem>
<div v-else>{{ manDataEditTemp["财报数据"][item][scope.row?.key] }}</div>
<div v-if="tableEditAble">
<EditFormItem
:size="'small'"
:column-config="scope.row"
class="max-w-[12rem]"
:model-value='manDataEditTemp["财务问卷"][item][scope.row?.key]'
@update:model-value='(newVal)=>manDataEditTemp["财务问卷"][ item ][scope.row?.key] = newVal'
></EditFormItem>
</div>
<div v-else>{{ manDataEditTemp["财务问卷"][item][scope.row?.key] }}</div>
</template>
<!-- <template #default="scope">-->
<!-- {{-->
@ -327,6 +330,22 @@
<!-- </template>-->
</el-table-column>
</el-table>
<div class="mt-4">
<span class=" mx-2 " v-for="item in ['是否审计','会计事务所']">
<span class="mx-2 ">{{ item }}:</span>
<span v-if="tableEditAble">
<EditFormItem
:size="'small'"
:column-config="bjDataConfig.企业填报数据.财报.columns.find(col=>col.key==item)"
class="max-w-[12rem]"
:model-value='manDataEditTemp["财务问卷"][item]'
@update:model-value='(newVal)=>manDataEditTemp["财务问卷"][ item] = newVal'
></EditFormItem>
</span>
<span v-else>{{ manDataEditTemp["财务问卷"][item] }}</span>
</span>
</div>
<div class="flex pt-2 items-center">
<div class="ml-auto mr-2">
<span class="mr-1">编辑
@ -433,11 +452,12 @@ const detailEditTab = ref("企业填报数据-问卷");
const tableEditAble = ref(false)
const rowTemp = ref<RateData | null>(null);
const manDataEditTemp = ref({
"问卷数据": {},
"财报数据": {
"2023": {},
"2022": {},
"2021": {},
"经营问卷": {},
"财务问卷": {
资产负债表: {},
利润表: {},
是否审计: null,
会计事务所: null
}
});
@ -522,15 +542,16 @@ function showDetailEdit(row: RateData) {
rowTemp.value = res.data
if (!rowTemp.value?.man_data) {
manDataEditTemp.value = {
"问卷数据": {},
"财报数据": {
"2023": {},
"2022": {},
"2021": {},
"经营问卷": {},
"财务问卷": {
资产负债表: {},
利润表: {},
是否审计: null,
会计事务所: null
}
};
} else {
// manDataEditTemp.value = JSON.parse(rowTemp.value.man_data);
manDataEditTemp.value = JSON.parse(rowTemp.value.man_data);
}
// if (!rowTemp.value?.file_data) {
@ -557,7 +578,7 @@ function showDetailEdit(row: RateData) {
const arraySpanMethod = ({row, column, rowIndex, columnIndex}) => {
if (row.type == "label") {
return [1, Object.keys(manDataEditTemp.value['财报数据']).length + 1];
return [1, 3 + 1];
}
};

View File

@ -128,13 +128,17 @@
prop="rate_time"
width="180"
></el-table-column>
<el-table-column align="center" label="操作" width="270">
<el-table-column align="center" label="操作" width="340">
<template #default="scope">
<div class="flex flex-c">
<el-button type="success" @click="doRate(scope.row)" size="small"
>评级
</el-button
>
<el-button type="success" @click="downReport(scope.row)" size="small"
>报告下载
</el-button
>
<el-button
type="primary"
@click="doPublish(scope.row)"
@ -190,8 +194,8 @@
<div class="flex">
<div style="font-size: 1.1rem" class="flex">
<div>{{ rowTemp.company_name }}</div>
<div class="ml-8">等级:{{ detailData.final_level }}</div>
<div class="ml-8">得分:{{ detailData.final_scope }}</div>
<div class="ml-8">等级:{{ detailData.评级结果.级别 }}</div>
<div class="ml-8">得分:{{ detailData.评级结果.总分 }}</div>
</div>
<div class="ml-auto flex flex-c" style="font-size: 0.9rem">
@ -205,63 +209,55 @@
<div class="flex-1">
<el-tabs v-model="activeName">
<el-tab-pane label="模型指标" name="模型指标">
<el-table :data="detailData.indicator" height="68vh" border>
<el-table-column prop="一级指标" label="一级指标">
<template #default="scope">
{{ ellipsis(scope.row["一级指标"]) }}
</template>
<el-table :data="detailData.指标数值与得分" height="68vh" border>
<el-table-column prop="指标" label="指标" width="320">
<!-- <template #default="scope">-->
<!-- {{ scope.row["指标"] }}-->
<!-- </template>-->
</el-table-column>
<el-table-column prop="二级指标" label="二级指标">
<template #default="scope">
{{ ellipsis(scope.row["二级指标"]) }}
</template>
<el-table-column prop="数值" label="数值">
</el-table-column>
<el-table-column prop="三级指标" label="三级指标">
<template #default="scope">
{{ ellipsis(scope.row["三级指标"]) }}
</template>
<el-table-column prop="单位" label="单位">
</el-table-column>
<el-table-column prop="四级指标" label="四级指标">
<template #default="scope">
{{ ellipsis(scope.row["四级指标"]) }}
</template>
<el-table-column prop="权重" label="权重">
</el-table-column>
<el-table-column prop="数值" label="实际值">
<template #default="scope">
{{ ellipsis(scope.row["数值"]) }}
</template>
</el-table-column>
<el-table-column prop="单位" label="单位"></el-table-column>
<el-table-column
prop="得分"
label="得分"
></el-table-column>
</el-table
>
</el-tab-pane>
<el-tab-pane label="调整项" name="调整项">
<el-table
:data="
Object.keys(detailData['调整项']).map(item => {
return {
key: item,
value: detailData['调整项'][item].value,
scope: detailData['调整项'][item].scope
};
})
"
height="68vh"
border
>
<el-table-column prop="key" label="调整项名称">
</el-table-column>
<el-table-column prop="value" label="调整项值">
</el-table-column>
<el-table-column prop="scope" label="调整项值">
<el-table-column prop="得分" label="得分">
</el-table-column>
<!-- <el-table-column prop="单位" label="单位"></el-table-column>-->
<!-- <el-table-column-->
<!-- prop="得分"-->
<!-- label="得分"-->
<!-- ></el-table-column>-->
</el-table
>
</el-tab-pane>
<!-- <el-tab-pane label="调整项" name="调整项">-->
<!-- <el-table-->
<!-- :data="-->
<!-- Object.keys(detailData['调整项']).map(item => {-->
<!-- return {-->
<!-- key: item,-->
<!-- value: detailData['调整项'][item].value,-->
<!-- scope: detailData['调整项'][item].scope-->
<!-- };-->
<!-- })-->
<!-- "-->
<!-- height="68vh"-->
<!-- border-->
<!-- >-->
<!-- <el-table-column prop="key" label="调整项名称">-->
<!-- </el-table-column>-->
<!-- <el-table-column prop="value" label="调整项值">-->
<!-- </el-table-column>-->
<!-- <el-table-column prop="scope" label="调整项值">-->
<!-- </el-table-column>-->
<!-- </el-table-->
<!-- >-->
<!-- </el-tab-pane>-->
</el-tabs>
</div>
</div>
@ -333,6 +329,55 @@ function doRate(row: RateData) {
});
}
// Blob
function blobToText(blob) {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onload = () => {
resolve(reader.result);
};
reader.onerror = () => {
reject(new Error("Failed to read blob."));
};
reader.readAsText(blob);
});
}
function downReport(row: RateData) {
// ElMessage.success("")
api.post("/wd-smebiz/smebiz_rate/company_rate/get_report_admin", {id: row.id}, {responseType: "blob"})
.then(response => {
console.log(response)
const url = window.URL.createObjectURL(new Blob([response.data]));
const link = document.createElement('a');
link.href = url;
const contentDisposition = response.headers['content-disposition'];
let decodedFilename = "报告.docx"
if (contentDisposition) {
const filenameMatch = contentDisposition.match(/filename\*?=utf-8''([^;]+)/);
if (filenameMatch && filenameMatch.length > 1) {
const encodedFilename = filenameMatch[1];
decodedFilename = decodeURIComponent(encodedFilename);
}
}
link.setAttribute('download', decodedFilename); //
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
ElMessage.success("开始下载")
}).catch(async (error) => {
console.error(error);
// ElMessage.warning(e.response?.data?.detail || "");
if (error.response && error.response.data instanceof Blob) {
const errorText = await blobToText(error.response.data);
const data = JSON.parse(errorText)
ElMessage.warning(data.detail)
} else {
ElMessage.warning("错误")
}
});
}
function doPublish(row: RateData) {
api
.post("/wd-smebiz/smebiz_rate/company_rate/update", {
@ -379,15 +424,14 @@ function showDetail(row: RateData) {
if (rowTemp.value?.rate_data) {
const data = JSON.parse(rowTemp.value.rate_data);
console.log("data", data);
detailData.value = data.content;
detailData.value = data.data;
} else {
detailData.value = {
final_scope: null,
final_level: null,
total_score: null,
level: null,
调整项: {},
indicator: []
评级结果: {
总分: 0,
级别: ""
},
指标数值与得分: []
};
}