zyp 3 months ago
parent
commit
e31df3bcc7
43 changed files with 345 additions and 5558 deletions
  1. 2 2
      .env.development
  2. 2 2
      .env.production
  3. 2 2
      .env.staging
  4. 0 53
      src/api/aiob/AiobBaiduCallApi.js
  5. 0 53
      src/api/aiob/AiobBaiduEncryption.js
  6. 0 60
      src/api/aiob/AiobBaiduTask.js
  7. 0 10
      src/api/company/companyVoiceRobotic.js
  8. 0 53
      src/api/course/push.js
  9. 0 7
      src/api/live/liveData.js
  10. 1 9
      src/api/live/liveVideo.js
  11. 0 19
      src/api/live/liveWatchUser.js
  12. 0 12
      src/api/qw/sop.js
  13. 2 2
      src/api/watch/deviceInfo.js
  14. 4 5
      src/components/VideoUpload/index.vue
  15. 1 1
      src/layout/components/Sidebar/Logo.vue
  16. 0 13
      src/router/index.js
  17. 1 1
      src/utils/cos.js
  18. 1 1
      src/utils/obs.js
  19. 0 86
      src/utils/webSocket.js
  20. 4 26
      src/views/ad/adSite/index.vue
  21. 0 439
      src/views/ad/statistics/creativeStatistics.vue
  22. 0 301
      src/views/aiob/AiobBaiduCallApi/index.vue
  23. 0 286
      src/views/aiob/AiobBaiduEncryption/index.vue
  24. 0 678
      src/views/aiob/AiobBaiduTask/index.vue
  25. 0 814
      src/views/company/companyVoiceRobotic/index-old.vue
  26. 200 270
      src/views/company/companyVoiceRobotic/index.vue
  27. 0 404
      src/views/course/push/index.vue
  28. 16 34
      src/views/course/userCourse/index.vue
  29. 16 51
      src/views/his/statistics/ad.vue
  30. 0 497
      src/views/his/statistics/adBdStatic.vue
  31. 2 2
      src/views/his/storeProduct/index.vue
  32. 1 10
      src/views/live/live/index.vue
  33. 0 355
      src/views/live/liveConsole/index.vue
  34. 0 769
      src/views/live/liveData/index.vue
  35. 0 51
      src/views/live/liveWatchUser/index.vue
  36. 3 2
      src/views/login.vue
  37. 2 45
      src/views/qw/sop/sop.vue
  38. 29 54
      src/views/system/config/config.vue
  39. 2 4
      src/views/watch/deviceInfo/details.vue
  40. 36 51
      src/views/watch/deviceInfo/index.vue
  41. 9 18
      src/views/watch/isBind/index.vue
  42. 8 5
      src/views/watch/isSend/index.vue
  43. 1 1
      vue.config.js

+ 2 - 2
.env.development

@@ -1,10 +1,10 @@
 # 页面标题
-VUE_APP_TITLE =九州互联网医院管理系统
+VUE_APP_TITLE =九州在线互联网医院管理系统
 
 # 开发环境配置
 ENV = 'development'
 
-# 九州互联网医院管理系统/开发环境
+# 九州在线互联网医院管理系统/开发环境
 VUE_APP_BASE_API = '/dev-api'
 
 # 路由懒加载

+ 2 - 2
.env.production

@@ -1,8 +1,8 @@
 # 页面标题
-VUE_APP_TITLE = 九州互联网医院管理系统
+VUE_APP_TITLE = 九州在线互联网医院管理系统
 
 # 生产环境配置
 ENV = 'production'
 
-#九州互联网医院管理系统/生产环境
+#九州在线互联网医院管理系统/生产环境
 VUE_APP_BASE_API = '/prod-api'

+ 2 - 2
.env.staging

@@ -1,10 +1,10 @@
 # 页面标题
-VUE_APP_TITLE =九州互联网医院管理系统
+VUE_APP_TITLE =九州在线互联网医院管理系统
 
 NODE_ENV = production
 
 # 测试环境配置
 ENV = 'staging'
 
-#九州互联网医院管理系统/测试环境
+#九州在线互联网医院管理系统/测试环境
 VUE_APP_BASE_API = '/stage-api'

+ 0 - 53
src/api/aiob/AiobBaiduCallApi.js

