前端最新版本同步

This commit is contained in:
Zhang.WH
2025-09-25 10:36:07 +08:00
parent a3a06d6f3c
commit 1276dc4adb
117 changed files with 11964 additions and 2466 deletions

View File

@@ -0,0 +1,250 @@
<template>
<!-- 病历文件基本信息弹窗 -->
<el-dialog
:title="title"
v-model="dialogVisible"
width="900px"
destroy-on-close
@open="handleOpen"
>
<!-- 使用el-form包裹表单 -->
<el-form :model="formData" ref="formRef" :rules="rules" label-width="120px">
<el-form-item label="一级菜单" prop="primaryMenuEnum">
<el-select
v-model="formData.primaryMenuEnum"
placeholder="请选择一级菜单"
value-key="value"
>
<el-option
v-for="item in props.docTypes || []"
:key="item.value"
:label="item.info"
:value="Number(item.value)"
/>
</el-select>
</el-form-item>
<el-form-item label="二级菜单" prop="subMenu">
<el-input v-model="formData.subMenu" placeholder="二级菜单"></el-input>
</el-form-item>
<el-form-item label="版本" prop="version">
<el-input v-model="formData.version" placeholder="请输入版本"></el-input>
</el-form-item>
<el-form-item label="名称" prop="name">
<el-input v-model="formData.name" placeholder="请输入名称"></el-input>
</el-form-item>
<el-form-item label="文件" prop="vueRouter">
<el-select v-model="formData.vueRouter" placeholder="请选择文件路径">
<el-option
v-for="item in components"
:key="item.name"
:label="item.name"
:value="item.name"
/>
</el-select>
<!-- <el-input v-model="formData.vueRouter" placeholder="请输入文件路径"></el-input>s -->
</el-form-item>
<el-form-item label="显示顺序" prop="displayOrder">
<el-input-number v-model="formData.displayOrder" :min="1" label="描述文字"></el-input-number>
</el-form-item>
<el-form-item label="使用范围" prop="useRangeEnum">
<div class="radio-group">
<el-radio
v-for="item in props.useRanges"
:key="item.value"
v-model="formData.useRangeEnum"
:label="item.value"
>{{item.info}}</el-radio>
{{ formData.organizationIds }}
</div>
</el-form-item>
<!-- 科室选择框仅当使用范围为科室使用时显示 -->
<el-form-item v-if="formData.useRangeEnum === 2" label="科室选择" prop="organizationIds">
<el-transfer
v-model="formData.organizationIds"
filterable
:titles="['未分配科室', '已分配科室']"
:button-texts="['移除', '添加']"
:format="{
noChecked: '${total}',
hasChecked: '${checked}/${total}',
}"
:props="{key: 'id', label: 'name',}"
:data="transferData"
>
</el-transfer>
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer"></div>
<el-button @click="dialogVisible = false">取消</el-button>
<el-button type="primary" @click="submitForm">确定</el-button>
</template>
</el-dialog>
</template>
<script setup >
import { ref, onMounted } from 'vue'
import useUserStore from '@/store/modules/user';
import { add, update,getLocationTree } from '../api';
import { ElMessage } from 'element-plus';
import { components } from '@/template';
const emits = defineEmits(['submitOk'])
const props = defineProps({
title: {
type: String,
default: '编辑病历文件信息'
},
formData: {
type: Object,
default: () => ({})
},
currentNodeData: {
type: Object,
default: () => ({})
},
docTypes: {
type: Array,
default: () => []
},
useRanges: {
type: Array,
default: () => []
},
})
const userStore = useUserStore();
const formRef = ref(null)
const dialogVisible= defineModel( 'dialogVisible', {
type: Boolean,
default: false
})
// 表单数据
const formData = ref({
primaryMenuEnum: undefined,
subMenu: '',
displayOrder: 1,
version: '',
name: '',
vueRouter: '',
useRangeEnum: 0, // 默认"暂不使用"0暂不使用1全院使用2科室使用
organizationIds: [], // 选中的科室ID列表整数类型
environment: '0'
});
// 表单验证规则(响应式,支持动态验证)
const rules = reactive({
primaryMenuEnum: [{ required: true, message: '请选择一级菜单', trigger: 'change' }],
// subMenu: [{ required: true, message: '请输入二级菜单', trigger: 'blur' }],
version: [{ required: true, message: '请输入版本', trigger: 'blur' }],
name: [{ required: true, message: '请输入名称', trigger: 'blur' }],
vueRouter: [{ required: true, message: '请输入文件路径', trigger: 'blur' }],
displayOrder: [{ required: true, message: '请设置显示顺序', trigger: 'change' }],
useRangeEnum: [{ required: true, message: '请选择使用范围', trigger: 'change' }],
organizationIds: [
{
required: () => formData.value.useRangeEnum === 2, // 仅当"科室使用"时必填
message: '请选择科室',
trigger: ['change', 'blur']
}
]
});
const transferData = ref([]);
/** 查询科室树数据TreeSelect和Transfer共用 */
const getLocationInfo = () => {
getLocationTree().then((response) => {
transferData.value = response?.data || [];
}).catch((error) => {
ElMessage.error('获取科室树失败');
});
}
/** 递归将所有ID转换为整数类型 */
const convertIdsToNumbers = (item) => {
return {
...item,
id: Number(item.id), // 确保ID为整数
...(item.children && item.children.length > 0
? { children: item.children.map((child ) => convertIdsToNumbers(child)) }
: {})
};
};
const handleOpen = () => {
if (props.formData) {
console.log('props.formData', props.formData);
formData.value= props.formData
} else {
resetForm();
formRef.value.resetFields()
}
}
// 提交表单
const submitForm = () => {
formRef.value.validate((valid) => {
if (valid) {
// 表单验证通过,执行保存操作
saveForm();
} else {
// 表单验证失败
ElMessage.error('请填写必填项');
return false;
}
});
};
// 保存表单
const saveForm =async () => {
const userStore = useUserStore()
console.log('提交表单数据:', formData.value);
let data = { ...formData.value, tenantId: userStore.tenantId }
if (formData.value.useRangeEnum !== 2) {
formData.value.organizationIds = [];
}
try {
// 如果有当前节点数据,表示是编辑操作
if (props.currentNodeData) {
data.id = props.currentNodeData.id; // 添加ID
data.busNo = props.currentNodeData.busNo;
data.hospitalId = props.currentNodeData.hospitalId;
console.log('data',data)
const res = await update(data);
if (res.code == 200) {
ElMessage.success('更新成功');
emits('submitOk')
}else {
ElMessage.error('保存失败');
}
} else {
// 新建操作
const res = await add(data);
if (res.code == 200) {
ElMessage.success('保存成功');
emits('submitOk')
}else {
ElMessage.error('保存失败',error);
}
}
}
catch (error) {
console.log(error)
// ElMessage.error('保存失败',error);
}
}
// 重置表单
const resetForm = () => {
formRef.value?.resetFields();
formData.value.useRangeEnum = 0;
formData.value.environment = '0';
formData.value.organizationIds = [];
};
onMounted(()=>{
getLocationInfo()
})
</script>
<style lang="scss" scoped>
</style>