Bläddra i källkod

Merge branch 'master' into 红德堂APP调试

Long 1 dag sedan
förälder
incheckning
9c4f7dd8dd

+ 23 - 0
.env.prod-bjczwh

@@ -0,0 +1,23 @@
+# 页面标题
+VUE_APP_TITLE =存在文化SCRM销售端
+# 公司名称
+VUE_APP_COMPANY_NAME =北京存在文化
+# ICP备案号
+VUE_APP_ICP_RECORD =京ICP备2024100370号-1
+# ICP网站访问地址
+VUE_APP_ICP_URL =https://beian.miit.gov.cn
+# 网站LOG
+VUE_APP_LOG_URL =@/assets/logo/bjczwh.png
+
+# 生产环境配置
+ENV = 'production'
+
+# FS管理系统/开发环境
+VUE_APP_BASE_API = '/prod-api'
+
+
+#默认 1、会员 2、企微
+VUE_APP_COURSE_DEFAULT = 1
+
+# 路由懒加载
+VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 22 - 0
.env.prod-bjyjb

@@ -0,0 +1,22 @@
+# 页面标题
+VUE_APP_TITLE =医健宝SCRM销售端
+# 公司名称
+VUE_APP_COMPANY_NAME = 医健宝智慧(北京)医药科技有限公司
+# ICP备案号
+VUE_APP_ICP_RECORD =
+# ICP网站访问地址
+VUE_APP_ICP_URL =
+# 网站LOG
+VUE_APP_LOG_URL =@/assets/logo/bjyjb.jpg
+
+# 生产环境配置
+ENV = 'production'
+
+# FS管理系统/开发环境
+VUE_APP_BASE_API = '/prod-api'
+
+#默认 1、会员 2、企微
+VUE_APP_COURSE_DEFAULT = 1
+
+# 路由懒加载
+VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 22 - 0
.env.prod-cqxzt

@@ -0,0 +1,22 @@
+# 页面标题
+VUE_APP_TITLE =襄之棠SCRM销售端
+# 公司名称
+VUE_APP_COMPANY_NAME =重庆襄之棠大药房连锁有限公司
+# ICP备案号
+VUE_APP_ICP_RECORD =
+# ICP网站访问地址
+VUE_APP_ICP_URL =
+# 网站LOG
+VUE_APP_LOG_URL =@/assets/logo/cqxzt.png
+
+# 生产环境配置
+ENV = 'production'
+
+# FS管理系统/开发环境
+VUE_APP_BASE_API = '/prod-api'
+
+#默认 1、会员 2、企微
+VUE_APP_COURSE_DEFAULT = 1
+
+# 路由懒加载
+VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 3 - 0
package.json

@@ -27,7 +27,10 @@
     "build:prod-whhm": "vue-cli-service build --mode prod-whhm",
     "build:prod-drk": "vue-cli-service build --mode prod-drk",
     "build:prod-qdtst": "vue-cli-service build --mode prod-qdtst",
+    "build:prod-bjczwh": "vue-cli-service build --mode prod-bjczwh",
     "build:prod-jkj": "vue-cli-service build --mode prod-jkj",
+    "build:prod-cqxzt": "vue-cli-service build --mode prod-cqxzt",
+    "build:prod-bjyjb": "vue-cli-service build --mode prod-bjyjb",
     "preview": "node build/index.js --preview",
     "lint": "eslint --ext .js,.vue src",
     "test:unit": "jest --clearCache && vue-cli-service test:unit",

BIN
src/assets/logo/bjczwh.png


BIN
src/assets/logo/bjyjb.jpg


BIN
src/assets/logo/cqxzt.png


+ 173 - 61
src/views/course/courseWatchLog/deptWatchLog.vue

@@ -88,41 +88,71 @@
 <!--          @keyup.enter.native="handleQuery"-->
 <!--        />-->
 <!--      </el-form-item>-->
+      <!-- 营期时间 -->
       <el-form-item label="营期时间" prop="scheduleTime">
-        <el-date-picker
+        <el-input
+          v-model="scheduleTimeText"
+          placeholder="请选择营期时间"
+          readonly
+          @click.native="showScheduleCalendar = true"
+        />
+        <calendar
           v-model="scheduleTime"
-          type="daterange"
-          size="small"
-          style="width: 240px"
-          value-format="yyyy-MM-dd"
-          range-separator="-"
-          start-placeholder="开始日期"
-          end-placeholder="结束日期"
-          @change="handleScheduleTimeChange">
-        </el-date-picker>
+          mode="during"
+          :show.sync="showScheduleCalendar"
+          @change="handleScheduleTimeChange"
+          :key="scheduleCalendarKey"
+        />
       </el-form-item>
+      <!-- 创建时间 -->
       <el-form-item label="创建时间" prop="createTime">
-        <el-date-picker v-model="createTime" size="small" style="width: 220px" value-format="yyyy-MM-dd" type="daterange"
-                        range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" @change="createChange"></el-date-picker>
+        <el-input
+          v-model="createTimeText"
+          placeholder="请选择创建时间"
+          readonly
+          @click.native="showCreateCalendar = true"
+        />
+        <calendar
+          v-model="createTime"
+          mode="during"
+          :show.sync="showCreateCalendar"
+          @change="createChange"
+          :key="createCalendarKey"
+        />
       </el-form-item>
+      <!-- 最新更新时间 -->
       <el-form-item label="最新更新时间" prop="updateTime">
-        <el-date-picker v-model="updateTime" size="small" style="width: 220px" value-format="yyyy-MM-dd" type="daterange"
-                        range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" @change="updateChange"></el-date-picker>
+        <el-input
+          v-model="updateTimeText"
+          placeholder="请选择更新时间"
+          readonly
+          @click.native="showUpdateCalendar = true"
+        />
+        <calendar
+          v-model="updateTime"
+          mode="during"
+          :show.sync="showUpdateCalendar"
+          @change="updateChange"
+          :key="updateCalendarKey"
+        />
       </el-form-item>
