Browse Source

Merge remote-tracking branch 'origin/master'

xdd 1 week ago
parent
commit
a4ff2d7245

+ 4 - 4
.env.development

@@ -1,19 +1,19 @@
 # 页面标题
 VUE_APP_TITLE =互联网医院管理系统
 # 公司名称
-VUE_APP_COMPANY_NAME =银川鑫泰互联网医院有限公司
+VUE_APP_COMPANY_NAME =广州易诊通医院有限公司
 # ICP备案号
-VUE_APP_ICP_RECORD =宁ICP备2022001349
+VUE_APP_ICP_RECORD =粤ICP备2024241490
 # ICP网站访问地址
 VUE_APP_ICP_URL =https://beian.miit.gov.cn
 # 网站LOG
-VUE_APP_LOG_URL =@/assets/logo/crm.png
+VUE_APP_LOG_URL =@/assets/logo/yzt.jpg
 
 # 开发环境配置
 ENV = 'development'
 
 # FS管理系统/开发环境
-VUE_APP_BASE_API = '/dev-api'
+VUE_APP_BASE_API = '/prod-api'
 
 # 路由懒加载
 VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 19 - 0
.env.prod-hcl

@@ -0,0 +1,19 @@
+# 页面标题
+VUE_APP_TITLE =互联网医院销售管理系统
+# 公司名称
+COMPANY_NAME =黑龙江珠斯网络科技有限公司
+# ICP备案号
+ICP_RECORD =黑ICP备2024024871号-3
+# ICP网站访问地址
+ICP_URL =https://beian.miit.gov.cn
+# 网站LOG
+VUE_APP_LOG_URL =@/assets/logo/hcl.png
+
+# 开发环境配置
+ENV = 'development'
+
+# FS管理系统/开发环境
+VUE_APP_BASE_API = '/prod-api'
+
+# 路由懒加载
+VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 19 - 0
.env.prod-hzyy

@@ -0,0 +1,19 @@
+# 页面标题
+VUE_APP_TITLE =弘珍医药管理系统
+# 公司名称
+COMPANY_NAME =南宁良庆区宝和堂金悦澜湾大药房
+# ICP备案号
+ICP_RECORD =桂ICP备2025059156号-1
+# ICP网站访问地址
+ICP_URL =https://beian.miit.gov.cn
+# 网站LOG
+VUE_APP_LOG_URL =@/assets/logo/hzyy.png
+
+# 开发环境配置
+ENV = 'development'
+
+# FS管理系统/开发环境
+VUE_APP_BASE_API = '/prod-api'
+
+# 路由懒加载
+VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 19 - 0
.env.prod-jzzx

@@ -0,0 +1,19 @@
+# 页面标题
+VUE_APP_TITLE =互联网医院销售管理系统
+# 公司名称
+COMPANY_NAME =成都双流九州在线互联网医院有限公司
+# ICP备案号
+ICP_RECORD =蜀ICP备2025130335号
+# ICP网站访问地址
+ICP_URL =https://beian.miit.gov.cn
+# 网站LOG
+VUE_APP_LOG_URL =@/assets/logo/jzzx.png
+
+# 开发环境配置
+ENV = 'development'
+
+# FS管理系统/开发环境
+VUE_APP_BASE_API = '/prod-api'
+
+# 路由懒加载
+VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 5 - 0
package.json

@@ -8,11 +8,16 @@
     "dev": "vue-cli-service serve",
     "build:prod": "vue-cli-service build",
     "build:stage": "vue-cli-service build --mode staging",
+    "build:prod-jz": "vue-cli-service build --mode prod-jz",
+    "build:prod-hzyy": "vue-cli-service build --mode prod-hzyy",
+    "build:prod-jzzx": "vue-cli-service build --mode prod-jzzx",
+    "build:prod-hcl": "vue-cli-service build --mode prod-hcl",
     "build:prod-test": "vue-cli-service build --mode prod-test",
     "build:prod-sxjz": "vue-cli-service build --mode prod-sxjz",
     "build:prod-jnmy": "vue-cli-service build --mode prod-jnmy",
     "build:prod-hdt": "vue-cli-service build --mode prod-hdt",
     "build:prod-yzt": "vue-cli-service build --mode prod-yzt",
+    "build:prod-myhk": "vue-cli-service build --mode prod-myhk",
     "preview": "node build/index.js --preview",
     "lint": "eslint --ext .js,.vue src",
     "test:unit": "jest --clearCache && vue-cli-service test:unit",

+ 7 - 1
src/api/qw/sopLogs.js

@@ -18,7 +18,13 @@ export function listQwSopLogsList(query) {
   })
 }
 
-
+//修改 执行记录为待发送
+export function editCourseQwSopLogs(id) {
+  return request({
+    url: '/qw/sopLogs/editCourseQwSopLogs/' + id,
+    method: 'put'
+  })
+}
 
 // 查询企业微信SOP  定时任务详细
 export function getQwSopLogs(id) {

+ 88 - 2
src/api/qw/user.js

@@ -149,8 +149,23 @@ export function exportUser(query) {
     params: query
   })
 }
-
-
+/**
+ * 登录企业微信(发起登录)
+ */
+export function getQwIpad(data) {
+  return request({
+    url: '/qw/user/getQwIpad',
+    method: 'post',
+    data: data
+  })
+}
+export function delQwIpad(data) {
+  return request({
+    url: '/qw/user/delQwIpad',
+    method: 'post',
+    data: data
+  })
+}
 /**
  * 登录企业微信(发起登录)
  */
@@ -161,6 +176,55 @@ export function loginQwCode(data) {
     data: data
   })
 }
+/**
+ * 登录企业微信(发起登录)
+ */
+export function loginQwIpad(data) {
+  return request({
+    url: '/qw/user/loginQwIpad',
+    method: 'post',
+    data: data
+  })
+}
+
+/**
+ * 获取登录状态
+ */
+export function qrCodeStatus(data) {
+  return request({
+    url: '/qw/user/qrCodeStatus',
+    method: 'post',
+    data: data
+  })
+}
+export function qrCodeVerify(data) {
+  return request({
+    url: '/qw/user/qrCodeVerify',
+    method: 'post',
+    data: data
+  })
+}
+export function outLoginQwIpad(data) {
+  return request({
+    url: '/qw/user/outLoginQwIpad',
+    method: 'post',
+    data: data
+  })
+}
+export function twoCode(data) {
+  return request({
+    url: '/qw/user/twoCode',
+    method: 'post',
+    data: data
+  })
+}
+export function twoCodeStatus(data) {
+  return request({
+    url: '/qw/user/twoCodeStatus',
+    method: 'post',
+    data: data
+  })
+}
 /**
  * 取redis里的登录二维码
  */
@@ -234,6 +298,15 @@ export function handleInputAuthAppKey(data) {
   })
 }
 
+// 分配异地主机
+export function handleAllocateRemoteHost(data) {
+  return request({
+    url: '/qw/user/allocateRemoteHost',
+    method: 'post',
+    data
+  });
+}
+
 /**
 * 企业微信员工账号 绑定 云主机
 */
