mobile.vue 6.3 KB

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