ChangeManagerAppeal.vue 28 KB

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