userEdit.vue 48 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096
  1. <template>
  2. <ion-page class="list-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>求职者信息登记</ion-title>
  9. </ion-toolbar>
  10. </ion-header>
  11. <ion-content>
  12. <div class="stepFlex">
  13. <div v-for="(record,key) in stepList" :key="key" class="stepFlex-item">
  14. <div
  15. :class="[(record.val < curStepData?.statusVal || curStepData?.statusVal == stepList.val) ? 'greenCircle' :record.val == curStepData?.statusVal ? 'now' : 'grayCircle']"></div>
  16. <div v-if="key !== stepList.length - 1"
  17. :class="[record.val < curStepData?.statusVal ? 'greenLine' : 'grayLine']"></div>
  18. <div class="stepFlex-item-label">
  19. <p class="stepFlex-item-label-title">{{ record.title }}</p>
  20. <!--<p class="stepFlex-item-label-desc">{{ record.desc }}</p>-->
  21. </div>
  22. </div>
  23. </div>
  24. <form autocomplete="off">
  25. <div class="bw-vue-form">
  26. <ion-list v-if="curStepData.statusVal==1">
  27. <div class="form-title">基本信息</div>
  28. <div class="form-input">
  29. <ion-label>姓名<span class="danger">*</span></ion-label>
  30. <ion-input name="name" id="name" class="custom" :clear-input="true"
  31. placeholder="请输入姓名" v-model="baseData.name" >
  32. </ion-input>
  33. <!-- <ion-note slot="error">姓名不能为空</ion-note>-->
  34. </div>
  35. <div class="form-input">
  36. <ion-label>公民身份号码<span class="danger">*</span></ion-label>
  37. <ion-input name="identityNumber" id="identityNumber" class="custom" :clear-input="true"
  38. placeholder="请输入身份证号码" v-model="baseData.identityNumber" ></ion-input>
  39. <!-- <ion-note slot="error">公民身份号码不能为空</ion-note>-->
  40. </div>
  41. <div class="form-select">
  42. <ion-label>性别<span class="danger">*</span></ion-label>
  43. <ion-select disabled name="sex" id="sex" okText="确定" cancelText="取消" v-model="baseData.sex"
  44. interface="action-sheet" placeholder="请选择性别" style="width:100%;text-align:left;" >
  45. <ion-select-option v-for=" (it,key) in genderList" :key="key" :value="it.value" >{{ it.name }}</ion-select-option>
  46. </ion-select>
  47. <!-- <ion-note slot="error">性别不能为空</ion-note>-->
  48. </div>
  49. <div class="form-input">
  50. <ion-label>联系电话<span class="danger">*</span></ion-label>
  51. <ion-input name="userMobile" id="userMobile" style="text-align: left;" class="custom" :clear-input="true"
  52. placeholder="请输入联系电话" v-model="baseData.userMobile" ></ion-input>
  53. <!-- <ion-note slot="error">联系电话不能为空</ion-note>-->
  54. </div>
  55. <div class="form-select">
  56. <ion-label>所属驿站<span class="danger">*</span></ion-label>
  57. <ion-select disabled name="siteID" id="siteID" okText="确定" cancelText="取消" v-model="baseData.siteID"
  58. interface="action-sheet" placeholder="请选择所属驿站" style="width:100%;text-align:left;">
  59. <ion-select-option v-for=" (it,key) in siteInfoList" :key="key" :value="it.value">
  60. {{ it.text }}
  61. </ion-select-option>
  62. </ion-select>
  63. <!-- <ion-note slot="error">所属驿站不能为空</ion-note>-->
  64. </div>
  65. <ion-label style="padding-left: 10px;">所属街道<span class="danger">*</span></ion-label>
  66. <div class="form-select">
  67. <ion-select disabled name="regionCode" id="regionCode" okText="确定" cancelText="取消" v-model="baseData.regionCode"
  68. interface="action-sheet" placeholder="请选择市/县" style="width:50%;float:left;" @ionChange="regionChange()" >
  69. <ion-select-option v-for=" (it,key) in regionList" :key="key" :value="it.code">
  70. {{ it.name }}
  71. </ion-select-option>
  72. </ion-select>
  73. <ion-select interface="action-sheet" placeholder="请选择所属街道" cancel-text="取消"
  74. id="streetCode" v-model="baseData.streetCode" style="width: 50%;float: left;">
  75. <ion-select-option v-for="(record,key) in streetList" :key="key"
  76. v-model:value="record.code">
  77. {{ record.name }}
  78. </ion-select-option>
  79. </ion-select>
  80. </div>
  81. <!-- <div class="form-select">-->
  82. <!-- <ion-label>市/县<span class="danger">*</span></ion-label>-->
  83. <!-- <ion-select class="disable" disabled name="regionCode" id="regionCode" okText="确定" cancelText="取消" v-model="baseData.regionCode"-->
  84. <!-- interface="action-sheet" placeholder="请选择市/县" style="width:100%;text-align:left;" @ionChange="regionChange()" >-->
  85. <!-- <ion-select-option v-for=" (it,key) in regionList" :key="key" :value="it.code">-->
  86. <!-- {{ it.name }}-->
  87. <!-- </ion-select-option>-->
  88. <!-- </ion-select>-->
  89. <!-- </div>-->
  90. <!-- <div class="form-select">-->
  91. <!-- <ion-label>所在街道<span class="danger">*</span></ion-label>-->
  92. <!-- <ion-select name="streetCode" id="streetCode" okText="确定" cancelText="取消" v-model="baseData.streetCode"-->
  93. <!-- interface="action-sheet" placeholder="请选择镇/街" style="width:100%;text-align:left;">-->
  94. <!-- <ion-select-option v-for=" (it,key) in streetList" :key="key" :value="it.code">-->
  95. <!-- {{ it.name }}-->
  96. <!-- </ion-select-option>-->
  97. <!-- </ion-select>-->
  98. <!-- </div>-->
  99. <div class="form-input">
  100. <ion-label>住址<span class="danger">*</span></ion-label>
  101. <ion-input name="address" id="address" style="text-align: left;" class="custom" :clear-input="true"
  102. placeholder="请输入住址" v-model="baseData.address" ></ion-input>
  103. <!-- <ion-note slot="error">地址不能为空</ion-note>-->
  104. </div>
  105. <div class="form-select">
  106. <ion-label>就业状态<span class="danger">*</span></ion-label>
  107. <ion-select name="jobStatusID" id="jobStatusID" okText="确定" cancelText="取消" v-model="baseData.jobStatusID"
  108. interface="action-sheet" placeholder="请选择就业状态" style="width:100%;text-align:left;" >
  109. <ion-select-option v-for=" (it,key) in jobUserStatusList" :key="key" :value="it.value">{{ it.name }}</ion-select-option>
  110. </ion-select>
  111. <!-- <ion-note slot="error">就业状态不能为空</ion-note>-->
  112. </div>
  113. <div class="form-select">
  114. <ion-label>重点人员类别<span class="danger">*</span></ion-label>
  115. <ion-select name="keyPersonTypeID" id="keyPersonTypeID" okText="确定" cancelText="取消" v-model="baseData.keyPersonTypeID"
  116. interface="action-sheet" placeholder="请选择重点人员类别" style="width:100%;text-align:left;" >
  117. <ion-select-option v-for=" (it,key) in keyPersonTypeList" :key="key" :value="it.value">
  118. {{ it.name }}
  119. </ion-select-option>
  120. </ion-select>
  121. <!-- <ion-note slot="error">重点人员类别不能为空</ion-note>-->
  122. </div>
  123. <div class="form-title">
  124. 其他信息
  125. <div style="float: right;">
  126. <ion-label style="color: red;font-size: 14px;" @click="expand=!expand">{{expand?"收起":"展开"}}</ion-label>
  127. </div>
  128. </div>
  129. <div v-if="expand">
  130. <div class="form-input">
  131. <ion-label>社会保障卡号</ion-label>
  132. <ion-input name="socialSecurityCard" id="socialSecurityCard" style="text-align: left;" class="custom" :clear-input="true"
  133. placeholder="请输入社会保障卡号" v-model="baseData.socialSecurityCard" ></ion-input>
  134. </div>
  135. <div class="form-select">
  136. <ion-label>政治面貌</ion-label>
  137. <ion-select name="politicsStatusID" id="politicsStatusID" okText="确定" cancelText="取消" v-model="baseData.politicsStatusID"
  138. interface="action-sheet" placeholder="请选择政治面貌" style="width:100%;text-align:left;" >
  139. <ion-select-option v-for=" (it,key) in politicsStatusList" :key="key" :value="it.value">
  140. {{ it.name }}
  141. </ion-select-option>
  142. </ion-select>
  143. </div>
  144. <div class="form-select">
  145. <ion-label>民族</ion-label>
  146. <ion-select name="nationID" id="nationID" okText="确定" cancelText="取消" v-model="baseData.nation"
  147. interface="action-sheet" placeholder="请选择民族" style="width:100%;text-align:left;" >
  148. <ion-select-option v-for=" (it,key) in nationTypeList" :key="key" :value="it.value">
  149. {{ it.name }}
  150. </ion-select-option>
  151. </ion-select>
  152. <!-- <ion-input name="nation" id="nation" style="text-align: left;" class="custom" :clear-input="true"
  153. v-model="baseData.nation" placeholder="请输入民族" ></ion-input>-->
  154. </div>
  155. <div class="form-input">
  156. <ion-label>毕业院校</ion-label>
  157. <ion-input name="finishSchool" id="finishSchool" style="text-align: left;" class="custom" :clear-input="true"
  158. placeholder="请输入毕业院校" v-model="baseData.finishSchool" ></ion-input>
  159. </div>
  160. <div class="form-input">
  161. <ion-label>专业</ion-label>
  162. <ion-input name="professionID" id="profession" style="text-align: left;" class="custom" :clear-input="true"
  163. placeholder="请输入专业" v-model="baseData.profession" ></ion-input>
  164. </div>
  165. <div class="form-select">
  166. <ion-label>是否非全日制</ion-label>
  167. <ion-select name="isFullTime" id="isFullTime" okText="确定" cancelText="取消" v-model="baseData.isFullTime"
  168. interface="action-sheet" placeholder="请选择是否非全日制" style="width:100%;text-align:left;" >
  169. <ion-select-option v-for=" (it,key) in isFullTimeList" :key="key" :value="it.value">
  170. {{ it.name }}
  171. </ion-select-option>
  172. </ion-select>
  173. </div>
  174. <div class="form-input">
  175. <ion-label>职业资格类别</ion-label>
  176. <div>
  177. <ion-input placeholder="请选择职业资格类别" label-placement="stacked" style="float: left;width:78%;"
  178. v-model="baseData.occupationalCategoryName" class="custom" readonly >
  179. </ion-input>
  180. <ion-item style="width:22%;float: right;padding:0px;margin: 0px;">
  181. <category-selection :OccupationalID="baseData.occupationalCategory" @SetOccupationalID="onSetOccupationalID"></category-selection>
  182. </ion-item>
  183. </div>
  184. <!-- <ion-select name="occupationalCategory" id="occupationalCategory" okText="确定" cancelText="取消" v-model="baseData.occupationalCategory"-->
  185. <!-- interface="action-sheet" placeholder="请选择职业资格类别" style="width:100%;text-align:left;" >-->
  186. <!-- <ion-select-option v-for=" (it,key) in occupationalCategoryList" :key="key" :value="it.value">-->
  187. <!-- {{ it.name }}-->
  188. <!-- </ion-select-option>-->
  189. <!-- </ion-select>-->
  190. </div>
  191. <div class="form-select">
  192. <ion-label>职业资格等级</ion-label>
  193. <ion-select name="occupationalLevel" id="occupationalLevel" okText="确定" cancelText="取消" v-model="baseData.occupationalLevel"
  194. interface="action-sheet" placeholder="请选择职业资格类别" style="width:100%;text-align:left;" >
  195. <ion-select-option v-for=" (it,key) in occupationalLevelList" :key="key" :value="it.value">
  196. {{ it.name }}
  197. </ion-select-option>
  198. </ion-select>
  199. </div>
  200. <div class="form-input">
  201. <ion-label>籍贯</ion-label>
  202. <ion-input name="nativePlace" id="nativePlace" style="text-align: left;" class="custom" :clear-input="true"
  203. v-model="baseData.nativePlace" placeholder="请输入籍贯" ></ion-input>
  204. </div>
  205. <div class="form-input">
  206. <ion-label>出生地</ion-label>
  207. <ion-input name="birthPlace" id="birthPlace" style="text-align: left;" class="custom"
  208. :clear-input="true"
  209. v-model="baseData.birthPlace" placeholder="请输入出生地"></ion-input>
  210. </div>
  211. <div class="form-select" >
  212. <ion-label>出生日期</ion-label>
  213. <ion-datetime-button disabled datetime="birthDay" style="position:absolute;left:10px;"></ion-datetime-button>
  214. <ion-modal :keep-contents-mounted="true">
  215. <ion-datetime name="birthDay" id="birthDay" placeholder="日期"
  216. v-model="baseData.birthDay" :prefer-wheel="true"
  217. dataformatas="YYYY-MM-DD" presentation="date" cancel-text="取消" done-text="确定"
  218. :show-default-buttons="true">
  219. </ion-datetime>
  220. </ion-modal>
  221. </div>
  222. <div style="width:100%;overflow: hidden;height: 30px;"></div>
  223. <div class="form-select">
  224. <ion-label>户口性质</ion-label>
  225. <ion-select name="familyNatureID" id="familyNatureID" okText="确定" cancelText="取消" v-model="baseData.familyNatureID"
  226. interface="action-sheet" placeholder="请选择户口性质" style="width:100%;text-align:left;">
  227. <ion-select-option v-for=" (it,key) in familyNatureList" :key="key" :value="it.value">
  228. {{ it.name }}
  229. </ion-select-option>
  230. </ion-select>
  231. </div>
  232. <div class="form-select">
  233. <ion-label>最高学历</ion-label>
  234. <ion-select name="cultureRank" id="cultureRank" okText="确定" cancelText="取消" v-model="baseData.cultureRank"
  235. interface="action-sheet" placeholder="请选择最高学历" style="width:100%;text-align:left;">
  236. <ion-select-option v-for=" (it,key) in cultureRankList" :key="key" :value="it.value">
  237. {{ it.name }}
  238. </ion-select-option>
  239. </ion-select>
  240. </div>
  241. <div class="form-select">
  242. <ion-label>健康状况</ion-label>
  243. <ion-select name="healthID" id="healthID" okText="确定" cancelText="取消" v-model="baseData.healthID"
  244. interface="action-sheet" placeholder="请选择健康状况" style="width:100%;text-align:left;">
  245. <ion-select-option v-for=" (it,key) in userHealthList" :key="key" :value="it.value">
  246. {{ it.name }}
  247. </ion-select-option>
  248. </ion-select>
  249. </div>
  250. <!-- <div class="form-select">-->
  251. <!-- <ion-label>血型</ion-label>-->
  252. <!-- <ion-select name="bloodTypeID" id="bloodTypeID" okText="确定" cancelText="取消" v-model="baseData.bloodTypeID"-->
  253. <!-- interface="action-sheet" placeholder="请选择血型" style="width:100%;text-align:left;">-->
  254. <!-- <ion-select-option v-for=" (it,key) in bloodTypeList" :key="key" :value="it.value">-->
  255. <!-- {{ it.name }}-->
  256. <!-- </ion-select-option>-->
  257. <!-- </ion-select>-->
  258. <!-- </div>-->
  259. <div class="form-input">
  260. <ion-label>身高(cm)</ion-label>
  261. <ion-input name="height" id="height" style="text-align: left;" class="custom" :clear-input="true"
  262. placeholder="请输入身高" v-model="baseData.height" ></ion-input>
  263. </div>
  264. <div class="form-input">
  265. <ion-label>视力</ion-label>
  266. <ion-input name="vision" id="vision" style="text-align: left;" class="custom" :clear-input="true"
  267. placeholder="如5.0" v-model="baseData.vision" ></ion-input>
  268. </div>
  269. <div class="form-input">
  270. <ion-label>体重(kg)</ion-label>
  271. <ion-input name="weight" id="weight" style="text-align: left;" class="custom" :clear-input="true"
  272. placeholder="请输入体重" v-model="baseData.weight" ></ion-input>
  273. </div>
  274. <div class="form-select">
  275. <ion-label>婚姻状况</ion-label>
  276. <ion-select name="maritalStatusID" id="maritalStatusID" okText="确定" cancelText="取消" v-model="baseData.maritalStatusID"
  277. interface="action-sheet" placeholder="请选择婚姻状况" style="width:100%;text-align:left;">
  278. <ion-select-option v-for=" (it,key) in maritalStatusList" :key="key" :value="it.value">
  279. {{ it.name }}
  280. </ion-select-option>
  281. </ion-select>
  282. </div>
  283. <!-- <div class="form-select">
  284. <ion-label>省份</ion-label>
  285. <ion-select name="provinceCode" id="provinceCode" okText="确定" cancelText="取消" v-model="baseData.provinceCode"
  286. interface="action-sheet" placeholder="请选择省份" style="width:100%;text-align:left;" @change="provinceChange()" >
  287. <ion-select-option v-for=" (it,key) in provinceList" :key="key" :value="it.value">
  288. {{ it.name }}
  289. </ion-select-option>
  290. </ion-select>
  291. </div>-->
  292. <div class="form-input">
  293. <ion-label>联系人员</ion-label>
  294. <ion-input name="userName" id="userName" style="text-align: left;" class="custom" :clear-input="true"
  295. placeholder="请输入联系人员" v-model="baseData.userName" ></ion-input>
  296. </div>
  297. <!-- <div class="form-input">-->
  298. <!-- <ion-label>邮政编码</ion-label>-->
  299. <!-- <ion-input name="birthPlace" id="postalCode" style="text-align: left;" class="custom" :clear-input="true"-->
  300. <!-- placeholder="请输入邮政编码" v-model="baseData.postalCode"></ion-input>-->
  301. <!-- </div>-->
  302. <div class="form-input">
  303. <ion-label>电子邮箱</ion-label>
  304. <ion-input name="email" id="email" style="text-align: left;" class="custom" :clear-input="true"
  305. placeholder="请输入电子邮箱" v-model="baseData.email" ></ion-input>
  306. </div>
  307. <div class="form-input">
  308. <ion-label>家庭住址</ion-label>
  309. <ion-textarea name="familyAddress" id="familyAddress" class="custom" rows="4"
  310. placeholder="请输入家庭住址" v-model="baseData.familyAddress" style="border-bottom: 1px solid #fff2e8;"></ion-textarea>
  311. </div>
  312. <div class="form-input">
  313. <ion-label>兴趣爱好</ion-label>
  314. <ion-textarea name="hobby" id="hobby" class="custom" rows="4"
  315. placeholder="请输入兴趣爱好" v-model="baseData.hobby" style="border-bottom: 1px solid #fff2e8;" ></ion-textarea>
  316. </div>
  317. <div class="form-input">
  318. <ion-label>个人技能</ion-label>
  319. <ion-textarea name="personalSkills" id="personalSkills" class="custom" rows="4"
  320. placeholder="请输入个人技能" v-model="baseData.personalSkills"
  321. style="border-bottom: 1px solid #fff2e8;"></ion-textarea>
  322. </div>
  323. </div>
  324. </ion-list>
  325. <ion-list v-if="curStepData.statusVal==2" >
  326. <div class="form-title">
  327. 教育经历
  328. <ion-icon :icon="addCircleOutline" class="iconBtn" style="float:right;"
  329. @click="onPathForward('./educationEdit',null,null,null,2)"></ion-icon>
  330. </div>
  331. <div class="bw-vue-list">
  332. <div class="list-content" v-if="!loading">
  333. <ion-list>
  334. <div v-for="(record,key) in educationList" :key="key" >
  335. <ion-item-sliding>
  336. <ion-item detail @click="onPathForward('./educationEdit',record.educationID,null,null,2)">
  337. <ion-label>
  338. <h2>{{record.schoolName}}</h2>
  339. <p>{{dayjs(record.schoolTime).format("YYYY-MM-DD")}}至{{dayjs(record.overTime).format("YYYY-MM-DD")}}</p>
  340. </ion-label>
  341. </ion-item>
  342. <ion-item-options>
  343. <ion-item-option color="danger" @click="setDelAlertOpen(true, record.educationID)">
  344. <ion-icon :icon="trashOutline"></ion-icon>
  345. </ion-item-option>
  346. </ion-item-options>
  347. </ion-item-sliding>
  348. </div>
  349. </ion-list>
  350. </div>
  351. </div>
  352. <b-empty v-if="educationList.length==0" :loading="loading" />
  353. </ion-list>
  354. <ion-list v-if="curStepData.statusVal==3" >
  355. <div class="form-title">
  356. 工作经验
  357. <ion-icon :icon="addCircleOutline" class="iconBtn" style="float:right;"
  358. @click="onPathForward('./experienceEdit',null,null,null,3)"></ion-icon>
  359. </div>
  360. <div class="bw-vue-list">
  361. <div class="list-content" v-if="!loading">
  362. <ion-list>
  363. <div v-for="(record,key) in experienceList" :key="key">
  364. <ion-item-sliding>
  365. <ion-item detail @click="onPathForward('./experienceEdit',null,record.experienceID,null,3)">
  366. <ion-label>
  367. <h2>{{record.workAddress}}</h2>
  368. <p>{{dayjs(record.startTime).format("YYYY-MM-DD")}}至{{dayjs(record.endTime).format("YYYY-MM-DD")}}</p>
  369. </ion-label>
  370. </ion-item>
  371. <ion-item-options>
  372. <ion-item-option color="danger" @click="setDelAlertOpen(true, record.experienceID)">
  373. <ion-icon :icon="trashOutline"></ion-icon>
  374. </ion-item-option>
  375. </ion-item-options>
  376. </ion-item-sliding>
  377. </div>
  378. </ion-list>
  379. </div>
  380. </div>
  381. <b-empty v-if="experienceList.length==0" :loading="loading" />
  382. </ion-list>
  383. <ion-list v-if="curStepData.statusVal==4">
  384. <div class="form-title">
  385. 求职意向
  386. <ion-icon :icon="addCircleOutline" class="iconBtn" style="float:right;"
  387. @click="onPathForward('./jobHuntEdit',null,null,null,4)"></ion-icon>
  388. </div>
  389. <div class="bw-vue-list">
  390. <div class="list-content" v-if="!loading">
  391. <ion-list>
  392. <div v-for="(record,key) in jobHuntList" :key="key">
  393. <ion-item-sliding>
  394. <ion-item detail @click="onPathForward('./jobHuntEdit',null,null,record.jobHuntID,4)">
  395. <ion-label>
  396. <h2>{{record.professionName}}</h2>
  397. <p>期望薪资:{{record.minSalary}}-{{record.maxSalary}}</p>
  398. </ion-label>
  399. </ion-item>
  400. <ion-item-options>
  401. <ion-item-option color="danger" @click="setDelAlertOpen(true, record.jobHuntID)">
  402. <ion-icon :icon="trashOutline"></ion-icon>
  403. </ion-item-option>
  404. </ion-item-options>
  405. </ion-item-sliding>
  406. </div>
  407. </ion-list>
  408. </div>
  409. </div>
  410. <b-empty v-if="jobHuntList.length==0" :loading="loading" />
  411. </ion-list>
  412. <ion-infinite-scroll v-if="curStepData.statusVal!=1" threshold="100px" @ionInfinite="onScroll($event)">
  413. <ion-infinite-scroll-content
  414. :loadingText="pageParams.total>pageParams.pageIndex*pageParams.pageSize?'正在加载...':'暂无更多'"
  415. loadingSpinner="bubbles">
  416. </ion-infinite-scroll-content>
  417. </ion-infinite-scroll>
  418. </div>
  419. </form>
  420. </ion-content>
  421. <ion-footer>
  422. <ion-toolbar>
  423. <ion-button style="width: 100%;" @click="onSave" v-if="curStepData.statusVal==1">保存并下一步</ion-button>
  424. <div v-if="curStepData.statusVal!=1" >
  425. <ion-button style="width: 48%;float:left;margin-left: 1%;" @click="onBack" >上一步</ion-button>
  426. <ion-button style="width: 48%;margin-right: 1%;" @click="onSave" v-if="curStepData.statusVal!=4">下一步</ion-button>
  427. <ion-button style="width: 48%;margin-right: 1%;" @click="onFinish" v-if="curStepData.statusVal==4">完 成</ion-button>
  428. </div>
  429. </ion-toolbar>
  430. </ion-footer>
  431. <ion-alert
  432. :is-open="delAlertOpen"
  433. header="删除确认"
  434. message="确定要删除该信息吗?"
  435. :buttons="delAlertButtons"
  436. @didDismiss="setDelAlertOpen(false, null)"
  437. ></ion-alert>
  438. <ion-alert
  439. :is-open="infoAlertOpen"
  440. :header="infoAlterData.title"
  441. :message="infoAlterData.message"
  442. :buttons="infoAlertButtons"
  443. @didDismiss="setInfoAlertOpen(false)"
  444. ></ion-alert>
  445. <ion-loading
  446. :is-open="delLoading"
  447. message="删除中..."
  448. @didDismiss="setDelLoadingOpen(false)" >
  449. </ion-loading>
  450. </ion-page>
  451. </template>
  452. <script lang="ts">
  453. import {computed, defineComponent, reactive, ref, toRefs, watch} from "vue";
  454. import {addCircleOutline, arrowBackOutline, trashOutline} from 'ionicons/icons';
  455. import {useRoute, useRouter} from "vue-router";
  456. import {alertController, onIonViewDidEnter} from "@ionic/vue";
  457. import {baseInfoSave, getJobUserById} from "@/api/jobUserInfo";
  458. import {required} from "@vuelidate/validators";
  459. import {useVuelidate} from "@vuelidate/core";
  460. import {post} from "@/api/common";
  461. import {getSysDictionaryList} from "@/api/system/dictionary";
  462. import {getSiteDataList} from "@/api/siteInfo";
  463. import {getRegionCodeList, getStreetCodeList} from "@/api/system/area";
  464. import {getEducationListByJobUserID} from "@/api/education";
  465. import {getExperienceListByJobUserID} from "@/api/experience";
  466. import {getJobHuntListByJobUserID} from "@/api/jobHuntInfo";
  467. import dayjs from "dayjs";
  468. import CategorySelection from "@/components/ocCategorySelection.vue";
  469. import {getPosition} from "@/utils/position";
  470. import crtyptoHelp from "@/utils/crypto"
  471. interface SelectProps {
  472. name: string,
  473. value: string
  474. }
  475. interface StepParams{
  476. loginUserID: string,
  477. statusVal: number
  478. }
  479. export default defineComponent({
  480. name: "jobUserInfoEdit",
  481. components:{CategorySelection},
  482. setup() {
  483. const route = useRoute();
  484. const router = useRouter();
  485. const isAllowCommit = ref(true);
  486. const expand = ref<boolean>(false);
  487. const loading = ref(true);
  488. const siteInfoList = ref<SelectProps[]>([]);
  489. const curStepData = ref<StepParams>({
  490. loginUserID:"",
  491. statusVal: 1
  492. });
  493. const stepList = ref([
  494. {title: '基础信息', desc: '个人基础信息', val: 1},
  495. {title: '教育经历', desc: '完善教育经历',val: 2},
  496. {title: '工作经验', desc: '完善工作经验', val: 3},
  497. {title: '求职意向', desc: '个人求职意向', val: 4},
  498. ]);
  499. const genderList = ref<SelectProps[]>([]);
  500. const jobUserStatusList = ref<SelectProps[]>([]);
  501. const keyPersonTypeList = ref<SelectProps[]>([]);
  502. const cultureRankList = ref<SelectProps[]>([]);
  503. const userHealthList = ref<SelectProps[]>([]);
  504. const bloodTypeList = ref<SelectProps[]>([]);
  505. const maritalStatusList = ref<SelectProps[]>([]);
  506. const provinceList = ref<SelectProps[]>([{name:'广东省',value:'440000000000000'}]);
  507. const nationTypeList = ref<SelectProps[]>([]);
  508. const isFullTimeList = ref<SelectProps[]>([]);
  509. //const occupationalCategoryList = ref<SelectProps[]>([]);
  510. const occupationalLevelList = ref<SelectProps[]>([]);
  511. const familyNatureList = ref([]);
  512. const politicsStatusList = ref([]);
  513. const regionList = ref<SelectProps[]>([]);
  514. const streetList = ref<SelectProps[]>([]);
  515. const educationList = ref([]);
  516. const experienceList = ref([]);
  517. const jobHuntList = ref([]);
  518. const baseInfoData = reactive({
  519. baseData:{
  520. jobUserID:null,
  521. siteID:null,
  522. name:null,
  523. identityNumber: null,
  524. sex: 1,
  525. userMobile: null,
  526. address: null,
  527. jobStatusID: null,
  528. keyPersonTypeID: null,
  529. politicsStatusID:null,
  530. birthPlace:null,
  531. birthDay:dayjs().format("YYYY-MM-DD"),
  532. familyNatureID:null,
  533. cultureRank:null,
  534. healthID:null,
  535. //bloodTypeID:null,
  536. height:null,
  537. vision:null,
  538. weight:null,
  539. maritalStatusID:null,
  540. provinceCode:null,
  541. regionCode:null,
  542. streetCode:null,
  543. userName:null,
  544. familyAddress:null,
  545. postalCode:null,
  546. email:'',
  547. hobby:null,
  548. personalSkills:null,
  549. socialSecurityCard:"",
  550. finishSchool:null,
  551. profession:null,
  552. nativePlace:null,
  553. isFullTime:null,
  554. occupationalCategory:null,
  555. occupationalCategoryName:null,
  556. occupationalLevel:null,
  557. openId:null,
  558. loginUserID: '',
  559. longitude: null,
  560. latitude: null
  561. }});
  562. const pageParams = reactive({
  563. pageIndex: 1,
  564. pageSize: 5,
  565. total:0,
  566. jobUserID:'',
  567. openID:''
  568. });
  569. const baseDataRule = computed(()=>{
  570. return {baseData:{
  571. siteID:{required},
  572. regionCode:{required},
  573. streetCode:{required},
  574. name:{required},
  575. identityNumber:{required},
  576. sex:{required},
  577. userMobile:{required},
  578. address:{required},
  579. jobStatusID:{required},
  580. keyPersonTypeID:{required},
  581. }}
  582. });
  583. const baseDataValid = useVuelidate(baseDataRule,baseInfoData);
  584. const expandChange= ()=>{
  585. expand.value = !expand.value;
  586. }
  587. // 删除警告弹窗开关
  588. const delAlertOpen = ref(false);
  589. // 删除数据
  590. const delID = ref("");
  591. const postUrl = ref("jobUserService/education/deleteEducation");
  592. const actionName = ref("删除教育经历信息");
  593. // 删除加载
  594. const delLoading = ref(false);
  595. // 信息弹窗开关
  596. const infoAlertOpen = ref(false);
  597. // 删除警告弹窗按钮定义
  598. const infoAlertButtons = [
  599. {
  600. text: '确定',
  601. role: 'confirm',
  602. handler: () => {
  603. reload(baseInfoData.baseData.jobUserID,curStepData.value.statusVal,curStepData.value.loginUserID,baseInfoData.baseData.openId);
  604. },
  605. },
  606. ];
  607. // 设置要删除的教育经历
  608. function setDelAlertOpen(value: boolean, id: any) {
  609. delAlertOpen.value = value;
  610. if(id != null) {
  611. delID.value = id;
  612. }
  613. }
  614. // 设置信息提示弹窗开关
  615. function setInfoAlertOpen(value: boolean) {
  616. infoAlertOpen.value = value;
  617. }
  618. // 设置删除弹窗开启关闭
  619. function setDelLoadingOpen(value: boolean) {
  620. delLoading.value = value;
  621. }
  622. // 信息弹窗内容
  623. const infoAlterData = reactive({
  624. title:"",
  625. message:""
  626. });
  627. // 删除警告弹窗按钮定义
  628. const delAlertButtons = [
  629. {
  630. text: '取消',
  631. role: 'cancel',
  632. handler: () => {
  633. console.log("取消了删除");
  634. },
  635. },
  636. {
  637. text: '确定',
  638. role: 'confirm',
  639. handler: () => {
  640. delLoading.value = true;
  641. postUrl.value = "jobUserService/education/deleteEducation";
  642. actionName.value = "删除教育经历";
  643. if(curStepData.value.statusVal!=2){
  644. postUrl.value = curStepData.value.statusVal==3 ?"jobUserService/experience/deleteExperience":"jobUserService/jobHunt/delete";
  645. actionName.value = curStepData.value.statusVal==3 ?"删除工作经验":"删除求职意向";
  646. }
  647. post(postUrl.value,[delID.value],actionName.value).then((res) => {
  648. /*infoAlterData.title = "提示";
  649. infoAlterData.message = "删除成功";
  650. setInfoAlertOpen(true);*/
  651. }).finally(()=>{
  652. delLoading.value = false;
  653. reload(baseInfoData.baseData.jobUserID,curStepData.value.statusVal,curStepData.value.loginUserID,baseInfoData.baseData.openId);
  654. });
  655. },
  656. },
  657. ];
  658. const presentAlert = async (message: string) => {
  659. const alert = await alertController.create({
  660. header: '错误!',
  661. message: message,
  662. buttons: [
  663. '确定'
  664. ],
  665. });
  666. await alert.present();
  667. }
  668. const onBack = () => {
  669. curStepData.value.statusVal-=1;
  670. if(curStepData.value.statusVal > 0){
  671. router.push({path:"/jobUserInfo/userEdit", query: {reload:0,educationID:null,jobHuntID:null,jobUserID: baseInfoData.baseData.jobUserID,status:curStepData.value.statusVal,loginUserId:curStepData.value.loginUserID}});
  672. }else{
  673. router.push({path:'/jobUserInfo/index', query: {userId: route.query.loginUserId,openId: route.query.openId}});
  674. }
  675. }
  676. const inputDataValidate = () =>{
  677. isAllowCommit.value = true;
  678. const identReg = /^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|3[0-1])\d{3}([0-9Xx])$/;
  679. if(baseInfoData.baseData.identityNumber != null){
  680. if(!identReg.test(baseInfoData.baseData.identityNumber)){
  681. presentAlert("输入的身份证号码有误!");
  682. isAllowCommit.value = false;
  683. }else{
  684. // 计算身份证校验码
  685. const weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
  686. const checkCode = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];
  687. let sum = 0;
  688. for(let i = 0; i<weights.length;i++){
  689. sum += weights[i] * parseInt(String(baseInfoData.baseData.identityNumber).substring(i,i+1));
  690. }
  691. if(String(baseInfoData.baseData.identityNumber).substring(17,18)!=checkCode[sum%11]){
  692. presentAlert("输入的身份证号码有误!");
  693. console.log("lastOne",checkCode[sum%11]);
  694. isAllowCommit.value = false;
  695. }
  696. }
  697. }
  698. const mobileReg = /^1[3|4|5|6|7|8|9]\d{9}$/;
  699. if(baseInfoData.baseData.userMobile != null){
  700. if(!mobileReg.test(baseInfoData.baseData.userMobile)){
  701. presentAlert("输入的联系电话有误!");
  702. isAllowCommit.value = false;
  703. }
  704. }
  705. const emailReg = /^[a-z0-9]+([._\\-]*[a-z0-9])*@([a-z0-9]+[-a-z0-9]*[a-z0-9]+.){1,63}[a-z0-9]+$/;
  706. if(baseInfoData.baseData.email!=""&&baseInfoData.baseData.email!=null){
  707. if(!emailReg.test(baseInfoData.baseData.email)){
  708. presentAlert("输入的电子邮箱有误!");
  709. isAllowCommit.value = false;
  710. }
  711. }
  712. };
  713. const onSetOccupationalID = (data: any)=>{
  714. baseInfoData.baseData.occupationalCategory = data.value;
  715. baseInfoData.baseData.occupationalCategoryName = data.text;
  716. }
  717. const onSave = async function (){
  718. if (curStepData.value.statusVal==1){
  719. const isFormCorrect = await baseDataValid.value.$validate();
  720. if(!isFormCorrect){
  721. await presentAlert("请填写完整的信息!");
  722. return null;
  723. }
  724. inputDataValidate();
  725. if(isAllowCommit.value){
  726. baseInfoData.baseData.loginUserID = curStepData.value.loginUserID;
  727. const userMobile = baseInfoData.baseData.userMobile;
  728. const identityNumber = baseInfoData.baseData.identityNumber;
  729. baseInfoData.baseData.userMobile = crtyptoHelp.encryptDesText(baseInfoData.baseData.userMobile);
  730. baseInfoData.baseData.identityNumber = crtyptoHelp.encryptDesText(baseInfoData.baseData.identityNumber);
  731. baseInfoSave(baseInfoData.baseData).then(result => {
  732. if (result) {
  733. router.push({path: '/jobUserInfo/userEdit', query: {reload:0,jobUserID: baseInfoData.baseData.jobUserID,status:2,loginUserId:curStepData.value.loginUserID}});
  734. }else{
  735. baseInfoData.baseData.userMobile = userMobile;
  736. baseInfoData.baseData.identityNumber = identityNumber;
  737. }
  738. });
  739. }
  740. }
  741. else if (curStepData.value.statusVal==2){
  742. await router.push({path: '/jobUserInfo/userEdit', query: {reload:0,jobUserID: baseInfoData.baseData.jobUserID,status:3,loginUserId:curStepData.value.loginUserID}});
  743. }else if (curStepData.value.statusVal==3){
  744. await router.push({path: '/jobUserInfo/userEdit', query: {reload:0,jobUserID: baseInfoData.baseData.jobUserID,status:4,loginUserId:curStepData.value.loginUserID}});
  745. }
  746. }
  747. const onPathForward = (pathValue:string,educationIDValue:any,experienceIDValue:any,jobHuntIDValue:any,statusValue:any)=>{
  748. console.log("userid",baseInfoData.baseData.jobUserID);
  749. router.push({path: pathValue, query: {reload:1,educationID:educationIDValue,experienceID:experienceIDValue,jobHuntID:jobHuntIDValue,jobUserID: baseInfoData.baseData.jobUserID,status:statusValue,loginUserID:curStepData.value.loginUserID}});
  750. }
  751. const onScroll = (e: any) => {
  752. setTimeout(() => {
  753. e.target.complete();
  754. if (pageParams.total > pageParams.pageIndex * pageParams.pageSize) {
  755. pageParams.pageSize += 5;
  756. loadData(pageParams.jobUserID,curStepData.value.statusVal,curStepData.value.loginUserID,pageParams.openID);
  757. }
  758. }, 500);
  759. }
  760. const onFinish = () => {
  761. router.push('/jobUserInfo/finish');
  762. }
  763. /*下拉字典查询*/
  764. const getSelectorDataList = async function(){
  765. const genderResult :any = await getSysDictionaryList("Gender");
  766. genderList.value = genderResult;
  767. const jobUserStatusResult :any = await getSysDictionaryList("JobStatus");
  768. jobUserStatusList.value = jobUserStatusResult;
  769. const keyPersonTypeResult :any = await getSysDictionaryList("KeyPersonType");
  770. keyPersonTypeList.value = keyPersonTypeResult;
  771. const cultureRankResult :any = await getSysDictionaryList("HighestDegree");
  772. cultureRankList.value = cultureRankResult;
  773. const userHealthResult :any = await getSysDictionaryList("Health");
  774. userHealthList.value = userHealthResult;
  775. const bloodTypeResult :any = await getSysDictionaryList("BloodType");
  776. bloodTypeList.value = bloodTypeResult;
  777. const maritalStatusResult :any = await getSysDictionaryList("MaritalStatus");
  778. maritalStatusList.value = maritalStatusResult;
  779. const politicsStatusResult :any = await getSysDictionaryList("PoliticsStatus");
  780. politicsStatusList.value = politicsStatusResult;
  781. const familyNatureResult :any = await getSysDictionaryList("FamilyNature");
  782. familyNatureList.value = familyNatureResult;
  783. const nationTypeListResult :any = await getSysDictionaryList("NationType");
  784. nationTypeList.value = nationTypeListResult;
  785. const isFullTimeListResult :any = await getSysDictionaryList("IsFullTime");
  786. isFullTimeList.value = isFullTimeListResult;
  787. //const occupationalCategoryListResult :any = await getSysDictionaryList("OccupationalCategory");
  788. //occupationalCategoryList.value = occupationalCategoryListResult;
  789. const occupationalLevelListResult :any = await getSysDictionaryList("OccupationalLevel");
  790. occupationalLevelList.value = occupationalLevelListResult;
  791. }
  792. const getSiteInfoList = async function(){
  793. const siteInfoResult :any = await getSiteDataList();
  794. siteInfoList.value = siteInfoResult;
  795. }
  796. const getRegionList = async function(){
  797. const regionResult: any = await getRegionCodeList();
  798. regionList.value = regionResult;
  799. }
  800. const getStreetList = async function(){
  801. if (baseInfoData.baseData.regionCode != null){
  802. const streetResult: any = await getStreetCodeList(baseInfoData.baseData.regionCode);
  803. streetList.value = streetResult;
  804. }
  805. }
  806. const regionChange = async function(){
  807. baseInfoData.baseData.streetCode = null;
  808. await getStreetList();
  809. }
  810. const provinceChange = async function(){
  811. baseInfoData.baseData.regionCode = null;
  812. await getRegionList();
  813. await regionChange();
  814. }
  815. const loadData = async (jobUserID: any,status:any,userId:any,openId:any) => {
  816. loading.value = true;
  817. pageParams.jobUserID = jobUserID;
  818. pageParams.openID = openId;
  819. baseInfoData.baseData.jobUserID = jobUserID;
  820. curStepData.value.statusVal = status;
  821. curStepData.value.loginUserID = userId;
  822. console.log("当前curStepData",curStepData.value);
  823. if(curStepData.value.statusVal==1){
  824. const reqData = await getJobUserById(jobUserID,userId);
  825. baseInfoData.baseData = reqData;
  826. baseInfoData.baseData.openId = openId;
  827. baseInfoData.baseData.userMobile = crtyptoHelp.decryptDesText(baseInfoData.baseData.userMobile);
  828. baseInfoData.baseData.identityNumber = crtyptoHelp.decryptDesText(baseInfoData.baseData.identityNumber);
  829. console.log("当前baseInfoData",baseInfoData.baseData);
  830. await getStreetList();
  831. }
  832. else if(curStepData.value.statusVal==2){
  833. const reqData :any = await getEducationListByJobUserID(pageParams);
  834. educationList.value = reqData.list;
  835. pageParams.total = reqData.total;
  836. console.log("educationList",educationList.value);
  837. }
  838. else if(curStepData.value.statusVal==3){
  839. const reqData = await getExperienceListByJobUserID(pageParams);
  840. experienceList.value= reqData.list;
  841. pageParams.total = reqData.total;
  842. console.log("experienceList",experienceList.value);
  843. }
  844. else if(curStepData.value.statusVal==4){
  845. const reqData = await getJobHuntListByJobUserID(pageParams);
  846. jobHuntList.value= reqData.list;
  847. pageParams.total = reqData.total;
  848. console.log("jobHuntList",jobHuntList.value);
  849. }
  850. if (jobUserID == null) {
  851. setLongitudeLatitude()
  852. }
  853. loading.value = false;
  854. };
  855. watch(() => route.query, () => {
  856. if (route.query.reload) {
  857. loadData(route.query.jobUserID,route.query.status,route.query.loginUserId,route.query.openId);
  858. }
  859. });
  860. watch(() => baseInfoData.baseData.identityNumber, () => {
  861. if(baseInfoData.baseData.identityNumber != null && String(baseInfoData.baseData.identityNumber).length == 18){
  862. const identReg = /^[1-9]{1}[0-9]{14}$|^[1-9]{1}[0-9]{16}([0-9]|[xX])$/;
  863. if(identReg.test(baseInfoData.baseData.identityNumber)){
  864. const birthDayStr = String(baseInfoData.baseData.identityNumber).substring(6,14);
  865. const sexStr = String(baseInfoData.baseData.identityNumber).substring(16,17);
  866. baseInfoData.baseData.sex = parseInt(sexStr)%2 == 0 ? 2 : 1; //双女单男
  867. baseInfoData.baseData.birthDay = dayjs(birthDayStr).format("YYYY-MM-DD");
  868. }
  869. }
  870. });
  871. const reload = (jobUserID:any,status:any,userId:any,openId:any) => {
  872. pageParams.pageIndex = 1;
  873. expand.value = false;
  874. loadData(jobUserID,status,userId,openId);
  875. }
  876. // 设置经纬度
  877. function setLongitudeLatitude() {
  878. getPosition().then((data: any) => {
  879. console.log(data)
  880. if (data.longitude != null && data.latitude != null) {
  881. baseInfoData.baseData.longitude = data.longitude;
  882. baseInfoData.baseData.latitude = data.latitude;
  883. }
  884. })
  885. }
  886. onIonViewDidEnter(() => {
  887. if (route.query.reload)
  888. reload(route.query.jobUserID,route.query.status,route.query.loginUserId,route.query.openId);
  889. });
  890. return {
  891. ...toRefs(baseInfoData),
  892. arrowBackOutline,
  893. addCircleOutline,
  894. trashOutline,
  895. route,
  896. router,
  897. expand,
  898. loading,
  899. stepList,
  900. curStepData,
  901. baseDataValid,
  902. siteInfoList,
  903. genderList,
  904. nationTypeList,
  905. isFullTimeList,
  906. //occupationalCategoryList,
  907. occupationalLevelList,
  908. familyNatureList,
  909. politicsStatusList,
  910. pageParams,
  911. jobUserStatusList,
  912. keyPersonTypeList,
  913. cultureRankList,
  914. userHealthList,
  915. bloodTypeList,
  916. maritalStatusList,
  917. provinceList,
  918. regionList,
  919. streetList,
  920. educationList,
  921. experienceList,
  922. jobHuntList,
  923. delID,
  924. delAlertButtons,
  925. infoAlertButtons,
  926. delAlertOpen,
  927. infoAlertOpen,
  928. delLoading,
  929. infoAlterData,
  930. expandChange,
  931. provinceChange,
  932. regionChange,
  933. onSetOccupationalID,
  934. onSave,
  935. onBack,
  936. onFinish,
  937. onScroll,
  938. onPathForward,
  939. loadData,
  940. reload,
  941. setDelAlertOpen,
  942. setInfoAlertOpen,
  943. setDelLoadingOpen,
  944. getSiteInfoList,
  945. getSelectorDataList,
  946. getRegionList,
  947. getStreetList,
  948. dayjs
  949. }
  950. },
  951. mounted(){
  952. this.getSiteInfoList();
  953. this.getSelectorDataList();
  954. this.getRegionList();
  955. this.getStreetList();
  956. }
  957. });
  958. </script>
  959. <style lang="less">
  960. ion-select#sex.md.select-disabled.legacy-select::after{display: none;}
  961. ion-select#siteID.md.select-disabled.legacy-select::after{display: none;}
  962. ion-select#regionCode.md.select-disabled.legacy-select::after{display: none;}
  963. .custom{
  964. --placeholder-color: gray;
  965. --placeholder-opacity: 0.5;
  966. }
  967. .title-item{
  968. margin-left: 15px;
  969. color:#1c3d70 !important;
  970. font-size: 14px !important;
  971. font-weight: bold;
  972. }
  973. .next-btn {
  974. width: 80px;
  975. border-radius: 5px;
  976. background-color:#3a7be0;
  977. color: #363432;
  978. font-size: 14px;
  979. }
  980. .iconBtn{
  981. width:24px;
  982. height:24px;
  983. }
  984. .stepFlex {
  985. margin: 0;
  986. display: flex;
  987. width: 100%;
  988. .stepFlex-item {
  989. position: relative;
  990. flex: 1;
  991. text-align: center;
  992. margin-top: -10px;
  993. .stepFlex-item-label {
  994. padding-top: 30px;
  995. font-size: 14px;
  996. .stepFlex-item-label-title{
  997. margin-top:30px;
  998. }
  999. .stepFlex-item-label-desc{
  1000. margin-top:5px;color: #b9b9bd;
  1001. }
  1002. }
  1003. }
  1004. .greenCircle {
  1005. top: calc(50% - 15px);
  1006. left: calc(50% - 4px);
  1007. position: absolute;
  1008. z-index: 2;
  1009. width: 10px;
  1010. height: 10px;
  1011. border-radius: 50%;
  1012. background-color: #31A2FE;
  1013. }
  1014. .now {
  1015. top: calc(50% - 18px);
  1016. left: calc(50% - 8px);
  1017. position: absolute;
  1018. z-index: 3;
  1019. width: 16px;
  1020. height: 16px;
  1021. border-radius: 50%;
  1022. background-color: #31A2FE;
  1023. border: 4px solid #c5e8f9;
  1024. }
  1025. .grayCircle {
  1026. top: calc(50% - 15px);
  1027. left: calc(50% - 4px);
  1028. position: absolute;
  1029. z-index: 2;
  1030. width: 10px;
  1031. height: 10px;
  1032. border-radius: 50%;
  1033. background-color: #ccc;
  1034. }
  1035. .greenLine {
  1036. width: 100%;
  1037. top: calc(50% - 11px);
  1038. left: calc(50% - 2px);
  1039. height: 2px;
  1040. background-color: #31A2FE;
  1041. position: absolute;
  1042. }
  1043. .grayLine {
  1044. height: 0;
  1045. border: 1px dashed #ccc;
  1046. width: 100%;
  1047. top: calc(50% - 11px);
  1048. left: calc(50% - 2px);
  1049. position: absolute;
  1050. }
  1051. }
  1052. </style>