@@ -1,53 +0,0 @@
-import request from '@/utils/request'
-
-// 查询百度外呼接口配置列表
-export function listAiobBaiduCallApi(query) {
-  return request({
-    url: '/aiob/AiobBaiduCallApi/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 查询百度外呼接口配置详细
-export function getAiobBaiduCallApi(id) {
-  return request({
-    url: '/aiob/AiobBaiduCallApi/' + id,
-    method: 'get'
-  })
-}
-
-// 新增百度外呼接口配置
-export function addAiobBaiduCallApi(data) {
-  return request({
-    url: '/aiob/AiobBaiduCallApi',
-    method: 'post',
-    data: data
-  })
-}
-
-// 修改百度外呼接口配置
-export function updateAiobBaiduCallApi(data) {
-  return request({
-    url: '/aiob/AiobBaiduCallApi',
-    method: 'put',
-    data: data
-  })
-}
-
-// 删除百度外呼接口配置
-export function delAiobBaiduCallApi(id) {
-  return request({
-    url: '/aiob/AiobBaiduCallApi/' + id,
-    method: 'delete'
-  })
-}
-
-// 导出百度外呼接口配置
-export function exportAiobBaiduCallApi(query) {
-  return request({
-    url: '/aiob/AiobBaiduCallApi/export',
-    method: 'get',
-    params: query
-  })
-}

+ 0 - 53
src/api/aiob/AiobBaiduEncryption.js

@@ -1,53 +0,0 @@
-import request from '@/utils/request'
-
-// 查询百度AI外呼加密列表
-export function listAiobBaiduEncryption(query) {
-  return request({
-    url: '/aiob/AiobBaiduEncryption/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 查询百度AI外呼加密详细
-export function getAiobBaiduEncryption(id) {
-  return request({
-    url: '/aiob/AiobBaiduEncryption/' + id,
-    method: 'get'
-  })
-}
-
-// 新增百度AI外呼加密
-export function addAiobBaiduEncryption(data) {
-  return request({
-    url: '/aiob/AiobBaiduEncryption',
-    method: 'post',
-    data: data
-  })
-}
-
-// 修改百度AI外呼加密
-export function updateAiobBaiduEncryption(data) {
-  return request({
-    url: '/aiob/AiobBaiduEncryption',
-    method: 'put',
-    data: data
-  })
-}
-
-// 删除百度AI外呼加密
-export function delAiobBaiduEncryption(id) {
-  return request({
-    url: '/aiob/AiobBaiduEncryption/' + id,
-    method: 'delete'
-  })
-}
-
-// 导出百度AI外呼加密
-export function exportAiobBaiduEncryption(query) {
-  return request({
-    url: '/aiob/AiobBaiduEncryption/export',
-    method: 'get',
-    params: query
-  })
-}

+ 0 - 60
src/api/aiob/AiobBaiduTask.js

@@ -1,60 +0,0 @@
-import request from '@/utils/request'
-
-// 查询百度AI外呼任务列表
-export function listAiobBaiduTask(query) {
-  return request({
-    url: '/aiob/AiobBaiduTask/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 查询百度AI外呼任务详细
-export function getAiobBaiduTask(id) {
-  return request({
-    url: '/aiob/AiobBaiduTask/' + id,
-    method: 'get'
-  })
-}
-
-// 新增百度AI外呼任务
-export function addAiobBaiduTask(data) {
-  return request({
-    url: '/aiob/AiobBaiduTask',
-    method: 'post',
-    data: data
-  })
-}
-
-// 修改百度AI外呼任务
-export function updateAiobBaiduTask(data) {
-  return request({
-    url: '/aiob/AiobBaiduTask',
-    method: 'put',
-    data: data
-  })
-}
-
-// 删除百度AI外呼任务
-export function delAiobBaiduTask(id) {
-  return request({
-    url: '/aiob/AiobBaiduTask/' + id,
-    method: 'delete'
-  })
-}
-
-// 导出百度AI外呼任务
-export function exportAiobBaiduTask(query) {
-  return request({
-    url: '/aiob/AiobBaiduTask/export',
-    method: 'get',
-    params: query
-  })
-}
-// 导出百度AI外呼任务
-export function robotList() {
-  return request({
-    url: '/aiob/AiobBaiduTask/robotList',
-    method: 'get'
-  })
-}

+ 0 - 10
src/api/company/companyVoiceRobotic.js

@@ -42,16 +42,6 @@ export function addRobotic(data) {
   })
 }
 
-
-// 新增机器人外呼任务
-export function addScheme(data) {
-  return request({
-    url: '/company/companyVoiceRobotic/addScheme',
-    method: 'post',
-    data: data
-  })
-}
-
 // 修改机器人外呼任务
 export function updateRobotic(data) {
   return request({

+ 0 - 53
src/api/course/push.js

@@ -1,53 +0,0 @@
-import request from '@/utils/request'
-
-// 查询营销活动推送列表
-export function listPush(query) {
-  return request({
-    url: '/push/push/list',
-    method: 'get',
-    params: query
-  })
-}
-
-// 查询营销活动推送详细
-export function getPush(id) {
-  return request({
-    url: '/push/push/' + id,
-    method: 'get'
-  })
-}
-
-// 新增营销活动推送
-export function addPush(data) {
-  return request({
-    url: '/push/push',
-    method: 'post',
-    data: data
-  })
-}
-
-// 修改营销活动推送
-export function updatePush(data) {
-  return request({
-    url: '/push/push',
-    method: 'put',
-    data: data
-  })
-}
-
-// 删除营销活动推送
-export function delPush(id) {
-  return request({
-    url: '/push/push/' + id,
-    method: 'delete'
-  })
-}
-
-// 导出营销活动推送
-export function exportPush(query) {
-  return request({
-    url: '/push/push/export',
-    method: 'get',
-    params: query
-  })
-}

+ 0 - 7
src/api/live/liveData.js

@@ -1,7 +0,0 @@
-import request from '@/utils/request'
-export function recentLive() {
-  return request({
-    url: '/liveData/liveData/recentLive',
-    method: 'get',
-  })
-}

+ 1 - 9
src/api/live/liveVideo.js

@@ -17,14 +17,6 @@ export function getLiveVideo(videoId) {
   })
 }
 
-// 查询直播视频详细
-export function getLiveVideoByLiveId(liveId) {
-  return request({
-    url: '/live/liveVideo/liveVideoByLiveId/' + liveId,
-    method: 'get'
-  })
-}
-
 // 新增直播视频
 export function addLiveVideo(data) {
   return request({
@@ -58,4 +50,4 @@ export function exportLiveVideo(query) {
     method: 'get',
     params: query
   })
-}
+}

+ 0 - 19
src/api/live/liveWatchUser.js

@@ -1,19 +0,0 @@
-import request from '@/utils/request'
-
-// 查询直播间用户列表
-export function watchUserList(query) {
-  return request({
-    url: '/live/liveWatchUser/watchUserList',
-    method: 'get',
-    params: query
-  })
-}
-
-// 直播间用户禁言
-export function changeUserStatus(query) {
-  return request({
-    url: '/live/liveWatchUser/changeUserState',
-    method: 'put',
-    params: query
-  })
-}

+ 0 - 12
src/api/qw/sop.js

@@ -8,18 +8,6 @@ export function listSop(query) {
     params: query
   })
 }
-export function loginQwAll() {
-  return request({
-    url: '/qw/sop/loginQwAll',
-    method: 'get'
-  })
-}
-export function qwLoginOutAll() {
-  return request({
-    url: '/qw/sop/qwLoginOutAll',
-    method: 'get',
-  })
-}
 // 导出企微sop
 export function exportSop(query) {
   return request({

+ 2 - 2
src/api/watch/deviceInfo.js

@@ -71,11 +71,11 @@ export function exportDeviceInfo(query) {
 }
 
   // 查询用户信息
-export function getUser(data) {
+export function getUser(deviceId) {
   return request({
     url: '/watch-api/device/set/up/getUserInfo',
     method: 'get',
-    params:data
+    params: { deviceId } 
   })
 }
 

+ 4 - 5
src/components/VideoUpload/index.vue

@@ -57,7 +57,6 @@
       <el-radio-group v-model="localUploadType">
         <el-radio :label="1" >线路一</el-radio>
         <el-radio :label="2" >线路二</el-radio>
-        <!--        <el-radio :label="3" >线路三</el-radio>-->
       </el-radio-group>
     </el-form-item>
   </div>
@@ -201,9 +200,9 @@ export default {
         console.log("isPrivate=======>",this.isPrivate)
         let line_1='' ;
         if (this.isPrivate===0){
-          line_1 = `https://tcpv.ylrzcloud.com${data.urlPath}`;
+          line_1 = `https://myhktcpv.ylrzcloud.com${data.urlPath}`;
         }else {
-          line_1 = `https://rttcpv.ylrzcloud.com${data.urlPath}`;
+          line_1 = `https://myhktcpv.ylrzcloud.com${data.urlPath}`;
         }
 
         let urlPathWithoutFirstSlash = data.urlPath.substring(1);
@@ -227,9 +226,9 @@ export default {
         console.log("华为OBS返回========>",data);
         let line_2='' ;
         if (this.isPrivate===0){
-          line_2 = `https://obs.ylrztop.com/${data.urlPath}`;
+          line_2 = `https://myhkobs.ylrztop.com/${data.urlPath}`;
         }else {
-          line_2 = `https://rtobs.ylrztop.com/${data.urlPath}`;
+          line_2 = `https://myhkobs.ylrztop.com/${data.urlPath}`;
         }
         // this.$emit("update:videoUrl", data);
         this.$emit("update:line_2", line_2);

+ 1 - 1
src/layout/components/Sidebar/Logo.vue

@@ -35,7 +35,7 @@ export default {
   },
   data() {
     return {
-      title: '九州互联网医院',
+      title: '九州在线互联网医院',
       logo: logoImg
     }
   }

+ 0 - 13
src/router/index.js

@@ -190,19 +190,6 @@ export const constantRoutes = [
       }
     ]
   },
-  {
-    path: '/live',
-    component: Layout,
-    hidden: true,
-    children: [
-      {
-        path: 'LiveConsole/:liveId', // 动态路由参数
-        component: () => import('@/views/live/liveConsole'), // 使用 import 动态加载
-        name: 'LiveConsole',
-        meta: { title: '直播中控台', activeMenu: '/live/liveConsole' }
-      }
-    ]
-  },
 ]
 
 export default new Router({

+ 1 - 1
src/utils/cos.js

@@ -3,7 +3,7 @@ import { Message } from 'element-ui';
 import { getTmpSecretKey } from '@/api/common';
 
 const config = {
-    Bucket: 'hylj-1323137866',
+    Bucket: 'myhk-1323137866',
     Region: 'ap-chongqing',
 };
 

+ 1 - 1
src/utils/obs.js

@@ -29,7 +29,7 @@ export const uploadToOBS = async(file,progressCallback,type) =>  {
         return new Promise((resolve, reject) => {
             //上传对象
             obsClient.putObject({
-                Bucket: 'ylrz-obs2024',//桶名称
+                Bucket: 'myhk-hw079058881',//桶名称
                 Key: key,//文件名
                 Body: file,
                 ProgressCallback: callback,//进度回调

+ 0 - 86
src/utils/webSocket.js

@@ -1,86 +0,0 @@
-export class LiveWS {
-  /**
-   * @param {string} url - WebSocket 服务器地址
-   * @param {number} liveId - 直播间ID
-   * @param {number} userId - 用户ID
-   * @param {number} checkInterval - 检查连接状态的时间间隔,单位毫秒
-   * @param {number} reconnectDelay - 连接断开后重连的延迟,单位毫秒
-   */
-  constructor(url, liveId, userId, checkInterval = 5000, reconnectDelay = 3000) {
-    this.url = url + `?liveId=${liveId}&userId=${userId}`;
-    this.liveId = liveId;
-    this.userId = userId;
-    this.checkInterval = checkInterval;
-    this.reconnectDelay = reconnectDelay;
-    this.ws = null;
-    this.isManualClose = false;
-    this.connect();
-    this.startHeartbeat();
-  }
-
-  connect() {
-    console.log("Connecting to WebSocket:");
-    this.ws = new WebSocket(this.url);
-
-    // 绑定事件
-    this.ws.onopen = (event) => {
-      console.log("WebSocket connected:", event);
-    };
-
-    this.ws.onmessage = (event) => {
-      console.log("Received message:", event.data);
-      // 根据需要处理消息
-    };
-
-    this.ws.onerror = (error) => {
-      console.error("WebSocket error:", error);
-    };
-
-    this.ws.onclose = (event) => {
-      console.warn("WebSocket closed:", event);
-      // 如果不是主动关闭,则重连
-      if (!this.isManualClose) {
-        setTimeout(() => this.reconnect(), this.reconnectDelay);
-      }
-    };
-  }
-
-  reconnect() {
-    console.log("Reconnecting WebSocket...");
-    this.connect();
-  }
-
-  // 定时检查连接状态
-  startHeartbeat() {
-    this.heartbeatTimer = setInterval(() => {
-      if (!this.ws || this.ws.readyState !== WebSocket.OPEN) {
-        console.warn("WebSocket not open. Attempting to reconnect...");
-        this.reconnect();
-      } else {
-        // 发送信息
-        this.ws.send(JSON.stringify({'cmd':'heartbeat','msg':'ping', 'liveId': this.liveId, 'userId': this.userId}));
-        console.log("WebSocket is healthy.");
-      }
-    }, this.checkInterval);
-  }
-
-  // 主动关闭 WebSocket 连接,并清除定时任务
-  close() {
-    this.isManualClose = true;
-    if (this.heartbeatTimer) {
-      clearInterval(this.heartbeatTimer);
-    }
-    if (this.ws) {
-      this.ws.close();
-    }
-  }
-
-  // 发送消息方法
-  send(message) {
-    if (this.ws && this.ws.readyState === WebSocket.OPEN) {
-      this.ws.send(message);
-    } else {
-      console.error("WebSocket is not open. Message not sent.");
-    }
-  }
-}

+ 4 - 26
src/views/ad/adSite/index.vue

@@ -93,13 +93,7 @@
         </template>
       </el-table-column>
       <el-table-column label="账号" align="center" prop="accountName" />
-      <el-table-column label="链接" align="center">
-        <template slot-scope="scope">
-          <el-tooltip class="item" effect="dark" content="复制链接" placement="top-start">
-            <el-link type="primary" @click="copyUrl(scope.row.url)">{{scope.row.url}}</el-link>
-          </el-tooltip>
-        </template>
-      </el-table-column>
+      <el-table-column label="链接" align="center" prop="url" />
       <el-table-column label="备注" align="center" prop="remark" />
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
         <template slot-scope="scope">
@@ -165,11 +159,6 @@
             <el-option v-for="item in domainList" :value="item.id" :key="item.id" :label="item.domain" />
           </el-select>
         </el-form-item>
-        <el-form-item label="获客链接" prop="workId">
-          <el-select v-model="form.workId" filterable>
-            <el-option v-for="item in workList" :value="item.id" :key="item.id" :label="item.linkName" />
-          </el-select>
-        </el-form-item>
         <el-form-item label="备注" prop="remark">
           <el-input v-model="form.remark" placeholder="请输入备注" />
         </el-form-item>
@@ -184,10 +173,12 @@
 
 <script>
 import { listAdSite, getAdSite, delAdSite, addAdSite, updateAdSite, exportAdSite } from "@/api/ad/adSite";
+import {listAll as bdAccountListAll} from "@/api/baidu/BdAccount";
+import {listAll as youkuAccountListAll} from "@/api/ad/AdYouKuaccount";
+import {listAll as iqiyiAccountListAll} from "@/api/ad/AdIqiyiAccount";
 import {listAll as templateListAll} from "@/api/ad/htmlTemplate";
 import {listAll as domainListAll} from "@/api/ad/adDomain";
 import {listAll as accountListAll} from "@/api/ad/adAccount";
-import {listAll as workUrlListAll} from '@/api/qw/workLink'
 
 export default {
   name: "AdSite",
@@ -230,7 +221,6 @@ export default {
       },
       // 表单参数
       form: {},
-      workList: [],
       // 表单校验
       rules: {
       }
@@ -249,9 +239,6 @@ export default {
     accountListAll().then(e => {
       this.accountAllList = e.data;
     })
-    workUrlListAll().then(e => {
-      this.workList = e.data;
-    })
     this.getList();
   },
   methods: {
@@ -301,15 +288,6 @@ export default {
       this.single = selection.length!==1
       this.multiple = !selection.length
     },
-    copyUrl(url){
-      navigator.clipboard.writeText(url)
-        .then(() => {
-          this.msgSuccess("复制成功");
-        })
-        .catch(err => {
-          this.msgError("复制失败");
-        });
-    },
     /** 新增按钮操作 */
     handleAdd() {
       this.reset();

+ 0 - 439
src/views/ad/statistics/creativeStatistics.vue

@@ -1,439 +0,0 @@
-<template>
-  <div class="app-container">
-    <div class="app-content">
-
-      <div class="title" style="display: flex; justify-content: center; align-items: center;">定向统计</div>
-
-
-      <el-form class="search-form" :inline="true" label-width="90px">
-        <el-form-item label="时间" prop="time">
-          <el-date-picker
-            v-model="queryParams.time"
-            type="daterange"
-            range-separator="至"
-            value-format="yyyy-MM-dd"
-            start-placeholder="开始日期"
-            end-placeholder="结束日期">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="定向维度">
-          <el-select v-model="queryParams.reportType" placeholder="请选择维度">
-            <el-option
-              v-for="item in options2"
-              :key="item.value"
-              :label="item.label"
-              :value="item.value">
-            </el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="选择部门" prop="userId">
-            <treeselect style="width: 217px" :clearable="false" clearable v-model="deptId" :options="deptOptions" :show-count="true"
-                        placeholder="请选择归属部门"/>
-        </el-form-item>
-        <el-form-item label="选择员工" prop="userId">
-          <el-select v-model="queryParams.userId" filterable clearable @change="accountListFun" placeholder="请选择员工">
-            <el-option
-              v-for="item in users"
-              :key="item.userId"
-              :label="item.nickName"
-              :value="item.userId">
-            </el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="推广账户" prop="accountId">
-          <el-select v-model="queryParams.id" @change="planLoad" filterable clearable placeholder="请选择推广账户">
-            <el-option
-              v-for="item in accountList"
-              :key="item.id"
-              :label="item.accountName"
-              :value="item.id">
-            </el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item>
-          <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
-          <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
-        </el-form-item>
-      </el-form>
-    </div>
-<!--    <div ref="chartContainer" style="width: 100%; height: 400px;"></div>-->
-<!--    <el-button class="export" size="small" @click="handleExport"-->
-<!--               style="float: right; margin-bottom: 15px; margin-right: 40px;">导出-->
-<!--    </el-button>-->
-    <div class="table-box" style="margin: 0 auto">
-      <el-table :data="dataList" border v-loading="loading" style="width: 100%" height="500">
-        <el-table-column label="地区" v-if="queryParams.reportType == 2324048">
-          <template slot-scope="scope">
-            {{scope.row.prov.provinceName}}
-          </template>
-        </el-table-column>
-        <el-table-column label="性别" v-if="queryParams.reportType == 2503330">
-          <template slot-scope="scope">
-            {{scope.row.genderName}}
-          </template>
-        </el-table-column>
-        <el-table-column label="年龄" v-if="queryParams.reportType == 2510393">
-          <template slot-scope="scope">
-            {{scope.row.ageName}}
-          </template>
-        </el-table-column>
-        <el-table-column label="意向词" v-if="queryParams.reportType == 2532512">
-          <template slot-scope="scope">
-            {{scope.row.showWord}} - {{scope.row.feedWord}}
-          </template>
-        </el-table-column>
-        <el-table-column prop="date" label="日期" />
-        <el-table-column prop="impression" label="展现" />
-        <el-table-column prop="click" label="点击" />
-        <el-table-column prop="cost" label="消费" />
-        <el-table-column prop="ctr" label="点击率">
-          <template slot-scope="scope">
-            {{scope.row.ctr}}%
-          </template>
-        </el-table-column>
-        <el-table-column prop="cpc" label="平均点击价格" />
-        <el-table-column prop="cpm" label="千次展现消费" />
-        <el-table-column prop="weixinFollowSuccessConversions" label="微信加粉成功" />
-        <el-table-column prop="weixinFollowSuccessConversionsCost" label="微信加粉成本" />
-        <el-table-column prop="feedOCPCConversionsDetail133" label="直播间微信加粉成功" />
-        <el-table-column prop="feedOCPCConversionsDetail133Cost" label="直播间微信加粉成本" />
-      </el-table>
-      <pagination
-        v-show="total>0"
-        :total="total"
-        :page.sync="queryParams.page"
-        :limit.sync="queryParams.rowCount"
-        @pagination="getReportData"
-      />
-    </div>
-  </div>
-
-</template>
-
-<script>
-import {listStore} from "@/api/his/storeProduct";
-import echarts from 'echarts'
-import {orderChartData, storeOrderChart, storeOrderChartStore, storeExport} from "@/api/his/index";
-import {getReportData} from "@/api/baidu/statistics";
-import {getUserListByDeptId} from "@/api/company/companyUser";
-import {listAll} from "@/api/baidu/BdAccount";
-import Treeselect from "@riophae/vue-treeselect";
-import {treeselect} from "@/api/company/companyDept";
-import "@riophae/vue-treeselect/dist/vue-treeselect.css";
-
-export default {
-  components: {Treeselect},
-  data() {
-    return {
-      deptOptions: [],
-      loading: false,
-      total: 0,
-      exportLoading: false,
-      deptId: null,
-      queryParams: {
-        id: null,
-        reportType: 2324048,
-        startDate: null,
-        endDate: null,
-        time: '',
-        page: 0,
-        rowCount: 10,
-      },
-      accountList: [],
-      users: [],
-      dateList: [],
-      tableList: [],
-      planList: [],
-      unitList: [],
-      creativeList: [],
-      chart: null,
-      pload: false,
-      uload: false,
-      aload: false,
-      dataList: [],
-      options: [{
-        value: '1',
-        label: '今天'
-      }, {
-        value: '2',
-        label: '昨天'
-      }, {
-        value: '3',
-        label: '本周'
-      }, {
-        value: '4',
-        label: '上周'
-      }, {
-        value: '5',
-        label: '本月'
-      }
-        , {
-          value: '6',
-          label: '上月'
-        },
-        {
-          value: '7',
-          label: '本季度'
-        },
-        {
-          value: '8',
-          label: '上季度'
-        }
-        , {
-          value: '9',
-          label: '本年'
-        }
-        , {
-          value: '10',
-          label: '去年'
-        }],
-      options2: [{
-        value: 2324048,
-        label: '地域'
-      }, {
-        value: 2503330,
-        label: '性别'
-      }, {
-        value: 2510393,
-        label: '年龄'
-      }, {
-        value: 2532512,
-        label: '意图词'
-      }],
-    };
-  },
-  created() {
-  },
-  mounted() {
-    // this.chart = echarts.init(this.$refs.chartContainer, 'macarons');
-    // this.chart.on('mouseout', this.hideTooltip);
-    // this.updateChart();
-    this.getReportData();
-    this.getTreeselect();
-    this.accountListFun();
-  },
-  watch: {
-    // dataList() {
-    //   this.updateChart();
-    // },
-    'deptId': 'currDeptChange'
-  },
-  methods: {
-    planLoad(){
-    },
-    /** 导出按钮操作 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm('是否确认导出所有数据?', "警告", {
-        confirmButtonText: "确定",
-        cancelButtonText: "取消",
-        type: "warning"
-      }).then(() => {
-        this.exportLoading = true;
-        return storeExport(queryParams);
-      }).then(response => {
-        this.download(response.msg);
-        this.exportLoading = false;
-      }).catch(() => {
-      });
-    },
-    /** 查询部门下拉树结构 */
-    getTreeselect() {
-      treeselect().then((response) => {
-        this.deptOptions = response.data;
-        if (response.data != null && response.data.length > 0) {
-          this.dept.deptId = response.data[0].id;
-        }
-      });
-    },
-    currDeptChange(val) {
-      this.deptId = val;
-      this.getUserListByDeptId();
-    },
-    getUserListByDeptId() {
-      this.queryParams.userId = undefined;
-      var data = {deptId: this.deptId};
-      getUserListByDeptId(data).then(response => {
-        this.users = response.data;
-      });
-    },
-    accountListFun() {
-      listAll({userId: this.queryParams.userId}).then(e => {
-        this.accountList = e.data;
-      })
-    },
-    handleQuery() {
-      this.getReportData();
-    },
-    /** 重置按钮操作 */
-    resetQuery() {
-      this.queryParams = {
-        type: null,
-        storeId: null,
-      }
-      this.getReportData()
-    },
-    getReportData() {
-      if(!this.queryParams.id){
-        return;
-      }
-      if(!this.queryParams.time || this.queryParams.time.length < 2){
-        return;
-      }
-      this.queryParams.startDate = this.queryParams.time[0];
-      this.queryParams.endDate = this.queryParams.time[1];
-      this.loading = true;
-      getReportData(this.queryParams).then(e => {
-        this.dataList = e.data;
-        this.loading = false;
-        this.total = e.total;
-      });
-    },
-
-
-    formatter(params) {
-      const item1 = params[0].value;
-      const item2 = params[1].value;
-      const item3 = params[2].value;
-      const item4 = params[3].value;
-      return `
-              <div>
-                <div>日期:${params[0].axisValue}</div>
-                <div>加微量:${item1}</div>
-                <div>注册量:${item2}(${item2 == 0 || item1 == 0 ? "0" :((item2 / item1) * 100).toFixed(2)}%)</div>
-                <div>完课量:${item3}(${item3 == 0 || item2 == 0 ? "0" :((item3 / item2) * 100).toFixed(2)}%)</div>
-                <div>订单转化数:${item4}(${item4 == 0 || item2 == 0 ? "0" :((item4 / item2) * 100).toFixed(2)}%)</div>
-              </div>
-            `;
-    },
-
-    updateChart() {
-      const option = {
-        xAxis: {
-          type: 'category',
-          data: this.dateList,
-        },
-        yAxis: {
-          type: 'value',
-        },
-        tooltip: {
-          trigger: 'axis',
-          formatter: this.formatter,
-          axisPointer: {
-            type: "line",
-            lineStyle: {
-              color: "rgba(227, 242, 252, 0.39)",
-              width: 40,
-              type: "solid",
-            },
-            z: 0,  //注意要设置层级,不然会在覆盖在柱子前面,设置为0就在柱子后面显示了。
-          },
-        },
-        series: [
-          {
-            name: '加微量',
-            type: 'line',
-            barWidth: '40%',
-            label: {
-              show: true,
-              position: 'top',
-            },
-            data: this.dataList[0],
-          },
-          {
-            name: '注册量',
-            type: 'line',
-            barWidth: '40%',
-            label: {
-              show: true,
-              position: 'top',
-            },
-            data: this.dataList[1],
-          },
-          {
-            name: '完课量',
-            type: 'line',
-            barWidth: '40%',
-            label: {
-              show: true,
-              position: 'top',
-            },
-            data: this.dataList[2],
-          },
-          {
-            name: '下单量',
-            type: 'line',
-            barWidth: '40%',
-            label: {
-              show: true,
-              position: 'top',
-            },
-            data: this.dataList[3],
-          },
-        ],
-
-
-      };
-      this.chart.setOption(option);
-    },
-
-    hideTooltip() {
-      this.chart.dispatchAction({
-        type: 'hideTip',
-      });
-    },
-  },
-};
-</script>
-<style>
-.title {
-  padding: 20px 30px 0px 30px;
-  font-size: 18px;
-  font-weight: bold;
-  color: black;
-
-}
-
-.search-form {
-  margin: 20px 30px 0px 30px;
-}
-
-.echart-box {
-  margin: 0 auto;
-  text-align: center;
-}
-
-.el-select {
-  margin: 5px 10px;
-}
-
-.table-box {
-  margin-top: 15px;
-
-  .export {
-    float: right;
-    margin: 10px 0px;
-  }
-}
-
-.app-container {
-  border: 1px solid #e6e6e6;
-  padding: 12px;
-
-
-}
-
-.app-content {
-  background-color: white;
-
-
-}
-
-.data-box {
-  padding: 30px;
-  background-color: rgb(255, 255, 255);
-  height: 100%;
-
-
-}
-</style>

+ 0 - 301
src/views/aiob/AiobBaiduCallApi/index.vue

@@ -1,301 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
-      <el-form-item label="名称" prop="name">
-        <el-input
-          v-model="queryParams.name"
-          placeholder="请输入名称"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="名称" prop="accessKey">
-        <el-input
-          v-model="queryParams.accessKey"
-          placeholder="请输入名称"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="名称" prop="secretKey">
-        <el-input
-          v-model="queryParams.secretKey"
-          placeholder="请输入名称"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
-      </el-form-item>
-    </el-form>
-
-    <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
-        <el-button
-          type="primary"
-          plain
-          icon="el-icon-plus"
-          size="mini"
-          @click="handleAdd"
-          v-hasPermi="['aiob:AiobBaiduCallApi:add']"
-        >新增</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="success"
-          plain
-          icon="el-icon-edit"
-          size="mini"
-          :disabled="single"
-          @click="handleUpdate"
-          v-hasPermi="['aiob:AiobBaiduCallApi:edit']"
-        >修改</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="danger"
-          plain
-          icon="el-icon-delete"
-          size="mini"
-          :disabled="multiple"
-          @click="handleDelete"
-          v-hasPermi="['aiob:AiobBaiduCallApi:remove']"
-        >删除</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="warning"
-          plain
-          icon="el-icon-download"
-          size="mini"
-          :loading="exportLoading"
-          @click="handleExport"
-          v-hasPermi="['aiob:AiobBaiduCallApi:export']"
-        >导出</el-button>
-      </el-col>
-      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
-    </el-row>
-
-    <el-table border v-loading="loading" :data="AiobBaiduCallApiList" @selection-change="handleSelectionChange">
-      <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="id" align="center" prop="id" />
-      <el-table-column label="名称" align="center" prop="name" />
-      <el-table-column label="名称" align="center" prop="accessKey" />
-      <el-table-column label="名称" align="center" prop="secretKey" />
-      <el-table-column label="备注" align="center" prop="remark" />
-      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
-        <template slot-scope="scope">
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-edit"
-            @click="handleUpdate(scope.row)"
-            v-hasPermi="['aiob:AiobBaiduCallApi:edit']"
-          >修改</el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-            v-hasPermi="['aiob:AiobBaiduCallApi:remove']"
-          >删除</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-
-    <pagination
-      v-show="total>0"
-      :total="total"
-      :page.sync="queryParams.pageNum"
-      :limit.sync="queryParams.pageSize"
-      @pagination="getList"
-    />
-
-    <!-- 添加或修改百度外呼接口配置对话框 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="名称" prop="name">
-          <el-input v-model="form.name" placeholder="请输入名称" />
-        </el-form-item>
-        <el-form-item label="名称" prop="accessKey">
-          <el-input v-model="form.accessKey" placeholder="请输入名称" />
-        </el-form-item>
-        <el-form-item label="名称" prop="secretKey">
-          <el-input v-model="form.secretKey" placeholder="请输入名称" />
-        </el-form-item>
-        <el-form-item label="备注" prop="remark">
-          <el-input v-model="form.remark" placeholder="请输入备注" />
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">确 定</el-button>
-        <el-button @click="cancel">取 消</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import { listAiobBaiduCallApi, getAiobBaiduCallApi, delAiobBaiduCallApi, addAiobBaiduCallApi, updateAiobBaiduCallApi, exportAiobBaiduCallApi } from "@/api/aiob/AiobBaiduCallApi";
-
-export default {
-  name: "AiobBaiduCallApi",
-  data() {
-    return {
-      // 遮罩层
-      loading: true,
-      // 导出遮罩层
-      exportLoading: false,
-      // 选中数组
-      ids: [],
-      // 非单个禁用
-      single: true,
-      // 非多个禁用
-      multiple: true,
-      // 显示搜索条件
-      showSearch: true,
-      // 总条数
-      total: 0,
-      // 百度外呼接口配置表格数据
-      AiobBaiduCallApiList: [],
-      // 弹出层标题
-      title: "",
-      // 是否显示弹出层
-      open: false,
-      // 查询参数
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        name: null,
-        accessKey: null,
-        secretKey: null,
-      },
-      // 表单参数
-      form: {},
-      // 表单校验
-      rules: {
-      }
-    };
-  },
-  created() {
-    this.getList();
-  },
-  methods: {
-    /** 查询百度外呼接口配置列表 */
-    getList() {
-      this.loading = true;
-      listAiobBaiduCallApi(this.queryParams).then(response => {
-        this.AiobBaiduCallApiList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-    // 取消按钮
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 表单重置
-    reset() {
-      this.form = {
-        id: null,
-        name: null,
-        accessKey: null,
-        secretKey: null,
-        createTime: null,
-        createBy: null,
-        updateBy: null,
-        updateTime: null,
-        remark: null
-      };
-      this.resetForm("form");
-    },
-    /** 搜索按钮操作 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 重置按钮操作 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 多选框选中数据
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.id)
-      this.single = selection.length!==1
-      this.multiple = !selection.length
-    },
-    /** 新增按钮操作 */
-    handleAdd() {
-      this.reset();
-      this.open = true;
-      this.title = "添加百度外呼接口配置";
-    },
-    /** 修改按钮操作 */
-    handleUpdate(row) {
-      this.reset();
-      const id = row.id || this.ids
-      getAiobBaiduCallApi(id).then(response => {
-        this.form = response.data;
-        this.open = true;
-        this.title = "修改百度外呼接口配置";
-      });
-    },
-    /** 提交按钮 */
-    submitForm() {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          if (this.form.id != null) {
-            updateAiobBaiduCallApi(this.form).then(response => {
-              this.msgSuccess("修改成功");
-              this.open = false;
-              this.getList();
-            });
-          } else {
-            addAiobBaiduCallApi(this.form).then(response => {
-              this.msgSuccess("新增成功");
-              this.open = false;
-              this.getList();
-            });
-          }
-        }
-      });
-    },
-    /** 删除按钮操作 */
-    handleDelete(row) {
-      const ids = row.id || this.ids;
-      this.$confirm('是否确认删除百度外呼接口配置编号为"' + ids + '"的数据项?', "警告", {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "warning"
-        }).then(function() {
-          return delAiobBaiduCallApi(ids);
-        }).then(() => {
-          this.getList();
-          this.msgSuccess("删除成功");
-        }).catch(() => {});
-    },
-    /** 导出按钮操作 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm('是否确认导出所有百度外呼接口配置数据项?', "警告", {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "warning"
-        }).then(() => {
-          this.exportLoading = true;
-          return exportAiobBaiduCallApi(queryParams);
-        }).then(response => {
-          this.download(response.msg);
-          this.exportLoading = false;
-        }).catch(() => {});
-    }
-  }
-};
-</script>

+ 0 - 286
src/views/aiob/AiobBaiduEncryption/index.vue

@@ -1,286 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
-      <el-form-item label="秘钥ID" prop="secretId">
-        <el-input
-          v-model="queryParams.secretId"
-          placeholder="请输入秘钥ID"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="秘钥" prop="secretKey">
-        <el-input
-          v-model="queryParams.secretKey"
-          placeholder="请输入秘钥"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
-      </el-form-item>
-    </el-form>
-
-    <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
-        <el-button
-          type="primary"
-          plain
-          icon="el-icon-plus"
-          size="mini"
-          @click="handleAdd"
-          v-hasPermi="['aiob:AiobBaiduEncryption:add']"
-        >新增</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="success"
-          plain
-          icon="el-icon-edit"
-          size="mini"
-          :disabled="single"
-          @click="handleUpdate"
-          v-hasPermi="['aiob:AiobBaiduEncryption:edit']"
-        >修改</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="danger"
-          plain
-          icon="el-icon-delete"
-          size="mini"
-          :disabled="multiple"
-          @click="handleDelete"
-          v-hasPermi="['aiob:AiobBaiduEncryption:remove']"
-        >删除</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="warning"
-          plain
-          icon="el-icon-download"
-          size="mini"
-          :loading="exportLoading"
-          @click="handleExport"
-          v-hasPermi="['aiob:AiobBaiduEncryption:export']"
-        >导出</el-button>
-      </el-col>
-      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
-    </el-row>
-
-    <el-table border v-loading="loading" :data="AiobBaiduEncryptionList" @selection-change="handleSelectionChange">
-      <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="id" align="center" prop="id" />
-      <el-table-column label="秘钥ID" align="center" prop="secretId" />
-      <el-table-column label="秘钥" align="center" prop="secretKey" />
-      <el-table-column label="备注" align="center" prop="remark" />
-      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
-        <template slot-scope="scope">
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-edit"
-            @click="handleUpdate(scope.row)"
-            v-hasPermi="['aiob:AiobBaiduEncryption:edit']"
-          >修改</el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-            v-hasPermi="['aiob:AiobBaiduEncryption:remove']"
-          >删除</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-
-    <pagination
-      v-show="total>0"
-      :total="total"
-      :page.sync="queryParams.pageNum"
-      :limit.sync="queryParams.pageSize"
-      @pagination="getList"
-    />
-
-    <!-- 添加或修改百度AI外呼加密对话框 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="秘钥ID" prop="secretId">
-          <el-input v-model="form.secretId" placeholder="请输入秘钥ID" />
-        </el-form-item>
-        <el-form-item label="秘钥" prop="secretKey">
-          <el-input v-model="form.secretKey" placeholder="请输入秘钥" />
-        </el-form-item>
-        <el-form-item label="备注" prop="remark">
-          <el-input v-model="form.remark" placeholder="请输入备注" />
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">确 定</el-button>
-        <el-button @click="cancel">取 消</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import { listAiobBaiduEncryption, getAiobBaiduEncryption, delAiobBaiduEncryption, addAiobBaiduEncryption, updateAiobBaiduEncryption, exportAiobBaiduEncryption } from "@/api/aiob/AiobBaiduEncryption";
-
-export default {
-  name: "AiobBaiduEncryption",
-  data() {
-    return {
-      // 遮罩层
-      loading: true,
-      // 导出遮罩层
-      exportLoading: false,
-      // 选中数组
-      ids: [],
-      // 非单个禁用
-      single: true,
-      // 非多个禁用
-      multiple: true,
-      // 显示搜索条件
-      showSearch: true,
-      // 总条数
-      total: 0,
-      // 百度AI外呼加密表格数据
-      AiobBaiduEncryptionList: [],
-      // 弹出层标题
-      title: "",
-      // 是否显示弹出层
-      open: false,
-      // 查询参数
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        secretId: null,
-        secretKey: null,
-      },
-      // 表单参数
-      form: {},
-      // 表单校验
-      rules: {
-      }
-    };
-  },
-  created() {
-    this.getList();
-  },
-  methods: {
-    /** 查询百度AI外呼加密列表 */
-    getList() {
-      this.loading = true;
-      listAiobBaiduEncryption(this.queryParams).then(response => {
-        this.AiobBaiduEncryptionList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-    // 取消按钮
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 表单重置
-    reset() {
-      this.form = {
-        id: null,
-        secretId: null,
-        secretKey: null,
-        createTime: null,
-        createBy: null,
-        updateBy: null,
-        updateTime: null,
-        remark: null
-      };
-      this.resetForm("form");
-    },
-    /** 搜索按钮操作 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 重置按钮操作 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 多选框选中数据
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.id)
-      this.single = selection.length!==1
-      this.multiple = !selection.length
-    },
-    /** 新增按钮操作 */
-    handleAdd() {
-      this.reset();
-      this.open = true;
-      this.title = "添加百度AI外呼加密";
-    },
-    /** 修改按钮操作 */
-    handleUpdate(row) {
-      this.reset();
-      const id = row.id || this.ids
-      getAiobBaiduEncryption(id).then(response => {
-        this.form = response.data;
-        this.open = true;
-        this.title = "修改百度AI外呼加密";
-      });
-    },
-    /** 提交按钮 */
-    submitForm() {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          if (this.form.id != null) {
-            updateAiobBaiduEncryption(this.form).then(response => {
-              this.msgSuccess("修改成功");
-              this.open = false;
-              this.getList();
-            });
-          } else {
-            addAiobBaiduEncryption(this.form).then(response => {
-              this.msgSuccess("新增成功");
-              this.open = false;
-              this.getList();
-            });
-          }
-        }
-      });
-    },
-    /** 删除按钮操作 */
-    handleDelete(row) {
-      const ids = row.id || this.ids;
-      this.$confirm('是否确认删除百度AI外呼加密编号为"' + ids + '"的数据项?', "警告", {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "warning"
-        }).then(function() {
-          return delAiobBaiduEncryption(ids);
-        }).then(() => {
-          this.getList();
-          this.msgSuccess("删除成功");
-        }).catch(() => {});
-    },
-    /** 导出按钮操作 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm('是否确认导出所有百度AI外呼加密数据项?', "警告", {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "warning"
-        }).then(() => {
-          this.exportLoading = true;
-          return exportAiobBaiduEncryption(queryParams);
-        }).then(response => {
-          this.download(response.msg);
-          this.exportLoading = false;
-        }).catch(() => {});
-    }
-  }
-};
-</script>

+ 0 - 678
src/views/aiob/AiobBaiduTask/index.vue

@@ -1,678 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
-      <el-form-item label="任务ID" prop="taskId">
-        <el-input
-          v-model="queryParams.taskId"
-          placeholder="请输入任务ID"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="任务名称" prop="taskName">
-        <el-input
-          v-model="queryParams.taskName"
-          placeholder="请输入任务名称"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="外呼机器人唯一标识" prop="robotId">
-        <el-input
-          v-model="queryParams.robotId"
-          placeholder="请输入外呼机器人唯一标识"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="任务呼叫开始日期" prop="dialStartDate">
-        <el-date-picker clearable size="small"
-          v-model="queryParams.dialStartDate"
-          type="date"
-          value-format="yyyy-MM-dd"
-          placeholder="选择任务呼叫开始日期">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item label="任务呼叫结束日期,如:XXXXX,默认为空,表示不限制终止时间" prop="dialEndDate">
-        <el-date-picker clearable size="small"
-          v-model="queryParams.dialEndDate"
-          type="date"
-          value-format="yyyy-MM-dd"
-          placeholder="选择任务呼叫结束日期,如:XXXXX,默认为空,表示不限制终止时间">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item label="呼叫开始时间,时间范围为【09:00,20:00】" prop="dialStartTime">
-        <el-date-picker clearable size="small"
-          v-model="queryParams.dialStartTime"
-          type="date"
-          value-format="yyyy-MM-dd"
-          placeholder="选择呼叫开始时间,时间范围为【09:00,20:00】">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item label="呼叫结束时间,时间范围为【09:00,20:00】" prop="dialEndTime">
-        <el-date-picker clearable size="small"
-          v-model="queryParams.dialEndTime"
-          type="date"
-          value-format="yyyy-MM-dd"
-          placeholder="选择呼叫结束时间,时间范围为【09:00,20:00】">
-        </el-date-picker>
-      </el-form-item>
-      <el-form-item label="禁呼日期, 99-节假日;1-周一;2-周二;3-周三;4-周四;5-周五;6-周六;0-周日,默认为空,表示不限制禁呼日期" prop="forbidDialDate">
-        <el-input
-          v-model="queryParams.forbidDialDate"
-          placeholder="请输入禁呼日期, 99-节假日;1-周一;2-周二;3-周三;4-周四;5-周五;6-周六;0-周日,默认为空,表示不限制禁呼日期"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="禁呼时间,默认为空,表示不限制禁呼时间" prop="forbidDialTime">
-        <el-input
-          v-model="queryParams.forbidDialTime"
-          placeholder="请输入禁呼时间,默认为空,表示不限制禁呼时间"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="主叫号码,默认为空,表示将随机获取可用号码进行外呼" prop="callerNums">
-        <el-input
-          v-model="queryParams.callerNums"
-          placeholder="请输入主叫号码,默认为空,表示将随机获取可用号码进行外呼"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="保底主叫号码,默认为空,非空则开启了归属地匹配且在指定主叫中没找到匹配号码则默认用此外呼" prop="lastCallerNums">
-        <el-input
-          v-model="queryParams.lastCallerNums"
-          placeholder="请输入保底主叫号码,默认为空,非空则开启了归属地匹配且在指定主叫中没找到匹配号码则默认用此外呼"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="1-触发黑名单后该号码组不再拨打;2-触发黑名单后该号码不再拨打;默认为空,即不过滤黑名单" prop="blackListStrategy">
-        <el-input
-          v-model="queryParams.blackListStrategy"
-          placeholder="请输入1-触发黑名单后该号码组不再拨打;2-触发黑名单后该号码不再拨打;默认为空,即不过滤黑名单"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="终态策略,0-存在接通 1-全部接通 2-存在完成 3-全部完成,默认为0,即存在接通" prop="finalStrategy">
-        <el-input
-          v-model="queryParams.finalStrategy"
-          placeholder="请输入终态策略,0-存在接通 1-全部接通 2-存在完成 3-全部完成,默认为0,即存在接通"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="拨打策略:0-批量 1-逐个/轮流 2-逐个/顺序,默认为0,即批量" prop="callStrategy">
-        <el-input
-          v-model="queryParams.callStrategy"
-          placeholder="请输入拨打策略:0-批量 1-逐个/轮流 2-逐个/顺序,默认为0,即批量"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="重试次数,整数,且 N ≤ 3,默认为空,表示不重试" prop="retryTimes">
-        <el-input
-          v-model="queryParams.retryTimes"
-          placeholder="请输入重试次数,整数,且 N ≤ 3,默认为空,表示不重试"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="重试间隔时间,单位min,0≤ N ≤720" prop="retryInterval">
-        <el-input
-          v-model="queryParams.retryInterval"
-          placeholder="请输入重试间隔时间,单位min,0≤ N ≤720"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="0:空闲通路弹性调节;1:最低保障通路数;2:固定通路数,默认为0" prop="isSetCapacity">
-        <el-input
-          v-model="queryParams.isSetCapacity"
-          placeholder="请输入0:空闲通路弹性调节;1:最低保障通路数;2:固定通路数,默认为0"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="设置通路数大小,N为 整数,且 N ≤ 任务可用通路数和,默认为0,即空闲通路弹性调节" prop="taskCapacity">
-        <el-input
-          v-model="queryParams.taskCapacity"
-          placeholder="请输入设置通路数大小,N为 整数,且 N ≤ 任务可用通路数和,默认为0,即空闲通路弹性调节"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="是否开启24小时空号检测" prop="isOpenEmptyNum">
-        <el-input
-          v-model="queryParams.isOpenEmptyNum"
-          placeholder="请输入是否开启24小时空号检测"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="是否开启12小时内停机检测" prop="isOpenPhoneDown">
-        <el-input
-          v-model="queryParams.isOpenPhoneDown"
-          placeholder="请输入是否开启12小时内停机检测"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="是否开启重复号码过滤,true为开启,false为关闭" prop="isOpenRepeatFilter">
-        <el-input
-          v-model="queryParams.isOpenRepeatFilter"
-          placeholder="请输入是否开启重复号码过滤,true为开启,false为关闭"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="号码类型过滤 1-400号码;2-800号码;3-手机号码;4-固话;5-95号码;6-96号码;7-其他" prop="numTypeFilterList">
-        <el-input
-          v-model="queryParams.numTypeFilterList"
-          placeholder="请输入号码类型过滤 1-400号码;2-800号码;3-手机号码;4-固话;5-95号码;6-96号码;7-其他"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="发送短信策略集合,smsAutographId为短信签名ID,smsTemplateId为短信模板ID,smsStrategy为短信触发策略,1-接通后挂机触发;2-未接通后挂机触发" prop="smsStrategyV1">
-        <el-input
-          v-model="queryParams.smsStrategyV1"
-          placeholder="请输入发送短信策略集合,smsAutographId为短信签名ID,smsTemplateId为短信模板ID,smsStrategy为短信触发策略,1-接通后挂机触发;2-未接通后挂机触发"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="默认false 是否开启任务回调" prop="taskDataCallback">
-        <el-input
-          v-model="queryParams.taskDataCallback"
-          placeholder="请输入默认false 是否开启任务回调"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="任务级回调地址设置" prop="callBackUrl">
-        <el-input
-          v-model="queryParams.callBackUrl"
-          placeholder="请输入任务级回调地址设置"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="任务拨号完成后是否进入完成状态" prop="callFinishTaskEnd">
-        <el-input
-          v-model="queryParams.callFinishTaskEnd"
-          placeholder="请输入任务拨号完成后是否进入完成状态"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
-      </el-form-item>
-    </el-form>
-
-    <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
-        <el-button
-          type="primary"
-          plain
-          icon="el-icon-plus"
-          size="mini"
-          @click="handleAdd"
-          v-hasPermi="['aiob:AiobBaiduTask:add']"
-        >新增</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="success"
-          plain
-          icon="el-icon-edit"
-          size="mini"
-          :disabled="single"
-          @click="handleUpdate"
-          v-hasPermi="['aiob:AiobBaiduTask:edit']"
-        >修改</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="danger"
-          plain
-          icon="el-icon-delete"
-          size="mini"
-          :disabled="multiple"
-          @click="handleDelete"
-          v-hasPermi="['aiob:AiobBaiduTask:remove']"
-        >删除</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="warning"
-          plain
-          icon="el-icon-download"
-          size="mini"
-          :loading="exportLoading"
-          @click="handleExport"
-          v-hasPermi="['aiob:AiobBaiduTask:export']"
-        >导出</el-button>
-      </el-col>
-      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
-    </el-row>
-
-    <el-table border v-loading="loading" :data="AiobBaiduTaskList" @selection-change="handleSelectionChange">
-      <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="id" align="center" prop="id" />
-      <el-table-column label="任务ID" align="center" prop="taskId" />
-      <el-table-column label="任务名称" align="center" prop="taskName" />
-      <el-table-column label="外呼机器人唯一标识" align="center" prop="robotId" />
-      <el-table-column label="任务呼叫开始日期" align="center" prop="dialStartDate" width="180">
-        <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.dialStartDate, '{y}-{m}-{d}') }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="任务呼叫结束日期,如:XXXXX,默认为空,表示不限制终止时间" align="center" prop="dialEndDate" width="180">
-        <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.dialEndDate, '{y}-{m}-{d}') }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="呼叫开始时间,时间范围为【09:00,20:00】" align="center" prop="dialStartTime" width="180">
-        <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.dialStartTime, '{y}-{m}-{d}') }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="呼叫结束时间,时间范围为【09:00,20:00】" align="center" prop="dialEndTime" width="180">
-        <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.dialEndTime, '{y}-{m}-{d}') }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="禁呼日期, 99-节假日;1-周一;2-周二;3-周三;4-周四;5-周五;6-周六;0-周日,默认为空,表示不限制禁呼日期" align="center" prop="forbidDialDate" />
-      <el-table-column label="禁呼时间,默认为空,表示不限制禁呼时间" align="center" prop="forbidDialTime" />
-      <el-table-column label="主叫号码,默认为空,表示将随机获取可用号码进行外呼" align="center" prop="callerNums" />
-      <el-table-column label="保底主叫号码,默认为空,非空则开启了归属地匹配且在指定主叫中没找到匹配号码则默认用此外呼" align="center" prop="lastCallerNums" />
-      <el-table-column label="1-触发黑名单后该号码组不再拨打;2-触发黑名单后该号码不再拨打;默认为空,即不过滤黑名单" align="center" prop="blackListStrategy" />
-      <el-table-column label="终态策略,0-存在接通 1-全部接通 2-存在完成 3-全部完成,默认为0,即存在接通" align="center" prop="finalStrategy" />
-      <el-table-column label="拨打策略:0-批量 1-逐个/轮流 2-逐个/顺序,默认为0,即批量" align="center" prop="callStrategy" />
-      <el-table-column label="重试次数,整数,且 N ≤ 3,默认为空,表示不重试" align="center" prop="retryTimes" />
-      <el-table-column label="重试间隔时间,单位min,0≤ N ≤720" align="center" prop="retryInterval" />
-      <el-table-column label="0:空闲通路弹性调节;1:最低保障通路数;2:固定通路数,默认为0" align="center" prop="isSetCapacity" />
-      <el-table-column label="设置通路数大小,N为 整数,且 N ≤ 任务可用通路数和,默认为0,即空闲通路弹性调节" align="center" prop="taskCapacity" />
-      <el-table-column label="是否开启24小时空号检测" align="center" prop="isOpenEmptyNum" />
-      <el-table-column label="是否开启12小时内停机检测" align="center" prop="isOpenPhoneDown" />
-      <el-table-column label="是否开启重复号码过滤,true为开启,false为关闭" align="center" prop="isOpenRepeatFilter" />
-      <el-table-column label="号码类型过滤 1-400号码;2-800号码;3-手机号码;4-固话;5-95号码;6-96号码;7-其他" align="center" prop="numTypeFilterList" />
-      <el-table-column label="发送短信策略集合,smsAutographId为短信签名ID,smsTemplateId为短信模板ID,smsStrategy为短信触发策略,1-接通后挂机触发;2-未接通后挂机触发" align="center" prop="smsStrategyV1" />
-      <el-table-column label="默认false 是否开启任务回调" align="center" prop="taskDataCallback" />
-      <el-table-column label="任务级回调地址设置" align="center" prop="callBackUrl" />
-      <el-table-column label="任务拨号完成后是否进入完成状态" align="center" prop="callFinishTaskEnd" />
-      <el-table-column label="备注" align="center" prop="remark" />
-      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
-        <template slot-scope="scope">
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-edit"
-            @click="handleUpdate(scope.row)"
-            v-hasPermi="['aiob:AiobBaiduTask:edit']"
-          >修改</el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-            v-hasPermi="['aiob:AiobBaiduTask:remove']"
-          >删除</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-
-    <pagination
-      v-show="total>0"
-      :total="total"
-      :page.sync="queryParams.pageNum"
-      :limit.sync="queryParams.pageSize"
-      @pagination="getList"
-    />
-
-    <!-- 添加或修改百度AI外呼任务对话框 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="任务ID" prop="taskId">
-          <el-input v-model="form.taskId" placeholder="请输入任务ID" />
-        </el-form-item>
-        <el-form-item label="任务名称" prop="taskName">
-          <el-input v-model="form.taskName" placeholder="请输入任务名称" />
-        </el-form-item>
-        <el-form-item label="外呼机器人唯一标识" prop="robotId">
-          <el-input v-model="form.robotId" placeholder="请输入外呼机器人唯一标识" />
-        </el-form-item>
-        <el-form-item label="任务呼叫开始日期" prop="dialStartDate">
-          <el-date-picker clearable size="small"
-            v-model="form.dialStartDate"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="选择任务呼叫开始日期">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="任务呼叫结束日期,如:XXXXX,默认为空,表示不限制终止时间" prop="dialEndDate">
-          <el-date-picker clearable size="small"
-            v-model="form.dialEndDate"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="选择任务呼叫结束日期,如:XXXXX,默认为空,表示不限制终止时间">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="呼叫开始时间,时间范围为【09:00,20:00】" prop="dialStartTime">
-          <el-date-picker clearable size="small"
-            v-model="form.dialStartTime"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="选择呼叫开始时间,时间范围为【09:00,20:00】">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="呼叫结束时间,时间范围为【09:00,20:00】" prop="dialEndTime">
-          <el-date-picker clearable size="small"
-            v-model="form.dialEndTime"
-            type="date"
-            value-format="yyyy-MM-dd"
-            placeholder="选择呼叫结束时间,时间范围为【09:00,20:00】">
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item label="禁呼日期, 99-节假日;1-周一;2-周二;3-周三;4-周四;5-周五;6-周六;0-周日,默认为空,表示不限制禁呼日期" prop="forbidDialDate">
-          <el-input v-model="form.forbidDialDate" placeholder="请输入禁呼日期, 99-节假日;1-周一;2-周二;3-周三;4-周四;5-周五;6-周六;0-周日,默认为空,表示不限制禁呼日期" />
-        </el-form-item>
-        <el-form-item label="禁呼时间,默认为空,表示不限制禁呼时间" prop="forbidDialTime">
-          <el-input v-model="form.forbidDialTime" placeholder="请输入禁呼时间,默认为空,表示不限制禁呼时间" />
-        </el-form-item>
-        <el-form-item label="主叫号码,默认为空,表示将随机获取可用号码进行外呼" prop="callerNums">
-          <el-input v-model="form.callerNums" placeholder="请输入主叫号码,默认为空,表示将随机获取可用号码进行外呼" />
-        </el-form-item>
-        <el-form-item label="保底主叫号码,默认为空,非空则开启了归属地匹配且在指定主叫中没找到匹配号码则默认用此外呼" prop="lastCallerNums">
-          <el-input v-model="form.lastCallerNums" placeholder="请输入保底主叫号码,默认为空,非空则开启了归属地匹配且在指定主叫中没找到匹配号码则默认用此外呼" />
-        </el-form-item>
-        <el-form-item label="1-触发黑名单后该号码组不再拨打;2-触发黑名单后该号码不再拨打;默认为空,即不过滤黑名单" prop="blackListStrategy">
-          <el-input v-model="form.blackListStrategy" placeholder="请输入1-触发黑名单后该号码组不再拨打;2-触发黑名单后该号码不再拨打;默认为空,即不过滤黑名单" />
-        </el-form-item>
-        <el-form-item label="终态策略,0-存在接通 1-全部接通 2-存在完成 3-全部完成,默认为0,即存在接通" prop="finalStrategy">
-          <el-input v-model="form.finalStrategy" placeholder="请输入终态策略,0-存在接通 1-全部接通 2-存在完成 3-全部完成,默认为0,即存在接通" />
-        </el-form-item>
-        <el-form-item label="拨打策略:0-批量 1-逐个/轮流 2-逐个/顺序,默认为0,即批量" prop="callStrategy">
-          <el-input v-model="form.callStrategy" placeholder="请输入拨打策略:0-批量 1-逐个/轮流 2-逐个/顺序,默认为0,即批量" />
-        </el-form-item>
-        <el-form-item label="重试次数,整数,且 N ≤ 3,默认为空,表示不重试" prop="retryTimes">
-          <el-input v-model="form.retryTimes" placeholder="请输入重试次数,整数,且 N ≤ 3,默认为空,表示不重试" />
-        </el-form-item>
-        <el-form-item label="重试间隔时间,单位min,0≤ N ≤720" prop="retryInterval">
-          <el-input v-model="form.retryInterval" placeholder="请输入重试间隔时间,单位min,0≤ N ≤720" />
-        </el-form-item>
-        <el-form-item label="0:空闲通路弹性调节;1:最低保障通路数;2:固定通路数,默认为0" prop="isSetCapacity">
-          <el-input v-model="form.isSetCapacity" placeholder="请输入0:空闲通路弹性调节;1:最低保障通路数;2:固定通路数,默认为0" />
-        </el-form-item>
-        <el-form-item label="设置通路数大小,N为 整数,且 N ≤ 任务可用通路数和,默认为0,即空闲通路弹性调节" prop="taskCapacity">
-          <el-input v-model="form.taskCapacity" placeholder="请输入设置通路数大小,N为 整数,且 N ≤ 任务可用通路数和,默认为0,即空闲通路弹性调节" />
-        </el-form-item>
-        <el-form-item label="是否开启24小时空号检测" prop="isOpenEmptyNum">
-          <el-input v-model="form.isOpenEmptyNum" placeholder="请输入是否开启24小时空号检测" />
-        </el-form-item>
-        <el-form-item label="是否开启12小时内停机检测" prop="isOpenPhoneDown">
-          <el-input v-model="form.isOpenPhoneDown" placeholder="请输入是否开启12小时内停机检测" />
-        </el-form-item>
-        <el-form-item label="是否开启重复号码过滤,true为开启,false为关闭" prop="isOpenRepeatFilter">
-          <el-input v-model="form.isOpenRepeatFilter" placeholder="请输入是否开启重复号码过滤,true为开启,false为关闭" />
-        </el-form-item>
-        <el-form-item label="号码类型过滤 1-400号码;2-800号码;3-手机号码;4-固话;5-95号码;6-96号码;7-其他" prop="numTypeFilterList">
-          <el-input v-model="form.numTypeFilterList" placeholder="请输入号码类型过滤 1-400号码;2-800号码;3-手机号码;4-固话;5-95号码;6-96号码;7-其他" />
-        </el-form-item>
-        <el-form-item label="发送短信策略集合,smsAutographId为短信签名ID,smsTemplateId为短信模板ID,smsStrategy为短信触发策略,1-接通后挂机触发;2-未接通后挂机触发" prop="smsStrategyV1">
-          <el-input v-model="form.smsStrategyV1" placeholder="请输入发送短信策略集合,smsAutographId为短信签名ID,smsTemplateId为短信模板ID,smsStrategy为短信触发策略,1-接通后挂机触发;2-未接通后挂机触发" />
-        </el-form-item>
-        <el-form-item label="默认false 是否开启任务回调" prop="taskDataCallback">
-          <el-input v-model="form.taskDataCallback" placeholder="请输入默认false 是否开启任务回调" />
-        </el-form-item>
-        <el-form-item label="任务级回调地址设置" prop="callBackUrl">
-          <el-input v-model="form.callBackUrl" placeholder="请输入任务级回调地址设置" />
-        </el-form-item>
-        <el-form-item label="任务拨号完成后是否进入完成状态" prop="callFinishTaskEnd">
-          <el-input v-model="form.callFinishTaskEnd" placeholder="请输入任务拨号完成后是否进入完成状态" />
-        </el-form-item>
-        <el-form-item label="备注" prop="remark">
-          <el-input v-model="form.remark" placeholder="请输入备注" />
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">确 定</el-button>
-        <el-button @click="cancel">取 消</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import { listAiobBaiduTask, getAiobBaiduTask, delAiobBaiduTask, addAiobBaiduTask, updateAiobBaiduTask, exportAiobBaiduTask } from "@/api/aiob/AiobBaiduTask";
-
-export default {
-  name: "AiobBaiduTask",
-  data() {
-    return {
-      // 遮罩层
-      loading: true,
-      // 导出遮罩层
-      exportLoading: false,
-      // 选中数组
-      ids: [],
-      // 非单个禁用
-      single: true,
-      // 非多个禁用
-      multiple: true,
-      // 显示搜索条件
-      showSearch: true,
-      // 总条数
-      total: 0,
-      // 百度AI外呼任务表格数据
-      AiobBaiduTaskList: [],
-      // 弹出层标题
-      title: "",
-      // 是否显示弹出层
-      open: false,
-      // 查询参数
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        taskId: null,
-        taskName: null,
-        robotId: null,
-        dialStartDate: null,
-        dialEndDate: null,
-        dialStartTime: null,
-        dialEndTime: null,
-        forbidDialDate: null,
-        forbidDialTime: null,
-        callerNums: null,
-        lastCallerNums: null,
-        blackListStrategy: null,
-        finalStrategy: null,
-        callStrategy: null,
-        retryTimes: null,
-        retryInterval: null,
-        isSetCapacity: null,
-        taskCapacity: null,
-        isOpenEmptyNum: null,
-        isOpenPhoneDown: null,
-        isOpenRepeatFilter: null,
-        numTypeFilterList: null,
-        smsStrategyV1: null,
-        taskDataCallback: null,
-        callBackUrl: null,
-        callFinishTaskEnd: null,
-      },
-      // 表单参数
-      form: {},
-      // 表单校验
-      rules: {
-      }
-    };
-  },
-  created() {
-    this.getList();
-  },
-  methods: {
-    /** 查询百度AI外呼任务列表 */
-    getList() {
-      this.loading = true;
-      listAiobBaiduTask(this.queryParams).then(response => {
-        this.AiobBaiduTaskList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-    // 取消按钮
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 表单重置
-    reset() {
-      this.form = {
-        id: null,
-        taskId: null,
-        taskName: null,
-        robotId: null,
-        dialStartDate: null,
-        dialEndDate: null,
-        dialStartTime: null,
-        dialEndTime: null,
-        forbidDialDate: null,
-        forbidDialTime: null,
-        callerNums: null,
-        lastCallerNums: null,
-        blackListStrategy: null,
-        finalStrategy: null,
-        callStrategy: null,
-        retryTimes: null,
-        retryInterval: null,
-        isSetCapacity: null,
-        taskCapacity: null,
-        isOpenEmptyNum: null,
-        isOpenPhoneDown: null,
-        isOpenRepeatFilter: null,
-        numTypeFilterList: null,
-        smsStrategyV1: null,
-        taskDataCallback: null,
-        callBackUrl: null,
-        callFinishTaskEnd: null,
-        createTime: null,
-        createBy: null,
-        updateBy: null,
-        updateTime: null,
-        remark: null
-      };
-      this.resetForm("form");
-    },
-    /** 搜索按钮操作 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 重置按钮操作 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 多选框选中数据
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.id)
-      this.single = selection.length!==1
-      this.multiple = !selection.length
-    },
-    /** 新增按钮操作 */
-    handleAdd() {
-      this.reset();
-      this.open = true;
-      this.title = "添加百度AI外呼任务";
-    },
-    /** 修改按钮操作 */
-    handleUpdate(row) {
-      this.reset();
-      const id = row.id || this.ids
-      getAiobBaiduTask(id).then(response => {
-        this.form = response.data;
-        this.open = true;
-        this.title = "修改百度AI外呼任务";
-      });
-    },
-    /** 提交按钮 */
-    submitForm() {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          if (this.form.id != null) {
-            updateAiobBaiduTask(this.form).then(response => {
-              this.msgSuccess("修改成功");
-              this.open = false;
-              this.getList();
-            });
-          } else {
-            addAiobBaiduTask(this.form).then(response => {
-              this.msgSuccess("新增成功");
-              this.open = false;
-              this.getList();
-            });
-          }
-        }
-      });
-    },
-    /** 删除按钮操作 */
-    handleDelete(row) {
-      const ids = row.id || this.ids;
-      this.$confirm('是否确认删除百度AI外呼任务编号为"' + ids + '"的数据项?', "警告", {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "warning"
-        }).then(function() {
-          return delAiobBaiduTask(ids);
-        }).then(() => {
-          this.getList();
-          this.msgSuccess("删除成功");
-        }).catch(() => {});
-    },
-    /** 导出按钮操作 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm('是否确认导出所有百度AI外呼任务数据项?', "警告", {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "warning"
-        }).then(() => {
-          this.exportLoading = true;
-          return exportAiobBaiduTask(queryParams);
-        }).then(response => {
-          this.download(response.msg);
-          this.exportLoading = false;
-        }).catch(() => {});
-    }
-  }
-};
-</script>

+ 0 - 814
src/views/company/companyVoiceRobotic/index-old.vue

@@ -1,814 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
-      <el-form-item label="任务名称" prop="name">
-        <el-input
-          v-model="queryParams.name"
-          placeholder="请输入任务名称"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="机器人" prop="robot">
-        <el-select v-model="queryParams.robot" filterable clearable>
-          <el-option v-for="item in robotList" :label="item.name + '('+item.num+')'" :value="item.id"/>
-        </el-select>
-      </el-form-item>
-      <el-form-item label="话术" prop="dialogId">
-        <el-select v-model="queryParams.dialogId" filterable clearable>
-          <el-option v-for="item in dialogList" :label="item.name" :value="item.id"/>
-        </el-select>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
-      </el-form-item>
-    </el-form>
-
-    <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
-        <el-button
-          type="primary"
-          icon="el-icon-plus"
-          size="mini"
-          @click="handleAdd"
-          v-hasPermi="['system:companyVoiceRobotic:add']"
-        >新增
-        </el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="success"
-          icon="el-icon-edit"
-          size="mini"
-          :disabled="single"
-          @click="handleUpdate"
-          v-hasPermi="['system:companyVoiceRobotic:edit']"
-        >修改
-        </el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="danger"
-          icon="el-icon-delete"
-          size="mini"
-          :disabled="multiple"
-          @click="handleDelete"
-          v-hasPermi="['system:companyVoiceRobotic:remove']"
-        >删除
-        </el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="warning"
-          icon="el-icon-download"
-          size="mini"
-          @click="handleExport"
-          v-hasPermi="['system:companyVoiceRobotic:export']"
-        >导出
-        </el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="success"
-          icon="el-icon-refresh"
-          size="mini"
-          @click="updateStatusFun"
-          v-hasPermi="['system:companyVoiceRobotic:list']"
-        >更新状态
-        </el-button>
-      </el-col>
-      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
-    </el-row>
-
-    <el-table v-loading="loading" :data="roboticList" @selection-change="handleSelectionChange">
-      <el-table-column type="selection" width="55" align="center"/>
-      <el-table-column label="ID" align="center" prop="id"/>
-      <el-table-column label="任务名称" align="center" prop="name"/>
-      <el-table-column label="三方名称" align="center" prop="taskName"/>
-      <el-table-column label="三方ID" align="center" prop="taskId"/>
-      <el-table-column label="机器人" align="center" prop="robot">
-        <template slot-scope="scope">
-          <p v-for="(item, index) in robotList" v-if="scope.row.robot && scope.row.robot == item.id">{{ item.name }}</p>
-        </template>
-      </el-table-column>
-      <el-table-column label="话术" align="center" prop="dialogId">
-        <template slot-scope="scope">
-          <p v-for="(item, index) in dialogList" v-if="scope.row.dialogId && scope.row.dialogId == item.id">
-            {{ item.name }}</p>
-        </template>
-      </el-table-column>
-      <el-table-column label="加微方式" align="center" prop="dialogId">
-        <template slot-scope="scope">
-          <el-tag v-if="scope.row.addType == 0">平均</el-tag>
-          <el-tag v-if="scope.row.addType == 1">意向</el-tag>
-        </template>
-      </el-table-column>
-      <el-table-column label="工作日" align="center" prop="weekDay1">
-        <template slot-scope="scope">
-          <el-tag v-for="(item, index) in weekList"
-                  v-if="scope.row.weekDay1 && scope.row.weekDay1.indexOf(item.value) != -1">{{ item.label }}
-          </el-tag>
-        </template>
-      </el-table-column>
-      <el-table-column label="开始时间" align="center" prop="startTime1"/>
-      <el-table-column label="结束时间" align="center" prop="endTime1"/>
-      <el-table-column label="未分配数量" align="center">
-        <template slot-scope="scope">
-          <el-tag :type="Number(scope.row.num) > 0 ?'danger' : ''">{{scope.row.num}}个</el-tag>
-        </template>
-      </el-table-column>
-      <el-table-column label="当前状态" align="center">
-        <template slot-scope="scope">
-          <div v-loading="loadingStatus">
-            <p v-if="statusObj.hasOwnProperty(scope.row.taskId)">
-              <el-tag v-if="statusObj[scope.row.taskId].runningStatus == 0">未启动</el-tag>
-              <el-tag v-if="statusObj[scope.row.taskId].runningStatus == 1">运行中</el-tag>
-              <el-tag v-if="statusObj[scope.row.taskId].runningStatus == 2">已暂停</el-tag>
-              <el-tag v-if="statusObj[scope.row.taskId].runningStatus == 3">已停止</el-tag>
-            </p>
-            <p v-if="!statusObj.hasOwnProperty(scope.row.taskId)">
-              <el-tag>空</el-tag>
-            </p>
-          </div>
-        </template>
-      </el-table-column>
-      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
-        <template slot-scope="scope">
-          <el-button
-            size="mini"
-            type="text"
-            @click="calleesOpen(scope.row.id)"
-            v-hasPermi="['system:companyVoiceRobotic:list']"
-          >客户列表
-          </el-button>
-          <el-button
-            size="mini"
-            type="text"
-            @click="wxOpen(scope.row.id)"
-            v-hasPermi="['system:companyVoiceRobotic:list']"
-          >加微统计
-          </el-button>
-          <el-button
-            size="mini"
-            type="text"
-            v-if="statusObj.hasOwnProperty(scope.row.taskId) && (statusObj[scope.row.taskId].runningStatus == 0 || statusObj[scope.row.taskId].runningStatus == 3)"
-            @click="startRoboticFun(scope.row.taskId)"
-            v-hasPermi="['system:companyVoiceRobotic:list']"
-          >启动任务
-          </el-button>
-          <el-button
-            size="mini"
-            type="text"
-            v-if="statusObj.hasOwnProperty(scope.row.taskId) && (statusObj[scope.row.taskId].runningStatus == 1 || statusObj[scope.row.taskId].runningStatus == 2)"
-            @click="stopRoboticFun(scope.row.taskId)"
-            v-hasPermi="['system:companyVoiceRobotic:list']"
-          >停止任务
-          </el-button>
-          <el-button
-            size="mini"
-            type="text"
-            @click="addRoboticFun(scope.row)"
-            v-hasPermi="['system:companyVoiceRobotic:edit']"
-          >追加个微
-          </el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-            v-hasPermi="['system:companyVoiceRobotic:remove']"
-          >删除
-          </el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-
-    <pagination
-      v-show="total>0"
-      :total="total"
-      :page.sync="queryParams.pageNum"
-      :limit.sync="queryParams.pageSize"
-      @pagination="getList"
-    />
-
-    <!-- 添加或修改机器人外呼任务对话框 -->
-    <el-drawer size="75%" :title="title" :visible.sync="open" width="500px" append-to-body>
-      <div class="app-container">
-        <el-form ref="form" :model="form" :rules="rules" label-width="100px">
-          <el-form-item label="任务名称" prop="name">
-            <el-input v-model="form.name" placeholder="请输入任务名称"/>
-          </el-form-item>
-          <el-form-item label="机器人" prop="robot">
-            <el-select v-model="form.robot" filterable>
-              <el-option v-for="item in robotList" :label="item.name + '('+item.num+')'" :value="item.id"/>
-            </el-select>
-          </el-form-item>
-          <el-form-item label="话术" prop="dialogId">
-            <el-select v-model="form.dialogId" filterable>
-              <el-option v-for="item in dialogList" :label="item.name" :value="item.id"/>
-            </el-select>
-          </el-form-item>
-          <el-form-item label="拨打客户" prop="userIds">
-            <el-button @click="openSelect">选择客户({{ form.userIds ? form.userIds.length : 0 }})</el-button>
-          </el-form-item>
-          <el-form-item label="加微方式" prop="addType">
-            <el-radio v-model="form.addType" :label="0">平均</el-radio>
-            <el-radio v-model="form.addType" :label="1">意向</el-radio>
-          </el-form-item>
-          <el-form-item label="分配账号">
-            <el-button @click="addQwUser">添加</el-button>
-            <el-row :gutter="24" v-for="(item, index) in form.qwUser" style="margin-top: 5px">
-              <el-col :span="5">
-                <el-select v-model="item.intention" placeholder="意向等级" filterable clearable>
-                  <el-option v-for="item in levelList" :label="item.dictLabel" :value="item.dictLabel"/>
-                </el-select>
-              </el-col>
-              <el-col :span="4">
-                <el-button @click="openQwUserSelect(index)">
-                  选择个微({{ item.companyUserId ? item.companyUserId.length : 0 }})
-                </el-button>
-              </el-col>
-              <el-col :span="5">
-                <el-select v-model="item.wxDialogId" placeholder="话术" filterable>
-                  <el-option v-for="item in wxDialogList" :label="item.name" :value="item.id"/>
-                </el-select>
-              </el-col>
-              <el-col :span="3">
-                <el-button type="danger" icon="el-icon-delete" circle @click="removeQwUser(index)"></el-button>
-              </el-col>
-            </el-row>
-          </el-form-item>
-          <el-form-item label="模式" prop="mode">
-            <el-select v-model="form.mode">
-              <el-option label="呼叫机器人后挂断" :value="7"/>
-            </el-select>
-          </el-form-item>
-          <el-form-item label="呼叫倍率" prop="multiplier">
-            <el-select v-model="form.multiplier">
-              <el-option :value="1"/>
-              <el-option :value="2"/>
-              <el-option :value="3"/>
-              <el-option :value="4"/>
-              <el-option :value="5"/>
-            </el-select>
-          </el-form-item>
-          <el-form-item label="自动重呼" prop="autoRecall">
-            <el-radio v-model="form.autoRecall" label="0">否</el-radio>
-            <el-radio v-model="form.autoRecall" label="1">是</el-radio>
-          </el-form-item>
-          <el-form-item label="重呼次数" prop="recallTimes" v-if="form.autoRecall == 1">
-            <el-select v-model="form.recallTimes">
-              <el-option label="不自动重呼" :value="0"/>
-              <el-option :value="1"/>
-              <el-option :value="2"/>
-              <el-option :value="3"/>
-              <el-option :value="4"/>
-              <el-option :value="5"/>
-            </el-select>
-          </el-form-item>
-          <el-form-item label="工作日" prop="weekDay">
-            <el-select v-model="form.weekDay" multiple style="width: 100%">
-              <el-option v-for="item in weekList" :label="item.label" :value="item.value"/>
-            </el-select>
-          </el-form-item>
-          <el-form-item label="开始时间" prop="startTime1">
-            <el-time-select
-              v-model="form.startTime1"
-              format="HH:mm"
-              value-format="HH:mm:00"
-              :picker-options="{
-                  start: '00:00',
-                  end: '23:59',
-                  step: '00:30',
-                }"
-              placeholder="请选择开始时间">
-            </el-time-select>
-          </el-form-item>
-          <el-form-item label="结束时间" prop="endTime1">
-            <el-time-select
-              v-model="form.endTime1"
-              format="HH:mm"
-              value-format="HH:mm:00"
-              :picker-options="{
-                  start: '00:00',
-                  end: '23:59',
-                  step: '00:30',
-                  minTime: form.startTime1
-                }"
-              placeholder="请选择结束时间">
-            </el-time-select>
-          </el-form-item>
-        </el-form>
-        <div slot="footer" class="dialog-footer">
-          <el-button type="primary" @click="submitForm">确 定</el-button>
-          <el-button @click="cancel">取 消</el-button>
-        </div>
-      </div>
-    </el-drawer>
-    <customer-select @success="selectFun" ref="customer"/>
-    <qw-user-select @success="selectQwUserFun" ref="qwUserSelect"/>
-    <qw-user-select @success="selectQwUserFunTow" ref="qwUserSelectTow"/>
-
-    <el-drawer title="呼叫客户列表" size="60%" :visible.sync="callees.show" width="800px" append-to-body>
-      <el-table v-loading="callees.loading" :data="callees.list">
-        <el-table-column label="电话号码" align="center" prop="phone"/>
-        <el-table-column label="客户名称" align="center" prop="userName"/>
-        <el-table-column label="客户ID" align="center" prop="userId"/>
-        <el-table-column label="是否回调" align="center">
-          <template slot-scope="scope">
-            <el-tag v-if="scope.row.result == 0">否</el-tag>
-            <el-tag v-if="scope.row.result == 1">是</el-tag>
-          </template>
-        </el-table-column>
-        <el-table-column label="意向等级" align="center" prop="intention"/>
-        <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
-          <template slot-scope="scope">
-            <el-button
-              size="mini"
-              type="text"
-              @click="openCustomer(scope.row.userId)"
-            >客户信息详情
-            </el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-
-      <pagination
-        v-show="callees.total>0"
-        :total="callees.total"
-        :page.sync="callees.queryParams.pageNum"
-        :limit.sync="callees.queryParams.pageSize"
-        @pagination="getCalleesList"
-      />
-    </el-drawer>
-    <el-drawer title="加微详情" size="60%" :visible.sync="wx.show" append-to-body>
-      <el-table v-loading="wx.loading" :data="wx.list">
-        <el-table-column label="意向等级" align="center" prop="intention"/>
-        <el-table-column label="微信昵称" align="center" prop="wxNickName"/>
-        <el-table-column label="微信号" align="center" prop="wxNo"/>
-        <el-table-column label="手机号" align="center" prop="phone"/>
-        <el-table-column label="员工名称" align="center" prop="companyUserName"/>
-        <el-table-column label="话术" align="center" prop="dialogName"/>
-        <el-table-column label="分配数量" align="center" prop="num"/>
-        <el-table-column label="添加数量" align="center" prop="addNum"/>
-      </el-table>
-
-      <pagination
-        v-show="wx.total>0"
-        :total="wx.total"
-        :page.sync="wx.queryParams.pageNum"
-        :limit.sync="wx.queryParams.pageSize"
-        @pagination="getWxList"
-      />
-    </el-drawer>
-    <el-drawer size="75%" title="客户详情" :visible.sync="customerDetailShow" append-to-body>
-      <customer-details ref="customerDetails"/>
-    </el-drawer>
-
-
-    <!-- 添加或修改添加个微信账号对话框 -->
-    <el-dialog title="追加个微" :visible.sync="openAdd" width="75%" append-to-body>
-      <el-form ref="form" :model="formOpen" label-width="80px">
-        <el-form-item label="分配账号">
-          <el-button @click="addQwUserTow">添加</el-button>
-          <el-row :gutter="24" v-for="(item, index) in formOpen.qwUser" style="margin-top: 5px">
-            <el-col :span="5">
-              <el-select v-model="item.intention" placeholder="意向等级" filterable clearable>
-                <el-option v-for="item in levelList" :label="item.dictLabel" :value="item.dictLabel"/>
-              </el-select>
-            </el-col>
-            <el-col :span="5">
-              <el-button @click="openQwUserSelectTow(index)">
-                选择企微({{ item.companyUserId ? item.companyUserId.length : 0 }})
-              </el-button>
-            </el-col>
-            <el-col :span="5">
-              <el-select v-model="item.wxDialogId" placeholder="话术" filterable>
-                <el-option v-for="item in wxDialogList" :label="item.name" :value="item.id"/>
-              </el-select>
-            </el-col>
-            <el-col :span="3">
-              <el-button type="danger" icon="el-icon-delete" circle
-                         @click="removeQwUser(index)"></el-button>
-            </el-col>
-          </el-row>
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitFormTow">确 定</el-button>
-        <el-button @click="openAdd = false">取 消</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import {
-  listRobotic,
-  getRobotic,
-  delRobotic,
-  addRobotic,
-  updateRobotic,
-  exportRobotic,
-  calleesList,
-  statusList,
-  startRobotic,
-  stopRobotic,
-  addScheme,
-  companyUserList,
-  wxList,
-  getTypes
-} from "@/api/company/companyVoiceRobotic";
-import {listAll} from '@/api/company/wxDialog';
-import customerSelect from '@/views/crm/components/CustomerSelect.vue';
-import qwUserSelect from '@/views/components/QwUserSelect.vue';
-import customerDetails from "@/views/crm/components/customerDetails.vue";
-import {clearTime} from "element-ui";
-import {getDicts} from "@/api/system/dict/data";
-
-export default {
-  name: "Robotic",
-  components: {customerDetails, customerSelect, qwUserSelect},
-  data() {
-    return {
-      // 遮罩层
-      loading: true,
-      // 选中数组
-      ids: [],
-      weekList: [
-        {label: "星期一", value: 1},
-        {label: "星期二", value: 2},
-        {label: "星期三", value: 3},
-        {label: "星期四", value: 4},
-        {label: "星期五", value: 5},
-        {label: "星期六", value: 6},
-        {label: "星期日", value: 0},
-      ],
-      // 非单个禁用
-      single: true,
-      // 非多个禁用
-      multiple: true,
-      // 显示搜索条件
-      showSearch: true,
-      loadingStatus: true,
-      // 总条数
-      total: 0,
-      // 机器人外呼任务表格数据
-      roboticList: [],
-      userTableList: [],
-      // 弹出层标题
-      title: "",
-      // 是否显示弹出层
-      open: false,
-      openAdd: false,
-      // 查询参数
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        name: null,
-        taskName: null,
-        taskId: null,
-        robot: null,
-        dialogId: null,
-        mode: null,
-        multiplier: null,
-        autoRecall: null,
-        recallTimes: null,
-        cidGroupId: null,
-        weekDay1: null,
-        startTime1: null,
-        endTime1: null,
-        weekDay2: null,
-        startTime2: null,
-        endTime2: null,
-        createUser: null
-      },
-      // 表单参数
-      form: {},
-      formOpen: {},
-      statusObj: {},
-      levelList: {},
-      robotList: [],
-      dialogList: [],
-      wxDialogList: [],
-      qwUserList: [],
-      selectQwUserList: [],
-      thisQwUserIndex: 0,
-      updateTime: null,
-      customer: {
-        show: false,
-      },
-      customerDetailShow: false,
-      callees: {
-        show: false,
-        list: [],
-        loading: false,
-        total: 0,
-        queryParams: {
-          id: null,
-          pageNum: 1,
-          pageSize: 10,
-        },
-      },
-      wx: {
-        show: false,
-        list: [],
-        loading: false,
-        total: 0,
-        queryParams: {
-          id: null,
-          pageNum: 1,
-          pageSize: 10,
-        },
-      },
-      // 表单校验
-      rules: {}
-    };
-  },
-  created() {
-    getTypes().then(e => {
-      this.robotList = e.robot;
-      this.dialogList = e.dialog;
-    })
-    listAll().then(e => {
-      this.wxDialogList = e.data;
-    })
-    companyUserList().then(e => {
-      this.qwUserList = e.data;
-    })
-    getDicts("customer_intention_level").then(e => {
-      this.levelList = e.data;
-    })
-    this.getList();
-  },
-  methods: {
-    /** 查询机器人外呼任务列表 */
-    getList() {
-      this.loading = true;
-      listRobotic(this.queryParams).then(response => {
-        this.roboticList = response.rows;
-        this.roboticList.forEach(e => {
-          if (e.weekDay1) {
-            e.weekDay = e.weekDay1.split(",")
-          }
-        })
-        this.total = response.total;
-        this.loading = false;
-        this.updateStatusFun();
-      });
-    },
-    updateStatusFun() {
-      if (!this.roboticList) {
-        return;
-      }
-      this.loadingStatus = true;
-      statusList(this.roboticList.map(e => e.taskId).join()).then(e => {
-        this.loadingStatus = false;
-        this.statusObj = e.data;
-      });
-    },
-    // 取消按钮
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 表单重置
-    reset() {
-      this.form = {
-        id: null,
-        name: null,
-        taskName: null,
-        taskId: null,
-        robot: null,
-        dialogId: null,
-        mode: null,
-        multiplier: null,
-        autoRecall: null,
-        recallTimes: null,
-        cidGroupId: null,
-        weekDay1: null,
-        startTime1: null,
-        addType: 0,
-        endTime1: null,
-        weekDay2: null,
-        startTime2: null,
-        endTime2: null,
-        createTime: null,
-        qwUser: [],
-        createUser: null
-      };
-      this.resetForm("form");
-    },
-    /** 搜索按钮操作 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 重置按钮操作 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 多选框选中数据
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.id)
-      this.single = selection.length !== 1
-      this.multiple = !selection.length
-    },
-    /** 新增按钮操作 */
-    handleAdd() {
-      this.reset();
-      this.open = true;
-      this.title = "添加机器人外呼任务";
-    },
-    /** 修改按钮操作 */
-    handleUpdate(row) {
-      this.reset();
-      const id = row.id || this.ids
-      getRobotic(id).then(response => {
-        this.form = response.data;
-        this.open = true;
-        this.title = "修改机器人外呼任务";
-      });
-    },
-    /** 提交按钮 */
-    submitForm() {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          if (this.form.weekDay && this.form.weekDay.length > 0) {
-            this.form.weekDay1 = this.form.weekDay.join(",")
-          }
-          let list = [];
-          this.form.qwUser.forEach(l => {
-            list = list.concat(l.companyUserId.map(e => {
-              return {intention: l.intention, companyUserId: e, wxDialogId: l.wxDialogId}
-            }))
-          })
-          this.form.qwUserList = list;
-          if (!this.form.qwUserList || this.form.qwUserList.length == 0) {
-            this.msgError("请选者加微方案");
-            return;
-          }
-          if (this.form.id != null) {
-            updateRobotic(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("修改成功");
-                this.open = false;
-                this.getList();
-              }
-            });
-          } else {
-            addRobotic(this.form).then(response => {
-              if (response.code === 200) {
-                this.msgSuccess("新增成功");
-                this.open = false;
-                this.getList();
-              }
-            });
-          }
-        }
-      });
-    },
-    /** 提交按钮 */
-    submitFormTow() {
-      let list = [];
-      this.formOpen.qwUser.forEach(l => {
-        list = list.concat(l.companyUserId.map(e => {
-          return {intention: l.intention, companyUserId: e, wxDialogId: l.wxDialogId}
-        }))
-      })
-      this.formOpen.qwUserList = list;
-      if (!this.formOpen.qwUserList || this.formOpen.qwUserList.length == 0) {
-        this.msgError("请选者加微方案");
-        return;
-      }
-      addScheme(this.formOpen).then(response => {
-        if (response.code === 200) {
-          this.msgSuccess("修改成功");
-          this.open = false;
-          this.getList();
-        }
-      });
-    },
-    /** 删除按钮操作 */
-    handleDelete(row) {
-      const ids = row.id || this.ids;
-      this.$confirm('是否确认删除机器人外呼任务编号为"' + ids + '"的数据项?', "警告", {
-        confirmButtonText: "确定",
-        cancelButtonText: "取消",
-        type: "warning"
-      }).then(function () {
-        return delRobotic(ids);
-      }).then(() => {
-        this.getList();
-        this.msgSuccess("删除成功");
-      }).catch(function () {
-      });
-    },
-    /** 导出按钮操作 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm('是否确认导出所有机器人外呼任务数据项?', "警告", {
-        confirmButtonText: "确定",
-        cancelButtonText: "取消",
-        type: "warning"
-      }).then(function () {
-        return exportRobotic(queryParams);
-      }).then(response => {
-        this.download(response.msg);
-      }).catch(function () {
-      });
-    },
-    openSelect() {
-      this.$refs.customer.setRows(this.form.userTableList);
-    },
-    openQwUserSelectTow(index) {
-      this.thisQwUserIndex = index;
-      this.$nextTick(() => {
-        this.$refs.qwUserSelectTow.setRows(this.selectQwUserList[index]);
-      })
-    },
-    openQwUserSelect(index) {
-      this.thisQwUserIndex = index;
-      this.$nextTick(() => {
-        this.$refs.qwUserSelect.setRows(this.selectQwUserList[index]);
-      })
-    },
-    selectFun(e) {
-      this.form.userIds = e.ids;
-      this.form.userNames = e.names;
-      this.form.userTableList = e.rows;
-      this.$forceUpdate()
-    },
-    selectQwUserFunTow(e) {
-      console.info(this.formOpen.qwUser[this.thisQwUserIndex])
-      this.formOpen.qwUser[this.thisQwUserIndex].companyUserId = e.ids;
-      console.info(this.formOpen)
-      this.selectQwUserList[this.thisQwUserIndex] = e.rows;
-      this.$forceUpdate()
-    },
-    selectQwUserFun(e) {
-      this.form.qwUser[this.thisQwUserIndex].companyUserId = e.ids;
-      this.selectQwUserList[this.thisQwUserIndex] = e.rows;
-      this.$forceUpdate()
-    },
-    calleesOpen(id) {
-      this.callees.show = true;
-      this.callees.queryParams.id = id;
-      this.getCalleesList();
-    },
-    getCalleesList() {
-      this.callees.loading = true;
-      calleesList(this.callees.queryParams).then(response => {
-        this.callees.list = response.rows;
-        this.callees.total = response.total;
-        this.callees.loading = false;
-      });
-    },
-    wxOpen(id) {
-      this.wx.show = true;
-      this.wx.queryParams.id = id;
-      this.getWxList();
-    },
-    getWxList() {
-      this.wx.loading = true;
-      wxList(this.wx.queryParams).then(response => {
-        this.wx.list = response.rows;
-        this.wx.total = response.total;
-        this.wx.loading = false;
-      });
-    },
-    openCustomer(id) {
-      this.customerDetailShow = true;
-      this.$nextTick(() => {
-        this.$refs.customerDetails.getDetails(id);
-      })
-    },
-    startRoboticFun(id) {
-      startRobotic(id).then(e => {
-        this.updateStatusFun();
-      })
-    },
-    stopRoboticFun(id) {
-      stopRobotic(id).then(e => {
-        this.updateStatusFun();
-      })
-    },
-    addQwUserTow(row) {
-      this.formOpen.qwUser.push({});
-    },
-    addRoboticFun(row) {
-      this.openAdd = true;
-      this.formOpen = {id: row.id, qwUser: []};
-    },
-    addQwUser() {
-      this.form.qwUser.push({});
-    },
-    removeQwUser(index) {
-      this.form.qwUser.splice(index, 1)
-    }
-  }
-};
-</script>

+ 200 - 270
src/views/company/companyVoiceRobotic/index.vue

@@ -3,34 +3,23 @@
     <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
       <el-form-item label="任务名称" prop="name">
         <el-input
-            v-model="queryParams.name"
-            placeholder="请输入任务名称"
-            clearable
-            size="small"
-            @keyup.enter.native="handleQuery"
+          v-model="queryParams.name"
+          placeholder="请输入任务名称"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
         />
       </el-form-item>
       <el-form-item label="机器人" prop="robot">
         <el-select v-model="queryParams.robot" filterable clearable>
-          <el-option-group
-              v-for="(v, k) in robotList"
-              :key="k"
-              :label="k">
-            <el-option
-                v-for="item in v"
-                :key="item.robotId"
-                :label="item.robotName"
-                :value="item.robotId">
-            </el-option>
-          </el-option-group>
-          <!--          <el-option v-for="item in robotList" :label="item.name + '('+item.num+')'" :value="item.id"/>-->
+          <el-option v-for="item in robotList" :label="item.name + '('+item.num+')'" :value="item.id"/>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="话术" prop="dialogId">
+        <el-select v-model="queryParams.dialogId" filterable clearable>
+          <el-option v-for="item in dialogList" :label="item.name" :value="item.id"/>
         </el-select>
       </el-form-item>
-      <!--      <el-form-item label="话术" prop="dialogId">-->
-      <!--        <el-select v-model="queryParams.dialogId" filterable clearable>-->
-      <!--          <el-option v-for="item in dialogList" :label="item.name" :value="item.id"/>-->
-      <!--        </el-select>-->
-      <!--      </el-form-item>-->
       <el-form-item>
         <el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
         <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
@@ -40,53 +29,53 @@
     <el-row :gutter="10" class="mb8">
       <el-col :span="1.5">
         <el-button
-            type="primary"
-            icon="el-icon-plus"
-            size="mini"
-            @click="handleAdd"
-            v-hasPermi="['system:companyVoiceRobotic:add']"
+          type="primary"
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['system:companyVoiceRobotic:add']"
         >新增
         </el-button>
       </el-col>
       <el-col :span="1.5">
         <el-button
-            type="success"
-            icon="el-icon-edit"
-            size="mini"
-            :disabled="single"
-            @click="handleUpdate"
-            v-hasPermi="['system:companyVoiceRobotic:edit']"
+          type="success"
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:companyVoiceRobotic:edit']"
         >修改
         </el-button>
       </el-col>
       <el-col :span="1.5">
         <el-button
-            type="danger"
-            icon="el-icon-delete"
-            size="mini"
-            :disabled="multiple"
-            @click="handleDelete"
-            v-hasPermi="['system:companyVoiceRobotic:remove']"
+          type="danger"
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:companyVoiceRobotic:remove']"
         >删除
         </el-button>
       </el-col>
       <el-col :span="1.5">
         <el-button
-            type="warning"
-            icon="el-icon-download"
-            size="mini"
-            @click="handleExport"
-            v-hasPermi="['system:companyVoiceRobotic:export']"
+          type="warning"
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['system:companyVoiceRobotic:export']"
         >导出
         </el-button>
       </el-col>
       <el-col :span="1.5">
         <el-button
-            type="success"
-            icon="el-icon-refresh"
-            size="mini"
-            @click="updateStatusFun"
-            v-hasPermi="['system:companyVoiceRobotic:list']"
+          type="success"
+          icon="el-icon-refresh"
+          size="mini"
+          @click="updateStatusFun"
+          v-hasPermi="['system:companyVoiceRobotic:list']"
         >更新状态
         </el-button>
       </el-col>
@@ -101,13 +90,12 @@
       <el-table-column label="三方ID" align="center" prop="taskId"/>
       <el-table-column label="机器人" align="center" prop="robot">
         <template slot-scope="scope">
-          <p v-for="(item, index) in robotList" v-if="scope.row.robot && scope.row.robot == item.id">{{ item.name }}</p>
+          <p v-for="(item, index) in robotList"   v-if="scope.row.robot && scope.row.robot == item.id">{{item.name}}</p>
         </template>
       </el-table-column>
       <el-table-column label="话术" align="center" prop="dialogId">
         <template slot-scope="scope">
-          <p v-for="(item, index) in dialogList" v-if="scope.row.dialogId && scope.row.dialogId == item.id">
-            {{ item.name }}</p>
+          <p v-for="(item, index) in dialogList"   v-if="scope.row.dialogId && scope.row.dialogId == item.id">{{item.name}}</p>
         </template>
       </el-table-column>
       <el-table-column label="加微方式" align="center" prop="dialogId">
@@ -118,18 +106,11 @@
       </el-table-column>
       <el-table-column label="工作日" align="center" prop="weekDay1">
         <template slot-scope="scope">
-          <el-tag v-for="(item, index) in weekList"
-                  v-if="scope.row.weekDay1 && scope.row.weekDay1.indexOf(item.value) != -1">{{ item.label }}
-          </el-tag>
+          <el-tag v-for="(item, index) in weekList"   v-if="scope.row.weekDay1 && scope.row.weekDay1.indexOf(item.value) != -1">{{item.label}}</el-tag>
         </template>
       </el-table-column>
       <el-table-column label="开始时间" align="center" prop="startTime1"/>
       <el-table-column label="结束时间" align="center" prop="endTime1"/>
-      <el-table-column label="未分配数量" align="center">
-        <template slot-scope="scope">
-          <el-tag :type="Number(scope.row.num) > 0 ?'danger' : ''">{{ scope.row.num }}个</el-tag>
-        </template>
-      </el-table-column>
       <el-table-column label="当前状态" align="center">
         <template slot-scope="scope">
           <div v-loading="loadingStatus">
@@ -139,57 +120,50 @@
               <el-tag v-if="statusObj[scope.row.taskId].runningStatus == 2">已暂停</el-tag>
               <el-tag v-if="statusObj[scope.row.taskId].runningStatus == 3">已停止</el-tag>
             </p>
-            <p v-if="!statusObj.hasOwnProperty(scope.row.taskId)">
-              <el-tag>空</el-tag>
-            </p>
+            <p v-if="!statusObj.hasOwnProperty(scope.row.taskId)"><el-tag>空</el-tag></p>
           </div>
         </template>
       </el-table-column>
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
         <template slot-scope="scope">
           <el-button
-              size="mini"
-              type="text"
-              @click="calleesOpen(scope.row.id)"
-              v-hasPermi="['system:companyVoiceRobotic:list']"
-          >客户列表
-          </el-button>
+            size="mini"
+            type="text"
+            @click="calleesOpen(scope.row.id)"
+            v-hasPermi="['system:companyVoiceRobotic:list']"
+          >客户列表</el-button>
           <el-button
-              size="mini"
-              type="text"
-              @click="wxOpen(scope.row.id)"
-              v-hasPermi="['system:companyVoiceRobotic:list']"
-          >加微统计
-          </el-button>
+            size="mini"
+            type="text"
+            @click="wxOpen(scope.row.id)"
+            v-hasPermi="['system:companyVoiceRobotic:list']"
+          >加微统计</el-button>
           <el-button
-              size="mini"
-              type="text"
-              v-if="statusObj.hasOwnProperty(scope.row.taskId) && (statusObj[scope.row.taskId].runningStatus == 0 || statusObj[scope.row.taskId].runningStatus == 3)"
-              @click="startRoboticFun(scope.row.taskId)"
-              v-hasPermi="['system:companyVoiceRobotic:list']"
-          >启动任务
-          </el-button>
+            size="mini"
+            type="text"
+            v-if="statusObj.hasOwnProperty(scope.row.taskId) && (statusObj[scope.row.taskId].runningStatus == 0 || statusObj[scope.row.taskId].runningStatus == 3)"
+            @click="startRoboticFun(scope.row.taskId)"
+            v-hasPermi="['system:companyVoiceRobotic:list']"
+          >启动任务</el-button>
           <el-button
-              size="mini"
-              type="text"
-              v-if="statusObj.hasOwnProperty(scope.row.taskId) && (statusObj[scope.row.taskId].runningStatus == 1 || statusObj[scope.row.taskId].runningStatus == 2)"
-              @click="stopRoboticFun(scope.row.taskId)"
-              v-hasPermi="['system:companyVoiceRobotic:list']"
-          >停止任务
-          </el-button>
+            size="mini"
+            type="text"
+            v-if="statusObj.hasOwnProperty(scope.row.taskId) && (statusObj[scope.row.taskId].runningStatus == 1 || statusObj[scope.row.taskId].runningStatus == 2)"
+            @click="stopRoboticFun(scope.row.taskId)"
+            v-hasPermi="['system:companyVoiceRobotic:list']"
+          >停止任务</el-button>
           <el-button
-              size="mini"
-              type="text"
-              @click="addRoboticFun(scope.row)"
-              v-hasPermi="['system:companyVoiceRobotic:edit']"
-          >追加个微
-          </el-button>
+            size="mini"
+            type="text"
+            @click="addRoboticFun(scope.row)"
+            v-hasPermi="['system:companyVoiceRobotic:edit']"
+          >追加个微</el-button>
           <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-delete"
-              @click="handleDelete(scope.row)"
-              v-hasPermi="['system:companyVoiceRobotic:remove']"
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['system:companyVoiceRobotic:remove']"
           >删除
           </el-button>
         </template>
@@ -197,40 +171,30 @@
     </el-table>
 
     <pagination
-        v-show="total>0"
-        :total="total"
-        :page.sync="queryParams.pageNum"
-        :limit.sync="queryParams.pageSize"
-        @pagination="getList"
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
     />
 
     <!-- 添加或修改机器人外呼任务对话框 -->
     <el-drawer size="75%" :title="title" :visible.sync="open" width="500px" append-to-body>
       <div class="app-container">
         <el-form ref="form" :model="form" :rules="rules" label-width="100px">
-          <el-form-item label="任务名称" prop="taskName">
-            <el-input v-model="form.taskName" placeholder="请输入任务名称"/>
+          <el-form-item label="任务名称" prop="name">
+            <el-input v-model="form.name" placeholder="请输入任务名称"/>
+          </el-form-item>
+          <el-form-item label="机器人" prop="robot">
+            <el-select v-model="form.robot" filterable>
+              <el-option v-for="item in robotList" :label="item.name + '('+item.num+')'" :value="item.id"/>
+            </el-select>
           </el-form-item>
-          <el-form-item label="机器人" prop="robotId">
-            <el-select v-model="form.robotId" filterable>
-              <el-option-group
-                  v-for="(v, k) in robotList"
-                  :key="k"
-                  :label="k">
-                <el-option
-                    v-for="item in v"
-                    :key="item.robotId"
-                    :label="item.robotName"
-                    :value="item.robotId">
-                </el-option>
-              </el-option-group>
+          <el-form-item label="话术" prop="dialogId">
+            <el-select v-model="form.dialogId" filterable>
+              <el-option v-for="item in dialogList" :label="item.name" :value="item.id"/>
             </el-select>
           </el-form-item>
-          <!--          <el-form-item label="话术" prop="dialogId">-->
-          <!--            <el-select v-model="form.dialogId" filterable>-->
-          <!--              <el-option v-for="item in dialogList" :label="item.name" :value="item.id"/>-->
-          <!--            </el-select>-->
-          <!--          </el-form-item>-->
           <el-form-item label="拨打客户" prop="userIds">
             <el-button @click="openSelect">选择客户({{ form.userIds ? form.userIds.length : 0 }})</el-button>
           </el-form-item>
@@ -247,9 +211,7 @@
                 </el-select>
               </el-col>
               <el-col :span="4">
-                <el-button @click="openQwUserSelect(index)">
-                  选择个微({{ item.companyUserId ? item.companyUserId.length : 0 }})
-                </el-button>
+                <el-button @click="openQwUserSelect(index)">选择个微({{ item.companyUserId ? item.companyUserId.length : 0 }})</el-button>
               </el-col>
               <el-col :span="5">
                 <el-select v-model="item.wxDialogId" placeholder="话术" filterable>
@@ -261,57 +223,26 @@
               </el-col>
             </el-row>
           </el-form-item>
-
-          <el-form-item label="呼叫开始日期" prop="dialStartDate">
-            <el-date-picker
-                size="small"
-                v-model="form.dialStartDate"
-                type="date"
-                placeholder="选择开始日期"
-                value-format="yyyy-MM-dd"
-            />
-          </el-form-item>
-          <el-form-item label="呼叫截止日期" prop="dialEndDate">
-            <el-date-picker
-                size="small"
-                v-model="form.dialEndDate"
-                type="date"
-                placeholder="选择开始日期"
-                value-format="yyyy-MM-dd"
-            />
-          </el-form-item>
-
-          <el-form-item label="呼叫开始日期" prop="dialStartTime">
-            <el-time-select
-                placeholder="起始时间"
-                v-model="form.dialStartTime"
-                value-format="HH:mm"
-                :picker-options="{
-                  start: '09:00',
-                  step: '01:00',
-                  end: '22:00'
-                }">
-            </el-time-select>
+          <el-form-item label="模式" prop="mode">
+            <el-select v-model="form.mode">
+              <el-option label="呼叫机器人后挂断" :value="7"/>
+            </el-select>
           </el-form-item>
-          <el-form-item label="呼叫截止日期" prop="dialEndTime">
-            <el-time-select
-                placeholder="结束时间"
-                v-model="form.dialEndTime"
-                value-format="HH:mm"
-                :picker-options="{
-                  start: '09:00',
-                  step: '01:00',
-                  end: '22:00',
-                  minTime: form.dialStartTime
-                }">
-            </el-time-select>
+          <el-form-item label="呼叫倍率" prop="multiplier">
+            <el-select v-model="form.multiplier">
+              <el-option :value="1"/>
+              <el-option :value="2"/>
+              <el-option :value="3"/>
+              <el-option :value="4"/>
+              <el-option :value="5"/>
+            </el-select>
           </el-form-item>
-          <el-form-item label="呼叫截止日期" prop="forbidDialDate">
-            <el-checkbox v-for="item in weekList" v-model="form.forbidDialDate" :label="item.value">{{item.label}}</el-checkbox>
+          <el-form-item label="自动重呼" prop="autoRecall">
+            <el-radio v-model="form.autoRecall" label="0">否</el-radio>
+            <el-radio v-model="form.autoRecall" label="1">是</el-radio>
           </el-form-item>
-
-          <el-form-item label="重试次数" prop="retryTimes">
-            <el-select v-model="form.retryTimes">
+          <el-form-item label="重呼次数" prop="recallTimes" v-if="form.autoRecall == 1">
+            <el-select v-model="form.recallTimes">
               <el-option label="不自动重呼" :value="0"/>
               <el-option :value="1"/>
               <el-option :value="2"/>
@@ -320,6 +251,38 @@
               <el-option :value="5"/>
             </el-select>
           </el-form-item>
+          <el-form-item label="工作日" prop="weekDay">
+            <el-select v-model="form.weekDay" multiple style="width: 100%">
+              <el-option v-for="item in weekList" :label="item.label" :value="item.value"/>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="开始时间" prop="startTime1">
+            <el-time-select
+              v-model="form.startTime1"
+              format="HH:mm"
+              value-format="HH:mm:00"
+              :picker-options="{
+                  start: '00:00',
+                  end: '23:59',
+                  step: '00:30',
+                }"
+              placeholder="请选择开始时间">
+            </el-time-select>
+          </el-form-item>
+          <el-form-item label="结束时间" prop="endTime1">
+            <el-time-select
+              v-model="form.endTime1"
+              format="HH:mm"
+              value-format="HH:mm:00"
+              :picker-options="{
+                  start: '00:00',
+                  end: '23:59',
+                  step: '00:30',
+                  minTime: form.startTime1
+                }"
+              placeholder="请选择结束时间">
+            </el-time-select>
+          </el-form-item>
         </el-form>
         <div slot="footer" class="dialog-footer">
           <el-button type="primary" @click="submitForm">确 定</el-button>
@@ -336,31 +299,23 @@
         <el-table-column label="电话号码" align="center" prop="phone"/>
         <el-table-column label="客户名称" align="center" prop="userName"/>
         <el-table-column label="客户ID" align="center" prop="userId"/>
-        <el-table-column label="是否回调" align="center">
-          <template slot-scope="scope">
-            <el-tag v-if="scope.row.result == 0">否</el-tag>
-            <el-tag v-if="scope.row.result == 1">是</el-tag>
-          </template>
-        </el-table-column>
-        <el-table-column label="意向等级" align="center" prop="intention"/>
         <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
           <template slot-scope="scope">
             <el-button
-                size="mini"
-                type="text"
-                @click="openCustomer(scope.row.userId)"
-            >客户信息详情
-            </el-button>
+              size="mini"
+              type="text"
+              @click="openCustomer(scope.row.userId)"
+            >客户信息详情</el-button>
           </template>
         </el-table-column>
       </el-table>
 
       <pagination
-          v-show="callees.total>0"
-          :total="callees.total"
-          :page.sync="callees.queryParams.pageNum"
-          :limit.sync="callees.queryParams.pageSize"
-          @pagination="getCalleesList"
+        v-show="callees.total>0"
+        :total="callees.total"
+        :page.sync="callees.queryParams.pageNum"
+        :limit.sync="callees.queryParams.pageSize"
+        @pagination="getCalleesList"
       />
     </el-drawer>
     <el-drawer title="加微详情" size="60%" :visible.sync="wx.show" append-to-body>
@@ -376,37 +331,39 @@
       </el-table>
 
       <pagination
-          v-show="wx.total>0"
-          :total="wx.total"
-          :page.sync="wx.queryParams.pageNum"
-          :limit.sync="wx.queryParams.pageSize"
-          @pagination="getWxList"
+        v-show="wx.total>0"
+        :total="wx.total"
+        :page.sync="wx.queryParams.pageNum"
+        :limit.sync="wx.queryParams.pageSize"
+        @pagination="getWxList"
       />
     </el-drawer>
     <el-drawer size="75%" title="客户详情" :visible.sync="customerDetailShow" append-to-body>
-      <customer-details ref="customerDetails"/>
+      <customer-details ref="customerDetails" />
     </el-drawer>
 
 
+
+
     <!-- 添加或修改添加个微信账号对话框 -->
     <el-dialog title="追加个微" :visible.sync="openAdd" width="75%" append-to-body>
-      <el-form ref="form" :model="formOpen" label-width="80px">
+      <el-form ref="form" :model="formOpen" :rules="rules" label-width="80px">
         <el-form-item label="分配账号">
           <el-button @click="addQwUserTow">添加</el-button>
           <el-row :gutter="24" v-for="(item, index) in formOpen.qwUser" style="margin-top: 5px">
             <el-col :span="5">
               <el-select v-model="item.intention" placeholder="意向等级" filterable clearable>
-                <el-option v-for="item in levelList" :label="item.dictLabel" :value="item.dictLabel"/>
+                <el-option v-for="item in levelList" :label="item.dictLabel" :value="item.dictValue"/>
               </el-select>
             </el-col>
             <el-col :span="5">
               <el-button @click="openQwUserSelectTow(index)">
-                选择企微({{ item.companyUserId ? item.companyUserId.length : 0 }})
+                选择企微({{ item.qwUserId ? item.qwUserId.length : 0 }})
               </el-button>
             </el-col>
             <el-col :span="5">
               <el-select v-model="item.wxDialogId" placeholder="话术" filterable>
-                <el-option v-for="item in wxDialogList" :label="item.name" :value="item.id"/>
+                <el-option v-for="item in dialogList" :label="item.name" :value="item.id"/>
               </el-select>
             </el-col>
             <el-col :span="3">
@@ -417,8 +374,8 @@
         </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitFormTow">确 定</el-button>
-        <el-button @click="openAdd = false">取 消</el-button>
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
       </div>
     </el-dialog>
   </div>
@@ -436,15 +393,12 @@ import {
   statusList,
   startRobotic,
   stopRobotic,
-  addScheme,
   companyUserList,
   wxList,
   getTypes
 } from "@/api/company/companyVoiceRobotic";
-import { listAiobBaiduTask, getAiobBaiduTask, delAiobBaiduTask, addAiobBaiduTask, updateAiobBaiduTask, exportAiobBaiduTask } from "@/api/aiob/AiobBaiduTask";
-import {listAll} from '@/api/company/wxDialog';
+import { listAll } from '@/api/company/wxDialog';
 import customerSelect from '@/views/crm/components/CustomerSelect.vue';
-import {robotList} from '@/api/aiob/AiobBaiduTask';
 import qwUserSelect from '@/views/components/QwUserSelect.vue';
 import customerDetails from "@/views/crm/components/customerDetails.vue";
 import {clearTime} from "element-ui";
@@ -460,14 +414,13 @@ export default {
       // 选中数组
       ids: [],
       weekList: [
-        {label: "节假日", value: "99"},
-        {label: "星期一", value: "1"},
-        {label: "星期二", value: "2"},
-        {label: "星期三", value: "3"},
-        {label: "星期四", value: "4"},
-        {label: "星期五", value: "5"},
-        {label: "星期六", value: "6"},
-        {label: "星期日", value: "0"},
+        {label: "星期一", value: 1},
+        {label: "星期二", value: 2},
+        {label: "星期三", value: 3},
+        {label: "星期四", value: 4},
+        {label: "星期五", value: 5},
+        {label: "星期六", value: 6},
+        {label: "星期日", value: 0},
       ],
       // 非单个禁用
       single: true,
@@ -529,7 +482,7 @@ export default {
         list: [],
         loading: false,
         total: 0,
-        queryParams: {
+        queryParams:{
           id: null,
           pageNum: 1,
           pageSize: 10,
@@ -540,7 +493,7 @@ export default {
         list: [],
         loading: false,
         total: 0,
-        queryParams: {
+        queryParams:{
           id: null,
           pageNum: 1,
           pageSize: 10,
@@ -551,8 +504,9 @@ export default {
     };
   },
   created() {
-    robotList().then(e => {
-      this.robotList = e.data;
+    getTypes().then(e => {
+      this.robotList = e.robot;
+      this.dialogList = e.dialog;
     })
     listAll().then(e => {
       this.wxDialogList = e.data;
@@ -569,19 +523,20 @@ export default {
     /** 查询机器人外呼任务列表 */
     getList() {
       this.loading = true;
-      listAiobBaiduTask(this.queryParams).then(response => {
+      listRobotic(this.queryParams).then(response => {
         this.roboticList = response.rows;
         this.roboticList.forEach(e => {
-          if (e.weekDay1) {
+          if(e.weekDay1){
             e.weekDay = e.weekDay1.split(",")
           }
         })
         this.total = response.total;
         this.loading = false;
+        this.updateStatusFun();
       });
     },
-    updateStatusFun() {
-      if (!this.roboticList) {
+    updateStatusFun(){
+      if(!this.roboticList){
         return;
       }
       this.loadingStatus = true;
@@ -618,7 +573,6 @@ export default {
         endTime2: null,
         createTime: null,
         qwUser: [],
-        forbidDialDate: [],
         createUser: null
       };
       this.resetForm("form");
@@ -649,7 +603,7 @@ export default {
     handleUpdate(row) {
       this.reset();
       const id = row.id || this.ids
-      getAiobBaiduTask(id).then(response => {
+      getRobotic(id).then(response => {
         this.form = response.data;
         this.open = true;
         this.title = "修改机器人外呼任务";
@@ -659,23 +613,20 @@ export default {
     submitForm() {
       this.$refs["form"].validate(valid => {
         if (valid) {
-          // if(this.form.forbidDialDateArr && this.form.forbidDialDateArr.length > 0) {
-          //   this.form.forbidDialDate = this.form.forbidDialDateArr.join();
-          // }
+          if (this.form.weekDay && this.form.weekDay.length > 0) {
+            this.form.weekDay1 = this.form.weekDay.join(",")
+          }
           let list = [];
           this.form.qwUser.forEach(l => {
-            list = list.concat(l.companyUserId.map(e => {
-              return {intention: l.intention, companyUserId: e, wxDialogId: l.wxDialogId}
-            }))
+            list = list.concat(l.companyUserId.map(e => {return {intention: l.intention, companyUserId: e,wxDialogId: l.wxDialogId}}))
           })
           this.form.qwUserList = list;
-          if (!this.form.qwUserList || this.form.qwUserList.length == 0) {
+          if(!this.form.qwUserList || this.form.qwUserList.length == 0){
             this.msgError("请选者加微方案");
             return;
           }
-          console.info(this.form)
           if (this.form.id != null) {
-            updateAiobBaiduTask(this.form).then(response => {
+            updateRobotic(this.form).then(response => {
               if (response.code === 200) {
                 this.msgSuccess("修改成功");
                 this.open = false;
@@ -683,7 +634,7 @@ export default {
               }
             });
           } else {
-            addAiobBaiduTask(this.form).then(response => {
+            addRobotic(this.form).then(response => {
               if (response.code === 200) {
                 this.msgSuccess("新增成功");
                 this.open = false;
@@ -694,27 +645,6 @@ export default {
         }
       });
     },
-    /** 提交按钮 */
-    submitFormTow() {
-      let list = [];
-      this.formOpen.qwUser.forEach(l => {
-        list = list.concat(l.companyUserId.map(e => {
-          return {intention: l.intention, companyUserId: e, wxDialogId: l.wxDialogId}
-        }))
-      })
-      this.formOpen.qwUserList = list;
-      if (!this.formOpen.qwUserList || this.formOpen.qwUserList.length == 0) {
-        this.msgError("请选者加微方案");
-        return;
-      }
-      addScheme(this.formOpen).then(response => {
-        if (response.code === 200) {
-          this.msgSuccess("修改成功");
-          this.open = false;
-          this.getList();
-        }
-      });
-    },
     /** 删除按钮操作 */
     handleDelete(row) {
       const ids = row.id || this.ids;
@@ -766,9 +696,9 @@ export default {
       this.$forceUpdate()
     },
     selectQwUserFunTow(e) {
-      console.info(this.formOpen.qwUser[this.thisQwUserIndex])
+      console.info(e)
+      console.info(this.thisQwUserIndex)
       this.formOpen.qwUser[this.thisQwUserIndex].companyUserId = e.ids;
-      console.info(this.formOpen)
       this.selectQwUserList[this.thisQwUserIndex] = e.rows;
       this.$forceUpdate()
     },
@@ -777,7 +707,7 @@ export default {
       this.selectQwUserList[this.thisQwUserIndex] = e.rows;
       this.$forceUpdate()
     },
-    calleesOpen(id) {
+    calleesOpen(id){
       this.callees.show = true;
       this.callees.queryParams.id = id;
       this.getCalleesList();
@@ -790,7 +720,7 @@ export default {
         this.callees.loading = false;
       });
     },
-    wxOpen(id) {
+    wxOpen(id){
       this.wx.show = true;
       this.wx.queryParams.id = id;
       this.getWxList();
@@ -804,32 +734,32 @@ export default {
       });
     },
     openCustomer(id) {
-      this.customerDetailShow = true;
+      this.customerDetailShow=true;
       this.$nextTick(() => {
         this.$refs.customerDetails.getDetails(id);
       })
     },
-    startRoboticFun(id) {
+    startRoboticFun(id){
       startRobotic(id).then(e => {
         this.updateStatusFun();
       })
     },
-    stopRoboticFun(id) {
+    stopRoboticFun(id){
       stopRobotic(id).then(e => {
         this.updateStatusFun();
       })
     },
-    addQwUserTow(row) {
+    addQwUserTow(row){
       this.formOpen.qwUser.push({});
     },
-    addRoboticFun(row) {
+    addRoboticFun(row){
       this.openAdd = true;
-      this.formOpen = {id: row.id, qwUser: []};
+      this.formOpen = {roboticId: row.id, qwUser: []};
     },
-    addQwUser() {
+    addQwUser(){
       this.form.qwUser.push({});
     },
-    removeQwUser(index) {
+    removeQwUser(index){
       this.form.qwUser.splice(index, 1)
     }
   }

+ 0 - 404
src/views/course/push/index.vue

@@ -1,404 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
-      <el-form-item label="营销类型" prop="marketType">
-        <el-select v-model="queryParams.marketType" placeholder="请选择营销推送类别" >
-          <el-option
-            v-for="dict in marketType"
-            :key="dict.dictValue"
-            :label="dict.dictLabel"
-            :value="parseInt(dict.dictValue)"
-          ></el-option>
-        </el-select>
-      </el-form-item>
-      <el-form-item label="状态" prop="status">
-        <el-select style="width: 220px" v-model="queryParams.status" placeholder="请选择状态" clearable size="small">
-          <el-option
-            v-for="dict in statusOptions"
-            :key="dict.dictValue"
-            :label="dict.dictLabel"
-            :value="dict.dictValue"
-          />
-        </el-select>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
-      </el-form-item>
-    </el-form>
-
-    <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
-        <el-button
-          type="primary"
-          plain
-          icon="el-icon-plus"
-          size="mini"
-          @click="handleAdd"
-          v-hasPermi="['push:push:add']"
-        >新增</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="success"
-          plain
-          icon="el-icon-edit"
-          size="mini"
-          :disabled="single"
-          @click="handleUpdate"
-          v-hasPermi="['push:push:edit']"
-        >修改</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="danger"
-          plain
-          icon="el-icon-delete"
-          size="mini"
-          :disabled="multiple"
-          @click="handleDelete"
-          v-hasPermi="['push:push:remove']"
-        >删除</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="warning"
-          plain
-          icon="el-icon-download"
-          size="mini"
-          :loading="exportLoading"
-          @click="handleExport"
-          v-hasPermi="['push:push:export']"
-        >导出</el-button>
-      </el-col>
-      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
-    </el-row>
-
-    <el-table border v-loading="loading" :data="pushList" @selection-change="handleSelectionChange">
-      <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="营销类型" align="center" prop="marketType">
-        <template slot-scope="scope">
-          <dict-tag :options="marketType" :value="scope.row.marketType"/>
-        </template>
-      </el-table-column>
-      <el-table-column label="推送标题" align="center" prop="title" />
-      <el-table-column label="推送内容" align="center" prop="cintent" />
-      <el-table-column label="推送周期" align="center" prop="pushTime">
-        <template slot-scope="scope">
-          {{ scope.row.pushTime/60/60/1000 }}小时一次
-        </template>
-      </el-table-column>
-      <el-table-column label="状态" align="center" prop="status" >
-        <template slot-scope="scope">
-          <el-tag prop="status" v-for="(item, index) in statusOptions"  :type="scope.row.status==1?'success':'danger'"  v-if="scope.row.status==item.dictValue">{{item.dictLabel}}</el-tag>
-        </template>
-      </el-table-column>
-      <el-table-column label="点击跳转地址" align="center" prop="url" />
-      <el-table-column label="附件图片" align="center" prop="imgUrl" width="120">
-        <template slot-scope="scope">
-          <el-popover
-            placement="right"
-            title=""
-            trigger="hover"
-          >
-            <img slot="reference" :src="scope.row.imgUrl" width="100">
-            <img :src="scope.row.imgUrl" style="max-width: 150px;">
-          </el-popover>
-        </template>
-      </el-table-column>
-      <el-table-column label="已推送次数" align="center" prop="pushCount" />
-      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
-        <template slot-scope="scope">
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-edit"
-            @click="handleUpdate(scope.row)"
-            v-hasPermi="['push:push:edit']"
-          >修改</el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-            v-hasPermi="['push:push:remove']"
-          >删除</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-
-    <pagination
-      v-show="total>0"
-      :total="total"
-      :page.sync="queryParams.pageNum"
-      :limit.sync="queryParams.pageSize"
-      @pagination="getList"
-    />
-
-    <!-- 添加或修改营销活动推送对话框 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="营销类型" prop="marketType">
-          <el-select v-model="form.marketType" placeholder="请选择营销推送类别" >
-            <el-option
-              v-for="dict in marketType"
-              :key="dict.dictValue"
-              :label="dict.dictLabel"
-              :value="dict.dictValue"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="推送标题" prop="title">
-          <el-input v-model="form.title" placeholder="请输入推送标题" />
-        </el-form-item>
-        <el-form-item label="推送内容" prop="cintent">
-          <el-input v-model="form.cintent" placeholder="请输入推送内容" />
-        </el-form-item>
-        <!--<el-form-item label="推送时间" prop="pushTime">
-          <el-date-picker clearable size="small"
-            value-format="yyyy-MM-dd HH:mm:ss"
-            v-model="form.pushTime"
-            type="datetime"
-            placeholder="请选择定时推送时间">
-          </el-date-picker>
-        </el-form-item>-->
-        <el-form-item label="推送周期" prop="pushTime">
-          每<el-input-number v-model="form.pushTime"></el-input-number>小时推送一次
-        </el-form-item>
-        <el-form-item label="状态" prop="status">
-          <el-radio-group v-model="form.status">
-            <el-radio
-              v-for="dict in statusOptions"
-              :key="dict.dictValue"
-              :label="dict.dictValue"
-              :value="dict.dictValue">
-              {{dict.dictLabel}}
-            </el-radio>
-          </el-radio-group>
-        </el-form-item>
-        <el-form-item label="跳转地址" prop="url">
-          <el-input v-model="form.url" placeholder="请输入点击通知以后跳转的地址" />
-        </el-form-item>
-        <el-form-item label="附件图片" prop="imgUrl">
-          <Material v-model="imageArr" type="image" :num="3" :width="150" :height="150" />
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">确 定</el-button>
-        <el-button @click="cancel">取 消</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import { listPush, getPush, delPush, addPush, updatePush, exportPush } from "@/api/course/push";
-import Material from '@/components/Material'
-import Treeselect from "@riophae/vue-treeselect";
-import storeProductDetails from "../../components/his/storeProductDetails";
-
-export default {
-  name: "Push",
-  components: {Material},
-  data() {
-    return {
-      imageArr:[],
-      marketType:[],
-      statusOptions:[],
-      // 遮罩层
-      loading: true,
-      // 导出遮罩层
-      exportLoading: false,
-      // 选中数组
-      ids: [],
-      // 非单个禁用
-      single: true,
-      // 非多个禁用
-      multiple: true,
-      // 显示搜索条件
-      showSearch: true,
-      // 总条数
-      total: 0,
-      // 营销活动推送表格数据
-      pushList: [],
-      // 弹出层标题
-      title: "",
-      // 是否显示弹出层
-      open: false,
-      // 查询参数
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        marketType: null,
-        title: null,
-        cintent: null,
-        pushTime: null,
-        status: null,
-        url: null,
-        pushCount: null
-      },
-      // 表单参数
-      form: {},
-      // 表单校验
-      rules: {
-        marketType: [
-          { required: true, message: "推送营销活动类型不能为空", trigger: "change" }
-        ],
-        title: [
-          { required: true, message: "推送标题不能为空", trigger: "blur" }
-        ],
-        cintent: [
-          { required: true, message: "推送内容不能为空", trigger: "blur" }
-        ],
-        pushTime: [
-          { required: true, message: "定时推送时间不能为空", trigger: "blur"},
-          { type: 'number', min: 1,message: '定时推送时间必须是大于0的整数',trigger: 'blur',}
-        ],
-        status: [
-          { required: true, message: "是否启用1:启用   0:禁用不能为空", trigger: "blur" }
-        ],
-      }
-    };
-  },
-  watch: {
-    imageArr: function(val) {
-      this.form.imgUrl = val.join(',')
-    }
-  },
-  created() {
-    this.getDicts("course_push_type").then(response => {
-      this.marketType = response.data;
-    });
-    this.getDicts("sys_company_status").then((response) => {
-      this.statusOptions = response.data;
-      console.log(typeof this.statusOptions[1].dictValue)
-    });
-    this.getList();
-  },
-  methods: {
-    /** 查询营销活动推送列表 */
-    getList() {
-      this.loading = true;
-      listPush(this.queryParams).then(response => {
-        this.pushList = response.rows;
-
-        //this.pushList.imgUrl = this.pushList.imgUrl.split(",")[0]
-        console.log(this.pushList)
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-    // 取消按钮
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 表单重置
-    reset() {
-      this.form = {
-        id: null,
-        marketType: null,
-        title: null,
-        cintent: null,
-        pushTime: null,
-        status: 0,
-        url: null,
-        createTime: null,
-        updateTime: null,
-        pushCount: null
-      };
-      this.imageArr=[];
-      this.resetForm("form");
-    },
-    /** 搜索按钮操作 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 重置按钮操作 */
-    resetQuery() {
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 多选框选中数据
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.id)
-      this.single = selection.length!==1
-      this.multiple = !selection.length
-    },
-    /** 新增按钮操作 */
-    handleAdd() {
-      this.reset();
-      this.form.status = "1"
-      this.open = true;
-      this.title = "添加营销活动推送";
-    },
-    /** 修改按钮操作 */
-    handleUpdate(row) {
-      this.reset();
-      const id = row.id || this.ids
-      getPush(id).then(response => {
-        this.form = response.data;
-        if(this.form.imgUrl!=null){
-          this.imageArr=this.form.imgUrl.split(",");
-        }
-        this.form.pushTime = this.form.pushTime/60/60/1000
-        this.open = true;
-        this.title = "修改营销活动推送";
-      });
-    },
-    /** 提交按钮 */
-    submitForm() {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          this.form.pushTime *= 60*60*1000
-          console.log(this.form)
-          console.log(this.imageArr)
-          if (this.form.id != null) {
-            updatePush(this.form).then(response => {
-              this.msgSuccess("修改成功");
-              this.open = false;
-              this.getList();
-            });
-          } else {
-            addPush(this.form).then(response => {
-              this.msgSuccess("新增成功");
-              this.open = false;
-              this.getList();
-            });
-          }
-        }
-      });
-    },
-    /** 删除按钮操作 */
-    handleDelete(row) {
-      const ids = row.id || this.ids;
-      this.$confirm('是否确认删除营销活动推送编号为"' + ids + '"的数据项?', "警告", {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "warning"
-        }).then(function() {
-          return delPush(ids);
-        }).then(() => {
-          this.getList();
-          this.msgSuccess("删除成功");
-        }).catch(() => {});
-    },
-    /** 导出按钮操作 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm('是否确认导出所有营销活动推送数据项?', "警告", {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "warning"
-        }).then(() => {
-          this.exportLoading = true;
-          return exportPush(queryParams);
-        }).then(response => {
-          this.download(response.msg);
-          this.exportLoading = false;
-        }).catch(() => {});
-    }
-  }
-};
-</script>

+ 16 - 34
src/views/course/userCourse/index.vue

@@ -136,18 +136,18 @@
           </el-popover>
         </template>
       </el-table-column>
-      <el-table-column label="小封面" align="center" prop="secondImg" width="100">
-        <template slot-scope="scope">
-          <el-popover
-            placement="right"
-            title=""
-            trigger="hover"
-          >
-            <img slot="reference" :src="scope.row.secondImg" width="50">
-            <img :src="scope.row.secondImg" style="max-width: 100px;">
-          </el-popover>
-        </template>
-      </el-table-column>
+<!--      <el-table-column label="小封面" align="center" prop="secondImg" width="100">-->
+<!--        <template slot-scope="scope">-->
+<!--          <el-popover-->
+<!--            placement="right"-->
+<!--            title=""-->
+<!--            trigger="hover"-->
+<!--          >-->
+<!--            <img slot="reference" :src="scope.row.secondImg" width="50">-->
+<!--            <img :src="scope.row.secondImg" style="max-width: 100px;">-->
+<!--          </el-popover>-->
+<!--        </template>-->
+<!--      </el-table-column>-->
       <el-table-column label="课堂名称" align="center" show-overflow-tooltip prop="courseName" />
       <el-table-column label="排序" align="center" prop="sort" />
       <el-table-column label="分类名称" align="center" prop="cateName" />
@@ -270,9 +270,9 @@
         <el-form-item label="课程封面" prop="imgUrl">
           <ImageUpload v-model="form.imgUrl" type="image" :num="10" :width="150" :height="150" />
         </el-form-item>
-        <el-form-item label="小封面" prop="imgUrl">
-          <ImageUpload v-model="form.secondImg" type="image" :num="10" :width="150" :height="150" />
-        </el-form-item>
+<!--        <el-form-item label="小封面" prop="imgUrl">-->
+<!--          <ImageUpload v-model="form.secondImg" type="image" :num="10" :width="150" :height="150" />-->
+<!--        </el-form-item>-->
         <el-row>
           <el-col :span="12">
             <el-form-item label="所属项目" prop="project">
@@ -523,24 +523,12 @@ export default {
       form: {},
       // 表单校验
       rules: {
-        talentId: [
-          { required: true, message: "归属达人不能为空", trigger: "change" }
-        ],
-        cateId: [
-          { required: true, message: "分类不能为空", trigger: "change" }
-        ],
-        subCateId: [
-          { required: true, message: "子分类不能为空", trigger: "change" }
-        ],
         courseName: [
           { required: true, message: "课堂名称不能为空", trigger: "blur" }
         ],
         imgUrl: [
           { required: true, message: "封面图片不能为空", trigger: "blur" }
         ],
-        secondImg: [
-          { required: true, message: "小封面图片不能为空", trigger: "blur" }
-        ],
         isTui: [
           { required: true, message: "是否推荐不能为空", trigger: "blur" }
         ],
@@ -571,12 +559,6 @@ export default {
         isIntegral: [
           { required: true, message: "是否允许积分兑换不能为空", trigger: "blur" }
         ],
-        price: [
-          { required: true, message: "原价不能为空", trigger: "blur" }
-        ],
-        sellPrice: [
-          { required: true, message: "售价不能为空", trigger: "blur" }
-        ],
         isShow: [
           { required: true, message: "上架状态不能为空", trigger: "blur" }
         ],
@@ -710,7 +692,7 @@ export default {
         subCateId:null,
         title: null,
         imgUrl: null,
-        secondImg:null,
+        // secondImg:null,
         userId: null,
         sort: null,
         createTime: null,

+ 16 - 51
src/views/his/statistics/ad.vue

@@ -6,16 +6,6 @@
 
 
       <el-form class="search-form" :inline="true" label-width="90px">
-        <el-form-item label="时间" prop="time">
-          <el-date-picker
-            v-model="queryParams.time"
-            type="daterange"
-            range-separator="至"
-            value-format="yyyy-MM-dd"
-            start-placeholder="开始日期"
-            end-placeholder="结束日期">
-          </el-date-picker>
-        </el-form-item>
         <el-form-item label="定向维度">
           <el-select v-model="queryParams.reportType" placeholder="请选择维度">
             <el-option
@@ -50,6 +40,16 @@
             </el-option>
           </el-select>
         </el-form-item>
+        <el-form-item label="时间" prop="time">
+          <el-date-picker
+            v-model="queryParams.time"
+            type="daterange"
+            range-separator="至"
+            value-format="yyyy-MM-dd"
+            start-placeholder="开始日期"
+            end-placeholder="结束日期">
+          </el-date-picker>
+        </el-form-item>
         <el-form-item>
           <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
           <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
@@ -61,10 +61,10 @@
 <!--               style="float: right; margin-bottom: 15px; margin-right: 40px;">导出-->
 <!--    </el-button>-->
     <div class="table-box" style="margin: 0 auto">
-      <el-table :data="dataList" border v-loading="loading" style="width: 100%" height="500">
+      <el-table :data="dataList" border style="width: 100%" height="550">
         <el-table-column label="地区" v-if="queryParams.reportType == 2324048">
           <template slot-scope="scope">
-            {{scope.row.prov.provinceName}}
+            {{scope.row.prov.provinceName}} - {{scope.row.city.cityName}}
           </template>
         </el-table-column>
         <el-table-column label="性别" v-if="queryParams.reportType == 2503330">
@@ -82,22 +82,9 @@
             {{scope.row.showWord}} - {{scope.row.feedWord}}
           </template>
         </el-table-column>
-        <el-table-column prop="videoId" label="视频ID" v-if="queryParams.reportType == 114718" />
-        <el-table-column prop="videoNameStatus" label="视频名称" v-if="queryParams.reportType == 114718" />
-        <el-table-column label="视频" v-if="queryParams.reportType == 114718" width="150">
-          <template slot-scope="scope">
-            <a :href="scope.row.videoInfo.videoURL" target="_blank">
-              <el-image :src="scope.row.videoInfo.videoThumbnail" />
-            </a>
-          </template>
-        </el-table-column>
-        <el-table-column prop="imageId" label="图片ID" v-if="queryParams.reportType == 2094817" />
-        <el-table-column label="图片" v-if="queryParams.reportType == 2094817" width="150">
-          <template slot-scope="scope">
-              <el-image :src="scope.row.imageUrl" :preview-src-list="[scope.row.imageUrl]" />
-          </template>
-        </el-table-column>
         <el-table-column prop="date" label="日期" />
+        <el-table-column prop="campaignName" label="计划名称" />
+        <el-table-column prop="adGroupName" label="推广单元" />
         <el-table-column prop="impression" label="展现" />
         <el-table-column prop="click" label="点击" />
         <el-table-column prop="cost" label="消费" />
@@ -108,18 +95,7 @@
         </el-table-column>
         <el-table-column prop="cpc" label="平均点击价格" />
         <el-table-column prop="cpm" label="千次展现消费" />
-        <el-table-column prop="weixinFollowSuccessConversions" label="微信加粉成功" />
-        <el-table-column prop="weixinFollowSuccessConversionsCost" label="微信加粉成本" />
-        <el-table-column prop="feedOCPCConversionsDetail133" label="直播间微信加粉成功" />
-        <el-table-column prop="feedOCPCConversionsDetail133Cost" label="直播间微信加粉成本" />
       </el-table>
-      <pagination
-        v-show="total>0"
-        :total="total"
-        :page.sync="queryParams.page"
-        :limit.sync="queryParams.rowCount"
-        @pagination="getReportData"
-      />
     </div>
   </div>
 
@@ -141,8 +117,6 @@ export default {
   data() {
     return {
       deptOptions: [],
-      loading: false,
-      total: 0,
       exportLoading: false,
       deptId: null,
       queryParams: {
@@ -151,8 +125,6 @@ export default {
         startDate: null,
         endDate: null,
         time: '',
-        page: 0,
-        rowCount: 10,
       },
       accountList: [],
       users: [],
@@ -214,12 +186,6 @@ export default {
       }, {
         value: 2532512,
         label: '意图词'
-      }, {
-        value: 114718,
-        label: '视频报告'
-      }, {
-        value: 2094817,
-        label: '图片报告'
       }],
     };
   },
@@ -303,11 +269,10 @@ export default {
       }
       this.queryParams.startDate = this.queryParams.time[0];
       this.queryParams.endDate = this.queryParams.time[1];
-      this.loading = true;
       getReportData(this.queryParams).then(e => {
+        this.dateList = e.dataList;
+        this.tableList = e.tableList;
         this.dataList = e.data;
-        this.loading = false;
-        this.total = e.total;
       });
     },
 

+ 0 - 497
src/views/his/statistics/adBdStatic.vue

@@ -1,497 +0,0 @@
-<template>
-  <div class="app-container">
-    <div class="app-content">
-
-      <div class="title" style="display: flex; justify-content: center; align-items: center;">广告转化统计</div>
-
-
-      <el-form class="search-form" :inline="true" label-width="90px">
-        <el-form-item label="统计时间">
-          <el-select v-model="queryParams.type" clearable placeholder="请选择日期">
-            <el-option
-              v-for="item in options"
-              :key="item.value"
-              :label="item.label"
-              :value="item.value">
-            </el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="统计类型">
-          <el-select v-model="queryParams.tableType" placeholder="请选择类型">
-            <el-option
-              v-for="item in options2"
-              :key="item.value"
-              :label="item.label"
-              :value="item.value">
-            </el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="统计维度">
-          <el-select v-model="queryParams.staticType" placeholder="请选择维度">
-            <el-option
-              v-for="item in options3"
-              :key="item.value"
-              :label="item.label"
-              :value="item.value">
-            </el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="选择部门" prop="userId">
-            <treeselect style="width: 217px" :clearable="false" clearable v-model="deptId" :options="deptOptions" :show-count="true"
-                        placeholder="请选择归属部门"/>
-        </el-form-item>
-        <el-form-item label="选择员工" prop="userId">
-          <el-select v-model="queryParams.userId" filterable clearable @change="accountListFun" placeholder="请选择员工">
-            <el-option
-              v-for="item in users"
-              :key="item.userId"
-              :label="item.nickName"
-              :value="item.userId">
-            </el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="推广账户" prop="accountId">
-          <el-select v-model="queryParams.accountId" @change="planLoad" filterable clearable placeholder="请选择推广账户">
-            <el-option
-              v-for="item in accountList"
-              :key="item.accountId"
-              :label="item.accountName"
-              :value="item.accountId">
-            </el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="计划" prop="pid" v-if="queryParams.accountId" v-loading="pload">
-          <el-select v-model="queryParams.pid" @change="unitLoad" filterable clearable placeholder="请选择计划">
-            <el-option
-              v-for="item in planList"
-              :key="item.campaignFeedId"
-              :label="item.campaignFeedName"
-              :value="item.campaignFeedId">
-            </el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="单元" prop="uid" v-if="queryParams.accountId" v-loading="uload">
-          <el-select v-model="queryParams.uid" @change="creativeLoad" filterable clearable placeholder="请选择单元">
-            <el-option
-              v-for="item in unitList"
-              :key="item.adgroupFeedId"
-              :label="item.adgroupFeedName"
-              :value="item.adgroupFeedId">
-            </el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="创意" prop="aid" v-if="queryParams.accountId" v-loading="aload">
-          <el-select v-model="queryParams.aid" @change="achange" filterable clearable placeholder="请选择创意">
-            <el-option
-              v-for="item in creativeList"
-              :key="item.creativeFeedId"
-              :label="item.creativeFeedName"
-              :value="item.creativeFeedId">
-            </el-option>
-          </el-select>
-        </el-form-item>
-
-        <el-form-item>
-          <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
-          <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
-        </el-form-item>
-      </el-form>
-    </div>
-    <div ref="chartContainer" style="width: 100%; height: 400px;"></div>
-<!--    <el-button class="export" size="small" @click="handleExport"-->
-<!--               style="float: right; margin-bottom: 15px; margin-right: 40px;">导出-->
-<!--    </el-button>-->
-    <div class="table-box" style="margin: 0 auto;width: 80%">
-      <el-table :data="tableList" border style="width: 100%;">
-        <el-table-column prop="direction" :label="queryParams.staticType == 1 ? '地区' : queryParams.staticType == 2 ? '性别' : queryParams.staticType == 3 ? '年龄' : ''" />
-        <el-table-column prop="name" :label="queryParams.tableType == 1 ? '账户' : queryParams.tableType == 2 ? '计划' : queryParams.tableType == 3 ? '单元' : queryParams.tableType == 3 ? '创意' : ''" />
-        <el-table-column prop="nickName" label="员工名称" />
-        <el-table-column prop="total" label="加微量" />
-        <el-table-column prop="reg" label="注册量(转化率)">
-          <template slot-scope="scope">
-            {{scope.row.reg}}({{scope.row.regPri}}%)
-          </template>
-        </el-table-column>
-        <el-table-column prop="finis" label="完课量(转化率)">
-          <template slot-scope="scope">
-            {{scope.row.finis}}({{scope.row.finisPri}}%)
-          </template>
-        </el-table-column>
-        <el-table-column prop="order" label="订单转化数(转化率)">
-          <template slot-scope="scope">
-            {{scope.row.order}}({{scope.row.orderPri}}%)
-          </template>
-        </el-table-column>
-      </el-table>
-    </div>
-  </div>
-
-</template>
-
-<script>
-import {listStore} from "@/api/his/storeProduct";
-import echarts from 'echarts'
-import {orderChartData, storeOrderChart, storeOrderChartStore, storeExport} from "@/api/his/index";
-import {conversionStatistics} from "@/api/baidu/statistics";
-import {getUserListByDeptId} from "@/api/company/companyUser";
-import {listAll, listAllPlan, listAllUnit, listAllCreative} from "@/api/baidu/BdAccount";
-import Treeselect from "@riophae/vue-treeselect";
-import {treeselect} from "@/api/company/companyDept";
-import "@riophae/vue-treeselect/dist/vue-treeselect.css";
-
-export default {
-  components: {Treeselect},
-  data() {
-    return {
-      deptOptions: [],
-      exportLoading: false,
-      deptId: null,
-      queryParams: {
-        type: null,
-        tableType: "1",
-        staticType: "1",
-        userId: undefined,
-        storeId: null,
-      },
-      accountList: [],
-      users: [],
-      dateList: [],
-      tableList: [],
-      storeOPtions: [],
-      planList: [],
-      unitList: [],
-      creativeList: [],
-      chart: null,
-      pload: false,
-      uload: false,
-      aload: false,
-      dataList: [],
-      options: [{
-        value: '1',
-        label: '今天'
-      }, {
-        value: '2',
-        label: '昨天'
-      }, {
-        value: '3',
-        label: '本周'
-      }, {
-        value: '4',
-        label: '上周'
-      }, {
-        value: '5',
-        label: '本月'
-      }
-        , {
-          value: '6',
-          label: '上月'
-        },
-        {
-          value: '7',
-          label: '本季度'
-        },
-        {
-          value: '8',
-          label: '上季度'
-        }
-        , {
-          value: '9',
-          label: '本年'
-        }
-        , {
-          value: '10',
-          label: '去年'
-        }],
-      options2: [{
-        value: '1',
-        label: '账户'
-      }, {
-        value: '2',
-        label: '计划'
-      }, {
-        value: '3',
-        label: '单元'
-      }, {
-        value: '4',
-        label: '创意'
-      }],
-      options3: [{
-        value: '1',
-        label: '地区'
-      }, {
-        value: '2',
-        label: '性别'
-      }, {
-        value: '3',
-        label: '年龄'
-      }],
-    };
-  },
-  created() {
-    listStore().then(response => {
-      this.storeOPtions = response.rows;
-    });
-  },
-  mounted() {
-    this.chart = echarts.init(this.$refs.chartContainer, 'macarons');
-    this.chart.on('mouseout', this.hideTooltip);
-    this.updateChart();
-    this.conversionStatistics();
-    this.getTreeselect();
-    this.accountListFun();
-  },
-  watch: {
-    dataList() {
-      this.updateChart();
-    },
-    'deptId': 'currDeptChange'
-  },
-  methods: {
-    planLoad(){
-      this.queryParams.pid = null;
-      this.queryParams.uid = null;
-      this.queryParams.aid = null;
-      this.pload = true;
-      this.uload = true;
-      this.aload = true;
-      let data = {accountId: this.queryParams.accountId};
-      listAllPlan(data).then(e => {
-        this.planList = e.data;
-        this.pload = false;
-        this.uload = false;
-        this.aload = false;
-      })
-      this.unitLoad();
-    },
-    unitLoad(){
-      this.queryParams.uid = null;
-      this.queryParams.aid = null;
-      this.uload = true;
-      this.aload = true;
-      let data = {accountId: this.queryParams.accountId, campaignFeedId: this.queryParams.pid};
-      listAllUnit(data).then(e => {
-        this.unitList = e.data;
-        this.uload = false;
-        this.aload = false;
-      })
-      this.creativeLoad();
-    },
-    achange(){
-      this.$forceUpdate()
-    },
-    creativeLoad(){
-      this.queryParams.aid = null;
-      this.aload = true;
-      let data = {accountId: this.queryParams.accountId, adgroupFeedId: this.queryParams.uid};
-      listAllCreative(data).then(e => {
-        this.creativeList = e.data;
-        this.aload = false;
-      })
-    },
-    /** 导出按钮操作 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm('是否确认导出所有数据?', "警告", {
-        confirmButtonText: "确定",
-        cancelButtonText: "取消",
-        type: "warning"
-      }).then(() => {
-        this.exportLoading = true;
-        return storeExport(queryParams);
-      }).then(response => {
-        this.download(response.msg);
-        this.exportLoading = false;
-      }).catch(() => {
-      });
-    },
-    /** 查询部门下拉树结构 */
-    getTreeselect() {
-      treeselect().then((response) => {
-        this.deptOptions = response.data;
-        if (response.data != null && response.data.length > 0) {
-          this.dept.deptId = response.data[0].id;
-        }
-      });
-    },
-    currDeptChange(val) {
-      this.deptId = val;
-      this.getUserListByDeptId();
-    },
-    getUserListByDeptId() {
-      this.queryParams.userId = undefined;
-      var data = {deptId: this.deptId};
-      getUserListByDeptId(data).then(response => {
-        this.users = response.data;
-      });
-    },
-    accountListFun() {
-      listAll({userId: this.queryParams.userId}).then(e => {
-        this.accountList = e.data;
-      })
-    },
-    handleQuery() {
-      this.conversionStatistics();
-    },
-    /** 重置按钮操作 */
-    resetQuery() {
-      this.queryParams = {
-        type: null,
-        storeId: null,
-      }
-      this.conversionStatistics()
-    },
-    conversionStatistics() {
-      conversionStatistics(this.queryParams).then(e => {
-        this.dateList = e.dataList;
-        this.tableList = e.tableList;
-        this.dataList = e.data;
-      });
-    },
-
-
-    formatter(params) {
-      const item1 = params[0].value;
-      const item2 = params[1].value;
-      const item3 = params[2].value;
-      const item4 = params[3].value;
-      return `
-              <div>
-                <div>日期:${params[0].axisValue}</div>
-                <div>加微量:${item1}</div>
-                <div>注册量:${item2}(${item2 == 0 || item1 == 0 ? "0" :((item2 / item1) * 100).toFixed(2)}%)</div>
-                <div>完课量:${item3}(${item3 == 0 || item2 == 0 ? "0" :((item3 / item2) * 100).toFixed(2)}%)</div>
-                <div>订单转化数:${item4}(${item4 == 0 || item2 == 0 ? "0" :((item4 / item2) * 100).toFixed(2)}%)</div>
-              </div>
-            `;
-    },
-
-    updateChart() {
-      const option = {
-        xAxis: {
-          type: 'category',
-          data: this.dateList,
-        },
-        yAxis: {
-          type: 'value',
-        },
-        tooltip: {
-          trigger: 'axis',
-          formatter: this.formatter,
-          axisPointer: {
-            type: "line",
-            lineStyle: {
-              color: "rgba(227, 242, 252, 0.39)",
-              width: 40,
-              type: "solid",
-            },
-            z: 0,  //注意要设置层级,不然会在覆盖在柱子前面,设置为0就在柱子后面显示了。
-          },
-        },
-        series: [
-          {
-            name: '加微量',
-            type: 'line',
-            barWidth: '40%',
-            label: {
-              show: true,
-              position: 'top',
-            },
-            data: this.dataList[0],
-          },
-          {
-            name: '注册量',
-            type: 'line',
-            barWidth: '40%',
-            label: {
-              show: true,
-              position: 'top',
-            },
-            data: this.dataList[1],
-          },
-          {
-            name: '完课量',
-            type: 'line',
-            barWidth: '40%',
-            label: {
-              show: true,
-              position: 'top',
-            },
-            data: this.dataList[2],
-          },
-          {
-            name: '下单量',
-            type: 'line',
-            barWidth: '40%',
-            label: {
-              show: true,
-              position: 'top',
-            },
-            data: this.dataList[3],
-          },
-        ],
-
-
-      };
-      this.chart.setOption(option);
-    },
-
-    hideTooltip() {
-      this.chart.dispatchAction({
-        type: 'hideTip',
-      });
-    },
-  },
-};
-</script>
-<style>
-.title {
-  padding: 20px 30px 0px 30px;
-  font-size: 18px;
-  font-weight: bold;
-  color: black;
-
-}
-
-.search-form {
-  margin: 20px 30px 0px 30px;
-}
-
-.echart-box {
-  margin: 0 auto;
-  text-align: center;
-}
-
-.el-select {
-  margin: 5px 10px;
-}
-
-.table-box {
-  margin-top: 15px;
-
-  .export {
-    float: right;
-    margin: 10px 0px;
-  }
-}
-
-.app-container {
-  border: 1px solid #e6e6e6;
-  padding: 12px;
-
-
-}
-
-.app-content {
-  background-color: white;
-
-
-}
-
-.data-box {
-  padding: 30px;
-  background-color: rgb(255, 255, 255);
-  height: 100%;
-
-
-}
-</style>

+ 2 - 2
src/views/his/storeProduct/index.vue

@@ -840,8 +840,8 @@ export default {
        ],
       isDrug: [
          { required: true, message: "不能为空", trigger: "blur" }
-       ],
-
+       ], 
+       
       }
     };
   },

+ 1 - 10
src/views/live/live/index.vue

@@ -103,13 +103,6 @@
             @click="handleDelete(scope.row)"
             v-hasPermi="['live:live:remove']"
           >删除</el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-monitor"
-            @click="handleManage(scope.row)"
-            v-hasPermi="['live:live:remove']"
-          >管理</el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -188,6 +181,7 @@
 <script>
 import { listLive, getLive, delLive, addLive, updateLive, exportLive } from "@/api/live/live";
 import Editor from '@/components/Editor/wang';
+import articleDetails from "@/views/components/his/doctorArticleDetails.vue";
 
 export default {
   name: "Live",
@@ -426,9 +420,6 @@ export default {
           this.msgSuccess("删除成功");
         }).catch(() => {});
     },
-    handleManage(row) {
-      this.$router.push('/live/liveConsole/' + row.liveId)
-    },
     /** 导出按钮操作 */
     handleExport() {
       const queryParams = this.queryParams;

+ 0 - 355
src/views/live/liveConsole/index.vue

@@ -1,355 +0,0 @@
-<template>
-  <!-- 直播中控台 start -->
-  <el-row type="flex" justify="center" class="live-console" :gutter="10">
-
-    <!-- 用户列表 start -->
-    <el-col class="live-console-col" :span="5">
-      <el-tabs class="live-console-tab-left" v-model="tabLeft.activeName" @tab-click="handleClick">
-        <el-tab-pane :label="onlineLabel" name="online">
-          <el-scrollbar ref="manageLeftRef" style="height: 800px; width: 100%;">
-            <el-row style="margin-top: 10px" type="flex" align="middle" v-for="u in onlineUserList">
-              <el-col :span="5"><el-avatar :src="u.avatar"></el-avatar></el-col>
-              <el-col :span="12" :offset="2">{{ u.nickName }}</el-col>
-              <el-col :span="3" >
-                <el-switch
-                  v-model="u.msgStatus"
-                  :active-value="0"
-                  :inactive-value="1"
-                  active-color="#13ce66"
-                  inactive-color="#ff4949">
-                </el-switch>
-              </el-col>
-            </el-row>
-          </el-scrollbar>
-        </el-tab-pane>
-        <el-tab-pane :label="offlineLabel" name="offline">
-          <el-scrollbar ref="manageLeftRef" style="height: 100%; width: 100%;">
-            <el-row style="margin-top: 10px" type="flex" align="middle" v-for="u in offlineUserList">
-              <el-col :span="5"><el-avatar :src="u.avatar"></el-avatar></el-col>
-              <el-col :span="12" :offset="2">{{ u.nickName }}</el-col>
-              <el-col :span="3" >
-                <el-switch
-                  v-model="u.msgStatus"
-                  :active-value="0"
-                  :inactive-value="1"
-                  active-color="#13ce66"
-                  inactive-color="#ff4949">
-                </el-switch>
-              </el-col>
-            </el-row>
-          </el-scrollbar>
-        </el-tab-pane>
-        <el-tab-pane :label="silencedUserLabel" name="silenced">
-          <el-scrollbar ref="manageLeftRef" style="height: 100%; width: 100%;">
-            <el-row style="margin-top: 10px" type="flex" align="middle" v-for="u in silencedUserList">
-              <el-col :span="5"><el-avatar :src="u.avatar"></el-avatar></el-col>
-              <el-col :span="12" :offset="2">{{ u.nickName }}</el-col>
-              <el-col :span="3" >
-                <el-switch
-                  v-model="u.msgStatus"
-                  :active-value="0"
-                  :inactive-value="1"
-                  active-color="#13ce66"
-                  inactive-color="#ff4949">
-                </el-switch>
-              </el-col>
-            </el-row>
-          </el-scrollbar>
-        </el-tab-pane>
-      </el-tabs>
-    </el-col>
-    <!-- 用户列表 end -->
-
-    <!-- 直播/视频 start -->
-    <el-col class="live-console-col" :span="10">
-      <video controls autoplay :src="this.liveVideo.videoUrl" width="100%"></video>
-    </el-col>
-    <!-- 直播/视频 end -->
-
-    <!-- 聊天 start -->
-    <el-col class="live-console-col" :span="5">
-      <el-tabs class="live-console-tab-right" v-model="tabRight.activeName" @tab-click="handleClick">
-        <el-tab-pane label="聊天" name="talk">
-          <el-scrollbar style="height: 500px; width: 300px;" ref="manageRightRef">
-            <el-row v-for="m in msgList">
-              <el-row style="margin-top: 10px" type="flex" align="top">
-                <el-col :span="3" :offset="1"><el-avatar :src="m.avatar"/></el-col>
-                <el-col :span="15">
-                  <el-row>
-                    <el-col>{{ m.nickName }}</el-col>
-                    <el-col>{{ m.msg }}</el-col>
-                  </el-row>
-                </el-col>
-              </el-row>
-            </el-row>
-          </el-scrollbar>
-
-          <!-- 消息输入区域 -->
-          <div class="chat-input">
-            <el-input
-              v-model="newMsg"
-              placeholder="请输入消息..."
-              @keyup.enter.native="sendMessage"
-              clearable
-            ></el-input>
-            <el-button type="primary" @click="sendMessage">发送</el-button>
-          </div>
-        </el-tab-pane>
-      </el-tabs>
-    </el-col>
-    <!-- 聊天 end -->
-  </el-row>
-  <!-- 直播中控台  end -->
-</template>
-
-<script>
-import { changeUserStatus, watchUserList } from '@/api/live/liveWatchUser'
-import { getLiveVideoByLiveId } from '@/api/live/liveVideo'
-import { listLiveMsg } from '@/api/live/liveMsg'
-import { LiveWS } from '@/utils/webSocket'
-
-export default {
-  name: "LiveConsole",
-  data() {
-    return {
-      tabLeft: {
-        activeName: "online",
-      },
-      tabRight: {
-        activeName: "talk",
-      },
-      liveVideo: {},
-      socket: null,
-      userParams:{
-        pageNum: 1,
-        pageSize: 10,
-        liveId: null
-      },
-      msgParams: {
-        pageNum: 1,
-        pageSize: 10,
-        liveId: null
-      },
-      userList: [],
-      msgList: [],
-      newMsg: ''
-    }
-  },
-  created() {
-    this.getLiveVideo()
-    this.getList()
-    this.connectWebSocket()
-  },
-  computed: {
-    liveId() {
-      return this.$route.params.liveId;
-    },
-    userId() {
-      return this.$store.state.user.user.userId
-    },
-    onlineUserList() {
-      return this.userList.filter(u => u.online === 0)
-    },
-    onlineLabel() {
-      if (this.onlineUserList.length > 0) {
-        return '在线(' + this.onlineUserList.length + ')'
-      }
-      return '在线'
-    },
-    offlineUserList() {
-      return this.userList.filter(u => u.online === 1)
-    },
-    offlineLabel() {
-      if (this.offlineUserList.length > 0) {
-        return '离线(' + this.offlineUserList.length + ')'
-      }
-      return '离线'
-    },
-    silencedUserList() {
-      return this.userList.filter(u => u.msgStatus === 1)
-    },
-    silencedUserLabel() {
-      if (this.silencedUserList.length > 0) {
-        return '禁言(' + this.silencedUserList.length + ')'
-      }
-      return '禁言'
-    }
-  },
-  methods: {
-    handleClick(tab) {
-      console.log("click",tab.name)
-      console.log("liveId", this.liveId)
-    },
-    getLiveVideo() {
-      getLiveVideoByLiveId(this.liveId).then(res => {
-        this.liveVideo = res.data
-      })
-    },
-    getList() {
-      this.resetParams()
-      this.loadUserList()
-      this.loadMsgList()
-    },
-    resetParams() {
-      this.userList= []
-      this.userParams = {
-        pageNum: 1,
-        pageSize: 10,
-        liveId: this.liveId
-      }
-      this.msgList = []
-      this.msgParams = {
-        pageNum: 1,
-        pageSize: 10,
-        liveId: this.liveId
-      }
-    },
-    loadUserList() {
-      // 直播间用户
-      watchUserList({
-        liveId: this.liveId,
-        pageNum: this.userParams.pageNum,
-        pageSize: this.userParams.pageSize
-      }).then(response => {
-        let {rows,total} = response;
-        this.userParams.pageNum = (this.userParams.pageNum - 1) * this.userParams.pageSize;
-        rows.forEach(row => {
-          if (!this.userList.some(u => u.userId === row.userId)) {
-            this.userList.push(row)
-          }
-        })
-
-        // 没加载完继续加载
-        if (this.userList.length < total) {
-          this.loadUserList()
-        }
-      })
-    },
-    loadMsgList() {
-      // 直播间消息
-      listLiveMsg({
-        liveId:this.liveId,
-        pageNum: this.msgParams.pageNum,
-        pageSize: this.msgParams.pageSize
-      }).then(response => {
-          let {rows,total} = response;
-          console.log(rows);
-          this.msgParams.pageNum = (this.msgParams.pageNum - 1) * this.msgParams.pageSize;
-          rows.forEach(row => {
-            if (!this.msgList.some(m => m.msgId === row.msgId)) {
-              this.msgList.push(row)
-
-              // 移动到底部
-              this.$nextTick(() => {
-                setTimeout(() => {
-                  this.$refs.manageRightRef.wrap.scrollTop = this.$refs.manageRightRef.wrap.scrollHeight - this.$refs.manageRightRef.wrap.clientHeight
-                }, 200)
-              })
-            }
-          })
-
-          // 没加载完继续加载
-          if (this.msgList.length < total) {
-            this.loadMsgList()
-          }
-        })
-
-      // 添加滚动监听
-      this.$nextTick(() => {
-        this.$refs.manageRightRef.wrap.addEventListener("scroll", this.manageRightScroll)
-      })
-    },
-    manageRightScroll() {
-      let max = this.$refs.manageRightRef.wrap.scrollHeight - this.$refs.manageRightRef.wrap.clientHeight
-      let current = this.$refs.manageRightRef.wrap.scrollTop
-      console.log("manageRightMax", max);
-      console.log("manageRight", current)
-    },
-    changeUserState(u) {
-      // 还原状态
-      u.msgStatus = u.msgStatus === 0 ? 1 : 0
-      // 修改状态
-      changeUserStatus({liveId: u.liveId, userId: u.userId}).then(response => {
-        let { code } = response;
-        if (200 === code) {
-          u.msgStatus = u.msgStatus === 0 ? 1 : 0
-          let msg = u.msgStatus === 0 ? "已解禁" : "已禁言"
-          this.msgSuccess(msg);
-          return
-        }
-        this.msgError("操作失败");
-      })
-    },
-    connectWebSocket() {
-      let socket = new LiveWS('ws://localhost:7114/app/webSocket', this.liveId, this.userId);
-      socket.ws.onmessage = (e) => {
-        this.handleWsMessage(e)
-      }
-      this.socket = socket
-    },
-    handleWsMessage(event) {
-      console.log(event.data);
-    },
-    sendMessage() {
-      console.log(this.newMsg);
-      // 发送前简单校验
-      if (this.newMsg.trim() === '') {
-        return;
-      }
-
-      this.msgList.push({
-        msg: this.newMsg,
-        liveId: this.liveId,
-        userId: this.userId,
-        avatar: 'https://thirdwx.qlogo.cn/mmopen/vi_32/Q3auHgzwzM4Rv7nYYRvbQcJD9OogfiaMWDj8LTiceZ5J3Bm6Ph9pIiac9MVcwdfwPUI9XQ50ibo4TFp0ZHjgzLH6dw/132',
-        nickName: '测试123123'
-      })
-
-      this.newMsg = '';
-      this.$nextTick(() => {
-        // 新消息加入后自动滚动到底部
-        if (this.$refs.manageRightRef) {
-          this.$refs.manageRightRef.update();
-          const scrollDom = this.$refs.manageRightRef.$el.querySelector('.el-scrollbar__wrap');
-          scrollDom.scrollTop = scrollDom.scrollHeight;
-        }
-      });
-    }
-  },
-  destroyed() {
-    this.socket?.close()
-  }
-}
-</script>
-
-<style scoped>
-  .live-console {
-    width: 90vw;
-    padding: 10px 0;
-  }
-  .live-console .live-console-col {
-    height: 88vh;
-    margin-left: 5px;
-    padding: 0 10px;
-    background-color: white;
-    border-radius: 4px;
-  }
-  /*隐藏水平滚动条*/
-  ::v-deep .el-scrollbar__wrap {
-    overflow-x: hidden;
-  }
-  /* 消息输入区域 */
-  .chat-input {
-    display: flex;
-    padding: 10px;
-    border-top: 1px solid #ebeef5;
-    background-color: #fff;
-    min-height: 60px;
-  }
-
-  .chat-input .el-input {
-    flex: 1;
-    margin-right: 10px;
-    min-height: 40px;
-  }
-</style>

+ 0 - 769
src/views/live/liveData/index.vue

@@ -1,769 +0,0 @@
-<template>
-  <div class="app-container">
-    <div class="title">近期直播</div>
-    <div class="live-container">
-      <div class="live-card" v-for="live in displayLives" :key="live.id">
-        <!-- 直播状态 -->
-        <div class="status">已结束</div>
-
-        <!-- 直播信息 -->
-        <div class="content">
-          <img :src="live.image" alt="直播封面" class="cover-image" />
-          <div class="info">
-            <h3 class="live-title">{{ live.title }}</h3>
-            <p class="time">开播时间: {{ live.time }}</p>
-          </div>
-        </div>
-
-        <!-- 直播数据 -->
-        <div class="stats">
-          <div class="stat-item">
-            <p class="label">直播间浏览量</p>
-            <p class="value">{{ live.views }}</p>
-          </div>
-          <div class="stat-item">
-            <p class="label">直播间访客数</p>
-            <p class="value">{{ live.visitors }}</p>
-          </div>
-        </div>
-      </div>
-    </div>
-    <!-- 直播趋势统计 -->
-    <div class="trend-section">
-      <div class="trend-header">
-        <h3>直播趋势</h3>
-        <div class="filter-container">
-        <!-- 时间范围选择(下拉框) -->
-          <span class="filter-label">时间筛选:</span>
-          <el-select v-model="selectedTimeRange" placeholder="选择时间范围" @change="changeTimeRange" style="width: 180px">
-            <el-option label="自然天" value="day"></el-option>
-            <el-option label="自然周" value="week"></el-option>
-            <el-option label="自然月" value="month"></el-option>
-          </el-select>
-
-          <!-- 日期选择器 -->
-          <!-- 选择日期 -->
-          <el-date-picker
-            v-model="selectedDate"
-            :type="datePickerType"
-            :format="selectedTimeRange === 'week' ? weekRange : dateFormat"
-            :value-format="valueFormat"
-            placeholder="选择日期"
-            style="width: 280px"
-            @change="changeDate"
-          ></el-date-picker>
-        </div>
-      </div>
-
-      <div class="trend-cards">
-        <div
-          class="trend-card"
-          v-for="item in trendData"
-          :key="item.id"
-          :class="{ 'active': selectedMetric.id === item.id }"
-          @click="changeMetric(item)"
-        >
-          <div class="trend-header">
-            <p class="trend-title">{{ item.title }}</p>
-            <el-tooltip class="item" effect="dark" :content="item.tip" placement="top">
-              <i class="el-icon-info"></i>
-            </el-tooltip>
-          </div>
-          <p class="trend-value">{{ item.value }}</p>
-          <p class="trend-change" :class="{ 'up': computedChange(item) > 0, 'down': computedChange(item) < 0 }">
-            {{ changeLabel }} {{ computedChange(item) }}%
-          </p>
-        </div>
-      </div>
-
-      <!-- 直播趋势折线图 -->
-      <div id="liveChart" class="chart"></div>
-    </div>
-    <div class="top10-section">
-      <h3>直播TOP10排行榜</h3>
-      <div class="ranking-container">
-          <!-- 红榜 -->
-          <div class="ranking-section red-rank">
-            <span class="rank-title">红榜</span>
-            <div class="rank-filters">
-              <button
-                v-for="item in redRankTypes"
-                :key="item.value"
-                :class="{ active: selectedRank === item.value }"
-                @click="selectRank(item.value)"
-              >
-                {{ item.label }}
-              </button>
-            </div>
-          </div>
-
-          <!-- 黑榜 -->
-          <div class="ranking-section black-rank">
-            <div class="rank-filters">
-              <button
-                v-for="item in blackRankTypes"
-                :key="item.value"
-                :class="{ active: selectedRank === item.value }"
-                @click="selectRank(item.value)"
-              >
-                {{ item.label }}
-              </button>
-            </div>
-            <span class="rank-title">黑榜</span>
-          </div>
-      </div>
-      <el-table :data="top10List" border style="width: 100%">
-        <el-table-column prop="rank" label="排名" width="80"></el-table-column>
-        <el-table-column prop="name" label="直播名称">
-          <template #default="scope">
-            <div class="live-name">
-              <img :src="scope.row.cover" class="live-cover" alt="封面">
-              <span class="live-title">{{ scope.row.name }}</span>
-            </div>
-          </template>
-        </el-table-column>
-        <el-table-column prop="pv" label="直播间浏览量(PV)"></el-table-column>
-        <el-table-column prop="uv" label="直播间访客数(UV)"></el-table-column>
-        <el-table-column prop="watchPV" label="累计观看人次(PV)"></el-table-column>
-        <el-table-column prop="watchUV" label="累计观看人数(UV)"></el-table-column>
-        <el-table-column prop="avgTime" label="人均观看时长"></el-table-column>
-        <el-table-column prop="maxOnline" label="最高在线人数"></el-table-column>
-      </el-table>
-    </div>
-  </div>
-</template>
-
-
-<script>
-  import * as echarts from "echarts";
-  import { listLive, getLive, delLive, addLive, updateLive, exportLive } from "@/api/live/live";
-  import Editor from '@/components/Editor/wang';
-  import articleDetails from "@/views/components/his/doctorArticleDetails.vue";
-
-  export default {
-    name: "Live",
-    components: { Editor },
-    data() {
-      return {
-        top10List: [
-          {
-            rank: 1,
-            name: "九州年末会员福利专场!",
-            cover:"https://cos.his.cdwjyyh.com/fs/20250304/710ea5b1896749b58438b76baf881d05.jpeg",
-            pv: 88332,
-            uv: 32674,
-            watchPV: 41866,
-            watchUV: 24714,
-            avgTime: "00:13:12",
-            maxOnline: 4317,
-          },
-          {
-            rank: 2,
-            name: "立秋养生大作战",
-            cover:"https://cos.his.cdwjyyh.com/fs/20250304/710ea5b1896749b58438b76baf881d05.jpeg",
-            pv: 55092,
-            uv: 15066,
-            watchPV: 33522,
-            watchUV: 12343,
-            avgTime: "01:18:30",
-            maxOnline: 3160,
-          },
-          {
-            rank: 3,
-            name: "寒露养生大挑战:防寒防燥防疾病",
-            cover:"https://cos.his.cdwjyyh.com/fs/20250304/710ea5b1896749b58438b76baf881d05.jpeg",
-            pv: 36044,
-            uv: 12205,
-            watchPV: 26056,
-            watchUV: 11086,
-            avgTime: "01:16:08",
-            maxOnline: 3232,
-          },
-        ],
-        selectedRank: 'highFlow',
-        redRankTypes: [
-          { label: '高流量', value: 'highFlow' },
-          { label: '高观看', value: 'highView' },
-          { label: '高时长', value: 'highTime' },
-        ],
-        blackRankTypes: [
-          { label: '低时长', value: 'lowTime' },
-          { label: '低观看', value: 'lowView' },
-          { label: '低流量', value: 'lowFlow' },
-        ],
-        chart: null,
-        selectedTimeRange: "day", // 默认选中“自然天”
-        datePickerType: "date", // 默认 date 类型
-        trendData: [], // 直播趋势数据
-        weekRange: "", // 存储选择周的时间范围
-        selectedMetric: {}, // 选中的指标
-        selectedDate: new Date().toISOString().split("T")[0], // 默认今天
-        selectedMetric: "views", // 默认选中浏览量
-        lives: [
-          {
-            id: 1,
-            image: "https://cos.his.cdwjyyh.com/fs/20250117/d9e3b268e3834a2497e0bb1f900eac90.jpg",
-            title: "李悦的直播",
-            time: "2024-10-10 15:00:00",
-            views: 352821,
-            visitors: 14505,
-          },
-          {
-            id: 2,
-            image: "https://cos.his.cdwjyyh.com/fs/20250117/d9e3b268e3834a2497e0bb1f900eac90.jpg",
-            title: "小付的直播",
-            time: "2024-10-12 18:00:00",
-            views: 284210,
-            visitors: 10234,
-          },
-          {
-            id: 3,
-            image: "https://cos.his.cdwjyyh.com/fs/20250117/d9e3b268e3834a2497e0bb1f900eac90.jpg",
-            title: "生活妙招分享",
-            time: "2024-11-05 20:00:00",
-            views: 182401,
-            visitors: 8734,
-          },
-          {
-            id: 4,
-            image: "https://cos.his.cdwjyyh.com/fs/20250117/d9e3b268e3834a2497e0bb1f900eac90.jpg",
-            title: "家庭健康指南",
-            time: "2024-12-01 14:00:00",
-            views: 254321,
-            visitors: 12345,
-          },
-          {
-            id: 5,
-            image: "https://cos.his.cdwjyyh.com/fs/20250117/d9e3b268e3834a2497e0bb1f900eac90.jpg",
-            title: "额外的直播",
-            time: "2024-12-15 19:00:00",
-            views: 100000,
-            visitors: 5000,
-          }
-        ],
-        trendData: [
-          {
-            id: "views",
-            title: "直播间浏览量",
-            tip: "直播间总浏览量",
-            value: 352421,
-            dailyChange:1,
-            weeklyChange:2,
-            monthlyChange:3,
-            change: 5.2,
-            dates: ["02-02", "02-04", "02-06", "02-08", "02-10"],
-            data: [10, 20, 15, 25, 30],
-          },
-          {
-            id: "visitors",
-            title: "直播间访客数",
-            tip: "直播间访客数",
-            value: 14505,
-            dailyChange:1,
-            weeklyChange:2,
-            monthlyChange:3,
-            change: 5.2,
-            dates: ["02-02", "02-04", "02-06", "02-08", "02-10"],
-            data: [5, 8, 6, 10, 12],
-          },
-          {
-            id: "streams",
-            title: "创建直播数",
-            tip: "每日直播场次",
-            value: 20,
-            dailyChange:1,
-            weeklyChange:2,
-            monthlyChange:3,
-            change: 5.2,
-            dates: ["02-02", "02-04", "02-06", "02-08", "02-10"],
-            data: [1, 2, 1, 3, 2],
-          },
-          {
-            id: "pv",
-            title: "累计观看人次(PV)",
-            tip: "累计观看人次",
-            value: 5000,
-            dailyChange:1,
-            weeklyChange:2,
-            monthlyChange:3,
-            change: 5.2,
-            dates: ["02-02", "02-04", "02-06", "02-08", "02-10"],
-            data: [0, 0, 1, 0, 0],
-          },
-          {
-            id: "uv",
-            title: "累计观看人数(UV)",
-            tip: "累计观看人数",
-            value: 3000,
-            dailyChange:1,
-            weeklyChange:2,
-            monthlyChange:3,
-            change: 5.2,
-            dates: ["02-02", "02-04", "02-06", "02-08", "02-10"],
-            data: [0, 0, 0, 1, 0],
-          },
-        ],
-        selectedMetric: {}, // 选中的卡片数据
-        chart: null, // ECharts 实例
-      };
-    },
-    computed: {
-      changeLabel() {
-        switch (this.selectedTimeRange) {
-          case 'day': return '比前一天';
-          case 'week': return '比上周';
-          case 'month': return '比上月';
-          default: return '变化';
-        }
-      },
-      displayLives() {
-        return this.lives.slice(0, 4); // 最多只显示前 4 条数据
-      },
-      /*datePickerType() {
-        return this.selectedTimeRange === "day"
-          ? "date"
-          : this.selectedTimeRange === "week"
-            ? "week"
-            : "month";
-      },*/
-      dateFormat() {
-        return this.selectedTimeRange === "day"
-          ? "yyyy-MM-dd"
-          : this.selectedTimeRange === "week"
-            ? "yyyy-MM-dd 至 yyyy-MM-dd"
-            : "yyyy-MM";
-      },
-      valueFormat() {
-        return this.selectedTimeRange === "day"
-          ? "yyyy-MM-dd"
-          : this.selectedTimeRange === "week"
-            ? "yyyy-MM-dd"
-            : "yyyy-MM";
-      },
-    },
-    created() {
-      //this.getList();
-    },
-    mounted() {
-      this.selectedMetric = this.trendData[0]; // 默认选中第一个
-      this.initChart(); // 初始化折线图
-    },
-    methods: {
-      changeDate(value) {
-        if (this.selectedTimeRange === "week" && value) {
-          /*console.log("?? 监听到 selectedWeek 变化:", newVal);*/
-          this.weekRange = this.getWeekRange(value);
-        } else {
-          this.weekRange = "";
-        }
-        console.log("选择的时间:", value, "筛选方式:", this.selectedTimeRange);
-      },
-      getWeekRange(selectedWeek) {
-        console.log("?? selectedWeek 输入值:", selectedWeek); // 检查传入值
-        let date = new Date(selectedWeek);
-
-        if (isNaN(date.getTime())) {
-          console.error("Invalid Date:", selectedWeek);
-          return "日期错误";
-        }
-
-        let dayOfWeek = date.getDay(); // 0(星期天)- 6(星期六)
-
-        // 计算周一
-        let startDate = new Date(date); // 创建一个新的 Date 实例
-        startDate.setDate(date.getDate() - dayOfWeek + (dayOfWeek === 0 ? -6 : 1));
-
-        // 计算周日(确保 `endDate` 是新实例)
-        let endDate = new Date(startDate.getTime()); // 复制 `startDate`
-        endDate.setDate(startDate.getDate() + 6);
-
-        console.log("周一:", this.formatDate(startDate));
-        console.log("周日:", this.formatDate(endDate));
-
-        return `${this.formatDate(startDate)} 至 ${this.formatDate(endDate)}`;
-      },
-      formatDate(date) {
-        const year = date.getFullYear();
-        const month = String(date.getMonth() + 1).padStart(2, "0");
-        const day = String(date.getDate()).padStart(2, "0");
-        return `${year}-${month}-${day}`;
-      },
-      computedChange(item) {
-        switch (this.selectedTimeRange) {
-          case 'day': return item.dailyChange;
-          case 'week': return item.weeklyChange;
-          case 'month': return item.monthlyChange;
-          default: return 0;
-        }
-      },
-      selectRank(type) {
-        this.selectedRank = type;
-        console.log(`选中的排行方式: ${type}`);
-      },
-      selectRank(type) {
-        this.selectedRank = type; // 只允许一个按钮被选中
-        console.log(`选中的排行方式: ${type}`);
-      },
-      fetchRankingData() {
-        // 这里根据 `selectedRedRank` 和 `selectedBlackRank` 来请求不同的排行榜数据
-        console.log(`获取排行榜数据: 红榜-${this.selectedRedRank}, 黑榜-${this.selectedBlackRank}`);
-      },
-      // 切换时间范围
-      changeTimeRange() {
-        // 根据选中的时间范围修改 datePicker 类型
-        if (this.selectedTimeRange === "day") {
-          this.datePickerType = "date";
-        } else if (this.selectedTimeRange === "month") {
-          this.datePickerType = "month";
-        } else if (this.selectedTimeRange === "week") {
-          this.datePickerType = "week";
-        }
-        this.selectedDate = null; // 重置已选日期
-      },
-      // 切换时间(但目前只是选日期,没有请求后端)
-      /*changeDate() {
-        console.log("选择日期:", this.selectedDate);
-        // 这里可以做后端请求:this.fetchTrendData();
-      },*/
-      // 获取直播趋势数据
-      async fetchTrendData() {
-        try {
-          const response = await axios.get("/api/trend-data", { params: { date: this.selectedDate } });
-          this.trendData = response.data;
-
-          // 默认选择第一个指标
-          if (this.trendData.length > 0) {
-            this.changeMetric(this.trendData[0]);
-          }
-        } catch (error) {
-          console.error("获取直播数据失败:", error);
-        }
-      },
-      // 切换日期时更新数据
-      updateTrendData() {
-        console.log(`更新 ${this.selectedDate} 的直播数据`);
-        // 这里可以加接口请求,获取新的数据
-        this.updateChart();
-      },
-      // 切换指标
-      changeMetric(metric) {
-        this.selectedMetric = metric;
-        this.updateChart();
-      },
-      updateTrendData() {
-        console.log("选择的时间:", this.selectedDate);
-        this.trendData = this.trendData.map(item => ({
-          ...item,
-          value: Math.floor(Math.random() * 50),
-          change: (Math.random() * 10 - 5).toFixed(2)
-        }));
-        this.updateChart();
-      },
-      initChart() {
-        let chartDom = document.getElementById("liveChart");
-        if (!chartDom) return;
-        this.chart = echarts.init(chartDom);
-        this.updateChart();
-      },
-      // 更新折线图
-      updateChart() {
-        if (!this.chart) return;
-
-        let options = {
-          tooltip: { trigger: "axis", backgroundColor: "rgba(0, 0, 0, 0.7)", textStyle: { color: "#fff" } },
-          grid: { left: "5%", right: "5%", bottom: "10%", top: "10%", containLabel: true },
-          xAxis: { type: "category", data: this.selectedMetric.dates || [], axisLine: { lineStyle: { color: "#ddd" } } },
-          yAxis: { type: "value", splitLine: { lineStyle: { type: "dashed", color: "#ddd" } } },
-          series: [
-            {
-              name: this.selectedMetric.title,
-              data: this.selectedMetric.data || [],
-              type: "line",
-              smooth: true,
-              symbol: "circle",
-              symbolSize: 8,
-              itemStyle: { color: "#007BFF", borderColor: "#fff", borderWidth: 2 },
-              lineStyle: { width: 3, color: "#007BFF" },
-              areaStyle: {
-                color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
-                  { offset: 0, color: "rgba(0, 123, 255, 0.5)" },
-                  { offset: 1, color: "rgba(0, 123, 255, 0)" },
-                ]),
-              },
-              emphasis: {
-                focus: "series",
-                label: { show: true, formatter: "{c}", fontSize: 14, color: "#333", backgroundColor: "#fff", padding: [4, 6] },
-              },
-              animationDuration: 1200,
-              animationEasing: "quadraticOut",
-            },
-          ],
-        };
-
-        this.chart.setOption(options);
-      },
-      changeMetric(metric) {
-        this.selectedMetric = metric;
-        this.updateChart();
-      },
-    }
-  };
-</script>
-
-<style scoped>
-  .app-container {
-    padding: 20px;
-  }
-
-  .title {
-    font-size: 18px;
-    font-weight: bold;
-    margin-bottom: 10px;
-  }
-  .live-container {
-    display: flex;
-    gap: 15px; /* 控制卡片之间的间距 */
-    overflow-x: auto; /* 允许横向滚动 */
-    padding-bottom: 10px;
-  }
-
-  /* 卡片样式 */
-  .live-card {
-    width: 380px;
-    height: 225px;
-    background: rgb(250,250,250);
-    border-radius: 10px;
-    padding: 15px;
-    box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
-    display: flex;
-    flex-direction: column;
-    align-items: flex-start;
-  }
-
-  /* 直播状态 */
-  .status {
-    background: #d3d3d3;
-    color: #333;
-    font-size: 14px;
-    padding: 4px 8px;
-    border-radius: 5px;
-    display: inline-block;
-
-
-  }
-
-  /* 直播信息部分 */
-  .content {
-    background: rgb(250,250,250);
-    display: flex;
-    gap: 10px;
-    align-items: center;
-    width: 90%;
-    margin-top: 0px;
-  }
-
-  /* 直播封面图片 */
-  .cover-image {
-    width: 70px;
-    height: 70px;
-    border-radius: 10px;
-    object-fit: cover;
-  }
-
-  /* 直播文本信息 */
-  .info {
-    flex: 1;
-  }
-
-  .live-title {
-    font-size: 16px;
-    font-weight: bold;
-    white-space: nowrap;
-    overflow: hidden;
-    text-overflow: ellipsis;
-    max-width: 250px; /* 防止标题过长 */
-  }
-
-  .time {
-    font-size: 14px;
-    color: #666;
-  }
-
-  /* 直播数据部分 */
-  .stats {
-    display: flex;
-    justify-content: space-between;
-    width: 100%;
-    flex-shrink: 0;
-    margin-top: -40px;
-  }
-
-  .stat-item {
-    text-align: center;
-    flex: 1;
-  }
-
-  .label {
-    font-size: 14px;
-    color: #888;
-  }
-
-  .value {
-    font-size: 18px;
-    font-weight: bold;
-    color: #333;
-  }
-  /* 直播趋势 */
-  .trend-section {
-    margin-top: 30px;
-  }
-  .trend-header {
-    display: flex;
-    justify-content: space-between;
-    align-items: center;
-  }
-  .trend-cards {
-    display: flex;
-    gap: 15px;
-  }
-  .trend-card {
-    width: 280px;
-    hight: 100px;
-    border: 1px solid #ddd;
-    border-radius: 8px;
-    padding: 16px;
-    transition: all 0.3s;
-    position: relative;
-  }
-
-  .trend-card.active {
-    border-color: #007bff; /* 选中时边框变蓝 */
-    box-shadow: 0px 0px 10px rgba(0, 123, 255, 0.3);
-  }
-
-  .trend-card.active::after {
-    content: "✔";
-    position: absolute;
-    bottom: 8px;
-    right: 8px;
-    color: white;
-    background: #007bff;
-    border-radius: 50%;
-    width: 20px;
-    height: 20px;
-    display: flex;
-    justify-content: center;
-    align-items: center;
-    font-size: 14px;
-    font-weight: bold;
-  }
-  .trend-value {
-    font-size: 24px;
-    font-weight: bold;
-  }
-
-  /* 折线图 */
-  .chart {
-    width: 100%;
-    height: 300px;
-    margin-top: 20px;
-  }
-  .top10-section {
-    margin-top: 20px;
-    background: #fff;
-    padding: 16px;
-    border-radius: 8px;
-    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
-  }
-  .live-name {
-    display: flex;
-    align-items: center;
-  }
-
-  .live-cover {
-    width: 80px;  /* 直播封面宽度 */
-    height: 45px; /* 直播封面高度 */
-    border-radius: 4px;
-    margin-right: 10px;
-    object-fit: cover;
-  }
-
-  .live-title {
-    font-size: 14px;
-    color: #333;
-    white-space: nowrap;
-    overflow: hidden;
-    text-overflow: ellipsis;
-  }
-  .ranking-tabs {
-    display: flex;
-    justify-content: space-between;
-    align-items: center;
-    padding: 10px 20px;
-  }
-
-  .ranking-container {
-    display: flex;
-    justify-content: space-between;
-    align-items: center;
-    margin: 10px 0;
-    border-radius: 8px;
-    overflow: hidden;
-  }
-
-  .ranking-section {
-    display: flex;
-    align-items: center;
-    width: 50%;
-    padding: 10px 15px;
-  }
-
-  .red-rank {
-    background: linear-gradient(90deg, #ff6b6b, #ff8e8e);
-    justify-content: flex-start;
-  }
-
-  .black-rank {
-    background: linear-gradient(90deg, #4a4a4a, #6b6b6b);
-    justify-content: flex-end;
-  }
-
-  .rank-title {
-    font-size: 18px;
-    font-weight: bold;
-    color: white;
-    margin: 0 15px;
-  }
-
-  .rank-filters {
-    display: flex;
-  }
-
-  button {
-    background: rgba(255, 255, 255, 0.2);
-    border: 1px solid rgba(255, 255, 255, 0.5);
-    color: white;
-    font-size: 14px;
-    padding: 5px 12px;
-    margin: 0 5px;
-    border-radius: 15px;
-    cursor: pointer;
-    transition: all 0.3s ease;
-  }
-
-  button.active {
-    background: white;
-    color: #ff4d4f;
-  }
-  .filter-container {
-    display: flex;
-    align-items: center;
-    gap: 8px; /* 控制两个组件的间距 */
-  }
-
-  .filter-label {
-    font-weight: bold;
-    white-space: nowrap; /* 防止换行 */
-  }
-</style>
-

+ 0 - 51
src/views/live/liveWatchUser/index.vue

@@ -1,51 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
-      <el-form-item label="直播ID" prop="liveId">
-        <el-input
-          v-model="queryParams.liveId"
-          placeholder="请输入直播ID"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
-      </el-form-item>
-    </el-form>
-  </div>
-</template>
-
-<script>
-
-export default {
-  name: 'LiveWatchUser',
-  data() {
-    return {
-      showSearch: true,
-      queryForm: null,
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10
-      }
-    }
-  },
-  created() {
-
-  },
-  methods: {
-    handleQuery() {
-      console.log(this.queryParams);
-    },
-    resetQuery() {
-      console.log(this.queryParams);
-    }
-  }
-}
-</script>
-
-<style scoped>
-
-</style>

+ 3 - 2
src/views/login.vue

@@ -5,7 +5,7 @@
         <img src="../assets/images/login_left.png" alt="">
       </div>
       <el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form">
-        <h3 class="title">九州互联网医院管理系统</h3>
+        <h3 class="title">九州在线互联网医院管理系统</h3>
         <el-form-item prop="username">
           <el-input v-model="loginForm.username" type="text" auto-complete="off" placeholder="账号">
             <svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" />
@@ -53,7 +53,8 @@
     </div>
     <!--  底部  -->
     <div class="el-login-footer">
-      <a href="https://beian.miit.gov.cn" target="_bank">蜀ICP备2023036719号-2</a>
+      <span>九州在线医药有限公司</span>
+      <a href="https://beian.miit.gov.cn" target="_bank">闽ICP备2020016609号-3</a>
     </div>
   </div>
 </template>

+ 2 - 45
src/views/qw/sop/sop.vue

@@ -61,31 +61,13 @@
     <el-row :gutter="10" class="mb8">
       <el-col :span="1.5">
         <el-button
-          type="warning"
+          type="success"
           plain
           icon="el-icon-download"
           size="mini"
           :loading="exportLoading"
           @click="handleExport"
         >导出</el-button>
-
-        <el-button
-          type="success"
-          plain
-          icon="el-icon-top"
-          size="mini"
-          @click="handleLogin"
-          v-hasPermi="['qw:user:loginAll']"
-        >企微全部启动</el-button>
-
-        <el-button
-          type="danger"
-          plain
-          icon="el-icon-bottom"
-          size="mini"
-          @click="handleLoginOut"
-          v-hasPermi="['qw:user:qwLoginOutAll']"
-        >企微全部退出</el-button>
       </el-col>
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
@@ -168,7 +150,6 @@
 import { listSop, exportSop, } from "@/api/qw/sop";
 
 import sopLogsDetails from '@/views/qw/sopLogs/sopLogsList.vue'
-import {loginQwAll, qwLoginOutAll} from "../../../api/qw/sop";
 export default {
   name: "Sop",
     components: { sopLogsDetails},
@@ -394,31 +375,7 @@ export default {
           this.download(response.msg);
           this.exportLoading = false;
         }).catch(() => {});
-    },
-
-    handleLogin(){
-      this.$confirm('是否确认【登录】所有企微?', "警告", {
-        confirmButtonText: "确定",
-        cancelButtonText: "取消",
-        type: "warning"
-      }).then(() => {
-        return loginQwAll();
-      }).then(response => {
-        this.$message.success("正在登录...")
-      }).catch(() => {});
-    },
-    handleLoginOut(){
-      this.$confirm('是否确认【退出】所有企微?', "警告", {
-        confirmButtonText: "确定",
-        cancelButtonText: "取消",
-        type: "warning"
-      }).then(() => {
-        return qwLoginOutAll();
-      }).then(response => {
-        this.$message.success("正在退出..")
-      }).catch(() => {});
-    },
-
+    }
   }
 };
 </script>

+ 29 - 54
src/views/system/config/config.vue

@@ -8,7 +8,6 @@
                 <el-radio :label="1">七牛云</el-radio>
                 <el-radio :label="2">阿里云</el-radio>
                 <el-radio :label="3">腾讯云</el-radio>
-                <el-radio :label="4">华为云</el-radio>
               </el-radio-group>
             </el-form-item>
             <el-form-item v-if="form1.type==1" label="七牛绑定的域名" prop="qiniuDomain">
@@ -62,24 +61,6 @@
              <el-form-item v-if="form1.type==3" label="所属地区" prop="qcloudRegion">
                 <el-input  v-model="form1.qcloudRegion" label="所属地区不能为空"></el-input>
             </el-form-item>
-
-            <el-form-item v-if="form1.type==4" label="华为云绑定的域名" prop="huaweiDomain">
-              <el-input  v-model="form1.huaweiDomain" label="华为云绑定的域名格式不正确"></el-input>
-            </el-form-item>
-            <el-form-item v-if="form1.type==4" label="华为云Endpoint" prop="huaweiBucketName">
-              <el-input  v-model="form1.huaweiEndpoint" label="华为云Endpoint不能为空"></el-input>
-            </el-form-item>
-
-            <el-form-item v-if="form1.type==4" label="华为云AK" prop="huaweiAK">
-              <el-input  v-model="form1.huaweiAK" label="华为云AK不能为空"></el-input>
-            </el-form-item>
-            <el-form-item v-if="form1.type==4" label="华为云SK" prop="huaweiSK">
-              <el-input  v-model="form1.huaweiSK" label="华为云SK不能为空"></el-input>
-            </el-form-item>
-            <el-form-item v-if="form1.type==4" label="华为云BucketName" prop="huaweiBucketName">
-              <el-input  v-model="form1.huaweiBucketName" label="华为云BucketName不能为空"></el-input>
-            </el-form-item>
-
              <div   class="footer">
               <el-button type="primary" @click="submitForm1">提  交</el-button>
             </div>
@@ -589,24 +570,6 @@
               </el-form-item>
             </el-col>
           </el-row>
-
-          <el-row>
-            <el-col :span="12">
-              <el-form-item  label="邀请新用户获得积分" prop="integralCourse">
-                <el-tooltip class="item" effect="dark" content="邀请新用户获得积分" placement="top-end">
-                  <el-input-number  v-model="form11.integralInvite"   ></el-input-number>
-                </el-tooltip>
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item  label="填写邀请码获得积分" prop="integralProduct">
-                <el-tooltip class="item" effect="dark" content="填写邀请码获得积分" placement="top-end">
-                  <el-input-number  v-model="form11.integralInvited"   ></el-input-number>
-                </el-tooltip>
-              </el-form-item>
-            </el-col>
-          </el-row>
-
           <el-form-item  label="单日可获总积分" prop="integralByOneDay">
             <el-tooltip class="item" effect="dark" content="每天最多可获得多少积分" placement="top-end">
               <el-input-number  v-model="form11.integralByOneDay"   ></el-input-number>
@@ -781,9 +744,6 @@
        <el-form-item   label="hook地址" prop="hookUrl">
          <el-input   v-model="form13.hookUrl"  label="请输入hook域名"></el-input>
        </el-form-item>
-       <el-form-item   label="AppH5域名" prop="appH5DomainName">
-         <el-input   v-model="form13.appH5DomainName"  label="请输入域名"></el-input>
-       </el-form-item>
       <div   class="footer">
          <el-button type="primary" @click="submitForm13">提  交</el-button>
        </div>
@@ -887,8 +847,8 @@
     </el-tab-pane>
        <el-tab-pane label="点播配置" name="course.config">
          <el-form ref="form18" :model="form18" label-width="120px">
-           <el-form-item label="可答题进度(%)">
-             <el-tooltip class="item" effect="dark" content="课程可答题进度(%)" placement="top-end">
+           <el-form-item label="完课进度(%)">
+             <el-tooltip class="item" effect="dark" content="看多少百分比算完课" placement="top-end">
                <el-input-number  v-model="form18.answerRate" :min="1" :max="100"    ></el-input-number>
              </el-tooltip>
            </el-form-item>
@@ -902,11 +862,6 @@
                <el-input-number  v-model="form18.answerErrorCount" :min="1"     ></el-input-number>
              </el-tooltip>
            </el-form-item>
-           <el-form-item label="最大缓冲时长(秒)">
-             <el-tooltip class="item" effect="dark" content="当前播放时间之后缓冲秒数(秒)" placement="top-end">
-               <el-input-number  v-model="form18.maxBufferLength" :min="1"    ></el-input-number>
-             </el-tooltip>
-           </el-form-item>
            <el-form-item label="每十分钟获取积分">
              <el-tooltip class="item" effect="dark" content="每十分钟获取多少积分" placement="top-end">
                <el-input-number  v-model="form18.videoIntegral" :min="1"    ></el-input-number>
@@ -923,19 +878,19 @@
                <el-radio label="1">线路二</el-radio>
              </el-radio-group>
            </el-form-item>
-           <el-form-item label="真链域名">
+           <el-form-item label="通用看课域名">
              <el-tooltip class="item" effect="dark" content="真链域名" placement="top-end">
                <el-input  v-model="form18.realLinkDomainName"     ></el-input>
              </el-tooltip>
            </el-form-item>
-           <el-form-item label="播放器License URL">
-             <el-tooltip class="item" effect="dark" content="播放器License URL" placement="top-end">
-               <el-input  v-model="form18.licenseURL"  ></el-input>
+           <el-form-item label="网页授权域名">
+             <el-tooltip class="item" effect="dark" content="公众号网页授权域名" placement="top-end">
+               <el-input  v-model="form18.authDomainName"  ></el-input>
              </el-tooltip>
            </el-form-item>
-           <el-form-item label="播放器License Key">
-             <el-tooltip class="item" effect="dark" content="播放器License Key" placement="top-end">
-               <el-input  v-model="form18.licenseKey"  ></el-input>
+           <el-form-item label="公众号appId">
+             <el-tooltip class="item" effect="dark" content="授权公众号appId" placement="top-end">
+               <el-input  v-model="form18.mpAppId"  ></el-input>
              </el-tooltip>
            </el-form-item>
 
@@ -950,6 +905,20 @@
              </el-tooltip>
            </el-form-item>
 
+           <el-form-item label="奖励类型">
+             <el-radio-group v-model="form18.rewardType">
+               <el-radio label="1">红包</el-radio>
+               <el-radio label="2">积分</el-radio>
+             </el-radio-group>
+           </el-form-item>
+
+           <el-form-item label="红包模式" v-if="form18.rewardType==1">
+             <el-radio-group v-model="form18.redPacketMode">
+               <el-radio label="1">总公司</el-radio>
+               <el-radio label="2">分公司</el-radio>
+             </el-radio-group>
+           </el-form-item>
+
            <div class="line"></div>
            <div style="float:right;margin-right:20px">
              <el-button type="primary" @click="submitForm18">提交</el-button>
@@ -958,6 +927,12 @@
        </el-tab-pane>
        <el-tab-pane label="红包商户配置" name="redPacket.config" >
          <el-form ref="form19" :model="form19"  label-width="150px">
+           <el-form-item   label="红包接口类型" prop="isNew">
+             <el-radio-group v-model="form19.isNew">
+               <el-radio label="0">商家转账到零钱(旧)</el-radio>
+               <el-radio label="1">商家转账(新)</el-radio>
+             </el-radio-group>
+           </el-form-item>
            <el-form-item   label="公众号appid" prop="appId">
              <el-input   v-model="form19.appId"  label="请输入appId"></el-input>
            </el-form-item>

+ 2 - 4
src/views/watch/deviceInfo/details.vue

@@ -64,7 +64,7 @@
           </div>
         </div>
         <div class="equipment-day">
-          <!-- 已绑定 <span>400</span> 天, 佩戴 <span>4365</span> 天 -->
+          已绑定 <span>400</span> 天, 佩戴 <span>4365</span> 天
         </div>
         <div class="equipment-btn">
           <el-button type="primary" size="small">一键上传</el-button>
@@ -342,9 +342,7 @@ export default {
      */
     async getUserinfo(deviceId) {
       try {
-        const userId = this.$route.params.userId;
-        const selectType = this.$route.params.selectType;
-        const response = await getUser({deviceId:deviceId,userId:userId,selectType});
+        const response = await getUser(deviceId);
         if (response && response.data) {
           this.userInfo = response.data; // 确保数据被正确赋值
           // console.log("用户信息:", this.userInfo);

+ 36 - 51
src/views/watch/deviceInfo/index.vue

@@ -2,30 +2,30 @@
   <div class="app-container">
     <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
       <el-form-item label="所属公司" prop="companyId" v-if="shouldShowCompanySelect">
-        <el-select v-model="queryParams.companyId" placeholder="请选择所属公司" clearable filterable size="small" @change="getCompanyUserList">
+        <el-select v-model="queryParams.companyId" placeholder="请选择所属公司" clearable size="small" @change="getCompanyUserList">
           <el-option v-for="item in companyList" :key="item.companyId" :label="item.companyName"
             :value="item.companyId">
           </el-option>
         </el-select>
       </el-form-item>
       <el-form-item label="所属员工" prop="companyUserId">
-        <el-select v-model="queryParams.companyUserId" placeholder="请选择所属员工" clearable filterable size="small">
+        <el-select v-model="queryParams.companyUserId" placeholder="请选择所属员工" clearable size="small">
           <el-option v-for="item in companyUserList" :key="item.userId" :label="item.nickName"
             :value="item.userId">
           </el-option>
         </el-select>
       </el-form-item>
       <el-form-item label="所属医生" prop="doctorId">
-        <el-select v-model="queryParams.doctorId" placeholder="请选择所属医生" clearable filterable size="small">
+        <el-select v-model="queryParams.doctorId" placeholder="请选择所属医生" clearable size="small">
           <el-option v-for="item in doctorList" :key="item.doctorId" :label="item.doctorName"
             :value="item.doctorId">
           </el-option>
         </el-select>
       </el-form-item>
-      <!-- <el-form-item label="绑定用户" prop="watchUserName">
+      <el-form-item label="绑定用户" prop="watchUserName">
         <el-input v-model="queryParams.watchUserName" placeholder="请输入绑定用户" clearable size="small"
           @keyup.enter.native="handleQuery" />
-      </el-form-item> -->
+      </el-form-item>
       <el-form-item label="设备编号" prop="deviceNumber">
         <el-input v-model="queryParams.deviceNumber" placeholder="请输入设备编号" clearable size="small"
           @keyup.enter.native="handleQuery" />
@@ -143,17 +143,7 @@
       <el-table-column label="所属公司" align="center" prop="companyName" />
       <el-table-column label="所属员工" align="center" prop="companyUserName" />
       <el-table-column label="所属医生" align="center" prop="doctorName" />
-    
-      <el-table-column  label="绑定用户"  align="center">
-          <template slot-scope="scope">
-              <el-link :underline="false" prop="item.userId" v-for="(item, index) in scope.row.users"  v-if="scope.row.users"  @click="handleDetails(scope.row.deviceId,item.userId)">{{item.nickName}}</el-link>
-          </template>
-      </el-table-column>
-      <el-table-column  label="绑定家人用户"  align="center">
-          <template slot-scope="scope">
-              <el-link :underline="false" prop="item.userId" v-for="(item, index) in scope.row.familyUsers"  v-if="scope.row.familyUsers"  @click="handleDetails(scope.row.deviceId,item.userId)">{{item.nickName}}</el-link>
-          </template>
-      </el-table-column>
+      <el-table-column label="绑定用户" align="center" prop="watchUserName" />
       <el-table-column label="设备编号" align="center" prop="deviceNumber" width="150"/>
       <el-table-column label="电量" align="center" prop="battery" />
       <el-table-column label="信号" align="center" prop="rssi" />
@@ -174,7 +164,7 @@
       </el-table-column>
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
         <template slot-scope="scope">
-          <el-button size="mini" type="text" icon="el-icon-view" @click="handleDetails(scope.row.deviceId,null)"
+          <el-button size="mini" type="text" icon="el-icon-view" @click="handleDetails(scope.row.deviceId)"
             v-hasPermi="['watchApi:deviceInfo:query']">查询详情</el-button>
           <el-button size="mini" type="text" icon="el-icon-phone-outline" @click="handleSoSPeople(scope.row.deviceNumber)"
             v-hasPermi="['watchApi:deviceInfo:query']">查看紧急联系人</el-button>
@@ -207,7 +197,24 @@
         <div slot="footer" class="dialog-footer">
           <el-button @click="healthDataDialogVisible = false">关闭</el-button>
         </div>
-    </el-dialog>
+      </el-dialog>
+
+      <!-- 历史数据对话框 -->
+    <!-- <el-dialog :visible.sync="historyDataDialogVisible" title="历史数据" width="50%">
+      <div v-if="historyData">
+        <el-table :data="historyData">
+          <el-table-column prop="type" label="类型" align="center" />
+          <el-table-column prop="data" label="数值" align="center" />
+          <el-table-column prop="date" label="时间" align="center" />
+        </el-table>
+      </div>
+      <div v-else>
+        <p>暂无历史数据</p>
+      </div>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="historyDataDialogVisible = false">关闭</el-button>
+      </div>
+    </el-dialog> -->
       
 
     <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
@@ -216,27 +223,17 @@
     <!-- 添加或修改设备信息对话框 -->
     <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="所属公司">
+        <el-form-item label="所属公司" prop="companyId">
           <template #label>
             <span class="required-label">所属公司</span>
           </template>
-          <el-select
-            v-model="selectedCompanyIds"
-            placeholder="请选择所属公司"
-            clearable
-            filterable
-            multiple
-            size="small"
-          >
-            <el-option
-              v-for="item in companyList"
-              :key="item.companyId"
-              :label="item.companyName"
-              :value="Number(item.companyId)"
-            ></el-option>
+          <el-select v-model="form.companyId" placeholder="请选择所属公司" clearable size="small" @change="getAddCompanyUserList">
+            <el-option v-for="item in companyList" :key="item.companyId" :label="item.companyName"
+              :value="item.companyId">
+            </el-option>
           </el-select>
         </el-form-item>
-        <el-form-item label="所属员工">
+        <el-form-item label="所属员工" prop="companyUserId">
           <template #label>
             <span class="required-label">所属员工</span>
           </template>
@@ -372,7 +369,7 @@ export default {
       },
       // 表单参数
       form: {
-        companyId: '', //原始的以逗号分隔的字符串
+        companyId: '',
         companyUserId:"",
         doctorId:"",
         deviceNumber: '',
@@ -380,7 +377,6 @@ export default {
         rssi: '',
         status: 1,
       },
-      selectedCompanyIds: [], // 用于绑定选择框的数组
       // 表单校验
       rules: {
         // companyId: [
@@ -588,16 +584,9 @@ export default {
     this.getCompanyUserList();
     this.getDoctorList();
   },
-
   methods: {
-    parseCompanyId() {
-      // 将原始的以逗号分隔的字符串解析为数组
-      if (this.form.companyId) {
-        this.selectedCompanyIds = this.form.companyId.split(',').map(Number);
-      }
-    },
     rowClassName({row}) {
-      if (row.status && (row.status.includes('偏') || row.status.includes('重'))) {
+      if (row.status && row.status.includes('偏')) {
         // console.log("=============================" + JSON.stringify(row.status, null, 2))
         return 'text-red';
         // return true
@@ -705,8 +694,8 @@ export default {
       }
     },
     /** 处理查询详情按钮点击事件 */
-    handleDetails(deviceId,userId) {
-      this.$router.push({ name: 'details', params: { deviceId:deviceId,userId:userId } });
+    handleDetails(deviceId) {
+      this.$router.push({ name: 'details', params: { deviceId } });
     },
 
     /** 查询设备信息列表 */
@@ -737,8 +726,7 @@ export default {
         deviceNumber: null,
         battery: null,
         rssi: null,
-        status: 0,
-        selectedCompanyIds: [],
+        status: 0
       };
       this.resetForm("form");
     },
@@ -771,7 +759,6 @@ export default {
       const deviceId = row.deviceId || this.ids
       getDeviceInfo(deviceId).then(response => {
         this.form = response.data;
-        this.parseCompanyId()
         this.open = true;
         this.title = "修改设备信息";
       });
@@ -780,8 +767,6 @@ export default {
     submitForm() {
       this.$refs["form"].validate(valid => {
         if (valid) {
-          // 将 selectedCompanyIds 数组转换为以逗号分隔的字符串
-          this.form.companyId = this.selectedCompanyIds.join(',');
           if (this.form.deviceId != null) {
             console.log("===============================" + JSON.stringify(this.form, null, 2))
             updateDeviceInfo(this.form).then(response => {

+ 9 - 18
src/views/watch/isBind/index.vue

@@ -2,30 +2,30 @@
   <div class="app-container">
     <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
       <el-form-item label="所属公司" prop="companyId" v-if="shouldShowCompanySelect">
-        <el-select v-model="queryParams.companyId" placeholder="请选择所属公司" clearable filterable size="small" @change="getCompanyUserList">
+        <el-select v-model="queryParams.companyId" placeholder="请选择所属公司" clearable size="small" @change="getCompanyUserList">
           <el-option v-for="item in companyList" :key="item.companyId" :label="item.companyName"
             :value="item.companyId">
           </el-option>
         </el-select>
       </el-form-item>
       <el-form-item label="所属员工" prop="companyUserId">
-        <el-select v-model="queryParams.companyUserId" placeholder="请选择所属员工" clearable filterable size="small">
+        <el-select v-model="queryParams.companyUserId" placeholder="请选择所属员工" clearable size="small">
           <el-option v-for="item in companyUserList" :key="item.userId" :label="item.nickName"
             :value="item.userId">
           </el-option>
         </el-select>
       </el-form-item>
       <el-form-item label="所属医生" prop="doctorId">
-        <el-select v-model="queryParams.doctorId" placeholder="请选择所属医生" clearable filterable size="small">
+        <el-select v-model="queryParams.doctorId" placeholder="请选择所属医生" clearable size="small">
           <el-option v-for="item in doctorList" :key="item.doctorId" :label="item.doctorName"
             :value="item.doctorId">
           </el-option>
         </el-select>
       </el-form-item>
-      <!-- <el-form-item label="绑定用户" prop="watchUserName">
+      <el-form-item label="绑定用户" prop="watchUserName">
         <el-input v-model="queryParams.watchUserName" placeholder="请输入绑定用户" clearable size="small"
           @keyup.enter.native="handleQuery" />
-      </el-form-item> -->
+      </el-form-item>
       <el-form-item label="设备编号" prop="deviceNumber">
         <el-input v-model="queryParams.deviceNumber" placeholder="请输入设备编号" clearable size="small"
           @keyup.enter.native="handleQuery" />
@@ -115,16 +115,7 @@
       <el-table-column label="所属公司" align="center" prop="companyName" />
       <el-table-column label="所属员工" align="center" prop="companyUserName" />
       <el-table-column label="所属医生" align="center" prop="doctorName" />
-      <el-table-column  label="绑定用户"  align="center">
-          <template slot-scope="scope">
-              <el-link :underline="false" prop="item.userId" v-for="(item, index) in scope.row.users"  v-if="scope.row.users"  @click="handleDetails(scope.row.deviceId,item.userId,0)">{{item.nickName}}</el-link>
-          </template>
-      </el-table-column>
-      <el-table-column  label="绑定家人用户"  align="center">
-          <template slot-scope="scope">
-              <el-link :underline="false" prop="item.userId" v-for="(item, index) in scope.row.familyUsers"  v-if="scope.row.familyUsers"  @click="handleDetails(scope.row.deviceId,item.userId,1)">{{item.nickName}}</el-link>
-          </template>
-      </el-table-column>
+      <el-table-column label="绑定用户" align="center" prop="watchUserName" />
       <el-table-column label="设备编号" align="center" prop="deviceNumber" width="150"/>
       <el-table-column label="电量" align="center" prop="battery" />
       <el-table-column label="信号" align="center" prop="rssi" />
@@ -145,7 +136,7 @@
       </el-table-column>
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
         <template slot-scope="scope">
-          <el-button size="mini" type="text" icon="el-icon-view" @click="handleDetails(scope.row.deviceId,null,0)"
+          <el-button size="mini" type="text" icon="el-icon-view" @click="handleDetails(scope.row.deviceId)"
             v-hasPermi="['watchApi:deviceInfo:query']">查询详情</el-button>
           <el-button size="mini" type="text" icon="el-icon-phone-outline" @click="handleSoSPeople(scope.row.deviceNumber)"
             v-hasPermi="['watchApi:deviceInfo:query']">查看紧急联系人</el-button>
@@ -614,8 +605,8 @@ export default {
     //   }
     // },
     /** 处理查询详情按钮点击事件 */
-    handleDetails(deviceId,userId,type) {
-      this.$router.push({ name: 'details', params: { deviceId:deviceId,userId:userId,selectType:type } });
+    handleDetails(deviceId) {
+      this.$router.push({ name: 'details', params: { deviceId } });
     },
 
     /** 查询设备信息列表 */

+ 8 - 5
src/views/watch/isSend/index.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="app-container">
     <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
-      <!-- <el-form-item label="所属公司" prop="companyId" v-if="shouldShowCompanySelect">
+      <el-form-item label="所属公司" prop="companyId" v-if="shouldShowCompanySelect">
         <el-select v-model="queryParams.companyId" placeholder="请选择所属公司" clearable size="small" @change="getCompanyUserList">
           <el-option v-for="item in companyList" :key="item.companyId" :label="item.companyName"
             :value="item.companyId">
@@ -21,8 +21,11 @@
             :value="item.doctorId">
           </el-option>
         </el-select>
-      </el-form-item> -->
-      
+      </el-form-item>
+      <el-form-item label="绑定用户" prop="watchUserName">
+        <el-input v-model="queryParams.watchUserName" placeholder="请输入绑定用户" clearable size="small"
+          @keyup.enter.native="handleQuery" />
+      </el-form-item>
       <el-form-item label="设备编号" prop="deviceNumber">
         <el-input v-model="queryParams.deviceNumber" placeholder="请输入设备编号" clearable size="small"
           @keyup.enter.native="handleQuery" />
@@ -96,10 +99,10 @@
     <el-table v-loading="loading" :data="deviceInfoList" @selection-change="handleSelectionChange">
       <el-table-column type="selection" width="55" align="center" />
       <el-table-column label="设备id" align="center" prop="deviceId" />
-      <!-- <el-table-column label="所属公司" align="center" prop="companyName" />
+      <el-table-column label="所属公司" align="center" prop="companyName" />
       <el-table-column label="所属员工" align="center" prop="companyUserName" />
       <el-table-column label="所属医生" align="center" prop="doctorName" />
-      <el-table-column label="绑定用户" align="center" prop="watchUserName" /> -->
+      <el-table-column label="绑定用户" align="center" prop="watchUserName" />
       <el-table-column label="设备编号" align="center" prop="deviceNumber" width="150"/>
       <el-table-column label="电量" align="center" prop="battery" />
       <el-table-column label="信号" align="center" prop="rssi" />

+ 1 - 1
vue.config.js

@@ -5,7 +5,7 @@ function resolve(dir) {
   return path.join(__dirname, dir)
 }
 
-const name = process.env.VUE_APP_TITLE || '九州互联网医院管理系统' // 网页标题
+const name = process.env.VUE_APP_TITLE || '九州在线互联网医院管理系统' // 网页标题
 
 const port = process.env.port || process.env.npm_config_port || 80 // 端口