login.vue 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442
  1. <template>
  2. <view class="normal-login-container"
  3. style="background-image: url('https://jianyaoji.oss-cn-hangzhou.aliyuncs.com/jianyaoji/images/login/bg.png');background-size: 100% 100%;">
  4. <view class="logo-content align-center justify-center flex">
  5. <!-- <image style="width: 100rpx;height: 100rpx;" :src="globalConfig.appInfo.logo" mode="widthFix">-->
  6. <!-- </image>-->
  7. <text class="title">老药师云平台移动端登录</text>
  8. </view>
  9. <view style="position: fixed;top:1vw;left:1vh;font-size: 12px;color: white;">
  10. 版本号:{{version}}
  11. </view>
  12. <view class="login-form-content">
  13. <view class="input-item flex align-center">
  14. <view class="iconfont icon-user icon"></view>
  15. <input v-model="loginForm.username" class="input" type="text" placeholder="请输入账号" maxlength="30" />
  16. </view>
  17. <view class="input-item flex align-center">
  18. <view class="iconfont icon-password icon"></view>
  19. <input v-model="loginForm.password" type="password" class="input" placeholder="请输入密码" maxlength="20" />
  20. </view>
  21. <view class="input-item flex align-center" style="width: 60%;margin: 0px;" v-if="captchaEnabled">
  22. <view class="iconfont icon-code icon"></view>
  23. <input v-model="loginForm.code" type="number" class="input" placeholder="请输入验证码" maxlength="4" />
  24. <view class="login-code">
  25. <image :src="codeUrl" @click="getCode" class="login-code-img"></image>
  26. </view>
  27. </view>
  28. <view class="action-btn">
  29. <button @click="handleLogin" class="login-btn cu-btn block bg-blue lg round">登 录</button>
  30. </view>
  31. <view class="action-btn">
  32. <button class="login-btn cu-btn block bg-blue lg round" open-type="getPhoneNumber"
  33. @getphonenumber="getPhoneNumber">注 册</button>
  34. </view>
  35. </view>
  36. <view class="xieyi text-center">
  37. <!-- <text class="text-grey1">登录即代表同意</text>-->
  38. <!-- <text @click="handleUserAgrement" class="text-blue">《用户协议》</text>-->
  39. <!-- <text @click="handlePrivacy" class="text-blue">《隐私协议》</text>-->
  40. </view>
  41. <u-modal title="客户注册信息" @cancel="closeDlg" confirmText="提交审核" :showCancelButton="true" @confirm="submitReg"
  42. :show="show">
  43. <view class="slot-content">
  44. <u--form labelPosition="left" :model="model1" ref="s">
  45. <u-form-item label="*客户名称:" prop="chooseUser.deptName" borderBottom ref="item1" labelWidth="auto">
  46. <u--input v-model="chooseUser.deptName" border="none"></u--input>
  47. </u-form-item>
  48. <u-form-item label="*联系人:" prop="chooseUser.leader" borderBottom ref="item1" labelWidth="auto">
  49. <u--input v-model="chooseUser.leader" border="none"></u--input>
  50. </u-form-item>
  51. <u-form-item label="手机号:" prop="chooseUser.phone" borderBottom ref="item1" labelWidth="auto">
  52. <u--input v-model="chooseUser.phone" border="none"></u--input>
  53. </u-form-item>
  54. <u-form-item label="*密码:" prop="chooseUser.password" borderBottom ref="item1" labelWidth="auto">
  55. <u--input v-if="show" v-model="chooseUser.password" border="none"></u--input>
  56. </u-form-item>
  57. <u-form-item label="登录账号:" borderBottom ref="item1" labelWidth="auto">
  58. <u--input v-model="chooseUser.phone" border="none" disabled></u--input>
  59. </u-form-item>
  60. <u-form-item label="*订单图片:" borderBottom ref="item1" labelWidth="auto">
  61. <u-upload :fileList="fileList" name="1" multiple :maxCount="1" :previewFullImage="true"
  62. :width="auto" :height="auto" @delete="deletePic" @afterRead="afterRead"></u-upload>
  63. </u-form-item>
  64. </u--form>
  65. </view>
  66. </u-modal>
  67. <u-modal title="注册记录" @cancel="closereg" confirmText="重新注册" :showCancelButton="true" @confirm="submitRegTo"
  68. :show="registersshow">
  69. <view class="slot-content">
  70. <u--form labelPosition="left" :model="model1" ref="s">
  71. <u-form-item label="客户名称:" prop="registers.deptName" borderBottom ref="item1" labelWidth="auto">
  72. <u--input v-model="registers.deptName" border="none" :disabled="true"></u--input>
  73. </u-form-item>
  74. <u-form-item label="联系人:" prop="registers.leader" borderBottom ref="item1" labelWidth="auto">
  75. <u--input v-model="registers.leader" border="none" :disabled="true"></u--input>
  76. </u-form-item>
  77. <u-form-item label="手机号:" prop="registers.phone" borderBottom ref="item1" labelWidth="auto">
  78. <u--input v-model="registers.phone" border="none" :disabled="true"></u--input>
  79. </u-form-item>
  80. <u-form-item label="密码:" prop="registers.password" borderBottom ref="item1" labelWidth="auto">
  81. <u--input v-if="registersshow" v-model="registers.password" border="none"
  82. :disabled="true"></u--input>
  83. </u-form-item>
  84. <u-form-item label="登录账号:" borderBottom ref="item1" labelWidth="auto">
  85. <u--input v-model="registers.phone" border="none" disabled :disabled="true"></u--input>
  86. </u-form-item>
  87. <u-form-item label="注册状态:" borderBottom ref="item1" labelWidth="auto">
  88. <!-- this.registers.status==1&&this.registers.delFlag==0 -->
  89. <view v-if="registers.status==0" style="color:#1a62ff;">审核中</view>
  90. <view v-if="registers.status==1&&registers.delFlag==0">审核完成,<text
  91. style="color: crimson;">未通过原因:</text><text>{{registers.remark}}</text></view>
  92. </u-form-item>
  93. </u--form>
  94. </view>
  95. </u-modal>
  96. </view>
  97. </template>
  98. <script>
  99. import {
  100. getCodeImg,
  101. uploadRegister,
  102. getPhone,
  103. checkReg
  104. } from '@/api/login'
  105. import {
  106. getToken
  107. } from "@/utils/auth";
  108. import {
  109. checkStr
  110. } from "@/utils/validate";
  111. export default {
  112. data() {
  113. return {
  114. version: "",
  115. codeUrl: "",
  116. captchaEnabled: true,
  117. globalConfig: getApp().globalData.config,
  118. loginForm: {
  119. username: "",
  120. password: "",
  121. code: "",
  122. uuid: '',
  123. },
  124. show: false,
  125. chooseUser: {},
  126. fileList: [],
  127. registers: {},
  128. registersshow: false
  129. }
  130. },
  131. created() {
  132. this.show = false,
  133. this.getVersion();
  134. this.checkLogin();
  135. },
  136. methods: {
  137. getPhoneNumber(e) {
  138. console.log(e.detail.code) // 动态令牌
  139. // console.log(e.detail.code) // 动态令牌
  140. // console.log(e.detail.errMsg) // 回调信息(成功失败都会返回)
  141. // console.log(e.detail.errno) // 错误码(失败时返回)
  142. this.newUser(e.detail.code);
  143. },
  144. toRegister() {
  145. },
  146. submitReg() {
  147. //注册数据提交
  148. if (this.chooseUser.deptName === ""||this.chooseUser.deptName ==null) {
  149. this.$modal.msgError("请输入客户名")
  150. } else if (this.chooseUser.phone === ""||this.chooseUser.phone ==null) {
  151. this.$modal.msgError("请输入手机号")
  152. } else if (this.chooseUser.leader === ""||this.chooseUser.leader ==null) {
  153. this.$modal.msgError("请输入负责人")
  154. } else if(this.chooseUser.password === ""||this.chooseUser.password ==null) {
  155. this.$modal.msgError("请输入登录密码")
  156. }else if(this.fileList[0]===''||this.fileList[0]==null){
  157. this.$modal.msgError("请输上传订单图片")
  158. }else{
  159. uploadRegister({
  160. formdata: this.chooseUser,
  161. name: 'register',
  162. file: this.fileList[0].url
  163. }).then(res => {
  164. uni.showToast({
  165. title: '注册信息已提交',
  166. duration: 2000
  167. });
  168. this.show = false
  169. })
  170. }
  171. },
  172. deletePic(event) {
  173. this.fileList = []
  174. },
  175. async afterRead(file, lists, name) {
  176. //{"file":[{"size":542091,"type":"image","url":"http://tmp/MPgJgECRVMUFe49f23795545b0cd35400a9b70a9f918.jpg",
  177. //"thumb":"http://tmp/MPgJgECRVMUFe49f23795545b0cd35400a9b70a9f918.jpg"}],"name":"1","index":0}
  178. if (file.file[0].size > 2048 * 1000) {
  179. this.$modal.errMsg("图片大于2M")
  180. } else {
  181. this.fileList = file.file
  182. }
  183. },
  184. newUser(code) {
  185. let self = this
  186. uni.showLoading({
  187. title: '获取手机号...'
  188. });
  189. wx.login({
  190. success(res) {
  191. if (res.code) {
  192. let data = {
  193. loginCode: res.code,
  194. phoneCode: code
  195. }
  196. //获取到手机号
  197. getPhone(data).then(res => {
  198. //console.log("获取到手机号信息结果<>>" + JSON.stringify(res))
  199. if (checkStr(res.data.phone, 'mobile')) {
  200. //console.log("................" + res.data.phone)
  201. self.chooseUser.phone = res.data.phone
  202. self.chooseUser.openId = res.data.openId
  203. //通过手机号校验注册信息
  204. checkReg(res.data.phone).then(res => {
  205. //console.log("校验注册信息结果<>>" + JSON.stringify(res))
  206. if (res.data.code == 0) {
  207. //已注册待审核
  208. self.registers = res.data.res
  209. self.registersshow = true
  210. } else if (res.data.code == 1) {
  211. //已注册且通过审核,但是用户可能已被删除
  212. self.show = true;
  213. } else if (res.data.code == 2) {
  214. //未注册,进入注册页
  215. self.show = true;
  216. } else if(res.data.code==3){
  217. uni.showToast({
  218. title: '已存在客户信息',
  219. duration: 2000,
  220. icon:'none'
  221. });
  222. }else{
  223. //已注册未通过审核
  224. self.registers = res.data.res
  225. self.registersshow = true
  226. }
  227. uni.hideLoading();
  228. }).catch(res => {
  229. uni.showToast({
  230. title: '校验信息失败',
  231. duration: 2000,
  232. icon:'none'
  233. });
  234. })
  235. } else {
  236. uni.showToast({
  237. title: '手机号获取异常',
  238. duration: 2000,
  239. icon:'none'
  240. });
  241. }
  242. //self.show = true;
  243. }).catch(res => {
  244. uni.showToast({
  245. title: '获取手机号异常',
  246. duration: 2000,
  247. icon:'none'
  248. });
  249. })
  250. } else {
  251. console.log('获取code失败!' + res.errMsg)
  252. }
  253. }
  254. })
  255. },
  256. closereg() {
  257. this.registersshow = false
  258. this.registers = {}
  259. },
  260. submitRegTo() {
  261. //审核中
  262. if (this.registers.status == 0) {
  263. uni.showToast({
  264. title: '已在审核中...',
  265. duration: 1500,
  266. icon: 'loading'
  267. });
  268. this.registersshow = false
  269. this.show = false
  270. this.registers = {}
  271. } else if (this.registers.status == 1 && this.registers.delFlag == 0) {
  272. //审核完成且失败允许重新注册
  273. this.registersshow = false
  274. this.show = true
  275. }
  276. },
  277. closeDlg() {
  278. this.show = false;
  279. this.chooseUser = {};
  280. },
  281. checkLogin() {
  282. let token = getToken()
  283. if (token) {
  284. this.loginSuccess()
  285. } else {
  286. this.getCode()
  287. }
  288. },
  289. // 隐私协议
  290. handlePrivacy() {
  291. let site = this.globalConfig.appInfo.agreements[0]
  292. this.$tab.navigateTo(`/pages/common/webview/index?title=${site.title}&url=${site.url}`)
  293. },
  294. // 用户协议
  295. handleUserAgrement() {
  296. let site = this.globalConfig.appInfo.agreements[1]
  297. this.$tab.navigateTo(`/pages/common/webview/index?title=${site.title}&url=${site.url}`)
  298. },
  299. // 获取图形验证码
  300. getCode() {
  301. getCodeImg().then(res => {
  302. this.captchaEnabled = res.captchaEnabled === undefined ? true : res.captchaEnabled
  303. if (this.captchaEnabled) {
  304. this.codeUrl = 'data:image/gif;base64,' + res.img
  305. this.loginForm.uuid = res.uuid
  306. }
  307. })
  308. },
  309. getVersion() {
  310. let appBaseInfo = uni.getAppBaseInfo();
  311. let appVersionCode = appBaseInfo.appVersionCode;
  312. this.version = appVersionCode;
  313. },
  314. // 登录方法
  315. async handleLogin() {
  316. if (this.loginForm.username === "") {
  317. this.$modal.msgError("请输入您的账号")
  318. } else if (this.loginForm.password === "") {
  319. this.$modal.msgError("请输入您的密码")
  320. } else if (this.loginForm.code === "" && this.captchaEnabled) {
  321. this.$modal.msgError("请输入验证码")
  322. } else {
  323. this.$modal.loading("登录中,请耐心等待...")
  324. this.pwdLogin()
  325. }
  326. },
  327. // 密码登录
  328. async pwdLogin() {
  329. this.$store.dispatch('Login', this.loginForm).then(() => {
  330. this.$modal.closeLoading()
  331. this.loginSuccess()
  332. }).catch(() => {
  333. if (this.captchaEnabled) {
  334. this.getCode()
  335. }
  336. })
  337. },
  338. // 登录成功后,处理函数
  339. loginSuccess(result) {
  340. // 设置用户信息
  341. this.$store.dispatch('GetInfo').then(res => {
  342. this.$tab.reLaunch('/pages/work/index')
  343. })
  344. }
  345. }
  346. }
  347. </script>
  348. <style lang="scss">
  349. page {
  350. background-color: #ffffff;
  351. }
  352. .normal-login-container {
  353. width: 100%;
  354. position: absolute;
  355. top: 0px;
  356. bottom: 0;
  357. left: 0;
  358. right: 0;
  359. .logo-content {
  360. width: 100%;
  361. font-size: 21px;
  362. text-align: center;
  363. padding-top: 15%;
  364. image {
  365. border-radius: 4px;
  366. }
  367. .title {
  368. margin-left: 10px;
  369. color: #FFFFFF;
  370. font-size: 56rpx;
  371. }
  372. }
  373. .login-form-content {
  374. text-align: center;
  375. margin: 20px auto;
  376. margin-top: 15%;
  377. width: 90%;
  378. background: white;
  379. border-radius: 30rpx;
  380. box-shadow: 0rpx 5rpx 27rpx 0rpx rgba(195, 195, 195, 2.4);
  381. padding: 10%;
  382. .input-item {
  383. margin: 20px auto;
  384. background-color: #f5f6f7;
  385. height: 45px;
  386. border-radius: 20px;
  387. .icon {
  388. font-size: 38rpx;
  389. margin-left: 10px;
  390. color: #999;
  391. }
  392. .input {
  393. width: 100%;
  394. font-size: 14px;
  395. line-height: 20px;
  396. text-align: left;
  397. padding-left: 15px;
  398. //background: rgb(224,236,255);
  399. }
  400. }
  401. .login-btn {
  402. margin-top: 40px;
  403. height: 45px;
  404. }
  405. .xieyi {
  406. color: #333;
  407. margin-top: 20px;
  408. }
  409. .login-code {
  410. height: 38px;
  411. float: right;
  412. .login-code-img {
  413. height: 38px;
  414. position: absolute;
  415. margin-left: 10px;
  416. width: 200rpx;
  417. }
  418. }
  419. }
  420. }
  421. </style>