-      <el-form-item label="进线时间" prop="updateTime">
-        <el-date-picker
+      <!-- 进线时间 -->
+      <el-form-item label="进线时间" prop="qecCreateTime">
+        <el-input
+          v-model="qecCreateTimeText"
+          placeholder="请选择进线时间"
+          readonly
+          @click.native="showQecCalendar = true"
+        />
+        <calendar
           v-model="qecCreateTime"
-          size="small"
-          style="width: 220px"
-          value-format="yyyy-MM-dd"
-          type="daterange"
-          range-separator="-"
-          start-placeholder="开始日期"
-          end-placeholder="结束日期"
+          mode="during"
+          :show.sync="showQecCalendar"
           @change="qecCreateTimeChange"
-          :picker-options="pickerOptions"
-        ></el-date-picker>
+          :key="qecCalendarKey"
+        />
       </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>
@@ -320,13 +350,39 @@ import {courseList, myListCourseRedPacketLog, videoList} from '@/api/course/cour
 import {myListLogs} from "@/api/course/courseAnswerlogs";
 import { getCompanyUserListLikeName } from "@/api/company/companyUser";
 import {getTask} from "@/api/common";
+import Vue from 'vue'
+import Calendar from 'vue-mobile-calendar'
+Vue.use(Calendar)
+
+
 export default {
   name: "CourseWatchLog",
   data() {
     return {
+      // 日历 key 控制刷新
+      scheduleCalendarKey: 0,
+      createCalendarKey: 0,
+      updateCalendarKey: 0,
+      qecCalendarKey: 0,
+
+      createTimeText: '',
+      scheduleTimeText: '',  // 新增
+      updateTimeText: '',    // 新增
+      qecCreateTimeText: '', // 新增
+
+      scheduleTime: [],  // 改为数组
+      createTime: [],    // 改为数组
+      updateTime: [],    // 改为数组
+      qecCreateTime: [], // 改为数组
+
+      // 控制日历显隐
+      showScheduleCalendar: false,
+      showCreateCalendar: false,
+      showUpdateCalendar: false,
+      showQecCalendar: false,
+
+
       activeName:"00",
-      createTime:null,
-      updateTime:null,
       courseLists:[],
       videoList:[],
       logTypeOptions:[],
@@ -371,7 +427,6 @@ export default {
         pageSize: 10,
       },
 
-      qecCreateTime:null,
       pickerOptions: {
         disabledDate(time) {
           // 获取6天前的日期(加上今天就是7天)
@@ -419,7 +474,6 @@ export default {
       // 表单校验
       rules: {
       },
-      scheduleTime: null,
       // 员工选项列表
       companyUserOptionsParams: {
         name: undefined,
@@ -441,6 +495,28 @@ export default {
     });
   },
   methods: {
+    // 重置日历组件
+    resetCalendars() {
+      this.scheduleTime = [];
+      this.createTime = [];
+      this.updateTime = [];
+      this.qecCreateTime = [];
+
+      this.scheduleTimeText = '';
+      this.createTimeText = '';
+      this.updateTimeText = '';
+      this.qecCreateTimeText = '';
+
+      // 强制刷新日历组件
+      this.scheduleCalendarKey++;
+      this.createCalendarKey++;
+      this.updateCalendarKey++;
+      this.qecCalendarKey++;
+    },
+    formatDateRange(dates) {
+      if (!dates || dates.length < 2) return '';
+      return dates.map(date => date.format('YYYY-MM-DD')).join(' ~ ');
+    },
     courseChange(row){
       this.queryParams.videoId=null;
       if(row === ''){
@@ -451,35 +527,7 @@ export default {
         this.videoList=response.list
       });
     },
-    createChange() {
-      if (this.createTime != null) {
-        this.queryParams.sTime = this.createTime[0];
-        this.queryParams.eTime = this.createTime[1];
-      } else {
-        this.queryParams.sTime = null;
-        this.queryParams.eTime = null;
-      }
-    },
-
-    updateChange(){
-      if (this.updateTime != null) {
-        this.queryParams.upSTime = this.updateTime[0];
-        this.queryParams.upETime = this.updateTime[1];
-      } else {
-        this.queryParams.upSTime = null;
-        this.queryParams.upETime = null;
-      }
-    },
 
-    qecCreateTimeChange(){
-      if (this.qecCreateTime != null) {
-        this.queryParams.qecSTime = this.qecCreateTime[0];
-        this.queryParams.qecETime = this.qecCreateTime[1];
-      } else {
-        this.queryParams.qecSTime = null;
-        this.queryParams.qecETime = null;
-      }
-    },
     handleClickX(tab,event){
       this.activeName=tab.name;
       if(tab.name=="00"){
@@ -669,15 +717,79 @@ export default {
       })
     },
 
-    handleScheduleTimeChange(val) {
-      if (val) {
-        this.queryParams.scheduleStartTime = val[0];
-        this.queryParams.scheduleEndTime = val[1];
+    // 营期时间
+    handleScheduleTimeChange(scheduleTime) {
+      if (scheduleTime && scheduleTime.length >= 2) {
+        this.scheduleTimeText = this.formatDateRange(scheduleTime);
+        this.queryParams.scheduleStartTime = scheduleTime.map(date => date.format('YYYY-MM-DD'))[0] || null;
+        this.queryParams.scheduleEndTime = scheduleTime.map(date => date.format('YYYY-MM-DD'))[1] || null;
       } else {
+        this.scheduleTimeText = '';
         this.queryParams.scheduleStartTime = null;
         this.queryParams.scheduleEndTime = null;
       }
     },
+    // 创建时间
+    createChange(createTime) {
+      if (createTime && createTime.length >= 2) {
+        this.createTimeText = this.formatDateRange(createTime);
+        this.queryParams.sTime = createTime.map(date => date.format('YYYY-MM-DD'))[0] || null;
+        this.queryParams.eTime = createTime.map(date => date.format('YYYY-MM-DD'))[1] || null;
+      } else {
+        this.createTimeText = '';
+        this.queryParams.sTime = null;
+        this.queryParams.eTime = null;
+      }
+    },
+
+    // 更新时间
+    updateChange(updateTime) {
+      if (updateTime && updateTime.length >= 2) {
+        this.updateTimeText = this.formatDateRange(updateTime);
+        this.queryParams.upSTime = updateTime.map(date => date.format('YYYY-MM-DD'))[0] || null;
+        this.queryParams.upETime = updateTime.map(date => date.format('YYYY-MM-DD'))[1] || null;
+      } else {
+        this.updateTimeText = '';
+        this.queryParams.upSTime = null;
+        this.queryParams.upETime = null;
+      }
+    },
+
+    // 进线时间
+    qecCreateTimeChange(qecCreateTime) {
+      if (qecCreateTime && qecCreateTime.length >= 2) {
+        // 检查选择的日期范围是否超过7天(包括起始和结束日期)
+        const startDate = new Date(qecCreateTime[0]);
+        const endDate = new Date(qecCreateTime[1]);
+
+        // 设置时间为当天开始,避免时间部分影响计算
+        startDate.setHours(0, 0, 0, 0);
+        endDate.setHours(0, 0, 0, 0);
+
+        const timeDiff = Math.abs(endDate - startDate);
+        const diffDays = Math.ceil(timeDiff / (1000 * 60 * 60 * 24));
+
+        // 如果超过6天的范围(总共7天,包括起始日)
+        if (diffDays > 6) {
+          this.$message.error('进线时间选择范围不能超过7天');
+          // 清空选择
+          this.qecCreateTime = [];
+          this.qecCreateTimeText = '';
+          this.queryParams.qecSTime = null;
+          this.queryParams.qecETime = null;
+          this.qecCalendarKey++;
+          return;
+        }
+
+        this.qecCreateTimeText = this.formatDateRange(qecCreateTime);
+        this.queryParams.qecSTime = qecCreateTime.map(date => date.format('YYYY-MM-DD'))[0] || null;
+        this.queryParams.qecETime = qecCreateTime.map(date => date.format('YYYY-MM-DD'))[1] || null;
+      } else {
+        this.qecCreateTimeText = '';
+        this.queryParams.qecSTime = null;
+        this.queryParams.qecETime = null;
+      }
+    },
     /**
      * 根据名称模糊查询用户列表
      * @param query 参数

+ 23 - 0
src/views/course/courseWatchLog/index.vue

@@ -683,6 +683,29 @@ export default {
     // 进线时间
     qecCreateTimeChange(qecCreateTime) {
       if (qecCreateTime && qecCreateTime.length >= 2) {
+        // 检查选择的日期范围是否超过7天(包括起始和结束日期)
+        const startDate = new Date(qecCreateTime[0]);
+        const endDate = new Date(qecCreateTime[1]);
+
+        // 设置时间为当天开始,避免时间部分影响计算
+        startDate.setHours(0, 0, 0, 0);
+        endDate.setHours(0, 0, 0, 0);
+
+        const timeDiff = Math.abs(endDate - startDate);
+        const diffDays = Math.ceil(timeDiff / (1000 * 60 * 60 * 24));
+
+        // 如果超过6天的范围(总共7天,包括起始日)
+        if (diffDays > 6) {
+          this.$message.error('进线时间选择范围不能超过7天');
+          // 清空选择
+          this.qecCreateTime = [];
+          this.qecCreateTimeText = '';
+          this.queryParams.qecSTime = null;
+          this.queryParams.qecETime = null;
+          this.qecCalendarKey++;
+          return;
+        }
+
         this.qecCreateTimeText = this.formatDateRange(qecCreateTime);
         this.queryParams.qecSTime = qecCreateTime.map(date => date.format('YYYY-MM-DD'))[0] || null;
         this.queryParams.qecETime = qecCreateTime.map(date => date.format('YYYY-MM-DD'))[1] || null;

+ 0 - 16
src/views/course/courseWatchLog/myCourseWatchLog.vue

@@ -83,7 +83,6 @@
           start-placeholder="开始日期"
           end-placeholder="结束日期"
           @change="qecCreateTimeChange"
-          :picker-options="pickerOptions"
         ></el-date-picker>
       </el-form-item>
       <el-form-item>
@@ -299,21 +298,6 @@ export default {
 
       createTime:null,
       qecCreateTime:null,
-      pickerOptions: {
-        disabledDate(time) {
-          // 获取6天前的日期(加上今天就是7天)
-          const sixDaysAgo = new Date();
-          sixDaysAgo.setDate(sixDaysAgo.getDate() - 6);
-          sixDaysAgo.setHours(0, 0, 0, 0);
-
-          // 获取明天的日期(不包括今天)
-          const tomorrow = new Date();
-          tomorrow.setDate(tomorrow.getDate() + 1);
-          tomorrow.setHours(0, 0, 0, 0);
-
-          return time.getTime() < sixDaysAgo.getTime() || time.getTime() >= tomorrow.getTime();
-        }
-      },
       courseLists:[],
       videoList:[],
       myQwUserList:[],

+ 181 - 70
src/views/course/courseWatchLog/watchLog.vue

@@ -79,42 +79,69 @@
           />
         </el-select>
       </el-form-item>
+      <!-- 营期时间 -->
       <el-form-item label="营期时间" prop="scheduleTime">
-        <el-date-picker
+        <el-input
+          v-model="scheduleTimeText"
+          placeholder="请选择营期时间"
+          readonly
+          @click.native="showScheduleCalendar = true"
+        />
+        <calendar
           v-model="scheduleTime"
-          type="daterange"
-          size="small"
-          style="width: 240px"
-          value-format="yyyy-MM-dd"
-          range-separator="-"
-          start-placeholder="开始日期"
-          end-placeholder="结束日期"
-          @change="handleScheduleTimeChange">
-        </el-date-picker>
+          mode="during"
+          :show.sync="showScheduleCalendar"
+          @change="handleScheduleTimeChange"
+          :key="scheduleCalendarKey"
+        />
       </el-form-item>
+      <!-- 创建时间 -->
       <el-form-item label="创建时间" prop="createTime">
-        <el-date-picker v-model="createTime" size="small" style="width: 220px" value-format="yyyy-MM-dd"
-                        type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期"
-                        @change="createChange"></el-date-picker>
+        <el-input
+          v-model="createTimeText"
+          placeholder="请选择创建时间"
+          readonly
+          @click.native="showCreateCalendar = true"
+        />
+        <calendar
+          v-model="createTime"
+          mode="during"
+          :show.sync="showCreateCalendar"
+          @change="createChange"
+          :key="createCalendarKey"
+        />
       </el-form-item>
+      <!-- 最新更新时间 -->
       <el-form-item label="最新更新时间" prop="updateTime">
-        <el-date-picker v-model="updateTime" size="small" style="width: 220px" value-format="yyyy-MM-dd" type="daterange"
-                        range-separator="-" start-placeholder="开始日期"
-                        end-placeholder="结束日期" @change="updateChange"></el-date-picker>
+        <el-input
+          v-model="updateTimeText"
+          placeholder="请选择更新时间"
+          readonly
+          @click.native="showUpdateCalendar = true"
+        />
+        <calendar
+          v-model="updateTime"
+          mode="during"
+          :show.sync="showUpdateCalendar"
+          @change="updateChange"
+          :key="updateCalendarKey"
+        />
       </el-form-item>
-      <el-form-item label="进线时间" prop="updateTime">
-        <el-date-picker
+      <!-- 进线时间 -->
+      <el-form-item label="进线时间" prop="qecCreateTime">
+        <el-input
+          v-model="qecCreateTimeText"
+          placeholder="请选择进线时间"
+          readonly
+          @click.native="showQecCalendar = true"
+        />
+        <calendar
           v-model="qecCreateTime"
-          size="small"
-          style="width: 220px"
-          value-format="yyyy-MM-dd"
-          type="daterange"
-          range-separator="-"
-          start-placeholder="开始日期"
-          end-placeholder="结束日期"
+          mode="during"
+          :show.sync="showQecCalendar"
           @change="qecCreateTimeChange"
-          :picker-options="pickerOptions"
-        ></el-date-picker>
+          :key="qecCalendarKey"
+        />
       </el-form-item>
 
       <el-form-item>
@@ -432,22 +459,41 @@ import {getMyQwUserList} from "@/api/qw/user";
 import {searchTags} from "../../../api/qw/tag";
 import {addTagByWatch, delTagByWatch} from "../../../api/qw/externalContact";
 import {allListTagGroup} from "../../../api/qw/tagGroup";
-
+import Vue from 'vue'
+import Calendar from 'vue-mobile-calendar'
+Vue.use(Calendar)
 
 export default {
   name: "CourseWatchLog",
   data() {
     return {
+      // 日历 key 控制刷新
+      scheduleCalendarKey: 0,
+      createCalendarKey: 0,
+      updateCalendarKey: 0,
+      qecCalendarKey: 0,
+
+      createTimeText: '',
+      scheduleTimeText: '',  // 新增
+      updateTimeText: '',    // 新增
+      qecCreateTimeText: '', // 新增
+
+      scheduleTime: [],  // 改为数组
+      createTime: [],    // 改为数组
+      updateTime: [],    // 改为数组
+      qecCreateTime: [], // 改为数组
+
+      // 控制日历显隐
+      showScheduleCalendar: false,
+      showCreateCalendar: false,
+      showUpdateCalendar: false,
+      showQecCalendar: false,
 
       resultDialogVisible: false,
       resultMessage: '',
       resultTitle:'',
 
       activeName:"2",
-      createTime: null,
-      updateTime:null,
-
-      qecCreateTime:null,
       pickerOptions: {
         disabledDate(time) {
           // 获取6天前的日期(加上今天就是7天)
@@ -475,7 +521,6 @@ export default {
       ids: [],
       // 非单个禁用
       single: true,
-      scheduleTime: null,
       // 非多个禁用
       multiple: true,
       // 显示搜索条件
@@ -589,6 +634,28 @@ export default {
     });
   },
   methods: {
+    // 重置日历组件
+    resetCalendars() {
+      this.scheduleTime = [];
+      this.createTime = [];
+      this.updateTime = [];
+      this.qecCreateTime = [];
+
+      this.scheduleTimeText = '';
+      this.createTimeText = '';
+      this.updateTimeText = '';
+      this.qecCreateTimeText = '';
+
+      // 强制刷新日历组件
+      this.scheduleCalendarKey++;
+      this.createCalendarKey++;
+      this.updateCalendarKey++;
+      this.qecCalendarKey++;
+    },
+    formatDateRange(dates) {
+      if (!dates || dates.length < 2) return '';
+      return dates.map(date => date.format('YYYY-MM-DD')).join(' ~ ');
+    },
     courseChange(row) {
       this.queryParams.videoId = null;
       if (row === '') {
@@ -608,34 +675,6 @@ export default {
       }
       this.getList();
     },
-    createChange() {
-      if (this.createTime != null) {
-        this.queryParams.sTime = this.createTime[0];
-        this.queryParams.eTime = this.createTime[1];
-      } else {
-        this.queryParams.sTime = null;
-        this.queryParams.eTime = null;
-      }
-    },
-    updateChange(){
-      if (this.updateTime != null) {
-        this.queryParams.upSTime = this.updateTime[0];
-        this.queryParams.upETime = this.updateTime[1];
-      } else {
-        this.queryParams.upSTime = null;
-        this.queryParams.upETime = null;
-      }
-    },
-
-    qecCreateTimeChange(){
-      if (this.qecCreateTime != null) {
-        this.queryParams.qecSTime = this.qecCreateTime[0];
-        this.queryParams.qecETime = this.qecCreateTime[1];
-      } else {
-        this.queryParams.qecSTime = null;
-        this.queryParams.qecETime = null;
-      }
-    },
 
     handleClickX(tab) {
       this.activeName=tab.name;
@@ -647,15 +686,81 @@ export default {
       this.getList()
     },
 
-    handleScheduleTimeChange(val) {
-      if (val) {
-        this.queryParams.scheduleStartTime = val[0];
-        this.queryParams.scheduleEndTime = val[1];
+    // 营期时间
+    handleScheduleTimeChange(scheduleTime) {
+      if (scheduleTime && scheduleTime.length >= 2) {
+        this.scheduleTimeText = this.formatDateRange(scheduleTime);
+        this.queryParams.scheduleStartTime = scheduleTime.map(date => date.format('YYYY-MM-DD'))[0] || null;
+        this.queryParams.scheduleEndTime = scheduleTime.map(date => date.format('YYYY-MM-DD'))[1] || null;
+        console.log(this.queryParams.scheduleStartTime)
+        console.log(this.queryParams.scheduleEndTime)
       } else {
+        this.scheduleTimeText = '';
         this.queryParams.scheduleStartTime = null;
         this.queryParams.scheduleEndTime = null;
       }
     },
+    // 创建时间
+    createChange(createTime) {
+      if (createTime && createTime.length >= 2) {
+        this.createTimeText = this.formatDateRange(createTime);
+        this.queryParams.sTime = createTime.map(date => date.format('YYYY-MM-DD'))[0] || null;
+        this.queryParams.eTime = createTime.map(date => date.format('YYYY-MM-DD'))[1] || null;
+      } else {
+        this.createTimeText = '';
+        this.queryParams.sTime = null;
+        this.queryParams.eTime = null;
+      }
+    },
+
+    // 更新时间
+    updateChange(updateTime) {
+      if (updateTime && updateTime.length >= 2) {
+        this.updateTimeText = this.formatDateRange(updateTime);
+        this.queryParams.upSTime = updateTime.map(date => date.format('YYYY-MM-DD'))[0] || null;
+        this.queryParams.upETime = updateTime.map(date => date.format('YYYY-MM-DD'))[1] || null;
+      } else {
+        this.updateTimeText = '';
+        this.queryParams.upSTime = null;
+        this.queryParams.upETime = null;
+      }
+    },
+
+    // 进线时间
+    qecCreateTimeChange(qecCreateTime) {
+      if (qecCreateTime && qecCreateTime.length >= 2) {
+        // 检查选择的日期范围是否超过7天(包括起始和结束日期)
+        const startDate = new Date(qecCreateTime[0]);
+        const endDate = new Date(qecCreateTime[1]);
+
+        // 设置时间为当天开始,避免时间部分影响计算
+        startDate.setHours(0, 0, 0, 0);
+        endDate.setHours(0, 0, 0, 0);
+
+        const timeDiff = Math.abs(endDate - startDate);
+        const diffDays = Math.ceil(timeDiff / (1000 * 60 * 60 * 24));
+
+        // 如果超过6天的范围(总共7天,包括起始日)
+        if (diffDays > 6) {
+          this.$message.error('进线时间选择范围不能超过7天');
+          // 清空选择
+          this.qecCreateTime = [];
+          this.qecCreateTimeText = '';
+          this.queryParams.qecSTime = null;
+          this.queryParams.qecETime = null;
+          this.qecCalendarKey++;
+          return;
+        }
+
+        this.qecCreateTimeText = this.formatDateRange(qecCreateTime);
+        this.queryParams.qecSTime = qecCreateTime.map(date => date.format('YYYY-MM-DD'))[0] || null;
+        this.queryParams.qecETime = qecCreateTime.map(date => date.format('YYYY-MM-DD'))[1] || null;
+      } else {
+        this.qecCreateTimeText = '';
+        this.queryParams.qecSTime = null;
+        this.queryParams.qecETime = null;
+      }
+    },
     /** 查询短链课程看课记录列表 */
     getList() {
       this.loading = true;
@@ -690,10 +795,17 @@ export default {
         companyUserId: null,
         companyId: null,
         courseId: null,
+        sTime:null,
+        eTime:null,
+        upSTime:null,
+        upETime:null,
+        qecSTime:null,
+        qecETime:null,
         scheduleStartTime: null,
         scheduleEndTime: null,
       };
-      this.scheduleTime=null;
+      // 统一重置日历组件
+      this.resetCalendars();
       this.resetForm("form");
     },
     /** 搜索按钮操作 */
@@ -704,8 +816,6 @@ export default {
     /** 重置按钮操作 */
     resetQuery() {
       this.resetForm("queryForm");
-      this.createTime = null;
-      this.qecCreateTime=null;
       this.queryParams.sTime = null;
       this.queryParams.eTime = null;
       this.queryParams.upSTime = null;
@@ -714,8 +824,9 @@ export default {
       this.queryParams.qecETime = null;
       this.queryParams.scheduleStartTime = null;
       this.queryParams.scheduleEndTime = null;
-      this.scheduleTime=null;
-      this.updateTime=null;
+      // 统一重置日历组件
+      this.resetCalendars();
+
       this.handleQuery();
     },
     // 多选框选中数据

+ 2 - 2
src/views/qw/material/ImageUpload.vue

@@ -46,8 +46,8 @@ export default {
     },
     // 大小限制(MB)
     fileSize: {
-       type: Number,
-      default: 10,
+        type: Number,
+        default: 10,
     },
     // 文件类型, 例如['png', 'jpg', 'jpeg']
     fileType: {

+ 153 - 130
src/views/qw/material/index.vue

@@ -31,19 +31,19 @@
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
-      <el-form-item label="发送次数" prop="sendCount">
-        <el-input
-          v-model="queryParams.sendCount"
-          placeholder="请输入发送次数"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
+<!--      <el-form-item label="发送次数" prop="sendCount">-->
+<!--        <el-input-->
+<!--          v-model="queryParams.sendCount"-->
+<!--          placeholder="请输入发送次数"-->
+<!--          clearable-->
+<!--          size="small"-->
+<!--          @keyup.enter.native="handleQuery"-->
+<!--        />-->
+<!--      </el-form-item>-->
       <el-form-item>
         <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
         <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置/刷新页面/回到全部</el-button>
-        <el-button type="primary"  size="mini" @click="handleAdd()">添加素材</el-button>
+        <el-button type="primary"  size="mini" @click="handleAdd()" v-hasPermi="['qw:material:add']">添加素材</el-button>
       </el-form-item>
     </el-form>
 
@@ -102,14 +102,14 @@
                     </video>
                     <div v-else-if="scope.row.materialType == 'file'" class="file-link-container" style="width: 100%">
                       <el-link type="primary" :href="downloadUrl(scope.row.materialUrl)" download>
-                        下载文件
+                         {{scope.row.materialUrl}}
                       </el-link>
                     </div>
                   </template>
                 </el-table-column>
                 <el-table-column label="标题" align="center"  prop="title"/>
                 <el-table-column label="创建人" align="center"  prop="createName"/>
-                <el-table-column label="发送次数" align="center"  prop="sendCount"/>
+<!--                <el-table-column label="发送次数" align="center"  prop="sendCount"/>-->
                 <el-table-column label="隶属分组" align="center"  prop="materialGroupName"></el-table-column>
                 <el-table-column label="创建时间" align="center"  prop="createTime"/>
                 <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
@@ -119,14 +119,14 @@
                       type="text"
                       icon="el-icon-edit"
                       @click="handleUpdate(scope.row)"
-                      v-hasPermi="['qw:tag:edit']"
+                      v-hasPermi="['qw:material:edit']"
                     >修改</el-button>
                     <el-button
                       size="mini"
                       type="text"
                       icon="el-icon-delete"
                       @click="handleDelete(scope.row)"
-                      v-hasPermi="['qw:tag:remove']"
+                      v-hasPermi="['qw:material:remove']"
                     >删除</el-button>
                   </template>
                 </el-table-column>
@@ -146,7 +146,7 @@
                   </el-table-column>
                   <el-table-column label="标题" align="center"  prop="title"/>
                   <el-table-column label="创建人" align="center"  prop="createName"/>
-                  <el-table-column label="发送次数" align="center"  prop="sendCount"/>
+<!--                  <el-table-column label="发送次数" align="center"  prop="sendCount"/>-->
                   <el-table-column label="隶属分组" align="center"  prop="materialGroupName"></el-table-column>
                   <el-table-column label="创建时间" align="center"  prop="createTime"/>
                   <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
@@ -156,14 +156,14 @@
                         type="text"
                         icon="el-icon-edit"
                         @click="handleUpdate(scope.row)"
-                        v-hasPermi="['qw:tag:edit']"
+                        v-hasPermi="['qw:material:edit']"
                       >修改</el-button>
                       <el-button
                         size="mini"
                         type="text"
                         icon="el-icon-delete"
                         @click="handleDelete(scope.row)"
-                        v-hasPermi="['qw:tag:remove']"
+                        v-hasPermi="['qw:material:remove']"
                       >删除</el-button>
                     </template>
                   </el-table-column>
@@ -199,7 +199,7 @@
                           type="text"
                           icon="el-icon-edit"
                           @click="handleUpdate(item)"
-                          v-hasPermi="['qw:tag:edit']"
+                          v-hasPermi="['qw:material:edit']"
                         >修改</el-button>
                         <el-button
                           class="button"
@@ -207,101 +207,102 @@
                           type="text"
                           icon="el-icon-delete"
                           @click="handleDelete(item)"
-                          v-hasPermi="['qw:tag:remove']"
+                          v-hasPermi="['qw:material:remove']"
                         >删除</el-button>
                       </div>
                     </div>
                   </el-card>
                 </div>
             </el-tab-pane>
-            <el-tab-pane label="图文" name="4">
-              <div style="display: flex;  flex-wrap: wrap; gap: 10px; ">
-                <el-card
-                  v-for="(item, index) in imagetextMaterialsList"
-                  :key="index">
-                  <el-image
-                    v-if="item.titleUrl"
-                    style="width: 200px; height: 180px"
-                    :src="item.titleUrl"
-                    fit="contain"
-                    @click="openImageViewer(item.titleUrl)"
-                  />
-                  <div v-else style="width: 200px; height: 180px; display: flex; justify-content: center; align-items: center; border: 1px solid #dcdcdc;">
-                    暂无标题图片
-                  </div>
-                  <div style="margin-top: 3%">
-                    <div style="  display: flex;flex-direction: column;width: 200px">
-                      <span>标题:{{ item.title }}</span>
-                      <div style="display: flex; flex-wrap: wrap; word-break: break-all;margin:3% 0">
-                        <span>链接:</span>
-                        <el-link :href="item.materialUrl" target="_blank">{{ item.materialUrl }}</el-link>
-                      </div>
-                      <span>创建人:{{item.createName}}</span>
-                      <time class="time" style="white-space: nowrap">时间:{{ item.createTime }}</time>
-                    </div>
-                    <div class="bottom clearfix">
-                      <el-button
-                        class="button"
-                        size="mini"
-                        type="text"
-                        icon="el-icon-edit"
-                        @click="handleUpdate(item)"
-                        v-hasPermi="['qw:tag:edit']"
-                      >修改</el-button>
-                      <el-button
-                        class="button"
-                        size="mini"
-                        type="text"
-                        icon="el-icon-delete"
-                        @click="handleDelete(item)"
-                        v-hasPermi="['qw:tag:remove']"
-                      >删除</el-button>
-                    </div>
-                  </div>
-                </el-card>
-              </div>
-            </el-tab-pane>
-            <el-tab-pane label="语音" name="5">
-              <div style="display: flex;  flex-wrap: wrap; gap: 10px; ">
-                <el-card
-                  v-for="(item, index) in voiceMaterialsList"
-                  :key="index">
-                  <!--                    style="width: 250px;height: 300px">-->
-                  <!--                    <div class="card-header">-->
-                  <!--                      <el-checkbox-->
-                  <!--                        :label="item.id"-->
-                  <!--                        @change="handleSelectionChange($event, item)"-->
-                  <!--                      ></el-checkbox>-->
-                  <!--                    </div>-->
-                  <audio  controls :src="item.materialUrl" style="width: 300px;height: 50px"/>
-                  <div>
-                    <div style="  display: flex;flex-direction: column;width: 200px">
-                      <span>标题:{{ item.title }}</span>
-                      <span>创建人:{{item.createName}}</span>
-                      <time class="time" style="white-space: nowrap">时间:{{ item.createTime }}</time>
-                    </div>
-                    <div class="bottom clearfix">
-                      <el-button
-                        class="button"
-                        size="mini"
-                        type="text"
-                        icon="el-icon-edit"
-                        @click="handleUpdate(item)"
-                        v-hasPermi="['qw:tag:edit']"
-                      >修改</el-button>
-                      <el-button
-                        class="button"
-                        size="mini"
-                        type="text"
-                        icon="el-icon-delete"
-                        @click="handleDelete(item)"
-                        v-hasPermi="['qw:tag:remove']"
-                      >删除</el-button>
-                    </div>
-                  </div>
-                </el-card>
-              </div>
-            </el-tab-pane>
+
+<!--            <el-tab-pane label="图文" name="4">-->
+<!--              <div style="display: flex;  flex-wrap: wrap; gap: 10px; ">-->
+<!--                <el-card-->
+<!--                  v-for="(item, index) in imagetextMaterialsList"-->
+<!--                  :key="index">-->
+<!--                  <el-image-->
+<!--                    v-if="item.titleUrl"-->
+<!--                    style="width: 200px; height: 180px"-->
+<!--                    :src="item.titleUrl"-->
+<!--                    fit="contain"-->
+<!--                    @click="openImageViewer(item.titleUrl)"-->
+<!--                  />-->
+<!--                  <div v-else style="width: 200px; height: 180px; display: flex; justify-content: center; align-items: center; border: 1px solid #dcdcdc;">-->
+<!--                    暂无标题图片-->
+<!--                  </div>-->
+<!--                  <div style="margin-top: 3%">-->
+<!--                    <div style="  display: flex;flex-direction: column;width: 200px">-->
+<!--                      <span>标题:{{ item.title }}</span>-->
+<!--                      <div style="display: flex; flex-wrap: wrap; word-break: break-all;margin:3% 0">-->
+<!--                        <span>链接:</span>-->
+<!--                        <el-link :href="item.materialUrl" target="_blank">{{ item.materialUrl }}</el-link>-->
+<!--                      </div>-->
+<!--                      <span>创建人:{{item.createName}}</span>-->
+<!--                      <time class="time" style="white-space: nowrap">时间:{{ item.createTime }}</time>-->
+<!--                    </div>-->
+<!--                    <div class="bottom clearfix">-->
+<!--                      <el-button-->
+<!--                        class="button"-->
+<!--                        size="mini"-->
+<!--                        type="text"-->
+<!--                        icon="el-icon-edit"-->
+<!--                        @click="handleUpdate(item)"-->
+<!--                        v-hasPermi="['qw:material:edit']"-->
+<!--                      >修改</el-button>-->
+<!--                      <el-button-->
+<!--                        class="button"-->
+<!--                        size="mini"-->
+<!--                        type="text"-->
+<!--                        icon="el-icon-delete"-->
+<!--                        @click="handleDelete(item)"-->
+<!--                        v-hasPermi="['qw:material:remove']"-->
+<!--                      >删除</el-button>-->
+<!--                    </div>-->
+<!--                  </div>-->
+<!--                </el-card>-->
+<!--              </div>-->
+<!--            </el-tab-pane>-->
+<!--            <el-tab-pane label="语音" name="5">-->
+<!--              <div style="display: flex;  flex-wrap: wrap; gap: 10px; ">-->
+<!--                <el-card-->
+<!--                  v-for="(item, index) in voiceMaterialsList"-->
+<!--                  :key="index">-->
+<!--                  &lt;!&ndash;                    style="width: 250px;height: 300px">&ndash;&gt;-->
+<!--                  &lt;!&ndash;                    <div class="card-header">&ndash;&gt;-->
+<!--                  &lt;!&ndash;                      <el-checkbox&ndash;&gt;-->
+<!--                  &lt;!&ndash;                        :label="item.id"&ndash;&gt;-->
+<!--                  &lt;!&ndash;                        @change="handleSelectionChange($event, item)"&ndash;&gt;-->
+<!--                  &lt;!&ndash;                      ></el-checkbox>&ndash;&gt;-->
+<!--                  &lt;!&ndash;                    </div>&ndash;&gt;-->
+<!--                  <audio  controls :src="item.materialUrl" style="width: 300px;height: 50px"/>-->
+<!--                  <div>-->
+<!--                    <div style="  display: flex;flex-direction: column;width: 200px">-->
+<!--                      <span>标题:{{ item.title }}</span>-->
+<!--                      <span>创建人:{{item.createName}}</span>-->
+<!--                      <time class="time" style="white-space: nowrap">时间:{{ item.createTime }}</time>-->
+<!--                    </div>-->
+<!--                    <div class="bottom clearfix">-->
+<!--                      <el-button-->
+<!--                        class="button"-->
+<!--                        size="mini"-->
+<!--                        type="text"-->
+<!--                        icon="el-icon-edit"-->
+<!--                        @click="handleUpdate(item)"-->
+<!--                        v-hasPermi="['qw:material:edit']"-->
+<!--                      >修改</el-button>-->
+<!--                      <el-button-->
+<!--                        class="button"-->
+<!--                        size="mini"-->
+<!--                        type="text"-->
+<!--                        icon="el-icon-delete"-->
+<!--                        @click="handleDelete(item)"-->
+<!--                        v-hasPermi="['qw:material:remove']"-->
+<!--                      >删除</el-button>-->
+<!--                    </div>-->
+<!--                  </div>-->
+<!--                </el-card>-->
+<!--              </div>-->
+<!--            </el-tab-pane>-->
             <el-tab-pane label="视频" name="6">
               <div style="display: flex;  flex-wrap: wrap; gap: 10px; ">
                 <el-card
@@ -331,7 +332,7 @@
                         type="text"
                         icon="el-icon-edit"
                         @click="handleUpdate(item)"
-                        v-hasPermi="['qw:tag:edit']"
+                        v-hasPermi="['qw:material:edit']"
                       >修改</el-button>
                       <el-button
                         class="button"
@@ -339,7 +340,7 @@
                         type="text"
                         icon="el-icon-delete"
                         @click="handleDelete(item)"
-                        v-hasPermi="['qw:tag:remove']"
+                        v-hasPermi="['qw:material:remove']"
                       >删除</el-button>
                     </div>
                   </div>
@@ -359,7 +360,7 @@
                   <!--                      ></el-checkbox>-->
                   <!--                    </div>-->
                   <el-link type="primary" :href="downloadUrl(item.materialUrl)" download>
-                    下载文件
+                    {{item.materialUrl}}
                   </el-link>
                   <div>
                     <div style="  display: flex;flex-direction: column;width: 200px">
@@ -374,7 +375,7 @@
                         type="text"
                         icon="el-icon-edit"
                         @click="handleUpdate(item)"
-                        v-hasPermi="['qw:tag:edit']"
+                        v-hasPermi="['qw:material:edit']"
                       >修改</el-button>
                       <el-button
                         class="button"
@@ -382,7 +383,7 @@
                         type="text"
                         icon="el-icon-delete"
                         @click="handleDelete(item)"
-                        v-hasPermi="['qw:tag:remove']"
+                        v-hasPermi="['qw:material:remove']"
                       >删除</el-button>
                     </div>
                   </div>
@@ -444,7 +445,7 @@
         </div>
         <div v-else-if="form.materialType=='image'">
           <el-form-item label="上传图片" prop="materialUrl">
-            <ImageUpload v-model="form.materialUrl" type="image" :num="10" :width="150" :height="150" />
+            <ImageUpload v-model="form.materialUrl" type="image" :num="1" :width="150" :height="150" />
           </el-form-item>
         </div>
         <div v-else-if="form.materialType=='imagetext'">
@@ -486,7 +487,7 @@
             </el-upload>
             <video v-if="form.materialUrl"
               :src="form.materialUrl"
-              controls style="width: 200px;height: 100px">
+              controls style="width: 300px;height: 200px">
             </video>
           </el-form-item>
         </div>
@@ -502,7 +503,7 @@
               <i class="el-icon-plus avatar-uploader-icon"></i>
             </el-upload>
             <el-link v-if="form.materialUrl" type="primary" :href="downloadUrl(form.materialUrl)" download>
-              下载文件
+              {{ form.materialUrl }}
             </el-link>
           </el-form-item>
         </div>
@@ -530,7 +531,7 @@ export default {
       dialogVisible: false,
       dialogImageUrl:null,
       //上传地址
-      uploadUrl:process.env.VUE_APP_BASE_API+"/common/uploadOSS",
+      uploadUrl:process.env.VUE_APP_BASE_API+"/common/uploadOSS2",
       myQwCompanyList:[],
       // 遮罩层
       loading: true,
@@ -581,7 +582,6 @@ export default {
         title: null,
         createName: null,
         sendCount: null,
-        corpId: null,
         groupType:"1",
       },
 
@@ -695,14 +695,14 @@ export default {
       }
     },
     beforeAvatarUploadVoice(file){
-      const isLt1M = file.size / 1024 / 1024 < 1;
+      const isLt1M = file.size / 1024 / 1024 < 2;
       if (!isLt1M) {
         this.$message.error('上传大小不能超过 2MB!');
       }
       return isLt1M;
     },
     beforeAvatarUploadVideo(file){
-      const isLt1M = file.size / 1024 / 1024 < 1;
+      const isLt1M = file.size / 1024 / 1024 < 10;
       if (!isLt1M) {
         this.$message.error('上传大小不能超过 10MB!');
       }
@@ -710,7 +710,7 @@ export default {
     },
 
     beforeAvatarUploadFile(file){
-      const isLt1M = file.size / 1024 / 1024 < 1;
+      const isLt1M = file.size / 1024 / 1024 < 20;
       if (!isLt1M) {
         this.$message.error('上传大小不能超过 20MB!');
       }
@@ -719,27 +719,28 @@ export default {
 
     //选择小板块方法
     handleClick(row){
-      switch (row.index) {
-        case '0':
+
+      switch (row.name) {
+        case '1':
           this.resetParam();
           this.getList();
           break;
-        case '1':
+        case '2':
           this.textMaterials();
           break;
-        case '2':
+        case '3':
           this.imageMaterials();
           break;
-        case '3':
+        case '4':
           this.imagetextMaterials()
           break;
-        case '4':
+        case '5':
           this.voiceMaterials();
           break;
-        case '5':
+        case '6':
           this.videoMaterials()
           break;
-        case '6':
+        case '7':
           this.fileMaterials()
           break;
         default:
@@ -865,16 +866,38 @@ export default {
         this.form.corpId=this.queryParams.corpId;
         if (valid) {
           if (this.form.materialId != null) {
+
+            this.open = false;
+            let loadingRock = this.$loading({
+              lock: true,
+              text: '正在执行中请稍后~!',
+              spinner: 'el-icon-loading',
+              background: 'rgba(0, 0, 0, 0.7)'
+            });
+
             updateMaterial(this.form).then(response => {
               this.msgSuccess("修改成功");
-              this.open = false;
               this.getList();
+            }).finally(res=>{
+              loadingRock.close();
             });
+
           } else {
+
+            this.open = false;
+            let loadingRock = this.$loading({
+              lock: true,
+              text: '正在执行中请稍后~~',
+              spinner: 'el-icon-loading',
+              background: 'rgba(0, 0, 0, 0.7)'
+            });
+
             addMaterial(this.form).then(response => {
               this.msgSuccess("新增成功");
-              this.open = false;
               this.getList();
+              loadingRock.close();
+            }).finally(res=>{
+              loadingRock.close();
             });
           }
         }