SamlLogin.vue 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. <template>
  2. <div class="login">
  3. <div class="login_wrapper">
  4. <div class="login_form">
  5. <h3 style="text-align: center;margin-top: 30px">单点登录</h3>
  6. <div class="separator" />
  7. <div class="selectItem">
  8. <label for="">客户端</label>
  9. <select v-model="internet" name="language-choice" class="form-control" style="width:100%">
  10. <option value="pc">电脑端</option>
  11. <option value="mobile">移动端</option>
  12. <option value="propass">Propass</option>
  13. </select>
  14. </div>
  15. <div class="selectItem">
  16. <label>语言</label>
  17. <select
  18. v-model="languageSelected"
  19. name="language-choice"
  20. class="form-control"
  21. style="width:100%"
  22. >
  23. <option value="zh-CN">中文</option>
  24. <option value="en-US">English</option>
  25. </select>
  26. </div>
  27. <button class="btn btn-default" style="width: 100%;" @click="azureSamlLogin">确认</button>
  28. </div>
  29. </div>
  30. </div>
  31. </template>
  32. <script>
  33. import Common from '../common/Common.js';
  34. import LoginService from './LoginService.js';
  35. export default {
  36. data: function () {
  37. return {
  38. internet: 'pc',
  39. languageSelected: 'zh-CN',
  40. };
  41. },
  42. methods: {
  43. // 单点登录
  44. azureSamlLogin: function () {
  45. let _self = this;
  46. const params = {
  47. languageId: _self.languageSelected,
  48. };
  49. $.ajax({
  50. url: Common.getApiURL('SamlLogin/login'),
  51. type: 'post',
  52. async: true,
  53. data: params,
  54. success: function (loginInfoData) {
  55. if (loginInfoData.errorCode == 0) {
  56. if (_self.internet === 'pc') {
  57. LoginService.setLoginInfo(loginInfoData.data, _self.$router);
  58. LoginService.saveLocalStorage(_self);
  59. _self.setTokenClient(loginInfoData.data.token);
  60. localStorage.setItem('allowSound', false);
  61. window.location.href =
  62. Common.getRootPath() + '/#/desktop/dashboard';
  63. } else if (_self.internet === 'mobile') {
  64. var loginInfo = loginInfoData.data;
  65. Common.clearLocalStorage();
  66. Common.clearAppCookie(loginInfo);
  67. _self.setAppLocalStorage(loginInfo);
  68. _self.setTokenClient();
  69. window.location.href =
  70. Common.getRootPath() + '/app.html#/desktop/moduleSelect';
  71. } else {
  72. Common.clearLocalStorage();
  73. $.removeCookie('token', { path: '/' });
  74. $.removeCookie('token', { path: '/pcapp' });
  75. $.cookie('token', loginInfoData.data.token, {
  76. expires: 7,
  77. path: '/',
  78. });
  79. _self.setPropassLocalStorage(loginInfoData);
  80. window.location.href =
  81. Common.getRootPath() + '/propass.html#/propassapp/menu';
  82. }
  83. } else {
  84. Notify.error(
  85. _self.$t('lang.login.loginFailure'),
  86. loginInfoData.errorMessage,
  87. );
  88. }
  89. },
  90. error: function (XMLHttpRequest, textStatus, errorThrown) {
  91. Common.processException(XMLHttpRequest, textStatus, errorThrown);
  92. },
  93. });
  94. },
  95. // 设置 App localStorage
  96. setAppLocalStorage: function (loginInfo) {
  97. const _self = this;
  98. if (!window.localStorage) {
  99. Notify.error('错误', '浏览器不支持localstorage', false);
  100. } else {
  101. const storage = window.localStorage;
  102. const loginInfo1 = JSON.stringify(loginInfo);
  103. storage.setItem('#loginInfo', loginInfo1);
  104. storage.setItem('account', loginInfo.accountId);
  105. storage.setItem('token', loginInfo.token);
  106. storage.setItem('rememberPassword', false);
  107. localStorage.setItem('#languageSelected', _self.languageSelected);
  108. }
  109. },
  110. // 设置 Propass localStorage
  111. setPropassLocalStorage: function (loginInfo) {
  112. const _self = this;
  113. const loginInfoStr = JSON.stringify(loginInfo);
  114. localStorage.setItem('json_LoginInfo', loginInfoStr);
  115. localStorage.setItem('#token', loginInfo.data.token);
  116. localStorage.setItem('#accountId', loginInfo.data.accountId);
  117. localStorage.setItem('#languageSelected', _self.languageSelected);
  118. localStorage.setItem('rememberPassword', false);
  119. },
  120. //设置 TokenClient
  121. setTokenClient: function () {
  122. const _self = this;
  123. $.ajax({
  124. url: Common.getApiURL('TokenClientResource/saveTokenClient'),
  125. type: 'post',
  126. dataType: 'json',
  127. contentType: 'application/json',
  128. beforeSend: function (request) {
  129. if (_self.internet === 'pc') {
  130. request.setRequestHeader('token', localStorage.getItem('#token'));
  131. } else {
  132. let token = $.cookie('token');
  133. let account = $.cookie('account');
  134. if (token == undefined) {
  135. const localStorageToken = localStorage.getItem('token');
  136. if (localStorageToken != undefined) {
  137. token = localStorageToken;
  138. }
  139. }
  140. if (account == undefined) {
  141. const localStorageAccount = localStorage.getItem('account');
  142. if (localStorageAccount != undefined) {
  143. account = localStorageAccount;
  144. }
  145. }
  146. request.setRequestHeader('account', account);
  147. request.setRequestHeader('token', token);
  148. }
  149. },
  150. success: function (baseObjectResponse) {
  151. console.log(baseObjectResponse, 'token添加成功');
  152. },
  153. error: function (XMLHttpRequest, textStatus, errorThrown) {
  154. Common.processException(XMLHttpRequest, textStatus, errorThrown);
  155. },
  156. });
  157. },
  158. },
  159. };
  160. </script>
  161. <style scoped>
  162. .login_wrapper {
  163. margin: 0px auto;
  164. padding-top: 5%;
  165. max-width: 350px;
  166. position: relative;
  167. }
  168. .login_form {
  169. top: 0px;
  170. width: 100%;
  171. }
  172. #login_box {
  173. width: 40%;
  174. height: 400px;
  175. margin: auto;
  176. margin-top: 4%;
  177. text-align: center;
  178. border-radius: 10px;
  179. padding: 50px 50px;
  180. border: 1px solid #dddddd;
  181. }
  182. h2 {
  183. margin-top: 5%;
  184. }
  185. .selectItem {
  186. display: flex;
  187. align-items: center;
  188. margin: 16px 0 16px 0;
  189. }
  190. .selectItem > label {
  191. width: 100px;
  192. text-align: left;
  193. font-size: 15px !important;
  194. color: rgba(0, 0, 0, 0.6);
  195. }
  196. .confirmBtn {
  197. margin-top: 50px;
  198. width: 60%;
  199. height: 30px;
  200. border-radius: 6px;
  201. border: 1px solid #e6e6e6;
  202. text-align: center;
  203. line-height: 30px;
  204. font-size: 15px;
  205. color: #333;
  206. background-color: #f7f7f7;
  207. text-decoration: none;
  208. font-weight: 400;
  209. user-select: none;
  210. }
  211. .confirmBtn:hover {
  212. background-color: #eaeaea;
  213. border-color: #adadad;
  214. background-position: 0 -15px;
  215. }
  216. .form-control {
  217. width: 74%;
  218. display: block;
  219. width: 75%;
  220. height: 34px;
  221. padding: 6px 12px;
  222. font-size: 14px;
  223. line-height: 1.42857143;
  224. color: #555555;
  225. background-color: #fff;
  226. background-image: none;
  227. border: 1px solid #ccc;
  228. border-radius: 4px;
  229. }
  230. .separator {
  231. border-top: 1px solid #d8d8d8;
  232. margin-top: 10px;
  233. padding-top: 10px;
  234. }
  235. </style>