Selaa lähdekoodia

Merge branch 'master' of http://1.14.104.71:10880/root/ylrz_his_scrm_companyUI

yzx 3 viikkoa sitten
vanhempi
commit
7725aca946
100 muutettua tiedostoa jossa 3332 lisäystä ja 25 poistoa
  1. 23 0
      .env.development
  2. 3 0
      .env.prod-bjczwh
  3. 3 0
      .env.prod-bjyjb
  4. 45 0
      .env.prod-bjzm
  5. 3 0
      .env.prod-bly
  6. 3 0
      .env.prod-bnkc
  7. 3 0
      .env.prod-cqtyt
  8. 3 0
      .env.prod-cqxzt
  9. 3 0
      .env.prod-czt
  10. 3 0
      .env.prod-ddgy
  11. 4 0
      .env.prod-drk
  12. 4 0
      .env.prod-fby
  13. 4 0
      .env.prod-hat
  14. 3 0
      .env.prod-hcl
  15. 4 0
      .env.prod-hdt
  16. 22 0
      .env.prod-heyantang
  17. 3 0
      .env.prod-hst
  18. 4 0
      .env.prod-hyt
  19. 3 0
      .env.prod-hzyy
  20. 4 0
      .env.prod-jkj
  21. 4 1
      .env.prod-jnlzjk
  22. 3 0
      .env.prod-jnmy
  23. 22 0
      .env.prod-jnsyj
  24. 4 0
      .env.prod-jzzx
  25. 4 0
      .env.prod-knt
  26. 26 0
      .env.prod-knt2
  27. 3 0
      .env.prod-kyt
  28. 4 0
      .env.prod-lmjy
  29. 3 0
      .env.prod-myhk
  30. 3 0
      .env.prod-nmgyt
  31. 4 0
      .env.prod-qdtst
  32. 26 0
      .env.prod-sczy
  33. 4 0
      .env.prod-sft
  34. 3 0
      .env.prod-sxjz
  35. 4 0
      .env.prod-syysy
  36. 3 0
      .env.prod-test
  37. 4 0
      .env.prod-whhm
  38. 3 0
      .env.prod-xfk
  39. 4 0
      .env.prod-ylrz
  40. 26 0
      .env.prod-yxj
  41. 4 0
      .env.prod-yzt
  42. 3 0
      .env.prod-zkzh
  43. 3 0
      .env.prod-zsjk
  44. 33 5
      .env.production
  45. 10 0
      package.json
  46. 9 1
      src/api/common.js
  47. 16 0
      src/api/company/companyConfig.js
  48. 53 0
      src/api/company/companyUser.js
  49. 9 0
      src/api/company/redPacket.js
  50. 8 0
      src/api/course/courseFinishTemp.js
  51. 37 1
      src/api/course/courseFinishTempParent.js
  52. 14 0
      src/api/course/userCoursePeriod.js
  53. 9 0
      src/api/course/userCourseVideo.js
  54. 1 7
      src/api/hisStore/storeOrder.js
  55. 117 0
      src/api/hisStore/user.js
  56. 61 0
      src/api/hisStore/userAddress.js
  57. 62 0
      src/api/live/gift.js
  58. 141 0
      src/api/live/live.js
  59. 77 0
      src/api/live/liveAfterSales.js
  60. 53 0
      src/api/live/liveAnchor.js
  61. 137 0
      src/api/live/liveCoupon.js
  62. 61 0
      src/api/live/liveData.js
  63. 96 0
      src/api/live/liveGoods.js
  64. 62 0
      src/api/live/liveLotteryConf.js
  65. 61 0
      src/api/live/liveLotteryProductConf.js
  66. 62 0
      src/api/live/liveMsg.js
  67. 168 0
      src/api/live/liveOrder.js
  68. 53 0
      src/api/live/liveOrderitems.js
  69. 10 0
      src/api/live/liveProfit.js
  70. 53 0
      src/api/live/liveQuestion.js
  71. 36 0
      src/api/live/liveQuestionBank.js
  72. 89 0
      src/api/live/liveQuestionLive.js
  73. 63 0
      src/api/live/liveRedConf.js
  74. 19 0
      src/api/live/liveRewardRecord.js
  75. 62 0
      src/api/live/liveUserLotteryRecord.js
  76. 68 0
      src/api/live/liveVideo.js
  77. 43 0
      src/api/live/liveWatchUser.js
  78. 86 0
      src/api/live/task.js
  79. 53 0
      src/api/live/words.js
  80. 9 0
      src/api/qw/externalContact.js
  81. 3 2
      src/api/qw/externalContactTransferAudit.js
  82. 8 0
      src/api/qw/qwDept.js
  83. 17 0
      src/api/qw/sopTemp.js
  84. 7 0
      src/api/qw/sopUserLogs.js
  85. 19 0
      src/api/qw/user.js
  86. 75 0
      src/api/statistics/statistics.js
  87. 76 0
      src/api/store/collectionSchedule.js
  88. 1 7
      src/api/store/storeOrder.js
  89. 53 0
      src/api/tag/api.js
  90. 18 0
      src/api/wechat.js
  91. BIN
      src/assets/images/videoIsAudit.png
  92. BIN
      src/assets/images/videoNotStart.png
  93. BIN
      src/assets/logo/bjzmky.png
  94. BIN
      src/assets/logo/cdhyt.jpg
  95. BIN
      src/assets/logo/sczy.png
  96. BIN
      src/assets/logo/yxj.jpg
  97. 274 0
      src/components/LiveVideoUpload/index.vue
  98. 446 0
      src/components/LiveVideoUpload/single.vue
  99. 9 0
      src/main.js
  100. 11 1
      src/router/index.js

+ 23 - 0
.env.development

@@ -9,6 +9,26 @@ VUE_APP_ICP_URL =https://beian.miit.gov.cn
 # 网站LOG
 VUE_APP_LOG_URL =@/assets/logo/myhk.png
 
+# 存储桶配置
+VUE_APP_OBS_ACCESS_KEY_ID = K2UTJGIN7UTZJR2XMXYG
+# 存储桶配置
+VUE_APP_OBS_SECRET_ACCESS_KEY = sbyeNJLbcYmH6copxeFP9pAoksM4NIT9Zw4x0SRX
+# 存储桶配置
+VUE_APP_OBS_SERVER = https://obs.cn-north-4.myhuaweicloud.com
+# 存储桶配置
+VUE_APP_OBS_BUCKET = zkzh-hw079058881
+# 存储桶配置
+VUE_APP_COS_BUCKET = fs-1319721001
+# 存储桶配置
+VUE_APP_COS_REGION = ap-chongqing
+# 线路一地址
+VUE_APP_VIDEO_LINE_1 =
+# 线路二地址
+VUE_APP_VIDEO_LINE_2 = https://zkzhobs.ylrztop.com
+
+VUE_APP_LIVE_WS_URL = ws://127.0.0.1:7114/ws
+
+
 # 开发环境配置
 ENV = 'development'
 
@@ -26,5 +46,8 @@ VUE_APP_PATIENT_INFO = '客户信息'
 # 添加病人
 VUE_APP_ADD_PATIENT = '添加信息'
 
+#项目所属
+VUE_APP_PROJECT_FROM=dev
+
 #1、正常搜索下拉框 2、查询出200条数据,然后搜索这200条以内的
 VUE_APP_COURSE_COMPANY_NAME = 2

+ 3 - 0
.env.prod-bjczwh

@@ -19,5 +19,8 @@ VUE_APP_BASE_API = '/prod-api'
 #默认 1、会员 2、企微
 VUE_APP_COURSE_DEFAULT = 1
 
+#项目所属
+VUE_APP_PROJECT_FROM=bjczwh
+
 # 路由懒加载
 VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 3 - 0
.env.prod-bjyjb

@@ -18,5 +18,8 @@ VUE_APP_BASE_API = '/prod-api'
 #默认 1、会员 2、企微
 VUE_APP_COURSE_DEFAULT = 1
 
+#项目所属
+VUE_APP_PROJECT_FROM=bjyjb
+
 # 路由懒加载
 VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 45 - 0
.env.prod-bjzm

@@ -0,0 +1,45 @@
+# 页面标题
+VUE_APP_TITLE =北京卓美悦康销售端
+# 公司名称
+VUE_APP_COMPANY_NAME =北京卓美悦康
+# ICP备案号
+VUE_APP_ICP_RECORD =京ICP备2024068752号
+# ICP网站访问地址
+VUE_APP_ICP_URL =https://beian.miit.gov.cn
+# 网站LOG
+VUE_APP_LOG_URL =@/assets/logo/bjzmky.png
+
+# 存储桶配置
+VUE_APP_OBS_ACCESS_KEY_ID = K2UTJGIN7UTZJR2XMXYG
+# 存储桶配置
+VUE_APP_OBS_SECRET_ACCESS_KEY = sbyeNJLbcYmH6copxeFP9pAoksM4NIT9Zw4x0SRX
+# 存储桶配置
+VUE_APP_OBS_SERVER = https://bjzmobs.cn-north-4.myhuaweicloud.com
+# 存储桶配置
+VUE_APP_OBS_BUCKET = bjzm
+# 存储桶配置
+VUE_APP_COS_BUCKET = bjzmky-1323137866
+# 存储桶配置
+VUE_APP_COS_REGION = ap-chongqing
+# 线路一地址
+VUE_APP_VIDEO_LINE_1 = https://bjzmky-1323137866.cos.ap-chongqing.myqcloud.com
+# 线路二地址
+VUE_APP_VIDEO_LINE_2 = https://bjzmobs.ylrztop.com
+
+# 生产环境配置
+ENV = 'production'
+
+# FS管理系统/开发环境
+VUE_APP_BASE_API = '/prod-api'
+
+
+#默认 1、会员 2、企微
+VUE_APP_COURSE_DEFAULT = 1
+
+#项目所属
+VUE_APP_PROJECT_FROM=bjczwh
+
+# 路由懒加载
+VUE_CLI_BABEL_TRANSPILE_MODULES = true
+
+VUE_APP_LIVE_WS_URL = wss://ws.klbycp.com/ws

+ 3 - 0
.env.prod-bly

@@ -15,5 +15,8 @@ ENV = 'production'
 #FS管理系统/生产环境
 VUE_APP_BASE_API = '/prod-api'
 
+#项目所属
+VUE_APP_PROJECT_FROM=bly
+
 # 路由懒加载
 VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 3 - 0
.env.prod-bnkc

@@ -19,5 +19,8 @@ VUE_APP_BASE_API = '/prod-api'
 #默认 1、会员 2、企微
 VUE_APP_COURSE_DEFAULT = 1
 
+#项目所属
+VUE_APP_PROJECT_FROM=bnkc
+
 # 路由懒加载
 VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 3 - 0
.env.prod-cqtyt

@@ -18,5 +18,8 @@ VUE_APP_BASE_API = '/prod-api'
 #默认 1、会员 2、企微
 VUE_APP_COURSE_DEFAULT = 1
 
+#项目所属
+VUE_APP_PROJECT_FROM=cqtyt
+
 # 路由懒加载
 VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 3 - 0
.env.prod-cqxzt

@@ -18,5 +18,8 @@ VUE_APP_BASE_API = '/prod-api'
 #默认 1、会员 2、企微
 VUE_APP_COURSE_DEFAULT = 1
 
+#项目所属
+VUE_APP_PROJECT_FROM=cqxzt
+
 # 路由懒加载
 VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 3 - 0
.env.prod-czt

@@ -18,5 +18,8 @@ VUE_APP_BASE_API = '/prod-api'
 #默认 1、会员 2、企微
 VUE_APP_COURSE_DEFAULT = 2
 
+#项目所属
+VUE_APP_PROJECT_FROM=czt
+
 # 路由懒加载
 VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 3 - 0
.env.prod-ddgy

@@ -18,5 +18,8 @@ VUE_APP_BASE_API = '/prod-api'
 #默认 1、会员 2、企微
 VUE_APP_COURSE_DEFAULT = 1
 
+#项目所属
+VUE_APP_PROJECT_FROM=ddgy
+
 # 路由懒加载
 VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 4 - 0
.env.prod-drk

@@ -18,5 +18,9 @@ VUE_APP_BASE_API = '/prod-api'
 #默认 1、会员 2、企微
 VUE_APP_COURSE_DEFAULT = 1
 
+
+#项目所属
+VUE_APP_PROJECT_FROM=drk
+
 # 路由懒加载
 VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 4 - 0
.env.prod-fby

@@ -18,6 +18,10 @@ VUE_APP_BASE_API = '/prod-api'
 # 路由懒加载
 VUE_CLI_BABEL_TRANSPILE_MODULES = true
 
+
+#项目所属
+VUE_APP_PROJECT_FROM=fby
+
 #默认 1、会员 2、企微
 VUE_APP_COURSE_DEFAULT = 2
 

+ 4 - 0
.env.prod-hat

@@ -18,5 +18,9 @@ VUE_APP_BASE_API = '/prod-api'
 #默认 1、会员 2、企微
 VUE_APP_COURSE_DEFAULT = 2
 
+
+#项目所属
+VUE_APP_PROJECT_FROM=hat
+
 # 路由懒加载
 VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 3 - 0
.env.prod-hcl

