ChangeManagerAppeal.vue 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840
  1. <template>
  2. <div class="certification" @click="onHideBox">
  3. <div class="container">
  4. <div class="content" v-show="goNextStep">
  5. <div class="content-top">
  6. <h3>更换管理员</h3>
  7. </div>
  8. <div>
  9. <el-form :model="changeManager" :rules="rules" ref="changeManager" label-width="100px" class="demo-ruleForm">
  10. <el-form-item prop="mobile">
  11. <el-input v-model="changeManager.mobile" placeholder="新管理员手机号"></el-input>
  12. </el-form-item>
  13. <el-form-item prop="code">
  14. <el-input type="text" v-model="changeManager.code"
  15. v-bind:class="{ active: codeErrorChecked }"
  16. auto-complete="off" class="msg"
  17. placeholder="短信验证码"></el-input>
  18. <el-button type="primary" class="code"
  19. v-show="sendManagerCode"
  20. @click="getCheckCode"
  21. :disabled="getCodeBtnIsDisabled">获取验证码</el-button>
  22. <el-button type="primary" v-show="!sendManagerCode" class="code code-send">已发送({{account_time}}s)</el-button>
  23. <span v-show="codeErrorChecked" class="tip codeError-tip" >{{codeErrorMsg}}</span>
  24. </el-form-item>
  25. <el-form-item prop="spaceName">
  26. <el-input type="text"
  27. v-model="changeManager.spaceName"
  28. v-bind:class="{ active: isSpaceNameExist }"
  29. auto-complete="off"
  30. placeholder="企业名称"
  31. ></el-input>
  32. <span class="tip exist" v-show="isSpaceNameExist">企业不存在,请确认。<a href="">仍有问题?</a></span>
  33. </el-form-item>
  34. <el-form-item prop="businessCode">
  35. <el-input type="text" v-model="changeManager.businessCode" auto-complete="off" placeholder="营业执照号"></el-input>
  36. </el-form-item>
  37. <el-form-item class="padding55">
  38. <a class="x-btn-blank" title="上传营业执照扫描件" v-bind:class="{ correct: uploadFileChecked }">
  39. <i class="fa fa-picture-o"></i>
  40. <span class="upload">上传营业执照扫描件</span>
  41. <input type="file"
  42. class="form-control file-input"
  43. name="name"
  44. accept="image/jpeg,image/jpg,image/gif,image/bmp,image/png,.pdf"
  45. @change="upload"/>
  46. </a>
  47. <a class="thumbnail" v-if="changeManager.businessCodeImage !== ''"><img class="previewImg" alt="" :src="isPdf?'/images/all/timg.png':changeManager.businessCodeImage"></a>
  48. </el-form-item>
  49. <el-form-item prop="corporation">
  50. <el-input v-model="changeManager.corporation" placeholder="法定代表人"></el-input>
  51. </el-form-item>
  52. <el-form-item prop="regAddress" class="padding45">
  53. <input type="text" readonly aria-haspopup="true" aria-expanded="false"
  54. @click="onShowAddress"
  55. v-model="changeManager.regAddress"
  56. v-bind:class="{ correct: addressCheck }"
  57. class="form-control"
  58. name="name"
  59. placeholder="注册地址"/>
  60. <i class="fa fa-map-marker"></i>
  61. <div v-show="showAddressBox"
  62. @mouseenter="isShowAddressBox = true"
  63. @mouseleave="isShowAddressBox = false"
  64. style="display: block;" class="dropdown-menu x-union-menu" aria-labelledby="address">
  65. <div class="x-union-header">
  66. <div>省份</div>
  67. <div>城市</div>
  68. <div>县区</div>
  69. <div class="x-item-ext">详细地址</div>
  70. </div>
  71. <div class="x-union-list">
  72. <ul class="list-unstyled">
  73. <li v-for="province in cityData.province"
  74. :class="province == address.regProvince ? 'active' : ''"
  75. v-text="province"
  76. @click="getCity(province)"></li>
  77. </ul>
  78. <ul class="list-unstyled">
  79. <li v-for="city in cityData.city"
  80. :class="city == address.regCity ? 'active' : ''"
  81. v-text="city"
  82. @click="getDistrict(city)"></li>
  83. </ul>
  84. <ul class="list-unstyled">
  85. <li v-for="district in cityData.district"
  86. v-text="district"
  87. :class="district == address.regDistrict ? 'active' : ''"
  88. @click="chooseDistrict(district)"></li>
  89. </ul>
  90. <div class="x-item-ext">
  91. <div class="form-group">
  92. <div class="col-sm-12">
  93. <textarea id="street" name="street" rows="4" v-model="address.regStreet" class="form-control x-input" placeholder="xx路xx大厦xx栋xx楼xx室"></textarea>
  94. </div>
  95. </div>
  96. <div class="text-right">
  97. <a class="register-btn btn-submit" @click="submitAddress">确定</a>
  98. <a @click="showAddressBox = false" class="register-btn btn-console">取消</a>
  99. </div>
  100. </div>
  101. </div>
  102. </div>
  103. </el-form-item>
  104. <el-form-item prop="description">
  105. <el-input type="textarea" v-model="changeManager.description" placeholder="申诉说明"></el-input>
  106. <span class="tip description" v-show="descriptionTip">请描述您申诉的原因,并尽可能多地列举出证明此账号为您所有的证据</span>
  107. </el-form-item>
  108. <el-form-item prop="contactName">
  109. <el-input type="text" v-model="changeManager.contactName" auto-complete="off" placeholder="姓名"></el-input>
  110. </el-form-item>
  111. <el-form-item prop="contactTel">
  112. <el-input type="text" v-model="changeManager.contactTel" auto-complete="off" placeholder="联系电话"></el-input>
  113. </el-form-item>
  114. <el-form-item prop="contactEmail">
  115. <el-input type="text" v-model="changeManager.contactEmail" auto-complete="off" placeholder="电子邮箱"></el-input>
  116. </el-form-item>
  117. <el-form-item>
  118. <a class="btn finish"
  119. @click="submit"
  120. :disabled="!checked || !mobileChecked || !codeChecked || !spaceNameChecked || !businessCodeChecked || !uploadFileChecked || !addressCheck || !descriptionChecked || !contactNameChecked || !contactTelChecked || !contactEmailChecked">提交</a>
  121. </el-form-item>
  122. <el-form-item>
  123. <el-checkbox name="type" v-model="checked" @click="checkboxChecked"></el-checkbox>
  124. <span class="agree">我已阅读并同意 <a href="/common/agreement">《优软云服务条款》</a></span>
  125. </el-form-item>
  126. </el-form>
  127. </div>
  128. </div>
  129. <div class="content" v-show="!goNextStep">
  130. <div class="content-top">
  131. <h3>更换管理员</h3>
  132. </div>
  133. <div class="content-bottom">
  134. <p class="passed"><img src="/images/all/pass.png" alt=""/>申诉已提交</p>
  135. <span>申诉内容已提交,请耐心等待审核</span>
  136. <div class="close-btn" @click="goCloudCenter">关闭</div>
  137. </div>
  138. </div>
  139. <loading v-show="isShowLoading"/>
  140. </div>
  141. </div>
  142. </template>
  143. <script>
  144. import Loading from '~components/common/loading/Loading.vue'
  145. export default {
  146. name: 'AccountAppeal',
  147. components: {
  148. Loading
  149. },
  150. data () {
  151. var validateMobile = (rule, value, callback) => {
  152. if (value === '') {
  153. callback(new Error('请填写正确的手机号'))
  154. this.getCodeBtnIsDisabled = true
  155. this.mobileChecked = false
  156. } else {
  157. if (this.changeManager.mobile !== '') {
  158. var reg = /^1[0-9]{10}$/
  159. if (!reg.test(value)) {
  160. callback(new Error('请填写正确的手机号'))
  161. this.getCodeBtnIsDisabled = true
  162. this.mobileChecked = false
  163. } else {
  164. this.getCodeBtnIsDisabled = false
  165. this.mobileChecked = true
  166. }
  167. }
  168. callback()
  169. }
  170. }
  171. var validateCode = (rule, value, callback) => {
  172. if (value === '') {
  173. callback(new Error('请填写正确的验证码'))
  174. this.codeErrorChecked = false
  175. this.codeChecked = false
  176. } else {
  177. if (this.changeManager.code !== '') {
  178. if (this.changeManager.mobile === '') {
  179. callback(new Error('请先填写正确的手机号'))
  180. } else {
  181. if (this.token) {
  182. let param = new FormData()
  183. param.append('mobile', this.changeManager.mobile)
  184. param.append('code', this.changeManager.code)
  185. param.append('token', this.token)
  186. let config = {
  187. headers: {'Content-Type': 'multipart/form-data'}
  188. }
  189. this.$http.post(`/appeal/check/mobile`, param, config)
  190. .then(response => {
  191. if (response.data.success) {
  192. this.codeChecked = true
  193. this.codeErrorChecked = false
  194. } else {
  195. this.codeErrorChecked = true
  196. this.codeChecked = false
  197. return Promise.reject(response.data)
  198. }
  199. }).catch(err => {
  200. this.codeErrorMsg = err.errMsg
  201. // this.$message.error(err.errMsg)
  202. })
  203. } else {
  204. callback(new Error('请先获取验证码'))
  205. this.codeChecked = false
  206. this.codeErrorChecked = false
  207. }
  208. }
  209. }
  210. callback()
  211. }
  212. }
  213. var validateSpaceName = (rule, value, callback) => {
  214. if (value === '') {
  215. callback(new Error('请填写正确的企业名称'))
  216. this.spaceNameChecked = false
  217. this.isSpaceNameExist = false
  218. } else {
  219. if (this.changeManager.spaceName !== '') {
  220. if (value.length > 20) {
  221. callback(new Error('输入长度过长,20个字符以内'))
  222. this.spaceNameChecked = false
  223. } else {
  224. this.$http.get(`/api/userspace/checkSpaceName`, {params: {spaceName: this.changeManager.spaceName}})
  225. .then(response => {
  226. if (response.data.success) {
  227. this.spaceNameChecked = false
  228. this.isSpaceNameExist = true
  229. } else {
  230. this.spaceNameChecked = true
  231. this.isSpaceNameExist = false
  232. return Promise.reject(response.data)
  233. }
  234. }).catch(err => {
  235. console.log(err)
  236. // this.$message.error(err.errMsg)
  237. })
  238. }
  239. }
  240. callback()
  241. }
  242. }
  243. var validateBusinessCode = (rule, value, callback) => {
  244. if (value === '') {
  245. callback(new Error('请填写正确的营业执照号'))
  246. this.businessCodeChecked = false
  247. } else {
  248. if (this.changeManager.businessCode !== '') {
  249. let reg = /^[A-Za-z0-9]+$/
  250. if (reg.test(value)) {
  251. if (value.length > 20) {
  252. callback(new Error('输入长度过长,20个字符以内'))
  253. this.businessCodeChecked = false
  254. } else {
  255. this.businessCodeChecked = true
  256. }
  257. } else {
  258. callback(new Error('请填写正确的营业执照号'))
  259. this.businessCodeChecked = false
  260. }
  261. }
  262. callback()
  263. }
  264. }
  265. var validateCorporation = (rule, value, callback) => {
  266. if (value === '') {
  267. callback(new Error('请填写正确的法定代表人'))
  268. this.corporationChecked = false
  269. } else {
  270. if (this.changeManager.corporation !== '') {
  271. if (value.length > 20) {
  272. callback(new Error('输入长度过长,20个字符以内'))
  273. } else {
  274. this.corporationChecked = true
  275. }
  276. }
  277. callback()
  278. }
  279. }
  280. var validateDescription = (rule, value, callback) => {
  281. if (value === '') {
  282. callback(new Error('请填写申诉说明'))
  283. this.descriptionChecked = false
  284. this.descriptionTip = false
  285. } else {
  286. if (this.changeManager.description !== '') {
  287. if (value.length >= 100) {
  288. callback(new Error('输入长度过长,100个字符以内'))
  289. this.descriptionChecked = false
  290. this.descriptionTip = false
  291. } else {
  292. this.descriptionChecked = true
  293. this.descriptionTip = false
  294. }
  295. }
  296. callback()
  297. }
  298. }
  299. var validateContactName = (rule, value, callback) => {
  300. if (value === '') {
  301. callback(new Error('请填写您的姓名'))
  302. this.contactNameChecked = false
  303. } else {
  304. if (this.changeManager.contactName !== '') {
  305. if (value.length >= 20) {
  306. callback(new Error('输入长度过长,20个字符以内'))
  307. this.contactNameChecked = false
  308. } else {
  309. this.contactNameChecked = true
  310. }
  311. }
  312. callback()
  313. }
  314. }
  315. var validateContactTel = (rule, value, callback) => {
  316. if (value === '') {
  317. callback(new Error('请填写正确的联系电话'))
  318. this.contactTelChecked = false
  319. } else {
  320. if (this.changeManager.contactTel !== '') {
  321. var reg = /^1[0-9]{10}$/
  322. if (!reg.test(value)) {
  323. callback(new Error('请填写正确的联系电话'))
  324. this.contactTelChecked = false
  325. } else {
  326. this.contactTelChecked = true
  327. }
  328. }
  329. callback()
  330. }
  331. }
  332. var validateContactEmail = (rule, value, callback) => {
  333. if (value === '') {
  334. callback(new Error('请填写正确的电子邮箱'))
  335. this.contactEmailChecked = false
  336. } else {
  337. if (this.changeManager.contactEmail !== '') {
  338. var reg = /^([\w-])+(\.\w+)*@([\w-])+((\.\w{2,3}){1,3})$/
  339. if (!reg.test(value)) {
  340. callback(new Error('请输入正确的邮箱地址格式'))
  341. this.contactEmailChecked = false
  342. } else {
  343. this.contactEmailChecked = true
  344. }
  345. }
  346. callback()
  347. }
  348. }
  349. return {
  350. goNextStep: true,
  351. changeManager: {
  352. mobile: '',
  353. code: '',
  354. spaceName: '',
  355. businessCode: '',
  356. businessCodeImage: '',
  357. corporation: '',
  358. regAddress: '',
  359. description: '',
  360. contactName: '',
  361. contactTel: '',
  362. contactEmail: ''
  363. },
  364. isShowLoading: false,
  365. codeErrorMsg: '',
  366. isPdf: false,
  367. checked: true,
  368. showAddressBox: false,
  369. isShowAddressBox: false,
  370. sendManagerCode: true,
  371. account_time: 0,
  372. getCodeBtnIsDisabled: true,
  373. codeErrorChecked: false,
  374. descriptionTip: true,
  375. isSpaceNameExist: false,
  376. mobileChecked: false,
  377. codeChecked: false,
  378. spaceNameChecked: false,
  379. businessCodeChecked: false,
  380. uploadFileChecked: false,
  381. addressCheck: false,
  382. descriptionChecked: false,
  383. contactNameChecked: false,
  384. contactTelChecked: false,
  385. contactEmailChecked: false,
  386. allCityData: {},
  387. cityData: {
  388. province: [],
  389. city: [],
  390. district: []
  391. },
  392. address: {
  393. regProvince: '',
  394. regCity: '',
  395. regDistrict: '',
  396. regStreet: ''
  397. },
  398. rules: {
  399. mobile: [
  400. {validator: validateMobile, trigger: 'blur'}
  401. ],
  402. code: [
  403. {validator: validateCode, trigger: 'blur'}
  404. ],
  405. spaceName: [
  406. {validator: validateSpaceName, trigger: 'blur'}
  407. ],
  408. businessCode: [
  409. {validator: validateBusinessCode, trigger: 'blur'}
  410. ],
  411. corporation: [
  412. {validator: validateCorporation, trigger: 'blur'}
  413. ],
  414. description: [
  415. {validator: validateDescription, trigger: 'blur'}
  416. ],
  417. contactName: [
  418. {validator: validateContactName, trigger: 'blur'}
  419. ],
  420. contactTel: [
  421. {validator: validateContactTel, trigger: 'blur'}
  422. ],
  423. contactEmail: [
  424. {validator: validateContactEmail, trigger: 'blur'}
  425. ]
  426. }
  427. }
  428. },
  429. computed: {
  430. logged () {
  431. return this.$store.state.option.isLogin.data.content
  432. }
  433. },
  434. mounted () {
  435. // 获取城市地址
  436. this.$http.get('/data/city.json').then(response => {
  437. this.allCityData = response.data
  438. for (let province in response.data) {
  439. this.cityData.province.push(province)
  440. }
  441. })
  442. },
  443. methods: {
  444. // 判断我同意是否被选中
  445. checkboxChecked () {
  446. this.checked = !this.checked
  447. },
  448. // 获取校验码
  449. getCheckCode () {
  450. this.isShowLoading = true
  451. this.$http.get(`/appeal/check/mobile`, {params: {mobile: this.changeManager.mobile}})
  452. .then(response => {
  453. this.isShowLoading = false
  454. this.token = response.data.content.token
  455. if (this.token !== '') {
  456. this.$message({
  457. message: '验证码已经发送到您的手机,请注意查收',
  458. type: 'success'
  459. })
  460. this.sendManagerCode = false
  461. this.account_time = 60
  462. var accountTime = setInterval(() => {
  463. this.account_time--
  464. if (this.account_time <= 0) {
  465. this.sendManagerCode = true
  466. clearInterval(accountTime)
  467. }
  468. }, 1000)
  469. }
  470. }).catch(err => {
  471. this.isShowLoading = false
  472. this.$message.error(err.errMsg)
  473. })
  474. },
  475. // 上传营业执照扫描件
  476. upload (e) {
  477. this.isShowLoading = true
  478. let file = e.target.files[0]
  479. if (file.size > 5 * 1024 * 1024) {
  480. this.uploadFileChecked = false
  481. this.isShowLoading = false
  482. } else {
  483. let param = new FormData()
  484. param.append('image', file, file.name)
  485. let config = {
  486. headers: {'Content-Type': 'multipart/form-data'}
  487. }
  488. // 图片上传接口
  489. this.$http.post('/api/userspace/upload', param, config)
  490. .then(response => {
  491. this.isShowLoading = false
  492. let path = response.data.content
  493. if (path.slice(path.lastIndexOf('.')).toLowerCase() === '.pdf') {
  494. this.isPdf = true
  495. } else {
  496. this.isPdf = false
  497. }
  498. this.changeManager.businessCodeImage = response.data.content
  499. this.uploadFileChecked = true
  500. }, err => {
  501. this.isShowLoading = false
  502. console.log(err)
  503. this.uploadFileChecked = false
  504. })
  505. }
  506. },
  507. // 地址选择
  508. onHideBox: function () {
  509. this.onHideAddress()
  510. },
  511. onHideAddress () {
  512. if (!this.isShowAddressBox && !this.isClickInputAddress) {
  513. this.showAddressBox = false
  514. }
  515. this.isClickInputAddress = false
  516. },
  517. onShowAddress () {
  518. if (this.showAddressBox) {
  519. this.onHideAddress()
  520. } else {
  521. this.showAddressBox = true
  522. this.isClickInputAddress = true
  523. }
  524. },
  525. getCity (province) {
  526. this.cityData.city = []
  527. this.address.regCity = ''
  528. this.cityData.district = []
  529. this.address.regDistrict = ''
  530. this.address.regProvince = province
  531. for (let item in this.allCityData[province]) {
  532. this.cityData.city.push(item)
  533. }
  534. },
  535. getDistrict (city) {
  536. this.address.regCity = city
  537. this.address.regDistrict = ''
  538. this.cityData.district = this.allCityData[this.address.regProvince][city]
  539. },
  540. chooseDistrict (district) {
  541. this.address.regDistrict = district
  542. },
  543. submitAddress () {
  544. if (this.address.regDistrict !== '' && this.address.regCity !== '' && this.address.regProvince !== '') {
  545. if (this.address.regStreet !== '') {
  546. this.changeManager.regAddress = this.address.regProvince + this.address.regCity + this.address.regDistrict + this.address.regStreet
  547. this.showAddressBox = false
  548. this.addressCheck = true
  549. } else {
  550. this.$message.error('请输入详细地址')
  551. this.addressCheck = false
  552. }
  553. } else {
  554. this.$message.error('请输入省、市、区')
  555. this.addressCheck = false
  556. }
  557. },
  558. // 提交表单
  559. submit () {
  560. if (this.mobileChecked && this.codeChecked && this.spaceNameChecked && this.businessCodeChecked && this.uploadFileChecked && this.addressCheck && this.descriptionChecked && this.contactNameChecked && this.contactTelChecked && this.contactEmailChecked && this.checked) {
  561. this.isShowLoading = true
  562. let param = new FormData()
  563. param.append('mobile', this.changeManager.mobile)
  564. param.append('code', this.changeManager.code)
  565. param.append('spaceName', this.changeManager.spaceName)
  566. param.append('businessCode', this.changeManager.businessCode)
  567. param.append('businessCodeImage', this.changeManager.businessCodeImage)
  568. param.append('corporation', this.changeManager.corporation)
  569. param.append('regAddress', this.changeManager.regAddress)
  570. param.append('regProvince', this.address.regProvince)
  571. param.append('regCity', this.address.regCity)
  572. param.append('regDistrict', this.address.regDistrict)
  573. param.append('regStreet', this.address.regStreet)
  574. param.append('description', this.changeManager.description)
  575. param.append('contactName', this.changeManager.contactName)
  576. param.append('contactTel', this.changeManager.contactTel)
  577. param.append('contactEmail', this.changeManager.contactEmail)
  578. param.append('token', this.token)
  579. let config = {
  580. headers: {'Content-Type': 'multipart/form-data'}
  581. }
  582. this.$http.post('/appeal/resetPwd', param, config)
  583. .then(response => {
  584. if (response.data.success) {
  585. this.isShowLoading = false
  586. this.goNextStep = false
  587. } else {
  588. this.goNextStep = true
  589. return Promise.reject(response.data)
  590. }
  591. }).catch(err => {
  592. this.$message.error(err.errMsg)
  593. this.isShowLoading = false
  594. this.codeErrorChecked = true
  595. this.codeChecked = false
  596. this.account_time = 0
  597. })
  598. }
  599. },
  600. // 跳转至个人中心页面
  601. goCloudCenter () {
  602. window.location.href = '/cloudcenter'
  603. }
  604. }
  605. }
  606. </script>
  607. <style lang="scss" scoped>
  608. .certification {
  609. margin: 0 auto;
  610. width: 100%;
  611. background: #eee;
  612. .container{
  613. padding-top: 50px;
  614. margin: 0 auto;
  615. width: 980px;
  616. text-align: center;
  617. .content{
  618. padding: 0 50px;
  619. margin: 50px auto 0;
  620. width: 100%;
  621. text-align: center;
  622. background: #fff;
  623. .content-top{
  624. height: 80px;
  625. line-height: 80px;
  626. h3{
  627. margin-bottom: 0;
  628. font-size: 24px;
  629. color: #000;
  630. border-bottom: 1px solid #dcdcdc;
  631. }
  632. .step{
  633. position: relative;
  634. margin-top: 10px;
  635. img{
  636. width: 315px;
  637. height: 46px;
  638. }
  639. .step-item{
  640. position: absolute;
  641. top: 45px;
  642. left: 265px;
  643. span{
  644. margin-right: 85px;
  645. font-size: 14px;
  646. color: #b4b4b4;
  647. }
  648. span.active {
  649. color: #0076ad;
  650. }
  651. }
  652. }
  653. }
  654. form {
  655. padding-bottom: 44px;
  656. margin-top: 36px;
  657. input{
  658. padding: 0 0 0 18px;
  659. width: 360px;
  660. height: 44px;
  661. line-height: 44px;
  662. font-size: 14px;
  663. color: #000;
  664. border-radius: 0;
  665. }
  666. .padding55 input{
  667. padding-left: 55px;
  668. }
  669. .padding45 input{
  670. padding-left: 45px;
  671. }
  672. .pwd {
  673. margin: 6px 0 -15px 0;
  674. text-align: left;
  675. font-size: 13px;
  676. em{
  677. display: inline-block;
  678. margin: 0 8px 2px 0;
  679. width: 24px;
  680. height: 6px;
  681. &:first-child{
  682. margin-left: 10px;
  683. }
  684. }
  685. span{
  686. margin-left: 10px;
  687. font-size: 13px;
  688. }
  689. }
  690. .pwd.sm{
  691. color: #8c8c8c;
  692. em {
  693. background: #bfbfbf;
  694. &:first-child{
  695. background: #ff4e00;
  696. }
  697. }
  698. span{
  699. color: #ff4e00;
  700. }
  701. }
  702. .pwd.md{
  703. color: #8c8c8c;
  704. em {
  705. background: #22ac38;
  706. &:nth-child(3){
  707. background: #bfbfbf;
  708. }
  709. }
  710. span{
  711. color: #22ac38;
  712. }
  713. }
  714. .pwd.lar{
  715. color: #8c8c8c;
  716. em {
  717. background: #00a0e9;
  718. }
  719. span{
  720. color: #00a0e9;
  721. }
  722. }
  723. .pwd.low{
  724. color: #8c8c8c;
  725. em{
  726. background: #bfbfbf;
  727. }
  728. }
  729. span.tip{
  730. position: absolute;
  731. top: 0;
  732. right: -215px;
  733. font-size: 13px;
  734. color: #8c8c8c;
  735. a{
  736. font-size: 13px;
  737. color: #0076ad;
  738. }
  739. }
  740. span.tip.description {
  741. top: 10px;
  742. right: -266px;
  743. width: 245px;
  744. line-height: 18px;
  745. text-align: left;
  746. }
  747. span.tip.codeError-tip {
  748. position: absolute;
  749. top: 3px;
  750. left: 378px;
  751. width: 200px;
  752. text-align: left;
  753. color: #ff4949;
  754. font-size: 12px;
  755. }
  756. i{
  757. position: absolute;
  758. top: 13px;
  759. left: 20px;
  760. font-size: 20px;
  761. color: #a0a0a0;
  762. }
  763. input[type='checkbox']{
  764. margin: 0 14px 0 55px;
  765. float: left;
  766. width: 16px;
  767. height: 16px;
  768. }
  769. span.agree{
  770. float: left;
  771. margin: 1px 0 0 10px;
  772. font-size: 14px;
  773. color: #8b8b8b;
  774. a{
  775. color: #0076ad;
  776. }
  777. }
  778. .form-group.agree{
  779. margin: 20px auto 0 !important;
  780. }
  781. .btn {
  782. margin: 34px 0 16px 0;
  783. width: 360px;
  784. height: 44px;
  785. line-height: 44px;
  786. font-size: 16px;
  787. color: #fff;
  788. background: #0076AD;
  789. border-radius: 3px;
  790. }
  791. }
  792. .content-bottom{
  793. margin-top: 35px;
  794. padding-bottom: 50px;
  795. p{
  796. font-size: 24px;
  797. color: #323232;
  798. img{
  799. margin-right: 20px;
  800. width: 30px;
  801. height: 28px;
  802. }
  803. }
  804. p.pass{
  805. font-size: 24px;
  806. color: #e77405;
  807. img{
  808. height: 30px;
  809. }
  810. }
  811. p.passed {
  812. color: #2ab300;
  813. img{
  814. height: 30px;
  815. }
  816. }
  817. span{
  818. display: inline-block;
  819. margin: 15px 0 140px 0;
  820. font-size: 14px;
  821. color: #8b8b8b;
  822. }
  823. .close-btn{
  824. margin: 0 auto;
  825. width: 200px;
  826. height: 36px;
  827. line-height: 36px;
  828. font-size: 14px;
  829. text-align: center;
  830. color: #323232;
  831. border: 1px solid #d2d2d2;
  832. border-radius: 3px;
  833. cursor: pointer ;
  834. }
  835. }
  836. }
  837. }
  838. }
  839. </style>