Jelajahi Sumber

同步课程模板 按照销售公司

三七 1 hari lalu
induk
melakukan
ad9be88817

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

@@ -101,6 +101,13 @@ export function syncTemplate(courseId) {
   })
 }
 
+export function syncTemplateByCompanyId(courseId,companyId) {
+  return request({
+    url: '/course/userCourse/syncTemplateByCompanyId/' + courseId+"/"+companyId,
+    method: 'post'
+  })
+}
+
 // 导出课堂视频
 export function exportUserCourseVideo(query) {
   return request({

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

@@ -9,6 +9,15 @@ export function listIntegralGoods(query) {
   })
 }
 
+export function norIntegralGoodsList(query) {
+  return request({
+    url: '/his/integralGoods/norList',
+    method: 'get',
+    params: query
+  })
+}
+
+
 // 查询积分商品详细
 export function getIntegralGoods(goodsId) {
   return request({

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

@@ -60,7 +60,12 @@
       </el-col>
       <el-col :span="1.5">
         <el-button type="primary" plain icon="el-icon-delete" size="mini" @click="handleSync"
-                   v-hasPermi="['course:userCourseVideo:sync']">同步模板数据
+                   v-hasPermi="['course:userCourseVideo:sync']">同步模板数据(全部)
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="primary" plain icon="el-icon-delete" size="mini" @click="handlerChangeCompany"
+                   v-hasPermi="['course:userCourseVideo:sync']">同步模板数据(按销售公司)
         </el-button>
       </el-col>
       <el-col :span="1.5">
@@ -682,6 +687,25 @@
         <el-button type="primary" @click="copyXsyParams">复制参数</el-button>
       </div>
     </el-dialog>
+
+    <el-dialog :title="syncTemplateOpen.title" :visible.sync="syncTemplateOpen.open" width="500px" append-to-body>
+      <el-form>
+        <el-form-item label="销售公司">
+          <el-select v-model="syncTemplateOpen.companyId" placeholder="请选择销售公司" style="width: 100%">
+            <el-option
+              v-for="item in companyList"
+              :key="item.companyId"
+              :label="item.companyName"
+              :value="item.companyId"
+            />
+          </el-select>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="syncTemplateOpen.open = false">取 消</el-button>
+        <el-button type="primary" @click="handleSyncCompanyId">确 定</el-button>
+      </div>
+    </el-dialog>
   </div>
 </template>
 
@@ -700,7 +724,12 @@ import {
   updates,
   updateUserCourseVideo,
   batchUpdateWatchIntegral,
-  syncTemplate, batchDownUserCourseVideo, batchEditCover, batchUpUserCourseVideo, getPublicUserCourseVideo
+  syncTemplateByCompanyId,
+  batchDownUserCourseVideo,
+  batchEditCover,
+  batchUpUserCourseVideo,
+  getPublicUserCourseVideo,
+  syncTemplate
 } from '@/api/course/userCourseVideo'
 // import {syncTemplate} from '@/api/course/userCourse'
 import QuestionBank from "@/views/course/courseQuestionBank/QuestionBank.vue";
@@ -715,6 +744,7 @@ import {downloadCommentImportTemplate, importComments, listFeaturedComments, del
 import draggable from 'vuedraggable'
 import { getConfigByKey } from '@/api/system/config'
 import { options as courserCouponOptions} from "@/api/his/courserCoupon";
+import { getCompanyList } from '@/api/company/company'
 
 export default {
   name: "userCourseCatalog",
@@ -738,6 +768,13 @@ export default {
   },
   data() {
     return {
+
+      companyList:[],
+      syncTemplateOpen:{
+        open:false,
+        title:"选择同步的销售公司",
+        companyId:null
+      },
       courseCouponList: [],
       duration: null,
       packageList: [],
@@ -911,6 +948,9 @@ export default {
     }
   },
   created() {
+
+    this.getAllCompanyList();
+
     this.getDicts("sys_course_temp_type").then(response => {
       this.typeOptions = response.data;
     });
@@ -926,14 +966,23 @@ export default {
     }).catch(res=>{
 
     });
-    courserCouponOptions().then(res=>{ 
-      this.courseCouponList = res.data;
-    }).catch(res=>{
+      courserCouponOptions().then(res=>{
+        this.courseCouponList = res.data;
+      }).catch(res=>{
 
     });
-    
+
+
+
   },
   methods: {
+
+    getAllCompanyList(){
+      getCompanyList().then(res=>{
+        this.companyList=res.data
+      })
+    },
+
     getPickerOptions() {
       const durationInMinutes = Math.floor(this.form.duration / 60); // 将秒转换为分钟
       const endHour = Math.floor(durationInMinutes / 60); // 起始小时
@@ -1376,6 +1425,10 @@ export default {
       }).catch(() => {
       });
     },
+
+    handlerChangeCompany() {
+      this.syncTemplateOpen.open=true;
+    },
     /** 同步模板数据*/
     handleSync() {
       const courseId = this.courseId;
@@ -1386,6 +1439,29 @@ export default {
       }).then(function () {
         return syncTemplate(courseId);
       }).then(() => {
+        this.syncTemplateOpen.open = false;
+        this.getList();
+        this.msgSuccess("正在同步模板中!!请稍后!");
+      }).catch(() => {
+      });
+    },
+
+    /** 同步模板数据*/
+    handleSyncCompanyId() {
+      const courseId = this.courseId;
+      const companyId = this.syncTemplateOpen.companyId;
+      if (!companyId) {
+        this.$message.warning("请选择销售公司");
+        return;
+      }
+      this.$confirm('是否同步课程数据至模板', "确认", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(function () {
+        return syncTemplateByCompanyId(courseId,companyId);
+      }).then(() => {
+        this.syncTemplateOpen.open = false;
         this.getList();
         this.msgSuccess("正在同步模板中!!请稍后!");
       }).catch(() => {

+ 88 - 25
src/views/course/coursePlaySourceConfig/index.vue

@@ -131,7 +131,7 @@
       <el-table-column type="selection" width="55" align="center" />
       <el-table-column label="ID" align="center" prop="id" />
       <el-table-column label="名称" align="center" prop="name" />
-      <el-table-column label="所属公司" align="center" prop="companyId" :formatter="companyNameFormatter"/>
+<!--      <el-table-column label="所属公司" align="center" prop="companyId" :formatter="companyNameFormatter"/>-->
       <el-table-column label="图标" align="center" prop="img">
         <template slot-scope="scope">
           <el-image
@@ -144,19 +144,38 @@
       <el-table-column label="原始ID" align="center" prop="originalId" />
       <el-table-column label="appId" align="center" prop="appid" />
       <el-table-column label="secret" align="center" prop="secret" />
-      <el-table-column label="token" align="center" prop="token" />
-      <el-table-column label="aesKey" align="center" prop="aesKey" />
       <el-table-column label="msgDataFormat" align="center" prop="msgDataFormat" />
-      <el-table-column label="类型" align="center" prop="type">
+      <el-table-column label="积分商品" align="center" prop="integralGoods">
         <template slot-scope="scope">
-          <dict-tag  :options="typesOptions" :value="scope.row.type"/>
-        </template>
-      </el-table-column>
-      <el-table-column label="授权方式" align="center" prop="authType">
-        <template slot-scope="scope">
-          <dict-tag  :options="authTypeOptions" :value="scope.row.authType"/>
+          <div v-if="scope.row.integralGoods">
+            <el-tooltip
+              v-for="id in scope.row.integralGoods.split(',')"
+              :key="id"
+              :content="getGoodsNameById(id)"
+              placement="top"
+              :open-delay="300"
+            >
+              <el-tag
+                size="small"
+                style="margin-right: 4px; margin-bottom: 4px; max-width: 120px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;"
+              >
+                {{ getGoodsNameById(id) }}
+              </el-tag>
+            </el-tooltip>
+          </div>
+          <span v-else>-</span>
         </template>
       </el-table-column>
+<!--      <el-table-column label="类型" align="center" prop="type">-->
+<!--        <template slot-scope="scope">-->
+<!--          <dict-tag  :options="typesOptions" :value="scope.row.type"/>-->
+<!--        </template>-->
+<!--      </el-table-column>-->
+<!--      <el-table-column label="授权方式" align="center" prop="authType">-->
+<!--        <template slot-scope="scope">-->
+<!--          <dict-tag  :options="authTypeOptions" :value="scope.row.authType"/>-->
+<!--        </template>-->
+<!--      </el-table-column>-->
       <el-table-column label="互医/商城小程序" align="center" prop="isMall" width="80px">
         <template slot-scope="scope">
           <el-tag prop="isMall" v-for="(item, index) in isMallOptions" v-if="scope.row.isMall==item.dictValue">{{item.dictLabel}}</el-tag>
@@ -171,9 +190,7 @@
           </el-tag>
         </template>
       </el-table-column>
-      <el-table-column label="配置绑定Id" align="center" prop="merchantConfigId" />
-      <el-table-column label="创建时间" align="center" prop="createTime" />
-      <el-table-column label="修改时间" align="center" prop="updateTime" />
+      <el-table-column label="配置绑定Id" align="center" prop="merchantConfigId" width="85px"/>
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
         <template slot-scope="scope">
           <el-button
@@ -195,7 +212,7 @@
             type="text"
             icon="el-icon-setting"
             @click="handleSwitchConfig(scope.row)"
-          >是否展示销售</el-button>
+          >展示销售</el-button>
           <el-button
             size="mini"
             type="text"
@@ -203,7 +220,7 @@
             @click="handleBind(scope.row)"
             v-hasPermi="['course:playSourceConfig:bind']"
             v-if="!scope.row.merchantConfigId"
-          >绑定</el-button>
+          >绑定商户</el-button>
           <el-button
             size="mini"
             type="text"
@@ -258,7 +275,7 @@
             />
           </el-select>
         </el-form-item>
-         <el-form-item label="可查看设置公司" prop="setCompanyIdList">
+        <el-form-item label="可查看设置公司" prop="setCompanyIdList">
           <el-select
             v-model="form.setCompanyIdList"
             filterable
@@ -295,7 +312,7 @@
             />
           </el-select>
         </el-form-item>
-                <el-form-item label="状态" prop="status">
+        <el-form-item label="状态" prop="status">
           <el-select
             v-model="form.status"
             placeholder="请选择状态"
@@ -345,12 +362,6 @@
         <el-form-item label="secret" prop="secret">
           <el-input v-model="form.secret" placeholder="请输入secret" />
         </el-form-item>
-        <el-form-item label="token" prop="token">
-          <el-input v-model="form.token" placeholder="请输入token" />
-        </el-form-item>
-        <el-form-item label="aesKey" prop="aesKey">
-          <el-input v-model="form.aesKey" placeholder="请输入aesKey" />
-        </el-form-item>
         <el-form-item label="msgDataFormat" prop="msgDataFormat">
           <el-input v-model="form.msgDataFormat" placeholder="请输入msgDataFormat" />
         </el-form-item>
@@ -360,6 +371,27 @@
         <el-form-item label="备案号" prop="recordNumber">
           <el-input v-model="form.recordNumber" placeholder="请输入备案号" />
         </el-form-item>
+        <el-form-item label="积分商品配置" prop="integralGoods" >
+          <el-select
+            v-model="form.integralGoods"
+            filterable
+            multiple
+            remote
+            reserve-keyword
+            placeholder="请选择积分商品配置"
+            clearable
+            style="width: 625px"
+            size="small"
+          >
+            <el-option
+              v-for="item in IntegralGoodsList"
+              :key="item.goodsId"
+              :label="`${item.goodsName} 【所需积分: ${item.integral} / 需支付现金: ${item.cash} 元】`"
+              :value="item.goodsId"
+              :disabled="form.integralGoods && form.integralGoods.length >= 3 && !form.integralGoods.includes(item.goodsId)"
+            />
+          </el-select>
+        </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer">
         <el-button type="primary" @click="showOpenPlatformWarning">确 定</el-button>
@@ -457,6 +489,7 @@ import {updateIsTownOn} from "@/api/system/config";
 import { allList } from '@/api/company/company'
 import { resetForm } from '@/utils/common'
 import { listMerchantAppConfig } from "@/api/merchantAppConfig/merchantAppConfig";
+import { norIntegralGoodsList } from '@/api/his/integralGoods'
 
 export default {
   name: 'CoursePlaySourceConfig',
@@ -518,6 +551,8 @@ export default {
       loading: false,
       list: [],
       total: 0,
+      //正常的积分列表
+      IntegralGoodsList:[],
       typesOptions: [],
             statusOptions: [
         {
@@ -605,6 +640,9 @@ export default {
         listClass: 'primary'}
       })
     });
+
+    this.getIntegralGoodsList();
+
     //初始化formatterCompanyOptions
     allList().then(e => {
       this.formatterCompanyOptions = e.rows;
@@ -618,6 +656,12 @@ export default {
       this.companyOptions = [];
       this.open = false;
     },
+
+    getGoodsNameById(id) {
+      const goods = this.IntegralGoodsList.find(item => item.goodsId == id)
+      return goods ? goods.goodsName : id
+    },
+
     showOpenPlatformWarning() {
       if (this.form.authType=='1'){
         this.$confirm('必须绑定开放平台,否则会导致看课冲突。是否继续?', '提示', {
@@ -637,6 +681,13 @@ export default {
       }
 
     },
+
+    getIntegralGoodsList(){
+      norIntegralGoodsList().then(res=>{
+        this.IntegralGoodsList= res.rows
+
+      })
+    },
     // 协议配置处理
     handleAgreement(row) {
       // 获取当前行的协议相关信息
@@ -885,7 +936,13 @@ export default {
           );
           // this.form.setCompanyIdList = this.form.setCompanyIds.split(",").map(str => parseInt(str, 10));
         }
-        console.log( this.form);
+        if(!!this.form.integralGoods){
+          this.$set(
+            this.form,
+            "integralGoods",
+            this.form.integralGoods.split(",").map(str => parseInt(str, 10))
+          );
+        }
         this.searchCompanies("");
         this.open = true
         this.title = "修改小程序配置"
@@ -917,7 +974,13 @@ export default {
           }else{
             this.form.setCompanyIds = "";
           }
-          console.log(this.form);
+
+          if(!!this.form.integralGoods && this.form.integralGoods.length > 0){
+            this.form.integralGoods = this.form.integralGoods.join(',')
+          }else{
+            this.form.integralGoods = "";
+          }
+
           if (this.form.id != null) {
             update(this.form).then(response => {
               const {code, msg} = response