Browse Source

答题记录可以显示出客户点击答题的详情

三七 3 days ago
parent
commit
bcbed446e7

+ 1 - 1
.env.prod-sxjz

@@ -16,7 +16,7 @@ ENV = 'production'
 VUE_APP_BASE_API = '/prod-api'
 
 #默认 1、会员 2、企微
-VUE_APP_COURSE_DEFAULT = 1
+VUE_APP_COURSE_DEFAULT = 2
 
 #项目所属
 VUE_APP_PROJECT_FROM=sxjz

+ 42 - 4
src/views/course/courseAnswerlogs/index.vue

@@ -134,7 +134,10 @@
       <el-table-column label="小节名称" align="center" prop="videoName" />
       <el-table-column label="是否全部正确" align="center" prop="isRight" >
         <template slot-scope="scope">
-          <dict-tag :options="sysCompanyOr" :value="scope.row.isRight"></dict-tag>
+            <dict-tag :options="sysCompanyOr" :value="scope.row.isRight" style="margin-bottom: 5px;"></dict-tag>
+            <el-button type="text" size="mini" @click="showContentDialog(scope.row.questionJson)">
+              查看详情
+            </el-button>
         </template>
       </el-table-column>
       <el-table-column label="销售名称" align="center" prop="companyUserName" />
@@ -151,13 +154,32 @@
       @pagination="getList"
     />
 
+    <el-dialog :visible.sync="contentDialog.isDialogVisible" title="消息详情" width="30%" append-to-body>
+      <div>
+        <div v-for="(item, index) in contentDialog.json || []" :key="index">
+          <el-card class="box-card" style="margin-top: 2%">
+            <div>题目:<span style="color: #0464f4">{{item.title}}</span></div>
+            <div>答题:<span style="color: #000000">{{item.answer}}</span></div>
+            <div>是否答题正确:
+              <span :style="{color: item.status === 1 ? 'green' : 'red'}">
+                {{ item.status === 1 ? '正确' : '错误' }}
+            </span>
+            </div>
+          </el-card>
+        </div>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="contentDialog.isDialogVisible = false">关闭</el-button>
+      </span>
+    </el-dialog>
+
   </div>
 </template>
 
 <script>
-import { listLogs, getLogs, delLogs, addLogs, updateLogs, exportLogs } from "@/api/course/courseAnswerlogs";
-import { courseList, videoList } from '@/api/course/courseRedPacketLog'
-import { getCompanyList } from '@/api/company/company'
+import {addLogs, delLogs, exportLogs, getLogs, listLogs, updateLogs} from "@/api/course/courseAnswerlogs";
+import {courseList, videoList} from '@/api/course/courseRedPacketLog'
+import {getCompanyList} from '@/api/company/company'
 
 export default {
   name: "Logs",
@@ -190,6 +212,13 @@ export default {
 
       // 答题日志表格数据
       logsList: [],
+
+      //发送的消息
+      contentDialog:{
+        isDialogVisible:false,
+        json: [],
+      },
+
       // 弹出层标题
       title: "",
       // 是否显示弹出层
@@ -258,6 +287,15 @@ export default {
       });
     },
 
