detail.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625
  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. {{ curTitle }}
  10. </ion-title>
  11. </ion-toolbar>
  12. </ion-header>
  13. <ion-content>
  14. <div>
  15. <ion-label @click="onTabChange(1)" class="tab-item">
  16. <span :class="curTabIndex==1?'active':'passive'">个人信息</span>
  17. </ion-label>
  18. <ion-label @click="onTabChange(2)" class="tab-item">
  19. <sapn :class="curTabIndex>=2&&curTabIndex<3?'active':'passive '">教育经历</sapn>
  20. </ion-label>
  21. <ion-label @click="onTabChange(3)" class="tab-item">
  22. <sapn :class="curTabIndex>=3&&curTabIndex<4?'active':'passive '">工作经验</sapn>
  23. </ion-label>
  24. <ion-label @click="onTabChange(4)" class="tab-item">
  25. <sapn :class="curTabIndex>=4?'active':'passive '">求职意向</sapn>
  26. </ion-label>
  27. </div>
  28. <div class="bw-vue-form">
  29. <div v-show="curTabIndex==1">
  30. <div class="form-title" >&nbsp;</div>
  31. <div class="form-detail">
  32. <ion-label>姓名</ion-label>
  33. <ion-text>{{ dataModel.name }}</ion-text>
  34. </div>
  35. <div class="form-detail">
  36. <ion-label>身份证号码</ion-label>
  37. <ion-text>{{ dataModel.identityNumberShow }}</ion-text>
  38. </div>
  39. <div class="form-detail">
  40. <ion-label>性别</ion-label>
  41. <ion-text>{{ dataModel.genderName }}</ion-text>
  42. </div>
  43. <div class="form-detail">
  44. <ion-label>联系电话</ion-label>
  45. <ion-text>{{ dataModel.userMobile }}</ion-text>
  46. </div>
  47. <div class="form-detail">
  48. <ion-label>所属驿站</ion-label>
  49. <ion-text>{{ dataModel.siteName }}</ion-text>
  50. </div>
  51. <div class="form-detail">
  52. <ion-label>所属街道</ion-label>
  53. <ion-text>{{ dataModel.regionName+"-"+dataModel.streetName }}</ion-text>
  54. </div>
  55. <div class="form-detail">
  56. <ion-label>居住地址</ion-label>
  57. <ion-text>{{ dataModel.address }}</ion-text>
  58. </div>
  59. <div class="form-detail">
  60. <ion-label>就业状态</ion-label>
  61. <ion-text>{{ dataModel.jobStatusName }}</ion-text>
  62. </div>
  63. <div class="form-detail">
  64. <ion-label>重点人员类别</ion-label>
  65. <ion-text>{{ dataModel.keyTypeName }}</ion-text>
  66. </div>
  67. <!-- <div class="form-detail">-->
  68. <!-- <ion-label>社会保障卡号</ion-label>-->
  69. <!-- <ion-text>{{ dataModel.socialSecurityCard }}</ion-text>-->
  70. <!-- </div>-->
  71. <!-- <div class="form-detail">-->
  72. <!-- <ion-label>政治面貌</ion-label>-->
  73. <!-- <ion-text>{{ dataModel.politicsStatusName }}</ion-text>-->
  74. <!-- </div>-->
  75. <!-- <div class="form-detail">-->
  76. <!-- <ion-label>民族</ion-label>-->
  77. <!-- <ion-text>{{ dataModel.nationName }}</ion-text>-->
  78. <!-- </div>-->
  79. <!-- <div class="form-detail">-->
  80. <!-- <ion-label>毕业院校</ion-label>-->
  81. <!-- <ion-text>{{ dataModel.finishSchool }}</ion-text>-->
  82. <!-- </div>-->
  83. <!-- <div class="form-detail">-->
  84. <!-- <ion-label>专业</ion-label>-->
  85. <!-- <ion-text>{{ dataModel.profession }}</ion-text>-->
  86. <!-- </div>-->
  87. <!-- <div class="form-detail">-->
  88. <!-- <ion-label>是否非全日制</ion-label>-->
  89. <!-- <ion-text>{{ dataModel.isFullTimeName }}</ion-text>-->
  90. <!-- </div>-->
  91. <!-- <div class="form-detail">-->
  92. <!-- <ion-label>职业资格类别</ion-label>-->
  93. <!-- <ion-text style="width: 52%;text-align:right;">{{ dataModel.occupationalCategoryName }}</ion-text>-->
  94. <!-- </div>-->
  95. <!-- <div class="form-detail">-->
  96. <!-- <ion-label>职业资格等级</ion-label>-->
  97. <!-- <ion-text>{{ dataModel.occupationalLevelName }}</ion-text>-->
  98. <!-- </div>-->
  99. <!-- <div class="form-detail">-->
  100. <!-- <ion-label>籍贯</ion-label>-->
  101. <!-- <ion-text>{{ dataModel.nativePlace }}</ion-text>-->
  102. <!-- </div>-->
  103. <!-- <div class="form-detail">-->
  104. <!-- <ion-label>出生日期</ion-label>-->
  105. <!-- <ion-text v-if="dataModel.birthDay!=null">{{ dayjs(dataModel.birthDay).format("YYYY-MM-DD") }}</ion-text>-->
  106. <!-- </div>-->
  107. <!-- <div class="form-detail">-->
  108. <!-- <ion-label>户口性质</ion-label>-->
  109. <!-- <ion-text>{{ dataModel.familyNatureName }}</ion-text>-->
  110. <!-- </div>-->
  111. <!-- <div class="form-detail">-->
  112. <!-- <ion-label>最高学历</ion-label>-->
  113. <!-- <ion-text>{{ dataModel.cultureName}}</ion-text>-->
  114. <!-- </div>-->
  115. <!-- <div class="form-detail">-->
  116. <!-- <ion-label>健康状况</ion-label>-->
  117. <!-- <ion-text>{{ dataModel.healthName }}</ion-text>-->
  118. <!-- </div>-->
  119. <!-- <div class="form-detail" name="bloodTypeName">-->
  120. <!-- <ion-label>血型</ion-label>-->
  121. <!-- <ion-text>{{ dataModel.bloodTypeName }}</ion-text>-->
  122. <!-- </div>-->
  123. <!-- <div class="form-detail">-->
  124. <!-- <ion-label>身高</ion-label>-->
  125. <!-- <ion-text v-if="dataModel.height!=null">{{ dataModel.height +"cm"}}</ion-text>-->
  126. <!-- </div>-->
  127. <!-- <div class="form-detail">-->
  128. <!-- <ion-label>视力</ion-label>-->
  129. <!-- <ion-text>{{ dataModel.vision}}</ion-text>-->
  130. <!-- </div>-->
  131. <!-- <div class="form-detail">-->
  132. <!-- <ion-label>体重</ion-label>-->
  133. <!-- <ion-text v-if="dataModel.weight!=null">{{ dataModel.weight +"kg"}}</ion-text>-->
  134. <!-- </div>-->
  135. <!-- <div class="form-detail" name="maritalStatusName">-->
  136. <!-- <ion-label>婚姻状况</ion-label>-->
  137. <!-- <ion-text>{{ dataModel.maritalStatusName}}</ion-text>-->
  138. <!-- </div>-->
  139. <!-- <div class="form-detail">-->
  140. <!-- <ion-label>联系人</ion-label>-->
  141. <!-- <ion-text>{{ dataModel.userName}}</ion-text>-->
  142. <!-- </div>-->
  143. <!-- <div class="form-detail">-->
  144. <!-- <ion-label>电子邮箱</ion-label>-->
  145. <!-- <ion-text>{{ dataModel.email}}</ion-text>-->
  146. <!-- </div>-->
  147. <!-- <div class="form-detail">-->
  148. <!-- <ion-label>家庭住址</ion-label>-->
  149. <!-- <ion-text>{{ dataModel.familyAddress}}</ion-text>-->
  150. <!-- </div>-->
  151. <!-- <div class="form-detail">-->
  152. <!-- <ion-label>兴趣爱好</ion-label>-->
  153. <!-- <ion-text>{{ dataModel.hobby}}</ion-text>-->
  154. <!-- </div>-->
  155. </div>
  156. <div v-show="curTabIndex==2">
  157. <br/>
  158. <div v-if="!loading" id="educationList" >
  159. <div v-for="(record,key) in curUserEducationList" :key="key" >
  160. <ion-item detail @click="onEducationEdit(record.educationID)" class="ion-item">
  161. <ion-label>
  162. <h2>
  163. {{ record.schoolName }}
  164. </h2>
  165. <p v-if="record.schoolTime!=null&&record.overTime!=null">
  166. {{ dayjs(record.schoolTime).format("YYYY-MM-DD") }}至{{ dayjs(record.overTime).format("YYYY-MM-DD") }}
  167. </p>
  168. </ion-label>
  169. </ion-item>
  170. </div>
  171. </div>
  172. </div>
  173. <div v-show="curTabIndex==2.5">
  174. <div class="form-detail">
  175. <ion-label>毕业院校/培训机构</ion-label>
  176. <ion-text>{{ curUserEducationInfo.schoolName }}</ion-text>
  177. </div>
  178. <div class="form-detail">
  179. <ion-label>最高学历</ion-label>
  180. <ion-text>{{ curUserEducationInfo.cultureRankName }}</ion-text>
  181. </div>
  182. <div class="form-detail">
  183. <ion-label>专业</ion-label>
  184. <ion-text>{{ curUserEducationInfo.major }}</ion-text>
  185. </div>
  186. <div class="form-detail">
  187. <ion-label>起止日期</ion-label>
  188. <ion-text v-if="curUserEducationInfo.schoolTime!=null&&curUserEducationInfo.overTime!=null">
  189. {{ dayjs(curUserEducationInfo.schoolTime).format("YYYY-MM-DD") }}至{{ dayjs(curUserEducationInfo.overTime).format("YYYY-MM-DD") }}
  190. </ion-text>
  191. </div>
  192. </div>
  193. <div v-show="curTabIndex==3">
  194. <br/>
  195. <div v-if="!loading" id="experienceList" >
  196. <div v-for="(record,key) in curUserExperienceList" :key="key" >
  197. <ion-item detail @click="onExperienceEdit(record.experienceID)" class="ion-item">
  198. <ion-label>
  199. <h2>
  200. {{ record.workAddress }}
  201. </h2>
  202. <p v-if="record.startTime!=null&&record.endTime!=null">
  203. {{ dayjs(record.startTime).format("YYYY-MM-DD") }}至{{ dayjs(record.endTime).format("YYYY-MM-DD") }}
  204. </p>
  205. </ion-label>
  206. </ion-item>
  207. </div>
  208. </div>
  209. </div>
  210. <div v-show="curTabIndex==3.5">
  211. <div class="form-detail">
  212. <ion-label>工作单位</ion-label>
  213. <ion-text>{{ curUserExperienceInfo.workAddress }}</ion-text>
  214. </div>
  215. <div class="form-detail">
  216. <ion-label>职务</ion-label>
  217. <ion-text>{{ curUserExperienceInfo.duties }}</ion-text>
  218. </div>
  219. <div class="form-detail">
  220. <ion-label>工作内容</ion-label>
  221. <ion-text style="width: 54%;text-align:right;">{{ curUserExperienceInfo.workOffice }}</ion-text>
  222. </div>
  223. <div class="form-detail">
  224. <ion-label>起止日期</ion-label>
  225. <ion-text v-if="curUserExperienceInfo.startTime!=null&&curUserExperienceInfo.endTime!=null">
  226. {{ dayjs(curUserExperienceInfo.startTime).format("YYYY-MM-DD") }}至{{ dayjs(curUserExperienceInfo.endTime).format("YYYY-MM-DD") }}
  227. </ion-text>
  228. </div>
  229. </div>
  230. <div v-show="curTabIndex==4">
  231. <br/>
  232. <div v-if="!loading" id="jobHuntList" >
  233. <div v-for="(record,key) in curUserJobHuntList" :key="key" >
  234. <ion-item detail @click="onJobHuntEdit(record.jobHuntID)" class="ion-item">
  235. <ion-label>
  236. <h2>
  237. {{ record.professionName }}
  238. </h2>
  239. <p v-if="record.minSalary!=null&&record.maxSalary!=null">
  240. 期望薪资: {{ record.minSalary +"-"+ record.maxSalary }}
  241. </p>
  242. </ion-label>
  243. </ion-item>
  244. </div>
  245. </div>
  246. </div>
  247. <div v-show="curTabIndex==4.5">
  248. <div class="form-detail">
  249. <ion-label>岗位名称</ion-label>
  250. <ion-text>{{ curUserJobHuntInfo.professionName }}</ion-text>
  251. </div>
  252. <div class="form-detail">
  253. <ion-label>求职类型</ion-label>
  254. <ion-text>{{ curUserJobHuntInfo.jobHuntTypeStr }}</ion-text>
  255. </div>
  256. <div class="form-detail">
  257. <ion-label>人才类型</ion-label>
  258. <ion-text>{{ curUserJobHuntInfo.jobUserTypeStr }}</ion-text>
  259. </div>
  260. <div class="form-detail">
  261. <ion-label>月薪要求(元)</ion-label>
  262. <ion-text v-if="curUserJobHuntInfo.minSalary!=null&&curUserJobHuntInfo.maxSalary!=null">
  263. {{ curUserJobHuntInfo.minSalary+"-"+curUserJobHuntInfo.maxSalary }}
  264. </ion-text>
  265. </div>
  266. <div class="form-detail">
  267. <ion-label>工作年限</ion-label>
  268. <ion-text >
  269. {{ curUserJobHuntInfo.workYear }}
  270. </ion-text>
  271. </div>
  272. <div class="form-detail">
  273. <ion-label>期望工作地区</ion-label>
  274. <ion-text>
  275. {{ curUserJobHuntInfo.areaWork}}
  276. </ion-text>
  277. </div>
  278. <div class="form-detail">
  279. <ion-label>可到职日期</ion-label>
  280. <ion-text v-if="curUserJobHuntInfo.inDate!=null">
  281. {{ dayjs(curUserJobHuntInfo.inDate).format("YYYY-MM-DD") }}
  282. </ion-text>
  283. </div>
  284. <div class="form-detail">
  285. <ion-label>其他信息</ion-label>
  286. <ion-text>
  287. {{ curUserJobHuntInfo.otherDemand }}
  288. </ion-text>
  289. </div>
  290. </div>
  291. </div>
  292. <ion-infinite-scroll threshold="100px" @ionInfinite="onScroll($event)">
  293. <ion-infinite-scroll-content
  294. :loadingText="pageParams.total>pageParams.pageIndex*pageParams.pageSize?'正在加载...':'暂无更多'"
  295. loadingSpinner="bubbles">
  296. </ion-infinite-scroll-content>
  297. </ion-infinite-scroll>
  298. </ion-content>
  299. <ion-footer>
  300. </ion-footer>
  301. </ion-page>
  302. </template>
  303. <script lang="ts">
  304. import {defineComponent, ref, reactive, toRefs} from "vue";
  305. import {getJobUserById} from "@/api/jobUserInfo";
  306. import {getEducationListByJobUserID} from "@/api/education";
  307. import {getExperienceListByJobUserID} from "@/api/experience";
  308. import {getJobHuntListByJobUserID} from "@/api/jobHuntInfo";
  309. import {getSysDictionaryList} from "@/api/system/dictionary";
  310. import {useRoute, useRouter} from "vue-router";
  311. import {onIonViewDidEnter} from "@ionic/vue";
  312. import {arrowBackOutline} from 'ionicons/icons';
  313. import dayjs from "dayjs";
  314. interface FormData{
  315. dataModel:any
  316. }
  317. export default defineComponent({
  318. name: 'UserDetail',
  319. setup() {
  320. const router = useRouter();
  321. const route = useRoute();
  322. const pageParams = reactive({
  323. pageIndex: 1,
  324. pageSize: 10,
  325. total:0,
  326. educationTotal:0,
  327. experienceTotal:0,
  328. jobHuntTotal:0,
  329. jobUserID:''
  330. });
  331. const curTabIndex = ref(1);
  332. const curTitle = ref("求职人员详情");
  333. const loading = ref<boolean>(false);
  334. const formData = reactive<FormData>({
  335. dataModel: {
  336. }
  337. });
  338. const dicHighestDegree = ref([]);
  339. const curUserEducationList = ref<any>([]);
  340. const curUserEducationInfo = ref<any>({});
  341. const curUserExperienceList = ref<any>([]);
  342. const curUserExperienceInfo = ref<any>({});
  343. const curUserJobHuntList = ref<any>([]);
  344. const curUserJobHuntInfo = ref<any>({});
  345. const onBack=()=>{
  346. router.push({path:'./list',query:{reload:1}});
  347. };
  348. const onScroll = (e: any) => {
  349. setTimeout(() => {
  350. e.target.complete();
  351. if (pageParams.total > pageParams.pageIndex * pageParams.pageSize) {
  352. pageParams.pageSize += 10;
  353. loadData(pageParams.jobUserID,route.query.loginUserID);
  354. }
  355. }, 500);
  356. }
  357. const loadData = async (jobUserID:any,loginUserId:any)=>{
  358. loading.value = true;
  359. curTabIndex.value = 1;
  360. curTitle.value ="求职人员详情";
  361. pageParams.jobUserID = jobUserID;
  362. const reqData = await getJobUserById(jobUserID,loginUserId);
  363. formData.dataModel = reqData;
  364. const replaceStr = formData.dataModel.identityNumber.substring(3,15);
  365. formData.dataModel.identityNumberShow = String(formData.dataModel.identityNumber).replace(replaceStr,'************');
  366. console.log("dataModel",formData.dataModel);
  367. dicHighestDegree.value = await getSysDictionaryList("HighestDegree");
  368. const educationResult = await getEducationListByJobUserID(pageParams);
  369. pageParams.educationTotal = educationResult.total;
  370. curUserEducationList.value = educationResult.list;
  371. //console.log("educationList",curUserEducationList.value );
  372. const experienceResult = await getExperienceListByJobUserID(pageParams);
  373. pageParams.experienceTotal = experienceResult.total;
  374. curUserExperienceList.value = experienceResult.list;
  375. //console.log("experienceList",curUserExperienceList.value);
  376. const jobHuntResult = await getJobHuntListByJobUserID(pageParams);
  377. pageParams.jobHuntTotal = jobHuntResult.toatal;
  378. curUserJobHuntList.value = jobHuntResult.list;
  379. //console.log("jobHuntList",curUserJobHuntList.value);
  380. loading.value = false;
  381. };
  382. const onTabChange = (tabIndex:number)=>{
  383. if(tabIndex!=curTabIndex.value){
  384. pageParams.pageSize = 10;
  385. }
  386. curTabIndex.value = tabIndex;
  387. switch (tabIndex){
  388. default:
  389. case 1:
  390. curTitle.value ="求职人员详情";
  391. break;
  392. case 2:
  393. curTitle.value ="教育经历详情";
  394. pageParams.total = pageParams.educationTotal;
  395. break;
  396. case 3:
  397. curTitle.value ="工作经验详情";
  398. pageParams.total = pageParams.experienceTotal;
  399. break;
  400. case 4:
  401. curTitle.value ="求职意向详情";
  402. pageParams.total = pageParams.jobHuntTotal;
  403. break;
  404. }
  405. }
  406. const onEducationEdit = (curEducationID:any)=>{
  407. curTabIndex.value = 2.5;
  408. //console.log("dicHighestDegree",dicHighestDegree.value);
  409. (curUserEducationList.value as any[]).map(item=>{
  410. if(item.educationID == curEducationID){
  411. curUserEducationInfo.value = item;
  412. (dicHighestDegree.value as any[]).map(curItem=>{
  413. if(curItem.value == item.cultureRank){
  414. curUserEducationInfo.value.cultureRankName = curItem.name;
  415. }
  416. })
  417. //console.log("curUserEducationInfo",curUserEducationInfo.value);
  418. }
  419. })
  420. }
  421. const onExperienceEdit = (curExperienceID:any)=>{
  422. curTabIndex.value = 3.5;
  423. (curUserExperienceList.value as any[]).map(item=>{
  424. if(item.experienceID == curExperienceID){
  425. curUserExperienceInfo.value = item;
  426. //console.log("curUserExperienceInfo",curUserExperienceInfo.value);
  427. }
  428. })
  429. }
  430. const onJobHuntEdit = (curJobHuntID:any)=>{
  431. curTabIndex.value = 4.5;
  432. (curUserJobHuntList.value as any[]).map(item=>{
  433. if(item.jobHuntID == curJobHuntID){
  434. curUserJobHuntInfo.value = item;
  435. //console.log("curUserJobHuntInfo",curUserJobHuntInfo.value);
  436. }
  437. })
  438. }
  439. const reload = (jobUserID:any,loginUserID:any) => {
  440. loadData(jobUserID,loginUserID);
  441. };
  442. onIonViewDidEnter(() => {
  443. if (route.query.reload) {
  444. reload(route.query.id,route.query.loginUserID)
  445. }
  446. });
  447. return {
  448. ...toRefs(formData),
  449. arrowBackOutline,
  450. route,
  451. router,
  452. curTabIndex,
  453. curTitle,
  454. pageParams,
  455. curUserEducationList,
  456. curUserEducationInfo,
  457. curUserExperienceList,
  458. curUserExperienceInfo,
  459. curUserJobHuntList,
  460. curUserJobHuntInfo,
  461. loading,
  462. onScroll,
  463. onTabChange,
  464. onEducationEdit,
  465. onExperienceEdit,
  466. onJobHuntEdit,
  467. onBack,
  468. loadData,
  469. dayjs,
  470. }
  471. }
  472. });
  473. </script>
  474. <style lang="less">
  475. .active{
  476. position: relative;
  477. top:6px;
  478. border-bottom: 4px solid #1a65eb;
  479. color:#1a65eb;
  480. padding-bottom: 2px;
  481. }
  482. .passive{
  483. position: relative;
  484. top:6px;
  485. color:black;
  486. padding-bottom: 2px;
  487. }
  488. .tab-item{
  489. height: 35px;
  490. width: 25%;
  491. float:left;
  492. text-align: center;
  493. border:none;
  494. }
  495. #educationList,#experienceList,#jobHuntList {
  496. margin: 40px 10px 10px 10px;
  497. background-color: white !important;
  498. .ion-item {
  499. margin-top: 10px;
  500. font-size: 14px;
  501. border-bottom: 1px solid rgb(242, 242, 245);
  502. p {
  503. font-size: 12px;
  504. }
  505. }
  506. }
  507. ion-item {
  508. --border-width: 0;
  509. --border-style: none;
  510. ion-label, ion-input, ion-select, ion-datetime-button {
  511. font-size: 14px !important;
  512. }
  513. }
  514. .stepFlex {
  515. margin: 0;
  516. display: flex;
  517. width: 100%;
  518. .stepFlex-item {
  519. position: relative;
  520. flex: 1;
  521. text-align: center;
  522. margin-top: -10px;
  523. .stepFlex-item-label {
  524. padding-top: 60px;
  525. font-size: 14px;
  526. .stepFlex-item-label-title {
  527. margin-top: 30px;
  528. }
  529. .stepFlex-item-label-desc {
  530. margin-top: 5px;
  531. color: #b9b9bd;
  532. }
  533. }
  534. }
  535. .greenCircle {
  536. top: calc(50% - 15px);
  537. left: calc(50% - 4px);
  538. position: absolute;
  539. z-index: 2;
  540. width: 10px;
  541. height: 10px;
  542. border-radius: 50%;
  543. background-color: #31A2FE;
  544. }
  545. .now {
  546. top: calc(50% - 18px);
  547. left: calc(50% - 8px);
  548. position: absolute;
  549. z-index: 3;
  550. width: 16px;
  551. height: 16px;
  552. border-radius: 50%;
  553. background-color: #31A2FE;
  554. border: 4px solid #c5e8f9;
  555. }
  556. .grayCircle {
  557. top: calc(50% - 15px);
  558. left: calc(50% - 4px);
  559. position: absolute;
  560. z-index: 2;
  561. width: 10px;
  562. height: 10px;
  563. border-radius: 50%;
  564. background-color: #ccc;
  565. }
  566. .greenLine {
  567. width: 100%;
  568. top: calc(50% - 11px);
  569. left: calc(50% - 2px);
  570. height: 2px;
  571. background-color: #31A2FE;
  572. position: absolute;
  573. }
  574. .grayLine {
  575. height: 0;
  576. border: 1px dashed #ccc;
  577. width: 100%;
  578. top: calc(50% - 11px);
  579. left: calc(50% - 2px);
  580. position: absolute;
  581. }
  582. }
  583. </style>