<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="areaList" 
 | 
                :check-rules="[ 
 | 
                  { 
 | 
                    type: 'array', 
 | 
                    message: '请选择', 
 | 
                  }, 
 | 
                ]" 
 | 
              > 
 | 
                <ProFromAddressSelectV2 
 | 
                  v-model:areaList="form.areaList" 
 | 
                  areaListPlaceholder="请选择" 
 | 
                  :layer="AreaType.City" 
 | 
                /> 
 | 
              </ProFormItemV2> 
 | 
            </ProFormColItem> 
 | 
            <ProFormColItem :span="8"> 
 | 
              <ProFormItemV2 label="所属行业:" prop="industryTypeCode"> 
 | 
                <ProFormSelect 
 | 
                  v-model="form.industryTypeCode" 
 | 
                  placeholder="请选择所属行业" 
 | 
                  :value-enum="dictionaryDataList" 
 | 
                  clearable 
 | 
                ></ProFormSelect> 
 | 
              </ProFormItemV2> 
 | 
            </ProFormColItem> 
 | 
          </ProFormCol> 
 | 
          <ProFormCol> 
 | 
            <ProFormColItem :span="24"> 
 | 
              <ProFormItemV2 label="主营业务:" prop="mainBusiness"> 
 | 
                <ProFormTextArea 
 | 
                  v-model="form.mainBusiness" 
 | 
                  maxlength="200" 
 | 
                  :rows="6" 
 | 
                  show-word-limit 
 | 
                  placeholder="请输入主营业务" 
 | 
                /> 
 | 
              </ProFormItemV2> 
 | 
            </ProFormColItem> 
 | 
          </ProFormCol> 
 | 
        </ProForm> 
 | 
      </ChunkCell> 
 | 
      <ChunkCell title="联系信息"> 
 | 
        <ProForm 
 | 
          :model="form" 
 | 
          ref="settingFormRef" 
 | 
          label-width="140px" 
 | 
          :scroll-to-error="false" 
 | 
          :is-read="isDetail" 
 | 
        > 
 | 
          <ProFormCol> 
 | 
            <ProFormColItem :span="12"> 
 | 
              <ProFormItemV2 
 | 
                label="联系人:" 
 | 
                prop="contacts" 
 | 
                :check-rules="[{ message: '请输入联系人' }]" 
 | 
              > 
 | 
                <ProFormText 
 | 
                  v-model.trim="form.contacts" 
 | 
                  :maxlength="30" 
 | 
                  placeholder="请输入联系人" 
 | 
                /> 
 | 
              </ProFormItemV2> 
 | 
            </ProFormColItem> 
 | 
          </ProFormCol> 
 | 
          <ProFormCol> 
 | 
            <ProFormColItem :span="12"> 
 | 
              <ProFormItemV2 
 | 
                label="联系电话:" 
 | 
                prop="contactPhoneNumber" 
 | 
                :check-rules="[{ message: '请输入联系电话', type: 'phone' }]" 
 | 
              > 
 | 
                <ProFormText v-model.trim="form.contactPhoneNumber" placeholder="请输入联系电话" /> 
 | 
              </ProFormItemV2> 
 | 
            </ProFormColItem> 
 | 
          </ProFormCol> 
 | 
          <ProFormCol> 
 | 
            <ProFormColItem :span="12"> 
 | 
              <ProFormItemV2 label="邮箱:" prop="contactEmail"> 
 | 
                <ProFormText 
 | 
                  v-model.trim="form.contactEmail" 
 | 
                  :maxlength="30" 
 | 
                  placeholder="请输入邮箱" 
 | 
                  :formatter="filterCN" 
 | 
                /> 
 | 
              </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> 
 | 
            <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> 
 | 
          <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, 
 | 
} 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: 'AddOrEditEnterpriseView' }); 
 | 
  
 | 
type Props = { 
 | 
  isDetail: boolean; 
 | 
  emitAddEvent?: keyof GlobalEvent; 
 | 
  emitEditEvent?: keyof GlobalEvent; 
 | 
  backRouteName?: string; 
 | 
}; 
 | 
  
 | 
const props = withDefaults(defineProps<Props>(), { 
 | 
  emitAddEvent: 'enterprise:add', 
 | 
  emitEditEvent: 'enterprise:edit', 
 | 
  backRouteName: 'EnterpriseManageList', 
 | 
}); 
 | 
  
 | 
const route = useRoute(); 
 | 
const id = route.params.id as string; 
 | 
const isEdit = computed(() => !!id); 
 | 
const { dictionaryDataList } = useDictionaryDataSelect({ 
 | 
  categoryCode: computed(() => CategoryCode.IndustryCategory), 
 | 
}); 
 | 
const { closeViewPush } = useRouteView(); 
 | 
const eventContext = useGlobalEventContext(); 
 | 
  
 | 
const form = reactive({ 
 | 
  id: '', 
 | 
  enterpriseName: '', 
 | 
  legalPerson: '', 
 | 
  legalIdentity: '', 
 | 
  societyCreditCode: '', 
 | 
  industryTypeCode: '', 
 | 
  mainBusiness: '', 
 | 
  areaList: [] as string[], 
 | 
  contacts: '', 
 | 
  contactPhoneNumber: '', 
 | 
  contactEmail: '', 
 | 
  userName: '', 
 | 
  password: '', 
 | 
}); 
 | 
  
 | 
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.value) { 
 | 
      params.id = id; 
 | 
    } 
 | 
    let res = await enterpriseServices.saveEnterprise(removeEmptyKeys(params)); 
 | 
    if (res) { 
 | 
      Message.successMessage(isEdit.value ? '编辑成功' : '发布成功'); 
 | 
      eventContext.emit(isEdit.value ? 'enterprise:edit' : 'enterprise:add'); 
 | 
      handleBack(); 
 | 
    } 
 | 
  } catch (error) {} 
 | 
} 
 | 
  
 | 
function handleBack() { 
 | 
  closeViewPush(route, { 
 | 
    name: 'EnterpriseManageList', 
 | 
  }); 
 | 
} 
 | 
</script> 
 | 
  
 | 
<style lang="scss" scoped> 
 | 
@use '@/style/common.scss' as *; 
 | 
</style> 
 |