login.vue 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. <template>
  2. <view class="main">
  3. <view class="login">
  4. <view class="logo">
  5. <image class="faceu" aspectFill src="/static/login@2x.png" />
  6. </view>
  7. <view class="title">
  8. <text class="text">中药处方煎配溯源管理</text>
  9. </view>
  10. <uni-forms :model="formData">
  11. <uni-forms-item name="name">
  12. <uni-icons class="item" type="person-filled" color="#999999" size="30"></uni-icons>
  13. <view class="input">
  14. <input type="text" class="item" v-model="formData.username" placeholder="请输入账号" />
  15. </view>
  16. </uni-forms-item>
  17. <uni-forms-item name="password">
  18. <uni-icons type="locked" class="item" color="#999999" size="30"></uni-icons>
  19. <view class="input">
  20. <input class="item" v-model="formData.password" :password="showPassword" placeholder="请输入密码" />
  21. <uni-icons custom-prefix="iconfont" class="item" :type="showPassword?'icon-biyanjing':'icon-yanjing'" color="#999999" size="30" @click="changePassword"></uni-icons>
  22. </view>
  23. </uni-forms-item>
  24. <label for="" class="radio">
  25. <switch :checked="formData.remember" style="transform:scale(0.7)" @change="handleChange" /> 记住密码
  26. </label>
  27. </uni-forms>
  28. <button class="button" @click="submit">登录</button>
  29. </view>
  30. </view>
  31. </template>
  32. <script>
  33. export default {
  34. name: ''
  35. }
  36. </script>
  37. <script setup>
  38. import { onMounted, ref } from 'vue'
  39. import { login } from '@/static/js/request.js'
  40. import { onLoad } from '@dcloudio/uni-app'
  41. import { updateOnlineStatus } from "@/static/js/api.js"
  42. const showPassword = ref(false)
  43. const formData = ref({
  44. username:'',
  45. password:'',
  46. remember:false
  47. })
  48. onLoad(() => {
  49. const sRemember = false
  50. if(uni.getStorageSync('remember')){
  51. JSON.parse(uni.getStorageSync('remember'))
  52. }
  53. console.log('onLoad sRemember', sRemember)
  54. if(sRemember && sRemember===true){
  55. formData.value.username = uni.getStorageSync('username')
  56. formData.value.password = uni.getStorageSync('password')
  57. formData.value.remember = true
  58. }
  59. })
  60. const submit = async ()=> {
  61. console.log('formData', formData.value)
  62. if(formData.value.name && formData.value.password && formData.value.remember=== true ){
  63. uni.setStorageSync('username', formData.value.name)
  64. uni.setStorageSync('password', formData.value.password)
  65. uni.setStorageSync('remember', formData.value.remember)
  66. uni.setStorageSync('workStatus', formData.value.remember);
  67. }
  68. const params = {
  69. username: formData.value.username,
  70. password: formData.value.password,
  71. code: '2',
  72. }
  73. let {data:res} = await login(params)
  74. console.log('res',res.code)
  75. if (res.code === 200 && res.token && res.userId) {
  76. uni.setStorageSync('token', res.token)
  77. uni.setStorageSync('userId', res.userId)
  78. // uni.$emit('login',{userId:res.userId})
  79. console.log('11')
  80. console.log('res.token',res.token)
  81. // JSON.stringify(params.data.data)
  82. const param = {
  83. token: res.token,
  84. data: JSON.stringify({ pharmacistUserId: res.userId, onlineStatus: 0})
  85. }
  86. console.log('res.param',param)
  87. await updateOnlineStatus(param)
  88. uni.redirectTo({
  89. url:"/pages/index/index"
  90. })
  91. } else {
  92. console.log('登录失败')
  93. uni.$showMsg('登录失败', 1500)
  94. // TODO 本地测试
  95. // uni.redirectTo({
  96. // url:"/pages/index/index"
  97. // })
  98. }
  99. }
  100. const handleChange = ()=>{
  101. formData.value.remember = !formData.value.remember
  102. console.log('formData.value.username',formData.value.username)
  103. console.log('formData.value.password',formData.value.password)
  104. console.log('formData.value.remember',formData.value.remember)
  105. // 如果为true本地保存账号密码
  106. if(formData.value.remember === true){
  107. uni.setStorageSync('username', formData.value.username)
  108. uni.setStorageSync('password', formData.value.password)
  109. uni.setStorageSync('remember', true)
  110. } else{
  111. uni.removeStorageSync('username')
  112. uni.removeStorageSync('password')
  113. uni.removeStorageSync('remember')
  114. }
  115. }
  116. const changePassword = ()=>{
  117. showPassword.value = ! showPassword.value
  118. }
  119. onMounted(() => {
  120. const username = uni.getStorageSync('username')
  121. const password = uni.getStorageSync('password')
  122. const remember = uni.getStorageSync('remember')
  123. // console.log('name password remember', name,password,remember)
  124. if (typeof(username)===typeof(password)==='string' && remember) {
  125. formData.value.username = username
  126. formData.value.password = password
  127. formData.value.remember = remember
  128. }
  129. })
  130. </script>
  131. <style lang="scss">
  132. @import "@/static/iconfont.css";
  133. .main{
  134. justify-content: center;
  135. align-items: center;
  136. background-color: #fff;
  137. .login {
  138. display: flex;
  139. flex-direction:column;
  140. align-items: center;
  141. width: 614px;
  142. border-radius: 40px;
  143. background-color: #fff;
  144. margin-top: 43.75rpx;
  145. :deep(.uni-forms){
  146. margin-top: 50rpx;
  147. // width: 614px;
  148. };
  149. .radio{
  150. font-size: 14px;
  151. :deep(.uni-switch-input.uni-switch-input-checked){
  152. border-color: #18C7B0;
  153. background-color: #18C7B0;
  154. }
  155. }
  156. .logo{
  157. display: flex;
  158. .faceu{
  159. display: flex;
  160. justify-content: center;
  161. align-items: center;
  162. width: 487.5rpx;
  163. height: 340rpx;
  164. }
  165. }
  166. .title {
  167. font-size: 30rpx;
  168. font-weight: bolder;
  169. margin-top: 46.25rpx;
  170. width: 750rpx;
  171. display: flex;
  172. justify-content: flex-start;
  173. .text{
  174. margin-left: 34rpx;
  175. }
  176. }
  177. :deep(.uni-forms-item__content) {
  178. display: flex;
  179. flex-direction:row;
  180. border-bottom: 1px solid #bcbcbc;
  181. .input{
  182. margin-left: 20rpx;
  183. width: 500rpx;
  184. height: 30rpx;
  185. color:#bcbcbc;
  186. display: flex;
  187. align-items: center;
  188. justify-content: space-between;
  189. :deep(.uni-input-wrapper){
  190. font-size: 15rpx;
  191. width: 600rpx;
  192. }
  193. }
  194. .item{
  195. font-size: 15rpx;
  196. color: #999999;
  197. }
  198. }
  199. :deep(.uni-label-pointer) {
  200. // margin-left: 10rpx;
  201. }
  202. .button {
  203. background-color: #F2F2F2;
  204. margin-top: 50rpx;
  205. color: #999999;
  206. height: 50rpx;
  207. width: 500rpx;
  208. font-size: 20rpx;
  209. display: flex;
  210. justify-content: center;
  211. align-items: center;
  212. }
  213. }
  214. }
  215. </style>