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.
202 lines
6.3 KiB
202 lines
6.3 KiB
<template> |
|
<Dialog :title="dialogTitle" v-model="dialogVisible"> |
|
<el-form |
|
ref="formRef" |
|
:model="formData" |
|
:rules="formRules" |
|
label-width="100px" |
|
v-loading="formLoading" |
|
> |
|
<el-form-item label="选择企业" prop="enterpriseId"> |
|
<el-select |
|
v-model="formData.enterpriseId" |
|
filterable |
|
remote |
|
reserve-keyword |
|
placeholder="请输入企业名称搜索" |
|
:remote-method="remoteSearchEnterprise" |
|
:loading="enterpriseLoading" |
|
> |
|
<el-option |
|
v-for="item in enterpriseOptions" |
|
:key="item.id" |
|
:label="item.enterprisesName" |
|
:value="item.id" |
|
/> |
|
</el-select> |
|
</el-form-item> |
|
<el-form-item label="资质名称" prop="qualificationName"> |
|
<el-select v-model="formData.qualificationName" placeholder="请选择资质名称"> |
|
<el-option |
|
v-for="dict in getIntDictOptions(DICT_TYPE.ENTERPRISES_QUA)" |
|
:key="dict.value" |
|
:label="dict.label" |
|
:value="dict.value" |
|
/> |
|
</el-select> |
|
|
|
</el-form-item> |
|
<el-form-item label="资质到期日期" prop="expiryDate"> |
|
<el-date-picker |
|
v-model="formData.expiryDate" |
|
type="date" |
|
value-format="x" |
|
placeholder="选择资质到期日期" |
|
/> |
|
</el-form-item> |
|
<!-- <el-form-item label="资质描述" prop="qualificationDescription"> |
|
<Editor v-model="formData.qualificationDescription" height="150px" /> |
|
</el-form-item> --> |
|
|
|
<!-- <el-form-item label="办理日期" prop="handleDate"> |
|
<el-date-picker |
|
v-model="formData.handleDate" |
|
type="date" |
|
value-format="x" |
|
placeholder="选择办理日期" |
|
/> |
|
</el-form-item> --> |
|
<el-form-item label="资质编号" prop="enterpriseAuth"> |
|
<el-input v-model="formData.enterpriseAuth" placeholder="请输入资质编号" /> |
|
</el-form-item> |
|
</el-form> |
|
<el-form-item label="资质图片" prop="files"> |
|
<UploadImgs v-model="fileIds" :limit="1" /> |
|
</el-form-item> |
|
<template #footer> |
|
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button> |
|
<el-button @click="dialogVisible = false">取 消</el-button> |
|
</template> |
|
</Dialog> |
|
</template> |
|
<script setup lang="ts"> |
|
import { EnterpriseQualificationApi, EnterpriseQualificationVO } from '@/api/qualification' |
|
import { EnterprisesApi } from '@/api/enterprises' |
|
/** 企业资质 表单 */ |
|
defineOptions({ name: 'EnterpriseQualificationForm' }) |
|
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict' |
|
const { t } = useI18n() // 国际化 |
|
const message = useMessage() // 消息弹窗 |
|
|
|
|
|
|
|
const dialogVisible = ref(false) // 弹窗的是否展示 |
|
const dialogTitle = ref('') // 弹窗的标题 |
|
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用 |
|
const formType = ref('') // 表单的类型:create - 新增;update - 修改 |
|
const formData = ref({ |
|
id: undefined, |
|
enterpriseId: undefined, |
|
qualificationName: undefined, |
|
expiryDate: undefined, |
|
qualificationDescription: undefined, |
|
updateBy: undefined, |
|
createBy: undefined, |
|
handleDate: undefined, |
|
enterpriseAuth: undefined, |
|
files: [] as any[], |
|
}) |
|
const formRules = reactive({ |
|
qualificationName: [{ required: true, message: '资质名称,例如:排污许可证、环保合格证不能为空', trigger: 'blur' }], |
|
}) |
|
const formRef = ref() // 表单 Ref |
|
const fileIds=ref([]) |
|
|
|
// 添加企业搜索相关的响应式变量 |
|
const enterpriseLoading = ref(false) |
|
const enterpriseOptions = ref([]) |
|
|
|
// 远程搜索企业的方法 |
|
const remoteSearchEnterprise = async (query: string) => { |
|
if (query === '') { |
|
enterpriseOptions.value = [] |
|
return |
|
} |
|
enterpriseLoading.value = true |
|
try { |
|
const res = await EnterprisesApi.getEnterprisesPage({ |
|
pageNo: 1, |
|
pageSize: 5, |
|
enterprisesName: query |
|
}) |
|
enterpriseOptions.value = res.list |
|
} finally { |
|
enterpriseLoading.value = false |
|
} |
|
} |
|
|
|
|
|
|
|
/** 打开弹窗 */ |
|
const open = async (type: string, id?: number,enterpriseId?:number) => { |
|
dialogVisible.value = true |
|
dialogTitle.value = t('action.' + type) |
|
formType.value = type |
|
resetForm() |
|
fileIds.value=[] |
|
// 修改时,设置数据 |
|
if (id) { |
|
formLoading.value = true |
|
try { |
|
let res1 = await EnterpriseQualificationApi.getEnterpriseQualification(id) |
|
formData.value = res1; |
|
// 确保资质名称是数字类型 |
|
formData.value.qualificationName = parseInt(formData.value.qualificationName) |
|
fileIds.value = res1.files |
|
// 根据企业ID获取企业信息并设置下拉框选项 |
|
// 获取企业详情 |
|
|
|
} finally { |
|
formLoading.value = false |
|
} |
|
} |
|
if (formData.value.enterpriseId || enterpriseId) { |
|
formData.value.enterpriseId = formData.value.enterpriseId || enterpriseId |
|
const res = await EnterprisesApi.getEnterprises(formData.value.enterpriseId) |
|
enterpriseOptions.value = [res] |
|
} |
|
} |
|
defineExpose({ open }) // 提供 open 方法,用于打开弹窗 |
|
|
|
/** 提交表单 */ |
|
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调 |
|
const submitForm = async () => { |
|
// 校验表单 |
|
await formRef.value.validate() |
|
// 提交请求 |
|
formLoading.value = true |
|
try { |
|
formData.value.files = fileIds.value.map(f => ( f.id )) |
|
const data = formData.value as unknown as EnterpriseQualificationVO |
|
|
|
if (formType.value === 'create') { |
|
await EnterpriseQualificationApi.createEnterpriseQualification(data) |
|
message.success(t('common.createSuccess')) |
|
} else { |
|
await EnterpriseQualificationApi.updateEnterpriseQualification(data) |
|
message.success(t('common.updateSuccess')) |
|
} |
|
dialogVisible.value = false |
|
// 发送操作成功的事件 |
|
emit('success') |
|
} finally { |
|
formLoading.value = false |
|
} |
|
} |
|
|
|
/** 重置表单 */ |
|
const resetForm = () => { |
|
formData.value = { |
|
id: undefined, |
|
enterpriseId: undefined, |
|
qualificationName: undefined, |
|
expiryDate: undefined, |
|
qualificationDescription: undefined, |
|
updateBy: undefined, |
|
createBy: undefined, |
|
handleDate: undefined, |
|
enterpriseAuth: undefined, |
|
} |
|
formRef.value?.resetFields() |
|
} |
|
</script>
|
|
|