12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007 |
- <template>
- <ion-page>
- <ion-header class="header-theme2">
- <ion-toolbar>
- <ion-buttons slot="start">
- <ion-icon :icon="arrowBackOutline" @click="onBack"></ion-icon>
- </ion-buttons>
- <ion-title>
- 企业信息录入
- </ion-title>
- </ion-toolbar>
- </ion-header>
- <ion-content>
- <div class="stepFlex">
- <div v-for="(record,key) in stepList" :key="key" class="stepFlex-item">
- <div
- :class="[(record.val < curStepData?.statusVal || curStepData?.statusVal == stepList.val) ? 'greenCircle' :record.val == curStepData?.statusVal ? 'now' : 'grayCircle']"></div>
- <div v-if="key !== stepList.length - 1"
- :class="[record.val < curStepData?.statusVal ? 'greenLine' : 'grayLine']"></div>
- <div class="stepFlex-item-label">
- <p class="stepFlex-item-label-title" @click="onRedirect(record.val)" >{{ record.title }}</p>
- <!--<p class="stepFlex-item-label-desc" @click="onRedirect(record.val)" >{{ record.desc }}</p>-->
- </div>
- </div>
- </div>
- <form autocomplete="off">
- <div class="bw-vue-form">
- <div class="form-title">基本项目</div>
- <div class="form-input">
- <ion-label>企业名称<span class="danger">*</span></ion-label>
- <div>
- <ion-input placeholder="请输入企业名称" label-placement="stacked" :style="{float: 'left',width:isAdd?'78%':'100%'}"
- @click="onOpenCompany" v-model="dataModel.companyName" class="custom" readonly >
- </ion-input>
- <ion-item v-if="isAdd" style="width:22%;float: right;padding:0px;margin: 0px;">
- <company-selection-like ref="refCompanySelectionLike" @resultInfo="onResultInfo"></company-selection-like>
- </ion-item>
- </div>
- <!-- <ion-label v-if="isAdd" style="float:right;width:80px;color:#02A5F0FF;position: relative;bottom:34px;left:14px;"-->
- <!-- @click="onGetFirmByCompanyName">同步</ion-label>-->
- <!-- <ion-note slot="error">企业名称不能为空</ion-note>-->
- </div>
- <div class="form-input">
- <ion-label>统一信用代码<span class="danger">*</span></ion-label>
- <ion-input placeholder="请输入统一信用代码或工商注册号" label-placement="stacked" :clear-input="true"
- v-model="dataModel.companyCode" class="custom">
- </ion-input>
- <!-- <ion-note slot="error">统一信用代码不能为空</ion-note>-->
- </div>
- <!-- <div class="form-select">-->
- <!-- <ion-label>所属驿站<span class="danger">*</span></ion-label>-->
- <!-- <ion-select disabled id="siteID" name="siteID" cancel-text="取消" v-model="dataModel.siteID"-->
- <!-- interface="action-sheet" placeholder="请选择所属驿站" style="width: 100%;text-align: left;">-->
- <!-- <ion-select-option v-for="(record,key) in siteList" :key="key" v-model:value="record.siteID">-->
- <!-- {{ record.siteName }}-->
- <!-- </ion-select-option>-->
- <!-- </ion-select>-->
- <!--<!– <ion-note slot="error">服务驿站不能为空</ion-note>–>-->
- <!-- </div>-->
- <ion-label style="padding-left: 10px;">所在街道/社区/镇村<span class="danger">*</span></ion-label>
- <div class="form-select">
- <ion-select disabled name="regionCode" id="regionCode" okText="确定" cancelText="取消" v-model="dataModel.regionCode"
- interface="action-sheet" placeholder="请选择市/县" style="width:50%;float:left;" @ionChange="changeCity()" >
- <ion-select-option v-for=" (it,key) in regionList" :key="key" :value="it.code">
- {{ it.name }}
- </ion-select-option>
- </ion-select>
- <ion-select interface="action-sheet" placeholder="请选择街道/社区/镇村" cancel-text="取消"
- id="streetCode" v-model="dataModel.streetCode" style="width: 50%;float: left;">
- <ion-select-option v-for="(record,key) in streetList" :key="key"
- v-model:value="record.code">
- {{ record.name }}
- </ion-select-option>
- </ion-select>
- </div>
- <div style="width: 100%;overflow: hidden;"></div>
- <div class="form-input">
- <ion-label>办公地址<span class="danger">*</span></ion-label>
- <ion-textarea placeholder="请输入办公地址" label-placement="stacked" :rows="3" :clear-input="true"
- v-model="dataModel.companyAddress" class="custom" style="border-bottom: 1px solid #fff2e8;">
- </ion-textarea>
- <!-- <ion-note slot="error">办公地址不能为空</ion-note>-->
- </div>
- <div class="form-input">
- <ion-label>企业联系人<span class="danger">*</span></ion-label>
- <ion-input placeholder="请输入企业联系人" label-placement="stacked" :clear-input="true"
- v-model="dataModel.userName" class="custom">
- </ion-input>
- <!-- <ion-note slot="error">企业联系人不能为空</ion-note>-->
- </div>
- <div class="form-input">
- <ion-label>联系电话<span class="danger">*</span></ion-label>
- <ion-input placeholder="请输入联系电话" label-placement="stacked" :clear-input="true"
- v-model="dataModel.userMobile" class="custom">
- </ion-input>
- <!-- <ion-note slot="error">企业联系电话不能为空</ion-note>-->
- </div>
- <div class="form-select">
- <ion-label>企业状态<span class="danger">*</span></ion-label>
- <ion-select id="recordStatus" name="recordStatus" cancel-text="取消" v-model="dataModel.recordStatus"
- interface="action-sheet" placeholder="请选择企业状态" style="width: 100%;text-align: left;">
- <ion-select-option v-for="(record,key) in companyStatusList" :key="key"
- v-model:value="record.value">
- {{ record.name }}
- </ion-select-option>
- </ion-select>
- <!-- <ion-note slot="error">企业状态不能为空</ion-note>-->
- </div>
- <div class="form-input">
- <ion-label>用工情况(人,含临时人员)<span class="danger">*</span></ion-label>
- <ion-input type="number" placeholder="请输入用工人数" label-placement="stacked" :clear-input="true"
- v-model="dataModel.workSituation" class="custom" @ionBlur="workSituationBlur">
- </ion-input>
- </div>
- <div class="form-title">
- 扩展项目
- <div style="float:right;">
- <ion-label style="color: red;font-size: 14px;" @click="isShow=!isShow">{{isShow?"收起":"展开"}}</ion-label>
- </div>
- </div>
- <div v-show="isShow" >
- <div class="form-select">
- <ion-label>是否缺工</ion-label>
- <ion-select id="isShortAge" name="isShortAge" cancel-text="取消" v-model="dataModel.isShortage"
- interface="action-sheet" placeholder="请选择是否缺工" style="width: 100%;text-align: left;">
- <ion-select-option v-for="(record,key) in shortAgeTypeList" :key="key"
- v-model:value="record.value">
- {{ record.name }}
- </ion-select-option>
- </ion-select>
- </div>
- <div class="form-input">
- <ion-label>法定代表人(负责人)</ion-label>
- <ion-input placeholder="请输入法定代表人" label-placement="stacked" :clear-input="true"
- v-model="dataModel.frName" class="custom">
- </ion-input>
- </div>
- <div class="form-input">
- <ion-label>营业执照有效期</ion-label>
- <div>
- <ion-radio v-model:checked="isLongDate" justify="start" labelPlacement="end"
- @click="changeLongDate" style="height:30px;">至长期</ion-radio>
- <ion-datetime-button datetime="validDate" style="position:relative;right:105px;"></ion-datetime-button>
- <ion-modal :keep-contents-mounted="true" >
- <ion-datetime id="validDate" name="validDate"
- v-model="dataModel.validDate" :prefer-wheel="true" @ionChange="changeValidDate"
- dataformatas="YYYY-MM-DD" presentation="date" cancel-text="取消" done-text="确定"
- :show-default-buttons="true" >
- </ion-datetime>
- </ion-modal>
- </div>
- </div>
- <div class="form-input">
- <ion-label>成立日期</ion-label>
- <ion-datetime-button datetime="establishmentTime" style="position:relative;right:110px;" ></ion-datetime-button>
- <ion-modal :keep-contents-mounted="true" >
- <ion-datetime id="establishmentTime" name="establishmentTime"
- v-model="dataModel.establishmentTime" :prefer-wheel="true"
- dataformatas="YYYY-MM-DD" presentation="date" cancel-text="取消" done-text="确定"
- :show-default-buttons="true" >
- </ion-datetime>
- </ion-modal>
- </div>
- <div class="form-input" >
- <ion-label>注册资本</ion-label>
- <div>
- <ion-input placeholder="请输入注册资本" label-placement="stacked" :clear-input="true"
- v-model="dataModel.registeredCapital" class="custom" style="width:60%;float:left;">
- </ion-input>
- <ion-select id="registeredCapitalType" name="registeredCapitalType" cancel-text="取消" v-model="dataModel.registeredCapitalType"
- interface="action-sheet" style="width: 40%;text-align: left;">
- <ion-select-option v-for="(record,key) in registeredCapitalTypeList" :key="key"
- v-model:value="record.value">
- {{ record.name }}
- </ion-select-option>
- </ion-select>
- </div>
- </div>
- <div class="form-select">
- <ion-label>企业注册地址行政区划</ion-label>
- <ion-select interface="action-sheet" placeholder="请选择" cancel-text="取消"
- id="signInPoliticalArea" v-model="dataModel.signInPoliticalArea"
- style="width: 100%;text-align: left;">
- <ion-select-option v-for="(record,key) in regionList" :key="key"
- v-model:value="record.code">
- {{ record.name }}
- </ion-select-option>
- </ion-select>
- </div>
- <div class="form-input" >
- <ion-label>企业邮箱</ion-label>
- <ion-input placeholder="请输入企业邮箱" label-placement="stacked" :clear-input="true"
- v-model="dataModel.companyEmail" class="custom">
- </ion-input>
- </div>
- <div class="form-select">
- <ion-label>经济类型</ion-label>
- <ion-select interface="action-sheet" placeholder="请选择经济类型" cancel-text="取消"
- id="companyType" v-model="dataModel.companyType" style="width: 100%;text-align: left;">
- <ion-select-option v-for="(record,key) in companyTypeList" :key="key"
- v-model:value="record.value">
- {{ record.name }}
- </ion-select-option>
- </ion-select>
- </div>
- <div class="form-input">
- <ion-label>所属行业</ion-label>
- <div>
- <ion-input placeholder="请选择所属行业" label-placement="stacked" style="float: left;width:78%;"
- v-model="dataModel.industryName" class="custom" readonly >
- </ion-input>
- <ion-item style="width:22%;float: right;padding:0px;margin: 0px;">
- <industry-selection :IndustryId="dataModel.industryID" @SetIndustryID="onSetIndustryID"></industry-selection>
- </ion-item>
- </div>
- <!-- <ion-select interface="action-sheet" placeholder="请选择所属行业" cancel-text="取消"-->
- <!-- id="professionID" v-model="dataModel.professionID" style="width: 100%;text-align: left;">-->
- <!-- <ion-select-option v-for="(record,key) in professionList" :key="key"-->
- <!-- v-model:value="record.value">-->
- <!-- {{ record.name }}-->
- <!-- </ion-select-option>-->
- <!-- </ion-select>-->
- </div>
- <div class="form-select">
- <ion-label>所属产业分类</ion-label>
- <ion-select interface="action-sheet" placeholder="请选择所属产业分类" cancel-text="取消"
- id="estateCategoryID" v-model="dataModel.estateCategoryID" style="width: 100%;text-align: left;">
- <ion-select-option v-for="(record,key) in estateCategoryList" :key="key"
- v-model:value="record.value">
- {{ record.name }}
- </ion-select-option>
- </ion-select>
- </div>
- <!-- <div class="form-select">-->
- <!-- <ion-label>企业标签</ion-label>-->
- <!-- <ion-select interface="action-sheet" placeholder="请选择企业标签" cancel-text="取消"-->
- <!-- id="tagID" v-model="dataModel.tagID" style="width: 100%;text-align: left;">-->
- <!-- <ion-select-option v-for="(record,key) in companyTagList" :key="key"-->
- <!-- v-model:value="record.value" style="width:100%;text-align: left;">-->
- <!-- {{ record.name }}-->
- <!-- </ion-select-option>-->
- <!-- </ion-select>-->
- <!-- </div>-->
- <div class="form-input">
- <ion-label>企业网站</ion-label>
- <ion-input placeholder="请输入企业网站" label-placement="stacked" :clear-input="true"
- v-model="dataModel.website" class="custom">
- </ion-input>
- </div>
- <div class="form-input">
- <ion-label>企业福利</ion-label>
- <ion-textarea placeholder="请输入企业福利" :rows="3" label-placement="stacked" :clear-input="true"
- v-model="dataModel.bonus" class="custom" style="border-bottom: 1px solid #fff2e8;">
- </ion-textarea>
- </div>
- <div class="form-select">
- <ion-label>企业规模</ion-label>
- <ion-select interface="action-sheet" placeholder="请选择企业规模" cancel-text="取消"
- id="companyModel" v-model="dataModel.companyModel" style="width: 100%;text-align: left;">
- <ion-select-option v-for="(record,key) in companyModelList" :key="key"
- v-model:value="record.value" style="width:100%;text-align: left;">
- {{ record.name }}
- </ion-select-option>
- </ion-select>
- </div>
- <div class="form-input">
- <ion-label>参保人数(人)</ion-label>
- <ion-input type="number" placeholder="请输入参保人数" label-placement="stacked" :clear-input="true"
- v-model="dataModel.insuredCount" class="custom" @ionBlur="insuredCountBlur">
- </ion-input>
- </div>
- <div class="form-input">
- <ion-label>经营范围</ion-label>
- <ion-textarea placeholder="请输入经营范围" :rows="3" label-placement="stacked" :clear-input="true"
- v-model="dataModel.businScope" class="custom" style="border-bottom: 1px solid #fff2e8;">
- </ion-textarea>
- </div>
- <div class="form-input">
- <ion-label>企业简介</ion-label>
- <ion-textarea placeholder="请输入企业简介" :rows="3" label-placement="stacked" :clear-input="true"
- v-model="dataModel.companyDesc" class="custom" style="border-bottom: 1px solid #fff2e8;">
- </ion-textarea>
- </div>
- <div class="form-input">
- <ion-label>标签</ion-label>
- <ion-row>
- <ion-col size="auto" v-for="(itemLabel,keyLabel) in dataModel.listLabel" :key="keyLabel">
- <ion-button color="primary" size="small">{{ itemLabel.labelName }}</ion-button>
- </ion-col>
- <ion-col>
- <ion-item style="float: right;padding:0px;margin: 0px;">
- <label-selection :key="'refLabelSelectionKey'" :ref="refLabelSelection" :big-type="1" :list-label="dataModel.listLabel"
- :title="'企业标签'" v-bind="$attrs" @resultBack="onResultBackLabels"></label-selection>
- <!-- <component :is="refLabelSelection" :big-type="1" :list-label="dataModel.listLabel" :title="'企业标签'"-->
- <!-- @resultBack="onResultBackLabels"></component>-->
- </ion-item>
- </ion-col>
- </ion-row>
- </div>
- </div>
- </div>
- </form>
- </ion-content>
- <ion-footer>
- <ion-toolbar>
- <ion-button style="width:100%;" @click="onNext">保存并下一步</ion-button>
- </ion-toolbar>
- </ion-footer>
- <ion-alert
- :is-open="alertingInfo"
- :header="infoAlterData.title"
- :message="infoAlterData.message"
- :buttons="infoAlertButtons"
- @didDismiss="setInfoAlertOpen(false)"
- ></ion-alert>
- <ion-loading
- :is-open="loadingFirm"
- message="正在同步企业信息..."
- @didDismiss="setInfoLoadingOpen(false)" >
- </ion-loading>
- </ion-page>
- </template>
- <script lang="ts">
- import {arrowBackOutline} from 'ionicons/icons';
- import {defineComponent, ref, reactive, computed, toRefs} from "vue";
- import {useRoute,useRouter} from "vue-router";
- import {alertController, onIonViewDidEnter} from "@ionic/vue";
- import {useVuelidate} from "@vuelidate/core";
- import {
- getCompanyById,
- getRegionList,
- getSiteList,
- getStreeList,
- normalFirm,
- saveCompany
- } from "@/api/company";
- import {required} from "@vuelidate/validators";
- import {getSysDictionaryList} from "@/api/system/dictionary";
- import dayjs from "dayjs";
- import IndustrySelection from "@/components/industrySelection.vue";
- import {getPosition} from "@/utils/position";
- import CompanySelectionLike from "@/components/companySelectionLike.vue";
- import LabelSelection from "@/components/labelSelection.vue";
- interface StepParams{
- name: string,
- statusVal: number,
- loginUserID: string
- }
- export default defineComponent({
- // name: 'CompanyEdit',
- components:{IndustrySelection,CompanySelectionLike, LabelSelection},
- setup() {
- const route = useRoute();
- const router = useRouter();
- const isAllowCommit = ref(true);
- const curStepData = ref<StepParams>({
- name:"",
- statusVal: 1,
- loginUserID:""
- });
- const isAdd = ref(false);
- const isShow = ref<any>(false);
- const loadingFirm = ref(false);
- // 信息弹窗内容
- const infoAlterData = reactive({
- title:"",
- message:""
- });
- const alertingInfo = ref(false);
- function setInfoAlertOpen(value: boolean) {
- alertingInfo.value = value;
- }
- function setInfoLoadingOpen(value: boolean) {
- loadingFirm.value = value;
- }
- const infoAlertButtons = [
- {
- text: '确定',
- role: 'confirm',
- handler: () => {
- setInfoAlertOpen(false);
- },
- },
- ];
- const isLongDate = ref<any>(false);
- const formState = reactive({
- dataModel: {
- companyID:null,
- companyCode: '',
- companyName: null,
- siteID: null,
- companyAddress: null,
- userName: null,
- userMobile: '',
- recordStatus: null,
- isShortage: null,
- frName: null,
- validDate: dayjs().format("YYYY-MM-DD"),
- establishmentTime: dayjs().format("YYYY-MM-DD"),
- registeredCapital:null,
- signInPoliticalArea:null,
- companyEmail: '',
- companyType: null,
- industryID:null,
- industryName:null,
- estateCategoryID: "",
- tagID:null,
- website:null,
- companyModel: 0,
- regionCode: null,
- streetCode: null,
- workSituation: null,
- insuredCount: null,
- businScope: null,
- companyDesc: null,
- longitude: null,
- latitude: null,
- listLabel: null
- }});
- const stepList = ref([
- {title: '基础信息', desc: '企业基础信息', val: 1},
- {title: '岗位信息', desc: '企业岗位信息', val: 3}
- ]);
- const companyStatusList = ref([]);
- const companyModelList = ref<any>([]);
- const companyTypeList = ref<any>([]);
- const companyTagList = ref<any>([]);
- const estateCategoryList = ref<any>([]);
- const regionList = ref<any>([]);
- const streetList = ref<any>([]);
- const siteList = ref<any>([]);
- const shortAgeTypeList = ref<any>([]);
- const registeredCapitalTypeList = ref<any>([]);
- const refCompanySelectionLike = ref();
- const refLabelSelection = ref();
- // /** 选择的区域 */
- // const regionChecked= ref<string>('');
- // // /** 选择的街道 */
- // const streetChecked= ref<string>('');
- //
- // // /** 编辑传入的地址 */
- // const defaultAddText= ref<string>('');
- //
- // const allData = ref<any>({
- // province: [],
- // city: [],
- // region: [{name:"",code:""}],
- // street: [{name:"",code:""}]
- // });
- //
- // //获取选定的省市区
- // const getCityArea = () =>{
- // // 城市选中后默认为字符串,并且获取到的是编码不是直接内容,为了把省份 城市 区域分为三个字段,所以把字符串分割为数组,在每个单独赋值
- // let cities = cityDefault.value.split(' ');
- // allData.value.province = provinceColumns.value;
- // allData.value.city = cityColumns.value;
- // allData.value.region = regionColumns.value[0].options;
- // allData.value.street = streetColumns.value[0].options;
- //
- // /* 循环城市数组,通过获取到的省市区编码来查询对应的文字内容 **/
- // allData.value.region.map(v=>{
- // if(v.code == cities[0]){
- // regionChecked.value = v.name; /* 县区 */
- // }
- // })
- // allData.value.street.map(v => {
- // if (v.code == cities[1]) {
- // streetChecked.value = v.name; /* 街道 */
- // }
- // })
- // }
- const getCompanyModelList = async function(){
- const companyModelResult :any = await getSysDictionaryList("CompanyModel");
- companyModelList.value = companyModelResult;
- }
- const getCompanyTagList = async function(){
- const companyTagResult :any = await getSysDictionaryList("CompanyTag");
- companyTagList.value = companyTagResult;
- }
- const getCompanyTypeList = async function(){
- const companyTypeResult :any = await getSysDictionaryList("CompanyType");
- companyTypeList.value = companyTypeResult;
- }
- const getCompanyStatusList = async function(){
- const companyStatusResult :any = await getSysDictionaryList("CompanyStatus");
- companyStatusList.value = companyStatusResult;
- }
- const getEstateCategoryList = async function(){
- const estateCategoryResult :any = await getSysDictionaryList("CompanyEstateCategory");
- estateCategoryList.value = estateCategoryResult;
- }
- const getShortAgeTypeList = async function(){
- const shortAgeTypeResult :any = await getSysDictionaryList("IsShortAge");
- shortAgeTypeList.value = shortAgeTypeResult;
- }
- const getRegisteredCapitalTypeList = async function(){
- const registeredCapitalTypeResult :any = await getSysDictionaryList("registeredCapitalType");
- registeredCapitalTypeList.value = registeredCapitalTypeResult;
- }
- function isStringInteger(value: string) {
- const n = parseInt(value, 10);
- return n.toString() === value && Number.isInteger(n);
- }
- function workSituationBlur() {
- inputValid.value = true;
- if (formState.dataModel.workSituation != null) {
- if(!isStringInteger(formState.dataModel.workSituation)||formState.dataModel.workSituation<1){
- presentAlert("用工情况必须为一个正整数!");
- inputValid.value = false;
- return;
- }
- // 匹配企业规模
- const workSituationRanges = [
- {max: 19, model: 1},
- {min: 20, max: 99, model: 2},
- {min: 100, max: 299, model: 3},
- {min: 300, max: 499, model: 4},
- {min: 500, max: 999, model: 5},
- {min: 1000, max: 9999, model: 6},
- {min: 10000, model: 7}
- ];
- const workSituation = formState.dataModel.workSituation;
- formState.dataModel.companyModel = 1; // 默认值,如果所有范围都不匹配
- for (const range of workSituationRanges) {
- if (
- (range.min === undefined || workSituation >= range.min) &&
- (range.max === undefined || workSituation <= range.max)
- ) {
- formState.dataModel.companyModel = range.model;
- break;
- }
- }
- }
- }
- function insuredCountBlur() {
- inputValid.value = true;
- if (formState.dataModel.insuredCount != null) {
- if(!isStringInteger(formState.dataModel.insuredCount)||formState.dataModel.insuredCount<1){
- presentAlert("参保人数必须为一个正整数!");
- inputValid.value = false;
- }
- }
- }
- const rules = computed(() => {
- return {
- dataModel: {
- companyCode: {required},
- companyName: {required},
- // siteID: {required},
- companyAddress: {required},
- userName: {required},
- userMobile: {required},
- recordStatus: {required},
- workSituation: {required},
- }
- }
- });
- const v$ = useVuelidate(rules, formState);
- const changeLongDate = ()=>{
- isLongDate.value = true;
- formState.dataModel.validDate = "2099-12-31T00:00:00.000+08:00";
- };
- const changeValidDate = () => {
- isLongDate.value = false;
- };
- const companyCodeValidate = ()=>{
- isAllowCommit.value = true;
- const codeReg = /^[0-9A-Z]+$/;
- const gsCodeReg = /^\d{15}$/;
- if (formState.dataModel.companyCode.length != 18 && formState.dataModel.companyCode.length != 15) {
- presentAlert('输入的统一信用代码无效!');
- isAllowCommit.value = false;
- return;
- }
- if (formState.dataModel.companyCode.length == 15) {
- if (!gsCodeReg.test(formState.dataModel.companyCode)) {
- presentAlert('输入的工商注册号有误!');
- isAllowCommit.value = false;
- }
- }
- if (formState.dataModel.companyCode.length == 18) {
- if (!codeReg.test(formState.dataModel.companyCode)) {
- presentAlert('输入的统一信用代码无效!');
- isAllowCommit.value = false;
- } else {
- let aCode;
- let aCodeValue;
- let total = 0;
- const weightedFactors = [1, 3, 9, 27, 19, 26, 16, 17, 20, 29, 25, 13, 8, 24, 10, 30, 28];
- const str = '0123456789ABCDEFGHJKLMNPQRTUWXY';
- for (let i = 0; i < formState.dataModel.companyCode.length - 1; i++) {
- aCode = formState.dataModel.companyCode.substring(i, i + 1);
- aCodeValue = str.indexOf(aCode);
- total += aCodeValue * weightedFactors[i];
- }
- let logicCheckCode = 31 - total % 31;
- if (logicCheckCode == 31) {
- logicCheckCode = 0;
- }
- const Str = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,T,U,W,X,Y";
- const Array_Str = Str.split(',');
- const correctCodeStr = Array_Str[logicCheckCode];
- console.log("正确的校验码是", correctCodeStr);
- const currentCodeStr = formState.dataModel.companyCode.substring(17, 18);
- if (correctCodeStr != currentCodeStr) {
- presentAlert('输入的统一信用代码无效!');
- isAllowCommit.value = false;
- }
- }
- }
- }
- const inputDataValidate = () =>{
- const mobileReg = /^1[3|4|5|6|7|8|9]\d{9}$/;
- // const landlineReg = /[0-9-()()]{7,18}/;
- const landlineReg = /^((0\d{2,3})-)(\d{7,8})(-(\d{3,}))?$/;
- if(!mobileReg.test(formState.dataModel.userMobile)&&!landlineReg.test(formState.dataModel.userMobile)){
- presentAlert("输入的联系电话有误!");
- isAllowCommit.value = false;
- }
- const emailReg = /^[a-z0-9]+([._\\-]*[a-z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$/;
- // 这里由于企业邮箱非必填所以先判断是否填写了企业邮箱
- if(formState.dataModel.companyEmail!=null&&formState.dataModel.companyEmail!=""){
- if(!emailReg.test(formState.dataModel.companyEmail)){
- presentAlert("输入的企业邮箱有误!");
- isAllowCommit.value = false;
- }
- }
- };
- const onGetFirmByCompanyName = async function() {
- if(formState.dataModel.companyName){
- await setInfoLoadingOpen(true);
- let matchedFirmInfo :any = await normalFirm(formState.dataModel.companyName);
- if(matchedFirmInfo){
- await setInfoLoadingOpen(false);
- infoAlterData.title = "提示";
- infoAlterData.message = "同步成功!";
- await setInfoAlertOpen(true);
- }else{
- matchedFirmInfo = {};
- await setInfoLoadingOpen(false);
- infoAlterData.title = "错误";
- infoAlterData.message = "查找不到该企业,请核实企业名称是否正确!";
- await setInfoAlertOpen(true);
- }
- formState.dataModel.frName = matchedFirmInfo.frName;
- formState.dataModel.registeredCapital = matchedFirmInfo.registeredCapital;
- formState.dataModel.companyCode = matchedFirmInfo.companyCode;
- formState.dataModel.insuredCount = matchedFirmInfo.insuredCount;
- formState.dataModel.userMobile = matchedFirmInfo.userMobile;
- formState.dataModel.companyEmail = matchedFirmInfo.companyEmail;
- formState.dataModel.companyAddress = matchedFirmInfo.companyAddress;
- formState.dataModel.businScope = matchedFirmInfo.businScope;
- formState.dataModel.industryID = matchedFirmInfo.industryID;
- formState.dataModel.industryName = matchedFirmInfo.industryName;
- setEstateCategoryID(matchedFirmInfo.industryName);
- formState.dataModel.signInPoliticalArea = matchedFirmInfo.signInPoliticalArea;
- formState.dataModel.establishmentTime = matchedFirmInfo.establishmentTime;
- }else{
- infoAlterData.title = "提示";
- infoAlterData.message = "请输入企业名称!";
- await setInfoAlertOpen(true);
- }
- }
- const onSetIndustryID = (data: any)=>{
- formState.dataModel.industryID = data.value;
- formState.dataModel.industryName = data.text;
- const text = data.text.split("-")[0] as string;
- setEstateCategoryID(text)
- }
- function setEstateCategoryID(industryName: any) {
- // 所属产业判断
- const categoryMap: { [key: string]: any } = {
- '农、林、牧、渔业': 1,
- '采矿业': 2,
- '制造业': 2,
- '电力、热力、燃气及水生产和供应业': 2,
- '建筑业': 2
- };
- if (industryName) {
- formState.dataModel.estateCategoryID = categoryMap[industryName] || 3;
- } else {
- formState.dataModel.estateCategoryID = "3";
- }
- }
- const inputValid = ref(true);
- const onNext = async () => {
- console.log(formState.dataModel)
- const isFormCorrect = await v$.value.$validate();
- if (!isFormCorrect) {
- await presentAlert('请输入完整信息!');
- return null;
- }
- companyCodeValidate();
- inputDataValidate();
- if(isAllowCommit.value&&inputValid.value){
- saveCompany(formState.dataModel).then(result => {
- if (result) {
- router.push({path: './postList', query: {reload:1,id:formState.dataModel.companyID,status:3,isEdit:isAdd.value!=true?1:0,random:Math.random()}});
- }
- });
- }
- };
- const onResultBackLabels = (data: any) => {
- formState.dataModel.listLabel = data;
- refLabelSelection.value = null;
- }
- const onResultInfo = (data: any)=>{
- formState.dataModel.companyName = data.text;
- onGetFirmByCompanyName();
- }
- const onOpenCompany = () => {
- if(!isAdd.value){
- return;
- }
- refCompanySelectionLike.value.onOpen();
- }
- const onBack = () => {
- router.push({path: './list', query: {reload:1}});
- }
- const onRedirect = (statusValue:any) => {
- if(!isAdd.value && statusValue==3) {
- router.push({path: './postList', query: {reload:1,id:formState.dataModel.companyID,status:3,isEdit:1,random:Math.random()}});
- }
- }
- const getRegionListData = () => {
- getRegionList({}).then(data => {
- regionList.value = data;
- });
- }
- const getStreetListData = (code: any) => {
- getStreeList({code: code}).then(data => {
- streetList.value = data;
- });
- }
- const getSiteListData = () => {
- getSiteList({}).then(data => {
- siteList.value = data;
- });
- }
- const changeCity = () => {
- if (formState.dataModel.regionCode)
- getStreetListData(formState.dataModel.regionCode);
- }
- const loadData = async (companyID: any,status:any,loginUserId:any) => {
- curStepData.value.statusVal = status;
- curStepData.value.loginUserID = loginUserId;
- isAdd.value = companyID == null;
- const reqData = await getCompanyById(companyID,loginUserId);
- formState.dataModel = reqData;
- isLongDate.value = formState.dataModel.validDate == "2099-12-31T00:00:00.000+08:00";
- console.log('dataModel',formState.dataModel);
- if(formState.dataModel.regionCode!=null) getStreetListData(formState.dataModel.regionCode);
- if (companyID == null) {
- setLongitudeLatitude();
- }
- };
- /* watch(() => route.query, () => {
- if (route.query.reload) {
- loadData(route.query.id,route.query.status);
- }
- });*/
- const reload = (companyID:any,status:any,loginUserId:any) => {
- isShow.value = false;
- loadData(companyID,status,loginUserId);
- }
- onIonViewDidEnter(() => {
- if (route.query.reload) {
- reload(route.query.id,route.query.status,route.query.loginUserID);
- }
- });
- const presentAlert = async (message: string) => {
- const alert = await alertController.create({
- header: '错误!',
- message: message,
- buttons: [
- '确定'
- ],
- });
- await alert.present();
- }
- // 设置经纬度
- function setLongitudeLatitude() {
- getPosition().then((data: any) => {
- if (data.longitude != null && data.latitude != null) {
- formState.dataModel.longitude = data.longitude;
- formState.dataModel.latitude = data.latitude;
- }
- })
- }
- return {
- ...toRefs(formState),
- arrowBackOutline,
- route,
- router,
- isAdd,
- isShow,
- v$,
- refCompanySelectionLike,
- onOpenCompany,
- onResultInfo,
- refLabelSelection,
- onResultBackLabels,
- isLongDate,
- curStepData,
- stepList,
- companyTypeList,
- siteList,
- regionList,
- streetList,
- shortAgeTypeList,
- registeredCapitalTypeList,
- companyStatusList,
- companyModelList,
- companyTagList,
- estateCategoryList,
- infoAlertButtons,
- infoAlterData,
- alertingInfo,
- loadingFirm,
- workSituationBlur,
- insuredCountBlur,
- setInfoAlertOpen,
- setInfoLoadingOpen,
- onGetFirmByCompanyName,
- onSetIndustryID,
- onNext,
- onBack,
- onRedirect,
- getCompanyStatusList,
- getCompanyModelList,
- getCompanyTypeList,
- getCompanyTagList,
- getEstateCategoryList,
- getShortAgeTypeList,
- getRegisteredCapitalTypeList,
- getRegionListData,
- getSiteListData,
- changeCity,
- changeLongDate,
- changeValidDate,
- loadData,
- }
- },mounted(){
- this.getCompanyModelList();
- this.getCompanyTypeList();
- this.getCompanyTagList();
- this.getCompanyStatusList();
- this.getEstateCategoryList();
- this.getShortAgeTypeList();
- this.getRegisteredCapitalTypeList();
- this.getRegionListData();
- this.getSiteListData();
- }
- });
- </script>
- <style lang="less">
- ion-select#siteID.md.select-disabled.legacy-select::after{display: none;}
- ion-select#regionCode.md.select-disabled.legacy-select::after{display: none;}
- .custom{
- --placeholder-color: gray;
- --placeholder-opacity: 0.5;
- }
- .title-item{
- margin-left: 15px;
- color:#1c3d70 !important;
- font-size: 14px !important;
- font-weight: bold;
- }
- ion-item {
- --border-width: 0;
- --border-style: none;
- ion-label, ion-input, ion-select, ion-datetime-button {
- font-size: 14px !important;
- }
- }
- .stepFlex {
- margin: 0;
- display: flex;
- width: 100%;
- .stepFlex-item {
- position: relative;
- flex: 1;
- text-align: center;
- margin-top: -10px;
- .stepFlex-item-label {
- padding-top: 30px;
- font-size: 14px;
- .stepFlex-item-label-title {
- margin-top: 30px;
- }
- .stepFlex-item-label-desc {
- margin-top: 5px;
- color: #b9b9bd;
- }
- }
- }
- .greenCircle {
- top: calc(50% - 15px);
- left: calc(50% - 4px);
- position: absolute;
- z-index: 2;
- width: 10px;
- height: 10px;
- border-radius: 50%;
- background-color: #31A2FE;
- }
- .now {
- top: calc(50% - 18px);
- left: calc(50% - 8px);
- position: absolute;
- z-index: 3;
- width: 16px;
- height: 16px;
- border-radius: 50%;
- background-color: #31A2FE;
- border: 4px solid #c5e8f9;
- }
- .grayCircle {
- top: calc(50% - 15px);
- left: calc(50% - 4px);
- position: absolute;
- z-index: 2;
- width: 10px;
- height: 10px;
- border-radius: 50%;
- background-color: #ccc;
- }
- .greenLine {
- width: 100%;
- top: calc(50% - 11px);
- left: calc(50% - 2px);
- height: 2px;
- background-color: #31A2FE;
- position: absolute;
- }
- .grayLine {
- height: 0;
- border: 1px dashed #ccc;
- width: 100%;
- top: calc(50% - 11px);
- left: calc(50% - 2px);
- position: absolute;
- }
- }
- </style>
|