<template>
|
<LoadingLayout :loading="isEdit && isLoading">
|
<AppScrollContainer>
|
<ChunkCell title="企业基本信息">
|
<ProForm :model="form" ref="formRef" label-width="140px" :is-read="isDetail">
|
<ProFormCol>
|
<ProFormColItem :span="8">
|
<ProFormItemV2
|
label="企业名称:"
|
prop="enterpriseName"
|
:check-rules="[{ message: '请输入企业名称' }]"
|
>
|
<ProFormText
|
v-model.trim="form.enterpriseName"
|
:maxlength="30"
|
placeholder="请输入企业名称"
|
/>
|
</ProFormItemV2>
|
</ProFormColItem>
|
<ProFormColItem :span="8">
|
<ProFormItemV2 label="法人姓名:" prop="legalPerson">
|
<ProFormText
|
v-model.trim="form.legalPerson"
|
:maxlength="30"
|
placeholder="请输入法人姓名"
|
/>
|
</ProFormItemV2>
|
</ProFormColItem>
|
<ProFormColItem :span="8">
|
<ProFormItemV2 label="法人身份证号:" prop="legalIdentity">
|
<ProFormText
|
v-model.trim="form.legalIdentity"
|
:maxlength="30"
|
placeholder="请输入法人身份证号"
|
/>
|
</ProFormItemV2>
|
</ProFormColItem>
|
</ProFormCol>
|
<ProFormCol>
|
<ProFormColItem :span="8">
|
<ProFormItemV2
|
label="统一社会信用代码:"
|
prop="societyCreditCode"
|
:check-rules="[{ message: '请输入统一社会信用代码', type: 'societyCreditCode' }]"
|
>
|
<ProFormText
|
v-model.trim="form.societyCreditCode"
|
placeholder="请输入统一社会信用代码"
|
/>
|
</ProFormItemV2>
|
</ProFormColItem>
|
<ProFormColItem :span="8">
|
<ProFormItemV2
|
label="注册资本:"
|
prop="societyCreditCode"
|
:check-rules="[{ message: '请输入注册资本', type: 'societyCreditCode' }]"
|
>
|
<ProFormText v-model.trim="form.societyCreditCode" placeholder="请输入注册资本" />
|
</ProFormItemV2>
|
</ProFormColItem>
|
<ProFormColItem :span="8">
|
<ProFormItemV2
|
label="企业类型:"
|
prop="societyCreditCode"
|
:check-rules="[{ message: '请输入企业类型', type: 'societyCreditCode' }]"
|
>
|
<ProFormText v-model.trim="form.societyCreditCode" placeholder="请输入企业类型" />
|
</ProFormItemV2>
|
</ProFormColItem>
|
</ProFormCol>
|
<ProFormCol>
|
<ProFormColItem :span="8">
|
<ProFormItemV2
|
label="成立日期:"
|
prop="date"
|
:check-rules="[{ message: '请选择成立日期' }]"
|
>
|
<ProFormDatePicker v-model="form.date" type="date" placeholder="请选择成立日期" />
|
</ProFormItemV2>
|
</ProFormColItem>
|
<ProFormColItem :span="8">
|
<ProFormItemV2
|
label="所在省份:"
|
prop="areaList"
|
:check-rules="[
|
{
|
type: 'array',
|
message: '请选择',
|
},
|
]"
|
>
|
<ProFromAddressSelectV2
|
v-model:areaList="form.areaList"
|
areaListPlaceholder="请选择"
|
:layer="AreaType.City"
|
/>
|
</ProFormItemV2>
|
</ProFormColItem>
|
<ProFormColItem :span="8">
|
<ProFormItemV2
|
label="所在城市:"
|
prop="areaList"
|
:check-rules="[
|
{
|
type: 'array',
|
message: '请选择',
|
},
|
]"
|
>
|
<ProFromAddressSelectV2
|
v-model:areaList="form.areaList"
|
areaListPlaceholder="请选择"
|
:layer="AreaType.City"
|
/>
|
</ProFormItemV2>
|
</ProFormColItem>
|
</ProFormCol>
|
<ProFormCol>
|
<ProFormColItem :span="8">
|
<ProFormItemV2
|
label="详细地址:"
|
prop="societyCreditCode"
|
:check-rules="[{ message: '请输入详细地址' }]"
|
>
|
<ProFormText v-model.trim="form.societyCreditCode" placeholder="请输入详细地址" />
|
</ProFormItemV2>
|
</ProFormColItem>
|
</ProFormCol>
|
<ProFormItemV2
|
label="经营范围:"
|
prop="mainBusiness"
|
:check-rules="[{ message: '请输入经营范围' }]"
|
>
|
<ProFormTextArea
|
v-model="form.mainBusiness"
|
maxlength="200"
|
:rows="6"
|
show-word-limit
|
placeholder="请输入经营范围"
|
/>
|
</ProFormItemV2>
|
</ProForm>
|
</ChunkCell>
|
<ChunkCell title="合作信息">
|
<ProForm
|
:model="form"
|
ref="settingFormRef"
|
label-width="140px"
|
:scroll-to-error="false"
|
:is-read="isDetail"
|
>
|
<ProFormCol>
|
<ProFormColItem :span="8">
|
<ProFormItemV2
|
label="联系人:"
|
prop="contacts"
|
:check-rules="[{ message: '请输入联系人' }]"
|
>
|
<ProFormText
|
v-model.trim="form.contacts"
|
:maxlength="30"
|
placeholder="请输入联系人"
|
/>
|
</ProFormItemV2>
|
</ProFormColItem>
|
<ProFormColItem :span="8">
|
<ProFormItemV2
|
label="联系电话:"
|
prop="contactPhoneNumber"
|
:check-rules="[{ message: '请输入联系电话', type: 'phone' }]"
|
>
|
<ProFormText v-model.trim="form.contactPhoneNumber" placeholder="请输入联系电话" />
|
</ProFormItemV2>
|
</ProFormColItem>
|
<ProFormColItem :span="8">
|
<ProFormItemV2 label="联系邮箱:" prop="contactEmail">
|
<ProFormText
|
v-model.trim="form.contactEmail"
|
:maxlength="30"
|
placeholder="请输入联系邮箱"
|
:formatter="filterCN"
|
/>
|
</ProFormItemV2>
|
</ProFormColItem>
|
</ProFormCol>
|
<ProFormCol>
|
<ProFormColItem :span="8">
|
<ProFormItemV2 label="合作状态:" prop="contacts"> </ProFormItemV2>
|
</ProFormColItem>
|
<ProFormColItem :span="8">
|
<ProFormItemV2 label="签约状态:" prop="contacts"> </ProFormItemV2>
|
</ProFormColItem>
|
<ProFormColItem :span="8">
|
<ProFormItemV2 label="合作协议:" prop="contacts"> </ProFormItemV2>
|
</ProFormColItem>
|
</ProFormCol>
|
</ProForm>
|
</ChunkCell>
|
<ChunkCell title="账号信息">
|
<ProForm
|
:model="form"
|
ref="accountFormRef"
|
label-width="140px"
|
:scroll-to-error="false"
|
:is-read="isDetail"
|
>
|
<ProFormCol>
|
<ProFormColItem :span="8">
|
<ProFormItemV2
|
label="账号:"
|
prop="userName"
|
:check-rules="[{ message: '请输入账号' }]"
|
>
|
<ProFormText
|
v-model.trim="form.userName"
|
:maxlength="30"
|
placeholder="请输入账号"
|
/>
|
</ProFormItemV2>
|
</ProFormColItem>
|
</ProFormCol>
|
<ProFormCol>
|
<ProFormColItem :span="8" v-if="!isEdit">
|
<ProFormItemV2
|
label="密码:"
|
prop="password"
|
:check-rules="[{ message: '请输入密码' }]"
|
>
|
<ProFormText
|
v-model.trim="form.password"
|
:maxlength="30"
|
placeholder="请输入密码"
|
/>
|
</ProFormItemV2>
|
</ProFormColItem>
|
</ProFormCol>
|
<ProFormCol>
|
<ProFormColItem :span="8">
|
<ProFormItemV2
|
label="操作密码:"
|
prop="password"
|
:check-rules="[{ message: '请输入操作密码' }]"
|
>
|
<ProFormText
|
v-model.trim="form.password"
|
:maxlength="30"
|
placeholder="请输入操作密码"
|
/>
|
</ProFormItemV2>
|
</ProFormColItem>
|
</ProFormCol>
|
<div class="chuck-add-or-edit-actions">
|
<el-button @click="handleBack">返回</el-button>
|
<el-button v-if="!isDetail" type="primary" @click="handleSubmit">确认</el-button>
|
</div>
|
</ProForm>
|
</ChunkCell>
|
</AppScrollContainer>
|
</LoadingLayout>
|
</template>
|
|
<script setup lang="ts">
|
import {
|
LoadingLayout,
|
AppScrollContainer,
|
ProForm,
|
ProFormItemV2,
|
ChunkCell,
|
ProFormText,
|
ProFormSelect,
|
ProFormTextArea,
|
ProFormCol,
|
ProFormColItem,
|
ProFormDatePicker,
|
} from '@bole-core/components';
|
import { FormRules, FormInstance } from 'element-plus';
|
import * as enterpriseServices from '@/services/api/enterprise';
|
import { useRouteView, useGlobalEventContext, GlobalEvent } from '@/hooks';
|
import _ from 'lodash';
|
import { validateFormList, filterCN, removeEmptyKeys } from '@/utils';
|
import { Message, BoleRegExp } from '@bole-core/core';
|
import { useQuery } from '@tanstack/vue-query';
|
import { AreaType } from '@/constants';
|
|
defineOptions({
|
name: 'AddOrEditCustomerView',
|
});
|
|
type Props = {
|
isDetail: boolean;
|
};
|
|
const props = withDefaults(defineProps<Props>(), {});
|
|
const route = useRoute();
|
const id = route.params.id as string;
|
const isEdit = !!id;
|
|
const { closeViewPush } = useRouteView();
|
const eventContext = useGlobalEventContext();
|
|
const form = reactive({
|
id: '',
|
enterpriseName: '',
|
legalPerson: '',
|
legalIdentity: '',
|
societyCreditCode: '',
|
industryTypeCode: '',
|
mainBusiness: '',
|
areaList: [] as string[],
|
contacts: '',
|
contactPhoneNumber: '',
|
contactEmail: '',
|
userName: '',
|
password: '',
|
date: '',
|
});
|
|
const { isLoading } = useQuery({
|
queryKey: ['enterpriseServices/getEnterprise', id],
|
queryFn: async () => {
|
return await enterpriseServices.getEnterprise(
|
{ id: id },
|
{
|
showLoading: false,
|
}
|
);
|
},
|
onSuccess(data) {
|
form.id = data.id;
|
form.enterpriseName = data.enterpriseName;
|
form.legalPerson = data.legalPerson;
|
form.legalIdentity = data.legalIdentity;
|
form.societyCreditCode = data.societyCreditCode;
|
form.industryTypeCode = data.industryTypeCode ?? '';
|
form.mainBusiness = data.mainBusiness;
|
form.contacts = data.contacts;
|
form.contactPhoneNumber = data.contactPhoneNumber;
|
form.contactEmail = data.contactEmail;
|
form.userName = data.userName;
|
form.areaList = [data.provinceCode, data.cityCode].filter(Boolean);
|
},
|
enabled: computed(() => !!id),
|
});
|
|
const formRef = ref<FormInstance>();
|
const settingFormRef = ref<FormInstance>();
|
const accountFormRef = ref<FormInstance>();
|
|
async function handleSubmit() {
|
try {
|
const valid = await validateFormList([
|
formRef.value,
|
settingFormRef.value,
|
accountFormRef.value,
|
]);
|
if (valid) {
|
handleCreateOrEditFlexEnterprise();
|
}
|
} catch (error) {}
|
}
|
|
async function handleCreateOrEditFlexEnterprise() {
|
try {
|
let params: API.SaveEnterpriseCommand = {
|
enterpriseName: form.enterpriseName,
|
legalPerson: form.legalPerson,
|
legalIdentity: form.legalIdentity,
|
societyCreditCode: form.societyCreditCode,
|
provinceCode: form.areaList[0],
|
cityCode: form.areaList[1],
|
industryTypeCode: form.industryTypeCode,
|
mainBusiness: form.mainBusiness,
|
contacts: form.contacts,
|
contactPhoneNumber: form.contactPhoneNumber,
|
contactEmail: form.contactEmail,
|
userName: form.userName,
|
password: form.password,
|
};
|
if (isEdit) {
|
params.id = id;
|
}
|
let res = await enterpriseServices.saveEnterprise(removeEmptyKeys(params));
|
if (res) {
|
Message.successMessage(isEdit ? '编辑成功' : '发布成功');
|
eventContext.emit(isEdit ? 'customerManage:edit' : 'customerManage:add');
|
handleBack();
|
}
|
} catch (error) {}
|
}
|
|
function handleBack() {
|
closeViewPush(route, {
|
name: 'EnterpriseManageList',
|
});
|
}
|
</script>
|