dct преди 8 месеца
родител
ревизия
696747fdb6
променени са 6 файла, в които са добавени 79 реда и са изтрити 16 реда
  1. 1 0
      package.json
  2. 11 11
      src/pages/login/merchant.vue
  3. 1 1
      src/pages/merchant/agencyPreOrder/groupPreOrder.vue
  4. 51 0
      src/utils/index.js
  5. 10 4
      src/utils/request.js
  6. 5 0
      yarn.lock

+ 1 - 0
package.json

@@ -20,6 +20,7 @@
     "@vueuse/core": "^6.7.4",
     "ant-design-vue": "^2.2.6",
     "axios": "^0.21.1",
+    "crypto-js": "^4.2.0",
     "dayjs": "^1.10.6",
     "echarts": "^5.2.1",
     "lodash.clonedeep": "^4.5.0",

+ 11 - 11
src/pages/login/merchant.vue

@@ -22,8 +22,8 @@
               required: true,
               message: '请输入商户名'
             }"
-            name="merchantName">
-            <a-input v-model:value="formState.merchantName" placeholder="商户名">
+            name="projectName">
+            <a-input v-model:value="formState.projectName" placeholder="商户名">
               <template #prefix><ShopOutlined style="color: rgba(0, 0, 0, 0.25)" /></template>
             </a-input>
           </a-form-item>
@@ -33,8 +33,8 @@
               required: true,
               message: '请输入用户名'
             }"
-            name="username">
-            <a-input v-model:value="formState.username" placeholder="用户名">
+            name="userName">
+            <a-input v-model:value="formState.userName" placeholder="用户名">
               <template #prefix><UserOutlined style="color: rgba(0, 0, 0, 0.25)" /></template>
             </a-input>
           </a-form-item>
@@ -76,6 +76,7 @@ import router from '@/router'
 import { message } from 'ant-design-vue'
 import Modal from './Modal.vue'
 import md5 from 'md5'
+import { encrypt } from '@/utils'
 import { login, logout } from '@/api/login'
 import { reactive, ref } from 'vue'
 import { UserOutlined, LockOutlined, MailOutlined, ShopOutlined } from '@ant-design/icons-vue'
@@ -87,14 +88,14 @@ const formRef = ref()
 const formState = reactive(
   !import.meta.env.PROD
     ? {
-        merchantName: 'zj',
-        password: '123456', // 123456 md5加密
-        username: 'test'
+        projectName: 'demo',
+        userName: 'admin',
+        password: 'Aa123456'
       }
     : {
-        merchantName: '',
+        projectName: '',
         password: '', // 123456 md5加密
-        username: ''
+        userName: ''
       }
 )
 
@@ -106,10 +107,9 @@ const state = reactive({
 const submitForm = () => {
   formRef.value.validate()
     .then(async() => {
-      const params = { ...formState, password: md5(formState.password) }
+      const params = { ...formState, password: encrypt(formState.password) }
       // await logout()
       login(params).then(res => {
-        console.log(res)
         message.success('登录成功')
 
         setTimeout(() => {

+ 1 - 1
src/pages/merchant/agencyPreOrder/groupPreOrder.vue

@@ -248,7 +248,7 @@ export default {
     const uploadUrl = baseURL1 + 'merchant/travel/importTravellers'
     const appType = import.meta.env.VITE_APP_TYPE
     const headers = {
-      ClearAuthToken: localStorage[`clearauthtoken_${appType}`]
+      SaToken: localStorage.clearauthtoken_tenant
     }
 
     const loading = ref(false)

+ 51 - 0
src/utils/index.js

@@ -1,3 +1,5 @@
+import CryptoJS from 'crypto-js'
+
 export const formatGetParams = (params) => {
   const entries = Object.entries(params).filter(arr => {
     return (arr[1] - 0) === 0 || arr[1]
@@ -21,3 +23,52 @@ export const formatGetParams = (params) => {
 
 //   return p.join('&')
 // }
+
+const desKey = 'fnFACVwC'
+const key = CryptoJS.enc.Hex.parse('TgxRS8DG65EjK8cpKTiPAw==') // 密钥
+const iv = CryptoJS.enc.Hex.parse('') // 偏移量
+
+// aes加密
+export function encrypt (word) {
+  let encrypted = ''
+  if (typeof word === 'string') {
+    const key = CryptoJS.enc.Utf8.parse(desKey)
+    console.log(word, desKey, 'aaaa')
+    encrypted = CryptoJS.DES.encrypt(word, key, {
+      mode: CryptoJS.mode.ECB,
+      padding: CryptoJS.pad.Pkcs7
+    })
+
+    return encrypted.toString()
+
+    // const srcs = CryptoJS.enc.Hex.parse(word)
+    // // var encryptedBase64Str = CryptoJS.enc.Base64.stringify(srcs)
+    // encrypted = CryptoJS.AES.encrypt(srcs, key, {
+    //   mode: CryptoJS.mode.ECB,
+    //   padding: CryptoJS.pad.ZeroPadding
+    // })
+  } else if (typeof word === 'object') {
+    // 对象格式的转成json字符串
+    const data = JSON.stringify(word)
+    const srcs = CryptoJS.enc.Utf8.parse(data)
+    encrypted = CryptoJS.AES.encrypt(srcs, key, {
+      iv: iv,
+      mode: CryptoJS.mode.ECB,
+      padding: CryptoJS.pad.Pkcs7
+    })
+  }
+  return encrypted.ciphertext.toString()
+}
+
+// aes解密
+export function decrypt (word) {
+  const encryptedHexStr = CryptoJS.enc.Hex.parse(word)
+  const srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr)
+  const decrypt = CryptoJS.AES.decrypt(srcs, key, {
+    iv: iv,
+    mode: CryptoJS.mode.CBC,
+    padding: CryptoJS.pad.Pkcs7
+  })
+  const decryptedStr = decrypt.toString(CryptoJS.enc.Utf8)
+  return decryptedStr.toString()
+}

+ 10 - 4
src/utils/request.js

@@ -12,8 +12,11 @@ const service = axios.create({
 
 // request拦截器
 service.interceptors.request.use(config => {
-  if (config.url.indexOf('/login') < 0) {
-    config.headers.ClearAuthToken = localStorage[`clearauthtoken_${appType}`]
+  const token = localStorage.clearauthtoken_tenant
+  if (token) {
+    Object.assign(config, {
+      headers: { SaToken: token }
+    })
   }
 
   return config
@@ -28,9 +31,12 @@ service.interceptors.response.use(response => {
   /**
   * code为非20000是抛错 可结合自己业务进行修改
   */
+  if (response.data.code === '999999') {
+    message.error(response.data.msg || '服务器出错了')
+  }
 
-  if (response.headers.clearauthtoken) {
-    localStorage[`clearauthtoken_${appType}`] = response.headers.clearauthtoken
+  if (response.data.data && response.data.data.token) {
+    localStorage.clearauthtoken_tenant = response.data.data.token
   }
 
   const code = response.data.resCode - 0

+ 5 - 0
yarn.lock

@@ -1439,6 +1439,11 @@ crypt@0.0.2:
   resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b"
   integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==
 
+crypto-js@^4.2.0:
+  version "4.2.0"
+  resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.2.0.tgz#4d931639ecdfd12ff80e8186dba6af2c2e856631"
+  integrity sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==
+
 csstype@^3.1.3:
   version "3.1.3"
   resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81"