- 新增产品管理相关路由和页面(dashboard、list、requirement、setting) - 实现产品基础信息编辑弹窗组件(base-info-dialog.vue) - 添加运行时字典功能(dict-select、dict-text、dict-tag组件) - 集成字典管理store和API调用 - 规范ID类型定义为string避免精度丢失问题 - 完善国际化资源文件支持中英文对照 - 新增对象上下文业务域入口页导航实现说明 - 添加Vue DevTools浮动入口注释说明 - 统一权限控制支持全局和对象作用域区分 - 规范分页查询参数类型定义与使用方式
79 lines
2.5 KiB
Vue
79 lines
2.5 KiB
Vue
<script setup lang="ts">
|
|
import { computed } from 'vue';
|
|
import { RDMS_OBJECT_DIRECTION_DICT_CODE } from '@/constants/dict';
|
|
import DictText from '@/components/custom/dict-text.vue';
|
|
import { getProductStatusLabel, getProductStatusTagType } from '../../shared/product-master-data';
|
|
import { isProductBaseInfoEditable } from '../shared';
|
|
|
|
defineOptions({ name: 'SettingBaseInfoCard' });
|
|
|
|
interface Props {
|
|
baseInfo: Api.Product.ProductSettingBaseInfo | null;
|
|
}
|
|
|
|
interface Emits {
|
|
(e: 'edit'): void;
|
|
}
|
|
|
|
const props = defineProps<Props>();
|
|
const emit = defineEmits<Emits>();
|
|
|
|
const editDisabled = computed(() => {
|
|
if (!props.baseInfo) {
|
|
return true;
|
|
}
|
|
|
|
return !isProductBaseInfoEditable(props.baseInfo.statusCode);
|
|
});
|
|
</script>
|
|
|
|
<template>
|
|
<ElCard class="card-wrapper">
|
|
<template #header>
|
|
<div class="flex items-center justify-between gap-12px">
|
|
<div>
|
|
<h3 class="text-16px text-[#0f172a] font-700">基础信息</h3>
|
|
</div>
|
|
<ElButton
|
|
v-auth="{ code: 'project:product:update', source: 'object' }"
|
|
type="primary"
|
|
plain
|
|
:disabled="editDisabled"
|
|
@click="emit('edit')"
|
|
>
|
|
编辑基础信息
|
|
</ElButton>
|
|
</div>
|
|
</template>
|
|
|
|
<ElDescriptions v-if="baseInfo" :column="2" border>
|
|
<ElDescriptionsItem label="产品编码">{{ baseInfo.code || '--' }}</ElDescriptionsItem>
|
|
<ElDescriptionsItem label="产品名称">{{ baseInfo.name || '--' }}</ElDescriptionsItem>
|
|
<ElDescriptionsItem label="产品方向">
|
|
<DictText :dict-code="RDMS_OBJECT_DIRECTION_DICT_CODE" :value="baseInfo.directionCode" />
|
|
</ElDescriptionsItem>
|
|
<ElDescriptionsItem label="产品经理">
|
|
{{ baseInfo.managerUserNickname || baseInfo.managerUserId || '--' }}
|
|
</ElDescriptionsItem>
|
|
<ElDescriptionsItem label="当前状态">
|
|
<ElTag :type="getProductStatusTagType(baseInfo.statusCode)">
|
|
{{ getProductStatusLabel(baseInfo.statusCode) }}
|
|
</ElTag>
|
|
</ElDescriptionsItem>
|
|
<ElDescriptionsItem label="最近状态原因">{{ baseInfo.lastStatusReason || '--' }}</ElDescriptionsItem>
|
|
<ElDescriptionsItem label="产品描述" :span="2">
|
|
<div class="setting-base-info-card__description">{{ baseInfo.description || '--' }}</div>
|
|
</ElDescriptionsItem>
|
|
</ElDescriptions>
|
|
|
|
<ElEmpty v-else description="未获取到基础信息" />
|
|
</ElCard>
|
|
</template>
|
|
|
|
<style scoped>
|
|
.setting-base-info-card__description {
|
|
white-space: pre-wrap;
|
|
line-height: 1.7;
|
|
}
|
|
</style>
|