e5656a0c by xukangle

fix

1 parent 9a7bc015
......@@ -106,7 +106,7 @@ export const updatQuality = (params) => request({
})
/** 获取可以发起资产质量评价的选项列表。 */
/** type: 1 质量评价;2 资产评估 */
/** type: 1 质量评价;2 价值评估 */
export const getRegisteredList = (type) => request({
url: `${import.meta.env.VITE_API_NEW_PORTAL}/dam-catalog-table/get-valid-list?type=${type}`,
method: 'get'
......
......@@ -252,6 +252,9 @@ export const filterVal = (val, type) => {
case 'Y':
approval = '已通过';
break;
case 'C':
approval = '已撤销';
break;
case 'N':
approval = '草稿中';
break;
......
......@@ -197,6 +197,13 @@ const inputChange = (val, row) => {
formInline.value[row.field] = val = parseFloat(val || 0).toFixed(2);
}
}
// 新增的 inputType 处理逻辑:integerWithComma
if (row.inputType == "integerWithComma") {
val = val.replace(/[^\d]/g, ""); // 移除非数字字符
val = val.replace(/^0+(?!$)/, ""); // 去除前导零,但保留单个零输入
val = val.replace(/\B(?=(\d{3})+(?!\d))/g, ","); // 添加千位分隔符
formInline.value[row.field] = val;
}
if (row.field == "mobileNo") {
formInline.value.logonUser = formInline.value.mobileNo;
}
......@@ -241,6 +248,14 @@ const inputEventChange = (val, item) => {
formInline.value[item.field] = formInline.value[item.field].toString().replace(/^(\-)*(\d+)\.(\d\d\d\d\d\d).*$/, "$1$2.$3")
formInline.value[item.field] = formInline.value[item.field].toString().replace(/^\D*(\d{0,12}(?:\.\d{0,2})?).*$/g, "$1")
return;
} else if (item.inputType == 'integerWithComma') { // 整数,带千位分隔符
// 移除非数字字符
formInline.value[item.field] = val.replace(/[^\d]/g, "");
// 去除前导零
formInline.value[item.field] = formInline.value[item.field].replace(/^0+(?!$)/, "");
// 添加千位分隔符
formInline.value[item.field] = formInline.value[item.field].replace(/\B(?=(\d{3})+(?!\d))/g, ",");
return;
}
if (item.min != null && (formInline.value[item.field] < item.min)) {
formInline.value[item.field] = item.min;
......@@ -589,7 +604,7 @@ const panelChange = (scope, row) => {
required_mark: item.required,
}">{{
item.label
}}</span>
}}</span>
</span>
<div class="header_title_tooltip" style="width: auto" v-if="item.tooltip">
......@@ -682,7 +697,7 @@ const panelChange = (scope, row) => {
<div class="item_panel" :class="{ is_block: panel.block }" v-for="panel in item.children">
<label :class="{ required_mark: panel.required }">{{
panel.label
}}</label>
}}</label>
<el-checkbox v-if="panel.type == 'checkbox'" v-model="formInline[panel.field]"
:disabled="panel.disabled || readonly" :true-label="panel.trueValue ?? true"
:false-label="panel.falseValue ?? false">{{ panel.placeholder }}</el-checkbox>
......@@ -765,7 +780,7 @@ const panelChange = (scope, row) => {
<span class="item-label" slot="label">
<span v-if="child.label" :class="{ required_mark: child.required }">{{
child.label
}}</span>
}}</span>
</span>
<el-select v-if="child.type == 'select'" v-model="formInline[child.field]"
:placeholder="child.placeholder" :disabled="child.disabled || readonly" :filterable="child.filterable"
......@@ -824,7 +839,7 @@ const panelChange = (scope, row) => {
<span class="item-label" slot="label">
<span :class="{ required_mark: child.required }">{{
child.label
}}</span>
}}</span>
</span>
<el-cascader v-if="child.type == 'cascader'" v-model="formInline[child.field]" :props="child.props"
:options="child.options" :show-all-levels="child.showAllLevels ?? true"
......@@ -867,7 +882,7 @@ const panelChange = (scope, row) => {
<div class="item_panel" v-for="child in item.children">
<label :class="{ required_mark: child.required }">{{
child.label
}}</label>
}}</label>
<div class="tool_item">
<el-select v-model="formInline[child.field]" :class="{ is_block: child.block }"
:placeholder="child.placeholder" :multiple="child.multiple" :collapse-tags="child.collapse"
......@@ -942,7 +957,7 @@ const panelChange = (scope, row) => {
<span class="item-label" slot="label">
<span :class="{ required_mark: child.required }">{{
child.label
}}</span>
}}</span>
</span>
<el-input :class="[child.col, { is_block: child.block }]" v-model="formInline[child.field]"
:rows="child.rows ?? 4" type="textarea" :placeholder="child.placeholder"
......@@ -999,7 +1014,7 @@ const panelChange = (scope, row) => {
<span class="item-label" slot="label">
<span :class="{ required_mark: child.required }">{{
child.label
}}</span>
}}</span>
</span>
<div class="input_group" :class="[child.col]" v-if="child.type == 'input-group'">
<template v-for="(group, c) in child.children">
......@@ -1008,7 +1023,7 @@ const panelChange = (scope, row) => {
<span class="item-label" slot="label">
<span :class="{ required_mark: group.required }">{{
group.label
}}</span>
}}</span>
</span>
<el-select v-if="group.type == 'select'" v-model="formInline[group.field]"
:placeholder="group.placeholder" :clearable="group.clearable"
......@@ -1149,7 +1164,7 @@ const panelChange = (scope, row) => {
<span class="item-label" slot="label">
<span :class="{ required_mark: child.required }">{{
child.label
}}</span>
}}</span>
</span>
<el-select v-if="child.type == 'select'" v-model="formInline[child.field]"
:placeholder="child.placeholder" :clearable="child.clearable" :disabled="child.disabled || readonly"
......@@ -1200,7 +1215,7 @@ const panelChange = (scope, row) => {
<span class="item-label" slot="label" :class="[child.col]">
<span :class="{ required_mark: child.required }">{{
child.label
}}</span>
}}</span>
</span>
<div class="input_popover_panel" v-if="child.type == 'input-popover-panel'">
<el-popover placement="bottom-start" width="100%" trigger="click" :teleported="false">
......@@ -1254,7 +1269,7 @@ const panelChange = (scope, row) => {
<span class="item-label" slot="label">
<span :class="{ required_mark: child.required }">{{
child.label
}}</span>
}}</span>
</span>
<template v-if="child.type == 'upload-image'">
<el-upload :class="[child.col, 'avatar-uploader', { is_block: child.block }]" action="#"
......@@ -1281,7 +1296,8 @@ const panelChange = (scope, row) => {
<template #trigger>
<el-button :disabled="child.disabled" :icon="Upload" class="mr8">上传文件</el-button>
</template>
<el-button :icon="Download" v-if="child.templateUrl" @click="(child.templateUrl == 'auto' && child.templateClick) ? child.templateClick() : downloadTemplate(child.templateUrl)">
<el-button :icon="Download" v-if="child.templateUrl"
@click="(child.templateUrl == 'auto' && child.templateClick) ? child.templateClick() : downloadTemplate(child.templateUrl)">
下载模板
</el-button>
<template #tip>
......@@ -1362,7 +1378,8 @@ const panelChange = (scope, row) => {
<template #trigger>
<el-button :disabled="item.disabled" :icon="Upload" class="mr8">上传文件</el-button>
</template>
<el-button :icon="Download" v-if="item.templateUrl" @click="(item.templateUrl == 'auto' && item.templateClick) ? item.templateClick() : downloadTemplate(item.templateUrl)">
<el-button :icon="Download" v-if="item.templateUrl"
@click="(item.templateUrl == 'auto' && item.templateClick) ? item.templateClick() : downloadTemplate(item.templateUrl)">
下载模板
</el-button>
<template #tip>
......@@ -2480,9 +2497,9 @@ const panelChange = (scope, row) => {
margin-right: 8px;
}
.extra-textarea-class {
margin-top: 21px !important;
}
// .extra-textarea-class {
// margin-top: 21px !important;
// }
:deep(.form-and-select) {
display: flex;
......
......@@ -9,7 +9,7 @@ import useUserStore from "@/store/modules/user";
import { ElMessage, ElMessageBox } from "element-plus";
import useDataAssetStore from "@/store/modules/dataAsset";
import { getListingList, listingDelete, listingUpdateStatus, filterVal, getParamsDataList, getListingCount, productRejectFlowData } from "@/api/modules/dataProduct";
import { getListingList, listingDelete, listingUpdateStatus, filterVal, getParamsDataList, getListingCount, productRejectFlowData, listingUpdateGateway, listingSave, listingUpdate } from "@/api/modules/dataProduct";
import { TableColumnWidth } from '@/utils/enum';
import TableTools from "@/components/Tools/table_tools.vue";
......@@ -20,6 +20,7 @@ import {
changeNum,
} from "@/utils/common";
import { passFlowData, rejectFlowData, revokeFlowData } from "@/api/modules/workFlowService";
import { content } from "html2canvas/dist/types/css/property-descriptors/content";
const { proxy } = getCurrentInstance() as any;
const router = useRouter();
......@@ -149,7 +150,6 @@ const tableInfo = ref({
if (flowState !== 1) {
list.push({ label: "详情", value: "detail" })
}
return list
},
}
......@@ -359,6 +359,92 @@ const tableBtnClick = (scope, btn) => {
if (type == 'up') {
// tableSwitchChange('Y', scope, 'listingStatus')
console.log('上架', scope)
let params: any = {}
if (scope.row.exchangeGuid) {
// 数交所上架 [params.commitmentLetterInfo[0].url]
params = {
guid: scope.row.guid,
accreditFile: [scope.row.accreditFile[0].url],
caseNumber: scope.row.caseNumber,
commitmentLetter: [scope.row.commitmentLetter[0].url],
content: scope.row.productDesc,
costAssessmentInstitution: scope.row.costAssessmentInstitution,
costAssessmentInstitutionGuid: scope.row.costAssessmentInstitutionGuid,
coverageArea: scope.row.coverageArea,
damCode: scope.row.damCode,
damGuid: scope.row.damGuid,
damName: scope.row.damName,
damType: scope.row.damType,
dataScale: scope.row.dataScale,
deliveryWay: scope.row.deliveryWay,
evaluationFile: [scope.row.evaluationFile[0].url],
exchangeGuid: scope.row.exchangeGuid,
feeDesc: scope.row.feeDesc,
immediateApprove: true,
priceUnit: scope.row.priceUnit,
pricingWay: scope.row.pricingWay,
productPic: scope.row.productPic,
productPrice: scope.row.productPrice,
qualityEvaluationInstitution: scope.row.qualityEvaluationInstitution,
qualityEvaluationInstitutionGuid: scope.row.qualityEvaluationInstitutionGuid,
timeAreaStart: scope.row.timeAreaStart,
timeAreaEnd: scope.row.timeAreaEnd,
registrationCertificate: scope.row.registrationCertificate,
productDetail: [scope.row.productDetail[0].url],
assessmentFile: [scope.row.assessmentFile[0].url],
}
listingUpdate(params).then((res: any) => {
if (res.code == proxy.$passCode) {
ElMessage({
type: "success",
message: '提交成功',
});
getTableData();
} else {
ElMessage({
type: "error",
message: res.msg,
});
}
})
} else {
// 门户数据专区上架
params = {
guid: scope.row.guid,
caseNumber: scope.row.caseNumber,
content: scope.row.productDesc,
coverageArea: scope.row.coverageArea,
damGuid: scope.row.damGuid,
damName: scope.row.damName,
damType: scope.row.damType,
dataScale: scope.row.dataScale,
deliveryWay: scope.row.deliveryWay,
feeDesc: scope.row.feeDesc,
immediateApprove: true,
priceUnit: scope.row.priceUnit,
pricingWay: scope.row.pricingWay,
productPic: scope.row.productPic,
productPrice: scope.row.productPrice,
timeAreaStart: scope.row.timeAreaStart,
timeAreaEnd: scope.row.timeAreaEnd,
}
listingUpdateGateway(params).then((res: any) => {
if (res.code == proxy.$passCode) {
ElMessage({
type: "success",
message: '提交成功',
});
getTableData();
} else {
ElMessage({
type: "error",
message: res.msg,
});
}
})
console.log('上架', scope)
}
}
if (type == 'down') {
// 需要二次确认
......@@ -394,7 +480,7 @@ const passSubmit = () => {
formInfo.value.items.forEach((item) => {
assetsSafeInfo.value.forEach((item1) => {
if (item.label == item1.label) {
complianceInfoMap[`"${item1.value}"`] = listingFormRef.value.formInline[item.field];
complianceInfoMap[item1.value] = listingFormRef.value.formInline[item.field];
}
})
})
......@@ -404,6 +490,7 @@ const passSubmit = () => {
approveSuggest: approveSuggest.value,
approveStaffGuid: userData.staffGuid,
complianceInfoMap: complianceInfoMap,
approveState: 'Y',
bizGuid: row.approveVO.bizGuid,
}).then((res: any) => {
if (res.code == '00000') {
......@@ -444,7 +531,7 @@ const rejectSubmit = async () => {
formInfo.value.items.forEach((item) => {
assetsSafeInfo.value.forEach((item1) => {
if (item.label == item1.label) {
complianceInfoMap[`"${item1.value}"`] = listingFormRef.value.formInline[item.field];
complianceInfoMap[item1.value] = listingFormRef.value.formInline[item.field];
}
})
})
......@@ -455,6 +542,7 @@ const rejectSubmit = async () => {
approveStaffGuid: userData.staffGuid,
complianceInfoMap: complianceInfoMap,
bizGuid: row.approveVO.bizGuid,
approveState: 'R'
}).then((res: any) => {
if (res.code == '00000') {
fullscreenLoading.value = false;
......
......@@ -218,6 +218,7 @@ const formInfo = ref<any>({
field: 'dataScale',
maxlength: 19,
regexp: /\D/g,
inputType: 'integerWithComma',
default: '',
disabled: false,
required: true
......@@ -227,6 +228,9 @@ const formInfo = ref<any>({
placeholder: '请输入',
field: 'caseNumber',
default: '',
inputType: 'integerWithComma',
maxlength: 19,
regexp: /\D/g,
disabled: false,
required: false
}, {
......@@ -834,10 +838,10 @@ const submitForm = (btn, formEl, tosub = false) => {
// if (params.content) {
// params.productDesc = truncateHTML(params.content, 400);
// }
console.log(params, formInfo.value.items.at(4).defaultValue, formInfo.value, '-----------------');
params.dataScale = formInfo.value.items.at(4).defaultValue || formInfo.value.items.at(4).default;
params.caseNumber = formInfo.value.items.at(5).defaultValue || formInfo.value.items.at(4).default;
params.timeAreaStart = params.dateRange ? params.dateRange[0] : '';
console.log(params, formInfo.value.items.at(3).defaultValue, formInfo.value, '-----------------');
params.caseNumber = parseInt(params.caseNumber.replace(/,/g, ''), 10),
params.dataScale = parseInt(params.dataScale.replace(/,/g, ''), 10),
params.timeAreaStart = params.dateRange ? params.dateRange[0] : '';
params.timeAreaEnd = params.dateRange ? params.dateRange[1] : '';
// 删除dateRange字段
delete params.dateRange;
......@@ -960,7 +964,7 @@ const submitForm = (btn, formEl, tosub = false) => {
params.registrationCertificate = params.registrationCertificateInfo.length ? { name: params.registrationCertificateInfo[0].name, url: params.registrationCertificateInfo[0].url } : {};
params.accreditFile = params.accreditFileInfo.length ? [params.accreditFileInfo[0].url] : null;
params.commitmentLetter = params.commitmentLetterInfo.length ? [params.commitmentLetterInfo[0].url] : [];
params.costAssessmentFile = params.costAssessmentFileInfo.length ? [params.costAssessmentFileInfo[0].url] : [];
params.assessmentFile = params.costAssessmentFileInfo.length ? [params.costAssessmentFileInfo[0].url] : [];
params.productDetail = params.productDetailInfo.length ? [params.productDetailInfo[0].url] : [];
params.evaluationFile = params.qualityEvaluationFileInfo.length ? [params.qualityEvaluationFileInfo[0].url] : [];
params.exchangeGuid = route.query.exchangeGuid;
......
......@@ -18,6 +18,7 @@ import { changeNum } from "@/utils/common";
import useUserStore from "@/store/modules/user";
import Moment from "moment";
import platformIndexNewBigScreen from "./platformIndexNewBigScreen.vue";
import { getDownFileSignByUrl, obsDownloadRequest, parseAndDecodeUrl } from "@/api/modules/obsService";
// import platformIndex from "./data_asset/platformIndex.vue";
const router = useRouter();
......@@ -415,7 +416,7 @@ const assetTableRef = ref();
const rolltimer = ref();
onBeforeMount(() => {
if (userData.tenantType == 1) {
if (userData.tenantType != 1) {
// 获取数据表格
getAssetTableData();
......@@ -486,6 +487,46 @@ function fetchQualityInfo() {
}
// 获取注册文档 URL
// function fetchRegisterUrl() {
// docUrlLoading.value = true;
// getRegisterUrl({
// startTime: startTime.value || '',
// endTime: endTime.value || '',
// }).then((res: any) => {
// docUrlLoading.value = false;
// if (res.code == proxy.$passCode) {
// const data = res.data || [];
// if (data.length) {
// const promises = data.map(async (d) => {
// d.documentTypeDesc = d.documentType === 1 ? 'A证' : d.documentType === 2 ? 'B证' : 'C证';
// // const refSignInfo: any = await getDownFileSignByUrl(parseAndDecodeUrl(d.documentFile[0]).fileName);
// // if (!refSignInfo?.data) {
// // refSignInfo?.msg && ElMessage.error(refSignInfo?.msg);
// // return;
// // }
// // const res: any = await obsDownloadRequest(refSignInfo?.data);
// return getImageContent(d.documentFile[0]).then((res: any) => (res ? URL.createObjectURL(res) : null));
// });
// Promise.all(promises).then((urls: any[]) => {
// docUrl.value = urls;
// docUrlList.value = urls.map((url) => [{ url }]);
// nextTick(() => {
// processImgDesc();
// });
// });
// } else {
// docUrl.value = [];
// docUrlList.value = [];
// }
// } else {
// ElMessage.error(res.msg);
// }
// });
// }
// 获取注册文档 URL
function fetchRegisterUrl() {
docUrlLoading.value = true;
getRegisterUrl({
......@@ -496,9 +537,19 @@ function fetchRegisterUrl() {
if (res.code == proxy.$passCode) {
const data = res.data || [];
if (data.length) {
const promises = data.map((d) => {
console.log(data, 'data');
const promises = data.map(async (d) => {
d.documentTypeDesc = d.documentType === 1 ? 'A证' : d.documentType === 2 ? 'B证' : 'C证';
return getImageContent(d.documentFile[0]).then((res: any) => (res ? URL.createObjectURL(res) : null));
// 使用注释替换的代码逻辑
const refSignInfo: any = await getDownFileSignByUrl(parseAndDecodeUrl(d.documentFile[0]).fileName);
if (!refSignInfo?.data) {
refSignInfo?.msg && ElMessage.error(refSignInfo?.msg);
return null;
}
const res: any = await obsDownloadRequest(refSignInfo?.data);
console.log(res, 'res');
return res ? URL.createObjectURL(res) : null;
});
Promise.all(promises).then((urls: any[]) => {
......@@ -518,6 +569,7 @@ function fetchRegisterUrl() {
});
}
const processImgDesc = () => {
let domImg = document.getElementById('register-img');
if (!domImg) {
......@@ -648,7 +700,7 @@ const handleChangeTime = (val) => {
<template>
<div style="width: 100%;height: 100%">
<div class="right-filter-main" v-if="userData.tenantType == 1">
<div class="right-filter-main" v-if="userData.tenantType != 1">
<div class="right-filter">
<div class="filter-btns">
<div class="btn" :class="{ 'is-active': filterDate == 'today' }" @click="handleFilterClick('today')">今日</div>
......@@ -662,7 +714,7 @@ const handleChangeTime = (val) => {
ref="datePickerRef" />
</div>
</div>
<div v-if="userData.tenantType == 1" class="main-content">
<div v-if="userData.tenantType != 1" class="main-content">
<div class="one-row">
<div class="row-per">
<div class="header">
......@@ -778,9 +830,9 @@ const handleChangeTime = (val) => {
<el-image class="top-img" :src="img.url" :zoom-rate="1.2" :max-scale="10" :min-scale="0.2"
:preview-src-list="docUrl" :initial-index="i" :preview-teleported="true" />
<div class="right-content">
<div class="title">{{ docData[i].damName }}</div>
<div class="desc">{{ docData[i].applicationScenarios || '--' }}</div>
<div class="desc1">{{ docData[i].issuingEntity || '--' }}</div>
<div class="title">{{ docData[i]?.damName || '--' }}</div>
<div class="desc">{{ docData[i]?.applicationScenarios || '--' }}</div>
<div class="desc1">{{ docData[i]?.issuingEntity || '--' }}</div>
<!-- <el-tag class="dam-tag">{{ docData[i].documentTypeDesc }}</el-tag> -->
</div>
</template>
......@@ -818,7 +870,7 @@ const handleChangeTime = (val) => {
</div>
</div>
<!-- <platformIndex v-else-if="userData.tenantType != 1" /> -->
<platformIndexNewBigScreen v-else-if="userData.tenantType != 1" />
<platformIndexNewBigScreen v-else-if="userData.tenantType == 1" />
<div v-else class="main-placeholder">
<img width="210" height="100" src="../../public/swzl_logo.png" />
</div>
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!