index.vue 42 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537
  1. <template>
  2. <div class="signin-container register-container" style="height: calc(100%)">
  3. <top-color v-show="false"></top-color>
  4. <div class="signin-box register-box">
  5. <!--注册-->
  6. <div v-if="!loginFlag" class="register-center">
  7. <div class="register-title">
  8. <span
  9. style="
  10. font-size: 18px;
  11. font-weight: bold;
  12. color: rgba(51, 51, 51, 1);
  13. "
  14. >{{ $t('login.zhuc') }}</span
  15. >
  16. <span v-if="registerFlag"
  17. >{{ $t('login.existingAccounts') + '?'
  18. }}<span
  19. @click="returnLogin"
  20. style="cursor: pointer; color: #1d6ced; font-weight: 400"
  21. >{{ $t('login.clickLogin') }}</span
  22. ></span
  23. >
  24. </div>
  25. <el-form
  26. v-if="registerFlag"
  27. label-position="top"
  28. class="register-form"
  29. ref="registerForm"
  30. :model="registerForm"
  31. :rules="registerFormRules"
  32. auto-complete="on"
  33. >
  34. <!-- 联系人/手机号 -->
  35. <div style="display: flex; justify-content: center">
  36. <el-form-item prop="linkmanName" :label="$t('login.register04')">
  37. <el-input
  38. v-model="registerForm.linkmanName"
  39. maxlength="20"
  40. :placeholder="$t('login.registerVerif04')"
  41. />
  42. </el-form-item>
  43. <el-form-item
  44. prop="linkmanPhone"
  45. :label="$t('login.register05')"
  46. style="margin-left: 20px"
  47. >
  48. <el-input
  49. v-model="registerForm.linkmanPhone"
  50. maxlength="20"
  51. :placeholder="$t('login.registerVerif05')"
  52. />
  53. </el-form-item>
  54. </div>
  55. <!-- 密码 -->
  56. <el-form-item prop="password" :label="$t('login.register06')">
  57. <el-input
  58. v-model="registerForm.password"
  59. type="password"
  60. :placeholder="$t('login.verification01')"
  61. />
  62. </el-form-item>
  63. <!-- 确认密码 -->
  64. <el-form-item prop="confirmPassword" :label="$t('login.register07')">
  65. <el-input
  66. v-model="registerForm.confirmPassword"
  67. type="password"
  68. :placeholder="$t('login.verification01')"
  69. />
  70. </el-form-item>
  71. <!-- 验证码 -->
  72. <el-form-item prop="veriCode" :label="$t('login.register08')">
  73. <div style="display: flex; justify-content: space-between">
  74. <el-input
  75. v-model="registerForm.veriCode"
  76. :disabled="disabledFlag"
  77. class="code_style"
  78. :placeholder="$t('login.registerVerif08')"
  79. />
  80. <div>
  81. <ws-button
  82. v-show="verification"
  83. type="primary"
  84. @click="toSend"
  85. >{{ $t('login.sendVerification') }}</ws-button
  86. >
  87. <ws-button v-show="!verification" class="retry" disabled
  88. >{{ $t('login.retry') }}({{ count }})s</ws-button
  89. >
  90. </div>
  91. </div>
  92. </el-form-item>
  93. <!-- 注册/取消按钮 -->
  94. <div style="display: flex; justify-content: space-between">
  95. <div style="width: 30%">
  96. <el-button
  97. :loading="loading"
  98. style="width: 100%"
  99. @click.native.prevent="handleCancel"
  100. >{{ $t('button.cancel') }}</el-button
  101. >
  102. </div>
  103. <div style="width: 67%">
  104. <el-button
  105. :loading="registerLoading"
  106. type="primary"
  107. style="width: 100%"
  108. @click.native.prevent="handleRegister"
  109. >{{ $t('login.register') }}</el-button
  110. >
  111. </div>
  112. </div>
  113. <!-- 描述 -->
  114. <div class="form-tip">
  115. {{ $t('login.registerTip') }}
  116. </div>
  117. </el-form>
  118. <!-- 注册完成的页面 -->
  119. <div v-if="!registerFlag" class="register-form">
  120. <div
  121. style="
  122. display: flex;
  123. justify-content: center;
  124. align-items: center;
  125. margin: 80px 0 40px;
  126. "
  127. >
  128. <i
  129. class="iconfont iconregisterOky"
  130. style="color: #1d6ced; font-size: 40px"
  131. />
  132. <span class="registerSuccess">
  133. {{ $t('login.registerSuccess') }}</span
  134. >
  135. </div>
  136. <p>{{ $t('login.PromptSuccessfulRegistration') }}</p>
  137. <el-button
  138. :loading="loading"
  139. class="registration-completed"
  140. @click.native.prevent="returnToLogin"
  141. >{{ $t('login.complete') }}</el-button
  142. >
  143. </div>
  144. </div>
  145. <!--登录-->
  146. <div class="flex" v-if="loginFlag">
  147. <div>
  148. <img
  149. style="width: 591px"
  150. src="../../../public/img/transport.png"
  151. alt=""
  152. />
  153. </div>
  154. <!-- 登录框主体 -->
  155. <div class="login-box">
  156. <div class="login-head">
  157. <div class="logo" />
  158. </div>
  159. <div class="login-body">
  160. <!-- 快捷登录
  161. <el-form
  162. ref="loginForm2"
  163. class="fastLoginForm"
  164. :model="queryLoginForm"
  165. :rules="queryRules"
  166. auto-complete="on"
  167. hide-required-asterisk=true
  168. label-position="left"
  169. size="medium">
  170. <el-form-item prop="mobilePhone"
  171. class="userCellPhone" label='+86'>
  172. <el-input v-model="queryLoginForm.mobilePhone"
  173. :placeholder="$t('login.select03')" />
  174. </el-form-item>
  175. <el-form-item prop="veriCode"
  176. class="veriCode">
  177. <div>
  178. <el-input v-model="queryLoginForm.veriCode"
  179. :placeholder="$t('login.select04')" />
  180. </div>
  181. <div>
  182. <el-button style="width: 30%;border-radius: 20px;"
  183. v-if="showVerification"
  184. type="primary"
  185. @click="fastSendVerification">{{ $t('login.sendVerification') }}</el-button>
  186. <el-button style="width: 30%;border-radius: 20px;"
  187. v-if="!showVerification"
  188. disabled>{{ $t('login.retry') }}({{ count }})s</el-button>
  189. </div>
  190. </el-form-item>
  191. <el-button :loading="loading"
  192. type="primary"
  193. class="phone-signIn"
  194. @click.native.prevent="handleFastLogin">{{ $t('login.login') }}</el-button>
  195. </el-form> -->
  196. <ul>
  197. <li
  198. @click="
  199. tabsOne = false
  200. $refs['loginForm2'].resetFields()
  201. "
  202. :class="{ selected: !tabsOne }"
  203. >
  204. {{ $t('login.fastLogin') }}
  205. </li>
  206. <li
  207. @click="
  208. tabsOne = true
  209. $refs['loginForm'].resetFields()
  210. "
  211. :class="{ selected: tabsOne }"
  212. >
  213. {{ $t('login.noLogin') }}
  214. </li>
  215. </ul>
  216. <el-form
  217. v-show="tabsOne"
  218. ref="loginForm"
  219. :model="loginForm"
  220. :rules="getFormRules"
  221. auto-complete="on"
  222. label-position="left"
  223. >
  224. <el-form-item prop="companyName">
  225. <el-input
  226. v-model="loginForm.companyName"
  227. :placeholder="$t('login.verification08')"
  228. />
  229. </el-form-item>
  230. <el-form-item prop="username">
  231. <el-input
  232. ref="username"
  233. v-model="loginForm.username"
  234. :placeholder="$t('login.select01')"
  235. name="username"
  236. type="text"
  237. auto-complete="on"
  238. />
  239. </el-form-item>
  240. <el-form-item prop="password" style="margin-bottom: 20px">
  241. <el-input
  242. :key="passwordType"
  243. ref="password"
  244. v-model="loginForm.password"
  245. :type="passwordType"
  246. :placeholder="$t('login.select02')"
  247. name="password"
  248. auto-complete="on"
  249. @keyup.enter.native="handleLogin"
  250. />
  251. <span class="show-pwd" @click="showPwd">
  252. <i
  253. class="iconfont"
  254. :class="
  255. passwordType === 'password'
  256. ? 'iconbukejian'
  257. : 'iconkejian'
  258. "
  259. />
  260. </span>
  261. </el-form-item>
  262. <el-row>
  263. <div class="remember-information">
  264. <el-checkbox v-model="rememberMe" class="fl">
  265. <span>{{
  266. $t('login.rememberPwd')
  267. }}</span>
  268. </el-checkbox>
  269. <div class="fr pointer forget-pwd">
  270. <LangSelectText />
  271. <span style="margin: 0 5px">|</span>
  272. <span @click="forgetPassword">{{
  273. $t('login.forgetPwd')
  274. }}</span>
  275. </div>
  276. </div>
  277. </el-row>
  278. <div class="sign_up">
  279. <el-button
  280. :loading="loading"
  281. type="primary"
  282. class="signIn-buttom"
  283. @click.native.prevent="handleLogin"
  284. >{{ $t('login.login') }}</el-button
  285. >
  286. <span class="register-buttom" @click="toRegister">{{
  287. $t('login.register')
  288. }}</span>
  289. </div>
  290. </el-form>
  291. <!-- 快捷登录 -->
  292. <el-form
  293. v-show="!tabsOne"
  294. ref="loginForm2"
  295. class="fastLoginForm"
  296. :model="queryLoginForm"
  297. :rules="queryRules"
  298. auto-complete="on"
  299. label-position="left"
  300. >
  301. <el-form-item prop="mobilePhone" class="userCellPhone">
  302. <el-input
  303. v-model="queryLoginForm.mobilePhone"
  304. :placeholder="$t('login.select03')"
  305. />
  306. </el-form-item>
  307. <el-form-item prop="veriCode" class="veriCode">
  308. <div>
  309. <el-input
  310. v-model="queryLoginForm.veriCode"
  311. :placeholder="$t('login.select04')"
  312. />
  313. </div>
  314. <div>
  315. <el-button
  316. style="width: 30%; border-radius: 20px"
  317. v-if="showVerification"
  318. type="primary"
  319. @click="fastSendVerification"
  320. >{{ $t('login.sendVerification') }}</el-button
  321. >
  322. <el-button
  323. style="width: 30%; border-radius: 20px"
  324. v-if="!showVerification"
  325. disabled
  326. >{{ $t('login.retry') }}({{ count }})s</el-button
  327. >
  328. </div>
  329. </el-form-item>
  330. <el-button
  331. :loading="loading"
  332. type="primary"
  333. class="phone-signIn"
  334. @click.native.prevent="handleFastLogin"
  335. >{{ $t('login.login') }}</el-button
  336. >
  337. </el-form>
  338. <div class="make-easier">
  339. <p>{{ $t('common.makeEasier') }}</p>
  340. <!-- <BaseLink @click="goBackstage" :underline="false" type="primary">
  341. &nbsp;&nbsp;{{ $t('common.goBackstage') }}
  342. </BaseLink> -->
  343. </div>
  344. </div>
  345. </div>
  346. </div>
  347. </div>
  348. <!--忘记密码消息弹框盒子-->
  349. <el-dialog
  350. class="dialog"
  351. :title="$t('login.retrievePassword')"
  352. @close="resetForm"
  353. :visible.sync="messageBox"
  354. width="30%"
  355. center
  356. >
  357. <!--弹框主体-->
  358. <el-form
  359. ref="forgetDate"
  360. :model="forgetDate"
  361. :rules="getforgetRules"
  362. label-width="100px"
  363. >
  364. <el-form-item
  365. :label="$t('login.phoneNumber') + $t('common.colon')"
  366. prop="userCellPhone"
  367. class="userCellPhone"
  368. >
  369. <div style="display: flex">
  370. <el-input
  371. v-model="forgetDate.userCellPhone"
  372. :placeholder="$t('login.select03')"
  373. />
  374. <div class="time-button ml10">
  375. <el-button
  376. v-show="showVerification"
  377. type="primary"
  378. @click="sendVerification"
  379. >{{ $t('login.sendVerification') }}</el-button
  380. >
  381. <el-button v-show="!showVerification" class="retry" disabled
  382. >{{ $t('login.retry') }}({{ count }})s</el-button
  383. >
  384. </div>
  385. </div>
  386. </el-form-item>
  387. <el-form-item
  388. :label="$t('login.verificationCode') + $t('common.colon')"
  389. prop="veriCode"
  390. >
  391. <el-input
  392. v-model="forgetDate.veriCode"
  393. :placeholder="$t('login.select04')"
  394. />
  395. </el-form-item>
  396. <el-form-item
  397. :label="$t('login.newPassword') + $t('common.colon')"
  398. prop="password"
  399. >
  400. <el-input
  401. v-model="forgetDate.password"
  402. :placeholder="$t('login.select05')"
  403. />
  404. </el-form-item>
  405. <el-form-item
  406. :label="$t('login.confirmPassword') + $t('common.colon')"
  407. prop="againPassword"
  408. >
  409. <el-input
  410. v-model="forgetDate.againPassword"
  411. :placeholder="$t('login.select06')"
  412. />
  413. </el-form-item>
  414. </el-form>
  415. <!--弹框底部-->
  416. <span slot="footer" class="dialog-footer">
  417. <el-button @click="resetForm">{{ $t('showMessage.cancel') }}</el-button>
  418. <el-button type="primary" @click="submitForm">{{
  419. $t('showMessage.saveButton')
  420. }}</el-button>
  421. </span>
  422. </el-dialog>
  423. <!-- 试用到期/停用 -->
  424. <trialDialog
  425. v-if="trialDialog"
  426. :phone="phone"
  427. :trialDialog="trialDialog"
  428. @close="trialDialogClose"
  429. ></trialDialog>
  430. <stopDialog
  431. v-if="stopDialog"
  432. :phone="phone"
  433. :stopDialog="stopDialog"
  434. @close="stopDialogClose"
  435. ></stopDialog>
  436. <verifyDialog
  437. v-if="verifyDialog"
  438. :phone="phone"
  439. :verifyDialog="verifyDialog"
  440. @close="verifyDialogClose"
  441. ></verifyDialog>
  442. <agreementDialog v-if="dialogAgreement" @close="agreementClose">
  443. </agreementDialog>
  444. <!-- 服务协议 -->
  445. <el-dialog
  446. :visible.sync="dialogService"
  447. width="35%"
  448. custom-class="service"
  449. :showClose="true"
  450. :before-close="serviceClose"
  451. :closeOnClickModal="true"
  452. :appendToBody="true"
  453. >
  454. <serviceDialog @close="serviceClose"></serviceDialog>
  455. </el-dialog>
  456. </div>
  457. </template>
  458. <script>
  459. import Cookies from 'js-cookie'
  460. import zhJs from '../../lang/zh'
  461. import {
  462. validPassword,
  463. validUserCellPhone,
  464. validUserVeriCode,
  465. } from '@/utils/validate'
  466. // 客服
  467. import serviceDialog from './components/serviceDialog'
  468. // 服务协议
  469. import agreementDialog from './components/agreementDialog'
  470. // 试用到期
  471. import trialDialog from './components/trialDialog'
  472. // 停用
  473. import stopDialog from './components/stopDialog'
  474. //待核实
  475. import verifyDialog from './components/verifyDialog'
  476. import { register } from '@/model/signIn/index'
  477. import {
  478. retrievePassword,
  479. sendVeriCode,
  480. sendRegisterCode,
  481. getTenantInfoByUser,
  482. } from '@/model/signIn/index'
  483. import { EventBus } from 'base-core-lib'
  484. import LangSelectText from '@/components/LangSelectText'
  485. import topColor from '@/layout/index/top/top-color'
  486. import { mapActions, mapGetters } from 'vuex'
  487. export default {
  488. name: 'Login',
  489. filters: {
  490. phoneFilter(val) {
  491. const reg = /^(.{3}).*(.{4})$/
  492. return val.replace(reg, '$1****$2')
  493. },
  494. },
  495. components: {
  496. LangSelectText,
  497. trialDialog,
  498. stopDialog,
  499. verifyDialog,
  500. agreementDialog,
  501. serviceDialog,
  502. topColor,
  503. },
  504. data() {
  505. const validPasswordRule = (rule, value, callback) => {
  506. if (!validPassword(value)) {
  507. callback(new Error(this.$t('login.verification01')))
  508. } else {
  509. callback()
  510. }
  511. }
  512. const validPasswordRule2 = (rule, value, callback) => {
  513. if (value === '') {
  514. callback(new Error(this.$t('login.verification02')))
  515. } else if (value !== this.forgetDate.password) {
  516. callback(new Error(this.$t('login.verification03')))
  517. } else {
  518. callback()
  519. }
  520. }
  521. const validUserVeriCodeRule = (rule, value, callback) => {
  522. if (!validUserVeriCode(value)) {
  523. callback(new Error(this.$t('login.verification04')))
  524. } else {
  525. callback()
  526. }
  527. }
  528. const validUserCellPhoneRule = (rule, value, callback) => {
  529. if (!validUserCellPhone(value)) {
  530. callback(new Error(this.$t('login.verification05')))
  531. } else {
  532. callback()
  533. }
  534. }
  535. return {
  536. dialogService: false, //客服
  537. dialogAgreement: false, //服务协议
  538. phone: '',
  539. verifyDialog: false,
  540. stopDialog: false,
  541. trialDialog: false, //试用到期/试用未到期
  542. registerLoading: false,
  543. verification: true,
  544. disabledFlag: true,
  545. loginFlag: true,
  546. registerFlag: true,
  547. registerFormRules: {
  548. tenantName: [
  549. {
  550. required: true,
  551. message: this.$t('login.registerVerif01'),
  552. trigger: 'blur',
  553. },
  554. ],
  555. tenantEnName: [
  556. {
  557. required: true,
  558. message: this.$t('login.registerVerif02'),
  559. trigger: 'blur',
  560. },
  561. ],
  562. compSimpleNameEn: [
  563. {
  564. required: true,
  565. message: this.$t('login.registerVerif03'),
  566. trigger: 'blur',
  567. },
  568. ],
  569. linkmanName: [
  570. {
  571. required: true,
  572. message: this.$t('login.registerVerif04'),
  573. trigger: 'blur',
  574. },
  575. ],
  576. linkmanPhone: [
  577. {
  578. required: true,
  579. trigger: 'blur',
  580. validator: validUserCellPhoneRule.bind(this),
  581. },
  582. ],
  583. password: [
  584. {
  585. required: true,
  586. trigger: 'blur',
  587. validator: validPasswordRule,
  588. // validator: validPasswordRule4.bind(this)
  589. },
  590. ],
  591. confirmPassword: [
  592. {
  593. required: true,
  594. trigger: 'blur',
  595. validator: validPasswordRule,
  596. // validator: validPasswordRule3.bind(this)
  597. },
  598. ],
  599. veriCode: [
  600. {
  601. required: true,
  602. trigger: 'blur',
  603. validator: validUserVeriCodeRule.bind(this),
  604. },
  605. ],
  606. },
  607. // 注册表单
  608. registerForm: {
  609. tenantName: '',
  610. tenantEnName: '',
  611. compSimpleNameEn: '',
  612. tenantSource: '1',
  613. linkmanName: '',
  614. linkmanPhone: '',
  615. password: '',
  616. confirmPassword: '',
  617. veriCode: '',
  618. },
  619. tabsOne: true,
  620. zhArray: [], //国际化数组
  621. timer: null,
  622. loading: false,
  623. rememberMe: true,
  624. showDialog: false,
  625. showVerification: true,
  626. messageBox: false,
  627. passwordType: 'password',
  628. count: '',
  629. userCellPhone: '',
  630. userKind: '',
  631. forgetDate: {
  632. userCellPhone: '',
  633. password: '',
  634. againPassword: '',
  635. veriCode: '',
  636. },
  637. loginForm: {
  638. username: '',
  639. password: '',
  640. companyName: '', // 公司域名
  641. },
  642. queryLoginForm: {
  643. mobilePhone: '',
  644. veriCode: '',
  645. },
  646. queryRules: {
  647. mobilePhone: [
  648. {
  649. required: true,
  650. validator: validUserCellPhoneRule,
  651. trigger: 'change',
  652. },
  653. ],
  654. veriCode: [
  655. {
  656. required: true,
  657. trigger: 'blur',
  658. validator: validUserVeriCodeRule,
  659. },
  660. ],
  661. },
  662. companyLogoUrl: '',
  663. companyName: '',
  664. getforgetRules: {
  665. userCellPhone: [
  666. {
  667. required: true,
  668. trigger: 'blur',
  669. validator: validUserCellPhoneRule,
  670. },
  671. ],
  672. veriCode: [
  673. {
  674. required: true,
  675. trigger: 'blur',
  676. validator: validUserVeriCodeRule,
  677. },
  678. ],
  679. password: [
  680. {
  681. required: true,
  682. trigger: 'blur',
  683. validator: validPasswordRule,
  684. },
  685. ],
  686. againPassword: [
  687. {
  688. required: true,
  689. trigger: 'blur',
  690. validator: validPasswordRule2,
  691. },
  692. ],
  693. },
  694. getFormRules: {
  695. username: [
  696. {
  697. required: true,
  698. message: this.$t('login.verification06'),
  699. trigger: 'change',
  700. },
  701. ],
  702. password: [
  703. {
  704. required: true,
  705. trigger: 'change',
  706. validator: validPasswordRule,
  707. // validator: validPasswordRule4.bind(this)
  708. },
  709. ],
  710. companyName: {
  711. required: true,
  712. message: this.$t('login.verification08'),
  713. trigger: 'change',
  714. },
  715. },
  716. }
  717. },
  718. computed: {
  719. ...mapGetters(['systemVersion']),
  720. },
  721. mounted() {
  722. this.loginForm.companyName = Cookies.get('ws_login_companyShortName')
  723. ? Cookies.get('ws_login_companyShortName')
  724. : ''
  725. this.loginForm.username = Cookies.get('ws_login_account')
  726. ? Cookies.get('ws_login_account')
  727. : ''
  728. this.loginForm.password = Cookies.get('ws_login_pwd')
  729. ? Cookies.get('ws_login_pwd')
  730. : ''
  731. this.rememberMe = Cookies.get('ws_login_rememberMe') === '1'
  732. sessionStorage.setItem('ws_login_type', 2)
  733. const arr = JSON.parse(JSON.stringify(zhJs))
  734. this.loop(arr, null)
  735. if (this.loginForm.username === '') {
  736. this.$refs.username.focus()
  737. } else if (this.loginForm.password === '') {
  738. this.$refs.password.focus()
  739. }
  740. },
  741. watch: {
  742. loginFlag(value) {
  743. if (value) {
  744. this.loginForm.domainName = Cookies.get('compSimpleName')
  745. this.loginForm.username = Cookies.get('phone')
  746. }
  747. },
  748. },
  749. methods: {
  750. ...mapActions('user', ['login', 'fastLogin']),
  751. async getTenantUser() {
  752. let newList = {
  753. companyName: this.loginForm.companyName,
  754. username: this.loginForm.username,
  755. password: this.loginForm.password,
  756. }
  757. const response = await getTenantInfoByUser(newList).toPromise()
  758. return response
  759. },
  760. serviceClose() {
  761. this.dialogService = false
  762. },
  763. agreementClose() {
  764. this.dialogAgreement = false
  765. },
  766. verifyDialogClose() {
  767. this.verifyDialog = false
  768. },
  769. // 停用
  770. stopDialogClose() {
  771. this.stopDialog = false
  772. },
  773. // 试用
  774. trialDialogClose() {
  775. this.trialDialog = false
  776. },
  777. goHome() {
  778. window.open('http://www.yinghaikeji.com', '_blank')
  779. },
  780. goRecordNum() {
  781. window.open('http://beian.miit.gov.cn', '_blank')
  782. },
  783. returnLogin() {
  784. this.$nextTick(function () {
  785. this.$refs.registerForm.resetFields()
  786. })
  787. clearInterval(this.timer)
  788. this.loginFlag = true
  789. },
  790. // 发送验证码
  791. toSend() {
  792. if (this.registerForm.linkmanPhone) {
  793. if (validUserCellPhone(this.registerForm.linkmanPhone)) {
  794. this.disabledFlag = false
  795. clearInterval(this.timer)
  796. this.timer = null
  797. const TIME_COUNT = 60
  798. if (!this.timer) {
  799. this.count = TIME_COUNT
  800. this.verification = false
  801. let data = {
  802. mobilePhone: this.registerForm.linkmanPhone,
  803. }
  804. sendRegisterCode(data)
  805. .toPromise()
  806. .then((res) => {
  807. this.timer = setInterval(() => {
  808. if (this.count > 0 && this.count <= TIME_COUNT) {
  809. this.count--
  810. } else {
  811. this.verification = true
  812. clearInterval(this.timer)
  813. this.timer = null
  814. }
  815. }, 1000)
  816. })
  817. .catch((err) => {
  818. this.verification = true
  819. })
  820. }
  821. } else {
  822. EventBus.$emit('error', this.$t('login.registerVerif09'))
  823. }
  824. } else {
  825. EventBus.$emit('error', this.$t('login.registerVerif05'))
  826. }
  827. },
  828. // 取消
  829. handleCancel() {
  830. clearInterval(this.timer)
  831. this.$nextTick(function () {
  832. this.$refs.registerForm.resetFields()
  833. })
  834. this.loginFlag = true
  835. },
  836. // 注册
  837. handleRegister() {
  838. this.$refs.registerForm.validate((valid) => {
  839. if (valid) {
  840. this.registerLoading = true
  841. register({
  842. ...this.registerForm,
  843. tenantName: this.registerForm.compSimpleNameEn,
  844. tenantEnName: this.registerForm.compSimpleNameEn,
  845. })
  846. .toPromise()
  847. .then((res) => {
  848. Cookies.set('compSimpleName', this.registerForm.compSimpleNameEn)
  849. Cookies.set('phone', this.registerForm.linkmanPhone)
  850. this.registerFlag = false
  851. this.registerLoading = false
  852. })
  853. .catch((error) => {
  854. this.registerLoading = false
  855. })
  856. } else {
  857. return false
  858. }
  859. })
  860. },
  861. toManage() {
  862. window.location.href = this.$store.getters.baseInfo.comanyMgrUrl
  863. },
  864. returnToLogin() {
  865. this.loginFlag = true
  866. },
  867. toRegister() {
  868. this.disabledFlag = true
  869. this.verification = true
  870. this.registerFlag = true
  871. this.$nextTick(function () {
  872. this.$refs.registerForm.resetFields()
  873. })
  874. clearInterval(this.timer)
  875. this.loginFlag = false
  876. },
  877. goBackstage() {
  878. // window.location.href = this.$store.getters.baseInfo.comanyMgrUrl
  879. },
  880. /* 忘记密码*/
  881. forgetPassword() {
  882. this.showVerification = true
  883. this.messageBox = true
  884. },
  885. /* 点击取消*/
  886. resetForm() {
  887. this.messageBox = false
  888. this.forgetDate.userCellPhone = ''
  889. this.forgetDate.veriCode = ''
  890. this.forgetDate.password = ''
  891. this.forgetDate.againPassword = ''
  892. this.$refs.forgetDate.resetFields()
  893. },
  894. /* 点击保存*/
  895. submitForm() {
  896. this.$refs.forgetDate.validate((valid) => {
  897. if (valid) {
  898. const data = {
  899. mobilePhone: this.forgetDate.userCellPhone,
  900. veriCode: this.forgetDate.veriCode,
  901. password: this.forgetDate.againPassword,
  902. }
  903. retrievePassword(data)
  904. .toPromise()
  905. .then((response) => {
  906. EventBus.$emit(
  907. 'success',
  908. this.$t('showMessage.modifySuccessfully')
  909. )
  910. this.messageBox = false
  911. })
  912. .catch((error) => {
  913. if (error.code === 'AUTH_004') {
  914. EventBus.$emit('error', this.$t('message.AUTH_004'))
  915. this.forgetDate.veriCode = ''
  916. } else if (error.code === 'AUTH_006') {
  917. EventBus.$emit('error', this.$t('message.AUTH_006'))
  918. this.forgetDate.againPassword = ''
  919. this.forgetDate.password = ''
  920. }
  921. })
  922. } else {
  923. EventBus.$emit('error', this.$t('showMessage.failToSave'))
  924. return false
  925. }
  926. })
  927. },
  928. /* 点击发送验证码*/
  929. sendVerification() {
  930. if (this.forgetDate.userCellPhone === '') {
  931. EventBus.$emit('error', this.$t('login.registerVerif05'))
  932. } else {
  933. clearInterval(this.timer)
  934. this.timer = null
  935. const TIME_COUNT = 60
  936. if (!this.timer) {
  937. this.count = TIME_COUNT
  938. this.showVerification = false
  939. this.postVerification()
  940. this.timer = setInterval(() => {
  941. if (this.count > 0 && this.count <= TIME_COUNT) {
  942. this.count--
  943. } else {
  944. this.showVerification = true
  945. clearInterval(this.timer)
  946. this.timer = null
  947. }
  948. }, 1000)
  949. }
  950. }
  951. },
  952. /* 发送验证码*/
  953. postVerification() {
  954. sendVeriCode({ mobilePhone: this.forgetDate.userCellPhone })
  955. .toPromise()
  956. .then((response) => {})
  957. },
  958. /* 点击发送验证码*/
  959. fastSendVerification() {
  960. if (!this.queryLoginForm.mobilePhone) {
  961. EventBus.$emit('error', this.$t('login.verification05'))
  962. return
  963. }
  964. clearInterval(this.timer)
  965. this.timer = null
  966. const TIME_COUNT = 60
  967. if (!this.timer) {
  968. this.count = TIME_COUNT
  969. this.showVerification = false
  970. this.fastPostVerification()
  971. this.timer = setInterval(() => {
  972. if (this.count > 0 && this.count <= TIME_COUNT) {
  973. this.count--
  974. } else {
  975. this.showVerification = true
  976. clearInterval(this.timer)
  977. this.timer = null
  978. }
  979. }, 1000)
  980. }
  981. },
  982. /* 快捷登录发送验证码*/
  983. fastPostVerification() {
  984. sendVeriCode({ mobilePhone: this.queryLoginForm.mobilePhone })
  985. .toPromise()
  986. .then((response) => {})
  987. // .catch(error => {
  988. // if (error.code === 'AUTH_003') {
  989. // EventBus.$emit('error', this.$t('message.AUTH_003'))
  990. // }
  991. // })
  992. },
  993. showPwd() {
  994. if (this.passwordType === 'password') {
  995. this.passwordType = ''
  996. } else {
  997. this.passwordType = 'password'
  998. }
  999. this.$nextTick(() => {
  1000. this.$refs.password.focus()
  1001. })
  1002. },
  1003. handleLogin() {
  1004. this.$refs.loginForm.validate(async (valid) => {
  1005. if (valid) {
  1006. const res = await this.login(this.loginForm)
  1007. sessionStorage.setItem('ws_login_type', 2)
  1008. Cookies.set('ws_login_companyShortName', this.loginForm.companyName, {
  1009. expires: 365,
  1010. })
  1011. Cookies.set('ws_login_account', this.loginForm.username, {
  1012. expires: 365,
  1013. })
  1014. if (this.rememberMe) {
  1015. Cookies.set('ws_login_pwd', this.loginForm.password, {
  1016. expires: 365,
  1017. })
  1018. Cookies.set('ws_login_rememberMe', 1, { expires: 365 })
  1019. } else {
  1020. Cookies.remove('ws_login_companyShortName')
  1021. Cookies.remove('ws_login_account')
  1022. Cookies.remove('ws_login_pwd')
  1023. Cookies.set('ws_login_rememberMe', 0, { expires: 365 })
  1024. }
  1025. const redirect = this.$route.query.redirect
  1026. if (redirect) {
  1027. this.$router.push(redirect)
  1028. } else {
  1029. this.$router.push('/')
  1030. }
  1031. const data = await this.getTenantUser()
  1032. sessionStorage.setItem(
  1033. 'ws_login_getTenantInfoByUser',
  1034. JSON.stringify({ ...data, loginInfo: res })
  1035. )
  1036. sessionStorage.setItem(
  1037. 'ws_login_accountId',
  1038. JSON.stringify(res.accountId)
  1039. )
  1040. } else {
  1041. return false
  1042. }
  1043. })
  1044. },
  1045. loop(arr, father) {
  1046. for (let i in arr) {
  1047. if (typeof arr[i] == 'object') {
  1048. if (father) {
  1049. this.loop(arr[i], father + '.' + i)
  1050. } else {
  1051. this.loop(arr[i], i)
  1052. }
  1053. } else {
  1054. let obj = {
  1055. key: father + '.' + i,
  1056. value: arr[i],
  1057. }
  1058. this.zhArray.push(obj)
  1059. }
  1060. }
  1061. sessionStorage.setItem(
  1062. 'InterNational_zh_array',
  1063. JSON.stringify(this.zhArray)
  1064. )
  1065. },
  1066. // 快捷登录
  1067. handleFastLogin() {
  1068. this.$refs['loginForm2'].validate(async (valid) => {
  1069. if (valid) {
  1070. const res = await this.fastLogin(this.queryLoginForm)
  1071. sessionStorage.setItem('ws_login_type', 2)
  1072. const redirect = this.$route.query.redirect
  1073. if (redirect) {
  1074. this.$router.push(redirect)
  1075. } else {
  1076. this.$router.push('/')
  1077. }
  1078. const { data } = await this.getTenantUser()
  1079. sessionStorage.setItem(
  1080. 'ws_login_getTenantInfoByUser',
  1081. JSON.stringify({ ...data, loginInfo: res })
  1082. )
  1083. sessionStorage.setItem(
  1084. 'ws_login_accountId',
  1085. JSON.stringify(res.accountId)
  1086. )
  1087. }
  1088. })
  1089. },
  1090. },
  1091. }
  1092. </script>
  1093. <style lang="scss" scoped>
  1094. $svg: #a7a8a9;
  1095. $dark_gray: #889aa4;
  1096. .signin-container {
  1097. display: flex;
  1098. flex-direction: column;
  1099. align-items: center;
  1100. justify-content: center;
  1101. min-height: 100%;
  1102. width: 100%;
  1103. background-repeat: no-repeat;
  1104. background-position: center center;
  1105. background-size: cover;
  1106. overflow: hidden;
  1107. .register-center {
  1108. .register-title {
  1109. padding-bottom: 20px;
  1110. border-bottom: 1px solid #ccc;
  1111. display: flex;
  1112. justify-content: space-between;
  1113. align-items: center;
  1114. }
  1115. .register-form {
  1116. padding: 20px 30px;
  1117. .form-tip {
  1118. margin-top: 20px;
  1119. color: #999999;
  1120. font-size: 12px;
  1121. }
  1122. p {
  1123. font-size: 14px;
  1124. color: #333333;
  1125. padding-bottom: 100px;
  1126. line-height: 24px;
  1127. }
  1128. .registration-completed {
  1129. width: 100%;
  1130. border: 1px solid #1e6ced;
  1131. background-color: #edf4ff;
  1132. color: #1e6ced;
  1133. }
  1134. }
  1135. /deep/
  1136. .el-form-item.is-required:not(.is-no-asterisk)
  1137. > .el-form-item__label:before,
  1138. .el-form-item.is-required:not(.is-no-asterisk)
  1139. .el-form-item__label-wrap
  1140. > .el-form-item__label:before {
  1141. content: '';
  1142. }
  1143. /deep/ .el-form-item__content {
  1144. line-height: 32px;
  1145. }
  1146. /deep/ .el-form-item__error {
  1147. padding: 2px;
  1148. }
  1149. /deep/ .el-form-item__label {
  1150. line-height: 12px;
  1151. }
  1152. /deep/ .el-input__inner {
  1153. height: 34px;
  1154. }
  1155. /deep/ .el-form-item {
  1156. margin-bottom: 20px;
  1157. }
  1158. .code_style {
  1159. /*/deep/ .el-input{*/
  1160. width: 65% !important;
  1161. /*}*/
  1162. }
  1163. max-width: 480px;
  1164. margin: 0 auto;
  1165. width: 100%;
  1166. background-color: #fff;
  1167. padding: 20px;
  1168. border-radius: 8px;
  1169. .login-title {
  1170. font-size: 26px;
  1171. text-align: center;
  1172. padding: 2%;
  1173. color: #666;
  1174. margin-bottom: 10%;
  1175. display: inline-block;
  1176. }
  1177. .remember-information {
  1178. cursor: pointer;
  1179. padding-bottom: 50px;
  1180. .forget-pwd {
  1181. display: inline-block;
  1182. white-space: nowrap;
  1183. color: #999;
  1184. font-size: 12px;
  1185. line-height: 19px;
  1186. }
  1187. }
  1188. .svg-container {
  1189. color: $svg;
  1190. width: 30px;
  1191. position: absolute;
  1192. height: 32px;
  1193. line-height: 32px;
  1194. border-radius: 8px;
  1195. top: 0;
  1196. left: 0;
  1197. z-index: 9;
  1198. }
  1199. .show-pwd {
  1200. position: absolute;
  1201. right: 14px;
  1202. top: 0;
  1203. font-size: 16px;
  1204. color: $dark_gray;
  1205. cursor: pointer;
  1206. user-select: none;
  1207. }
  1208. }
  1209. .login-box {
  1210. width: 420px;
  1211. display: flex;
  1212. flex-direction: column;
  1213. .login-head {
  1214. display: flex;
  1215. flex-direction: column;
  1216. align-items: center;
  1217. color: #fff;
  1218. font-size: 16px;
  1219. .logo {
  1220. background-image: url('../../../public/img/logo.png');
  1221. background-position: center center;
  1222. background-repeat: no-repeat;
  1223. width: 260px;
  1224. height: 68px;
  1225. background-size: 100% 100%;
  1226. }
  1227. & > span {
  1228. text-align: center;
  1229. }
  1230. }
  1231. .login-body {
  1232. display: flex;
  1233. padding: 5px 30px 15px;
  1234. flex-direction: column;
  1235. align-items: center;
  1236. height: 410px;
  1237. z-index: 1000;
  1238. position: relative;
  1239. & > ul {
  1240. color: #fff;
  1241. width: 100%;
  1242. list-style: none;
  1243. display: flex;
  1244. flex-direction: row;
  1245. flex-wrap: nowrap;
  1246. justify-content: center;
  1247. padding: 0;
  1248. margin: 0 0 32px 0;
  1249. li {
  1250. padding: 10px 0px;
  1251. cursor: pointer;
  1252. font-size: 18px;
  1253. &:nth-child(1) {
  1254. margin-right: 40px;
  1255. }
  1256. }
  1257. .selected {
  1258. border-bottom: 2px solid #fff;
  1259. font-weight: 600;
  1260. }
  1261. }
  1262. & > form {
  1263. align-self: center;
  1264. width: 100%;
  1265. /deep/.el-input__inner {
  1266. text-indent: 12px;
  1267. background-color: transparent;
  1268. border-left: none;
  1269. border-top: none;
  1270. border-right: none;
  1271. border-radius: 0;
  1272. border: 1px solid #e5e8ed;
  1273. color: #000;
  1274. padding: 0;
  1275. padding: 5px 10px;
  1276. border-radius: 30px;
  1277. }
  1278. /deep/ .el-input__inner::-webkit-input-placeholder {
  1279. color: #e5e8ed;
  1280. font-weight: bold;
  1281. }
  1282. /deep/.userCellPhone {
  1283. position: relative;
  1284. .el-form-item__label {
  1285. position: absolute;
  1286. top: 12px;
  1287. left: 9px;
  1288. }
  1289. .el-input__inner {
  1290. text-indent: 34px !important;
  1291. }
  1292. }
  1293. }
  1294. & .fastLoginForm {
  1295. margin-top: 38px;
  1296. }
  1297. .qiye {
  1298. background-image: url('../../assets/images/page/login/qiye.png');
  1299. background-repeat: no-repeat;
  1300. background-position: center center;
  1301. background-size: 55%;
  1302. }
  1303. .veriCode {
  1304. position: relative;
  1305. & /deep/.el-form-item__content {
  1306. display: flex;
  1307. flex-direction: row;
  1308. & > div:nth-child(1) {
  1309. width: 100%;
  1310. }
  1311. & > div:nth-child(2) {
  1312. width: 36%;
  1313. margin-left: 15px;
  1314. position: absolute;
  1315. right: 1px;
  1316. & .el-button {
  1317. width: 100% !important;
  1318. background: #fff;
  1319. border: 1px solid #fff;
  1320. color: #7cbe25;
  1321. span {
  1322. border-left: 1px solid #e9ecf0;
  1323. padding: 0 20px;
  1324. }
  1325. }
  1326. }
  1327. }
  1328. }
  1329. .remember-information {
  1330. cursor: pointer;
  1331. padding-bottom: 50px;
  1332. .forget-pwd {
  1333. display: inline-block;
  1334. white-space: nowrap;
  1335. color: #fff;
  1336. font-size: 12px;
  1337. line-height: 19px;
  1338. }
  1339. }
  1340. .svg-container {
  1341. color: #a7a8a9;
  1342. width: 30px;
  1343. position: absolute;
  1344. height: 32px;
  1345. line-height: 32px;
  1346. border-radius: 8px;
  1347. top: 0;
  1348. left: 0;
  1349. z-index: 9;
  1350. text-align: center;
  1351. }
  1352. .show-pwd {
  1353. position: absolute;
  1354. right: 14px;
  1355. top: 0;
  1356. font-size: 16px;
  1357. color: #889aa4;
  1358. cursor: pointer;
  1359. user-select: none;
  1360. }
  1361. .make-easier {
  1362. display: flex;
  1363. color: #fff;
  1364. font-size: 12px;
  1365. text-align: center;
  1366. line-height: 32px;
  1367. p {
  1368. margin: 0;
  1369. }
  1370. span {
  1371. display: block;
  1372. color: #4489f9;
  1373. cursor: pointer;
  1374. font-weight: 600;
  1375. }
  1376. }
  1377. }
  1378. }
  1379. .login-footer {
  1380. text-align: center;
  1381. color: #9a9a9a;
  1382. padding: 2% 0;
  1383. font-size: 12px;
  1384. min-width: 456px;
  1385. & > ul {
  1386. display: flex;
  1387. margin: 0;
  1388. padding: 0;
  1389. width: 100%;
  1390. list-style: none;
  1391. flex-direction: row;
  1392. justify-content: center;
  1393. padding: 0 120px;
  1394. li {
  1395. padding: 0px 20px;
  1396. border-right: 1px solid #9a9a9a;
  1397. // cursor: pointer;
  1398. }
  1399. // TODO:英文还没有设计好先不上
  1400. // li:hover {
  1401. // color: #4489f9;
  1402. // }
  1403. & > li:last-child {
  1404. border-right: none;
  1405. }
  1406. }
  1407. .nav {
  1408. display: flex;
  1409. flex-direction: row;
  1410. justify-content: center;
  1411. }
  1412. .copyright {
  1413. padding: 5px 0;
  1414. }
  1415. .version {
  1416. font-weight: bold;
  1417. padding: 4% 0;
  1418. display: block;
  1419. color: #666;
  1420. font-size: 15px;
  1421. }
  1422. .project-name {
  1423. font-weight: 600;
  1424. font-size: 16px;
  1425. }
  1426. }
  1427. }
  1428. .register-container {
  1429. overflow: auto;
  1430. .register-box {
  1431. margin: 20px 0;
  1432. }
  1433. .signin-box {
  1434. z-index: 100;
  1435. display: flex;
  1436. flex-direction: column;
  1437. justify-content: center;
  1438. }
  1439. }
  1440. .login-box {
  1441. width: 420px;
  1442. margin: 0 auto;
  1443. }
  1444. @-webkit-keyframes animate-cloud {
  1445. from {
  1446. background-position: 600px 100%;
  1447. }
  1448. to {
  1449. background-position: 0 100%;
  1450. }
  1451. }
  1452. @-moz-keyframes animate-cloud {
  1453. from {
  1454. background-position: 600px 100%;
  1455. }
  1456. to {
  1457. background-position: 0 100%;
  1458. }
  1459. }
  1460. @-ms-keyframes animate-cloud {
  1461. from {
  1462. background-position: 600px 100%;
  1463. }
  1464. to {
  1465. background-position: 0 100%;
  1466. }
  1467. }
  1468. @-o-keyframes animate-cloud {
  1469. from {
  1470. background-position: 600px 100%;
  1471. }
  1472. to {
  1473. background-position: 0 100%;
  1474. }
  1475. }
  1476. //新增
  1477. .sign_up {
  1478. text-align: center;
  1479. width: 100%;
  1480. .signIn-buttom {
  1481. width: 75%;
  1482. margin-bottom: 10px;
  1483. border-radius: 20px;
  1484. }
  1485. .register-buttom {
  1486. width: 15%;
  1487. margin: 0 auto;
  1488. color: #fff;
  1489. display: block;
  1490. text-align: center;
  1491. font-size: 12px;
  1492. cursor: pointer;
  1493. }
  1494. }
  1495. .phone-signIn {
  1496. width: 100%;
  1497. border-radius: 20px;
  1498. display: block;
  1499. margin: 0 auto;
  1500. background: #7cbe25;
  1501. color: #fff;
  1502. border: 1px solid #7cbe25;
  1503. padding: 20px !important;
  1504. line-height: 2px;
  1505. }
  1506. .registerSuccess {
  1507. font-size: 30px;
  1508. height: 28px;
  1509. margin-left: 9px;
  1510. line-height: 24px;
  1511. font-weight: bold;
  1512. color: rgb(51, 51, 51);
  1513. }
  1514. /deep/ .service {
  1515. border-radius: 7px !important;
  1516. /deep/ .el-dialog__header {
  1517. display: none;
  1518. }
  1519. /deep/ .el-dialog__body {
  1520. padding: 0 !important;
  1521. }
  1522. }
  1523. .signin-box {
  1524. >>> .el-form-item__label {
  1525. line-height: 12px !important;
  1526. }
  1527. }
  1528. </style>