mobile.vue 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. <template>
  2. <div class="mobileLogin">
  3. <div class="login-content">
  4. <div class="login-content-center" v-if="!show">
  5. <div class="login-input-box">
  6. <div class="login-item">
  7. <input class="login-input" type="text" placeholder="请输入设备ID" v-model.trim="loginForm.deviceid" />
  8. </div>
  9. <div class="login-item">
  10. <input class="login-input" type="text" placeholder="请输入帐号" v-model.trim="loginForm.username" />
  11. </div>
  12. <div class="login-item">
  13. <input class="login-input" type="password" autocomplete="off" placeholder="请输入密码"
  14. v-model.trim="loginForm.password" />
  15. </div>
  16. <div @click="getLogin" class="login-btn">登 录</div>
  17. </div>
  18. </div>
  19. <div v-else class="login-content-center">
  20. <div class="login-input-box">
  21. <div style="margin-bottom: 15px;font-size: 5rem;">SN:{{ loginForm.deviceid }}</div>
  22. <div class="login-item">
  23. <div @click="getCmdtest(1)" class="login-btn" style="width:100%;">1、左滑动(切换项目)</div>
  24. </div>
  25. <div class="login-item">
  26. <div @click="getCmdtest(2)" class="login-btn" style="width:100%;">2、举左手(确认)</div>
  27. </div>
  28. <div class="login-item" style="margin-bottom: 0;">
  29. <div @click="getCmdtest(3)" class="login-btn" style="width:100%;">3、双手胸前交叉(退出)</div>
  30. </div>
  31. </div>
  32. </div>
  33. </div>
  34. </div>
  35. </template>
  36. <script setup name="MobileLogin" lang="ts">
  37. const { proxy } = getCurrentInstance() as any;
  38. const router = useRouter();
  39. const route = useRoute();
  40. const data = reactive<any>({
  41. show: false,
  42. handcontroller: '',
  43. loginForm: {
  44. deviceid: '',
  45. username: '',
  46. password: ''
  47. },
  48. loading: false,
  49. });
  50. const { show, handcontroller, loginForm, loading } = toRefs(data);
  51. // 登录
  52. const getLogin = () => {
  53. let sid = route.query.sid;
  54. if (sid == undefined && !sid) {
  55. proxy?.$modal.msgError("缺少SID,请重新扫码!");
  56. return false;
  57. }
  58. let deviceid = loginForm.value.deviceid;
  59. let username = loginForm.value.username;
  60. let password = loginForm.value.password;
  61. if (!deviceid || !username || !password) {
  62. proxy?.$modal.msgWarning("请填写完整信息!");
  63. return false;
  64. }
  65. loading.value = true;
  66. proxy?.$modal.loading();
  67. let params = {
  68. sid,
  69. deviceid,
  70. username,
  71. password,
  72. };
  73. proxy?.$http.common.qrlogin(params).then((res: any) => {
  74. if (res.access_token) {
  75. show.value = true
  76. //保存token
  77. let token = res.access_token;
  78. localStorage.setItem("token", token);
  79. setTimeout(() => {
  80. getDeviceInfo()
  81. }, 500)
  82. }
  83. }).catch(() => {
  84. }).finally(() => {
  85. loading.value = false;
  86. proxy?.$modal?.closeLoading();
  87. });
  88. };
  89. // 设备信息
  90. const getDeviceInfo = () => {
  91. let deviceid = loginForm.value.deviceid;
  92. let params = {
  93. search_info: deviceid,
  94. page: 1,
  95. per_page: 1,
  96. };
  97. proxy?.$http.common.deviceInfo(params).then((res: any) => {
  98. if (res.data.length) {
  99. handcontroller.value = res.data[0]?.handcontroller_id
  100. }
  101. }).catch(() => {
  102. }).finally(() => { });
  103. };
  104. /**
  105. * 模拟发送手势
  106. */
  107. const getCmdtest = (data: any) => {
  108. let params = {
  109. hctrl_name: `handcontroller_${handcontroller.value}`,
  110. cmd: data
  111. };
  112. proxy?.$http.common.cmdtest(params).then((res: any) => {
  113. proxy?.$modal.msgSuccess("发送成功");
  114. }).catch(() => {
  115. proxy?.$modal.msgError("发送失败");
  116. }).finally(() => { });
  117. };
  118. onMounted(() => {
  119. let sid = route.query.sid;
  120. let deviceid = route.query.deviceid;
  121. if (sid == undefined && !sid) {
  122. proxy?.$modal.msgError("缺少SID,请重新扫码!");
  123. return false;
  124. }
  125. //测试环境默认密码
  126. if (import.meta.env.DEV) {
  127. loginForm.value.deviceid = deviceid ? deviceid : '38715692';
  128. loginForm.value.username = 'manage1';
  129. loginForm.value.password = 'trops@2022';
  130. }
  131. if (deviceid) {
  132. loginForm.value.deviceid = deviceid;
  133. }
  134. })
  135. </script>
  136. <style lang="scss" scoped>
  137. .mobileLogin {
  138. width: 100%;
  139. height: 100vh;
  140. background: url("@/assets/images/gesture/mobile.png") top center no-repeat;
  141. background-size: cover;
  142. .login-content {
  143. width: 80%;
  144. height: 100vh;
  145. margin: 0 auto;
  146. display: flex;
  147. align-items: flex-end;
  148. justify-content: center;
  149. .login-content-center {
  150. display: flex;
  151. text-align: center;
  152. justify-content: center;
  153. flex-wrap: wrap;
  154. width: 100%;
  155. .login-input-box {
  156. display: flex;
  157. justify-content: center;
  158. align-items: center;
  159. flex-direction: column;
  160. width: 100%;
  161. padding: 5vh 0;
  162. border-radius: 2rem;
  163. opacity: 1;
  164. background-color: rgba(#ffffff, 0.9);
  165. margin-bottom: 11vh;
  166. .login-item {
  167. width: 100%;
  168. padding: 0 10%;
  169. box-sizing: border-box;
  170. margin-bottom: 4.5rem;
  171. display: flex;
  172. justify-content: center;
  173. .login-input {
  174. width: 100%;
  175. height: 10rem;
  176. line-height: 10rem;
  177. border-radius: 1rem;
  178. padding: 0 1rem;
  179. text-align: center;
  180. font-size: 4rem;
  181. opacity: 1;
  182. background: #EAEAEA;
  183. box-sizing: border-box;
  184. border: 1px solid #FFFFFF;
  185. box-shadow: inset 0px 0px 10px 1px rgba(78, 78, 78, 0.2);
  186. }
  187. }
  188. .login-btn {
  189. width: 60%;
  190. height: 10rem;
  191. line-height: 10rem;
  192. border-radius: 5rem;
  193. font-size: 4.5rem;
  194. opacity: 1;
  195. text-align: center;
  196. cursor: pointer;
  197. background: radial-gradient(141% 126% at 5% 93%, #8EFFA9 0%, #07FFE7 100%);
  198. &:hover {
  199. background: #8EFFA9;
  200. }
  201. }
  202. }
  203. }
  204. }
  205. }
  206. </style>