login.vue 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571
  1. <template>
  2. <div class="login-wrap">
  3. <div class="login">
  4. <div class="contain">
  5. <template v-if="isquit">
  6. <div class="tab">
  7. <span :class="{active:phone}" @click="alter('phone')" v-show="!forget&&!register">手机登陆</span>
  8. <span :class="{active:!phone}" @click="alter('email')" v-show="!forget&&!register">邮箱登陆</span>
  9. <span :class="{active:phone}" @click="alter('phone')" v-show="forget&&!register">手机找回</span>
  10. <span :class="{active:!phone}" @click="alter('email')" v-show="forget&&!register">邮箱找回</span>
  11. <span :class="{active:phone}" @click="alter('phone')" v-show="!forget&&register">手机注册</span>
  12. <span :class="{active:!phone}" @click="alter('email')" v-show="!forget&&register">邮箱注册</span>
  13. </div>
  14. <div class="input-line">
  15. <span class="country" v-show="phone">
  16. <el-select v-model="areavalue" @change="codechange()">
  17. <el-option
  18. v-for="item in options"
  19. :value="item.ch_name"
  20. :key="item.ch_name">
  21. </el-option>
  22. </el-select>
  23. </span>
  24. <span class="icon-email" v-show="!phone"><i class="iconfont icon-tubiao01"></i></span>
  25. <input type="text" placeholder="请输入您的手机号码" class="input" v-show="phone" v-model="form.mobile">
  26. <input type="text" placeholder="请输入您的邮箱" class="input" v-show="!phone" v-model="form.email">
  27. </div>
  28. <div class="verification-line" v-show="(forget&&phone)||register">
  29. <input type="text" placeholder="请输入验证码" class="input" v-model="form.code">
  30. <button @click="verify()">发送验证码</button>
  31. </div>
  32. <div class="input-line" v-show="!forget">
  33. <span class="icon-password"><i class="iconfont icon-mima"></i></span>
  34. <input type="password" placeholder="请输入您的密码" class="input" v-model="form.password">
  35. </div>
  36. <div class="input-line" v-show="forget&&phone">
  37. <span class="icon-password"><i class="iconfont icon-mima"></i></span>
  38. <input type="password" placeholder="请输入您的新密码" class="input" v-model="form.newpassword">
  39. </div>
  40. <div class="input-line" v-show="forget&&phone">
  41. <span class="icon-password"><i class="iconfont icon-mima"></i></span>
  42. <input type="password" placeholder="请再次输入您的新密码" class="input" v-model="form.againpassword">
  43. </div>
  44. <div class="forget-register">
  45. <span class="cursor blue right" @click="alter('forget')" v-show="forget">返回登陆!</span>
  46. <span class="cursor" @click="alter('forget')" v-show="!forget&&!register">忘记密码?</span>
  47. <span class="cursor blue" @click="alter('register')" v-show="!forget&&!register">立即注册!</span>
  48. <div v-show="!forget&&register">
  49. <input type="checkbox" id="tip" class="input" v-model="isRead">
  50. <span>
  51. 我已了解
  52. <i class="blue cursor" @click="centerDialogVisible = true">风险提示</i>
  53. </span>
  54. </div>
  55. <span class="cursor blue" @click="alter('register')" v-show="!forget&&register">立即登陆!</span>
  56. </div>
  57. <div class="submit-line">
  58. <el-button type="primary" class="btn" v-show="!forget&&!register" @click="login()">登陆</el-button>
  59. <el-button type="primary" class="btn" v-show="!phone&&forget" @click="sendmail()">发送邮件</el-button>
  60. <el-button type="primary" class="btn" v-show="phone&&forget" @click="mobileFind()">修改密码</el-button>
  61. <el-button type="primary" class="btn" v-show="register" @click="reg()">注册</el-button>
  62. </div>
  63. </template>
  64. <template v-else>
  65. <p class="LS">欢迎您,{{username}}!</p>
  66. <button class="LS" @click="apply">申请经纪商</button>
  67. </template>
  68. </div>
  69. </div>
  70. <el-dialog
  71. title="提示"
  72. :visible.sync="centerDialogVisible"
  73. width="70%"
  74. center>
  75. <span slot="title" class="dialog-title">
  76. FX66平台风险提示及免责声明
  77. </span>
  78. <span>尊敬的FX66平台用户:<br/>
  79. 由于数字资产具有极高的投资风险,实行7*24小时连续交易,它没有像中国股市有涨跌停限制,且易受外界因素影响,价格波动较大! 比特币不由货币当局发行,不具有法偿性与强制性,请务必在了解数字资产市场风险与风险自担的前提下谨慎、理性投资。<br/>
  80. 一、风险提示:
  81. 1 、数字资产市场是全新的、未经确认的,而且可能不会增长。目前,数字资产主要由投机者大量使用,零售和商业市场使用相对较少。因此,数字资产价格易产生波动,并进而对数字资产投资产生不利影响。<br/>
  82. 2、因各国法律、法规和规范性文件的制定或者修改,数字资产交易随时可能被暂停、或被禁止。因此造成的经济损失全部由用户自行承担。<br/>
  83. 3、用户参与数字资产交易,需承受较高风险。用户应了解和理解此投资有可能导致部分损失或全部损失,所以用户应该以能承受的损失程度来决定投资的金额。用户应了解和理解数字资产会产生衍生风险,所以如有任何疑问,建议先寻求理财顾问的协助。此外,除了上述提及过的风险以外,还会有未能预测的风险存在。<br/>
  84. 4 、用户应慎重考虑并用清晰的判断能力去评估自己的财政状况及上述各项风险而作出任何买卖数字资产的决定,并承担由此产生的全部损失,FX66对此不承担任何责任。<br/>
  85. 5 、用户了解FX66仅作为用户获取数字资产信息、寻找交易方、就数字资产的交易进行协商及开展交易的场所,FX66不参与用户的任何交易,故用户应自行谨慎判断确定相关数字资产及/或信息的真实性、合法性和有效性,并自行承担因此产生的责任与损失。<br/>
  86. 6、 FX66的任何意见、消息、探讨、分析、价格、建议和其他资讯均是一般的市场评论,并不构成投资建议。FX66不承担任何因依赖该资讯直接或间接而产生的损失,包括但不限于任何利润损失。<br/>
  87. 7、FX66的内容会随时更改并不作另行通知,FX66已采取合理措施确保网站资讯的准确性,但并不能保证其准确性程度,亦不会承担任何因FX66的资讯或因未能链结互联网、传送或接收任何通知和信息时的延误或失败而直接或间接产生的损失。
  88. <br/>
  89. 8、使用互联网形式的交易系统亦存有风险,包括但不限于软件,硬件和互联网链结的失败等。由于FX66不能控制互联网的可靠性和可用性,FX66不会对失真,延误和链结失败而承担任何责任。<br/>
  90. 二、反洗钱:<br/>
  91. 为了维护金融稳定,防范洗钱风险。FX66将严格遵循相关法律,严格实行账户实名制,防范可能存在的金融风险。<br/>
  92. 1、FX66遵守和执行反洗钱法的规定,对用户进行身份识别、客户身份资料和交易记录保存制度,以及大额的和可疑交易报告的制度。<br/>
  93. 2、用户注册、挂失交易密码或者资金密码时,应当提供并上传身份证复印件,FX66对用户提供的身份证信息进行识别和比对。FX66有合理的理由怀疑用户使用虚假身份注册时,有权拒绝注册或者注销已经注册的账户。<br/>
  94. 3、FX66参照《金融机构大额交易和可疑交易报告管理办法》的规定,保存大额交易和有洗钱嫌疑的交易记录,在监管机构要求提供大额交易和可疑交易的记录时,向监管机构提供。<br/>
  95. 4、FX66对用户身份信息以及大额交易、可疑交易记录进行保存,依法协助、配合司法机关和行政执法机关打击洗钱活动,依照法律法规的规定协助司法机关、海关、税务等部门查询、冻结和扣划客户存款。<br/>
  96. 5、用户需要承诺在FX66注册的账户为本人操作,提供的所有证件,信息均真实有效。若在验证账户时发现提供的信息为虚假, 伪造或拒绝,虚假陈述资金来源及去向等,FX66有权在不通知用户的情况下冻结账户,并向公安机关举报。<br/>
  97. 三、免责声明:<br/>
  98. 1、FX66提供的信息(包括且不限于币种介绍、投资分析报告、预测文章信息及其他评论、数据、图表、指标、理论、直接的或暗示的指示)等仅供参考,FX66力求但不保证信息的准确性、完整。FX66不对因使用本网站全部或部分内容产生的或因依赖本网站内容而引致的任何损失承担任何责任。<br/>
  99. 2、FX66可能提供部分与其他网站的链接,前述链接仅为方便您的使用,FX66不对所链接网站的信息的真实性、有效性、合法性承担任何责任。<br/>
  100. 3、通过FX66服务购买或获取任何数据、信息或进行交易等行为或替代行为产生的费用及损失,包括但不限于收入损失,交易利润或合同损失,业务中断,预期可节省的货币的损失, 信息的损失,机会、商誉或声誉的损失,数据的损坏或损失,购买替代产品或服务的成本,数字资产消亡或退出市场,任何由于侵权(包括过失)、违约或其他任何原因产生的间接的、特殊的或附带性的损失或损害。<br/>
  101. 4、不论在何种情况下,FX66均不对由于信息网络正常的设备维护,信息网络连接故障,电脑、通讯或其他系统的故障,电力故障,罢工,劳动争议,暴乱,起义,骚乱,生产力或生产资料不足,火灾,洪水,风暴,爆炸,战争,政府行为,司法行政机关的命令或第三方的不作为而造成的不能服务或延迟服务承担责任。<br/>
  102. 5、基于互联网的特殊性,FX66不担保服务不会受中断,对服务的及时性、安全性都不作担保。FX66力图使用户能对本网站进行安全访问和使用,但FX66不能保证FX66包含的全部信息、程序、文本等完全安全,不受任何病毒、木马等恶意程序的干扰和破坏,故用户登陆、使用FX66任何服务或下载及使用该下载的任何程序、信息、数据等均是用户个人的决定并自行承担风险及可能产生的损失。
  103. <br/>
  104. 6、基于区块链交易平台的特殊性,FX66力图确保平台 365*24 小时保持在线。但FX66不能保证因 DDoS 攻击、服务器供应商暂停服务、网络供应商暂停服务或其他不可抗力等原因造成网站无法访问,交易大厅无法正常挂单、撤单,已挂单交易未能正常成交,区块链资产充提币长时间未到账等情况。由于以上原因造成用户资产损失的情况,FX66不承担任何责任。<br/>
  105. 7、用户有义务妥善保管好用户名和密码。通过用户的用户名和密码编辑、发布的任何信息或做出的任何行为都将被视为是用户自己的行为,对因此产生的任何损失FX66不承担任何责任。<br/>
  106. 8、任何非因FX66的原因而引起的与FX66服务有关的其它损失。<br/>
  107. 数字货币可能存在矿工预挖、庄家操控、团队解散、技术缺陷等问题,其价格波动较大,可能发生资产归零的风险。因此我们强烈建议您在自身能承受的风险范围内参与数字货币交易。请注意止盈止损,合理评估风险,请勿投入高于个人承受能力的金额! 最终解释权归FX66所有。FX66感谢有您的陪伴!</span>
  108. <span slot="footer" class="dialog-footer">
  109. <el-button type="primary" @click="centerDialogVisible = false">我已阅读</el-button>
  110. </span>
  111. </el-dialog>
  112. </div>
  113. </template>
  114. <script>
  115. export default {
  116. name: 'login',
  117. data () {
  118. return {
  119. options: [],
  120. areavalue:'中国',
  121. phone:true,
  122. forget:false,
  123. register:false,
  124. enterID:"请输入您的手机号码",
  125. centerDialogVisible: false,
  126. username:'',
  127. isRead:false,
  128. form:{
  129. mobile:'',
  130. email:'',
  131. password:'',
  132. redirect_uri:'http://33.cn',
  133. os:'web',
  134. type:'sms',
  135. area:'86',
  136. platform:'fx66',
  137. code:'',
  138. newpasswoord:'',
  139. againpassword:''
  140. }
  141. }
  142. },
  143. props:['isquit'],
  144. created(){
  145. this.$http.get('https://dev407.33.cn/api/data/country')
  146. .then(response=> {
  147. this.options=response.data.data
  148. })
  149. .catch(function (error) {
  150. console.log(error);
  151. })
  152. if (window.localStorage.username) {
  153. this.username=window.localStorage.username
  154. this.$emit('chuanzhi',this.username)
  155. }
  156. },
  157. methods:{
  158. empty(){
  159. this.form.mobile=''
  160. this.form.email=''
  161. this.form.password=''
  162. },
  163. alter(e){
  164. this.empty()
  165. if (e=="phone") {
  166. this.phone=true
  167. }else if (e=="email") {
  168. this.phone=false
  169. }else if (e=="forget") {
  170. this.forget=!this.forget
  171. }else if (e=="register") {
  172. this.register=!this.register
  173. }
  174. },
  175. apply(){
  176. this.$router.push("apply")
  177. },
  178. codechange(){
  179. for(let i in this.options){
  180. if (i.ch_name==this.areavalue) {
  181. this.form.area=i.code
  182. }
  183. }
  184. },
  185. login(){
  186. if (this.phone) {
  187. let parm = new URLSearchParams()
  188. parm.append('mobile',this.form.mobile)
  189. parm.append('password',this.form.password)
  190. parm.append('redirect_uri',this.form.redirect_uri)
  191. parm.append('os',this.form.os)
  192. parm.append('type','sms')
  193. parm.append('area',this.form.area)
  194. parm.append('platform',this.form.platform)
  195. this.$http.post('https://dev407.33.cn/api/broker/login',parm)
  196. .then(response => {
  197. console.log(response);
  198. if (response.data.code==200) {
  199. this.loginSucceed(response.data.data)
  200. }else{
  201. alert(response.data.message)
  202. }
  203. })
  204. .catch(function (error) {
  205. console.log(error);
  206. });
  207. }else {
  208. let parm = new URLSearchParams()
  209. parm.append('email',this.form.email)
  210. parm.append('password',this.form.password)
  211. parm.append('redirect_uri',this.form.redirect_uri)
  212. parm.append('os',this.form.os)
  213. parm.append('type','email')
  214. parm.append('platform',this.form.platform)
  215. this.$http.post('https://dev407.33.cn/api/broker/login',parm)
  216. .then(response=> {
  217. console.log(response);
  218. if (response.data.code==200) {
  219. this.loginSucceed(response.data.data)
  220. }else{
  221. alert(response.data.message)
  222. }
  223. })
  224. .catch(function (error) {
  225. console.log(error);
  226. });
  227. }
  228. this.empty()
  229. },
  230. verify(){
  231. if(!this.phone&&this.register) {
  232. let parm = new URLSearchParams();
  233. parm.append('param',"FzmDateTime|FzmRandom")
  234. parm.append('email',this.form.email)
  235. parm.append('codetype',"validate")
  236. parm.append('platkey',"zhaobi")
  237. this.$http.post("https://dev407.33.cn/api/send/newmail",parm)
  238. .then(response=>{
  239. console.log(response);
  240. alert(response.data.message)
  241. })
  242. .catch(error=>{
  243. console.log(error)
  244. })
  245. }else if(this.phone&&this.register){
  246. let parm = new URLSearchParams();
  247. parm.append('param',"FzmRandom")
  248. parm.append('mobile',this.form.mobile)
  249. parm.append('codetype',"validate")
  250. parm.append('area',this.form.area)
  251. parm.append('platkey',"zhaobi")
  252. this.$http.post("https://dev407.33.cn/api/send/newsms",parm)
  253. .then(response=>{
  254. console.log(response)
  255. alert(response.data.message)
  256. })
  257. .catch(error=>{
  258. console.log(error)
  259. })
  260. }else if (this.phone&&this.forget) {
  261. let parm = new URLSearchParams();
  262. parm.append('codetype',"validate")
  263. parm.append('param',"FzmRandom")
  264. parm.append('mobile',this.form.mobile)
  265. parm.append('area',this.form.area)
  266. parm.append('platkey',"zhaobi")
  267. this.$http.post("https://dev407.33.cn/api/send/newsms",parm)
  268. .then(response=>{
  269. console.log(response)
  270. alert(response.data.message)
  271. })
  272. .catch(error=>{
  273. console.log(error)
  274. })
  275. }
  276. },
  277. reg(){
  278. if (this.isRead==false) {
  279. alert('请先阅读风险提示')
  280. }else{
  281. if (!this.phone) {
  282. let parm = new URLSearchParams()
  283. parm.append('email',this.form.email)
  284. parm.append('password',this.form.password)
  285. parm.append('code',this.form.code)
  286. parm.append('type','email')
  287. this.$http.post("https://dev407.33.cn/api/broker/register",parm)
  288. .then(response=>{
  289. console.log(response);
  290. alert(response.data.message)
  291. })
  292. .catch(error=>{
  293. console.log(error)
  294. })
  295. }else{
  296. let parm = new URLSearchParams()
  297. parm.append('mobile',this.form.mobile)
  298. parm.append('password',this.form.password)
  299. parm.append('code',this.form.code)
  300. parm.append('type','sms')
  301. parm.append('area',this.form.area)
  302. this.$http.post("https://dev407.33.cn/api/broker/register",parm)
  303. .then(response=>{
  304. console.log(response);
  305. alert(response.data.message)
  306. })
  307. .catch(error=>{
  308. console.log(error)
  309. })
  310. }
  311. }
  312. },
  313. sendmail(){
  314. let parm = new URLSearchParams()
  315. parm.append('email',this.form.email)
  316. parm.append('type','email')
  317. parm.append('platCode','04031632e48cd96e')
  318. parm.append('ticket','')
  319. parm.append('businessId','')
  320. this.$http.post("https://dev407.33.cn/api/member/brokernewresetpassword",parm)
  321. .then(response=>{
  322. console.log(response);
  323. alert(response.data.message)
  324. })
  325. .catch(error=>{
  326. console.log(error)
  327. })
  328. },
  329. mobileFind(){
  330. let parm = new URLSearchParams()
  331. parm.append('area',this.form.area)
  332. parm.append('mobile',this.form.mobile)
  333. parm.append('type','sms')
  334. parm.append('broker_code','04031632e48cd96e')
  335. parm.append('password',this.form.newpassword)
  336. parm.append('password2',this.form.againpassword)
  337. parm.append('code',this.form.code)
  338. parm.append('os',this.form.os)
  339. this.$http.post("https://dev407.33.cn/api/member/brokernewresetpassword",parm)
  340. .then(response=>{
  341. console.log(response);
  342. alert(response.data.message)
  343. })
  344. .catch(error=>{
  345. console.log(error)
  346. })
  347. },
  348. loginSucceed(e){
  349. let sto=window.localStorage
  350. sto.userid=e.userid
  351. sto.username=e.username
  352. sto.token=e.access_token
  353. this.username=e.username
  354. this.$emit('chuanzhi',e.username)
  355. }
  356. }
  357. }
  358. </script>
  359. <!-- Add "scoped" attribute to limit CSS to this component only -->
  360. <style>
  361. .login-wrap[data-v-b25dc27c]{
  362. width: 1200px;
  363. margin: 0 auto;
  364. position: absolute;
  365. left: 50%;
  366. top: 0;
  367. margin-left: -600px;
  368. .login{
  369. width: 390px;
  370. background-color: rgba(255,255,255,0.4);
  371. padding: 15px;
  372. position: absolute;
  373. right: 0;
  374. top: 188px;
  375. z-index:50;
  376. .contain{
  377. background: white;
  378. padding: 50px 20px 0;
  379. color: #333;
  380. .tab{
  381. border-bottom: 2px solid #e5e5e5;
  382. margin-bottom: 30px;
  383. text-align: center;
  384. span{
  385. display: inline-block;
  386. font-size: 20px;
  387. color: #333;
  388. width: 110px;
  389. padding-bottom: 20px;
  390. cursor: pointer;
  391. }
  392. span.active{
  393. border-bottom: 2px solid #1a6fa6;
  394. margin-bottom: -2px;
  395. color: #1a6fa6;
  396. }
  397. }
  398. .input-line{
  399. position: relative;
  400. width: 310px;
  401. height: 50px;
  402. line-height: 50px;
  403. margin: 0 auto;
  404. border:1px solid #dcdcdc;
  405. text-align: left;
  406. margin-bottom: 10px;
  407. .icon-email{
  408. display: inline-block;
  409. width: 50px;
  410. height: 50px;
  411. text-align: center;
  412. border-right: 1px solid #dcdcdc;
  413. i{
  414. font-size: 24px;
  415. color: #ccc;
  416. }
  417. }
  418. .country{
  419. display: inline-block;
  420. width: 50px;
  421. height: 50px;
  422. text-align: center;
  423. border-right: 1px solid #dcdcdc;
  424. .el-input__inner{
  425. padding-left: 2px;
  426. height: 100%;
  427. border: none;
  428. padding-right: 14px;
  429. font-size: 12px;
  430. }
  431. .el-input__prefix, .el-input__suffix{
  432. right: 4px;
  433. width: 14px;
  434. }
  435. }
  436. .input{
  437. position: absolute;
  438. margin-top: 10px;
  439. padding-left: 10px;
  440. line-height: 30px;
  441. border: none;
  442. font-size: 14px;
  443. width: 250px;
  444. }
  445. .icon-password{
  446. display: inline-block;
  447. width: 50px;
  448. height: 50px;
  449. text-align: center;
  450. border-right: 1px solid #dcdcdc;
  451. i{
  452. font-size: 24px;
  453. color: #ccc;
  454. }
  455. }
  456. }
  457. .verification-line{
  458. width: 310px;
  459. height: 50px;
  460. line-height: 50px;
  461. margin: 0 auto 10px;
  462. text-align: left;
  463. input{
  464. border: 1px solid #dcdcdc;
  465. height: 50px;
  466. padding-left: 10px;
  467. line-height: 30px;
  468. font-size: 14px;
  469. }
  470. button{
  471. width: 130px;
  472. height: 50px;
  473. background: #ffe366;
  474. border: 0;
  475. position: absolute;
  476. margin-left: 10px;
  477. font-size: 14px;
  478. color: #666;
  479. cursor: pointer;
  480. }
  481. }
  482. .forget-register{
  483. width: 310px;
  484. margin: 10px auto 26px;
  485. line-height: 1;
  486. text-align: left;
  487. font-size: 14px;
  488. display: flex;
  489. justify-content: space-between;
  490. align-items: center;
  491. .cursor{
  492. cursor: pointer;
  493. }
  494. .blue{
  495. color: #1a6fa6;
  496. }
  497. .right{
  498. width: 100%;
  499. text-align: right;
  500. }
  501. }
  502. .submit-line{
  503. padding-bottom: 30px;
  504. text-align: center;
  505. .btn{
  506. width: 150px;
  507. height: 50px;
  508. font-size: 18px;
  509. background: #1a6fa6;
  510. color: white;
  511. border-radius: 0;
  512. }
  513. }
  514. p.LS{
  515. font-size: 25px;
  516. color: #1a6fa6;
  517. text-align: center;
  518. }
  519. button.LS{
  520. width: 100%;
  521. height: 50px;
  522. line-height: 50px;
  523. border: 1px solid #d2d2d2;
  524. background-color: transparent;
  525. margin-bottom: 20px;
  526. font-size: 18px;
  527. margin: 50px 0 65px;
  528. cursor: pointer;
  529. }
  530. }
  531. }
  532. .dialog-title{
  533. font-size: 24px;
  534. color: #165e8d;
  535. }
  536. }
  537. </style>