@@ -18,5 +18,8 @@ VUE_APP_BASE_API = '/prod-api'
 #默认 1、会员 2、企微
 VUE_APP_COURSE_DEFAULT = 1
 
+#项目所属
+VUE_APP_PROJECT_FROM=hcl
+
 # 路由懒加载
 VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 4 - 0
.env.prod-hdt

@@ -18,5 +18,9 @@ VUE_APP_BASE_API = '/prod-api'
 #默认 1、会员 2、企微
 VUE_APP_COURSE_DEFAULT = 1
 
+
+#项目所属
+VUE_APP_PROJECT_FROM=hat
+
 # 路由懒加载
 VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 22 - 0
.env.prod-heyantang

@@ -0,0 +1,22 @@
+# 页面标题
+VUE_APP_TITLE =成都鹤颜堂健康管理
+# 公司名称
+VUE_APP_COMPANY_NAME =成都御养堂健康管理有限公司
+# ICP备案号
+VUE_APP_ICP_RECORD =蜀ICP备2024054506号-51
+# ICP网站访问地址
+VUE_APP_ICP_URL =https://beian.miit.gov.cn
+# 网站LOG
+VUE_APP_LOG_URL =@/assets/logo/cdhyt.jpg
+
+# 生产环境配置
+ENV = 'production'
+
+# FS管理系统/开发环境
+VUE_APP_BASE_API = '/prod-api'
+
+#默认 1、会员 2、企微
+VUE_APP_COURSE_DEFAULT = 1
+
+# 路由懒加载
+VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 3 - 0
.env.prod-hst

@@ -18,5 +18,8 @@ VUE_APP_BASE_API = '/prod-api'
 #默认 1、会员 2、企微
 VUE_APP_COURSE_DEFAULT = 2
 
+#项目所属
+VUE_APP_PROJECT_FROM=hst
+
 # 路由懒加载
 VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 4 - 0
.env.prod-hyt

@@ -18,5 +18,9 @@ VUE_APP_BASE_API = '/prod-api'
 #默认 1、会员 2、企微
 VUE_APP_COURSE_DEFAULT = 1
 
+
+#项目所属
+VUE_APP_PROJECT_FROM=hyt
+
 # 路由懒加载
 VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 3 - 0
.env.prod-hzyy

@@ -18,5 +18,8 @@ VUE_APP_BASE_API = '/prod-api'
 #默认 1、会员 2、企微
 VUE_APP_COURSE_DEFAULT = 2
 
+#项目所属
+VUE_APP_PROJECT_FROM=hzyy
+
 # 路由懒加载
 VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 4 - 0
.env.prod-jkj

@@ -15,5 +15,9 @@ ENV = 'production'
 # FS管理系统/开发环境
 VUE_APP_BASE_API = '/prod-api'
 
+
+#项目所属
+VUE_APP_PROJECT_FROM=jkj
+
 # 路由懒加载
 VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 4 - 1
.env.prod-jnlzjk

@@ -17,7 +17,10 @@ VUE_APP_BASE_API = '/prod-api'
 
 
 #默认 1、会员 2、企微
-VUE_APP_COURSE_DEFAULT = 1
+VUE_APP_COURSE_DEFAULT = 2
+
+#项目所属
+VUE_APP_PROJECT_FROM=jnlzjk
 
 # 路由懒加载
 VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 3 - 0
.env.prod-jnmy

@@ -18,5 +18,8 @@ VUE_APP_BASE_API = '/prod-api'
 #默认 1、会员 2、企微
 VUE_APP_COURSE_DEFAULT = 2
 
+#项目所属
+VUE_APP_PROJECT_FROM=jnmy
+
 # 路由懒加载
 VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 22 - 0
.env.prod-jnsyj

@@ -0,0 +1,22 @@
+# 页面标题
+VUE_APP_TITLE =互联网医院管理系统
+# 公司名称
+VUE_APP_COMPANY_NAME =济南顺亿景互联网医院有限公司
+# ICP备案号
+VUE_APP_ICP_RECORD =蜀ICP备2024052643号
+# ICP网站访问地址
+VUE_APP_ICP_URL =https://beian.miit.gov.cn
+# 网站LOG
+VUE_APP_LOG_URL =@/assets/logo/jnmy.png
+
+# 生产环境配置
+ENV = 'production'
+
+# FS管理系统/开发环境
+VUE_APP_BASE_API = '/prod-api'
+
+#默认 1、会员 2、企微
+VUE_APP_COURSE_DEFAULT = 2
+
+# 路由懒加载
+VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 4 - 0
.env.prod-jzzx

@@ -18,5 +18,9 @@ VUE_APP_BASE_API = '/prod-api'
 #默认 1、会员 2、企微
 VUE_APP_COURSE_DEFAULT = 2
 
+
+#项目所属
+VUE_APP_PROJECT_FROM=jzzx
+
 # 路由懒加载
 VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 4 - 0
.env.prod-knt

@@ -18,5 +18,9 @@ VUE_APP_BASE_API = '/prod-api'
 # 路由懒加载
 VUE_CLI_BABEL_TRANSPILE_MODULES = true
 
+
+#项目所属
+VUE_APP_PROJECT_FROM=knt
+
 #默认 1、会员 2、企微
 VUE_APP_COURSE_DEFAULT = 1

+ 26 - 0
.env.prod-knt2

@@ -0,0 +1,26 @@
+# 页面标题
+VUE_APP_TITLE = 康年堂SCRM销售端
+# 公司名称
+VUE_APP_COMPANY_NAME = 陕西康年堂医药连锁有限公司
+# ICP备案号
+VUE_APP_ICP_RECORD = 陕ICP备2023011686号-5
+# ICP网站访问地址
+VUE_APP_ICP_URL =https://beian.miit.gov.cn
+# 网站LOG
+VUE_APP_LOG_URL =@/assets/logo/knt.jpg
+
+# 生产环境配置
+ENV = 'production'
+
+#FS管理系统/生产环境
+VUE_APP_BASE_API = '/prod-api'
+
+# 路由懒加载
+VUE_CLI_BABEL_TRANSPILE_MODULES = true
+
+
+#项目所属
+VUE_APP_PROJECT_FROM=knt
+
+#默认 1、会员 2、企微
+VUE_APP_COURSE_DEFAULT = 1

+ 3 - 0
.env.prod-kyt

@@ -18,5 +18,8 @@ VUE_APP_BASE_API = '/prod-api'
 #默认 1、会员 2、企微
 VUE_APP_COURSE_DEFAULT = 2
 
+#项目所属
+VUE_APP_PROJECT_FROM=kyt
+
 # 路由懒加载
 VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 4 - 0
.env.prod-lmjy

@@ -18,5 +18,9 @@ VUE_APP_BASE_API = '/prod-api'
 #默认 1、会员 2、企微
 VUE_APP_COURSE_DEFAULT = 1
 
+
+#项目所属
+VUE_APP_PROJECT_FROM=lmjy
+
 # 路由懒加载
 VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 3 - 0
.env.prod-myhk

@@ -18,5 +18,8 @@ VUE_APP_BASE_API = '/prod-api'
 #默认 1、会员 2、企微
 VUE_APP_COURSE_DEFAULT = 2
 
+#项目所属
+VUE_APP_PROJECT_FROM=myhk
+
 # 路由懒加载
 VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 3 - 0
.env.prod-nmgyt

@@ -18,5 +18,8 @@ VUE_APP_BASE_API = '/prod-api'
 #默认 1、会员 2、企微
 VUE_APP_COURSE_DEFAULT = 2
 
+#项目所属
+VUE_APP_PROJECT_FROM=nmgyt
+
 # 路由懒加载
 VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 4 - 0
.env.prod-qdtst

@@ -18,5 +18,9 @@ VUE_APP_BASE_API = '/prod-api'
 #默认 1、会员 2、企微
 VUE_APP_COURSE_DEFAULT = 1
 
+
+#项目所属
+VUE_APP_PROJECT_FROM=qdtst
+
 # 路由懒加载
 VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 26 - 0
.env.prod-sczy

@@ -0,0 +1,26 @@
+# 页面标题
+VUE_APP_TITLE =致医SCRM销售端
+# 公司名称
+VUE_APP_COMPANY_NAME =云联融智互联网医院有限公司
+# ICP备案号
+VUE_APP_ICP_RECORD =渝ICP备2024031984号-1
+# ICP网站访问地址
+VUE_APP_ICP_URL =https://beian.miit.gov.cn
+# 网站LOG
+VUE_APP_LOG_URL =@/assets/logo/sczy.png
+
+# 生产环境配置
+ENV = 'production'
+
+# FS管理系统/开发环境
+VUE_APP_BASE_API = '/prod-api'
+
+#默认 1、会员 2、企微
+VUE_APP_COURSE_DEFAULT = 2
+
+
+#项目所属
+VUE_APP_PROJECT_FROM=sczy
+
+# 路由懒加载
+VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 4 - 0
.env.prod-sft

@@ -21,5 +21,9 @@ VUE_APP_COURSE_DEFAULT = 1
 # 路由懒加载
 VUE_CLI_BABEL_TRANSPILE_MODULES = true
 
+
+#项目所属
+VUE_APP_PROJECT_FROM=sft
+
 #1、正常搜索下拉框 2、查询出200条数据,然后搜索这200条以内的
 VUE_APP_COURSE_COMPANY_NAME = 2

+ 3 - 0
.env.prod-sxjz

@@ -18,5 +18,8 @@ VUE_APP_BASE_API = '/prod-api'
 #默认 1、会员 2、企微
 VUE_APP_COURSE_DEFAULT = 1
 
+#项目所属
+VUE_APP_PROJECT_FROM=sxjz
+
 # 路由懒加载
 VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 4 - 0
.env.prod-syysy

@@ -18,5 +18,9 @@ VUE_APP_BASE_API = '/prod-api'
 #默认 1、会员 2、企微
 VUE_APP_COURSE_DEFAULT = 1
 
+
+#项目所属
+VUE_APP_PROJECT_FROM=syysy
+
 # 路由懒加载
 VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 3 - 0
.env.prod-test

@@ -18,5 +18,8 @@ VUE_APP_BASE_API = '/prod-api'
 #默认 1、会员 2、企微
 VUE_APP_COURSE_DEFAULT = 1
 
+#项目所属
+VUE_APP_PROJECT_FROM=test
+
 # 路由懒加载
 VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 4 - 0
.env.prod-whhm

@@ -18,5 +18,9 @@ VUE_APP_BASE_API = '/prod-api'
 #默认 1、会员 2、企微
 VUE_APP_COURSE_DEFAULT = 1
 
+
+#项目所属
+VUE_APP_PROJECT_FROM=whhm
+
 # 路由懒加载
 VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 3 - 0
.env.prod-xfk

@@ -18,5 +18,8 @@ VUE_APP_BASE_API = '/prod-api'
 #默认 1、会员 2、企微
 VUE_APP_COURSE_DEFAULT = 2
 
+#项目所属
+VUE_APP_PROJECT_FROM=xfk
+
 # 路由懒加载
 VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 4 - 0
.env.prod-ylrz

@@ -15,5 +15,9 @@ ENV = 'production'
 # FS管理系统/开发环境
 VUE_APP_BASE_API = '/prod-api'
 
+
+#项目所属
+VUE_APP_PROJECT_FROM=ylrz
+
 # 路由懒加载
 VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 26 - 0
.env.prod-yxj

@@ -0,0 +1,26 @@
+# 页面标题
+VUE_APP_TITLE =易行健SCRM销售端
+# 公司名称
+VUE_APP_COMPANY_NAME =云联融智互联网医院有限公司
+# ICP备案号
+VUE_APP_ICP_RECORD =渝ICP备2024031984号-1
+# ICP网站访问地址
+VUE_APP_ICP_URL =https://beian.miit.gov.cn
+# 网站LOG
+VUE_APP_LOG_URL =@/assets/logo/yxj.jpg
+
+# 生产环境配置
+ENV = 'production'
+
+# FS管理系统/开发环境
+VUE_APP_BASE_API = '/prod-api'
+
+#默认 1、会员 2、企微
+VUE_APP_COURSE_DEFAULT = 2
+
+
+#项目所属
+VUE_APP_PROJECT_FROM=hat
+
+# 路由懒加载
+VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 4 - 0
.env.prod-yzt

@@ -18,5 +18,9 @@ VUE_APP_BASE_API = '/prod-api'
 #默认 1、会员 2、企微
 VUE_APP_COURSE_DEFAULT = 2
 
+
+#项目所属
+VUE_APP_PROJECT_FROM=yzt
+
 # 路由懒加载
 VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 3 - 0
.env.prod-zkzh

@@ -18,5 +18,8 @@ VUE_APP_BASE_API = '/prod-api'
 # 路由懒加载
 VUE_CLI_BABEL_TRANSPILE_MODULES = true
 
+#项目所属
+VUE_APP_PROJECT_FROM=zkzh
+
 #默认 1、会员 2、企微
 VUE_APP_COURSE_DEFAULT = 1

+ 3 - 0
.env.prod-zsjk

@@ -18,5 +18,8 @@ VUE_APP_BASE_API = '/prod-api'
 #默认 1、会员 2、企微
 VUE_APP_COURSE_DEFAULT = 2
 
+#项目所属
+VUE_APP_PROJECT_FROM=zsjk
+
 # 路由懒加载
 VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 33 - 5
.env.production