@@ -263,3 +336,16 @@ export function selectCloudAP(data) {
     data: data
   })
 }
+
+/**
+ * 模糊查询企微用户列表
+ * @param params 参数
+ * @returns {*}
+ */
+export function getQwUserListLikeName(params) {
+  return request({
+    url: '/qw/user/getQwUserListLikeName',
+    method: 'get',
+    params: params
+  })
+}

BIN
src/assets/logo/hcl.png


BIN
src/assets/logo/hzyy.png


BIN
src/assets/logo/jzzx.png


+ 16 - 15
src/views/company/companyUser/index.vue

@@ -183,9 +183,9 @@
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
         <el-row>
           <el-col :span="12">
-            <el-form-item label="员工账号" prop="userName">
-              <el-input v-model="form.userName" placeholder="请输入员工后台账号" />
-            </el-form-item>
+<!--            <el-form-item label="员工账号" prop="userName">-->
+<!--              <el-input v-model="form.userName" placeholder="请输入员工后台账号" />-->
+<!--            </el-form-item>-->
             <el-form-item label="员工姓名" prop="nickName">
               <el-input v-model="form.nickName" placeholder="请输入员工后台昵称" />
             </el-form-item>
@@ -210,13 +210,13 @@
         </el-row>
         <el-row>
           <el-col :span="12">
-            <el-form-item v-if="form.userId == undefined" label="员工工号" prop="userName">
+            <el-form-item label="员工账号" prop="userName">
               <el-input v-model="form.userName" placeholder="请输入员工工号" />
             </el-form-item>
           </el-col>
           <el-col :span="12">
             <el-form-item v-if="form.userId == undefined" label="用户密码" prop="password">
-              <el-input v-model="form.password" placeholder="请输入用户密码" type="password" />
+              <el-input v-model="form.password" placeholder="请输入用户密码" type="password" show-password />
             </el-form-item>
           </el-col>
         </el-row>
@@ -274,15 +274,15 @@
             </el-form-item>
           </el-col>
         </el-row>
-        <el-row>
-          <el-col :span="24">
-            <el-form-item label="数据权限">
-              <el-radio-group v-model="form.userType">
-                <el-radio v-for="dict in userTypeOptions" :key="dict.dictValue" :label="dict.dictValue">{{dict.dictLabel}}</el-radio>
-              </el-radio-group>
-            </el-form-item>
-          </el-col>
-        </el-row>
+<!--        <el-row>-->
+<!--          <el-col :span="24">-->
+<!--            <el-form-item label="数据权限">-->
+<!--              <el-radio-group v-model="form.userType">-->
+<!--                <el-radio v-for="dict in userTypeOptions" :key="dict.dictValue" :label="dict.dictValue">{{dict.dictLabel}}</el-radio>-->
+<!--              </el-radio-group>-->
+<!--            </el-form-item>-->
+<!--          </el-col>-->
+<!--        </el-row>-->
         <el-row>
           <el-col :span="24">
             <el-form-item label="看课域名">
