c9f12146 by lxs

数据定价更新

1 parent 5b9b1b70
......@@ -78,7 +78,6 @@ const routes: RouteRecordRaw[] = [
sidebar: false,
breadcrumb: false,
cache: true,
reuse: true,
editPage: true,
activeMenu: '/data-pricing/pricing-manage/price-config'
},
......@@ -109,7 +108,6 @@ const routes: RouteRecordRaw[] = [
sidebar: false,
breadcrumb: false,
cache: true,
reuse: true,
editPage: true,
activeMenu: '/data-pricing/pricing-manage/price-calculate'
},
......
......@@ -77,7 +77,7 @@ const costForm = ref({
placeholder: "请选择",
clearable: true,
required: true,
visible: false,
visible: true,
popperClass: 'date-year-popper',
disabledDate: (date) => {
const curr = new Date();
......@@ -92,7 +92,7 @@ const costForm = ref({
placeholder: "请选择",
clearable: true,
required: true,
visible: false,
visible: true,
style: { width: 'calc(33.33% - 70px)', 'margin-right': '8px' },
popperClass: 'date-month-popper',
disabledDate: (date) => {
......@@ -321,6 +321,7 @@ const getCostData = () => {
})
levelList.level1.map(l => allMapList.value.push(l));
setAllMapList(levelList, allMapList.value, 2);
}).catch((res) => {
loading.value = false;
});
......@@ -339,10 +340,10 @@ const setAllMapList = (mapObj, arr, level) => {
const setStep = async () => {
const info = costFormInfo.value;
await setFormItems(info, 'cost');
costForm.value.items[0].disabled = step.value > 0;
costForm.value.items[1].visible = step.value == 1;
costForm.value.items[2].visible = step.value == 1;
costForm.value.items[3].visible = step.value == 1;
// costForm.value.items[0].disabled = step.value > 0;
// costForm.value.items[1].visible = step.value == 1;
// costForm.value.items[2].visible = step.value == 1;
// costForm.value.items[3].visible = step.value == 1;
if (step.value == 1) {
setSumRow();
}
......@@ -793,6 +794,61 @@ const btnClick = async (btn, bType = null) => {
}
};
const initTableFileds = () => {
let fields = [
{
label: "累计投入", field: "total", width: 120, align: 'right', getName: (scope) => {
return changeNum(scope.row.total, 2, true);
}
},
]
const hasLevel1 = checkedList.value.find(c => c.level == 1);
if (hasLevel1) {
fields.splice(-1, 0, { label: "指标", field: "level1", width: 120 });
}
const hasLevel2 = checkedList.value.find(c => c.level == 2);
if (hasLevel2) {
fields.splice(-1, 0, { label: "一级分类", field: "level2", width: 120 });
}
const hasLevel3 = checkedList.value.find(c => c.level == 3);
if (hasLevel3) {
fields.splice(-1, 0, { label: "二级分类", field: "level3", width: 120 });
}
const hasLevel4 = checkedList.value.find(c => c.level == 4);
if (hasLevel4) {
fields.splice(-1, 0, { label: "三级分类", field: "level4", width: 120 });
}
tableField.value.splice(0);
tableField.value.push(...fields);
initField.value = JSON.parse(JSON.stringify(tableField.value));
const datas = JSON.parse(JSON.stringify(checkedData.value));
datas.sort((a, b) => a.code.localeCompare(b.code));
const dGuid = datas.map(d => d.guid);
let tDatas = tableData.value.filter(t => dGuid.indexOf(t.guid) > -1);
datas.forEach((td, t) => {
if (tGuids.indexOf(td.guid) == -1) {
tDatas.splice(t, 0, td)
} else {
tDatas.map(d => {
if (d.guid == td.guid) {
d.name = td.name;
d.level1 = td.level1;
d.level2 = td.level2;
d.level3 = td.level3;
d.level4 = td.level4;
}
})
}
})
tableData.value.splice(0);
tableData.value = tDatas;
// if (tGuids.length > 0 && costFormInfo.value.baseDate && costFormInfo.value.investYear) {
// setTableFields(costFormInfo.value);
// besure.value = true;
// }
getMergeRow();
};
const setShowLevel4 = () => {
nextTick(() => {
const box4 = document.querySelectorAll('.grid-panel-box.box3 .grid-items');
......@@ -1368,33 +1424,27 @@ watch(showLevel4, (newVal, oldVal) => {
<template>
<div class="container_wrap">
<div class="content_main">
<div class="top_tool_wrap">
<!-- <div class="top_tool_wrap">
<StepBar :steps-info="stepsInfo" />
</div>
<div class="operator_panel_wrap" :style="{ 'min-height': step == 0 ? 'calc(100% - 112px)' : 'unset' }"
v-loading="loading">
<ContentWrap title="入表类型" description="" :expandSwicth="false" v-show="step == 1">
<Form ref="entryFormRef" :itemList="entryForm.items" formId="dam-base-form" :rules="entryForm.rules"
col="col3" @selectChange="selectChange" />
</ContentWrap>
</div> -->
<div class="operator_panel_wrap" :style="{ 'min-height': 'unset' }" v-loading="loading">
<div class="v-tip" v-show="step == 0">
<div class="tip-icon"></div>
<div class="tip-des">
本工具提供的入表评估结果仅为初步测算参考,基于用户输入参数生成,不代表最终入表金额。实际入表需遵循《企业数据资源相关会计处理暂行规定》及会计准则要求,经专业审计机构确认后方可生效。
</div>
</div>
<ContentWrap :title="step == 0 ? '设置成本项' : step == 1 ? '填写成本明细' : '文件预览'"
description=""
:expandSwicth="false" :style="step == 1 ? { 'margin-top': '16px' } : {}">
<ContentWrap :title="step == 0 ? '设置成本项' : '文件预览'" description="" :expandSwicth="false"
:style="step == 1 ? { 'margin-top': '16px' } : {}">
<div class="table_tool_wrap">
<Form ref="costFormRef" :itemList="costForm.items" formId="dam-base-form" :rules="costForm.rules" col="col3"
@btnClick="btnClick" @selectChange="selectChange" />
<div class="tool_btn" v-if="step == 2">
<div class="tool_btn" v-if="step == 1">
<el-button type="primary" @click="exportClick">下载文件</el-button>
<!-- <el-button type="primary" plain @click="senMessage">入表咨询</el-button> -->
</div>
</div>
<div class="grid-box-wrap" v-show="step == 0">
<div class="grid-box-wrap" v-show="step == 3">
<!-- 头部标题 -->
<div class="grid-panel-wrap header" :class="{ col4: showLevel4 }">
<template v-for="(list, l) in gridList" :key="'panel'+l">
......@@ -1497,14 +1547,14 @@ watch(showLevel4, (newVal, oldVal) => {
</div>
</div>
</div>
<div class="table_panel_wrap" v-show="step > 0">
<div class="amount_tool" v-if="step == 1">
<div class="table_panel_wrap">
<div class="amount_tool">
<span class="amount_text">累计投入:</span>
<span class="amount_num">{{ changeNum(amount, 2, true) }}</span>
<span></span>
</div>
<div class="table_panel">
<el-table id="cost-table" v-show="step == 1" ref="costTableRef" :data="tableData"
<el-table id="cost-table" v-show="step == 0" ref="costTableRef" :data="tableData"
:span-method="tableSpanMethod" :summary-method="tableSummaryMethod" show-summary border
:cell-class-name="isMergedCell">
<el-table-column v-for="(item, i) in tableField" :label="item.label" :width="item.width"
......@@ -1525,7 +1575,7 @@ watch(showLevel4, (newVal, oldVal) => {
</template>
</el-table-column>
</el-table>
<el-table id="entry-table" ref="entryTableRef" :data="transposedData" stripe border v-show="step == 2">
<el-table id="entry-table" ref="entryTableRef" :data="transposedData" stripe border v-show="step == 1">
<el-table-column prop="title" label="项目" :width="140">
<template v-slot="{ row }">
<span>{{ setLabel(row.title) }}</span>
......@@ -1545,14 +1595,19 @@ watch(showLevel4, (newVal, oldVal) => {
</div>
</div>
</ContentWrap>
<ContentWrap title="入表类型" description="" :expandSwicth="false" v-show="step == 0">
<Form ref="entryFormRef" :itemList="entryForm.items" formId="dam-base-form" :rules="entryForm.rules"
col="col3" @selectChange="selectChange" />
</ContentWrap>
</div>
</div>
<div class="tool_btns">
<div class="btns">
<el-button @click="btnClick({ value: 'refresh' })">重置</el-button>
<el-button @click="btnClick({ value: 'prev' })" v-if="step == 1">上一步</el-button>
<el-button @click="btnClick({ value: 'next' })" v-if="step == 0">入表</el-button>
<!-- <el-button @click="btnClick({ value: 'prev' })" v-if="step == 1">上一步</el-button>
<el-button type="primary" @click="btnClick({ value: 'prev' })" v-if="step == 2">上一步</el-button>
<el-button type="primary" @click="btnClick({ value: 'next' })" v-if="step < 2">下一步</el-button>
<el-button type="primary" @click="btnClick({ value: 'next' })" v-if="step < 2">下一步</el-button> -->
</div>
</div>
</div>
......@@ -1848,7 +1903,7 @@ watch(showLevel4, (newVal, oldVal) => {
background: #FFFBF2;
border: 1px solid rgba(255, 241, 212, 1);
border-radius: 4px;
margin: 5px 0px 8px;
margin: 16px 0px 8px;
padding: 2px 0px;
.tip-icon {
......
......@@ -52,11 +52,13 @@ const dictionaryData: any = ref([]);
const diseaseData: any = ref([]);
const qualityScoreData: any = ref({});
const disScore: any = ref([]);
const exportData: any = ref([]);
const buildInData: any = ref([]);
const dataUsage = ref({
field: '',
dictValue: ''
});
// 基础设置
const baseConfigFormRef = ref();
const baseConfigFormItems: any = ref([
......@@ -143,8 +145,13 @@ const tableLoading = ref(false);
const dataTransactionPrice: any = ref('');
const setFormItems = (info = null) => {
let datas: any = info || flowDetail.value || {};
const dData = datas.dictionaryJson ? JSON.parse(datas.dictionaryJson) : {};
datas = { ...datas, ...dData };
const dictData = datas.dictionaryJson ? JSON.parse(datas.dictionaryJson) : {};
const builtIndicators = datas.builtIndicators || [];
let buildData = {};
builtIndicators.map(item => {
buildData[`build_${item.guid}`] = item.targetValue;
});
datas = { ...datas, ...dictData, ...buildData };
baseConfigFormItems.value.map(item => {
item.default = datas[item.field] || '';
item.label == '数据用途' && (dataUsage.value.dictValue = datas[item.field] || '');
......@@ -266,8 +273,10 @@ const getDetail = () => {
typeMap.value.modelGuid.unshift(mtem);
baseConfigFormItems.value[0].options.unshift(mtem);
};
setTimeout(() => {
getModelInfo(flowDetail.value.modelGuid);
getDataTypeList()
}, 200)
}
}).catch(() => {
loading.value = false;
......@@ -304,7 +313,7 @@ const setDictFormItems = (dictList) => {
filterable: true,
required: true,
});
baseConfigFormRules.value[dictField] = { required: true, trigger: 'change', message: `请选择${dictName}` };
baseConfigFormRules.value[dictField] = [{ required: true, trigger: 'change', message: `请选择${dictName}` }];
dictName == '数据用途' && (dataUsage.value.field = dictField);
(() => {
if (typeMap.value[dictField] == undefined) {
......@@ -338,7 +347,7 @@ const setDiseaseFormItems = () => {
clearable: true,
required: true,
});
baseConfigFormRules.value.diseaseGuid = { required: true, trigger: 'change', message: "请选择所属疾病" };
baseConfigFormRules.value.diseaseGuid = [{ required: true, trigger: 'change', message: "请选择所属疾病" }];
if (typeMap.value['diseaseGuid'] == undefined) {
getDiseaseData();
} else {
......@@ -361,16 +370,44 @@ const setBuildInFormItems = (buildList) => {
buildList.map(b => {
const buildName = b.targetName;
const buildField = `build_${b.guid}`;
buildInData.value.push({
guid: b.guid,
targetName: buildName,
})
baseConfigFormItems.value.push({
label: buildName,
type: 'input',
placeholder: '',
field: buildField,
default: b.defaultValue || '',
default: changeNum(b.defaultValue, 2),
inputType: 'moneyNumber',
maxlength: 18,
clearable: true,
disabled: b.isInputParameter == 'Y'
disabled: b.isInputParameter != 'Y'
});
baseConfigFormRules.value[buildField] = { required: true, trigger: 'blur', message: `请填写${buildName}` };
baseConfigFormRules.value[buildField] = [
{ required: true, message: `请填写${buildName}`, trigger: 'blur' },
{
validator: (rule, value, callback) => {
if (value === '') {
callback(new Error(`请填写${buildName}`));
return;
}
const num = parseFloat(value);
if (isNaN(num)) {
callback(new Error('请输入有效的数字'));
return;
}
// 已自动保留两位小数,不需再验证小数位数
if (num < 0 || num > b.defaultValue) {
callback(new Error(`输入值必须在0到${b.defaultValue}之间`));
} else {
callback();
}
}, trigger: "blur",
},
]
})
};
......@@ -413,7 +450,7 @@ const setFormItemData = async () => {
// 添加数据字典
dictionaryList.length > 0 && await setDictFormItems(dictionaryList);
// 添加内置指标
// buildInList.length > 0 && await setBuildInFormItems(buildInList);
buildInList.length > 0 && await setBuildInFormItems(buildInList);
setTimeout(() => {
baseConfigFormRef.value.ruleFormRef?.clearValidate();
......@@ -476,6 +513,7 @@ const getModelConfig = (mGuid) => {
demandTableList.value = data.pricingDemandMenuRSVOS || [];
pricingTargetList.value = data.pricingTargetRSVOS || [];
demandTableFieldAllNum.value = data.fieldCount || 0;
buildInData.value = [];
}
})
}
......@@ -773,34 +811,7 @@ const toPath = () => {
})
}
// 获取维度公式计算结果
const getSignatory = (row) => {
let formulaVal = 0;
const pricingTargetData = row.pricingTargetRSVOS || [];
if (!row.computationalFormula || row.computationalFormula == 'custom') {
let formula = row.customize;
// 遍历数组,检查 customize 是否包含对应的 targetName,若包含则替换为 tNum
pricingTargetData.forEach((item) => {
if (formula.includes(item.targetName)) {
formula = formula.replace(new RegExp(item.targetName, 'g'), item.tNum);
}
});
// 使用 eval 计算公式结果(注意:eval 存在安全风险,仅适用于受控环境)
try {
formulaVal = eval(formula);
} catch (error) {
console.error('公式计算错误:', error);
}
} else {
const formula = pricingTargetData.map(item => item.tNum);
if (row.computationalFormula == '3') {
formulaVal = formula.reduce((accumulator, currentValue) => parseFloat(accumulator) * parseFloat(currentValue), 1); // 初始值为1
} else {
formulaVal = formula.reduce((accumulator, currentValue) => parseFloat(accumulator) + parseFloat(currentValue), 0); // 初始值为0
}
}
return (Math.round(formulaVal * 100) / 100).toFixed(2);
};
// 获取疾病得分
const getTargetNum = (params) => {
// loading.value = true;
getPriceResult(params).then((res: any) => {
......@@ -816,151 +827,6 @@ const getTargetNum = (params) => {
});
}
// 生成报告内容
const reporting = (formInfo) => {
let resultInfo: any = [];
const signatoryData = JSON.parse(JSON.stringify(modelData.value.pricingDimensionalityRSVOS || '[]'));
signatoryData.map((sign, s) => {
resultInfo.push({
dimensionalityName: sign.dimensionalityName,
computationalFormula: sign.computationalFormula,
customize: sign.customize,
pricingTargetRSVOS: []
});
const targets = sign.pricingTargetRSVOS || [];
const signTargets = targets.map(t => {
let tNum: any = 0, tCustomize = '';
if (t.targetType == '3') { // 指标类型-数据字典
const tName = dictionaryData.value.find(d => d.guid == t.guid) ? `dict_${t.guid}` : '';
if (tName) {
const pVal = typeMap.value[tName].find(t => t.value == formInfo[tName]);
const dictionary = t.dictionaryJson.find(d => d.name == pVal.label);
if (sign.computationalFormula == '1') {// 加权平均
tNum = parseFloat(t.weight) / 100 * parseFloat(dictionary?.value || t.defaultValue || 0);
tCustomize = `权重${parseFloat(t.weight) / 100} * 因子/默认值${parseFloat(dictionary?.value || t.defaultValue || 0)}`;
} else { // 其他
tNum = parseFloat(dictionary?.value || t.defaultValue || 0);
tCustomize = `默认值${parseFloat(dictionary?.value || t.defaultValue || 0)}`;
}
t.dictionaryName == '数据用途' && (dataUsage.value.dictValue = pVal.value || '');
}
} else if (t.targetType == '2') {// 指标类型-系统功能
if (t.functionName == '1') { // 功能名称-质量评价模型
const score = parseFloat(qualityScoreData.value.qualityScore || 0);
tNum = parseFloat(t.weight || 1) / 100 * score / 100;
tCustomize = `权重${parseFloat(t.weight || 1) / 100} * 模型评分${score}/100`;
} else if (t.functionName == '2') { // 功能名称-疾病管理
if (sign.computationalFormula == '1') {// 加权平均
const score = parseFloat(disScore.value.find(d => d.guid == t.guid)?.factor || 0);
tNum = parseFloat(t.weight) / 100 * score;
tCustomize = `权重${parseFloat(t.weight) / 100} * 疾病得分${score}`;
} else { //其他
tNum = parseFloat(disScore.value.find(d => d.guid == t.guid)?.factor || 0);
tCustomize = `疾病得分${tNum}`;
}
} else if (t.functionName == '3') {// 功能名称-需求表管理
const tData = tableData.value.find(f => f.demandTableGuid == t.demandTableGuid || f.guid == t.demandTableGuid);
if (tData) {
if (sign.computationalFormula == '1') {// 加权平均
tNum = parseFloat(t.weight) / 100 * (parseFloat(tData.dataFieldsNum) / tData.dataFields.length || parseFloat(t.defaultValue || 0));
tCustomize = `权重${parseFloat(t.weight) / 100} * 匹配率/默认值${parseFloat(tData.dataFieldsNum) / tData.dataFields.length || parseFloat(t.defaultValue || 0)}`;
} else { //其他
tNum = parseFloat(tData.dataFieldsNum) / tData.dataFields.length || parseFloat(t.defaultValue || 0);
tCustomize = `匹配率/默认值${parseFloat(tData.dataFieldsNum) / tData.dataFields.length || parseFloat(t.defaultValue || 0)}`;
}
}
}
} else { // 指标类型-系统内置
if (sign.computationalFormula == '1') {// 加权平均
tNum = parseFloat(t.weight) / 100 * parseFloat(t.defaultValue || 0);
tCustomize = `权重${parseFloat(t.weight) / 100} * 默认值${parseFloat(t.defaultValue || 0)}`;
} else { //其他
tNum = parseFloat(t.defaultValue || 0);
tCustomize = `默认值${parseFloat(t.defaultValue || 0)}`;
}
}
t.tNum = (Math.round(parseFloat(tNum) * 100) / 100).toFixed(2);
resultInfo[s].pricingTargetRSVOS.push({
targetName: t.targetName,
targetType: t.targetType,
functionName: t.functionName,
customize: tCustomize,
tNum: t.tNum,
})
return t;
})
sign.pricingTargetRSVOS = signTargets;
sign.sNum = getSignatory(sign);
resultInfo[s].sNum = sign.sNum;
})
// exportData.value = resultInfo;
return { signatoryData, resultInfo };
}
// 计算价格
const calculatePrice = (pData) => {
let modelFormula = modelData.value.modelFormula;
// 1. 移除所有干扰的引号(确保是数学表达式)
modelFormula = modelFormula.replace(/["']/g, "").trim();
// 2. 定义允许的数学运算符和函数
const allowedOperators = /[+\-*/%^() .\d]/;
const mathFunctions = ['sin', 'cos', 'tan', 'log', 'sqrt', 'abs', 'pow'];
// 3. 提取变量名
const variableRegex = /[\u4e00-\u9fa5a-zA-Z_][\u4e00-\u9fa5a-zA-Z0-9_]*/g;
const variableNames = [...new Set(modelFormula.match(variableRegex) || [])];
// 4. 构建变量映射
const variables = {};
variableNames.forEach(name => {
const dim = pData.find(d => d.dimensionalityName === name);
variables[name] = dim ? parseFloat(dim.sNum) || 0 : 0;
});
// 5. 替换变量为数值(考虑边界情况)
let expression = modelFormula;
Object.keys(variables).forEach(name => {
expression = expression.replace(new RegExp(name, 'g'), variables[name]);
});
// 6. 表达式规范化(不丢失括号)
expression = expression
.replace(/\s+/g, '') // 去空格
.replace(/\^/g, '**') // 幂运算转换
.replace(/"|'/g, '') // 去引号(不破坏括号)
.replace(/(\d)\(/g, '$1*(') // 处理隐式乘法
.replace(/\)\(/g, ')*('); // 括号间乘法
// 7. 验证括号配对
const balance = expression.split('').reduce((acc, char) => {
if (char === '(') acc++;
if (char === ')') acc--;
return acc;
}, 0);
if (balance !== 0) {
console.error('括号不匹配');
return NaN;
}
// 8. 安全计算
try {
const result = new Function('return ' + expression)();
const roundedResult = Math.round(parseFloat(result) * 100) / 100;
dataTransactionPrice.value = roundedResult.toFixed(2);
return roundedResult;
} catch (error) {
console.error('计算错误:', {
error,
original: modelFormula,
processed: expression
});
return NaN;
}
};
// 获取定价计算配置参数
const getCalculateParams = (baseConfigFormObj, baseConfigFormInfo) => {
const modelName = typeMap.value.modelGuid.find(d => d.guid == baseConfigFormInfo.modelGuid)?.modelName || '';
......@@ -983,13 +849,20 @@ const getCalculateParams = (baseConfigFormObj, baseConfigFormInfo) => {
const parentsData = baseConfigFormObj.getCascaderCheckedData();
params.diseaseName = parentsData[0]?.label || '';
}
let dictionaryJson = {};
let dictionaryJson = {}, builtInTarget: any = [];
for (var b in baseConfigFormInfo) {
if (b.indexOf('dict_') > -1) {
dictionaryJson[b] = baseConfigFormInfo[b];
}
}
buildInData.value.map(item => {
builtInTarget.push({
...item,
targetValue: baseConfigFormInfo[`build_${item.guid}`],
})
})
params.dictionaryJson = Object.keys(dictionaryJson).length ? JSON.stringify(dictionaryJson) : '';
params.builtIndicators = builtInTarget;
let demandMatchingData: any = [];
tableData.value.map(item => {
demandMatchingData.push({
......@@ -1048,65 +921,7 @@ const checkForm = (type) => {
// 显示结果
dataTransactionPrice.value = priceData.transactionPrice.toFixed(2);
if (type == 'calculate') {
// const { signatoryData, resultInfo } = reporting(baseConfigFormInfo);
// exportData.value = resultInfo;
// calculatePrice(signatoryData);
} else if (type == 'export') {
// const { signatoryData, resultInfo } = reporting(baseConfigFormInfo);
// exportData.value = resultInfo;
// !dataTransactionPrice.value && calculatePrice(signatoryData);
// loading.value = true;
// let exportOut: any = {};
// // 估值对象信息
// const damName = typeMap.value.dataResourceGuid.find(f => f.damGuid == baseConfigFormInfo.dataResourceGuid)?.damName || '';
// exportOut.one = `因${baseConfigFormInfo.belongingEntityGuid}拟了解其所持有的\"${damName}\"相关数据资源的价格,为此需对该行为涉及的数据资源在不同应用场景下,基于数据资源持有单位的性质、信息化程度、数据稀缺性、需求匹配等情况下,为上述经济行为提供定价参考依据。`;
// exportOut.two = `估值对象:${baseConfigFormInfo.belongingEntityGuid}持有的\"${damName}\"`;
// // 估值范围信息
// const damNames = demandTableList.value.map(item => item.menuName)
// let rangStr = `包含${damNames.join('、')}等${damNames.length}张表单,${damNames.length}张表共计${demandTableFieldAllNum.value}个字段`;
// const dataTimeliness = pricingTargetList.value.find(p => p.dictionaryName == '时效性');
// const dataTimelinessStr = dataTimeliness ? typeMap.value[`dict_${dataTimeliness.guid}`].find(f => f.value == baseConfigFormInfo[`dict_${dataTimeliness.guid}`])?.label || '' : '';
// rangStr += dataTimelinessStr ? `,时间跨度为${dataTimelinessStr}的数据` : `的数据`;
// damNames.length && (exportOut.two = `${exportOut.two}\n估值范围:${rangStr}`);
// // 字典
// let dictList: any = [], hasModelScore = false;
// const dictStr = exportData.value.map(e => {
// // 检查是否有质量模型评分
// hasModelScore = hasModelScore || e.pricingTargetRSVOS.some(
// t => t.targetType === '2' && t.functionName === '1'
// );
// // 只有当维度指标数大于1时才处理明细
// if (e.pricingTargetRSVOS.length > 1) {
// const targetStr = e.pricingTargetRSVOS
// .map(t => `${t.targetName}为${changeNum(t.tNum, 2)}`)
// .join('、');
// dictList.push(`${e.dimensionalityName}为${changeNum(e.sNum, 2)},其中${targetStr}`);
// }
// return `${e.dimensionalityName}为${changeNum(e.sNum, 2)}`;
// })
// let dictListStr = `${dictStr.join(',')}。\n${dictList.join(';\n')}`
// // 质量模型
// if (hasModelScore) {
// const { largeCategoryScoreList = [], qualityScore = 0 } = qualityScoreData.value;
// const qualityParts = [
// `数据的总体质量得分为${changeNum(qualityScore, 2)}`
// ];
// if (largeCategoryScoreList.length) {
// const categoryScores = largeCategoryScoreList.map(
// q => `${q.largeCategoryName}方面得分为${changeNum(q.largeCategoryScore || 0, 2)}`
// );
// qualityParts.push(`其中${categoryScores.join(',')}`);
// }
// dictListStr += `;\n${qualityParts.join('。')}`;
// }
// exportOut.three = `${baseConfigFormInfo.belongingEntityGuid}持有的"${damName}"的数据(患者人次)单价为${changeNum(dataTransactionPrice.value, 2)}元${dictListStr ? `;其中${dictListStr}` : '。'}`;
if (type == 'export') {
loading.value = true;
const exportOut = {
one: priceData.one,
......@@ -1132,9 +947,6 @@ const checkForm = (type) => {
});
})
} else {
// const { signatoryData, resultInfo } = reporting(baseConfigFormInfo);
// exportData.value = resultInfo;
// !dataTransactionPrice.value && calculatePrice(signatoryData);
let params = {
...paramsInfo,
dataTransactionPrice: dataTransactionPrice.value,
......@@ -1239,6 +1051,7 @@ onBeforeMount(() => {
}
})
onMounted(() => {
getModel()
})
</script>
<template>
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!