You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

302 lines
10 KiB

<template>
<el-table
v-loading="loading"
:data="tableData"
border
style="width: 100%"
>
<el-table-column prop="stdNum" label="标准编号" align="center" />
<el-table-column prop="stdCode" label="英文名" align="center" />
<el-table-column prop="stdName" label="中文名" align="center" />
<el-table-column label="类型" prop="stdType" width="150">
<template #default="scope">
<el-tag v-if="scope.row.stdType == '0'" type="primary">基础数据</el-tag>
<el-tag v-else type="warning">指标数据</el-tag>
</template>
</el-table-column>
<el-table-column prop="securityLevel" label="安全等级" align="center" />
<el-table-column prop="sourceSystem" label="来源系统" align="center" />
<el-table-column prop="codeNum" label="代码编号" align="center" />
<el-table-column label="变更类型" align="center">
<template #default="{ row }">
{{ changeTypeMap[row.changeType] || row.changeType }}
</template>
</el-table-column>
<el-table-column label="审批状态" align="center">
<template #default="{ row }">
{{ approStatusMap[row.approStatus] || row.approStatus }}
</template>
</el-table-column>
<el-table-column label="操作" width="100" align="center">
<template #default="scope">
<el-button @click="handleView(scope.row.id)" size="small" type="primary">查看详情</el-button>
</template>
</el-table-column>
</el-table>
<!-- 弹窗 -->
<el-dialog v-model="formVisible" title="标准详情" width="70%" @close="formData = {}">
<el-form :model="formData" label-position="left" ref="formRef" label-width="120px" class="custom-form-container">
<!-- 第一行:3列 -->
<el-row gutter="20">
<el-col :span="6">
<el-form-item prop="stdNum">
<template #label>
<span :class="{ 'changed-label': isChanged(formData.stdNum) }">标准编号:</span>
</template>
<span :class="{ 'changed-value': isChanged(formData.stdNum) }">{{ formatValue(formData.stdNum) }}</span>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item prop="stdName">
<template #label>
<span :class="{ 'changed-label': isChanged(formData.stdName) }">标准中文名:</span>
</template>
<span :class="{ 'changed-value': isChanged(formData.stdName) }">{{ formatValue(formData.stdName) }}</span>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item prop="stdCode">
<template #label>
<span :class="{ 'changed-label': isChanged(formData.stdCode) }">标准英文名:</span>
</template>
<span :class="{ 'changed-value': isChanged(formData.stdCode) }">{{ formatValue(formData.stdCode) }}</span>
</el-form-item>
</el-col>
</el-row>
<!-- 第二行:3列 -->
<el-row gutter="20">
<el-col :span="6">
<el-form-item prop="stdMenu">
<template #label>
<span :class="{ 'changed-label': isChanged(formData.stdMenu) }">标准业务定义:</span>
</template>
<span :class="{ 'changed-value': isChanged(formData.stdMenu) }">{{ formatValue(formData.stdMenu) }}</span>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item prop="stdType">
<template #label>
<span :class="{ 'changed-label': isChanged(formData.stdType) }">标准类型:</span>
</template>
<span :class="{ 'changed-value': isChanged(formData.stdType) }">{{ formatValue(stdTypeMap[formData.stdType] || formData.stdType) }}</span>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item prop="stdSrc">
<template #label>
<span :class="{ 'changed-label': isChanged(formData.stdSrc) }">标准来源:</span>
</template>
<span :class="{ 'changed-value': isChanged(formData.stdSrc) }">{{ formatValue(formData.stdSrc) }}</span>
</el-form-item>
</el-col>
</el-row>
<!-- 第三行:4列 -->
<el-row gutter="20">
<el-col :span="6">
<el-form-item prop="dataClas">
<template #label>
<span :class="{ 'changed-label': isChanged(formData.dataClas) }">数据类别:</span>
</template>
<span :class="{ 'changed-value': isChanged(formData.dataClas) }">{{ formatValue(dataClasMap[formData.dataClas] || formData.dataClas) }}</span>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item prop="sourceSystem">
<template #label>
<span :class="{ 'changed-label': isChanged(formData.sourceSystem) }">来源系统:</span>
</template>
<span :class="{ 'changed-value': isChanged(formData.sourceSystem) }">{{ formatValue(formData.sourceSystem) }}</span>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item prop="securityLevel">
<template #label>
<span :class="{ 'changed-label': isChanged(formData.securityLevel) }">安全等级:</span>
</template>
<span :class="{ 'changed-value': isChanged(formData.securityLevel) }">{{ formatValue(formData.securityLevel) }}</span>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item prop="codeNum">
<template #label>
<span :class="{ 'changed-label': isChanged(formData.codeNum) }">代码编号:</span>
</template>
<span :class="{ 'changed-value': isChanged(formData.codeNum) }">{{ formatValue(formData.codeNum) }}</span>
</el-form-item>
</el-col>
</el-row>
<!-- 第四行:2列 -->
<el-row gutter="20">
<el-col :span="12">
<el-form-item prop="bussDeptId">
<template #label>
<span :class="{ 'changed-label': isChanged(formData.bussDeptId) }">业务认责部门:</span>
</template>
<span :class="{ 'changed-value': isChanged(formData.bussDeptId) }">{{ formatValue(formData.bussDeptId) }}</span>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="bussUser">
<template #label>
<span :class="{ 'changed-label': isChanged(formData.bussUser) }">业务认责人员:</span>
</template>
<span :class="{ 'changed-value': isChanged(formData.bussUser) }">{{ formatValue(formData.bussUser) }}</span>
</el-form-item>
</el-col>
</el-row>
<!-- 第五行:2列 -->
<el-row gutter="20">
<el-col :span="12">
<el-form-item prop="techDeptId">
<template #label>
<span :class="{ 'changed-label': isChanged(formData.techDeptId) }">技术认责部门:</span>
</template>
<span :class="{ 'changed-value': isChanged(formData.techDeptId) }">{{ formatValue(formData.techDeptId) }}</span>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="techUser">
<template #label>
<span :class="{ 'changed-label': isChanged(formData.techUser) }">技术认责人员</span>
</template>
<span :class="{ 'changed-value': isChanged(formData.techUser) }">{{ formatValue(formData.techUser) }}</span>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<el-button @click="formVisible = false">关闭</el-button>
</template>
</el-dialog>
</template>
<script setup>
import { ref, watch } from 'vue';
import { listStdMainAppr, getStdMainAppr } from '@/api/datastd/std';
const props = defineProps({
flowId: {
type: String,
required: true
}
});
const isChanged = (val) => typeof val === 'string' && val.includes('==>')
const formatValue = (val) => {
if (!val) return ''
if (isChanged(val)) {
const [oldVal, newVal] = val.split('==>')
return `${oldVal.trim()} ==> ${newVal.trim()}`
}
return val
}
const loading = ref(false);
const tableData = ref([]);
const changeTypeMap = {
add: '新增',
edit: '修改',
delete: '删除'
};
const approStatusMap = {
waiting: '待审核',
pending: '审核中',
succeed: '通过',
rejected: '拒绝',
canceled: '已取消'
};
const stdTypeMap = {
0: '基础数据',
1: '指标数据'
};
const dataClasMap = {
'日期类': '日期类',
'文本类': '文本类',
'数值类': '数值类',
'金额类': '金额类',
'编码类': '编码类',
'标志类': '标志类',
'码值类': '码值类'
};
const formVisible = ref(false);
const formData = ref({});
const getList = async () => {
loading.value = true;
try {
const params = { flowId: props.flowId };
const res = await listStdMainAppr(params);
tableData.value = res.data || [];
} catch (e) {
console.error('加载失败', e);
} finally {
loading.value = false;
}
};
watch(() => props.flowId, (newVal) => {
if (newVal) {
getList();
}
});
onMounted(() => {
if (props.flowId) {
getList();
}
});
const handleView = async (id) => {
try {
const res = await getStdMainAppr(id);
const data = res.data || {};
data.stdType = stdTypeMap[data.stdType] || data.stdType;
data.dataClas = dataClasMap[data.dataClas] || data.dataClas;
formData.value = data;
formVisible.value = true;
} catch (e) {
console.error('获取详情失败', e);
}
};
</script>
<style scoped>
.custom-form-container .el-form-item {
margin-bottom: 15px; /* 增加表单项间距 */
margin-left: 20px;
}
.changed-label,
.changed-value {
color: rgb(137, 189, 58) !important;;
font-weight: bold;
}
.custom-form-container .el-form-item .el-input,
.custom-form-container .el-form-item .el-select {
width: 100%; /* 输入框和选择框宽度填满 */
}
.custom-form-container .el-form-item span {
font-size: 14px; /* 字体大小 */
color: #333; /* 字体颜色 */
}
.custom-form-item label {
font-weight: bold; /* 加粗标签 */
margin-right: 10px; /* 为标签添加右侧间距 */
}
.el-dialog__footer {
text-align: center;
}
.dialog-footer-btn {
width: 100px; /* 按钮宽度 */
font-size: 14px;
}
</style>