+    showContentDialog(questionJson){
+      // 解析 JSON 字符串为 JavaScript 对象
+      // 替换非法换行符等控制字符
+      const sanitizedJson = questionJson.replace(/[\u0000-\u001F\u007F]/g, '');
+      this.contentDialog.json = JSON.parse(sanitizedJson);
+
+      this.contentDialog.isDialogVisible = true;
+    },
+
     timeChange(){
       if(this.createTime!=null){
         this.queryParams.sTime=this.createTime[0];

+ 44 - 5
src/views/course/courseAnswerlogs/myCourseAnswerlogs.vue

@@ -125,7 +125,10 @@
       <el-table-column label="小节名称" align="center" prop="videoName" />
       <el-table-column label="是否全部正确" align="center" prop="isRight" >
         <template slot-scope="scope">
-          <dict-tag :options="sysCompanyOr" :value="scope.row.isRight"></dict-tag>
+            <dict-tag :options="sysCompanyOr" :value="scope.row.isRight" style="margin-bottom: 5px;"></dict-tag>
+            <el-button type="text" size="mini" @click="showContentDialog(scope.row.questionJson)">
+              查看详情
+            </el-button>
         </template>
       </el-table-column>
       <el-table-column label="销售名称" align="center" prop="companyUserName" />
@@ -142,14 +145,32 @@
       @pagination="getList"
     />
 
+    <el-dialog :visible.sync="contentDialog.isDialogVisible" title="消息详情" width="30%" append-to-body>
+      <div>
+        <div v-for="(item, index) in contentDialog.json || []" :key="index">
+          <el-card class="box-card" style="margin-top: 2%">
+            <div>题目:<span style="color: #0464f4">{{item.title}}</span></div>
+            <div>答题:<span style="color: #000000">{{item.answer}}</span></div>
+            <div>是否答题正确:
+              <span :style="{color: item.status === 1 ? 'green' : 'red'}">
+                {{ item.status === 1 ? '正确' : '错误' }}
+            </span>
+            </div>
+          </el-card>
+        </div>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="contentDialog.isDialogVisible = false">关闭</el-button>
+      </span>
+    </el-dialog>
+
+
   </div>
 </template>
 
 <script>
-import { myListLogs, getLogs, delLogs, addLogs, updateLogs, exportLogs, exportMyLogs } from "@/api/course/courseAnswerlogs";
-import { courseList, videoList } from '@/api/course/courseRedPacketLog'
-import {allListTagGroup} from "@/api/qw/tagGroup";
-import {listTag} from "@/api/qw/tag";
+import {addLogs, delLogs, exportMyLogs, getLogs, myListLogs, updateLogs} from "@/api/course/courseAnswerlogs";
+import {courseList, videoList} from '@/api/course/courseRedPacketLog'
 import {getMyQwUserList} from "@/api/qw/user";
 
 export default {
@@ -206,6 +227,13 @@ export default {
       createTime:null,
       // 表单参数
       form: {},
+
+      //发送的消息
+      contentDialog:{
+        isDialogVisible:false,
+        json: [],
+      },
+
       // 表单校验
       rules: {
       }
@@ -308,6 +336,17 @@ export default {
       this.queryParams.eTime=null;
       this.handleQuery();
     },
+
+    showContentDialog(questionJson){
+      // 解析 JSON 字符串为 JavaScript 对象
+      // 替换非法换行符等控制字符
+      const sanitizedJson = questionJson.replace(/[\u0000-\u001F\u007F]/g, '');
+      this.contentDialog.json = JSON.parse(sanitizedJson);
+
+      this.contentDialog.isDialogVisible = true;
+    },
+
+
     // 多选框选中数据
     handleSelectionChange(selection) {
       this.ids = selection.map(item => item.logId)

+ 64 - 16
src/views/course/courseWatchLog/deptWatchLog.vue

@@ -215,16 +215,16 @@
         />
       </el-form-item> -->
        <el-form-item label="最新更新时间" prop="updateTime">
-        <el-date-picker
-          v-model="updateTimeText"
-          type="daterange"
-          range-separator="至"
-          start-placeholder="开始日期"
-          end-placeholder="结束日期"
-          value-format="yyyy-MM-dd"
-          style="width: 240px"
+         <el-date-picker
+           v-model="updateTimeText"
+           type="datetimerange"
+           range-separator="至"
+           start-placeholder="开始日期"
+           end-placeholder="结束日期"
+           value-format="yyyy-MM-dd HH:mm:ss"
            @change="updateChange"
-        />
+           :default-time="['00:00:00', '23:59:59']"
+         />
       </el-form-item>
       <!-- 进线时间 -->
       <!-- <el-form-item label="进线时间" prop="qecCreateTime">
@@ -411,11 +411,12 @@
         <el-table-column label="课程名称" align="center" prop="courseName"/>
         <el-table-column label="小节名称" align="center" prop="videoName"/>
         <el-table-column label="是否全部正确" align="center" prop="isRightText"/>
-<!--        <el-table-column label="是否全部正确" align="center" prop="isRight">-->
-<!--          <template slot-scope="scope">-->
-<!--            <dict-tag :options="sysCompanyOr" :value="scope.row.isRight"></dict-tag>-->
-<!--          </template>-->
-<!--        </el-table-column>-->
+        <template slot-scope="scope">
+          <dict-tag :options="sysCompanyOr" :value="scope.row.isRight" style="margin-bottom: 5px;"></dict-tag>
+          <el-button type="text" size="mini" @click="showContentDialog(scope.row.questionJson)">
+            查看详情
+          </el-button>
+        </template>
         <el-table-column label="销售名称" align="center" prop="companyUserName"/>
         <el-table-column label="企微员工名称" align="center" prop="qwUserName"/>
         <el-table-column label="公司名称" align="center" prop="companyName"/>
@@ -487,14 +488,42 @@
       />
     </el-drawer>
 
+
+    <el-dialog :visible.sync="contentDialog.isDialogVisible" title="消息详情" width="30%" append-to-body>
+      <div>
+        <div v-for="(item, index) in contentDialog.json || []" :key="index">
+          <el-card class="box-card" style="margin-top: 2%">
+            <div>题目:<span style="color: #0464f4">{{item.title}}</span></div>
+            <div>答题:<span style="color: #000000">{{item.answer}}</span></div>
+            <div>是否答题正确:
+              <span :style="{color: item.status === 1 ? 'green' : 'red'}">
+                {{ item.status === 1 ? '正确' : '错误' }}
+            </span>
+            </div>
+          </el-card>
+        </div>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="contentDialog.isDialogVisible = false">关闭</el-button>
+      </span>
+    </el-dialog>
+
+
   </div>
 </template>
 
 <script>
-import { deptListCourseWatchLog, getCourseWatchLog, delCourseWatchLog, addCourseWatchLog, updateCourseWatchLog, exportCourseWatchLog } from "@/api/course/courseWatchLog";
+import {
+  addCourseWatchLog,
+  delCourseWatchLog,
+  deptListCourseWatchLog,
+  exportCourseWatchLog,
+  getCourseWatchLog,
+  updateCourseWatchLog
+} from "@/api/course/courseWatchLog";
 import {courseList, myListCourseRedPacketLog, videoList} from '@/api/course/courseRedPacketLog'
 import {myListLogs} from "@/api/course/courseAnswerlogs";
-import { getCompanyUserListLikeName } from "@/api/company/companyUser";
+import {getCompanyUserListLikeName} from "@/api/company/companyUser";
 import {getTask} from "@/api/common";
 import Vue from 'vue'
 import Calendar from 'vue-mobile-calendar'
@@ -502,6 +531,7 @@ import {infoSop} from "@/api/qw/sop";
 import {myDeptTreeselect} from "../../../api/company/companyDept";
 import Treeselect from "@riophae/vue-treeselect";
 import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+
 Vue.use(Calendar)
 
 
@@ -550,6 +580,13 @@ export default {
       courseLists:[],
       videoList:[],
       logTypeOptions:[],
+
+      //发送的消息
+      contentDialog:{
+        isDialogVisible:false,
+        json: [],
+      },
+
       // 遮罩层
       loading: true,
       // 导出遮罩层
@@ -674,6 +711,17 @@ export default {
     this.loading=false;
   },
   methods: {
+
+    showContentDialog(questionJson){
+      // 解析 JSON 字符串为 JavaScript 对象
+      // 替换非法换行符等控制字符
+      const sanitizedJson = questionJson.replace(/[\u0000-\u001F\u007F]/g, '');
+      this.contentDialog.json = JSON.parse(sanitizedJson);
+
+      this.contentDialog.isDialogVisible = true;
+    },
+
+
     setToday(){
       const today = new Date();
       const todayStart = new Date(today);

+ 58 - 11
src/views/course/courseWatchLog/index.vue

@@ -245,16 +245,16 @@
         />
       </el-form-item> -->
        <el-form-item label="最新更新时间" prop="updateTime">
-        <el-date-picker
-          v-model="updateTimeText"
-          type="daterange"
-          range-separator="至"
-          start-placeholder="开始日期"
-          end-placeholder="结束日期"
-          value-format="yyyy-MM-dd"
-          style="width: 240px"
+         <el-date-picker
+           v-model="updateTimeText"
+           type="datetimerange"
+           range-separator="至"
+           start-placeholder="开始日期"
+           end-placeholder="结束日期"
+           value-format="yyyy-MM-dd HH:mm:ss"
            @change="updateChange"
-        />
+           :default-time="['00:00:00', '23:59:59']"
+         />
       </el-form-item>
       <!-- 进线时间 -->
       <!-- <el-form-item label="进线时间" prop="qecCreateTime">
@@ -481,7 +481,10 @@
         <el-table-column label="小节名称" align="center" prop="videoName"/>
         <el-table-column label="是否全部正确" align="center" prop="isRight">
           <template slot-scope="scope">
-            <dict-tag :options="sysCompanyOr" :value="scope.row.isRight"></dict-tag>
+            <dict-tag :options="sysCompanyOr" :value="scope.row.isRight" style="margin-bottom: 5px;"></dict-tag>
+            <el-button type="text" size="mini" @click="showContentDialog(scope.row.questionJson)">
+              查看详情
+            </el-button>
           </template>
         </el-table-column>
         <el-table-column label="销售名称" align="center" prop="companyUserName"/>
@@ -655,12 +658,37 @@
         <el-button @click="resultDialogVisible = false">关闭</el-button>
       </span>
     </el-dialog>
+    <el-dialog :visible.sync="contentDialog.isDialogVisible" title="消息详情" width="30%" append-to-body>
+      <div>
+        <div v-for="(item, index) in contentDialog.json || []" :key="index">
+          <el-card class="box-card" style="margin-top: 2%">
+            <div>题目:<span style="color: #0464f4">{{item.title}}</span></div>
+            <div>答题:<span style="color: #000000">{{item.answer}}</span></div>
+            <div>是否答题正确:
+              <span :style="{color: item.status === 1 ? 'green' : 'red'}">
+                {{ item.status === 1 ? '正确' : '错误' }}
+            </span>
+            </div>
+          </el-card>
+        </div>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="contentDialog.isDialogVisible = false">关闭</el-button>
+      </span>
+    </el-dialog>
 
   </div>
 </template>
 
 <script>
-import { listCourseWatchLog, getCourseWatchLog, delCourseWatchLog, addCourseWatchLog, updateCourseWatchLog, exportCourseWatchLog } from "@/api/course/courseWatchLog";
+import {
+  addCourseWatchLog,
+  delCourseWatchLog,
+  exportCourseWatchLog,
+  getCourseWatchLog,
+  listCourseWatchLog,
+  updateCourseWatchLog
+} from "@/api/course/courseWatchLog";
 import {listPeriodLabel} from "@/api/course/userCoursePeriod";
 import {courseList, listCourseRedPacketLog, videoList} from '@/api/course/courseRedPacketLog'
 import {listLogs} from "@/api/course/courseAnswerlogs";
@@ -675,6 +703,7 @@ import {getQwList} from "@/api/qw/qwUser";
 import {treeselect} from "@/api/company/companyDept";
 import Treeselect from "@riophae/vue-treeselect";
 import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+
 Vue.use(Calendar)
 
 export default {
@@ -862,6 +891,13 @@ export default {
       // 表单校验
       rules: {
       },
+
+      //发送的消息
+      contentDialog:{
+        isDialogVisible:false,
+        json: [],
+      },
+
       // 员工选项列表
       companyUserOptionsParams: {
         name: undefined,
@@ -909,6 +945,17 @@ export default {
     this.loading=false;
   },
   methods: {
+
+    showContentDialog(questionJson){
+      // 解析 JSON 字符串为 JavaScript 对象
+      // 替换非法换行符等控制字符
+      const sanitizedJson = questionJson.replace(/[\u0000-\u001F\u007F]/g, '');
+      this.contentDialog.json = JSON.parse(sanitizedJson);
+
+      this.contentDialog.isDialogVisible = true;
+    },
+
+
     getTreeselect() {
       treeselect().then((response) => {
         this.deptOptions = response.data;

+ 44 - 8
src/views/course/courseWatchLog/watchLog.vue

@@ -218,13 +218,13 @@
         <el-form-item label="最新更新时间" prop="updateTime">
         <el-date-picker
           v-model="updateTimeText"
-          type="daterange"
+          type="datetimerange"
           range-separator="至"
           start-placeholder="开始日期"
           end-placeholder="结束日期"
-          value-format="yyyy-MM-dd"
-          style="width: 240px"
+          value-format="yyyy-MM-dd HH:mm:ss"
            @change="updateChange"
+          :default-time="['00:00:00', '23:59:59']"
         />
       </el-form-item>
       <!-- 进线时间 -->
@@ -500,7 +500,10 @@
         <el-table-column label="小节名称" align="center" prop="videoName"/>
         <el-table-column label="是否全部正确" align="center" prop="isRight">
           <template slot-scope="scope">
-            <dict-tag :options="sysCompanyOr" :value="scope.row.isRight"></dict-tag>
+            <dict-tag :options="sysCompanyOr" :value="scope.row.isRight" style="margin-bottom: 5px;"></dict-tag>
+            <el-button type="text" size="mini" @click="showContentDialog(scope.row.questionJson)">
+              查看详情
+            </el-button>
           </template>
         </el-table-column>
         <el-table-column label="销售名称" align="center" prop="companyUserName"/>
@@ -712,6 +715,26 @@
       </div>
     </el-dialog>
 
+    <el-dialog :visible.sync="contentDialog.isDialogVisible" title="消息详情" width="30%" append-to-body>
+      <div>
+        <div v-for="(item, index) in contentDialog.json || []" :key="index">
+          <el-card class="box-card" style="margin-top: 2%">
+            <div>题目:<span style="color: #0464f4">{{item.title}}</span></div>
+            <div>答题:<span style="color: #000000">{{item.answer}}</span></div>
+            <div>是否答题正确:
+              <span :style="{color: item.status === 1 ? 'green' : 'red'}">
+                {{ item.status === 1 ? '正确' : '错误' }}
+            </span>
+            </div>
+          </el-card>
+        </div>
+      </div>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="contentDialog.isDialogVisible = false">关闭</el-button>
+      </span>
+    </el-dialog>
+
+
   </div>
 </template>
 
@@ -719,8 +742,8 @@
 import {
   addCourseWatchLog,
   delCourseWatchLog,
-  exportCourseWatchLog,
-  getCourseWatchLog, myExportCourseWatchLog,
+  getCourseWatchLog,
+  myExportCourseWatchLog,
   myListCourseWatchLog,
   updateCourseWatchLog
 } from "@/api/course/courseWatchLog";
@@ -729,11 +752,12 @@ import {listPeriodLabel} from "@/api/course/userCoursePeriod";
 import {myListLogs} from "@/api/course/courseAnswerlogs";
 import {getMyQwUserList} from "@/api/qw/user";
 import {searchTags} from "../../../api/qw/tag";
-import {addTagByWatch, delTagByWatch,batchUpdateExternalContactNotes,batchUpdateExternalContactNotesByWatchLog} from "../../../api/qw/externalContact";
+import {addTagByWatch, batchUpdateExternalContactNotesByWatchLog, delTagByWatch} from "../../../api/qw/externalContact";
 import {allListTagGroup} from "../../../api/qw/tagGroup";
 import Vue from 'vue'
 import Calendar from 'vue-mobile-calendar'
 import {infoSop} from "@/api/qw/sop";
+
 Vue.use(Calendar)
 
 export default {
@@ -773,7 +797,11 @@ export default {
       resultDialogVisible: false,
       resultMessage: '',
       resultTitle:'',
-
+      //发送的消息
+      contentDialog:{
+        isDialogVisible:false,
+        json: [],
+      },
       activeName:"2",
       pickerOptions: {
         disabledDate(time) {
@@ -963,6 +991,14 @@ export default {
       this.queryParams.sTime = this.formatDate(todayStart);
       this.queryParams.eTime = this.formatDate(todayEnd);
     },
+    showContentDialog(questionJson){
+      // 解析 JSON 字符串为 JavaScript 对象
+      // 替换非法换行符等控制字符
+      const sanitizedJson = questionJson.replace(/[\u0000-\u001F\u007F]/g, '');
+      this.contentDialog.json = JSON.parse(sanitizedJson);
+
+      this.contentDialog.isDialogVisible = true;
+    },
 
     handleSendTypeChange() {
       // 重置相关参数