ChangeManagerAppeal.vue 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857
  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.$nextTick(() => {
  437. this.isLogin()
  438. // 刷新统计信息
  439. setInterval(() => {
  440. this.isLogin()
  441. }, 10000)
  442. })
  443. // 获取城市地址
  444. this.$http.get('/data/city.json').then(response => {
  445. this.allCityData = response.data
  446. for (let province in response.data) {
  447. this.cityData.province.push(province)
  448. }
  449. })
  450. },
  451. methods: {
  452. // 判断我同意是否被选中
  453. checkboxChecked () {
  454. this.checked = !this.checked
  455. },
  456. // 判断用户是否登录
  457. isLogin () {
  458. if (!this.logged.isLogin) {
  459. // 未登录跳到登录页面
  460. window.location.href = '/'
  461. }
  462. },
  463. // 获取校验码
  464. getCheckCode () {
  465. this.isShowLoading = true
  466. this.$http.get(`/appeal/check/mobile`, {params: {mobile: this.changeManager.mobile}})
  467. .then(response => {
  468. this.isShowLoading = false
  469. this.token = response.data.content.token
  470. if (this.token !== '') {
  471. this.$message({
  472. message: '验证码已经发送到您的手机,请注意查收',
  473. type: 'success'
  474. })
  475. this.sendManagerCode = false
  476. this.account_time = 60
  477. var accountTime = setInterval(() => {
  478. this.account_time--
  479. if (this.account_time <= 0) {
  480. this.sendManagerCode = true
  481. clearInterval(accountTime)
  482. }
  483. }, 1000)
  484. }
  485. }).catch(err => {
  486. this.isShowLoading = false
  487. this.$message.error(err.errMsg)
  488. })
  489. },
  490. // 上传营业执照扫描件
  491. upload (e) {
  492. this.isShowLoading = true
  493. let file = e.target.files[0]
  494. if (file.size > 5 * 1024 * 1024) {
  495. this.uploadFileChecked = false
  496. this.isShowLoading = false
  497. } else {
  498. let param = new FormData()
  499. param.append('image', file, file.name)
  500. let config = {
  501. headers: {'Content-Type': 'multipart/form-data'}
  502. }
  503. // 图片上传接口
  504. this.$http.post('/api/userspace/upload', param, config)
  505. .then(response => {
  506. this.isShowLoading = false
  507. let path = response.data.content
  508. console.log(path)
  509. console.log(path.slice(path.lastIndexOf('.')).toLowerCase())
  510. if (path.slice(path.lastIndexOf('.')).toLowerCase() === '.pdf') {
  511. this.isPdf = true
  512. } else {
  513. this.isPdf = false
  514. }
  515. this.changeManager.businessCodeImage = response.data.content
  516. this.uploadFileChecked = true
  517. }, err => {
  518. this.isShowLoading = false
  519. console.log(err)
  520. this.uploadFileChecked = false
  521. })
  522. }
  523. },
  524. // 地址选择
  525. onHideBox: function () {
  526. this.onHideAddress()
  527. },
  528. onHideAddress () {
  529. if (!this.isShowAddressBox && !this.isClickInputAddress) {
  530. this.showAddressBox = false
  531. }
  532. this.isClickInputAddress = false
  533. },
  534. onShowAddress () {
  535. if (this.showAddressBox) {
  536. this.onHideAddress()
  537. } else {
  538. this.showAddressBox = true
  539. this.isClickInputAddress = true
  540. }
  541. },
  542. getCity (province) {
  543. this.cityData.city = []
  544. this.address.regCity = ''
  545. this.cityData.district = []
  546. this.address.regDistrict = ''
  547. this.address.regProvince = province
  548. for (let item in this.allCityData[province]) {
  549. this.cityData.city.push(item)
  550. }
  551. },
  552. getDistrict (city) {
  553. this.address.regCity = city
  554. this.address.regDistrict = ''
  555. this.cityData.district = this.allCityData[this.address.regProvince][city]
  556. },
  557. chooseDistrict (district) {
  558. this.address.regDistrict = district
  559. },
  560. submitAddress () {
  561. if (this.address.regDistrict !== '' && this.address.regCity !== '' && this.address.regProvince !== '') {
  562. if (this.address.regStreet !== '') {
  563. this.changeManager.regAddress = this.address.regProvince + this.address.regCity + this.address.regDistrict + this.address.regStreet
  564. this.showAddressBox = false
  565. this.addressCheck = true
  566. } else {
  567. this.$message.error('请输入详细地址')
  568. this.addressCheck = false
  569. }
  570. } else {
  571. this.$message.error('请输入省、市、区')
  572. this.addressCheck = false
  573. }
  574. },
  575. // 提交表单
  576. submit () {
  577. if (this.mobileChecked && this.codeChecked && this.spaceNameChecked && this.businessCodeChecked && this.uploadFileChecked && this.addressCheck && this.descriptionChecked && this.contactNameChecked && this.contactTelChecked && this.contactEmailChecked && this.checked) {
  578. this.isShowLoading = true
  579. let param = new FormData()
  580. param.append('mobile', this.changeManager.mobile)
  581. param.append('code', this.changeManager.code)
  582. param.append('spaceName', this.changeManager.spaceName)
  583. param.append('businessCode', this.changeManager.businessCode)
  584. param.append('businessCodeImage', this.changeManager.businessCodeImage)
  585. param.append('corporation', this.changeManager.corporation)
  586. param.append('regAddress', this.changeManager.regAddress)
  587. param.append('regProvince', this.address.regProvince)
  588. param.append('regCity', this.address.regCity)
  589. param.append('regDistrict', this.address.regDistrict)
  590. param.append('regStreet', this.address.regStreet)
  591. param.append('description', this.changeManager.description)
  592. param.append('contactName', this.changeManager.contactName)
  593. param.append('contactTel', this.changeManager.contactTel)
  594. param.append('contactEmail', this.changeManager.contactEmail)
  595. param.append('token', this.token)
  596. let config = {
  597. headers: {'Content-Type': 'multipart/form-data'}
  598. }
  599. this.$http.post('/appeal/resetPwd', param, config)
  600. .then(response => {
  601. if (response.data.success) {
  602. this.isShowLoading = false
  603. this.goNextStep = false
  604. } else {
  605. this.goNextStep = true
  606. return Promise.reject(response.data)
  607. }
  608. }).catch(err => {
  609. this.$message.error(err.errMsg)
  610. this.isShowLoading = false
  611. this.codeErrorChecked = true
  612. this.codeChecked = false
  613. this.account_time = 0
  614. })
  615. }
  616. },
  617. // 跳转至个人中心页面
  618. goCloudCenter () {
  619. window.location.href = '/cloudcenter'
  620. }
  621. }
  622. }
  623. </script>
  624. <style lang="scss" scoped>
  625. .certification {
  626. margin: 0 auto;
  627. width: 100%;
  628. background: #eee;
  629. .container{
  630. padding-top: 50px;
  631. margin: 0 auto;
  632. width: 980px;
  633. text-align: center;
  634. .content{
  635. padding: 0 50px;
  636. margin: 50px auto 0;
  637. width: 100%;
  638. text-align: center;
  639. background: #fff;
  640. .content-top{
  641. height: 80px;
  642. line-height: 80px;
  643. h3{
  644. margin-bottom: 0;
  645. font-size: 24px;
  646. color: #000;
  647. border-bottom: 1px solid #dcdcdc;
  648. }
  649. .step{
  650. position: relative;
  651. margin-top: 10px;
  652. img{
  653. width: 315px;
  654. height: 46px;
  655. }
  656. .step-item{
  657. position: absolute;
  658. top: 45px;
  659. left: 265px;
  660. span{
  661. margin-right: 85px;
  662. font-size: 14px;
  663. color: #b4b4b4;
  664. }
  665. span.active {
  666. color: #0076ad;
  667. }
  668. }
  669. }
  670. }
  671. form {
  672. padding-bottom: 44px;
  673. margin-top: 36px;
  674. input{
  675. padding: 0 0 0 18px;
  676. width: 360px;
  677. height: 44px;
  678. line-height: 44px;
  679. font-size: 14px;
  680. color: #000;
  681. border-radius: 0;
  682. }
  683. .padding55 input{
  684. padding-left: 55px;
  685. }
  686. .padding45 input{
  687. padding-left: 45px;
  688. }
  689. .pwd {
  690. margin: 6px 0 -15px 0;
  691. text-align: left;
  692. font-size: 13px;
  693. em{
  694. display: inline-block;
  695. margin: 0 8px 2px 0;
  696. width: 24px;
  697. height: 6px;
  698. &:first-child{
  699. margin-left: 10px;
  700. }
  701. }
  702. span{
  703. margin-left: 10px;
  704. font-size: 13px;
  705. }
  706. }
  707. .pwd.sm{
  708. color: #8c8c8c;
  709. em {
  710. background: #bfbfbf;
  711. &:first-child{
  712. background: #ff4e00;
  713. }
  714. }
  715. span{
  716. color: #ff4e00;
  717. }
  718. }
  719. .pwd.md{
  720. color: #8c8c8c;
  721. em {
  722. background: #22ac38;
  723. &:nth-child(3){
  724. background: #bfbfbf;
  725. }
  726. }
  727. span{
  728. color: #22ac38;
  729. }
  730. }
  731. .pwd.lar{
  732. color: #8c8c8c;
  733. em {
  734. background: #00a0e9;
  735. }
  736. span{
  737. color: #00a0e9;
  738. }
  739. }
  740. .pwd.low{
  741. color: #8c8c8c;
  742. em{
  743. background: #bfbfbf;
  744. }
  745. }
  746. span.tip{
  747. position: absolute;
  748. top: 0;
  749. right: -215px;
  750. font-size: 13px;
  751. color: #8c8c8c;
  752. a{
  753. font-size: 13px;
  754. color: #0076ad;
  755. }
  756. }
  757. span.tip.description {
  758. top: 10px;
  759. right: -266px;
  760. width: 245px;
  761. line-height: 18px;
  762. text-align: left;
  763. }
  764. span.tip.codeError-tip {
  765. position: absolute;
  766. top: 3px;
  767. left: 378px;
  768. width: 200px;
  769. text-align: left;
  770. color: #ff4949;
  771. font-size: 12px;
  772. }
  773. i{
  774. position: absolute;
  775. top: 13px;
  776. left: 20px;
  777. font-size: 20px;
  778. color: #a0a0a0;
  779. }
  780. input[type='checkbox']{
  781. margin: 0 14px 0 55px;
  782. float: left;
  783. width: 16px;
  784. height: 16px;
  785. }
  786. span.agree{
  787. float: left;
  788. margin: 1px 0 0 10px;
  789. font-size: 14px;
  790. color: #8b8b8b;
  791. a{
  792. color: #0076ad;
  793. }
  794. }
  795. .form-group.agree{
  796. margin: 20px auto 0 !important;
  797. }
  798. .btn {
  799. margin: 34px 0 16px 0;
  800. width: 360px;
  801. height: 44px;
  802. line-height: 44px;
  803. font-size: 16px;
  804. color: #fff;
  805. background: #0076AD;
  806. border-radius: 3px;
  807. }
  808. }
  809. .content-bottom{
  810. margin-top: 35px;
  811. padding-bottom: 50px;
  812. p{
  813. font-size: 24px;
  814. color: #323232;
  815. img{
  816. margin-right: 20px;
  817. width: 30px;
  818. height: 28px;
  819. }
  820. }
  821. p.pass{
  822. font-size: 24px;
  823. color: #e77405;
  824. img{
  825. height: 30px;
  826. }
  827. }
  828. p.passed {
  829. color: #2ab300;
  830. img{
  831. height: 30px;
  832. }
  833. }
  834. span{
  835. display: inline-block;
  836. margin: 15px 0 140px 0;
  837. font-size: 14px;
  838. color: #8b8b8b;
  839. }
  840. .close-btn{
  841. margin: 0 auto;
  842. width: 200px;
  843. height: 36px;
  844. line-height: 36px;
  845. font-size: 14px;
  846. text-align: center;
  847. color: #323232;
  848. border: 1px solid #d2d2d2;
  849. border-radius: 3px;
  850. cursor: pointer ;
  851. }
  852. }
  853. }
  854. }
  855. }
  856. </style>