项目同步
This commit is contained in:
parent
0827182db1
commit
4c8a962edd
|
@ -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%" },
|
||||
|
|
|
@ -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[] = [
|
||||
|
|
|
@ -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];
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -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,
|
||||
级别: ""
|
||||
},
|
||||
指标数值与得分: []
|
||||
};
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue