Browse Source

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

caoliqin 2 weeks ago
parent
commit
a9c0c690f1

+ 45 - 0
.env.prod-mengniu

@@ -0,0 +1,45 @@
+# 页面标题
+VUE_APP_TITLE =蒙牛总管理系统
+# 首页菜单标题
+VUE_APP_TITLE_INDEX =蒙牛管理系统
+# 公司名称
+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/mengniu.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 = mengniu-hw079058881
+# 存储桶配置
+VUE_APP_COS_BUCKET = mengniu-1323137866
+# 存储桶配置
+VUE_APP_COS_REGION = ap-chongqing
+# 线路一地址
+VUE_APP_VIDEO_LINE_1 = https://mengniutcpv.ylrzcloud.com
+# 线路二地址
+VUE_APP_VIDEO_LINE_2 = https://mengniuobs.ylrztop.com
+
+#火山云视频地址域名
+VUE_APP_VIDEO_URL = https://mengniuvolcengine.ylrztop.com
+#火山云视频点播空间名
+VUE_APP_HSY_SPACE = mengniu-2114522511
+
+# 开发环境配置
+ENV = 'development'
+
+# FS管理系统/开发环境
+VUE_APP_BASE_API = '/prod-api'
+
+#默认 1、会员 2、企微
+VUE_APP_COURSE_DEFAULT = 2
+
+# 路由懒加载
+VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 1 - 0
package.json

@@ -57,6 +57,7 @@
     "build:prod-shdn": "vue-cli-service build --mode prod-shdn",
     "build:prod-xcsw": "vue-cli-service build --mode prod-xcsw",
     "build:prod-zlwh": "vue-cli-service build --mode prod-zlwh",
+    "build:prod-mengniu": "vue-cli-service build --mode prod-mengniu",
     "preview": "node build/index.js --preview",
     "lint": "eslint --ext .js,.vue src"
   },

+ 10 - 0
src/api/fastGpt/fastgptPushTokenTotal.js

@@ -16,3 +16,13 @@ export function getFastGptPushTokenDeptTotal(query) {
     params: query
   })
 }
+
+
+// 导出token统计
+export function tokenExport(query) {
+  return request({
+    url: '/qw/qwPushCount/tokenExport',
+    method: 'get',
+    params: query
+  })
+}

+ 9 - 0
src/api/his/doctorArticle.js

@@ -18,6 +18,15 @@ export function listdocuser(query) {
   })
 }
 
+
+export function listDocList(query) {
+  return request({
+    url: '/his/doctor/doc/list',
+    method: 'get',
+    params: query
+  })
+}
+
 // 查询医生文章详细
 export function getArticle(articleId) {
   return request({

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

@@ -121,3 +121,11 @@ export function updateSopQwUser(data) {
     data: data
   })
 }
+// 查询看课sop列表全部
+export function sopList(query) {
+  return request({
+    url: '/qw/sop/allList',
+    method: 'post',
+    data: query
+  })
+}

BIN
src/assets/logo/mengniu.png


+ 272 - 30
src/views/course/courseRedPacketLog/index.vue

@@ -71,28 +71,7 @@
 	      size="small"
 	      @keyup.enter.native="handleQuery"
 	    />
-	  </el-form-item>
-
-      <el-form-item label="营期" prop="courseId">
-        <el-select
-          v-model="queryParams.periodId"
-          placeholder="请选择课程"
-          filterable
-          clearable
-          size="small"
-          remote
-          :remote-method="remoteMethod"
-          :loading="loadingPeriod"
-          @focus="handleFocus"
-        >
-          <el-option
-            v-for="dict in periodLists"
-            :key="dict.periodId"
-            :label="dict.periodName"
-            :value="parseInt(dict.periodId)"
-          />
-        </el-select>
-      </el-form-item>
+	  </el-form-item>      
 
 		<el-form-item label="课程" prop="courseId">
 		     <el-select filterable  v-model="queryParams.courseId" placeholder="请选择课程"  clearable size="small" @change="courseChange(queryParams.courseId)">
@@ -118,10 +97,119 @@
 	           <el-date-picker v-model="createTime" size="small" style="width: 220px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
                              range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" @change="change"></el-date-picker>
 	 </el-form-item>
-
+   <el-form-item label="发课方式" prop="sendType">
+	           <el-select 
+    v-model="sendType" 
+    placeholder="请选择发课方式"
+    size="small"
+    style="width: 220px"
+    @change="sendTypeChange"
+  >
+    <el-option label="手动发课" value="manual"></el-option>
+    <el-option label="自动发课" value="auto"></el-option>
+  </el-select>
+	</el-form-item>
+  <!-- 之前的营期,hcl要求做成营期+档期的样式 -->
+  <!-- <el-form-item label="营期" prop="courseId" >
+        <el-select
+          v-model="queryParams.periodId"
+          placeholder="请选择课程"
+          filterable
+          clearable
+          size="small"
+          remote
+          :remote-method="remoteMethod"
+          :loading="loadingPeriod"
+          @focus="handleFocus"
+        >
+          <el-option
+            v-for="dict in periodLists"
+            :key="dict.periodId"
+            :label="dict.periodName"
+            :value="parseInt(dict.periodId)"
+          />
+        </el-select>
+      </el-form-item> -->
+      <el-form-item label="营期" prop="trainingCampId" v-if="periodShow">
+        <el-select
+          v-model="queryParams.trainingCampId"
+          placeholder="请选择课程"
+          filterable
+          clearable
+          size="small"
+          remote
+          :remote-method="remoteMethod2"
+          :loading="loadingPeriod2"
+          @focus="handleFocus2"
+          @change="campChange"
+        >
+          <el-option
+            v-for="dict in campLists"
+            :key="dict.trainingCampId"
+            :label="dict.trainingCampName"
+            :value="parseInt(dict.trainingCampId)"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="档期" prop="periodId" v-if="periodShow">
+        <el-select
+          v-model="queryParams.periodId"
+          placeholder="请选择档期"
+          filterable
+          clearable
+          size="small"
+          remote
+          :remote-method="remoteMethod3"
+          :loading="loadingPeriod3"
+          @focus="handleFocus3"
+          :disabled="!queryParams.trainingCampId"
+        >
+          <el-option
+            v-for="dict in periodListsNew"
+            :key="dict.periodId"
+            :label="dict.periodName"
+            :value="parseInt(dict.periodId)"
+          />
+        </el-select>
+      </el-form-item>
+      
+      <el-form-item label="营期" prop="sopId" v-if="!periodShow">
+        <el-select
+          v-model="queryParams.sopId"
+          placeholder="请选择课程"
+          filterable
+          clearable
+          size="small"
+          remote
+          :remote-method="remoteMethod1"
+          :loading="loadingPeriod1"
+          @focus="handleFocus1"
+          @change="handleSopChange"
+        >
+          <el-option
+            v-for="dict in sopLists"
+            :key="dict.id"
+            :label="dict.name"
+            :value="dict.id"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="档期" prop="sopDate" v-if="!periodShow">
+         <el-date-picker
+    v-model="queryParams.sopDate"
+    type="date"
+    placeholder="选择日期"
+    format="yyyy-MM-dd"
+    value-format="yyyy-MM-dd"
+    size="small"
+    style="width: 100%;"
+    :disabled="!queryParams.sopId"
+  />
+      </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-button @click="testSopSelection" size="mini" >测试SOP选择</el-button> -->
       </el-form-item>
     </el-form>
 
@@ -216,7 +304,9 @@
 <script>
 import { courseList,videoList,getCourseRedPacketLog, delCourseRedPacketLog, addCourseRedPacketLog, updateCourseRedPacketLog, exportCourseRedPacketLog,listCourseRedPacketLogPage } from "@/api/course/courseRedPacketLog";
 import { getCompanyList } from "@/api/company/company";
-import { periodList } from "@/api/course/userCoursePeriod";
+import { periodList,pagePeriod } from "@/api/course/userCoursePeriod";
+import { sopList } from "@/api/qw/sop";
+import { listCamp } from "@/api/course/userCourseCamp"
 import {treeselect} from "../../../api/company/companyDept";
 import SelectTree from '@/components/TreeSelect/index.vue'
 import { getDeptData } from '@/api/system/employeeStats'
@@ -232,6 +322,9 @@ export default {
       // 遮罩层
       loading: true,
       loadingPeriod: false,
+      loadingPeriod1: false,
+      loadingPeriod2: false,
+      loadingPeriod3: false,
       // 导出遮罩层
       exportLoading: false,
       // 选中数组
@@ -258,6 +351,7 @@ export default {
         pageNum: 1,
         pageSize: 20
       },
+      querySop:{},
       // 查询参数
       queryParams: {
         pageNum: 1,
@@ -274,14 +368,29 @@ export default {
         phoneMk: null,
         sTime:null,
         eTime:null,
-        userIds: null
+        userIds: null,
+        sopId:null,
+        sopDate: null,
       },
 	   createTime:null,
       // 表单参数
       form: {},
       // 表单校验
       rules: {
-      }
+      },
+      //发课方式-手动,自动
+      sendType:"",
+      periodShow:"", 
+      sopLists:[],
+      campLists:[],
+      queryCamp:
+      {
+        pageNum:1,
+        pageSize:10,
+        hasNextPage:false,
+        scs:"order_number(desc),training_camp_id(desc)",
+      },
+      periodListsNew:[],
     };
   },
   created() {
@@ -298,6 +407,12 @@ export default {
     periodList(this.queryPeriod).then(response => {
 	    this.periodLists = response.data;
 	  });
+    // sopList(this.querySop).then(response => {
+	  //   this.sopLists = response.data;
+	  // });
+    // listCamp(this.queryCamp).then(response => {
+	  //   this.campLists = response.data.list;
+	  // })
 
     // this.getList();
   },
@@ -314,7 +429,51 @@ export default {
         this.periodLists = []
       }
     },
-
+    async remoteMethod3(query) {
+      if (query !== '') {
+        this.loadingPeriod3 = true
+        await this.getPeriodListNew(query)
+        this.loadingPeriod3 = false
+      } else {
+        // 如果输入为空,可以清空列表或加载默认数据
+        this.periodLists = []
+      }
+    },
+    async remoteMethod2(query) {
+      if (query !== '') {
+        this.loadingPeriod2 = true
+        await this.getCampList(query)
+        this.loadingPeriod2 = false
+      } else {
+        // 如果输入为空,可以清空列表或加载默认数据
+        this.campLists = []
+      }
+    },
+    async remoteMethod1(query) {
+      if (query !== '') {
+        this.loadingPeriod1 = true
+        await this.getSopList(query)
+        this.loadingPeriod1 = false
+      } else {
+        // 如果输入为空,可以清空列表或加载默认数据
+        this.sopLists = []
+        await this.getSopList();
+      }
+    },
+handleSopChange(value) {
+    console.log('选择的SOP ID:', value);
+  
+  // 清除可能的表单验证错误
+  this.$nextTick(() => {
+    if (this.$refs.queryForm) {
+      this.$refs.queryForm.clearValidate(['sopId']); // 如果有这个字段验证
+    }
+  });
+  // 如果选择了SOP,清空日期
+  if (!value) {
+    this.queryParams.sopDate = null;
+  }
+},
     // 获取营期列表
     async getPeriodList(keyword = '') {
       try {
@@ -331,14 +490,73 @@ export default {
         this.periodLists = []
       }
     },
+    async getPeriodListNew(keyword = '') {
+      try {
+        const params = {
+          periodName: keyword, // 搜索关键词
+          pageNum: 1,
+          pageSize: 50, // 根据需求调整
+          trainingCampId: this.queryParams.trainingCampId
+        }
+
+        const response = await pagePeriod(params)
+        this.periodListsNew = response.raw || response.data || []
+      } catch (error) {
+        console.error('获取营期列表失败:', error)
+        this.periodListsNew = []
+      }
+    }, 
+    async getSopList(keyword = '') {
+      try {
+        const params = {
+          name: keyword, // 搜索关键词
+        }
+        const response = await sopList(params)
+        this.sopLists = response.data.list || response.data || []
+      } catch (error) {
+        console.error('获取营期列表失败:', error)
+        this.sopLists = []
+      }
+    },
+    async getCampList(keyword = '') {
+      try {
+        const params = {
+          trainingCampName: keyword, // 搜索关键词
+          scs:"order_number(desc),training_camp_id(desc)",
+        }
+
+        const response = await listCamp(params)
+        this.campLists = response.data.list || response.data || []
+      } catch (error) {
+        console.error('获取营期列表失败:', error)
+        this.campLists = []
+      }
+    },
+    
     // 下拉框获取焦点时加载数据
     async handleFocus() {
       if (this.periodLists.length === 0) {
         this.getPeriodList();
       }
     },
-
-
+    async handleFocus1() {
+      if (this.sopLists.length === 0) {
+        this.getSopList();
+      }
+    },
+    async handleFocus2() {
+      if (this.campLists.length === 0) {
+        this.getCampList(this.queryCamp);
+      }
+    },
+    async handleFocus3() {
+      if (this.periodListsNew.length === 0) {
+        this.getPeriodListNew(this.queryParams.trainingCampId);
+      }
+    },
+    campChange(){
+      this.getPeriodListNew()
+    },
     handleClick(tab, event) {
 	    this.activeName=tab.name;
       if(tab.name == "00") {
@@ -419,6 +637,12 @@ export default {
       this.queryParams.pageNum = 1;    // Reset to first page
       this.queryParams.pageSize = 10;  // Reset to default page size
 	  this.queryParams.periodId=null;
+    this.queryParams.sopId = null;
+    this.queryParams.trainingCampId = null;
+    this.queryParams.sopDate = null;
+    this.sopLists = [];
+  this.campLists = [];
+  this.periodListsNew = [];
       this.handleQuery();
     },
     // 多选框选中数据
@@ -507,7 +731,25 @@ export default {
         }).catch(() => {}).finally(res=>{
 
       });
-    }
+    },
+    sendTypeChange(){
+      // 清空所有相关字段
+  this.queryParams.trainingCampId = null;
+  this.queryParams.periodId = null;
+  this.queryParams.sopId = null;
+  this.queryParams.sopDate = null;
+  // 清空选择器数据
+  this.sopLists = [];
+  this.campLists = [];
+  this.periodListsNew = [];
+      if(this.sendType === 'manual'){
+        this.periodShow = true;
+        this.getCampList();
+      }else if(this.sendType === 'auto'){
+        this.periodShow = false;
+        this.getSopList();
+      }
+    },
   }
 };
 </script>

+ 21 - 8
src/views/fastGpt/fastGptPushTokenTotal/index.vue

@@ -16,7 +16,20 @@
       </el-form-item>
     </el-form>
 
+
+
     <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          :loading="exportLoading"
+          @click="handleExport"
+        >导出
+        </el-button>
+      </el-col>
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
 
@@ -40,7 +53,7 @@
 
 <script>
 import { listFastgptEventLogTotal, exportFastgptEventLogTotal, getFastGptRoleAppKeyList} from "@/api/fastGpt/fastgptEventLogTotal";
-import { getFastGptPushTokenTotal} from "@/api/fastGpt/fastgptPushTokenTotal";
+import { getFastGptPushTokenTotal,tokenExport} from "@/api/fastGpt/fastgptPushTokenTotal";
 import SelectTree from "@/components/TreeSelect/index.vue";
 import {getDeptData} from "@/api/system/employeeStats";
 import TreeSelect from '@riophae/vue-treeselect'
@@ -237,18 +250,18 @@ export default {
     handleExport() {
       const queryParams = this.queryParams;
 
-      if(this.selectedCompanyList != null && this.selectedCompanyList.length > 0) {
-        this.queryParams.userIds = this.selectedCompanyList;
-      }else {
-        this.queryParams.userIds = [];
-      }
-      this.$confirm('是否确认导出所有ai事件埋点统计数据项?', "警告", {
+      // if(this.selectedCompanyList != null && this.selectedCompanyList.length > 0) {
+      //   this.queryParams.userIds = this.selectedCompanyList;
+      // }else {
+      //   this.queryParams.userIds = [];
+      // }
+      this.$confirm('是否确认导出所有token统计数据项?', "警告", {
           confirmButtonText: "确定",
           cancelButtonText: "取消",
           type: "warning"
         }).then(() => {
           this.exportLoading = true;
-          return exportFastgptEventLogTotal(queryParams);
+          return tokenExport(queryParams);
         }).then(response => {
           this.download(response.msg);
           this.exportLoading = false;

+ 16 - 2
src/views/his/doctorArticle/index.vue

@@ -168,7 +168,7 @@
             <el-option
               v-for="item in docuser"
               :key="item.name"
-              :label="item.name"
+              :label="`${item.name} (${item.position})`"
               :value="item.id">
             </el-option>
           </el-select>
@@ -252,7 +252,16 @@
 </template>
 
 <script>
-import {listdocuser, listArticle, getArticle, delArticle, addArticle, updateArticle, exportArticle } from "@/api/his/doctorArticle";
+import {
+  listdocuser,
+  listArticle,
+  getArticle,
+  delArticle,
+  addArticle,
+  updateArticle,
+  exportArticle,
+  listDocList
+} from '@/api/his/doctorArticle'
 import articleDetails from '../../components/his/doctorArticleDetails.vue';
 import { getAllArticleCateList} from "@/api/his/doctorArticleCate";
 import Editor from '@/components/Editor/wang';
@@ -339,6 +348,11 @@ export default {
     this.getDicts("sys_doctor_article_status").then(response => {
       this.articleStatus = response.data;
     });
+
+    listDocList().then(response => {
+      this.docuser=response.rows;
+    });
+
   },
   methods: {
     handleSuccess(response, file) {

+ 37 - 0
src/views/system/config/config.vue

@@ -1573,6 +1573,13 @@
               inactive-color="#ff4949">
             </el-switch>
           </el-form-item>
+          <el-form-item label="发课发群" prop="roomLinkAllow">
+            <el-switch
+              v-model="form18.roomLinkAllow"
+              active-color="#ff4949"
+              inactive-color="#13ce66">
+            </el-switch>
+          </el-form-item>
           <div class="line"></div>
           <div style="float:right;margin-right:20px">
             <el-button type="primary" @click="submitForm18">提交</el-button>
@@ -2537,6 +2544,21 @@
         </div>
       </el-tab-pane>
 
+      <el-tab-pane label="APP看课配置" name="courseAppConfig.config">
+        <el-form ref="form35" :model="form35" :rules="rules35" label-width="300px">
+          <el-form-item label="是否开启app看课">
+            <el-radio-group v-model="form35.view_course_app">
+              <el-radio :label="1">是</el-radio>
+              <el-radio :label="0">否</el-radio>
+            </el-radio-group>
+          </el-form-item>
+        </el-form>
+
+        <div class="footer">
+          <el-button type="primary" @click="submitForm35">提 交</el-button>
+        </div>
+      </el-tab-pane>
+
     </el-tabs>
 
 
@@ -2604,6 +2626,7 @@ export default {
       activeName: 'sys.oss.cloudStorage',
       configId: null,
       storeOPtions: [],
+      roomLinkAllow:"",
       // 表单参数
       form1: {},
       form2: {},
@@ -2625,6 +2648,7 @@ export default {
       form17: {},
       form18: {
         viewCommentNum: 200,
+        roomLinkAllow:true,
       },
       form19: {},
       form20: {
@@ -2732,6 +2756,7 @@ export default {
       form32:{},
       form33:{},
       form34:{},
+      form35:{},
       storeProductScrmColumns:[],
       storeScrmColumns: [],
       photoArr: [],
@@ -2790,6 +2815,7 @@ export default {
       rules26: {},
       rules33: {},
       rules34: {},
+      rules35: {},
     }
   },
   created() {
@@ -3143,6 +3169,9 @@ export default {
         if(key=="im.config"){
           this.form34 =JSON.parse(response.data.configValue);
         }
+        if(key=="courseAppConfig.config"){
+          this.form35 =JSON.parse(response.data.configValue);
+        }
         if(key == 'vc.config'){
            if(!!response.data){
           this.configId = response.data.configId
@@ -3467,6 +3496,14 @@ export default {
         }
       });
     },
+    submitForm35(){
+      var param={configId:this.configId,configName : "APP看课配置", configKey: this.configKey,configValue:JSON.stringify(this.form35)}
+      updateConfigByKey(param).then(response => {
+        if (response.code === 200) {
+          this.msgSuccess("修改成功");
+        }
+      });
+    },
     submitForm32(){
       const param = { configId: this.configId, configName : "直播源配置", configKey: this.configKey, configValue: JSON.stringify(this.form32) }
       console.log(param)