Преглед изворни кода

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	src/store/index.js
#	src/utils/liveWS.js
yys пре 3 недеља
родитељ
комит
173e585279
5 измењених фајлова са 51 додато и 18 уклоњено
  1. 4 1
      src/store/index.js
  2. 9 1
      src/store/modules/user.js
  3. 11 6
      src/utils/liveWS.js
  4. 1 1
      src/views/login.vue
  5. 26 9
      src/views/saas/tenant/index.vue

+ 4 - 1
src/store/index.js

@@ -35,12 +35,15 @@ const store = new Vuex.Store({
   },
   actions: {
     // 修改 action 以正确传递参数
-    initLiveWs({ commit, state }, { liveWsUrl, liveId, userId, tenantCode }) {
+    initLiveWs({ commit, state, rootState }, { liveWsUrl, liveId, userId }) {
       // 如果已经存在对应 liveId 的连接,先关闭它
       if (state.liveWs[liveId]) {
         state.liveWs[liveId].close();
       }
 
+      // 读取登录时的 tenantCode
+      const tenantCode = rootState.user.tenantCode || null
+
       // 创建新的 WebSocket 连接
       const ws = new LiveWS(liveWsUrl, liveId, userId, tenantCode);
 

+ 9 - 1
src/store/modules/user.js

@@ -1,5 +1,6 @@
 import {login, logout, getInfo, checkIsNeedCheck} from '@/api/login'
 import { getToken, setToken, removeToken } from '@/utils/auth'
+import Cookies from 'js-cookie'
 
 const user = {
   state: {
@@ -10,7 +11,8 @@ const user = {
     roles: [],
     permissions: [],
     isAdmin: {isCheckPhone:0,isCheckAddress:0},
-    medicalMallConfig: {medicalMall: false,statics: false,audit:false,resource:false,stores:true}
+    medicalMallConfig: {medicalMall: false,statics: false,audit:false,resource:false,stores:true},
+    tenantCode: Cookies.get('tenantCode') || null
   },
 
   mutations: {
@@ -37,6 +39,9 @@ const user = {
     },
     SET_MEDICALMALL: (state, medicalMallConfig) => {
       state.medicalMallConfig = medicalMallConfig
+    },
+    SET_TENANT_CODE: (state, tenantCode) => {
+      state.tenantCode = tenantCode
     }
   },
 
@@ -56,6 +61,7 @@ const user = {
             login(username, password, code, uuid,tenantCode).then(res => {
               setToken(res.token)
               commit('SET_TOKEN', res.token)
+              commit('SET_TENANT_CODE', tenantCode || null)
               resolve({needSms: false})
             }).catch(error => {
               reject(error)
@@ -101,6 +107,7 @@ const user = {
           commit('SET_TOKEN', '')
           commit('SET_ROLES', [])
           commit('SET_PERMISSIONS', [])
+          commit('SET_TENANT_CODE', null)
           removeToken()
           resolve()
         }).catch(error => {
@@ -113,6 +120,7 @@ const user = {
     FedLogOut({ commit }) {
       return new Promise(resolve => {
         commit('SET_TOKEN', '')
+        commit('SET_TENANT_CODE', null)
         removeToken()
         resolve()
       })

+ 11 - 6
src/utils/liveWS.js

@@ -5,21 +5,24 @@ export class LiveWS {
    * @param {string} url - WebSocket 服务器地址
    * @param {number} liveId - 直播间ID
    * @param {number} userId - 用户ID
-   * @param {string} tenantCode - 租户编码(多租户SaaS
+   * @param {string|null} tenantCode - 企业编号(可选
    * @param {number} checkInterval - 检查连接状态的时间间隔,单位毫秒
    * @param {number} reconnectDelay - 连接断开后重连的延迟,单位毫秒
    */
-  constructor(url, liveId, userId, tenantCode, checkInterval = 5000, reconnectDelay = 3000) {
+  constructor(url, liveId, userId, tenantCode = null, checkInterval = 5000, reconnectDelay = 3000) {
     let timestamp = new Date().getTime()
     let userType = 1
     let signature = CryptoJS.HmacSHA256(
       CryptoJS.enc.Utf8.parse('' + liveId + userId + userType + timestamp),
       CryptoJS.enc.Utf8.parse(timestamp)).toString(CryptoJS.enc.Hex)
-    // 多租户SaaS:tenantCode 作为查询参数传递
-    const tenantParam = tenantCode ? `&tenantCode=${tenantCode}` : '';
-    this.url = url + `?liveId=${liveId}&userId=${userId}&userType=${userType}&timestamp=${timestamp}&signature=${signature}${tenantParam}`;
+    let query = `?liveId=${liveId}&userId=${userId}&userType=${userType}&timestamp=${timestamp}&signature=${signature}`
+    if (tenantCode) {
+      query += `&tenantCode=${encodeURIComponent(tenantCode)}`
+    }
+    this.url = url + query;
     this.liveId = liveId;
     this.userId = userId;
+    this.tenantCode = tenantCode;
     this.checkInterval = checkInterval;
     this.reconnectDelay = reconnectDelay;
     this.ws = null;
@@ -84,7 +87,9 @@ export class LiveWS {
         this.scheduleReconnect();
       } else {
         // 发送信息
-        this.ws.send(JSON.stringify({'cmd':'heartbeat','msg':'ping', 'liveId': this.liveId, 'userId': this.userId}));
+        const heartbeat = { 'cmd': 'heartbeat', 'msg': 'ping', 'liveId': this.liveId, 'userId': this.userId };
+        if (this.tenantCode) heartbeat.tenantCode = this.tenantCode;
+        this.ws.send(JSON.stringify(heartbeat));
       }
     }, this.checkInterval);
   }

+ 1 - 1
src/views/login.vue

@@ -16,7 +16,7 @@
         <div class="title">{{vueAppTitle}}</div>
         <div class="title-line"></div>
         <el-form-item prop="tenantCode">
-          <el-input v-model="loginForm.tenantCode" type="text" auto-complete="off" placeholder="企业名称" class="tenantCode" >
+          <el-input v-model="loginForm.tenantCode" type="text" auto-complete="off" placeholder="企业编号" class="tenantCode" >
             <img slot="prefix" src="../assets/images/user.png" class="input-icon "/>
           </el-input>
         </el-form-item>

+ 26 - 9
src/views/saas/tenant/index.vue

@@ -88,7 +88,7 @@
       <el-table-column label="租户唯一ID" align="center" prop="id" />
       <el-table-column label="租户编码" align="center" prop="tenantCode" />
       <el-table-column label="租户名称" align="center" prop="tenantName" />
-      <el-table-column label="状态" align="center" prop="status">
+      <el-table-column label="状态" align="center" prop="status">
         <template slot-scope="scope">
           <dict-tag :options="statusOptions" :value="scope.row.status"/>
         </template>
@@ -132,7 +132,7 @@
     />
 
     <!-- 添加或修改租户基础信息对话框 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+    <el-dialog :title="title" :visible.sync="open" width="650px" append-to-body>
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
         <el-form-item label="租户编码" prop="tenantCode">
           <el-input v-model="form.tenantCode" placeholder="请输入租户编码" />
@@ -149,7 +149,7 @@
             >{{dict.dictLabel}}</el-radio>
           </el-radio-group>
         </el-form-item>
-        <el-form-item label="租户有效期" prop="expireTime">
+        <el-form-item label="租户有效期" prop="expireTime" label-width="100px">
           <el-date-picker clearable size="small"
                           v-model="form.expireTime"
                           type="date"
@@ -157,13 +157,22 @@
                           placeholder="选择租户有效期">
           </el-date-picker>
         </el-form-item>
-        <el-form-item label="数据库连接地址" prop="dbUrl">
-          <el-input v-model="form.dbUrl" placeholder="请输入数据库连接地址" />
+<!--        <el-form-item label="数据库连接地址" prop="dbUrl">-->
+<!--          <el-input v-model="form.dbUrl" placeholder="请输入数据库连接地址" />-->
+<!--        </el-form-item>-->
+        <el-form-item label="数据库ip地址" prop="dbIp" label-width="100px">
+          <el-input v-model="form.dbIp" placeholder="请输入数据库ip地址" />
         </el-form-item>
-        <el-form-item label="数据库帐号" prop="dbAccount">
+        <el-form-item label="数据库端口" prop="dbPort" label-width="100px">
+          <el-input v-model="form.dbPort" placeholder="请输入数据库端口" />
+        </el-form-item>
+        <el-form-item label="数据库名称" prop="dbName" label-width="100px">
+          <el-input v-model="form.dbName" placeholder="请输入数据库名称" />
+        </el-form-item>
+        <el-form-item label="数据库帐号" prop="dbAccount" label-width="100px">
           <el-input v-model="form.dbAccount" placeholder="请输入数据库帐号" />
         </el-form-item>
-        <el-form-item label="数据库密码" prop="dbPwd">
+        <el-form-item label="数据库密码" prop="dbPwd" label-width="100px">
           <el-input v-model="form.dbPwd" placeholder="请输入数据库密码" />
         </el-form-item>
         <el-form-item label="联系电话" prop="contactPhone">
@@ -183,6 +192,7 @@
 
 <script>
 import { listTenant, getTenant, delTenant, addTenant, updateTenant, exportTenant } from "@/api/tenant/tenant";
+import {code} from "quill/ui/icons";
 
 export default {
   name: "Tenant",
@@ -326,8 +336,15 @@ export default {
             });
           } else {
             addTenant(this.form).then(response => {
-              this.msgSuccess("新增成功");
-              this.open = false;
+              this.$message({
+                message: response.msg,
+                type: response.code === 200 ? "success" : 'error',
+                duration: 5000
+              });
+
+              if (response.code === 200){
+                this.open = false;
+              }
               this.getList();
             });
           }