@@ -1,11 +1,39 @@
 # 页面标题
-VUE_APP_TITLE =互联网医院管理系统
-VUE_APP_COMPANY_NAME =重庆云联融智科技有限公司
-VUE_APP_ICP_RECORD =蜀ICP备2023036719号
+VUE_APP_TITLE = 互联网医院管理系统
+# 公司名称
+VUE_APP_COMPANY_NAME = 重庆云联融智科技有限公司
+# ICP备案号
+VUE_APP_ICP_RECORD = 蜀ICP备2023036719号
+# ICP网站访问地址
 VUE_APP_ICP_URL =https://beian.miit.gov.cn
+# 网站LOG
+VUE_APP_LOG_URL =@/assets/logo/myhk.png
 
-# 生产环境配置
+# 存储桶配置
+VUE_APP_OBS_ACCESS_KEY_ID = K2UTJGIN7UTZJR2XMXYG
+# 存储桶配置
+VUE_APP_OBS_SECRET_ACCESS_KEY = sbyeNJLbcYmH6copxeFP9pAoksM4NIT9Zw4x0SRX
+# 存储桶配置
+VUE_APP_OBS_SERVER = https://obs.cn-north-4.myhuaweicloud.com
+# 存储桶配置
+VUE_APP_OBS_BUCKET = zkzh-hw079058881
+# 存储桶配置
+VUE_APP_COS_BUCKET = fs-1319721001
+# 存储桶配置
+VUE_APP_COS_REGION = ap-chongqing
+# 线路一地址
+VUE_APP_VIDEO_LINE_1 = https://cos.his.cdwjyyh.com
+# 线路二地址
+VUE_APP_VIDEO_LINE_2 = https://zkzhobs.ylrztop.com
+
+# 开发环境配置
 ENV = 'production'
 
-#FS管理系统/生产环境
+# FS管理系统/开发环境
 VUE_APP_BASE_API = '/prod-api'
+
+# 路由懒加载
+VUE_CLI_BABEL_TRANSPILE_MODULES = true
+
+# 直播webSocket地址
+VUE_APP_LIVE_WS_URL = ws://127.0.0.1:7014/ws/

+ 10 - 0
package.json

@@ -17,6 +17,7 @@
     "build:prod-sxjz": "vue-cli-service build --mode prod-sxjz",
     "build:prod-jnmy": "vue-cli-service build --mode prod-jnmy",
     "build:prod-knt": "vue-cli-service build --mode prod-knt",
+    "build:prod-knt2": "vue-cli-service build --mode prod-knt2",
     "build:prod-hdt": "vue-cli-service build --mode prod-hdt",
     "build:prod-yzt": "vue-cli-service build --mode prod-yzt",
     "build:prod-xfk": "vue-cli-service build --mode prod-xfk",
@@ -31,6 +32,7 @@
     "build:prod-zkzh": "vue-cli-service build --mode prod-zkzh",
     "build:prod-nmgyt": "vue-cli-service build --mode prod-nmgyt",
     "build:prod-cqtyt": "vue-cli-service build --mode prod-cqtyt",
+    "build:prod-heyantang": "vue-cli-service build --mode prod-heyantang",
     "build:prod-bly": "vue-cli-service build --mode prod-bly",
     "build:prod-qdtst": "vue-cli-service build --mode prod-qdtst",
     "build:prod-bjczwh": "vue-cli-service build --mode prod-bjczwh",
@@ -44,8 +46,12 @@
     "build:prod-hyt": "vue-cli-service build --mode prod-hyt",
     "build:prod-hst": "vue-cli-service build --mode prod-hst",
     "build:prod-hat": "vue-cli-service build --mode prod-hat",
+    "build:prod-sczy": "vue-cli-service build --mode prod-sczy",
     "build:prod-ddgy": "vue-cli-service build --mode prod-ddgy",
     "build:prod-czt": "vue-cli-service build --mode prod-czt",
+    "build:prod-jnsyj": "vue-cli-service build --mode prod-jnsyj",
+    "build:prod-yxj": "vue-cli-service build --mode prod-yxj",
+    "build:prod-bjzm": "vue-cli-service build --mode prod-bjzm",
     "preview": "node build/index.js --preview",
     "lint": "eslint --ext .js,.vue src",
     "test:unit": "jest --clearCache && vue-cli-service test:unit",
@@ -82,12 +88,15 @@
     "clipboard": "2.0.4",
     "compression-webpack-plugin": "^5.0.1",
     "core-js": "3.6.5",
+    "cos-js-sdk-v5": "^1.10.1",
     "dayjs": "^1.11.13",
     "echarts": "4.2.1",
     "element-ui": "2.15.5",
+    "esdk-obs-browserjs": "^3.25.6",
     "file-saver": "2.0.1",
     "form-making": "^1.2.9",
     "fuse.js": "^3.4.4",
+    "hls.js": "^1.6.13",
     "js-beautify": "1.10.2",
     "js-cookie": "2.2.0",
     "jsencrypt": "3.0.0-rc.1",
@@ -104,6 +113,7 @@
     "stylus": "^0.54.7",
     "stylus-loader": "^3.0.2",
     "v-clipboard": "^2.2.3",
+    "vod-js-sdk-v6": "^1.7.1-beta.1",
     "vue": "2.6.10",
     "vue-clipboard2": "^0.3.1",
     "vue-count-to": "1.0.13",

+ 9 - 1
src/api/common.js

@@ -14,4 +14,12 @@ export function getTask(taskId) {
     method: 'get'
   })
 }
- 
+
+export function getTmpSecretKey(query) {
+  return request({
+    url: '/common/getTmpSecretKey',
+    method: 'get',
+    params:query
+  })
+
+}

+ 16 - 0
src/api/company/companyConfig.js

@@ -35,4 +35,20 @@ export function configUserCheck(data) {
   })
 }
 
+export function getCompanyMiniAppList() {
+  return request({
+    url: '/company/companyConfig/getCompanyMiniAppList',
+    method: 'get'
+  })
+}
+
+export function saveCompanyMiniApp(data) {
+  return request({
+    url: '/company/companyConfig/saveCompanyMiniApp',
+    method: 'post',
+    data: data
+  })
+}
+
+
 

+ 53 - 0
src/api/company/companyUser.js

@@ -43,6 +43,23 @@ export function getQwAllUserList(id) {
   })
 }
 
+
+export function getQwMyUserList(id) {
+  return request({
+    url: '/company/user/getQwMyUserList/'+id,
+    method: 'get'
+  })
+}
+
+export function getQwDeptUserList(id) {
+  return request({
+    url: '/company/user/getQwDeptUserList/'+id,
+    method: 'get'
+  })
+}
+
+
+
 export function getUserListByDeptId(query) {
   return request({
     url: '/company/user/getUserListByDeptId',
@@ -235,6 +252,16 @@ export function getCompanyUserListLikeName(params) {
   })
 }
 
+// 根据名模糊查询用户列表
+export function getCompanyUserListLikeNameByDept(params) {
+  return request({
+    url: '/company/user/getCompanyUserListLikeNameDept',
+    method: 'get',
+    params: params
+  })
+}
+
+
 // 查询企业员工信息列表
 export function listCompanyUser(query) {
   return request({
@@ -307,3 +334,29 @@ export function updateBatchUserRoles(data) {
     data: data
   })
 }
+
+// 根据手机号码查询fs_user(完全匹配)
+export function queryFsUserByPhone(phone) {
+  return request({
+    url: '/company/user/fsUser/queryByPhone',
+    method: 'get',
+    params: { phone: phone }
+  })
+}
+
+// 批量绑定用户到员工
+export function batchBindCompanyUserId(data) {
+  return request({
+    url: '/company/user/batchBindCompanyUserId',
+    method: 'post',
+    data: data
+  })
+}
+
+// 查询已绑定的用户
+export function getBoundUsers(companyUserId) {
+  return request({
+    url: '/company/user/getBoundUsers/' + companyUserId,
+    method: 'get'
+  })
+}

+ 9 - 0
src/api/company/redPacket.js

@@ -0,0 +1,9 @@
+import request from '@/utils/request'
+
+export function redPacketInfo(query) {
+  return request({
+    url: '/his/redPacket/info',
+    method: 'get',
+    params: query
+  })
+}

+ 8 - 0
src/api/course/courseFinishTemp.js

@@ -51,3 +51,11 @@ export function exportCourseFinishTemp(query) {
     params: query
   })
 }
+
+export function updateStatusBatch(data) {
+  return request({
+    url: '/course/courseFinishTemp/updateStatusBatch',
+    method: 'post',
+    data: data
+  })
+}

+ 37 - 1
src/api/course/courseFinishTempParent.js

@@ -9,6 +9,24 @@ export function listCourseFinishTempParent(query) {
   })
 }
 
+export function myListCourseFinishTempParent(query) {
+  return request({
+    url: '/course/courseFinishTempParent/myList',
+    method: 'get',
+    params: query
+  })
+}
+
+
+export function deptListCourseFinishTempParent(query) {
+  return request({
+    url: '/course/courseFinishTempParent/deptList',
+    method: 'get',
+    params: query
+  })
+}
+
+
 // 查询完课模板详细
 export function getCourseFinishTempParent(id) {
   return request({
@@ -50,4 +68,22 @@ export function exportCourseFinishTempParent(query) {
     method: 'get',
     params: query
   })
-}
+}
+
+export function myExportCourseFinishTempParent(query) {
+  return request({
+    url: '/course/courseFinishTempParent/myExport',
+    method: 'get',
+    params: query
+  })
+}
+
+
+
+export function deptExportCourseFinishTempParent(query) {
+  return request({
+    url: '/course/courseFinishTempParent/deptExport',
+    method: 'get',
+    params: query
+  })
+}

+ 14 - 0
src/api/course/userCoursePeriod.js

@@ -8,6 +8,14 @@ export function listPeriod(query) {
     params: query
   })
 }
+// 获取营期名称列表
+export function listPeriodLabel(query) {
+  return request({
+    url: '/course/period/listLabel',
+    method: 'get',
+    params: query
+  })
+}
 // 查询会员营期列表
 export function getDays(query) {
   return request({
@@ -175,6 +183,12 @@ export function updatePeriod(data) {
     method: 'put',
     data: data
   })
+}export function updatePeriodIsNeedRegisterMember(data) {
+  return request({
+    url: '/course/period/editIsNeedRegisterMember',
+    method: 'put',
+    data: data
+  })
 }
 
 // 根据营期id获取公司红包金额列表

+ 9 - 0
src/api/course/userCourseVideo.js

@@ -39,6 +39,15 @@ export function addUserCourseVideo(data) {
   })
 }
 
