edit.vue 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744
  1. <template>
  2. <ion-page>
  3. <ion-header class="header-theme2">
  4. <ion-toolbar>
  5. <ion-buttons slot="start">
  6. <ion-icon :icon="arrowBackOutline" @click="onBack"></ion-icon>
  7. </ion-buttons>
  8. <ion-title>
  9. 企业信息录入
  10. </ion-title>
  11. </ion-toolbar>
  12. </ion-header>
  13. <ion-content>
  14. <div class="stepFlex">
  15. <div v-for="(record,key) in stepList" :key="key" class="stepFlex-item">
  16. <div
  17. :class="[(record.val < curStepData?.statusVal || curStepData?.statusVal == stepList.val) ? 'greenCircle' :record.val == curStepData?.statusVal ? 'now' : 'grayCircle']"></div>
  18. <div v-if="key !== stepList.length - 1"
  19. :class="[record.val < curStepData?.statusVal ? 'greenLine' : 'grayLine']"></div>
  20. <div class="stepFlex-item-label">
  21. <p class="stepFlex-item-label-title">{{ record.title }}</p>
  22. <p class="stepFlex-item-label-desc">{{ record.desc }}</p>
  23. </div>
  24. </div>
  25. </div>
  26. <form autocomplete="off">
  27. <div class="bw-vue-form">
  28. <div class="form-title">基本信息</div>
  29. <div class="form-input">
  30. <ion-label>企业名称<span class="danger">*</span></ion-label>
  31. <ion-input placeholder="请输入企业名称" label-placement="stacked" :clear-input="true"
  32. v-model="dataModel.companyName" class="custom">
  33. </ion-input>
  34. <!-- <ion-note slot="error">企业名称不能为空</ion-note>-->
  35. </div>
  36. <div class="form-input">
  37. <ion-label>统一信用代码<span class="danger">*</span></ion-label>
  38. <ion-input placeholder="请输入统一信用代码" label-placement="stacked" :clear-input="true"
  39. v-model="dataModel.companyCode" class="custom">
  40. </ion-input>
  41. <!-- <ion-note slot="error">统一信用代码不能为空</ion-note>-->
  42. </div>
  43. <div class="form-select">
  44. <ion-label>所属驿站<span class="danger">*</span></ion-label>
  45. <ion-select disabled id="siteID" name="siteID" cancel-text="取消" v-model="dataModel.siteID"
  46. interface="action-sheet" placeholder="请选择所属驿站" style="width: 100%;text-align: left;">
  47. <ion-select-option v-for="(record,key) in siteList" :key="key" v-model:value="record.siteID">
  48. {{ record.siteName }}
  49. </ion-select-option>
  50. </ion-select>
  51. <!-- <ion-note slot="error">服务驿站不能为空</ion-note>-->
  52. </div>
  53. <ion-label style="padding-left: 10px;">所属街道<span class="danger">*</span></ion-label>
  54. <div class="form-select">
  55. <ion-select disabled name="regionCode" id="regionCode" okText="确定" cancelText="取消" v-model="dataModel.regionCode"
  56. interface="action-sheet" placeholder="请选择市/县" style="width:50%;float:left;" @ionChange="changeCity()" >
  57. <ion-select-option v-for=" (it,key) in regionList" :key="key" :value="it.code">
  58. {{ it.name }}
  59. </ion-select-option>
  60. </ion-select>
  61. <ion-select interface="action-sheet" placeholder="请选择所属街道" cancel-text="取消"
  62. id="streetCode" v-model="dataModel.streetCode" style="width: 50%;float: left;">
  63. <ion-select-option v-for="(record,key) in streetList" :key="key"
  64. v-model:value="record.code">
  65. {{ record.name }}
  66. </ion-select-option>
  67. </ion-select>
  68. </div>
  69. <div style="width: 100%;overflow: hidden;"></div>
  70. <div class="form-input">
  71. <ion-label>办公地址<span class="danger">*</span></ion-label>
  72. <ion-textarea placeholder="请输入办公地址" label-placement="stacked" :rows="3" :clear-input="true"
  73. v-model="dataModel.companyAddress" class="custom" style="border-bottom: 1px solid #fff2e8;">
  74. </ion-textarea>
  75. <!-- <ion-note slot="error">办公地址不能为空</ion-note>-->
  76. </div>
  77. <div class="form-input">
  78. <ion-label>企业联系人<span class="danger">*</span></ion-label>
  79. <ion-input placeholder="请输入企业联系人" label-placement="stacked" :clear-input="true"
  80. v-model="dataModel.userName" class="custom">
  81. </ion-input>
  82. <!-- <ion-note slot="error">企业联系人不能为空</ion-note>-->
  83. </div>
  84. <div class="form-input">
  85. <ion-label>联系电话<span class="danger">*</span></ion-label>
  86. <ion-input placeholder="请输入联系电话" label-placement="stacked" :clear-input="true"
  87. v-model="dataModel.userMobile" class="custom">
  88. </ion-input>
  89. <!-- <ion-note slot="error">企业联系电话不能为空</ion-note>-->
  90. </div>
  91. <div class="form-select">
  92. <ion-label>企业状态<span class="danger">*</span></ion-label>
  93. <ion-select id="recordStatus" name="recordStatus" cancel-text="取消" v-model="dataModel.recordStatus"
  94. interface="action-sheet" placeholder="请选择企业状态" style="width: 100%;text-align: left;">
  95. <ion-select-option v-for="(record,key) in companyStatusList" :key="key"
  96. v-model:value="record.value">
  97. {{ record.name }}
  98. </ion-select-option>
  99. </ion-select>
  100. <!-- <ion-note slot="error">企业状态不能为空</ion-note>-->
  101. </div>
  102. <div class="form-select">
  103. <ion-label>是否缺工<span class="danger">*</span></ion-label>
  104. <ion-select id="isShortAge" name="isShortAge" cancel-text="取消" v-model="dataModel.isShortage"
  105. interface="action-sheet" placeholder="请选择是否缺工" style="width: 100%;text-align: left;">
  106. <ion-select-option v-for="(record,key) in shortAgeTypeList" :key="key"
  107. v-model:value="record.value">
  108. {{ record.name }}
  109. </ion-select-option>
  110. </ion-select>
  111. <!-- <ion-note slot="error">是否缺工不能为空</ion-note>-->
  112. </div>
  113. <div class="form-title">
  114. 其他信息
  115. <div style="float:right;">
  116. <ion-label style="color: red;font-size: 14px;" @click="isShow=!isShow">{{isShow?"收起":"展开"}}</ion-label>
  117. </div>
  118. </div>
  119. <div v-show="isShow" >
  120. <div class="form-input">
  121. <ion-label>法定代表人(负责人)</ion-label>
  122. <ion-input placeholder="请输入法定代表人" label-placement="stacked" :clear-input="true"
  123. v-model="dataModel.frName" class="custom">
  124. </ion-input>
  125. </div>
  126. <div class="form-input">
  127. <ion-label>营业执照有效期</ion-label>
  128. <div>
  129. <ion-radio v-model:checked="isLongDate" justify="start" labelPlacement="end"
  130. @click="changeLongDate" style="height:30px;">至长期</ion-radio>
  131. <ion-datetime-button datetime="validDate" style="position:relative;right:105px;"></ion-datetime-button>
  132. <ion-modal :keep-contents-mounted="true" >
  133. <ion-datetime id="validDate" name="validDate"
  134. v-model="dataModel.validDate" :prefer-wheel="true" @ionChange="changeValidDate"
  135. dataformatas="YYYY-MM-DD" presentation="date" cancel-text="取消" done-text="确定"
  136. :show-default-buttons="true" >
  137. </ion-datetime>
  138. </ion-modal>
  139. </div>
  140. </div>
  141. <div class="form-input">
  142. <ion-label>成立日期</ion-label>
  143. <ion-datetime-button datetime="establishmentTime" style="position:relative;right:110px;" ></ion-datetime-button>
  144. <ion-modal :keep-contents-mounted="true" >
  145. <ion-datetime id="establishmentTime" name="establishmentTime"
  146. v-model="dataModel.establishmentTime" :prefer-wheel="true"
  147. dataformatas="YYYY-MM-DD" presentation="date" cancel-text="取消" done-text="确定"
  148. :show-default-buttons="true" >
  149. </ion-datetime>
  150. </ion-modal>
  151. </div>
  152. <div class="form-input" >
  153. <ion-label>注册资本(万元)</ion-label>
  154. <ion-input placeholder="请输入注册资本" label-placement="stacked" :clear-input="true"
  155. v-model="dataModel.registeredCapital" class="custom">
  156. </ion-input>
  157. </div>
  158. <div class="form-input" >
  159. <ion-label>企业注册地址行政区划</ion-label>
  160. <ion-input placeholder="请输入企业注册地址行政区划" label-placement="stacked" :clear-input="true"
  161. v-model="dataModel.signInPoliticalArea" class="custom">
  162. </ion-input>
  163. </div>
  164. <div class="form-input" >
  165. <ion-label>企业邮箱</ion-label>
  166. <ion-input placeholder="请输入企业邮箱" label-placement="stacked" :clear-input="true"
  167. v-model="dataModel.companyEmail" class="custom">
  168. </ion-input>
  169. </div>
  170. <div class="form-select">
  171. <ion-label>经济类型</ion-label>
  172. <ion-select interface="action-sheet" placeholder="请选择经济类型" cancel-text="取消"
  173. id="companyType" v-model="dataModel.companyType" style="width: 100%;text-align: left;">
  174. <ion-select-option v-for="(record,key) in companyTypeList" :key="key"
  175. v-model:value="record.value">
  176. {{ record.name }}
  177. </ion-select-option>
  178. </ion-select>
  179. </div>
  180. <div class="form-input">
  181. <ion-label>所属行业</ion-label>
  182. <div>
  183. <ion-input placeholder="请选择所属行业" label-placement="stacked" style="float: left;width:78%;"
  184. v-model="dataModel.industryName" class="custom" readonly >
  185. </ion-input>
  186. <ion-item style="width:22%;float: right;padding:0px;margin: 0px;">
  187. <industry-selection :CurIndustryID="dataModel.industryID" @SetIndustryID="onSetIndustryID"></industry-selection>
  188. </ion-item>
  189. </div>
  190. <!-- <ion-select interface="action-sheet" placeholder="请选择所属行业" cancel-text="取消"-->
  191. <!-- id="professionID" v-model="dataModel.professionID" style="width: 100%;text-align: left;">-->
  192. <!-- <ion-select-option v-for="(record,key) in professionList" :key="key"-->
  193. <!-- v-model:value="record.value">-->
  194. <!-- {{ record.name }}-->
  195. <!-- </ion-select-option>-->
  196. <!-- </ion-select>-->
  197. </div>
  198. <div class="form-select">
  199. <ion-label>所属产业分类</ion-label>
  200. <ion-select interface="action-sheet" placeholder="请选择所属产业分类" cancel-text="取消"
  201. id="estateCategoryID" v-model="dataModel.estateCategoryID" style="width: 100%;text-align: left;">
  202. <ion-select-option v-for="(record,key) in estateCategoryList" :key="key"
  203. v-model:value="record.value">
  204. {{ record.name }}
  205. </ion-select-option>
  206. </ion-select>
  207. </div>
  208. <div class="form-select">
  209. <ion-label>企业标签</ion-label>
  210. <ion-select interface="action-sheet" placeholder="请选择企业标签" cancel-text="取消"
  211. id="tagID" v-model="dataModel.tagID" style="width: 100%;text-align: left;">
  212. <ion-select-option v-for="(record,key) in companyTagList" :key="key"
  213. v-model:value="record.value" style="width:100%;text-align: left;">
  214. {{ record.name }}
  215. </ion-select-option>
  216. </ion-select>
  217. </div>
  218. <div class="form-input">
  219. <ion-label>企业网站</ion-label>
  220. <ion-input type="number" placeholder="请输入企业网站" label-placement="stacked" :clear-input="true"
  221. v-model="dataModel.website" class="custom">
  222. </ion-input>
  223. </div>
  224. <div class="form-input">
  225. <ion-label>企业福利</ion-label>
  226. <ion-textarea placeholder="请输入企业福利" :rows="3" label-placement="stacked" :clear-input="true"
  227. v-model="dataModel.bonus" class="custom" style="border-bottom: 1px solid #fff2e8;">
  228. </ion-textarea>
  229. </div>
  230. <div class="form-select">
  231. <ion-label>企业规模</ion-label>
  232. <ion-select interface="action-sheet" placeholder="请选择企业规模" cancel-text="取消"
  233. id="companyModel" v-model="dataModel.companyModel" style="width: 100%;text-align: left;">
  234. <ion-select-option v-for="(record,key) in companyModelList" :key="key"
  235. v-model:value="record.value" style="width:100%;text-align: left;">
  236. {{ record.name }}
  237. </ion-select-option>
  238. </ion-select>
  239. </div>
  240. <div class="form-input">
  241. <ion-label>用工情况(人)</ion-label>
  242. <ion-input type="number" placeholder="请输入用工人数" label-placement="stacked" :clear-input="true"
  243. v-model="dataModel.workSituation" class="custom">
  244. </ion-input>
  245. </div>
  246. <div class="form-input">
  247. <ion-label>参保人数(人)</ion-label>
  248. <ion-input type="number" placeholder="请输入参保人数" label-placement="stacked" :clear-input="true"
  249. v-model="dataModel.insuredCount" class="custom">
  250. </ion-input>
  251. </div>
  252. <div class="form-input">
  253. <ion-label>经营范围</ion-label>
  254. <ion-textarea placeholder="请输入经营范围" :rows="3" label-placement="stacked" :clear-input="true"
  255. v-model="dataModel.businScope" class="custom" style="border-bottom: 1px solid #fff2e8;">
  256. </ion-textarea>
  257. </div>
  258. <div class="form-input">
  259. <ion-label>企业简介</ion-label>
  260. <ion-textarea placeholder="请输入企业简介" :rows="3" label-placement="stacked" :clear-input="true"
  261. v-model="dataModel.companyDesc" class="custom" style="border-bottom: 1px solid #fff2e8;">
  262. </ion-textarea>
  263. </div>
  264. </div>
  265. </div>
  266. </form>
  267. </ion-content>
  268. <ion-footer>
  269. <ion-toolbar>
  270. <ion-button style="width:100%;" @click="onNext">保存并下一步</ion-button>
  271. </ion-toolbar>
  272. </ion-footer>
  273. </ion-page>
  274. </template>
  275. <script lang="ts">
  276. import {arrowBackOutline} from 'ionicons/icons';
  277. import {defineComponent, ref, reactive, computed, toRefs} from "vue";
  278. import {useRoute,useRouter} from "vue-router";
  279. import {getRegionList, getSiteList, getStreeList} from '@/api/company/index';
  280. import {alertController, onIonViewDidEnter} from "@ionic/vue";
  281. import {useVuelidate} from "@vuelidate/core";
  282. import {getCompanyById,saveCompanyInfo} from "@/api/company";
  283. import {required} from "@vuelidate/validators";
  284. import {getSysDictionaryList} from "@/api/system/dictionary";
  285. import dayjs from "dayjs";
  286. import IndustrySelection from "@/components/industrySelection.vue";
  287. interface StepParams{
  288. name: string,
  289. statusVal: number
  290. }
  291. export default defineComponent({
  292. name: 'CompanyEdit',
  293. components:{IndustrySelection},
  294. setup() {
  295. const route = useRoute();
  296. const router = useRouter();
  297. const isAllowCommit = ref(true);
  298. const curStepData = ref<StepParams>({
  299. name:"",
  300. statusVal: 1
  301. });
  302. const isShow = ref<any>(false);
  303. const isLongDate = ref<any>(false);
  304. const formState = reactive({
  305. dataModel: {
  306. companyID:null,
  307. companyCode: '',
  308. companyName: null,
  309. siteID: null,
  310. companyAddress: null,
  311. userName: null,
  312. userMobile: '',
  313. recordStatus: null,
  314. isShortage: null,
  315. frName: null,
  316. validDate: dayjs().format("YYYY-MM-DD"),
  317. establishmentTime: dayjs().format("YYYY-MM-DD"),
  318. registeredCapital:null,
  319. signInPoliticalArea:null,
  320. companyEmail: '',
  321. companyType: null,
  322. industryID:null,
  323. industryName:null,
  324. estateCategoryID:null,
  325. tagID:null,
  326. website:null,
  327. companyModel: null,
  328. regionCode: null,
  329. streetCode: null,
  330. workSituation: null,
  331. insuredCount: null,
  332. businScope: null,
  333. companyDesc: null
  334. }});
  335. const stepList = ref([
  336. {title: '基础信息', desc: '企业基础信息', val: 1},
  337. {title: '岗位信息', desc: '企业岗位信息', val: 2}
  338. ]);
  339. const companyStatusList = ref([]);
  340. const companyModelList = ref<any>([]);
  341. const companyTypeList = ref<any>([]);
  342. const companyTagList = ref<any>([]);
  343. const estateCategoryList = ref<any>([]);
  344. const regionList = ref<any>([]);
  345. const streetList = ref<any>([]);
  346. const siteList = ref<any>([]);
  347. const shortAgeTypeList = ref<any>([]);
  348. // /** 选择的区域 */
  349. // const regionChecked= ref<string>('');
  350. // // /** 选择的街道 */
  351. // const streetChecked= ref<string>('');
  352. //
  353. // // /** 编辑传入的地址 */
  354. // const defaultAddText= ref<string>('');
  355. //
  356. // const allData = ref<any>({
  357. // province: [],
  358. // city: [],
  359. // region: [{name:"",code:""}],
  360. // street: [{name:"",code:""}]
  361. // });
  362. //
  363. // //获取选定的省市区
  364. // const getCityArea = () =>{
  365. // // 城市选中后默认为字符串,并且获取到的是编码不是直接内容,为了把省份 城市 区域分为三个字段,所以把字符串分割为数组,在每个单独赋值
  366. // let cities = cityDefault.value.split(' ');
  367. // allData.value.province = provinceColumns.value;
  368. // allData.value.city = cityColumns.value;
  369. // allData.value.region = regionColumns.value[0].options;
  370. // allData.value.street = streetColumns.value[0].options;
  371. //
  372. // /* 循环城市数组,通过获取到的省市区编码来查询对应的文字内容 **/
  373. // allData.value.region.map(v=>{
  374. // if(v.code == cities[0]){
  375. // regionChecked.value = v.name; /* 县区 */
  376. // }
  377. // })
  378. // allData.value.street.map(v => {
  379. // if (v.code == cities[1]) {
  380. // streetChecked.value = v.name; /* 街道 */
  381. // }
  382. // })
  383. // }
  384. const getCompanyModelList = async function(){
  385. const companyModelResult :any = await getSysDictionaryList("CompanyModel");
  386. companyModelList.value = companyModelResult;
  387. }
  388. const getCompanyTagList = async function(){
  389. const companyTagResult :any = await getSysDictionaryList("CompanyTag");
  390. companyTagList.value = companyTagResult;
  391. }
  392. const getCompanyTypeList = async function(){
  393. const companyTypeResult :any = await getSysDictionaryList("CompanyType");
  394. companyTypeList.value = companyTypeResult;
  395. }
  396. const getCompanyStatusList = async function(){
  397. const companyStatusResult :any = await getSysDictionaryList("CompanyStatus");
  398. companyStatusList.value = companyStatusResult;
  399. }
  400. const getEstateCategoryList = async function(){
  401. const estateCategoryResult :any = await getSysDictionaryList("CompanyEstateCategory");
  402. estateCategoryList.value = estateCategoryResult;
  403. }
  404. const getShortAgeTypeList = async function(){
  405. const shortAgeTypeResult :any = await getSysDictionaryList("IsShortAge");
  406. shortAgeTypeList.value = shortAgeTypeResult;
  407. }
  408. const rules = computed(() => {
  409. return {
  410. dataModel: {
  411. companyCode: {required},
  412. companyName: {required},
  413. siteID: {required},
  414. companyAddress: {required},
  415. userName: {required},
  416. userMobile: {required},
  417. recordStatus: {required},
  418. isShortage: {required},
  419. }
  420. }
  421. });
  422. const v$ = useVuelidate(rules, formState);
  423. const changeLongDate = ()=>{
  424. isLongDate.value = true;
  425. formState.dataModel.validDate = "2099-12-31T00:00:00.000+08:00";
  426. };
  427. const changeValidDate = () => {
  428. isLongDate.value = false;
  429. };
  430. const companyCodeValidate = ()=>{
  431. isAllowCommit.value = true;
  432. const codeReg = /^[0-9A-Z]+$/;
  433. console.log(formState.dataModel.companyCode);
  434. if(formState.dataModel.companyCode.length != 18 || !codeReg.test(formState.dataModel.companyCode)){
  435. presentAlert("输入的信用代码有误!");
  436. isAllowCommit.value = false;
  437. }else{
  438. let aCode;
  439. let aCodeValue;
  440. let total = 0;
  441. const weightedFactors = [1,3,9,27,19,26,16,17,20,29,25,13,8,24,10,30,28];
  442. const str = '0123456789ABCDEFGHJKLMNPQRTUWXY';
  443. for(let i =0;i < formState.dataModel.companyCode.length-1;i++){
  444. aCode = formState.dataModel.companyCode.substring(i,i+1);
  445. aCodeValue = str.indexOf(aCode);
  446. total += aCodeValue * weightedFactors[i];
  447. }
  448. let logicCheckCode = 31 - total % 31;
  449. if(logicCheckCode == 31){
  450. logicCheckCode = 0;
  451. }
  452. 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";
  453. const Array_Str = Str.split(',');
  454. const correctCodeStr = Array_Str[logicCheckCode];
  455. console.log("正确的校验码是",correctCodeStr);
  456. const currentCodeStr = formState.dataModel.companyCode.substring(17, 18);
  457. if (correctCodeStr != currentCodeStr) {
  458. presentAlert('输入的统一信用代码无效!');
  459. isAllowCommit.value = false;
  460. }
  461. }
  462. }
  463. const inputDataValidate = () =>{
  464. const mobileReg = /^1[3|4|5|6|7|8|9]\d{9}$/;
  465. const landlineReg = /[0-9-()()]{7,18}/;
  466. if(!mobileReg.test(formState.dataModel.userMobile)&&!landlineReg.test(formState.dataModel.userMobile)){
  467. presentAlert("输入的联系电话有误!");
  468. isAllowCommit.value = false;
  469. }
  470. const emailReg = /^[a-z0-9]+([._\\-]*[a-z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$/;
  471. // 这里由于企业邮箱非必填所以先判断是否填写了企业邮箱
  472. if(formState.dataModel.companyEmail!=null&&formState.dataModel.companyEmail!=""){
  473. if(!emailReg.test(formState.dataModel.companyEmail)){
  474. presentAlert("输入的企业邮箱有误!");
  475. isAllowCommit.value = false;
  476. }
  477. }
  478. };
  479. const onSetIndustryID = (data: any)=>{
  480. formState.dataModel.industryID = data.value;
  481. formState.dataModel.industryName = data.text;
  482. }
  483. const onNext = async () => {
  484. const isFormCorrect = await v$.value.$validate();
  485. if (!isFormCorrect) {
  486. await presentAlert('请输入完整信息!');
  487. return null;
  488. }
  489. companyCodeValidate();
  490. inputDataValidate();
  491. if(isAllowCommit.value){
  492. console.log("ds",formState.dataModel);
  493. saveCompanyInfo(formState.dataModel).then(result => {
  494. if (result) {
  495. router.push({path: './postList', query: {reload:1,id:formState.dataModel.companyID,status:3}});
  496. }
  497. });
  498. }
  499. };
  500. const onBack=()=>{
  501. router.push({path: './list', query: {reload:1}});
  502. }
  503. const getRegionListData = () => {
  504. getRegionList({}).then(data => {
  505. regionList.value = data;
  506. });
  507. }
  508. const getStreetListData = (code: any) => {
  509. getStreeList({code: code}).then(data => {
  510. streetList.value = data;
  511. });
  512. }
  513. const getSiteListData = () => {
  514. getSiteList({}).then(data => {
  515. siteList.value = data;
  516. });
  517. }
  518. const changeCity = () => {
  519. //console.log(formState.dataModel.regionCode);
  520. if (formState.dataModel.regionCode)
  521. getStreetListData(formState.dataModel.regionCode);
  522. }
  523. const loadData = async (companyID: any,status:any,loginUserId:any) => {
  524. curStepData.value.statusVal = status;
  525. const reqData = await getCompanyById(companyID,loginUserId);
  526. formState.dataModel = reqData;
  527. isLongDate.value = formState.dataModel.validDate == "2099-12-31T00:00:00.000+08:00";
  528. console.log('dataModel',formState.dataModel);
  529. if(formState.dataModel.regionCode!=null) getStreetListData(formState.dataModel.regionCode);
  530. };
  531. /* watch(() => route.query, () => {
  532. if (route.query.reload) {
  533. loadData(route.query.id,route.query.status);
  534. }
  535. });*/
  536. const reload = (companyID:any,status:any,loginUserId:any) => {
  537. isShow.value = false;
  538. loadData(companyID,status,loginUserId);
  539. }
  540. onIonViewDidEnter(() => {
  541. if (route.query.reload) {
  542. reload(route.query.id,route.query.status,route.query.loginUserID);
  543. }
  544. });
  545. const presentAlert = async (message: string) => {
  546. const alert = await alertController.create({
  547. header: '错误!',
  548. message: message,
  549. buttons: [
  550. '确定'
  551. ],
  552. });
  553. await alert.present();
  554. }
  555. return {
  556. ...toRefs(formState),
  557. arrowBackOutline,
  558. route,
  559. router,
  560. isShow,
  561. v$,
  562. isLongDate,
  563. curStepData,
  564. stepList,
  565. companyTypeList,
  566. siteList,
  567. regionList,
  568. streetList,
  569. shortAgeTypeList,
  570. companyStatusList,
  571. companyModelList,
  572. companyTagList,
  573. estateCategoryList,
  574. onSetIndustryID,
  575. onNext,
  576. onBack,
  577. getCompanyStatusList,
  578. getCompanyModelList,
  579. getCompanyTypeList,
  580. getCompanyTagList,
  581. getEstateCategoryList,
  582. getShortAgeTypeList,
  583. getRegionListData,
  584. getSiteListData,
  585. changeCity,
  586. changeLongDate,
  587. changeValidDate,
  588. loadData,
  589. }
  590. },mounted(){
  591. this.getCompanyModelList();
  592. this.getCompanyTypeList();
  593. this.getCompanyTagList();
  594. this.getCompanyStatusList();
  595. this.getEstateCategoryList();
  596. this.getShortAgeTypeList();
  597. this.getRegionListData();
  598. this.getSiteListData();
  599. }
  600. });
  601. </script>
  602. <style lang="less">
  603. ion-select#siteID.md.select-disabled.legacy-select::after{display: none;}
  604. ion-select#regionCode.md.select-disabled.legacy-select::after{display: none;}
  605. .custom{
  606. --placeholder-color: gray;
  607. --placeholder-opacity: 0.5;
  608. }
  609. .title-item{
  610. margin-left: 15px;
  611. color:#1c3d70 !important;
  612. font-size: 14px !important;
  613. font-weight: bold;
  614. }
  615. ion-item {
  616. --border-width: 0;
  617. --border-style: none;
  618. ion-label, ion-input, ion-select, ion-datetime-button {
  619. font-size: 14px !important;
  620. }
  621. }
  622. .stepFlex {
  623. margin: 0;
  624. display: flex;
  625. width: 100%;
  626. .stepFlex-item {
  627. position: relative;
  628. flex: 1;
  629. text-align: center;
  630. margin-top: -10px;
  631. .stepFlex-item-label {
  632. padding-top: 60px;
  633. font-size: 14px;
  634. .stepFlex-item-label-title {
  635. margin-top: 30px;
  636. }
  637. .stepFlex-item-label-desc {
  638. margin-top: 5px;
  639. color: #b9b9bd;
  640. }
  641. }
  642. }
  643. .greenCircle {
  644. top: calc(50% - 15px);
  645. left: calc(50% - 4px);
  646. position: absolute;
  647. z-index: 2;
  648. width: 10px;
  649. height: 10px;
  650. border-radius: 50%;
  651. background-color: #31A2FE;
  652. }
  653. .now {
  654. top: calc(50% - 18px);
  655. left: calc(50% - 8px);
  656. position: absolute;
  657. z-index: 3;
  658. width: 16px;
  659. height: 16px;
  660. border-radius: 50%;
  661. background-color: #31A2FE;
  662. border: 4px solid #c5e8f9;
  663. }
  664. .grayCircle {
  665. top: calc(50% - 15px);
  666. left: calc(50% - 4px);
  667. position: absolute;
  668. z-index: 2;
  669. width: 10px;
  670. height: 10px;
  671. border-radius: 50%;
  672. background-color: #ccc;
  673. }
  674. .greenLine {
  675. width: 100%;
  676. top: calc(50% - 11px);
  677. left: calc(50% - 2px);
  678. height: 2px;
  679. background-color: #31A2FE;
  680. position: absolute;
  681. }
  682. .grayLine {
  683. height: 0;
  684. border: 1px dashed #ccc;
  685. width: 100%;
  686. top: calc(50% - 11px);
  687. left: calc(50% - 2px);
  688. position: absolute;
  689. }
  690. }
  691. </style>