@@ -664,6 +664,7 @@ export default {
         password: undefined,
         idCard: undefined,
         phonenumber: undefined,
+        userType: "01",
         email: undefined,
         sex: undefined,
         status: "0",
@@ -700,7 +701,7 @@ export default {
         this.roleOptions = response.roles;
         this.open = true;
         this.title = "添加员工";
-        this.form.password = null;
+        this.form.password = "ylrz147..";
       });
     },
     qwBind(row){

+ 6 - 6
src/views/components/course/userCourseCatalogDetails.vue

@@ -49,12 +49,12 @@
             @click="updateMoney(scope.row)"
           >设置红包金额</el-button>
 
-          <el-button
-            size="mini"
-            type="text"
-            @click="openDialog(scope.row)"
-            v-hasPermi="['course:courseLink:create']"
-          >生成应急短链</el-button>
+<!--          <el-button-->
+<!--            size="mini"-->
+<!--            type="text"-->
+<!--            @click="openDialog(scope.row)"-->
+<!--            v-hasPermi="['course:courseLink:create']"-->
+<!--          >生成应急短链</el-button>-->
         </template>
       </el-table-column>
     </el-table>

+ 13 - 13
src/views/course/courseFinishTemp/index.vue

@@ -56,18 +56,18 @@
         >新增
         </el-button>
       </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="success"
-          plain
-          icon="el-icon-edit"
-          size="mini"
-          :disabled="multiple"
-          @click="handleUpdate"
-          v-hasPermi="['courseFinishTemp:course:edit']"
-        >修改状态
-        </el-button>
-      </el-col>
+<!--      <el-col :span="1.5">-->
+<!--        <el-button-->
+<!--          type="success"-->
+<!--          plain-->
+<!--          icon="el-icon-edit"-->
+<!--          size="mini"-->
+<!--          :disabled="multiple"-->
+<!--          @click="handleUpdate"-->
+<!--          v-hasPermi="['courseFinishTemp:course:edit']"-->
+<!--        >修改状态-->
+<!--        </el-button>-->
+<!--      </el-col>-->
       <el-col :span="1.5">
         <el-button
           type="danger"
@@ -397,7 +397,7 @@
           <span v-if="form.isAllCompanyUser == '1'" style="margin-left: 10px;color: #13ce66">是</span>
           <span v-else style="margin-left: 10px;color: #ff4949">否</span>
         </el-form-item>
-        <el-form-item label="所属销售" prop="companyUserIds">
+        <el-form-item label="所属销售" prop="companyUserIds" v-if="form.isAllCompanyUser == '2'">
           <el-select v-model="companyUserIds" remote multiple placeholder="请选择" filterable style="width: 100%;">
             <el-option
               v-for="dict in userList"

+ 3 - 2
src/views/course/courseFinishTempParent/index.vue

@@ -130,7 +130,7 @@
             </el-radio>
           </el-radio-group>
         </el-form-item>
-        <el-form-item label="课程ID" prop="courseId">
+        <el-form-item label="课程" prop="courseId">
           <el-select v-model="form.courseId" :disabled="form.id != null" placeholder="请选择课程" style=" margin-right: 10px;" size="mini">
             <el-option
               v-for="dict in courseList"
@@ -351,7 +351,7 @@
           <span v-if="form.isAllCompanyUser == '1'" style="margin-left: 10px;color: #13ce66">是</span>
           <span v-else style="margin-left: 10px;color: #ff4949">否</span>
         </el-form-item>
-        <el-form-item label="所属销售" prop="companyUserIds" v-if="!form.id">
+        <el-form-item label="所属销售" prop="companyUserIds" v-if="!form.id && form.isAllCompanyUser == '2'">
           <el-select v-model="companyUserIds" remote multiple placeholder="请选择" filterable style="width: 100%;">
             <el-option
               v-for="dict in userList"
@@ -576,6 +576,7 @@ export default {
               }
             }
             addCourseFinishTempParent(this.form).then(response => {
+              // this.loading = true
               this.msgSuccess("新增成功");
               this.open = false;
               this.getList();

+ 34 - 38
src/views/course/courseWatchLog/index.vue

@@ -1,24 +1,24 @@
 <template>
   <div class="app-container">
     <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="100px">
-      <el-form-item label="会员ID" prop="userId">
-        <el-input
-          v-model="queryParams.userId"
-          placeholder="请输入会员ID"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="会员昵称" prop="nickName">
-        <el-input
-          v-model="queryParams.nickName"
-          placeholder="请输入会员昵称"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
+<!--      <el-form-item label="会员ID" prop="userId">-->
+<!--        <el-input-->
+<!--          v-model="queryParams.userId"-->
+<!--          placeholder="请输入会员ID"-->
+<!--          clearable-->
+<!--          size="small"-->
+<!--          @keyup.enter.native="handleQuery"-->
+<!--        />-->
+<!--      </el-form-item>-->
+<!--      <el-form-item label="会员昵称" prop="nickName">-->
+<!--        <el-input-->
+<!--          v-model="queryParams.nickName"-->
+<!--          placeholder="请输入会员昵称"-->
+<!--          clearable-->
+<!--          size="small"-->
+<!--          @keyup.enter.native="handleQuery"-->
+<!--        />-->
+<!--      </el-form-item>-->
       <el-form-item label="企微客户昵称" prop="nickName" >
         <el-input
           v-model="queryParams.externalUserName"
@@ -106,22 +106,18 @@
     <el-table border v-loading="loading" :data="courseWatchLogList" @selection-change="handleSelectionChange">
       <el-table-column type="selection" width="55" align="center" />
       <el-table-column label="记录编号" align="center" prop="logId" />
-      <el-table-column label="企微客户" align="center" prop="externalUserName"/>
-      <el-table-column label="会员ID" align="center" prop="userId" />
-      <el-table-column label="会员昵称" align="center" prop="fsNickName">
+      <el-table-column label="客户昵称" align="center" prop="externalUserName"/>
+
+      <!--      <el-table-column label="会员ID" align="center" prop="userId"/>-->
+      <el-table-column label="客户头像" align="center" prop="externalUserAvatar">
         <template slot-scope="scope">
-          <div style="display: flex;white-space: nowrap">
-            <div style="margin: auto">
-              {{scope.row.fsNickName}}
-            </div>
-            <el-popover
-              placement="right"
-              title=""
-              trigger="hover">
-              <img slot="reference" :src="scope.row.fsAvatar" style="width: 30px;height: 30px">
-              <img :src="scope.row.fsAvatar" style="max-width: 200px;max-height: 200px">
-            </el-popover>
-          </div>
+          <el-popover
+            placement="right"
+            title=""
+            trigger="hover">
+            <img slot="reference" :src="scope.row.externalUserAvatar" style="width: 50px;height: 50px">
+            <img :src="scope.row.externalUserAvatar" style="max-width: 200px;max-height: 200px">
+          </el-popover>
         </template>
       </el-table-column>
       <el-table-column label="课程名称" align="center" prop="courseName" />
@@ -133,9 +129,9 @@
       </el-table-column>
       <el-table-column label="播放时长" align="center" prop="duration" />
       <el-table-column label="所属销售" align="center" prop="companyUserName" />
-      <el-table-column label="所属公司" align="center" prop="companyName" />
-      <el-table-column label="企微员工名称" align="center" prop="qwUserName" />
-      <el-table-column label="所属发送方式" align="center" prop="sendType" />
+<!--      <el-table-column label="所属公司" align="center" prop="companyName" />-->
+      <el-table-column label="所属企微" align="center" prop="qwUserName" />
+<!--      <el-table-column label="所属发送方式" align="center" prop="sendType" />-->
       <el-table-column label="创建时间" align="center" prop="createTime" />
       <el-table-column label="更新时间" align="center" prop="updateTime" />
       <el-table-column label="完课时间" align="center" prop="finishTime" />
@@ -161,7 +157,7 @@ export default {
   name: "CourseWatchLog",
   data() {
     return {
-      activeName:"00",
+      activeName:"2",
       createTime:null,
       updateTime:null,
       courseLists:[],
@@ -194,7 +190,7 @@ export default {
         userId: null,
         nickName: null,
         videoId: null,
-        logType: null,
+        logType: 2,
         qwExternalContactId: null,
         externalUserName:null,
         duration: null,

+ 44 - 48
src/views/course/courseWatchLog/watchLog.vue

@@ -21,24 +21,24 @@
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
-      <el-form-item label="会员ID" prop="userId">
-        <el-input
-          v-model="queryParams.userId"
-          placeholder="请输入会员ID"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="会员昵称" prop="nickName">
-        <el-input
-          v-model="queryParams.nickName"
-          placeholder="请输入会员昵称"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
+<!--      <el-form-item label="会员ID" prop="userId">-->
+<!--        <el-input-->
+<!--          v-model="queryParams.userId"-->
+<!--          placeholder="请输入会员ID"-->
+<!--          clearable-->
+<!--          size="small"-->
+<!--          @keyup.enter.native="handleQuery"-->
+<!--        />-->
+<!--      </el-form-item>-->
+<!--      <el-form-item label="会员昵称" prop="nickName">-->
+<!--        <el-input-->
+<!--          v-model="queryParams.nickName"-->
+<!--          placeholder="请输入会员昵称"-->
+<!--          clearable-->
+<!--          size="small"-->
+<!--          @keyup.enter.native="handleQuery"-->
+<!--        />-->
+<!--      </el-form-item>-->
       <el-form-item label="企微客户昵称" prop="nickName">
         <el-input
           v-model="queryParams.externalUserName"
@@ -121,22 +121,18 @@
     <el-table border v-loading="loading" :data="courseWatchLogList" @selection-change="handleSelectionChange">
       <el-table-column type="selection" width="55" align="center"/>
       <el-table-column label="记录编号" align="center" prop="logId"/>
-      <el-table-column label="企微客户" align="center" prop="externalUserName"/>
-      <el-table-column label="会员ID" align="center" prop="userId"/>
-      <el-table-column label="会员昵称" align="center" prop="fsNickName">
+      <el-table-column label="客户昵称" align="center" prop="externalUserName"/>
+
+<!--      <el-table-column label="会员ID" align="center" prop="userId"/>-->
+      <el-table-column label="客户头像" align="center" prop="externalUserAvatar">
         <template slot-scope="scope">
-          <div style="display: flex;white-space: nowrap">
-            <div style="margin: auto">
-              {{ scope.row.fsNickName }}
-            </div>
-            <el-popover
-              placement="right"
-              title=""
-              trigger="hover">
-              <img slot="reference" :src="scope.row.fsAvatar" style="width: 30px;height: 30px">
-              <img :src="scope.row.fsAvatar" style="max-width: 200px;max-height: 200px">
-            </el-popover>
-          </div>
+          <el-popover
+            placement="right"
+            title=""
+            trigger="hover">
+            <img slot="reference" :src="scope.row.externalUserAvatar" style="width: 50px;height: 50px">
+            <img :src="scope.row.externalUserAvatar" style="max-width: 200px;max-height: 200px">
+          </el-popover>
         </template>
       </el-table-column>
       <el-table-column label="课程名称" align="center" prop="courseName"/>
@@ -147,11 +143,11 @@
         </template>
       </el-table-column>
       <el-table-column label="播放时长" align="center" prop="duration"/>
-      <el-table-column label="所属销售" align="center" prop="companyUserName"/>
-      <el-table-column label="所属公司" align="center" prop="companyName"/>
-      <el-table-column label="企微员工名称" align="center" prop="qwUserName"/>
-      <el-table-column label="企微账号" align="center" prop="qwUserName"/>
-      <el-table-column label="所属发送方式" align="center" prop="sendType"/>
+<!--      <el-table-column label="所属销售" align="center" prop="companyUserName"/>-->
+<!--      <el-table-column label="所属公司" align="center" prop="companyName"/>-->
+<!--      <el-table-column label="企微员工名称" align="center" prop="qwUserName"/>-->
+      <el-table-column label="所属企微" align="center" prop="qwUserName"/>
+<!--      <el-table-column label="所属发送方式" align="center" prop="sendType"/>-->
       <el-table-column label="创建时间" align="center" prop="createTime" width="100px"/>
       <el-table-column label="更新时间" align="center" prop="updateTime" width="100px" />
       <el-table-column label="完课时间" align="center" prop="finishTime" width="100px" />
@@ -176,9 +172,9 @@
     />
 
 
-    <el-drawer title="题记录" :visible.sync="openAnswerLog" size="70%" append-to-body>
+    <el-drawer title="题记录" :visible.sync="openAnswerLog" size="70%" append-to-body>
       <el-table border v-loading="" :data="answerLogsList">
-        <el-table-column label="小程序用户名" align="center" prop="userName">
+        <el-table-column label="会员用户" align="center" prop="userName">
           <template slot-scope="scope">
             <div style="display: flex;white-space: nowrap">
               <div style="margin: auto">
@@ -227,8 +223,8 @@
           </template>
         </el-table-column>
         <el-table-column label="小节名称" align="center" prop="title" />
-        <el-table-column label="会员id" align="center" prop="userId" />
-        <el-table-column label="会员昵称" align="center" prop="fsNickName">
+<!--        <el-table-column label="会员id" align="center" prop="userId" />-->
+        <el-table-column label="会员用户" align="center" prop="fsNickName">
           <template slot-scope="scope">
             <div style="display: flex;white-space: nowrap">
               <div style="margin: auto">
@@ -244,16 +240,16 @@
             </div>
           </template>
         </el-table-column>
-        <el-table-column label="会员电话" align="center" prop="phone" />
-        <el-table-column label="所属销售" align="center" prop="companyUserName" />
-        <el-table-column label="所属公司" align="center" prop="companyName" />
+<!--        <el-table-column label="会员电话" align="center" prop="phone" />-->
+<!--        <el-table-column label="所属销售" align="center" prop="companyUserName" />-->
+<!--        <el-table-column label="所属公司" align="center" prop="companyName" />-->
         <el-table-column label="转帐金额" align="center" prop="amount" />
         <el-table-column label="状态" align="center" prop="status" >
           <template slot-scope="scope">
             <el-tag>{{ scope.row.status === 0 ? "发送中" : "已完成" }}</el-tag>
           </template>
         </el-table-column>
-        <el-table-column label="企微员工名称" align="center" prop="qwUserName" />
+        <el-table-column label="所属企微" align="center" prop="qwUserName" />
         <el-table-column label="创建时间" align="center" prop="createTime" />
       </el-table>
 
@@ -287,7 +283,7 @@ export default {
   name: "CourseWatchLog",
   data() {
     return {
-      activeName:"00",
+      activeName:"2",
       createTime: null,
       updateTime:null,
       courseLists: [],
@@ -344,7 +340,7 @@ export default {
         userId: null,
         videoId: null,
         nickName: null,
-        logType: "10",
+        logType: 2,
         qwExternalContactId: null,
         externalUserName:null,
         duration: null,

+ 5 - 4
src/views/qw/externalContact/index.vue

@@ -116,8 +116,8 @@
           />
         </el-select>
       </el-form-item>
-      <el-form-item label="是否绑小程序" prop="isBindMini">
-        <el-select v-model="queryParams.isBindMini" placeholder="是否绑定小程序" clearable size="small" @change="handleQuery" >
+      <el-form-item label="是否绑定会员" prop="isBindMini">
+        <el-select v-model="queryParams.isBindMini" placeholder="是否绑定会员" clearable size="small" @change="handleQuery" >
           <el-option
             v-for="dict in isBindMiniOptions"
             :key="dict.dictValue"
@@ -342,7 +342,7 @@
         </template>
       </el-table-column>
       <el-table-column label="企业id" align="center" prop="corpId" />
-      <el-table-column label="是否绑小程序" width="100px" align="center" fixed="right">
+      <el-table-column label="是否绑定会员" width="100px" align="center" fixed="right">
         <template slot-scope="scope">
           <el-tag v-if="scope.row.fsUserId" >已绑定</el-tag>
           <el-tag v-else type="info"> 未绑定</el-tag>
@@ -389,13 +389,14 @@
           </el-button>
 
           <el-button
+            v-if="scope.row.fsUserId"
             size="mini"
             type="text"
             icon="el-icon-thumb"
             @click="handleUnBindUserId(scope.row)"
             v-hasPermi="['qw:externalContact:unBindUserId']"
           >
-            <span v-if="scope.row.fsUserId">解除会员绑定</span>
+            <span>解除会员绑定</span>
           </el-button>
 
 

+ 25 - 25
src/views/qw/externalContact/myExternalContact.vue

@@ -109,8 +109,8 @@
           />
         </el-select>
       </el-form-item>
-      <el-form-item label="是否绑小程序" prop="isBindMini">
-        <el-select v-model="queryParams.isBindMini" placeholder="是否绑定小程序" clearable size="small" @change="handleQuery" >
+      <el-form-item label="是否绑定会员" prop="isBindMini">
+        <el-select v-model="queryParams.isBindMini" placeholder="是否绑定会员" clearable size="small" @change="handleQuery" >
           <el-option
             v-for="dict in isBindMiniOptions"
             :key="dict.dictValue"
@@ -355,7 +355,7 @@
         </template>
       </el-table-column>
       <el-table-column label="企业id" align="center" prop="corpId" />
-      <el-table-column label="是否绑小程序" width="100px" align="center" fixed="right">
+      <el-table-column label="是否绑定会员" width="100px" align="center" fixed="right">
         <template slot-scope="scope">
           <el-tag v-if="scope.row.fsUserId" >已绑定</el-tag>
           <el-tag v-else type="info"> 未绑定</el-tag>
@@ -381,15 +381,15 @@
       </el-table-column>
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="120px" fixed="right">
         <template slot-scope="scope">
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-edit-outline"
-            @click="handleUpdateCustomer(scope.row)"
-            >
-            <span v-if="scope.row.customerId">换绑CRM</span>
-            <span v-else>绑定CRM</span>
-          </el-button>
+<!--          <el-button-->
+<!--            size="mini"-->
+<!--            type="text"-->
+<!--            icon="el-icon-edit-outline"-->
+<!--            @click="handleUpdateCustomer(scope.row)"-->
+<!--            >-->
+<!--            <span v-if="scope.row.customerId">换绑CRM</span>-->
+<!--            <span v-else>绑定CRM</span>-->
+<!--          </el-button>-->
 
           <el-button
             size="mini"
@@ -397,8 +397,8 @@
             icon="el-icon-edit-outline"
             @click="handleUpdateUser(scope.row)"
             >
-            <span v-if="scope.row.fsUserId">换绑小程序用户</span>
-            <span v-else>绑定小程序用户</span>
+            <span v-if="scope.row.fsUserId">换绑会员</span>
+            <span v-else>绑定会员</span>
           </el-button>
 
           <el-button v-if="scope.row.fsUserId"
@@ -408,15 +408,15 @@
             @click="handleUnBindUserId(scope.row)"
             v-hasPermi="['qw:externalContact:unBindUserId']"
           >
-            <span>解除小程序用户绑定</span>
+            <span>解除会员绑定</span>
           </el-button>
 
-          <el-button v-if="scope.row.customerId"
-            size="mini"
-            type="text"
-            icon="el-icon-paperclip"
-            @click="handleShow(scope.row)"
-          >CRM客户详情</el-button>
+<!--          <el-button v-if="scope.row.customerId"-->
+<!--            size="mini"-->
+<!--            type="text"-->
+<!--            icon="el-icon-paperclip"-->
+<!--            @click="handleShow(scope.row)"-->
+<!--          >CRM客户详情</el-button>-->
 		  <el-button
 		     size="mini"
 		     type="text"
@@ -731,10 +731,10 @@ export default {
       },
 
       myQwCompanyList:[],
-      show:{
-        title:"客户详情",
-        open:false,
-      },
+      // show:{
+      //   title:"客户详情",
+      //   open:false,
+      // },
 
       //存储选择的客户
       chooseCustomerSOP:null,

+ 3 - 3
src/views/qw/groupMsg/index.vue

@@ -348,17 +348,17 @@
       </el-dialog>
 
       <!-- 选择群发账号弹窗   -->
-      <el-dialog :title="listUser.title" :visible.sync="listUser.open" style="width: 1600px;height: 100%" append-to-body>
+      <el-dialog :title="listUser.title" :visible.sync="listUser.open" width="1000" append-to-body>
         <qwUserList ref="qwUserList" @selectUserList="selectUserList"></qwUserList>
       </el-dialog>
 
       <!-- 选择群聊    -->
-      <el-dialog :title="groupChart.title" :visible.sync="groupChart.open" style="width: 1300px;height: 100%" append-to-body>
+      <el-dialog :title="groupChart.title" :visible.sync="groupChart.open" width="1300" append-to-body>
         <group-chat ref="GroupChat" @selectGroupChatList="selectGroupChatList"></group-chat>
       </el-dialog>
 
       <!--  选择的标签   -->
-      <el-dialog :title="changeTagDialog.title" :visible.sync="changeTagDialog.open" style="width:100%;height: 100%" append-to-body>
+      <el-dialog :title="changeTagDialog.title" :visible.sync="changeTagDialog.open" width="700" append-to-body>
 
         <div>搜索标签:
           <el-input v-model="tagChange.tagName" placeholder="请输入标签名称" clearable size="small" style="width: 200px;margin-right: 10px" />

+ 1 - 1
src/views/qw/groupMsgUser/groupMsg.vue

@@ -215,7 +215,7 @@
     </el-dialog>
 
     <!-- 选择群聊    -->
-    <el-dialog :title="groupChart.title" :visible.sync="groupChart.open" style="width: 1300px;height: 100%" append-to-body>
+    <el-dialog :title="groupChart.title" :visible.sync="groupChart.open" width="1300" append-to-body>
       <GroupChat ref="GroupChat" @selectGroupChatList="selectGroupChatList"></GroupChat>
     </el-dialog>
 

+ 10 - 0
src/views/qw/sop/addSop.vue

@@ -355,6 +355,14 @@
           </div>
           <Tip title="选择想要发送的模板规则" />
         </el-form-item>
+
+        <el-form-item label="开启评论/弹幕" prop="openCommentStatus">
+          <el-radio-group v-model="form.openCommentStatus">
+            <el-radio :label="1" >开启评论</el-radio>
+            <el-radio :label="2" >开启弹幕</el-radio>
+            <el-radio :label="3" >关闭</el-radio>
+          </el-radio-group>
+        </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer" style="display: flex;justify-content: flex-end;">
         <el-button type="primary" @click="submitForm">确 定</el-button>
@@ -548,6 +556,7 @@ export default {
         sendType: [{required: true, message: "不能为空", trigger: "submit"}],
         startTime: [{required: true, message: "开始时间不能为空", trigger: "submit"}],
         tempId: [{required: true, message: "模板不能为空", trigger: "submit"}],
+        openCommentStatus:[{ required: true, message: '开启评论/弹幕不能为空', trigger: 'change' }]
       }
     };
   },
@@ -868,6 +877,7 @@ export default {
         createTime: null,
         isRating: null,
         autoSopTime: {autoSopType: 2, autoStartTime: '00:00', autoEndTime: '24:00', autoSopSend: 2},
+        openCommentStatus: 0,
       };
       this.resetForm("form");
       this.tags = null;

+ 8 - 0
src/views/qw/sop/updateSop.vue

@@ -238,6 +238,14 @@
 <!--            <div v-if="tempListLoading" slot="prefix" class="select-prefix">正在查询相应模板...</div>-->
 <!--          </el-select>-->
         </el-form-item>
+
+        <el-form-item label="开启评论/弹幕" prop="openCommentStatus">
+          <el-radio-group v-model="form.openCommentStatus">
+            <el-radio :label="1" >开启评论</el-radio>
+            <el-radio :label="2" >开启弹幕</el-radio>
+            <el-radio :label="3" >关闭</el-radio>
+          </el-radio-group>
+        </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer" style="float: right;" >
         <el-button v-if="handleType==1" type="primary" @click="submitForm">确 定</el-button>

+ 274 - 231
src/views/qw/user/index.vue

@@ -1,4 +1,5 @@
 <template>
+
   <div class="app-container">
     <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="100px">
       <el-form-item label="企微主体" prop="corpId">
@@ -67,7 +68,12 @@
       <el-table-column label="企微账号" align="center" prop="qwUserId" />
       <el-table-column label="企微昵称" align="center" prop="qwUserName" />
       <el-table-column label="员工称呼" align="center" prop="welcomeText" />
-<!--      <el-table-column label="所属部门" align="center" prop="departmentName" />-->
+      <el-table-column label="所属部门" align="center" prop="isDel">
+        <template slot-scope="scope">
+          <el-tag v-if="scope.row.isDel == 0" type="success">正常</el-tag>
+          <el-tag v-else type="error">离职</el-tag>
+        </template>
+      </el-table-column>
       <el-table-column label="联系我二维码" align="center" prop="contactWay" >
         <template slot-scope="scope">
           <el-image
@@ -80,12 +86,12 @@
       </el-table-column>
       <el-table-column label="绑定的AI客服" align="center" prop="fastGptRoleName" />
       <el-table-column label="授权码" align="center" prop="appKey" />
-<!--      <el-table-column label="企微状态" align="center" prop="loginStatus">-->
-<!--        <template slot-scope="scope">-->
-<!--          <el-tag v-if="scope.row.loginStatus == 1 && scope.row.toolStatus==1" type="success">在线</el-tag>-->
-<!--          <el-tag v-else type="danger">离线</el-tag>-->
-<!--        </template>-->
-<!--      </el-table-column>-->
+     <el-table-column label="ai状态" align="center" prop="loginStatus">
+        <template slot-scope="scope">
+          <el-tag v-if="scope.row.ipadStatus == 1" type="success">在线</el-tag>
+          <el-tag v-else type="danger">离线</el-tag>
+        </template>
+      </el-table-column>
 <!--      <el-table-column label="插件状态" align="center" prop="toolStatus">-->
 <!--        <template slot-scope="scope">-->
 <!--          <el-tag v-if="scope.row.toolStatus == 1" type="success">在线</el-tag>-->
@@ -114,29 +120,60 @@
             修改员工称呼
           </el-button>
 
-<!--          <el-button-->
-<!--            v-if="scope.row.toolStatus==1"-->
-<!--            size="mini"-->
-<!--            type="text"-->
-<!--            icon="el-icon-sunny"-->
-<!--            plain-->
-<!--            @click="handleLoginQwCode(scope.row)"-->
-<!--            v-hasPermi="['qw:user:login']"-->
-<!--          >-->
-<!--            登录企微-->
-<!--          </el-button>-->
-<!--          <el-button-->
-<!--            v-if="scope.row.appKey!=null && scope.row.toolStatus === 1 && scope.row.loginStatus === 1"-->
-<!--            size="mini"-->
-<!--            type="text"-->
-<!--            icon="el-icon-moon"-->
-<!--            plain-->
-<!--            @click="handleLoginOutQwStatus(scope.row)"-->
-<!--            v-hasPermi="['qw:user:login']"-->
-<!--          >-->
-<!--            退出企微-->
-<!--          </el-button>-->
-
+          <el-button
+            v-if="scope.row.serverStatus==1&&scope.row.ipadStatus!=1"
+            size="mini"
+            type="text"
+            icon="el-icon-sunny"
+            plain
+            @click="handleLoginQwCode(scope.row)"
+            v-hasPermi="['qw:user:login']"
+          >
+            登录企微
+          </el-button>
+         <el-button
+			v-if="scope.row.serverStatus==1&&scope.row.ipadStatus==1"
+            size="mini"
+            type="text"
+            icon="el-icon-moon"
+            plain
+            @click="handleLoginOutQwStatus(scope.row)"
+            v-hasPermi="['qw:user:login']"
+          >
+            退出企微
+          </el-button>
+		<el-button
+			v-if="scope.row.ipadStatus==1"
+		   size="mini"
+		   type="text"
+		   icon="el-icon-moon"
+		   plain
+		   @click="handleTwoCode(scope.row)"
+		   v-hasPermi="['qw:user:login']">
+		   二次验证
+		 </el-button>
+		 <el-button
+		 	v-if="scope.row.serverStatus!=1"
+		    size="mini"
+		    type="text"
+		    icon="el-icon-moon"
+		    plain
+		    @click="handleGetQwIpad(scope.row)"
+		    v-hasPermi="['qw:user:login']"
+		  >
+		    获取Ai主机
+		  </el-button>
+		  <el-button
+		  	v-if="scope.row.serverStatus==1 && scope.row.ipadStatus!=1"
+		     size="mini"
+		     type="text"
+		     icon="el-icon-moon"
+		     plain
+		     @click="handleDelQwIpad(scope.row)"
+		     v-hasPermi="['qw:user:login']"
+		   >
+		     解绑Ai主机
+		   </el-button>
         </template>
       </el-table-column>
       <el-table-column label="主机" align="center" class-name="small-padding fixed-width" width="110px" fixed="right">
@@ -163,17 +200,17 @@
           >
             绑定主机
           </el-button>
-          <el-button
-            v-if="scope.row.loginCodeUrl!=null"
-            size="mini"
-            type="text"
-            icon="el-icon-video-camera-solid"
-            plain
-            @click="handleCloudAP(scope.row.loginCodeUrl)"
-            v-hasPermi="['qw:user:cloudAP']"
-          >
-            获取主机帐密
-          </el-button>
+<!--          <el-button-->
+<!--            v-if="scope.row.loginCodeUrl!=null"-->
+<!--            size="mini"-->
+<!--            type="text"-->
+<!--            icon="el-icon-video-camera-solid"-->
+<!--            plain-->
+<!--            @click="handleCloudAP(scope.row.loginCodeUrl)"-->
+<!--            v-hasPermi="['qw:user:cloudAP']"-->
+<!--          >-->
+<!--            获取主机帐密-->
+<!--          </el-button>-->
           <el-button
             v-if="scope.row.loginCodeUrl!=null"
             size="mini"
@@ -275,36 +312,63 @@
     </el-dialog>
     <!--二维码   -->
     <el-dialog
-      :title="qwLogin.title"
-      :visible.sync="qwLogin.open"
+      title="企微二次认证"
+      :visible.sync="qwLoginTwo.open"
       width="600px"
       append-to-body
       custom-class="qr-login-dialog"
     >
       <div class="qr-login-container">
-        <!-- 包裹 el-image 的 div,控制加载状态 -->
-        <div class="image-wrapper" v-loading="imageLoading" element-loading-text="加载中..." element-loading-spinner="el-icon-loading">
-          <!-- 如果图片未加载或加载失败,显示一个占位图 -->
+        <div class="image-wrapper" v-loading="imageLoading" >
           <el-image
-            :src="'data:image/png;base64,' + qwLogin.codeUrl"
+            :src="'data:image/png;base64,' +qwLoginTwo.codeUrl"
             style="display: block; margin: 0 auto; width: 300px; height: 300px;"
-            @click="handleQrCodeClick"
           />
         </div>
-        <p class="qr-login-instructions">使用企业微信扫码授权登录</p>
-        <el-input
-          v-model="qwLogin.code"
-          placeholder="请输入六位验证码 按回车"
-          clearable
-          size="small"
-          type="text"
-          maxlength="6"
-          class="verification-code-input"
-          @input="validateCode"
-          @keyup.native.enter="handleLoginQwCodeMsg"
-        />
-      </div>
+        <p class="qr-login-instructions">二次验证二维码</p>
+		</div>
+		<div slot="footer" class="dialog-footer" >
+		  <el-button type="primary" @click="qwLoginTwo.open=false">确 定</el-button>
+		</div>
     </el-dialog>
+
+	<el-dialog
+	  :title="qwLogin.title"
+	  :visible.sync="qwLogin.open"
+	  width="600px"
+	  append-to-body
+	  custom-class="qr-login-dialog"
+	>
+	  <div class="qr-login-container">
+	    <div class="image-wrapper" v-loading="imageLoading" >
+	      <el-image
+	        :src="'data:image/png;base64,' +qwLogin.codeUrl"
+	        style="display: block; margin: 0 auto; width: 300px; height: 300px;"
+	      />
+	    </div>
+	    <p class="qr-login-instructions">使用企业微信扫码授权登录</p>
+	  </div>
+	</el-dialog>
+
+	<el-dialog
+	  title="输入企微验证码"
+	  :visible.sync="qwCode.open"
+	  width="600px"
+	  append-to-body>
+	 <el-form  :model="qwCode"  label-width="80px" @submit.native.prevent="handleSubmit">
+	     <el-form-item label="验证码" prop="companyName">
+	       <el-input v-model="qwCode.code" placeholder="输入企微6位验证码" />
+	     </el-form-item>
+	</el-form>
+
+	<div slot="footer" class="dialog-footer">
+	  <el-button type="primary" @click="submitCodeForm">确 定</el-button>
+
+	</div>
+	</el-dialog>
+
+
+
     <!-- 大图预览对话框 -->
     <el-dialog
       :visible.sync="dialogVisible"
@@ -333,12 +397,21 @@ import {
   relieveFastGptRoleById,
   staffListUser,
   loginQwCode,
+  loginQwIpad,
   modifyLoginQwStatus,
   loginQwCodeMsg,
   getQwCodeUrl,
+  twoCode,
+  twoCodeStatus,
+  qrCodeStatus,
+  getQwIpad,
+  delQwIpad,
   logoutQwLogout,
+  qrCodeVerify,
+  outLoginQwIpad,
   loginQwCodeUrl,
   getLoginQwStatus,
+  handleAllocateRemoteHost,
   qwBindCloudHost, qwUnbindCloudHost, handleAuthAppKey, handleInputAuthAppKey, selectCloudAP
 } from '@/api/qw/user'
 import fastGptRole from "@/views/fastGpt/fastGptRole/fastGptRole";
@@ -399,7 +472,18 @@ export default {
         code:null,
         appKey:null,
       },
-
+	 qwLoginTwo:{
+        title:"",
+        open:false,
+        codeUrl:null,
+        code:null,
+        appKey:null,
+     },
+	qwCode:{
+        title:"",
+        open:false,
+        code:null,
+      },
       cloudAPOpen:{
         open:false,
         admin:null,
@@ -414,9 +498,9 @@ export default {
         id:null,
         welcomeText:null,
       },
-      qrCodeInterval:null,
+      twoCodeInterval:null,
       loginQwInterval:null,
-      loginOutQwInterval:null,
+
       imageLoading: true, // 控制加载状态
       // 查询参数
       queryParams: {
@@ -426,6 +510,7 @@ export default {
         corpId: null,
         qwUserName: null,
       },
+	  qwUserId:null,
       companyUserList:[],
       // 表单参数
       form: {
@@ -463,41 +548,18 @@ export default {
     'qwLogin.open'(newVal) {
       if (!newVal) {
         // 如果弹窗关闭,清除定时器
-        this.beforeDestroy();
+        clearInterval(this.loginQwInterval);
 
       }
     },
   },
   methods: {
-    // handleChangeIP(row){
-    //   this.updateIp.open = true
-    //   this.updateIpForm.id = row.id
-    //   this.updateIpForm.newIp = null;
-    // },
-    // submitUpdateIpForm(){
-    //   if (this.updateIpForm.newIp==null){
-    //     this.$message.warning("请填写IP")
-    //     return
-    //   }
-    //   const data = {
-    //     id : this.updateIpForm.id,
-    //     loginCodeUrl : this.updateIpForm.newIp
-    //   }
-    //
-    //   updateUser(data).then(response => {
-    //     this.msgSuccess("绑定成功");
-    //     this.updateIp.open = false;
-    //     this.getList();
-    //   });
-    // },
-    /** 查询企微用户列表 */
     getList() {
       this.loading = true;
       staffListUser(this.queryParams).then(response => {
         this.userList = response.rows;
         this.total = response.total;
         this.loading = false;
-
       });
 
     },
@@ -523,172 +585,153 @@ export default {
     },
     //登录
     handleLoginQwCode(val){
-
-      // v-if="scope.row.appKey!=null && scope.row.toolStatus === 1 && scope.row.loginStatus === 0"
       if (val.appKey==null || val.appKey===''){
         return this.$message.warning("没有授权码,无法登录企业微信,请授权");
       }
+      loginQwIpad({qwUserId:val.id}).then(res => {
+		this.qwUserId=val.id;
+        this.qwLogin.code=null;
+        this.imageLoading=false;
+		console.log(res)
+		if(res.msg=="success"){
+			this.qwLogin.codeUrl=res.qrCode64
+			this.qwLogin.open=true;
+			this.loginQwPolling();
+		}else{
+			this.$message.success(res.msg);
+			this.getList()
+		}
 
-      if (val.toolStatus===0 || val.toolStatus==null ){
-        return this.$message.warning("插件离线了,无法登录企业微信,请联系管理员~");
-      }
-
-      if (val.loginStatus===1 && val.toolStatus===1){
-        return this.$message.success("已经登录了,无需重复登录");
-      }
-
-      loginQwCode({appKey:val.appKey}).then(res => {
-        this.qwLogin.appKey=val.appKey;
-        this.qwLogin.open=true;
-        this.imageLoading=true;
+      })
+    },
 
-        //定时器 获取登录状态(有自动登录的)
-        this.loginQwPolling();
+	handleTwoCode(val){
 
-        // 调用后台接口获取新的二维码URL
-        loginQwCodeUrl({ appKey: this.qwLogin.appKey }).then(res => {
-          getQwCodeUrl({appKey:this.qwLogin.appKey}).then(res=>{
-            this.qwLogin.codeUrl=res.base64 // 更新二维码URL
-          }).catch(()=>{
-            this.resetQwLogin();
-          }).finally(()=>{
-            this.imageLoading=false;
-          })
+		twoCode({ qwUserId: val.id }).then(res => {
+		console.log(res)
+		this.qwLoginTwo.open=true;
+		this.qwLoginTwo.codeUrl=res.qrCode
 
         });
 
-        // setTimeout(()=>{
-        //
-        //     getQwCodeUrl({appKey:val.appKey}).then(res=>{
-        //       this.qwLogin.codeUrl=res.base64
-        //     }).catch(()=>{
-        //       this.resetQwLogin();
-        //     }).finally(()=>{
-        //       this.imageLoading=false;
-        //     })
-        //
-        // },3000)
-
-        // 启动定时器,每隔45秒更新一次二维码
-        this.startQrCodePolling();
-
-      })
-    },
-
-    // 每隔45秒请求一次二维码
-    startQrCodePolling() {
-      this.qrCodeInterval = setInterval(() => {
-        this.refreshQrCode();
-      }, 45000);  // 45秒更新一次
-    },
 
+	},
+	twoCodePolling() {
+	  this.twoCodeInterval = setInterval(() => {
+	    twoCodeStatus({ qwUserId: this.qwUserId }).then(res => {
+			console.log(res)
+
+	      if (res.msg==104001) {
+			this.$message.success('登录成功');
+			this.clearDl()
+	        clearInterval(this.loginQwInterval);
+	      }else if(res.msg==100004){
+			  this.clearDl()
+		  }
+	    });
+	  }, 3000);
+	},
     loginQwPolling() {
-      let elapsedTime = 0;  // 记录已执行的时间(单位:秒)
-
       this.loginQwInterval = setInterval(() => {
-        // 每次轮询后增加已执行的时间
-        elapsedTime += 5;  // 因为每 3 秒执行一次
-
-        // 请求登录状态
-        getLoginQwStatus({ appKey: this.qwLogin.appKey }).then(res => {
-          if (res.status==1) {
-            this.$message.success('登录成功');
-            clearInterval(this.loginQwInterval);  // 登录成功,停止轮询
-            this.resetQwLogin();
-          }
-          // 判断是否超过最大轮询时间(60秒)
-          if (elapsedTime >= 90) {
-            clearInterval(this.loginQwInterval);  // 超过90秒停止轮询
-            this.$message.warning('登录超时,请稍后再试!')
-            this.resetQwLogin();
-          }
+        qrCodeStatus({ qwUserId: this.qwUserId }).then(res => {
+			console.log(res)
+			if (res.msg==22) {
+				this.$message.success('账号企业不一致请重新扫码登录');
+				this.clearDl();
+			}
+          if (res.msg==104001) {
+			this.$message.success('登录成功');
+			this.clearDl()
+
+          }else if(res.msg==100004){
+			  this.qwCode.open=true;
+			  clearInterval(this.loginQwInterval);
+		  }
         });
-      }, 3000);  // 每 3 秒更新一次
-    },
-
-    // 退出时清除定时器
-    beforeDestroy() {
-      if (this.qrCodeInterval) {
-        clearInterval(this.qrCodeInterval);  // 清除定时器
-      }
-      if (this.loginQwInterval) {
-        clearInterval(this.loginQwInterval);  // 清除定时器
-      }
-      if (this.loginOutQwInterval){
-        clearInterval(this.loginOutQwInterval);  // 清除定时器
-      }
-      this.resetQwLogin();
-    },
-
-    // 刷新二维码
-    refreshQrCode() {
-      // 调用后台接口获取新的二维码URL
-      loginQwCodeUrl({ appKey: this.qwLogin.appKey }).then(res => {
-        getQwCodeUrl({appKey:this.qwLogin.appKey}).then(res=>{
-          this.qwLogin.codeUrl=res.base64 // 更新二维码URL
-        }).catch(()=>{
-          this.resetQwLogin();
-        }).finally(()=>{
-          this.imageLoading=false;
-        })
-
-      });
+      }, 3000);
     },
+	submitCodeForm(){
+
+		qrCodeVerify({ code: this.qwCode.code,qwUserId: this.qwUserId }).then(res => {
+			console.log(res)
+
+			this.$message.success('验证成功账号信息确认中。。。。');
+			this.qwCode.open=false;
+			 this.loginQwInterval = setTimeout(() => {
+			     qrCodeStatus({ qwUserId: this.qwUserId }).then(res => {
+			         console.log(res);
+			         if (res.msg == 23) {
+			             this.$message.error('账号不一致请重新扫码登录');
+			             this.clearDl();
+			         }
+					 if (res.msg == 22) {
+					     this.$message.error('账号企业不一致请重新扫码登录');
+					     this.clearDl();
+					 }
+			         if (res.msg == 104001) {
+			             this.$message.success('登录成功');
+			             this.clearDl();
+			         }
+			     });
+			 }, 4000);
+		});
+	},
+
+	clearDl(){
+		this.qwCode.open=false;
+		this.qwLogin.open=false;
+		clearInterval(this.loginQwInterval);
+		this.getList()
+	},
 
-    handleQrCodeClick(){
-      this.imageLoading=true;
-      // 调用后台接口获取新的二维码URL
-      loginQwCodeUrl({ appKey: this.qwLogin.appKey }).then(res => {
-
-        setTimeout(()=>{
-          getQwCodeUrl({appKey:this.qwLogin.appKey}).then(res=>{
-
-            //确保万一再调用一下刷新二维码
-            this.qwLogin.codeUrl=res.base64 // 更新二维码URL
-
-          }).catch(()=>{
-            this.resetQwLogin();
-          }).finally(()=>{
-            this.imageLoading=false;
-          })
-
-        },3000)
 
 
-      });
-    },
     //退出
     handleLoginOutQwStatus(val){
-      this.loading=true;
-      logoutQwLogout({appKey:val.appKey,loginStatus:0}).then(res => {
-
-        let elapsedTime = 0;  // 记录已执行的时间(单位:秒)
-
-        this.loginOutQwInterval = setInterval(() => {
-          // 每次轮询后增加已执行的时间
-          elapsedTime += 3;  // 因为每 3 秒执行一次
-
-          // 请求登录状态
-          getLoginQwStatus({ appKey: val.appKey }).then(res => {
-            if (res.status==0) {
-              this.$message.success('退出成功');
-              clearInterval(this.loginOutQwInterval);  // 登录成功,停止轮询
-              this.resetQwLogin();
-            }
-
-            // 判断是否超过最大轮询时间(60秒)
-            if (elapsedTime >= 90) {
-              clearInterval(this.loginOutQwInterval);  // 超过90秒停止轮询
-              this.$message.warning('退出超时,请多等待后刷新页面!')
-              this.resetQwLogin();
-
-            }
-          });
-        }, 3000);  // 每 3 秒更新一次
+      outLoginQwIpad({qwUserId: val.id}).then(res => {
 
+        this.$message.success("退出登录成功");
+		this.getList()
       })
+
     },
 
+
+	handleGetQwIpad(val){
+    getQwIpad({ qwUserId: val.id }).then(res => {
+      this.$message.success("获取主机成功");
+      this.getList();
+    }).catch(error => {
+      console.log(error);
+      if (error.code  === 501) {
+        this.$confirm(
+          '当前区域没有多余的名额,将为你分配异地名额,会导致企业微信需要扫脸重新登录,并且半个小时后需要进行验证',
+          '提示',
+          {
+            confirmButtonText: '确定',
+            cancelButtonText: '取消',
+            type: 'warning',
+            dangerouslyUseHTMLString: true
+          }
+        ).then(() => {
+          return handleAllocateRemoteHost({ qwUserId: val.id });
+        }).then(res => {
+          this.$message.success('异地主机分配成功');
+          this.getList();
+        }).catch(() => {
+          this.$message.info('已取消异地主机分配');
+        });
+      } else {
+        this.$message.error('获取主机失败');
+      }
+    });
+	},
+	handleDelQwIpad(val){
+	  delQwIpad({qwUserId: val.id}).then(res => {
+	    this.$message.success("解绑主机成功");
+		this.getList()
+	  })
+	},
     //传验证码
     handleLoginQwCodeMsg(){
       loginQwCodeMsg({appKey: this.qwLogin.appKey,code:this.qwLogin.code}).then(res => {