+// 更新课程小节
+export function updateUserCourseVideoUpdate(data) {
+  return request({
+    url: '/course/userCourseVideo/update',
+    method: 'post',
+    data: data
+  })
+}
+
 // 修改课堂视频
 export function updateUserCourseVideo(data) {
   return request({

+ 1 - 7
src/api/hisStore/storeOrder.js

@@ -85,13 +85,7 @@ export function updateStoreOrder(data) {
     data: data
   })
 }
-export function updateAddressErpFsStoreOrder(data) {
-  return request({
-    url: '/store/store/storeOrder/updateAddressErpFsStoreOrder',
-    method: 'put',
-    data: data
-  })
-}
+
 // 删除订单
 export function delStoreOrder(id) {
   return request({

+ 117 - 0
src/api/hisStore/user.js

@@ -0,0 +1,117 @@
+import request from '@/utils/request'
+
+// 查询用户列表
+export function listUser(query) {
+  return request({
+    url: '/store/store/user/list',
+    method: 'get',
+    params: query
+  })
+}
+export function listUserByProject(query) {
+  return request({
+    url: '/store/store/user/listProject',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询用户详细
+export function getUser(userId) {
+  return request({
+    url: '/store/store/user/' + userId,
+    method: 'get'
+  })
+}
+
+// 查询用户详细
+export function queryUserVo(userId) {
+  return request({
+    url: '/store/store/user/queryvo/' + userId,
+    method: 'get'
+  })
+}
+
+// 新增用户
+export function addUser(data) {
+  return request({
+    url: '/store/store/user',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改用户
+export function updateUser(data) {
+  return request({
+    url: '/store/store/user',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除用户
+export function delUser(userId) {
+  return request({
+    url: '/store/store/user/' + userId,
+    method: 'delete'
+  })
+}
+// 删除用户
+export function delUserCompanyUser(id) {
+  return request({
+    url: '/store/store/user/delete/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出用户
+export function exportUser(query) {
+  return request({
+    url: '/store/store/user/export',
+    method: 'get',
+    params: query
+  })
+}
+
+export function getUserList(query) {
+  return request({
+    url: '/store/store/user/getUserList',
+    method: 'get',
+    params: query
+  })
+}
+
+export function listBySearch(query) {
+  return request({
+    url: '/store/store/user/listBySearch',
+    method: 'get',
+    params: query
+  })
+}
+
+export function getAllUserListLimit(query) {
+  return request({
+    url: '/store/company/companyUser/getAllUserListLimit',
+    method: 'get',
+    params: query
+  })
+}
+
+// 获取小黑屋用户列表
+export function darkRoomList(query) {
+  return request({
+    url: '/store/store/user/darkRoomList',
+    method: 'get',
+    params: query
+  })
+}
+
+// 批量解禁
+export function enabledUsers(data) {
+  return request({
+    url: '/store/store/user/enabledUsers',
+    method: 'post',
+    data: data
+  })
+}

+ 61 - 0
src/api/hisStore/userAddress.js

@@ -0,0 +1,61 @@
+import request from '@/utils/request'
+
+// 查询用户地址列表
+export function listUserAddress(query) {
+  return request({
+    url: '/store/store/userAddress/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询用户地址详细
+export function getUserAddress(id) {
+  return request({
+    url: '/store/store/userAddress/' + id,
+    method: 'get'
+  })
+}
+
+// 新增用户地址
+export function addUserAddress(data) {
+  return request({
+    url: '/store/store/userAddress',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改用户地址
+export function updateUserAddress(data) {
+  return request({
+    url: '/store/store/userAddress',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除用户地址
+export function delUserAddress(id) {
+  return request({
+    url: '/store/store/userAddress/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出用户地址
+export function exportUserAddress(query) {
+  return request({
+    url: '/store/store/userAddress/export',
+    method: 'get',
+    params: query
+  })
+}
+
+export function getAddressList(query) {
+  return request({
+    url: '/store/store/userAddress/getAddressList',
+    method: 'get',
+    params: query
+  })
+}

+ 62 - 0
src/api/live/gift.js

@@ -0,0 +1,62 @@
+import request from '@/utils/request'
+
+// 查询直播间礼物配置列表
+export function listGift(query) {
+  return request({
+    url: '/live/gift/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询直播间礼物配置详细
+export function getGift(giftId) {
+  return request({
+    url: '/live/gift/' + giftId,
+    method: 'get'
+  })
+}
+
+// 新增直播间礼物配置
+export function addGift(data) {
+  return request({
+    url: '/live/gift',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改直播间礼物配置
+export function updateGift(data) {
+  return request({
+    url: '/live/gift',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除直播间礼物配置
+export function delGift(giftId) {
+  return request({
+    url: '/live/gift/' + giftId,
+    method: 'delete'
+  })
+}
+
+// 导出直播间礼物配置
+export function exportGift(query) {
+  return request({
+    url: '/live/gift/export',
+    method: 'get',
+    params: query
+  })
+}
+
+
+// 查询直播间礼物配置详细
+export function getDictData(dictType) {
+  return request({
+    url: '/system/dict/data/type/' + dictType,
+    method: 'get'
+  })
+}

+ 141 - 0
src/api/live/live.js

@@ -0,0 +1,141 @@
+import request from '@/utils/request'
+
+// 查询直播列表
+export function listLive(query) {
+  return request({
+    url: '/live/live/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询直播详细
+export function getLive(liveId) {
+  return request({
+    url: '/live/live/' + liveId,
+    method: 'get'
+  })
+}
+
+// 新增直播
+export function addLive(data) {
+  return request({
+    url: '/live/live',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改直播
+export function updateLive(data) {
+  return request({
+    url: '/live/live',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除直播
+export function delLive(liveId) {
+  return request({
+    url: '/live/live/' + liveId,
+    method: 'delete'
+  })
+}
+
+// 导出直播
+export function exportLive(query) {
+  return request({
+    url: '/live/live/export',
+    method: 'get',
+    params: query
+  })
+}
+// 查询未结束的直播间
+export function listToLiveNoEnd() {
+  return request({
+    url: '/live/live/listToLiveNoEnd',
+    method: 'get'
+  })
+}
+
+export function selectLiveToStudent(query) {
+  return request({
+    url: '/live/live/selectLiveToStudent?pageNum=' + query.pageNum + '&pageSize=' + query.pageSize,
+    method: 'post',
+    data: query
+  })
+}
+
+export function selectCompanyTalent(query) {
+  return request({
+    url: '/company/user/selectCompanyTalent/' + query,
+    method: 'get'
+  })
+}
+
+export function getLivingUrl(liveId) {
+  return request({
+    url: '/live/live/living/' + liveId,
+    method: 'get'
+  })
+}
+
+export function verifyIdInfo(data) {
+  return request({
+    url: '/live/live/verifyIdInfo',
+    method: 'post',
+    data: data
+  })
+}
+//上下架视频
+export function handleShelfOrUn(data) {
+  return request({
+    url: '/live/live/handleShelfOrUn',
+    method: 'post',
+    data: data
+  })
+}
+
+
+export function handleDeleteSelected(data) {
+  return request({
+    url: '/live/live/handleDeleteSelected',
+    method: 'post',
+    data: data
+  })
+}
+
+// 结束录播直播间
+export function finishLive(data) {
+  return request({
+    url: '/live/live/finishLive',
+    method: 'get',
+    params: data
+  })
+}
+// 复制录播直播间
+export function copyLive(data) {
+  return request({
+    url: '/live/live/copyLive',
+    method: 'get',
+    params: data
+  })
+}
+
+// 结束录播直播间
+export function startLive(data) {
+  return request({
+    url: '/live/live/startLive',
+    method: 'get',
+    params: data
+  })
+}
+// 生成直播间小程序二维码
+export function generateCode(data) {
+  return request({
+    url: '/live/live/getWxaCodeUnLimit',
+    method: 'get',
+    params: data
+  })
+}

+ 77 - 0
src/api/live/liveAfterSales.js

@@ -0,0 +1,77 @@
+import request from '@/utils/request'
+
+// 查询售后记录列表
+export function listLiveAfterSales(query) {
+  return request({
+    url: '/live/liveAfterSales/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询售后记录详细
+export function getLiveAfterSales(id) {
+  return request({
+    url: '/live/liveAfterSales/' + id,
+    method: 'get'
+  })
+}
+
+// 新增售后记录
+export function addLiveAfterSales(data) {
+  return request({
+    url: '/live/liveAfterSales',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改售后记录
+export function updateLiveAfterSales(data) {
+  return request({
+    url: '/live/liveAfterSales',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除售后记录
+export function delLiveAfterSales(id) {
+  return request({
+    url: '/live/liveAfterSales/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出售后记录
+export function exportLiveAfterSales(query) {
+  return request({
+    url: '/live/liveAfterSales/export',
+    method: 'get',
+    params: query
+  })
+}
+
+export function cancel(data) {
+  return request({
+    url: '/live/liveAfterSales/cancel',
+    method: 'post',
+    data: data
+  })
+}
+
+export function refund(data) {
+  return request({
+    url: '/live/liveAfterSales/refund',
+    method: 'post',
+    data: data
+  })
+}
+
+export function audit(data) {
+  return request({
+    url: '/live/liveAfterSales/audit',
+    method: 'post',
+    data: data
+  })
+}

+ 53 - 0
src/api/live/liveAnchor.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询主播列表
+export function listLiveAnchor(query) {
+  return request({
+    url: '/live/liveAnchor/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询主播详细
+export function getLiveAnchor(anchorId) {
+  return request({
+    url: '/live/liveAnchor/' + anchorId,
+    method: 'get'
+  })
+}
+
+// 新增主播
+export function addLiveAnchor(data) {
+  return request({
+    url: '/live/liveAnchor',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改主播
+export function updateLiveAnchor(data) {
+  return request({
+    url: '/live/liveAnchor',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除主播
+export function delLiveAnchor(anchorId) {
+  return request({
+    url: '/live/liveAnchor/' + anchorId,
+    method: 'delete'
+  })
+}
+
+// 导出主播
+export function exportLiveAnchor(query) {
+  return request({
+    url: '/live/liveAnchor/export',
+    method: 'get',
+    params: query
+  })
+}

+ 137 - 0
src/api/live/liveCoupon.js

@@ -0,0 +1,137 @@
+import request from '@/utils/request'
+
+// 查询优惠券列表
+export function listStoreCoupon(query) {
+  return request({
+    url: '/live/coupon/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询优惠券详细
+export function getStoreCoupon(couponId) {
+  return request({
+    url: '/live/coupon/' + couponId,
+    method: 'get'
+  })
+}
+
+// 新增优惠券
+export function addStoreCoupon(data) {
+  return request({
+    url: '/live/coupon',
+    method: 'post',
+    data: data
+  })
+}
+export function publishCoupon(data) {
+  return request({
+    url: '/live/coupon/publish',
+    method: 'post',
+    data: data
+  })
+}
+
+export function batchPublishCoupon(data) {
+  return request({
+    url: '/live/coupon/batchPublish',
+    method: 'post',
+    data: data
+  })
+}
+
+
+
+// 修改优惠券
+export function updateStoreCoupon(data) {
+  return request({
+    url: '/live/coupon',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除优惠券
+export function delStoreCoupon(couponId) {
+  return request({
+    url: '/live/coupon/' + couponId,
+    method: 'delete'
+  })
+}
+
+// 导出优惠券
+export function exportStoreCoupon(query) {
+  return request({
+    url: '/live/coupon/export',
+    method: 'get',
+    params: query
+  })
+}
+
+export function listLiveCoupon(query) {
+  return request({
+    url: '/live/coupon/listLiveCoupon',
+    method: 'get',
+    params: query
+  })
+}
+
+export function listCoupon(query) {
+  return request({
+    url: '/live/coupon/listCoupon',
+    method: 'get',
+    params: query
+  })
+}
+export function addLiveCoupon(data) {
+  return request({
+    url: '/live/coupon/addLiveCoupon',
+    method: 'post',
+    data: data
+  })
+}
+
+export function handleDeleteSelected(data) {
+  return request({
+    url: '/live/coupon/handleDeleteSelected',
+    method: 'post',
+    data: data
+  })
+}
+
+export function handleIsShowChange(data) {
+  return request({
+    url: '/live/coupon/handleIsShowChange',
+    method: 'post',
+    data: data
+  })
+}
+
+// 删除直播商品
+export function delLiveCoupon(data) {
+  return request({
+    url: '/live/coupon/delLiveCoupon',
+    method: 'post',
+    data: data
+  })
+}
+// 删除直播商品
+export function updateLiveCouponBind(data) {
+  return request({
+    url: '/live/coupon/updateLiveCouponBind',
+    method: 'post',
+    data: data
+  })
+}
+
+// 查询直播抽奖配置列表  未开启
+export function listLiveCouponOn(query) {
+  return request({
+    url: '/live/coupon/listOn',
+    method: 'get',
+    params: query
+  })
+}
+
+

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

@@ -0,0 +1,61 @@
+import request from '@/utils/request'
+export function recentLive() {
+  return request({
+    url: '/liveData/liveData/recentLive',
+    method: 'get',
+  })
+}
+
+export function liveTop(query) {
+  return request({
+    url: '/liveData/liveData/getLiveTop',
+    method: 'get',
+    params: query
+  })
+}
+export function getTrendData(queryParams) {
+  return request({
+    url: '/liveData/liveData/getTrendData',
+    method: 'post',
+    data: queryParams
+  })
+}
+
+export function columns() {
+  return request({
+    url: '/liveData/liveData/columns',
+    method: 'get',
+  })
+}
+
+
+export function updateColumns(columns) {
+  return request({
+    url: '/liveData/liveData/updateColumns',
+    method: 'post',
+    data:columns,
+  })
+}
+
+export function queryStudentData(query) {
+  return request({
+    url: '/live/studentData/queryStudentData',
+    method: 'post',
+    data:query,
+  })
+}
+
+export function dashboardData(liveId) {
+  return request({
+    url: '/liveData/liveData/dashboardData' + '?liveId=' +liveId,
+    method: 'get'
+  })
+}
+export function listLiveData(data) {
+  return request({
+    url: '/liveData/liveData/listLiveData',
+    method: 'post',
+    data:data,
+  })
+}
+

+ 96 - 0
src/api/live/liveGoods.js

@@ -0,0 +1,96 @@
+import request from '@/utils/request'
+
+// 查询直播商品列表
+export function listLiveGoods(query) {
+  return request({
+    url: '/live/liveGoods/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询直播商品详细
+export function getLiveGoods(goodsId) {
+  return request({
+    url: '/live/liveGoods/' + goodsId,
+    method: 'get'
+  })
+}
+
+// 新增直播商品
+export function addLiveGoods(data) {
+  return request({
+    url: '/live/liveGoods',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改直播商品
+export function updateLiveGoods(data) {
+  return request({
+    url: '/live/liveGoods',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除直播商品
+export function delLiveGoods(goodsId) {
+  return request({
+    url: '/live/liveGoods/' + goodsId,
+    method: 'delete'
+  })
+}
+
+// 导出直播商品
+export function exportLiveGoods(query) {
+  return request({
+    url: '/live/liveGoods/export',
+    method: 'get',
+    params: query
+  })
+}
+
+// 导出直播商品
+export function listStoreProduct(data) {
+  return request({
+    url: '/live/liveGoods/liveList',
+    method: 'get',
+    params: data
+  })
+}
+
+//上下架商品
+export function handleShelfOrUn(data) {
+  return request({
+    url: '/live/liveGoods/handleShelfOrUn',
+    method: 'post',
+    data: data
+  })
+}
+
+
+export function handleDeleteSelected(data) {
+  return request({
+    url: '/live/liveGoods/handleDeleteSelected',
+    method: 'post',
+    data: data
+  })
+}
+
+export function handleIsShowChange(data) {
+  return request({
+    url: '/live/liveGoods/handleIsShowChange',
+    method: 'post',
+    data: data
+  })
+}
+export function updateGoodsStock(data) {
+  return request({
+    url: '/live/liveGoods',
+    method: 'put',
+    data: data
+  })
+}
+

+ 62 - 0
src/api/live/liveLotteryConf.js

@@ -0,0 +1,62 @@
+import request from '@/utils/request'
+
+// 查询直播抽奖配置列表
+export function listLiveLotteryConf(query) {
+  return request({
+    url: '/live/liveLotteryConf/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询直播抽奖配置详细
+export function getLiveLotteryConf(lotteryId) {
+  return request({
+    url: '/live/liveLotteryConf/' + lotteryId,
+    method: 'get'
+  })
+}
+
+// 新增直播抽奖配置
+export function addLiveLotteryConf(data) {
+  return request({
+    url: '/live/liveLotteryConf',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改直播抽奖配置
+export function updateLiveLotteryConf(data) {
+  return request({
+    url: '/live/liveLotteryConf',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除直播抽奖配置
+export function delLiveLotteryConf(lotteryId) {
+  return request({
+    url: '/live/liveLotteryConf/' + lotteryId,
+    method: 'delete'
+  })
+}
+
+// 导出直播抽奖配置
+export function exportLiveLotteryConf(query) {
+  return request({
+    url: '/live/liveLotteryConf/export',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询直播抽奖配置列表  未开启
+export function listLiveLotteryConfOn(query) {
+  return request({
+    url: '/live/liveLotteryConf/listOn',
+    method: 'get',
+    params: query
+  })
+}

+ 61 - 0
src/api/live/liveLotteryProductConf.js

@@ -0,0 +1,61 @@
+import request from '@/utils/request'
+
+// 查询直播抽奖记录列表
+export function listLiveLotteryProductConf(query) {
+  return request({
+    url: '/live/liveLotteryProductConf/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询直播抽奖记录详细
+export function getLiveLotteryProductConf(id) {
+  return request({
+    url: '/live/liveLotteryProductConf/' + id,
+    method: 'get'
+  })
+}
+
+//查询抽奖商品列表
+export function listStoreProduct(query) {
+  return request({
+    url: '/live/liveLotteryConf/getGoods/'+query,
+    method: 'get'
+  })
+}
+
+// 新增直播抽奖记录
+export function addLiveLotteryProductConf(data) {
+  return request({
+    url: '/live/liveLotteryProductConf',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改直播抽奖记录
+export function updateLiveLotteryProductConf(data) {
+  return request({
+    url: '/live/liveLotteryConf/product',
+    method: 'post',
+    data: data
+  })
+}
+
+// 删除直播抽奖记录
+export function delLiveLotteryProductConf(id) {
+  return request({
+    url: '/live/liveLotteryProductConf/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出直播抽奖记录
+export function exportLiveLotteryProductConf(query) {
+  return request({
+    url: '/live/liveLotteryProductConf/export',
+    method: 'get',
+    params: query
+  })
+}

+ 62 - 0
src/api/live/liveMsg.js

@@ -0,0 +1,62 @@
+import request from '@/utils/request'
+
+// 查询直播讨论列表
+export function listLiveMsg(query) {
+  return request({
+    url: '/live/liveMsg/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询直播讨论列表
+export function listLiveSingleMsg(query) {
+  return request({
+    url: '/live/liveMsg/singleList',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询直播讨论详细
+export function getLiveMsg(msgId) {
+  return request({
+    url: '/live/liveMsg/' + msgId,
+    method: 'get'
+  })
+}
+
+// 新增直播讨论
+export function addLiveMsg(data) {
+  return request({
+    url: '/live/liveMsg',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改直播讨论
+export function updateLiveMsg(data) {
+  return request({
+    url: '/live/liveMsg',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除直播讨论
+export function delLiveMsg(msgId) {
+  return request({
+    url: '/live/liveMsg/' + msgId,
+    method: 'delete'
+  })
+}
+
+// 导出直播讨论
+export function exportLiveMsg(query) {
+  return request({
+    url: '/live/liveMsg/export',
+    method: 'get',
+    params: query
+  })
+}

+ 168 - 0
src/api/live/liveOrder.js

@@ -0,0 +1,168 @@
+import request from '@/utils/request'
+
+// 查询订单列表
+export function listLiveOrder(query) {
+  return request({
+    url: '/live/liveOrder/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询订单详细
+export function getLiveOrder(orderId) {
+  return request({
+    url: '/live/liveOrder/info/' + orderId,
+    method: 'get'
+  })
+}
+
+
+// 查询订单列表
+export function listLiveOrderZm(query) {
+  return request({
+    url: '/live/liveOrder/listZm',
+    method: 'get',
+    params: query
+  })
+}
+
+// 导出订单
+export function exportLiveOrderZm(query) {
+  return request({
+    url: '/live/liveOrder/exportZm',
+    method: 'get',
+    params: query
+  })
+}
+
+// 新增订单
+export function addLiveOrder(data) {
+  return request({
+    url: '/live/liveOrder',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改订单
+export function updateLiveOrder(data) {
+  return request({
+    url: '/live/liveOrder/update',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除订单
+export function delLiveOrder(orderId) {
+  return request({
+    url: '/live/liveOrder/' + orderId,
+    method: 'delete'
+  })
+}
+
+// 导出订单
+export function exportLiveOrder(query) {
+  return request({
+    url: '/live/liveOrder/export',
+    method: 'get',
+    params: query
+  })
+}
+
+// 获取表格 时间粒度
+export function getLiveOrderTimeGranularity(query) {
+  return request({
+    url: '/live/liveOrder/getLiveOrderTimeGranularity',
+    method: 'get',
+    params: query
+  })
+}
+
+// 同步快递信息
+export function syncExpress(orderId) {
+  return request({
+    url: '/live/liveOrder/syncExpress/' + orderId,
+    method: 'get'
+  })
+}
+
+
+export function getExpress(orderId) {
+  return request({
+    url: '/live/liveOrder/getExpress/' + orderId,
+    method: 'get'
+  })
+}
+
+export function updateErp(data) {
+  return request({
+    url: '/live/liveOrder/updateErpOrder',
+    method: 'post',
+    data: data
+  })
+}
+
+export function listOrderitem(orderId) {
+  return request({
+    url: '/live/liveOrder/ltemlist/' + orderId,
+    method: 'get'
+  })
+}
+
+export function tuiOrder(data) {
+  return request({
+    url: '/live/liveOrder/tuiOrder',
+    method: 'put',
+    data: data
+  })
+}
+
+export function getExpressByDeliverId(param) {
+  return request({
+    url: '/live/liveOrder/getExpressByDeliverId',
+    method: 'post',
+    data: param
+  })
+}
+
+/**
+ * 根据订单获取物流信息
+ * @param orderId
+ * @returns {*}
+ */
+export function getByOrderId(orderId){
+  return request({
+    url: '/live/liveOrder/getByOrderId/'+orderId,
+    method: 'get'
+  })
+}
+export function bindCustomer(data) {
+  return request({
+    url: '/live/liveOrder/bindCustomer',
+    method: 'post',
+    data: data
+  })
+}
+// 查询订单详细
+export function getLiveOrderAll(id) {
+  return request({
+    url: '/live/liveOrder/' + id,
+    method: 'get'
+  })
+}
+// 查询订单详细
+export function getLiveOrderAddress(id) {
+  return request({
+    url: '/live/liveOrder/queryAddress/' + id,
+    method: 'get'
+  })
+}
+// 查询电话
+export function getUserPhone(id) {
+  return request({
+    url: '/live/liveOrder/queryPhone/' + id,
+    method: 'get'
+  })
+}

+ 53 - 0
src/api/live/liveOrderitems.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询订单商品列表
+export function listLiveOrderitems(query) {
+  return request({
+    url: '/live/liveOrderitems/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询订单商品详细
+export function getLiveOrderitems(id) {
+  return request({
+    url: '/live/liveOrderitems/' + id,
+    method: 'get'
+  })
+}
+
+// 新增订单商品
+export function addLiveOrderitems(data) {
+  return request({
+    url: '/live/liveOrderitems',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改订单商品
+export function updateLiveOrderitems(data) {
+  return request({
+    url: '/live/liveOrderitems',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除订单商品
+export function delLiveOrderitems(id) {
+  return request({
+    url: '/live/liveOrderitems/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出订单商品
+export function exportLiveOrderitems(query) {
+  return request({
+    url: '/live/liveOrderitems/export',
+    method: 'get',
+    params: query
+  })
+}

+ 10 - 0
src/api/live/liveProfit.js

@@ -0,0 +1,10 @@
+import request from '@/utils/request'
+export function liveProfitList(data) {
+  return request({
+    url: '/live/liveProfit/list',
+    method: 'get',
+    params: data
+  })
+}
+
+

+ 53 - 0
src/api/live/liveQuestion.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询问答列表
+export function listLiveQuestion(query) {
+  return request({
+    url: '/live/liveQuestion/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询问答详细
+export function getLiveQuestion(questionId) {
+  return request({
+    url: '/live/liveQuestion/' + questionId,
+    method: 'get'
+  })
+}
+
+// 新增问答
+export function addLiveQuestion(data) {
+  return request({
+    url: '/live/liveQuestion',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改问答
+export function updateLiveQuestion(data) {
+  return request({
+    url: '/live/liveQuestion',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除问答
+export function delLiveQuestion(questionId) {
+  return request({
+    url: '/live/liveQuestion/' + questionId,
+    method: 'delete'
+  })
+}
+
+// 导出问答
+export function exportLiveQuestion(query) {
+  return request({
+    url: '/live/liveQuestion/export',
+    method: 'get',
+    params: query
+  })
+}

+ 36 - 0
src/api/live/liveQuestionBank.js

@@ -0,0 +1,36 @@
+import request from '@/utils/request'
+
+// 查询题库列表
+export function listLiveQuestionBank(query) {
+  return request({
+    url: '/live/liveQuestionBank/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 新增题库
+export function addLiveQuestionBank(data) {
+  return request({
+    url: '/live/liveQuestionBank',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改题库
+export function updateLiveQuestionBank(data) {
+  return request({
+    url: '/live/liveQuestionBank',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除题库
+export function deleteLiveQuestionBank(questionBankId) {
+  return request({
+    url: '/live/liveQuestionBank/' + questionBankId,
+    method: 'delete'
+  })
+}

+ 89 - 0
src/api/live/liveQuestionLive.js

@@ -0,0 +1,89 @@
+import request from '@/utils/request'
+
+// 查询直播间题库列表
+export function listLiveQuestionLive(query) {
+    return request({
+        url: '/live/liveQuestionLive/list',
+        method: 'get',
+        params: query
+    })
+}
+
+// 查询直播间可选题库列表
+export function listLiveQuestionOptionList(query) {
+    return request({
+        url: '/live/liveQuestionLive/optionList',
+        method: 'get',
+        params: query
+    })
+}
+
+// 新增直播间题库
+export function addLiveQuestionLive(data) {
+    return request({
+        url: '/live/liveQuestionLive',
+        method: 'post',
+        params: data
+    })
+}
+
+// 删除直播间题库
+export function deleteLiveQuestionLive(data) {
+    return request({
+        url: '/live/liveQuestionLive/' + data.liveId,
+        method: 'delete',
+        params: {ids: data.ids}
+    })
+}
+
+// 查询直播观看奖励设置列表
+export function listConfig(query) {
+  return request({
+    url: '/live/config/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询直播观看奖励设置详细
+export function getConfig(id) {
+  return request({
+    url: '/live/config/' + id,
+    method: 'get'
+  })
+}
+
+// 新增直播观看奖励设置
+export function addConfig(data,liveId) {
+  return request({
+    url: '/live/config'  + '?liveId=' + liveId,
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改直播观看奖励设置
+export function updateConfig(data,liveId) {
+  return request({
+    url: '/live/config'  + '?liveId=' + liveId,
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除直播观看奖励设置
+export function delConfig(id) {
+  return request({
+    url: '/live/config/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出直播观看奖励设置
+export function exportConfig(query) {
+  return request({
+    url: '/live/config/export',
+    method: 'get',
+    params: query
+  })
+}

+ 63 - 0
src/api/live/liveRedConf.js

@@ -0,0 +1,63 @@
+import request from '@/utils/request'
+
+// 查询直播红包记录配置列表
+export function listLiveRedConf(query) {
+  return request({
+    url: '/live/liveRedConf/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询直播红包记录配置详细
+export function getLiveRedConf(redId) {
+  return request({
+    url: '/live/liveRedConf/' + redId,
+    method: 'get'
+  })
+}
+
+// 新增直播红包记录配置
+export function addLiveRedConf(data) {
+  return request({
+    url: '/live/liveRedConf',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改直播红包记录配置
+export function updateLiveRedConf(data) {
+  return request({
+    url: '/live/liveRedConf',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除直播红包记录配置
+export function delLiveRedConf(redId) {
+  return request({
+    url: '/live/liveRedConf/' + redId,
+    method: 'delete'
+  })
+}
+
+// 导出直播红包记录配置
+export function exportLiveRedConf(query) {
+  return request({
+    url: '/live/liveRedConf/export',
+    method: 'get',
+    params: query
+  })
+}
+
+
+// 查询直播红包 未使用的红包
+export function listLiveRedConfOn(query) {
+  return request({
+    url: '/live/liveRedConf/listOn',
+    method: 'get',
+    params: query
+  })
+}

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

@@ -0,0 +1,19 @@
+import request from '@/utils/request'
+
+
+export function statistics(data) {
+  return request({
+    url: '/live/record/statistics',
+    method: 'post',
+    data: data
+  })
+}
+
+export function exportLiveIntegral(data) {
+  return request({
+    url: '/live/record/export',
+    method: 'post',
+    data: data
+  })
+}
+

+ 62 - 0
src/api/live/liveUserLotteryRecord.js

@@ -0,0 +1,62 @@
+import request from '@/utils/request'
+
+// 查询直播用户中奖记录列表
+export function listLiveUserLotteryRecord(query) {
+  return request({
+    url: '/live/liveUserLotteryRecord/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询直播用户中奖记录详细
+export function getLiveUserLotteryRecord(id) {
+  return request({
+    url: '/live/liveUserLotteryRecord/' + id,
+    method: 'get'
+  })
+}
+
+// 新增直播用户中奖记录
+export function addLiveUserLotteryRecord(data) {
+  return request({
+    url: '/live/liveUserLotteryRecord',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改直播用户中奖记录
+export function updateLiveUserLotteryRecord(data) {
+  return request({
+    url: '/live/liveUserLotteryRecord',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除直播用户中奖记录
+export function delLiveUserLotteryRecord(id) {
+  return request({
+    url: '/live/liveUserLotteryRecord/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出直播用户中奖记录
+export function exportLiveUserLotteryRecord(query) {
+  return request({
+    url: '/live/liveUserLotteryRecord/export',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询单一数据的中奖信息
+export function info(data) {
+  return request({
+    url: '/live/liveUserLotteryRecord/info',
+    method: 'post',
+    data: data
+  })
+}

+ 68 - 0
src/api/live/liveVideo.js

@@ -0,0 +1,68 @@
+import request from '@/utils/request'
+
+// 查询直播视频列表
+export function listLiveVideo(query) {
+  return request({
+    url: '/live/liveVideo/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询直播视频详细
+export function getLiveVideo(videoId) {
+  return request({
+    url: '/live/liveVideo/' + videoId,
+    method: 'get'
+  })
+}
+
+// 查询直播视频详细
+export function getLiveVideoByLiveId(liveId) {
+  return request({
+    url: '/live/liveVideo/liveVideoByLiveId/' + liveId,
+    method: 'get'
+  })
+}
+// 查询直播视频详细
+export function getLiveVideoByLiveIdAndType(liveId) {
+  return request({
+    url: '/live/liveVideo/preview/' + liveId,
+    method: 'get'
+  })
+}
+
+// 新增直播视频
+export function addLiveVideo(data) {
+  return request({
+    url: '/live/liveVideo',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改直播视频
+export function updateLiveVideo(data) {
+  return request({
+    url: '/live/liveVideo',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除直播视频
+export function delLiveVideo(videoId) {
+  return request({
+    url: '/live/liveVideo/' + videoId,
+    method: 'delete'
+  })
+}
+
+// 导出直播视频
+export function exportLiveVideo(query) {
+  return request({
+    url: '/live/liveVideo/export',
+    method: 'get',
+    params: query
+  })
+}

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

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

+ 86 - 0
src/api/live/task.js

@@ -0,0 +1,86 @@
+import request from '@/utils/request'
+
+// 查询直播间自动化任务配置列表
+export function listTask(query) {
+  return request({
+    url: '/live/task/list',
+    method: 'get',
+    params: query
+  })
+}
+// 查询直播间自动化任务配置列表
+export function listTaskBarrage(query) {
+  return request({
+    url: '/live/task/listBarrage',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询直播间自动化任务配置详细
+export function getTask(id) {
+  return request({
+    url: '/live/task/' + id,
+    method: 'get'
+  })
+}
+
+// 新增直播间自动化任务配置
+export function addTask(data) {
+  return request({
+    url: '/live/task',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改直播间自动化任务配置
+export function updateTask(data) {
+  return request({
+    url: '/live/task',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除直播间自动化任务配置
+export function delTask(id) {
+  return request({
+    url: '/live/task/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出直播间自动化任务配置
+export function exportTask(query) {
+  return request({
+    url: '/live/task/export',
+    method: 'get',
+    params: query
+  })
+}
+// 导出直播间自动化任务配置
+export function exportTaskBarrage(query) {
+  return request({
+    url: '/live/task/exportData',
+    method: 'get',
+    params: query
+  })
+}
+
+// 下载用户导入模板
+export function importTemplate() {
+  return request({
+    url: '/live/task/importTemplate',
+    method: 'get'
+  })
+}
+
+// 新直播控制台任务列表
+export function consoleList(query) {
+  return request({
+    url: '/live/task/consoleList',
+    method: 'get',
+    params: query
+  })
+}

+ 53 - 0
src/api/live/words.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询直播间敏感词过滤列表
+export function listWords(query) {
+  return request({
+    url: '/live/words/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询直播间敏感词过滤详细
+export function getWords(wordId) {
+  return request({
+    url: '/live/words/' + wordId,
+    method: 'get'
+  })
+}
+
+// 新增直播间敏感词过滤
+export function addWords(data) {
+  return request({
+    url: '/live/words',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改直播间敏感词过滤
+export function updateWords(data) {
+  return request({
+    url: '/live/words',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除直播间敏感词过滤
+export function delWords(wordId) {
+  return request({
+    url: '/live/words/' + wordId,
+    method: 'delete'
+  })
+}
+
+// 导出直播间敏感词过滤
+export function exportWords(query) {
+  return request({
+    url: '/live/words/export',
+    method: 'get',
+    params: query
+  })
+}

+ 9 - 0
src/api/qw/externalContact.js

@@ -306,6 +306,15 @@ export function batchUpdateExternalContactNotes(data) {
   })
 }
 
+export function batchUpdateExternalContactNotesByWatchLog(data) {
+  return request({
+    url: '/qw/externalContact/batchUpdateExternalContactNotesByWatchLog',
+    method: 'post',
+    data: data
+  })
+}
+
+
 // 查询企业微信客户流失删除统计列表
 export function delLossStatistics(query) {
   return request({

+ 3 - 2
src/api/qw/externalContactTransferAudit.js

@@ -8,10 +8,11 @@ export function listExternalContactTransferAudit(query) {
   })
 }
 
-export function detail(id) {
+export function detail(id, query) {
   return request({
     url: '/qw/externalContactTransferCompanyAudit/detail/' + id,
-    method: 'get'
+    method: 'get',
+    params: query
   })
 }
 

+ 8 - 0
src/api/qw/qwDept.js

@@ -59,3 +59,11 @@ export function exportQwDept(query) {
     params: query
   })
 }
+
+export function treeselect(query) {
+  return request({
+    url: '/qw/qwDept/treeselect',
+    method: 'get',
+    params: query
+  })
+}

+ 17 - 0
src/api/qw/sopTemp.js

@@ -8,6 +8,23 @@ export function listSopTemp(query) {
     params: query
   })
 }
+
+export function listSopTempMyList(query) {
+  return request({
+    url: '/qw/sopTemp/myList',
+    method: 'get',
+    params: query
+  })
+}
+
+export function listSopTempDeptList(query) {
+  return request({
+    url: '/qw/sopTemp/deptList',
+    method: 'get',
+    params: query
+  })
+}
+
 // 查询sop模板列表
 export function redList(id) {
   return request({

+ 7 - 0
src/api/qw/sopUserLogs.js

@@ -69,6 +69,13 @@ export function updateLogDate(data) {
     data: data
   })
 }
+export function replaceUser(data) {
+  return request({
+    url: '/qwSop/sopUserLogs/replaceUser',
+    method: 'post',
+    data: data
+  })
+}
 // 修改sopUserLogs
 export function addGroupChat(data) {
   return request({

+ 19 - 0
src/api/qw/user.js

@@ -9,6 +9,15 @@ export function staffListUser(query) {
   })
 }
 
+export function myStaffListUser(query) {
+  return request({
+    url: '/qw/user/myStaffList',
+    method: 'get',
+    params: query
+  })
+}
+
+
 export function myDepartListUser(query) {
   return request({
     url: '/qw/user/myDepartList',
@@ -165,6 +174,16 @@ export function exportUser(query) {
     params: query
   })
 }
+
+// 导出企微员工
+export function exportStaff(query) {
+  return request({
+    url: '/qw/user/exportStaff',
+    method: 'get',
+    params: query
+  })
+}
+
 /**
  * 登录企业微信(发起登录)
  */

+ 75 - 0
src/api/statistics/statistics.js

@@ -309,3 +309,78 @@ export function thisMonthRecvCount(){
     params: {}
   })
 }
+
+
+/**
+ * 课程观看统计 按公司
+ * @param param
+ * @returns {AxiosPromise}
+ */
+export function getWatchCourseStatisticsData(param){
+  const safeParam = JSON.parse(JSON.stringify(param));
+  return request({
+    url: '/index/statistics/getWatchCourseStatisticsData',
+    method: 'post',
+    data: safeParam
+  })
+}
+
+/**
+ * 日综合统计(按照天分组)
+ * @returns {*}
+ */
+export function getStatisticsData(data) {
+  return request({
+    url: '/crm/ComprehensiveStatistics/statisticMain',
+    method: 'post',
+    data: data  // 使用 data 而不是 params
+  })
+}
+
+/**
+ * 获取公司下拉
+ * @returns {*}
+ */
+export function getSearchCompanyInfo(param){
+  return request({
+    url: '/crm/ComprehensiveStatistics/getSearchCompanyInfo',
+    method: 'get',
+    params: param
+  })
+}
+
+/**
+ * 获取部门下拉
+ * @returns {*}
+ */
+export function getSearchDeptInfo(param){
+  return request({
+    url: '/crm/ComprehensiveStatistics/getSearchDeptInfo',
+    method: 'get',
+    params: param
+  })
+}
+
+/**
+ * 获取用户下拉
+ * @returns {*}
+ */
+export function getSearchUserInfo(param){
+  return request({
+    url: '/crm/ComprehensiveStatistics/getSearchUserInfo',
+    method: 'get',
+    params: param
+  })
+}
+
+/**
+ * 综合统计
+ * @returns {*}
+ */
+export function getStatisticsDataN(data) {
+  return request({
+    url: '/crm/ComprehensiveStatistics/statisticMainN',
+    method: 'post',
+    data: data  // 使用 data 而不是 params
+  })
+}

+ 76 - 0
src/api/store/collectionSchedule.js

@@ -0,0 +1,76 @@
+import request from '@/utils/request'
+
+// 查询用户信息采集进度列表
+export function listCollectionSchedule(query) {
+  return request({
+    url: '/store/collectionSchedule/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询用户信息采集进度详细
+export function getCollectionSchedule(id) {
+  return request({
+    url: '/store/collectionSchedule/' + id,
+    method: 'get'
+  })
+}
+
+// 新增用户信息采集进度
+export function addCollectionSchedule(data) {
+  return request({
+    url: '/store/collectionSchedule',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改用户信息采集进度
+export function updateCollectionSchedule(data) {
+  return request({
+    url: '/store/collectionSchedule',
+    method: 'put',
+    data: data
+  })
+}
+// 终止用户信息采集进度(暂时弃用)
+export function endProcess(data) {
+  return request({
+    url: '/store/collectionSchedule/endProcess',
+    method: 'put',
+    data: data
+  })
+}  // 终止用户信息采集进度
+export function stop(data) {
+  return request({
+    url: '/hisStore/collection/stop',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除用户信息采集进度
+export function delCollectionSchedule(id) {
+  return request({
+    url: '/store/collectionSchedule/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出用户信息采集进度
+export function exportCollectionSchedule(query) {
+  return request({
+    url: '/store/collectionSchedule/export',
+    method: 'get',
+    params: query
+  })
+}
+
+// 获取流程步骤枚举
+export function getCollectionScheduleSteps() {
+  return request({
+    url: '/store/collectionSchedule/steps',
+    method: 'get'
+  });
+}

+ 1 - 7
src/api/store/storeOrder.js

@@ -138,13 +138,7 @@ export function updateStoreOrder(data) {
     data: data
   })
 }
-export function updateAddressErpFsStoreOrder(data) {
-  return request({
-    url: '/store/storeOrder/updateAddressErpFsStoreOrder',
-    method: 'put',
-    data: data
-  })
-}
+
 export function bindCustomer(data) {
   return request({
     url: '/store/storeOrder/bindCustomer',

+ 53 - 0
src/api/tag/api.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询视频小节看课标签关联列表
+export function listTag(query) {
+  return request({
+    url: '/shop/tag/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询视频小节看课标签关联详细
+export function getTag(id) {
+  return request({
+    url: '/shop/tag/' + id,
+    method: 'get'
+  })
+}
+
+// 新增视频小节看课标签关联
+export function addTag(data) {
+  return request({
+    url: '/shop/tag',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改视频小节看课标签关联
+export function updateTag(data) {
+  return request({
+    url: '/shop/tag',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除视频小节看课标签关联
+export function delTag(id) {
+  return request({
+    url: '/shop/tag/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出视频小节看课标签关联
+export function exportTag(query) {
+  return request({
+    url: '/shop/tag/export',
+    method: 'get',
+    params: query
+  })
+}

+ 18 - 0
src/api/wechat.js

@@ -0,0 +1,18 @@
+import request from '@/utils/request'
+
+// 获取绑定二维码
+export function getWechatBindQrcode() {
+  return request({
+    url: '/wechat/bind/qrcode',
+    method: 'get'
+  });
+}
+
+// 检测绑定状态
+export function checkWechatBindStatus(sceneId) {
+  return request({
+    url: '/wechat/bind/status',
+    method: 'get',
+    params: { sceneId }
+  });
+}

BIN
src/assets/images/videoIsAudit.png


BIN
src/assets/images/videoNotStart.png


BIN
src/assets/logo/bjzmky.png


BIN
src/assets/logo/cdhyt.jpg


BIN
src/assets/logo/sczy.png


BIN
src/assets/logo/yxj.jpg


+ 274 - 0
src/components/LiveVideoUpload/index.vue

@@ -0,0 +1,274 @@
+<template>
+  <div>
+    <el-form-item label="视频上传">
+      <div class="upload_video" id="upload_video">
+        <el-upload
+          ref="upload"
+          action="#"
+          :http-request="uploadVideoToTxPcdn"
+          accept=".mp4"
+          :limit="1"
+          :on-remove="handleRemove"
+          :on-change="handleChange"
+          :auto-upload="false"
+          :key="uploadKey"
+        >
+          <el-button slot="trigger" size="small" type="primary">选取视频</el-button>
+          <el-button style="margin-left: 10px;" size="small" type="success" @click="submitUpload">点击上传</el-button>
+          <!-- 线路一 -->
+          <div class="progress-container" style="width:100% !important;">
+            <span class="progress-label">线路一</span>
+            <el-progress
+              style="margin-top: 5px;"
+              class="progress"
+              :text-inside="true"
+              :stroke-width="18"
+              :percentage="txProgress"
+              status="success">
+            </el-progress>
+          </div>
+
+          <!-- 线路二 -->
+<!--          <div class="progress-container">-->
+<!--            <span class="progress-label">线路er</span>-->
+<!--            <el-progress-->
+<!--              style="margin-top: 5px;"-->
+<!--              class="progress"-->
+<!--              :text-inside="true"-->
+<!--              :stroke-width="18"-->
+<!--              :percentage="hwProgress"-->
+<!--              status="success">-->
+<!--            </el-progress>-->
+<!--          </div>-->
+          <div slot="tip" class="el-upload__tip">只能上传mp4文件,且不超过500M</div>
+        </el-upload>
+      </div>
+    </el-form-item>
+    <el-form-item label="视频播放">
+      <video v-if="videoUrl" ref="myvideo" :src="videoUrl" id="video" width="100%" height="300px" controls></video>
+      <div v-if="fileName">视频文件名: {{ fileName }}</div>
+      <div v-if="fileKey">文件Key: {{ fileKey }}</div>
+      <div v-if="fileSize">文件大小(MB): {{ (fileSize / (1024 * 1024)).toFixed(2) }} MB</div>
+    </el-form-item>
+    <!-- 仅当showControl为true时显示播放线路选择器 -->
+    <el-form-item v-if="showControl" label="播放线路">
+      <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>
+</template>
+
+<script>
+import { uploadObject } from "@/utils/cos.js";
+import Pagination from "@/components/Pagination";
+
+export default {
+  components: {
+    Pagination
+  },
+  props: {
+    videoUrl: {
+      type: String,
+      default: "",
+    },
+    fileKey: {
+      type: String,
+      default: "",
+    },
+    fileSize: {
+      type: Number,
+      default: null,
+    },
+    fileName: {
+      type: String,
+      default: "",
+    },
+    line_1: {
+      type: String,
+      default: "",
+    },
+    line_2: {
+      type: String,
+      default: "",
+    },
+    line_3: {
+      type: String,
+      default: "",
+    },
+    thumbnail: {
+      type: String,
+      default: "",
+    },
+    uploadType: {
+      type: Number,
+      default: null,
+    },
+    type: {
+      type: Number,
+      default: null,
+    },
+    isPrivate: {
+      type: Number,
+      default: 0,
+    },
+
+    // 使用一个变量控制显示,默认为true显示所有控制项
+    showControl: {
+      type: Boolean,
+      default: false,
+    }
+  },
+  data() {
+    return {
+      videoName:'',
+      isHidden : false,
+      localUploadType: this.uploadType,
+      duration: 0,
+      fileId: "",
+      uploadTypeOptions: [
+        { dictLabel: "线路一", dictValue: 1 }, // 腾讯pcdn
+        // { dictLabel: "线路二", dictValue: 2 }, // 华为云obs
+        // { dictLabel: "华为云VOD", dictValue: 4 },
+        // { dictLabel: "腾讯云VOD", dictValue: 5 },
+      ],
+      fileList: [],
+      txProgress: 0,
+      hwProgress: 0,
+      uploadLoading: false,
+      uploadKey: 0,
+    };
+  },
+  mounted() {
+    this.reset()
+  },
+  watch: {
+    localUploadType(newType) {
+
+      this.$emit("update:uploadType", newType);
+    },
+    uploadType(newType) {
+      this.localUploadType = newType;
+    },
+  },
+  methods: {
+// 提供重置方法供父组件调用
+    reset() {
+      this.txProgress = 0;
+      this.fileList = [];
+      this.$refs.upload.clearFiles();
+      // 重置其他状态...
+    },
+    handleChange(file, fileList) {
+      this.fileList = fileList;
+      this.getVideoDuration(file.raw);
+    },
+    getVideoDuration(file) {
+      const video = document.createElement("video");
+      video.preload = "metadata";
+      video.onloadedmetadata = () => {
+        window.URL.revokeObjectURL(video.src);
+        this.duration = parseInt(video.duration.toFixed(2));
+        console.log("视频时长=========>",this.duration);
+        this.$emit("video-duration", this.duration);
+        console.log("文件大小=====>",file.size);
+        this.$emit("update:fileSize", file.size);
+      };
+      video.src = URL.createObjectURL(file);
+    },
+    async submitUpload() {
+      if (this.fileList.length < 1) {
+        return this.$message.error("请先选取视频,再进行上传");
+      }
+      //同时上传个线路
+      await this.uploadVideoToTxPcdn();
+      // await this.uploadVideoToHwObs();
+      this.$emit("update:fileName", this.fileList[0].name);
+    },
+    //更新华为线路进度条
+    updateHwProgress(progress) {
+      this.hwProgress = progress;
+    },
+    //更新腾讯线路进度条
+    updateTxProgress(progressData) {
+      this.txProgress = Math.round(progressData.percent * 100);
+    },
+    //上传腾讯云Pcdn
+    async uploadVideoToTxPcdn() {
+      try {
+        const file = this.fileList[0].raw;
+        const data = await uploadObject(file, this.updateTxProgress,this.type);
+        console.log("腾讯COS返回========>",data);
+        console.log("isPrivate=======>",this.isPrivate)
+        let line_1='' ;
+        if (this.isPrivate===0){
+          line_1 = `${process.env.VUE_APP_VIDEO_LINE_1}${data.urlPath}`;
+        }else {
+          line_1 = `${process.env.VUE_APP_VIDEO_LINE_1}${data.urlPath}`;
+        }
+        line_1 = line_1.replace(/\.mp4$/, '.m3u8');
+
+        let urlPathWithoutFirstSlash = data.urlPath.substring(1);
+        this.$emit("update:fileKey", urlPathWithoutFirstSlash);
+
+        console.log("文件key",urlPathWithoutFirstSlash);
+        console.log("组装URL========>",line_1);
+        this.$emit("update:videoUrl", line_1);
+        this.$emit("update:line_1", line_1);
+        this.$emit("change", line_1,line_1);
+        // this.$emit("update:line_2", line_2);
+        this.$message.success("线路一上传成功");
+      } catch (error) {
+        this.$message.error("线路一上传失败");
+      }
+    },
+    // //上传华为云Obs
+    // async uploadVideoToHwObs() {
+    //   try {
+    //     const file = this.fileList[0].raw;
+    //     const data = await uploadToOBS(file, this.updateHwProgress,this.type);
+    //     console.log("华为OBS返回========>",data);
+    //     let line_2='' ;
+    //     if (this.isPrivate===0){
+    //       line_2 = `${process.env.VUE_APP_VIDEO_LINE_2}/${data.urlPath}`;
+    //     }else {
+    //       line_2 = `${process.env.VUE_APP_VIDEO_LINE_2}/${data.urlPath}`;
+    //     }
+    //     this.$emit("update:videoUrl", line_2);
+    //     this.$emit("update:line_2", line_2);
+    //     this.$message.success("线路二上传成功");
+    //   } catch (error) {
+    //     this.$message.error("线路二上传失败");
+    //   }
+    // },
+    handleRemove(file, fileList) {
+      console.log(file, fileList.length);
+    },
+  }
+};
+</script>
+
+<style>
+.progress-container {
+  margin-bottom: 5px; /* 进度条之间的间距 */
+}
+
+.progress-label {
+  display: block;
+  font-weight: bold;
+  font-size: 13px;
+  color: #303331; /* 标签颜色,可以根据需要调整 */
+}
+
+/* 视频库选择对话框样式 */
+.library-search {
+  margin-bottom: 15px;
+}
+
+.el-table .el-table__row:hover {
+  cursor: pointer;
+}
+</style>

+ 446 - 0
src/components/LiveVideoUpload/single.vue

@@ -0,0 +1,446 @@
+<template>
+  <div>
+    <el-form-item label="">
+      <div class="upload_video" id="upload_video">
+<!--        <el-upload-->
+<!--          class="upload-demo"-->
+<!--          ref="upload"-->
+<!--          action="#"-->
+<!--          :http-request="uploadVideoToTxPcdn"-->
+<!--          accept=".mp4"-->
+<!--          :limit="1"-->
+<!--          :on-remove="handleRemove"-->
+<!--          :on-change="handleChange"-->
+<!--          :auto-upload="false"-->
+<!--          :key="uploadKey"-->
+<!--        >-->
+<!--          <el-button slot="trigger" size="small" type="primary" >选取视频</el-button>-->
+<!--          <el-button style="margin-left: 10px;" size="small" type="success" @click="submitUpload">点击上传</el-button>-->
+          <!-- 仅当showControl为true时显示视频库选取按钮 -->
+          <el-button v-if="showControl" style="margin-left: 10px;" size="small" type="success" @click="openVideoLibrary">视频库选取</el-button>
+          <!-- 线路一 -->
+          <div class="progress-container">
+            <span class="progress-label">线路一</span>
+            <el-progress
+              style="margin-top: 5px;"
+              class="progress"
+              :text-inside="true"
+              :stroke-width="18"
+              :percentage="txProgress"
+              status="success">
+            </el-progress>
+          </div>
+
+          <!-- 线路二 -->
+<!--          <div class="progress-container">-->
+<!--            <span class="progress-label">线路二</span>-->
+<!--            <el-progress-->
+<!--              style="margin-top: 5px;"-->
+<!--              class="progress"-->
+<!--              :text-inside="true"-->
+<!--              :stroke-width="18"-->
+<!--              :percentage="hwProgress"-->
+<!--              status="success">-->
+<!--            </el-progress>-->
+<!--          </div>-->
+          <div slot="tip" class="el-upload__tip">只能上传mp4文件,且不超过500M</div>
+        </el-upload>
+      </div>
+    </el-form-item>
+    <el-form-item label="视频播放">
+      <video v-if="videoUrl" ref="myvideo" :src="videoUrl" id="video" width="100%" height="300px" controls></video>
+      <div v-if="fileName">视频文件名: {{ fileName }}</div>
+      <div v-if="fileKey">文件Key: {{ fileKey }}</div>
+      <div v-if="fileSize">文件大小(MB): {{ (fileSize / (1024 * 1024)).toFixed(2) }} MB</div>
+    </el-form-item>
+    <!-- 仅当showControl为true时显示播放线路选择器 -->
+<!--    <el-form-item v-if="showControl" label="播放线路">-->
+<!--      <el-radio-group v-model="localUploadType">-->
+<!--        <el-radio :label="1" >线路一</el-radio>-->
+<!--&lt;!&ndash;        <el-radio :label="2" >线路二</el-radio>&ndash;&gt;-->
+<!--        &lt;!&ndash;        <el-radio :label="3" >线路三</el-radio>&ndash;&gt;-->
+<!--      </el-radio-group>-->
+<!--    </el-form-item>-->
+
+    <!-- 视频库选择对话框 -->
+    <el-dialog title="视频库选择" :visible.sync="libraryOpen" width="900px" append-to-body>
+      <!-- 搜索条件 -->
+      <el-form :inline="true" :model="libraryQueryParams" class="library-search">
+        <el-form-item label="素材名称">
+          <el-input
+            v-model="libraryQueryParams.remark"
+            placeholder="请输入素材名称"
+            clearable
+            size="small"
+            @keyup.enter.native="handleLibraryQuery"
+          />
+        </el-form-item>
+        <el-form-item>
+          <el-button type="primary" icon="el-icon-search" size="mini" @click="handleLibraryQuery">搜索</el-button>
+          <el-button icon="el-icon-refresh" size="mini" @click="resetLibraryQuery">重置</el-button>
+        </el-form-item>
+      </el-form>
+
+      <!-- 视频列表 -->
+      <el-table v-loading="libraryLoading" :data="libraryList" @row-click="handleLibrarySelect" highlight-current-row>
+        <el-table-column label="素材名称" align="center" prop="remark" />
+<!--        <el-table-column label="缩略图" align="center">-->
+<!--          <template slot-scope="scope">-->
+<!--            <video-->
+<!--              :src="scope.row.videoUrl"-->
+<!--              controls-->
+<!--              controlsList="nodownload"-->
+<!--              class="video-player"-->
+<!--              @contextmenu.prevent-->
+<!--            ></video>-->
+<!--          </template>-->
+<!--        </el-table-column>-->
+        <el-table-column label="视频时长" align="center">
+          <template slot-scope="scope">
+            <span>{{ formatDuration(scope.row.duration) }}</span>
+          </template>
+        </el-table-column>
+      </el-table>
+
+      <!-- 分页 -->
+      <pagination
+        v-show="libraryTotal>0"
+        :total="libraryTotal"
+        :page.sync="libraryQueryParams.pageNum"
+        :limit.sync="libraryQueryParams.pageSize"
+        @pagination="getList"
+      />
+
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="confirmVideoSelection">确 定</el-button>
+        <el-button @click="cancelVideoSelection">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { uploadObject } from "@/utils/cos.js";
+import Pagination from "@/components/Pagination";
+// import { listVideoResource } from '@/api/course/videoResource';
+import { listLiveVideo, getLiveVideo, delLiveVideo, addLiveVideo, updateLiveVideo, exportLiveVideo } from "@/api/live/liveVideo";
+
+export default {
+  components: {
+    Pagination
+  },
+  props: {
+    videoUrl: {
+      type: String,
+      default: "",
+    },
+    fileKey: {
+      type: String,
+      default: "",
+    },
+    fileSize: {
+      type: Number,
+      default: null,
+    },
+    fileName: {
+      type: String,
+      default: "",
+    },
+    line_1: {
+      type: String,
+      default: "",
+    },
+    line_2: {
+      type: String,
+      default: "",
+    },
+    line_3: {
+      type: String,
+      default: "",
+    },
+    thumbnail: {
+      type: String,
+      default: "",
+    },
+    uploadType: {
+      type: Number,
+      default: null,
+    },
+    type: {
+      type: Number,
+      default: null,
+    },
+    isPrivate: {
+      type: Number,
+      default: 0,
+    },
+
+    // 使用一个变量控制显示,默认为true显示所有控制项
+    showControl: {
+      type: Boolean,
+      default: true,
+    }
+  },
+  data() {
+    return {
+      videoName:'',
+      isHidden : false,
+      localUploadType: this.uploadType,
+      duration: 0,
+      fileId: "",
+      uploadTypeOptions: [
+        { dictLabel: "线路一", dictValue: 1 }, // 腾讯pcdn
+        { dictLabel: "线路二", dictValue: 2 }, // 华为云obs
+        // { dictLabel: "华为云VOD", dictValue: 4 },
+        // { dictLabel: "腾讯云VOD", dictValue: 5 },
+      ],
+      fileList: [],
+      txProgress: 0,
+      hwProgress: 0,
+      uploadLoading: false,
+      uploadKey: 0,
+      // 视频库选择相关数据
+      libraryOpen: false,
+      libraryLoading: false,
+      libraryTotal: 0,
+      libraryList: [],
+      selectedVideo: null,
+      libraryQueryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        resourceName: null,
+        liveId: -1,
+        videoUrl: null,
+        videoType: -1,
+        sort: null,
+        remark: null,
+        finishStatus:1
+      },
+      liveQueryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        liveId: -1,
+        videoUrl: null,
+        videoType: -1,
+        sort: null,
+        remark: null,
+      },
+    };
+  },
+  mounted() {
+    this.reset();
+  },
+  watch: {
+    uploadType(newType) {
+      this.localUploadType = newType;
+    },
+  },
+  methods: {
+    /** 查询直播视频列表 */
+    getList() {
+      this.libraryLoading = true;
+      listLiveVideo(this.libraryQueryParams).then(response => {
+        this.libraryList = response.rows;
+        this.libraryTotal = response.total;
+        this.libraryLoading = false;
+      });
+    },
+    // 打开视频库对话框
+    openVideoLibrary() {
+      this.libraryOpen = true;
+      this.selectedVideo = null;
+      this.getList();
+    },
+    handleChange(file, fileList) {
+      this.fileList = fileList;
+      this.getVideoDuration(file.raw);
+    },
+    getVideoDuration(file) {
+      const video = document.createElement("video");
+      video.preload = "metadata";
+      video.onloadedmetadata = () => {
+        window.URL.revokeObjectURL(video.src);
+        this.duration = parseInt(video.duration.toFixed(2));
+        console.log("视频时长=========>",this.duration);
+        this.$emit("video-duration", this.duration);
+        console.log("文件大小=====>",file.size);
+        this.$emit("update:fileSize", file.size);
+      };
+      video.src = URL.createObjectURL(file);
+    },
+    async submitUpload() {
+      if (this.fileList.length < 1) {
+        return this.$message.error("请先选取视频,再进行上传");
+      }
+      //同时上传个线路
+      await this.uploadVideoToTxPcdn();
+      this.$emit("update:fileName", this.fileList[0].name);
+    },
+    //获取第一帧封面
+    async getFirstThumbnail(){
+      const file = this.fileList[0].raw;
+      getThumbnail(file).then(response => {
+        console.log("获取到第一帧为封面======>",response.url)
+        this.$emit("update:thumbnail", response.url);
+      })
+    },
+    //更新华为线路进度条
+    // updateHwProgress(progress) {
+    //   this.hwProgress = progress;
+    // },
+    //更新腾讯线路进度条
+    updateTxProgress(progressData) {
+      this.txProgress = Math.round(progressData.percent * 100);
+    },
+    //上传腾讯云Pcdn
+    async uploadVideoToTxPcdn() {
+      try {
+        const file = this.fileList[0].raw;
+        const data = await uploadObject(file, this.updateTxProgress,this.type);
+        console.log("腾讯COS返回========>",data);
+        console.log("isPrivate=======>",this.isPrivate)
+        let line_1='' ;
+        if (this.isPrivate===0){
+          line_1 = `${process.env.VUE_APP_VIDEO_LINE_1}${data.urlPath}`;
+        }else {
+          line_1 = `${process.env.VUE_APP_VIDEO_LINE_1}${data.urlPath}`;
+        }
+        line_1 = line_1.replace(/\.mp4$/, '.m3u8');
+
+        let urlPathWithoutFirstSlash = data.urlPath.substring(1);
+        this.$emit("update:fileKey", urlPathWithoutFirstSlash);
+
+        console.log("文件key",urlPathWithoutFirstSlash);
+        console.log("组装URL========>",line_1);
+        this.$emit("update:videoUrl", line_1);
+        this.$emit("update:line_1", line_1);
+        this.$emit("change", line_1,line_1);
+        // this.$emit("update:line_2", line_2);
+        this.$message.success("线路一上传成功");
+      } catch (error) {
+        this.$message.error("线路一上传失败");
+      }
+    },
+    //上传华为云Obs
+    async uploadVideoToHwObs() {
+      try {
+        const file = this.fileList[0].raw;
+        const data = await uploadToOBS(file, this.updateHwProgress,this.type);
+        console.log("华为OBS返回========>",data);
+        let line_2='' ;
+        if (this.isPrivate===0){
+          line_2 = `${process.env.VUE_APP_VIDEO_LINE_2}/${data.urlPath}`;
+        }else {
+          line_2 = `${process.env.VUE_APP_VIDEO_LINE_2}/${data.urlPath}`;
+        }
+        // this.$emit("update:videoUrl", data);
+        this.$emit("update:line_2", line_2);
+        this.$message.success("线路二上传成功");
+      } catch (error) {
+        this.$message.error("线路二上传失败");
+      }
+    },
+    handleRemove(file, fileList) {
+      console.log(file, fileList.length);
+    },
+    reset() {
+      // 重置内部状态
+      this.txProgress = 0;
+      this.fileList = [];
+      this.$refs.upload.clearFiles();
+      this.uploadKey++;
+    },
+    /** 查询视频库列表 */
+    getLibraryList() {
+      this.libraryLoading = true;
+      // listVideoResource(this.libraryQueryParams).then(response => {
+      //   this.libraryList = response.rows;
+      //   this.libraryTotal = response.total;
+      //   this.libraryLoading = false;
+      // });
+    },
+    /** 搜索视频库按钮操作 */
+    handleLibraryQuery() {
+      this.libraryQueryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置视频库查询按钮操作 */
+    resetLibraryQuery() {
+      this.libraryQueryParams = {
+        pageNum: 1,
+        pageSize: 10,
+        resourceName: null,
+        liveId: -1,
+        videoUrl: null,
+        videoType: -1,
+        sort: null,
+        remark: null,
+        finishStatus:1
+      };
+      this.handleLibraryQuery();
+    },
+    /** 视频库选择行点击 */
+    handleLibrarySelect(row) {
+      this.selectedVideo = row;
+    },
+    /** 格式化视频时长 */
+    formatDuration(seconds) {
+      if (!seconds) return '00:00';
+
+      const minutes = Math.floor(seconds / 60);
+      const remainingSeconds = seconds % 60;
+
+      return `${minutes.toString().padStart(2, '0')}:${remainingSeconds.toString().padStart(2, '0')}`;
+    },
+    /** 确认选择视频 */
+    confirmVideoSelection() {
+      if (!this.selectedVideo) {
+        this.$message.warning("请选择一个视频");
+        return;
+      }
+
+      // 更新组件内部数据
+      this.$emit("update:fileName", this.selectedVideo.fileName);
+      this.$emit("update:thumbnail", this.selectedVideo.thumbnail);
+      this.$emit("update:line_1", this.selectedVideo.lineOne);
+      this.$emit("update:fileSize", this.selectedVideo.fileSize);
+      this.$emit("update:fileKey", this.selectedVideo.fileKey);
+      this.$emit("update:uploadType", this.selectedVideo.uploadType);
+      this.$emit("video-duration", this.selectedVideo.duration);
+      // 设置预览URL
+      this.$emit("update:videoUrl", this.selectedVideo.videoUrl);
+      this.$emit("change", this.selectedVideo.videoUrl,this.selectedVideo.lineOne);
+
+
+      this.libraryOpen = false;
+    },
+    /** 取消视频选择 */
+    cancelVideoSelection() {
+      this.libraryOpen = false;
+      this.selectedVideo = null;
+    }
+  }
+};
+</script>
+
+<style>
+.progress-container {
+  margin-bottom: 5px; /* 进度条之间的间距 */
+}
+
+.progress-label {
+  display: block;
+  font-weight: bold;
+  font-size: 13px;
+  color: #303331; /* 标签颜色,可以根据需要调整 */
+}
+
+/* 视频库选择对话框样式 */
+.library-search {
+  margin-bottom: 15px;
+}
+
+.el-table .el-table__row:hover {
+  cursor: pointer;
+}
+</style>

+ 9 - 0
src/main.js

@@ -14,6 +14,8 @@ import elementDirective from './directive/select'
 
 import './assets/icons' // icon
 import './permission' // permission control
+import { callNumber,callOff } from "@/utils/call";
+import { callMobile } from "@/api/company/companyVoiceApi"
 import { getDicts } from "@/api/system/dict/data";
 import { getConfigKey } from "@/api/system/config";
 import {cloneObject, parseTime, resetForm, addDateRange, selectDictLabel, selectDictLabels, download, handleTree } from "@/utils/common";
@@ -63,6 +65,13 @@ Vue.prototype.msgInfo = function (msg) {
   this.$message.info(msg);
 }
 
+// 拨打电话
+import audio from 'vue-mobile-audio'
+Vue.use(audio)
+Vue.prototype.callNumber = callNumber
+Vue.prototype.callOff = callOff
+Vue.prototype.callMobile = callMobile
+
 // 全局组件挂载
 Vue.component('DictTag', DictTag)
 Vue.component('Pagination', Pagination)

+ 11 - 1
src/router/index.js

@@ -6,6 +6,7 @@ Vue.use(Router)
 /* Layout */
 import Layout from '@/layout'
 import ParentView from '@/components/ParentView';
+import LiveConsole from "@/views/live/liveConsole/index.vue";
 
 /**
  * Note: 路由配置项
@@ -174,7 +175,7 @@ export const constantRoutes = [
     hidden: true,
     children: [
       {
-        path: 'addSop/:corpId',
+        path: 'addSop/:corpId/:type(\\d+)',
         component: (resolve) => require(['@/views/qw/sop/addSop'], resolve),
         name: 'addSop',
         meta: { title: '新增SOP任务', activeMenu: '/qw/sop'}
@@ -261,6 +262,15 @@ export const constantRoutes = [
       }
     ]
   },
+  // 独立页路由:不嵌套根布局,直接渲染目标组件
+  {
+    path: '/live/liveConsole/:liveId',
+    name: 'LiveConsole',
+    component: LiveConsole, // 直接渲染目标组件,无侧边栏
+    meta: {
+      isIndependentPage: true // 标记为“独立页”
+    }
+  },
 
 
 

Kaikkia tiedostoja ei voida näyttää, sillä liian monta tiedostoa muuttui tässä diffissä