11 Commits

Author SHA1 Message Date
e9d6f514bd feat: 集成edu-core视频组件并更新版本至2.0.38
- 添加edu-core依赖以使用标准化的课程视频组件
- 将本地common-video组件替换为edu-core的CommonCourseVideo
- 重构章节详情页,移除原有的视频播放逻辑和倒计时功能
- 修复medicaldes页面样式问题,确保布局正确
- 在课程详情页传递课程封面图给视频组件
- 更新应用版本号至2.0.38
2026-02-10 12:34:15 +08:00
5a4f96c195 fix(miniClass): 修复班级信息页学员人数显示错误
修复当 students 或 thisClass.number 为 undefined 时,学员人数显示为 "undefined/undefined人" 的问题。
将获取学员列表和成绩列表的默认值从 undefined 改为空数组,避免后续操作中可能出现的类型错误。
2026-02-09 10:25:17 +08:00
961ca781e8 refactor(video): 移除静态广告组件并添加视频快进快退功能
- 删除未使用的静态广告组件及相关文件(MyComponent.vue、staticadcomponent/、videoDetail.vue等)
- 在视频播放器中添加自定义快进(+15秒)和快退(-15秒)按钮组件
- 移除未使用的iOS视频组件注册
- 优化播放器控制栏布局和样式
2026-02-09 10:22:53 +08:00
bb640778c0 feat: 优化进入小班的加载速度
- 在多个班级信息页面中,将学员列表的获取逻辑替换为调用新的 API 接口 `getClassUserCourseFlag`,以获取带买课标识的学员信息。
- 为学员列表区域增加加载状态提示(`studentsLoading`),提升用户体验。
- 在考试周和结班状态下,调用 `userScoreList` 接口获取学员成绩信息,并为其设置超时时间为 60 秒。
- 更新应用版本号至 2.0.37,并将网络请求超时配置调整为 0。
2026-02-05 17:40:38 +08:00
0a37b21824 feat(miniClass): 增加补充姓名提示并更新用户显示字段从nickname改为name
- 将多个页面中用户昵称显示字段从 `nickname` 统一改为 `name`
- 优化课程购买提示逻辑,支持多条信息分次提示
- 更新应用版本号至2.0.36
2026-02-05 09:50:57 +08:00
3a1cffacde feat: 移除vip页面中针对iOS平台的购买限制
更新manifest.json中的版本号至2.0.35
移除vip页面中针对iOS平台的购买限制
调整.gitignore文件,排除unpackage下的特定目录
2026-01-23 10:51:37 +08:00
136f82aa3d chore: 删除未使用的静态资源文件 2026-01-21 11:10:55 +08:00
168ab738a3 refactor(permission): 移除位置和麦克风权限相关代码
重构权限判断逻辑,移除不再需要的位置和麦克风权限请求代码
更新manifest文件,排除位置权限并调整版本号
2025-12-26 10:41:06 +08:00
dee6848bd2 更新:增加数据迁移功能 2025-12-26 10:38:59 +08:00
6809d69d08 更新:增加数据迁移功能 2025-12-25 10:13:04 +08:00
5db7c6f9d9 更新:增加数据迁移功能 2025-12-24 18:34:54 +08:00
1510 changed files with 8117 additions and 294370 deletions

5
.gitignore vendored
View File

@@ -1,6 +1,5 @@
.DS_Store
node_modules
unpackage/
/dist
vue.config
@@ -22,6 +21,8 @@ yarn-error.log*
*.sln
*.sw*
/package-lock.json
.gitignore
wxcomponents/
.hbuilderx/
unpackage/cache/
unpackage/dist/
unpackage/release/

View File

@@ -5,7 +5,7 @@
"configurations" : [
{
"app" : {
"launchtype" : "local"
"launchtype" : "remote"
},
"app-plus" : {
"launchtype" : "remote"
@@ -27,7 +27,6 @@
"type" : "uni-app:app-ios"
},
{
"customPlaygroundType" : "local",
"playground" : "custom",
"type" : "uni-app:app-android"
},

View File

@@ -1,9 +1,9 @@
import $http from '@/config/requestConfig'
import store from '@/store';
import base from '@/config/baseUrl';
import {
getAppWxLatLon
} from '@/plugins/utils';
// import {
// getAppWxLatLon
// } from '@/plugins/utils';
// #ifdef H5
import {
getLatLonH5,
@@ -208,32 +208,32 @@ export const setPayAssign = function(orderInfo, callback) {
// #endif
}
// 获取地址信息 微信小程序、APP、公众号
export const getLatLon = function(tip) {
return new Promise((resolve, reject) => {
const successProcess = function(res) {
store.commit("setCurrentAddress", {
latitude: res.latitude,
longitude: res.longitude
});
resolve(res);
};
const errProcess = function(err) {
reject(err);
if (tip) {
uni.showToast({
title: err,
icon: "none"
});
}
};
// #ifdef H5
getLatLonH5(successProcess, errProcess);
// #endif
// #ifndef H5
getAppWxLatLon(successProcess, errProcess);
// #endif
});
}
// export const getLatLon = function(tip) {
// return new Promise((resolve, reject) => {
// const successProcess = function(res) {
// store.commit("setCurrentAddress", {
// latitude: res.latitude,
// longitude: res.longitude
// });
// resolve(res);
// };
// const errProcess = function(err) {
// reject(err);
// if (tip) {
// uni.showToast({
// title: err,
// icon: "none"
// });
// }
// };
// // #ifdef H5
// getLatLonH5(successProcess, errProcess);
// // #endif
// // #ifndef H5
// getAppWxLatLon(successProcess, errProcess);
// // #endif
// });
// }
// 查看是否有某本书的权限
export const checkBookRight = function(data,callback) {

10
main.js
View File

@@ -88,8 +88,10 @@ import commonList from '@/pages/component/commonComponents/list.vue'
Vue.component('common-list', commonList);
import commonOrderSubmit from '@/pages/component/commonComponents/orderSubmit.vue'
Vue.component('common-order-submit', commonOrderSubmit);
import commonVideo from '@/pages/component/commonComponents/video/index.vue'
Vue.component('common-video', commonVideo);
import CommonCourseVideo from 'edu-core/components/course-video'
Vue.component('CommonCourseVideo', CommonCourseVideo);
import commonCoupon from '@/pages/component/commonComponents/coupon/index.vue'
Vue.component('common-coupon', commonCoupon);
import commonGoodsList from '@/pages/component/commonComponents/goodsList.vue'
@@ -114,8 +116,8 @@ import commonSelectVip from '@/pages/component/commonComponents/selectVip.vue'
Vue.component('common-select-vip', commonSelectVip);
import commonAdvertisement from '@/pages/component/commonComponents/advertisement.vue'
Vue.component('common-advertisement', commonAdvertisement);
import commonVideoIos from '@/pages/component/commonComponents/video/ios.nvue'
Vue.component('common-video-ios', commonVideoIos);
// import commonVideoIos from '@/pages/component/commonComponents/video/ios.nvue'
// Vue.component('common-video-ios', commonVideoIos);
// import musicPlay from '@/components/music.vue'
// Vue.component('music-play', musicPlay);

View File

@@ -3,7 +3,7 @@
"appid" : "__UNI__C7475A8",
"description" : "吴门医述",
"networkTimeout" : {
"request" : 15000
"request" : 0
},
"transformPx" : false,
"icons" : [
@@ -12,8 +12,8 @@
"src" : "图片路径"
}
],
"versionName" : "2.0.33",
"versionCode" : 2033,
"versionName" : "2.0.38",
"versionCode" : 2038,
"sassImplementationName" : "node-sass",
"app-plus" : {
"nvueCompiler" : "uni-app",
@@ -59,8 +59,6 @@
"permissions" : [
"<uses-feature android:name=\"android.hardware.camera\"/>",
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
"<uses-permission android:name=\"android.permission.CALL_PHONE\"/>",
@@ -75,7 +73,6 @@
"<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
"<uses-permission android:name=\"android.permission.RECEIVE_BOOT_COMPLETED\"/>",
"<uses-permission android:name=\"android.permission.RECORD_AUDIO\"/>",
"<uses-permission android:name=\"android.permission.REQUEST_INSTALL_PACKAGES\"/>",
"<uses-permission android:name=\"android.permission.SYSTEM_ALERT_WINDOW\"/>",
"<uses-permission android:name=\"android.permission.VIBRATE\"/>",
@@ -86,7 +83,11 @@
"abiFilters" : [ "armeabi-v7a", "arm64-v8a", "x86" ],
"minSdkVersion" : 21,
"targetSdkVersion" : 30,
"schemes" : "medicine"
"schemes" : "medicine",
"excludePermissions" : [
"<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>"
]
},
"sdkConfigs" : {
"ad" : {},

7489
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -7,6 +7,7 @@
"dependencies": {
"animate.css": "^4.1.1",
"e-peanut": "file:",
"edu-core": "git+https://git.nuttyreading.com/chenghuan/edu-core.git#v1.0.3",
"element-plus": "^2.9.6",
"epubjs": "^0.3.93",
"jquery": "^2.2.4",

View File

@@ -797,6 +797,12 @@
"style": {
"navigationBarTitleText": "确认订单"
}
},
{
"path": "pages/mine/migrate/index",
"style": {
"navigationBarTitleText" : "数据迁移"
}
}
],

View File

@@ -1,44 +0,0 @@
<template>
<div>{{ message }}</div>
</template>
<script>
import $ from "jquery";
export default class MyComponent {
// data() {
// return {
// message: 'Hello, Vue!'
// }
// }
constructor(adAddress, toAddress) {
this.adAddress = adAddress;
this.toAddress = toAddress;
this.$html = $(html);
}
createEl(el) {
this.$html.find(".ad").attr("src", this.adAddress);
this.$html.attr("href", this.toAddress);
let $adWrapper = this.$html.find(".ad-wrapper");
$adWrapper.attr("href", this.toAddress);
$adWrapper.click(() => {
Aliplayer.util.stopPropagation();
});
this.$html.find(".close").click(() => {
this.$html.hide();
});
$(el).append(this.$html);
}
ready(player, e) {}
play(player, e) {
this.$html.hide();
}
pause(player, e) {
this.$html.show();
}
}
</script>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -25,7 +25,8 @@
:change:isSetFirstTime="renderScript.receiveisSetFirstTime"
:change:isfresh="renderScript.receiveIsfresh" :change:platform="renderScript.receiveplatform"
:change:isChange="renderScript.receiveIsChange"
:change:currentVideoList="renderScript.receiveVideoList"></div>
:change:currentVideoList="renderScript.receiveVideoList">
</div>
<div @tap="renderScript.emitData" ref="videoContent1" v-show="false" class="videoContent1">
直接调用renderjs中的emitData的方法,传递当前播放时长
</div>
@@ -470,6 +471,9 @@
var diff = 0
var pauseTime = 0
var myplayer = undefined
var seekBtnHideTimer = null
var seekBtnEls = []
var seekBtnsEnabled = true
import $ from 'jquery'
export default {
components: {
@@ -634,6 +638,113 @@
},
});
var backBtnComponent = Aliplayer.Component({
init: function(status, toAddress) {
this.fullScreenStatus = status
this.$html = $('#url-player-test');
},
createEl: function(el) {
seekBtnsEnabled = true;
var container = $('#url-player-test');
container.find('.custom-seek-back').remove();
container.find('.custom-seek-forward').remove();
seekBtnEls = [];
function createSeekBtn(className, label, position) {
var btn = document.createElement('button');
btn.className = 'custom-seek-btn ' + className;
btn.innerText = label;
btn.style.position = 'absolute';
btn.style.top = '50%';
btn.style.transform = 'translateY(-50%)';
btn.style.width = '48px';
btn.style.height = '48px';
btn.style.borderRadius = '50%';
btn.style.border = 'none';
btn.style.background = 'rgba(255,255,255,0.6)';
btn.style.color = '#000';
btn.style.fontSize = '14px';
btn.style.display = 'flex';
btn.style.alignItems = 'center';
btn.style.justifyContent = 'center';
btn.style.padding = '0';
btn.style.display = 'none';
btn.style.zIndex = '10';
if (position === 'left') {
btn.style.left = '30px';
} else if (position === 'right') {
btn.style.right = '30px';
}
return btn;
}
var backBtn = createSeekBtn('custom-seek-back', '-15s', 'left');
var forwardBtn = createSeekBtn('custom-seek-forward', '+15s', 'right');
seekBtnEls = [backBtn, forwardBtn];
var showSeekBtns = function() {
if (!seekBtnsEnabled) return;
if (!seekBtnEls || !seekBtnEls.length) return;
seekBtnEls.forEach(function(btn) {
btn.style.display = 'flex';
});
if (seekBtnHideTimer) {
clearTimeout(seekBtnHideTimer);
}
seekBtnHideTimer = setTimeout(function() {
if (!seekBtnEls || !seekBtnEls.length) return;
seekBtnEls.forEach(function(btn) {
btn.style.display = 'none';
});
}, 3000);
};
backBtn.onclick = function(e) {
if (e && e.stopPropagation) {
e.stopPropagation();
}
showSeekBtns();
if (myplayer && myplayer.getCurrentTime) {
var current = myplayer.getCurrentTime();
var target = current - 15;
if (target < 0) {
target = 0;
}
myplayer.seek(target);
}
};
forwardBtn.onclick = function(e) {
if (e && e.stopPropagation) {
e.stopPropagation();
}
showSeekBtns();
if (myplayer && myplayer.getCurrentTime && myplayer.getDuration) {
var current = myplayer.getCurrentTime();
var duration = myplayer.getDuration();
var target = current + 15;
if (target > duration) {
target = duration;
}
myplayer.seek(target);
}
};
var containerDom = document.getElementById('url-player-test');
if (containerDom) {
containerDom.addEventListener('click', function() {
showSeekBtns();
});
}
container.append(backBtn);
container.append(forwardBtn);
},
playing: function(player, e) {},
});
// console.log('这是查看是否获取到hlstoken', this.videoData)
var playerOptions = {
id: "url-player-test",
@@ -648,11 +759,12 @@
"controlBarVisibility": "hover",
"useH5Prism": true,
components: [{
name: 'adComponent',
type: fullScreenButtonComponent,
args: [
'http://101.201.146.165:8088/Pf-EH/statics/uploadFile/2024-05-10/b0f420c7-9178-41ad-9dd6-f59a64a6e190.png'
]
name: 'fullScreenComponent',
type: fullScreenButtonComponent
},
{
name: 'backBtnComponent',
type: backBtnComponent
},
{
name: 'RateComponent',
@@ -663,9 +775,7 @@
skinLayout: [{
name: "bigPlayButton",
align: "blabs",
x: 30,
y: 80
align: "cc",
},
{
name: "H5Loading",
@@ -689,6 +799,12 @@
{
name: "thumbnail"
},
{
name: "backBtnComponent",
align: "blabs",
x: 15,
y:70
},
{
name: "controlBar",
align: "blabs",
@@ -781,6 +897,12 @@
console.log('开始播放------',videoDurationTimes,pauseTime);
$('.videoContent7').click()
seekBtnsEnabled = true;
if (seekBtnHideTimer) {
clearTimeout(seekBtnHideTimer);
seekBtnHideTimer = null;
}
if (pauseTime > 0) {
if(pauseTime==videoDurationTimes){
return
@@ -830,11 +952,48 @@
console.log('播放完毕');
$('.videoContent2').click()
$('.videoContent6').click()
seekBtnsEnabled = false;
if (seekBtnHideTimer) {
clearTimeout(seekBtnHideTimer);
seekBtnHideTimer = null;
}
if (seekBtnEls && seekBtnEls.length) {
seekBtnEls.forEach(function(btn) {
btn.style.display = 'none';
});
}
var $bigBtn = $('#url-player-test .prism-big-play-btn');
if ($bigBtn && $bigBtn.length) {
$bigBtn.css({
left: '30px',
bottom: '80px',
right: 'auto',
top: 'auto',
transform: 'none'
});
}
})
player.on('pause', function() {
pauseTime = parseInt(player.getCurrentTime())
player.pause(true)
console.log('触发暂停', pauseTime)
if (player.getStatus && player.getStatus() === 'ended') {
return;
}
var $bigBtn = $('#url-player-test .prism-big-play-btn');
if ($bigBtn && $bigBtn.length) {
$bigBtn.css({
left: '50%',
top: '50%',
right: 'auto',
bottom: 'auto',
transform: 'translate(-50%, -50%)'
});
}
})
myplayer.on('error', function() {
@@ -1182,4 +1341,26 @@
bottom: 0;
right: 0;
}
</style>
#url-player-test {
position: relative;
}
#url-player-test .custom-seek-btn {
width: 48px;
height: 48px;
border-radius: 50%;
border: none;
background: rgba(0, 0, 0, 0.5);
color: #fff;
font-size: 14px;
outline: none;
cursor: pointer;
pointer-events: auto;
position: absolute;
top: 50%;
left: 30px;
}
#url-player-test .custom-seek-btn:active {
background: rgba(255, 255, 255, 0.25);
}
</style>

File diff suppressed because it is too large Load Diff

View File

@@ -1,44 +0,0 @@
.ad-container
{
display:none;
position:absolute;
left:50%;
top:50%;
margin-left:-150px;
margin-top:-100px;
}
.ad-container span
{
width: 27px;
height: 16px;
border-radius: 1px;
background-color: rgba(0,0,0,.5);
position: absolute;
font-size: 10px;
color: #fff;
line-height: 16px;
text-align: center;
top:0px;
left:0px;
}
.ad-container .close
{
position:absolute;
top:2px;
right:2px;
width: 20px;
height: 20px;
}
.ad-container .close:hover
{
cursor:pointer;
}
.ad-container .ad
{
width:300px;
height:200px;
}

View File

@@ -1,76 +0,0 @@
import $ from 'jquery'
// const html = require('./index.html');
// require('https://g.alicdn.com/apsara-media-box/imp-web-player/2.20.3/skins/default/aliplayer-min.css');
// require('../aliplayer-min.js');
// require('../aliplayercomponents.min.js');
// require('../aliplayer-min.css');
require('./index.css');
/**
* 静态广告组件
*/
const fullScreenButtonComponent = Aliplayer.Component({
/**
* 初始函数在new对象时调用
*
* @param {string} adAddress - 广告视频地址
* @param {string} toAddress - 广告链接地址
*/
init: function (adAddress, toAddress) {
this.adAddress = adAddress;
this.toAddress = toAddress;
this.$html = $('.ad-container');
},
/**
* 创建广告Dom元素
*/
createEl: function (el) {
this.$html.find('.ad').attr('src', this.adAddress);
var $adWrapper = this.$html.find('.ad-wrapper');
$adWrapper.attr('href', this.toAddress);
$adWrapper.click(function () {
Aliplayer.util.stopPropagation();
});
this.$html.find('.close').click(function () {
this.$html.hide();
});
$(el).append(this.$html);
},
ready: function (player, e) {
},
/**
* 隐藏广告
*/
play: function (player, e) {
this.$html.hide();
},
/**
* 显示广告
*/
pause: function (player, e) {
this.$html.show();
},
/**
* 隐藏广告
*/
playing: function (player, e) {
this.$html.hide();
},
waiting: function (player, e) {
},
timeupdate: function (player, e) {
},
error: function (player, e) {
},
/**
* 显示广告
*/
ended: function (player, e) {
this.$html.show();
}
});
export default fullScreenButtonComponent;

View File

@@ -1,375 +0,0 @@
<template>
<view class="container commonPageBox commonDetailPage" style="position: relative;">
<!-- <cover-view class="image_box">
<image
src="http://101.201.146.165:8088/curriculum/detailImg/curriculum_20170411123240222.png"
mode="aspectFit"
class="headImage"
style="background-color: #f5f5f5"
>
</image>
</cover-view> -->
<video
@fullscreenchange="fullscreenchange"
@timeupdate="videoTimeUpdateEvent($event)"
ref="videos"
style="width: 100%; height: 100%"
autoplay
id="videoId"
object-fit="contain"
class="video-box"
:src="videoUrl"
:poster="`${videoUrl}?x-oss-process=video/snapshot,t_${1},f_jpg`"
@play="playVideo"
>
<!-- <cover-image class="controls-play img" src="http://101.201.146.165:8088/curriculum/detailImg/curriculum_20170411123240222.png"></cover-image>
-->
</video>
</view>
</template>
<script>
import courseDescription from "@/pages/component/commonComponents/list";
import price from "../price/index.vue";
import $http from "@/config/requestConfig.js";
import { mapState } from "vuex";
export default {
components: {
courseDescription, //课程说明
price, //课程价格
},
data() {
return {
timer: null,
videoUrl: "",
currentTime: 0,
firstTime: 0,
options: {},
videoData: {},
isSetFirstTime: false,
currentVideoTime: "", //初始播放时长(秒)
urlList: {
detail: "sociology/course/getCourseCatalogueChapterDetail",
curriculumInfo: "app/phone.do?getCourseInfo",
},
};
},
async onUnload() {
this.timer = null;
// #ifdef APP-PLUS
uni.navigateTo({
url: "/pages/curriculum/order/curriculum/back",
});
plus.screen.lockOrientation("portrait-primary"); //锁死屏幕方向为竖屏
// plus.screen.lockOrientation("portrait-primary");
// #endif
await this.setVideoTime();
// #ifdef APP-PLUS
// plus.screen.lockOrientation("portrait-primary");
// #endif
},
onLoad(options) {
// uni.navigateTo({
// url: "/pages/curriculum/order/curriculum/back",
// });
// #ifdef APP-PLUS
plus.screen.lockOrientation("landscape-primary");
// plus.screen.lockOrientation("portrait-primary");
// #endif
this.options = JSON.parse(options.data);
this.getLive();
this.timer = setInterval(() => {
var that = this;
if (this.currentTime) {
that.setVideoTime();
}
}, 60000 * 10);
},
onHide() {
// this.showSearchList = false
// this.searchList = []
},
computed: {
...mapState(["userInfo"]),
},
methods: {
// 播放进度改变
videoTimeUpdateEvent(e) {
console.log("e at line 78:", e);
this.playTime = parseInt(e.detail.currentTime);
this.allTime = parseInt(e.detail.duration);
console.log("视频播放时长", this.playTime, "视频总时长", this.allTime);
this.recordTime({
time: this.playTime,
});
},
recordTime(data) {
this.currentTime = data.time;
console.log("data at line 54:", data);
var list = [];
if (uni.getStorageSync("videoList")) {
list = JSON.parse(uni.getStorageSync("videoList"));
}
console.log("点击后设置播放时长的方法list at line 65:", list);
var index = list.findIndex((e) => e.id == this.videoData.id);
if (list.length > 0 && index >= 0) {
list[index] = {
...this.videoData,
time: data.time,
};
} else {
list.push({
...this.videoData,
time: data.time,
});
}
uni.setStorageSync("videoList", JSON.stringify(list));
console.log(list, "走接口的方法参数");
},
//是否全屏
fullscreenchange(e) {
if (!e.target.fullScreen) {
uni.navigateBack({
delta: 1,
});
// plus.screen.lockOrientation("default");
}
},
getData(data) {
console.log(
"data at line 这是接口拿回来的时长11111111111111111111:",
this.videoData.userCourseVideoPositionEntity.position
);
if (!this.isSetFirstTime) {
var netWork = this.videoData.userCourseVideoPositionEntity
? this.videoData.userCourseVideoPositionEntity.position
: 0;
var list = [];
if (uni.getStorageSync("videoList")) {
list = JSON.parse(uni.getStorageSync("videoList"));
}
console.log("这是获取接口 设置的起始时长", netWork);
var index = list.findIndex((e) => e.id == this.videoData.id);
if (netWork) {
if (index >= 0) {
this.firstTime =
list[index].time > netWork ? list[index].time : netWork;
} else {
this.firstTime = netWork ? netWork : 0;
}
} else {
if (index >= 0) {
this.firstTime = list[index].time ? list[index].time : 0;
} else {
this.firstTime = 0;
}
}
uni.setStorageSync("videoList", JSON.stringify(list));
console.log(
"list at line 这是设置完第一次初始值9777777777777777777770:",
list
);
console.log(this.firstTime, "1111111111111111111111");
this.playVideo();
this.isSetFirstTime = true;
}
},
setVideoTime(time) {
var data = {
videoId: this.videoData.id,
position: this.currentTime, //秒数
};
console.log("data at line =存储视频时长接口:", data);
$http
.request({
// url: "book/buyOrder/buySave",
url: `sociology/course/saveCoursePosition`,
method: "Post", // POST、GET、PUT、DELETE具体说明查看官方文档
data,
header: {
//默认 无 说明:请求头
"Content-Type": "application/json",
},
})
.then((res) => {
console.log("res at line 185:", res);
// console.log("data at line 5911111:", this.videoData);
this.$forceUpdate();
});
},
playVideo(e) {
this.videoContext = uni.createVideoContext("videoId", this);
this.videoContext.seek(this.firstTime);
this.videoContext.requestFullScreen();
},
async getLive() {
var data = {
...this.options,
};
console.log("data at line 57:", data);
$http
.request({
// url: "book/buyOrder/buySave",
url: `sociology/course/checkVideo`,
method: "Post", // POST、GET、PUT、DELETE具体说明查看官方文档
data,
header: {
//默认 无 说明:请求头
"Content-Type": "application/json",
},
})
.then((res) => {
console.log("res at line 252:", res);
this.videoData = res.video;
this.videoUrl =
// "https://ehh-private-01.oss-cn-beijing.aliyuncs.com/video/taiHuClass/" +
res.video.videoUrl;
this.$nextTick(async () => {
await this.getData();
});
// var playAuth = res.video.playAuth.replace(/=/g, "");
// this.videoData = {
// ...res.video,
// videoId: res.video.video,
// playAuth: playAuth,
// };
// this.playAuth = playAuth;
console.log("data at line 5911111:", this.videoData);
this.$forceUpdate();
});
},
openVideo(data) {
console.log("data at line 380:", data.type);
var mynavData = JSON.stringify(data); // 这里转换成 字符串
if (data.type == 0) {
//视频云点播
uni.navigateTo({
url: `/pages/curriculum/order/curriculum/videoDetail?data=${mynavData}`,
});
} else if (data.type == 1) {
uni.navigateTo({
url: `/pages/curriculum/order/curriculum/videoDetailOss?data=${mynavData}`,
});
}
// uni.navigateTo({
// // url: '../bookShop/commodityDetail?id=' + item.id
// url: `/pages/curriculum/order/curriculum/detail?navTitle=${v.title}&title=${v.title}&oid=${v.oid}`,
// });
},
hancleModalCancel() {
this.show = false;
},
handleClickMore(v, i, status) {
console.log("i at line 357:", i);
this.$set(this.correlationiList[i], "isOpen", status);
// [i].=!this.correlationiList[i].isOpen;
},
hancleModalConfirm() {
var data = {
values: {
customerType: "D",
token: uni.getStorageSync("token"),
customerOid: uni.getStorageSync("customerOid"),
...this.taiHuClassInfo,
},
};
// $mars.progressBegin('申请中...');
// $mars.post(customerType, 'applyRelearn', data, function (ret) {
// api.hideProgress();
// fnLoadDataGrid();
// });
},
// 检查是有权限使用搜索功能
checkDisable() {
console.log("点击了");
},
// 显示无权限弹窗
// showNoRights() {
// let that = this
// uni.showModal({
// content: "",
// confirmText: '好的',
// showCancel: false,
// success: function(res) {
// if (res.confirm) {
// // console.log('用户点击确定');
// that.clear()
// }
// }
// })
// },
// 放大图片
previewImage(url) {
console.log(url);
uni.previewImage({
urls: [url],
longPressActions: {
itemList: ["很抱歉,暂不支持保存图片到本地"],
success: function (res) {
// console.log(res,'+++++')
},
},
});
},
},
onBackPress() {
// #ifdef APP-PLUS
plus.key.hideSoftKeybord();
// #endif
},
};
</script>
<style lang="scss" scoped>
.video-box{
position: relative;
}
.image_box{
background-color: red;
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
}
</style>

View File

@@ -5,35 +5,23 @@
<public-module></public-module>
<template v-show="!screenLoading">
<z-nav-bar title="教学内容"></z-nav-bar>
<!-- <view class="contentBox curriculum_box" :style="`height:calc(100% - ${60 + statusBarHeight}px !important; -->
<view class="contentBox curriculum_box" :style="`height:calc(100% - ${60 + statusBarHeight}px !important; width:100%; overflow-x: hidden; ${
isFullScreen ? 'background:#000' : ''
}`">
<!-- 加密视频 -->
<view style="background:#000; position: fixed; top: 120rpx; left: 0; width: 100%; z-index: 88;" v-if="videoArray.length>0">
<common-video @changeScreen="changeScreen" @changeScreenLoading="changeScreenLoading"
@hideNextVideo="hideNextVideo" @startNextVideoCountDown="startNextVideoCountDown"
@unlockChangeVideo="unlockChangeVideo" v-if="isfresh " ref="commonVideo"
:secondCountDown="secondCountDown"  :videoTitle="curriculumData.title"
:currentVideo="currentVideo" :noRecored="noRecored" :currentVideoList="videoArray">
</common-video>
<view style="height: 200px" v-else></view>
</view>
<!-- <scroll-view :style="`height:calc(100% - 200px - 40rpx) ;`" scroll-y="true" class="scroll-Y" style="background-color: #fff"> -->
<view class="PM_font" style="padding: 20rpx; font-size: 40rpx; color: #2979ff;" :style="videoArray.length>0?'margin-top: 400rpx;':''" v-if="videoArray.length>0">视频教学
</view>
<view class="scroll-view-item" :style="videoArray.length==0?'margin-top: 20rpx;':''">
<view style="padding: 20rpx; font-size: 26rpx">
课程{{ options.navTitle }}
</view>
<view style="padding: 20rpx; margin-bottom: 40rpx; font-size: 26rpx">
章节{{ curriculumData.title }}
</view>
<common-curriculum-video v-if="videoArray && videoArray.length > 0" :detailInfo="curriculumData"
:currentVideo="currentVideo" :dataList="videoArray" @open="changeVideo"
:changeVideoLock="changeVideoLock">
</common-curriculum-video>
</view>
<view
class="contentBox curriculum_box"
:style="`
height:calc(100% - ${60 + statusBarHeight}px !important;
width:100%;
overflow-x: hidden; ${isFullScreen ? 'background:#000' : ''}
`"
>
<!-- 课程视频及章节信息 -->
<CommonCourseVideo
:video-list="videoArray"
:current-index="currentCateIndex !== null ? currentCateIndex : 0"
:course="{courseTitle:options.navTitle, chapterTitle: curriculumData.title}"
:cover="options.curriculumImgUrl || ''"
:http="$http"
/>
<view class="" style="border-top: 2px solid #2979ff;">
<view class="coursePart flexbox" v-if="tabList.length > 1">
<view :class="['item','flex_box',curTab == index ? 'active': '' ]"
@@ -359,6 +347,12 @@
methods: {
editorIput(e){
},
hideNextVideo() {
if (this.countDownTimer) {
clearInterval(this.countDownTimer)
this.countDownTimer = undefined
}
},
moveHandle() {
return false;
},
@@ -651,36 +645,6 @@
})
}
},
unlockChangeVideo() {
this.changeVideoLock = false
},
startNextVideoCountDown() {
this.secondCountDown = 10
let that = this
if (this.countDownTimer) {
clearInterval(this.countDownTimer)
}
this.countDownTimer = setInterval(() => {
this.secondCountDown -= 1
if (this.secondCountDown == 0) {
// clearInterval(this.countDownTimer)
// console.log('倒计时结束');
that.hideNextVideo()
console.log('切换之前的播放index是', this.currentCateIndex);
// console.log('当前的播放列表',this.videoArray.length);
// if(this.currentCateIndex < this.videoArray.length-1){
this.currentCateIndex++
console.log('切换之后的播放index是', this.currentCateIndex);
that.changeVideo(this.videoArray[this.currentCateIndex])
// }
}
}, 1000)
},
hideNextVideo() {
console.log('父组件收到了取消加载-------------------');
clearInterval(this.countDownTimer)
this.countDownTimer = undefined
},
//课程详情
async gotoDetail(v, index) {
@@ -713,44 +677,6 @@
this.currentCateIndex = data.index;
this.$forceUpdate();
},
initVideo() {
this.changeVideoLock = true
this.screenLoading = false;
this.isfresh = false;
this.$nextTick(() => {
this.isfresh = true;
setTimeout(() => {
this.$refs.commonVideo.init({
currentVideo: this.currentVideo,
currentVideoList: this.videoArray,
});
}, 200);
});
},
changeVideo(data) {
this.changeVideoLock = true
if (this.countDownTimer) {
this.hideNextVideo()
}
console.log("点击了点击了切换视频-----:", this.countDownTimer, data, );
if (data.id != this.currentVideo.id) {
this.currentCateIndex = this.videoArray.findIndex(item => {
return item.id == data.id
})
// handleEnd
// this.$refs.commonVideo.handleEnd();
setTimeout(() => {
// this.$refs.commonVideo.changeVideo(data);
this.currentVideo = data;
this.initVideo();
this.isOpenMp3 = false;
}, 500);
}
},
hancleModalCancel() {
this.show = false;
},
@@ -809,6 +735,7 @@
.then(async (res) => {
that.curriculumData = res.data.detail;
that.videoArray = res.data.videos;
console.log('视频列表:', that.videoArray);
//判断没有视频的情况
if(that.videoArray.length==0){
@@ -825,9 +752,7 @@
isHaveHistorySeekVideo != -1 ? isHaveHistorySeekVideo : 0;
if (that.videoArray.length > 0) {
this.currentVideo = that.videoArray[that.currentCateIndex];
console.log('默认播放的index', that.currentCateIndex, this.currentVideo.id, that
.videoArray);
this.initVideo();
console.log('默认播放的index', that.currentCateIndex, this.currentVideo.id, that.videoArray);
}
var videoArray = [];
var videoArrayHW = [];
@@ -1545,4 +1470,4 @@
justify-content: center;
}
}
</style>
</style>

View File

@@ -1062,12 +1062,12 @@
v.isAudition == 1 && this.userVip==null && this.librayList[this.curIndex].isBuy == 0 ? noRecored = true : ''
if(this.userVip){
uni.navigateTo({
url: `${_myurl}?navTitle=${this.pageTitle}&title=${v.title}&courseId=${this.courseId}&id=${v.id}&conditions=${v.conditions}&noRecored=${noRecored}`,
url: `${_myurl}?navTitle=${this.pageTitle}&title=${v.title}&courseId=${this.courseId}&id=${v.id}&conditions=${v.conditions}&noRecored=${noRecored}&curriculumImgUrl=${this.course.image}`,
});
}else{
if(v.isAudition == 1||this.librayList[this.curIndex].isBuy == 1){
uni.navigateTo({
url: `${_myurl}?navTitle=${this.pageTitle}&title=${v.title}&courseId=${this.courseId}&id=${v.id}&conditions=${v.conditions}&noRecored=${noRecored}`,
url: `${_myurl}?navTitle=${this.pageTitle}&title=${v.title}&courseId=${this.courseId}&id=${v.id}&conditions=${v.conditions}&noRecored=${noRecored}&curriculumImgUrl=${this.course.image}`,
});
}else{
if(this.librayList[this.curIndex].type != 0){

View File

@@ -85,6 +85,7 @@
</view>
<view :class="['titleItem']">{{item.name}}</view>
</view>
</view>
<u-divider text="暂无数据哦~" v-if="titleList.length==0"></u-divider>
</view>
@@ -644,6 +645,7 @@
}
.contentBox {
height: auto;
.oneCateList {
justify-content: space-between;
@@ -694,6 +696,10 @@
padding: 20rpx 10rpx;
width: 100%;
border-bottom: 0.5px solid #f8f9fa;
&:last-child {
border-bottom: 0;
}
}
.wmzhimg {
@@ -706,7 +712,7 @@
.container {
padding: 10rpx;
height: 100vh;
min-height: 100vh;
background-color: #fff;
}
@@ -763,4 +769,8 @@
.chImage {
height: 100rpx;
}
</style>
.android-bottom-space {
height: 120rpx;
}
</style>

View File

@@ -0,0 +1,154 @@
<template>
<view class="commonPage commonPageBox">
<public-module></public-module>
<z-nav-bar title="数据迁移" bgColor="#258feb" fontColor="#fff"></z-nav-bar>
<view class="migrate-tips">迁移后不可恢复请谨慎操作</view>
<view class="code-wrap">
<view class="account">账号{{ userInfo.tel || userInfo.email}}</view>
<view v-if="code" class="code-box">
<view class="code-number">{{ code }}</view>
<view><text>{{ remaining }}</text>有效<text class="uni-link" @click="handleRefresh">刷新</text></view>
</view>
</view>
<view class="migrate-intro">
<view class="migrate-intro-title">迁移说明</view>
<view>1. 请在吴门国际APP中完成数据迁移操作方式我的-数据迁移-输入账号和移验证码</view>
<view>2. 数据迁移完成后本账号数据将被清空已购买的天医币积分课程VIP等数据将转移到新账号</view>
<view>3. 迁移过程可能需要几分钟时间请耐心等待</view>
<view>4. 如遇到问题请联系客服获取帮助</view>
</view>
</view>
</template>
<script>
import $http from "@/config/requestConfig.js";
import { mapState } from "vuex";
export default {
data() {
return {
code: '',
remaining: '',
timer: null,
lastRefreshTime: 0, // 上次刷新时间戳
refreshCooldown: 10000 // 节流时间3秒内只能刷新一次
}
},
computed: {
...mapState(["userInfo"]),
},
created() {
this.countDown()
},
beforeDestroy() {
// 组件销毁前清除定时器
if (this.timer) clearInterval(this.timer);
},
methods: {
getCode() {
this.$http
        .post("common/user/getMigrationCode")
        .then((res) => {
          if (res.code == 0) {
            this.code = res.migrationCode;
          }
        })
        .catch((e) => {
          console.log(e);
        });
},
async countDown() {
// 清除已有的定时器
if (this.timer) clearInterval(this.timer);
await this.getCode() // 获取验证码
// 初始化倒计时时间3分钟 = 180秒
let totalSeconds = 175;
// 立即更新第一次显示
this.updateRemainingTime(totalSeconds);
// 设置每秒执行的定时器
this.timer = setInterval(() => {
totalSeconds--;
if (totalSeconds <= 0) {
this.countDown()
return;
}
this.updateRemainingTime(totalSeconds);
}, 1000);
},
updateRemainingTime(totalSeconds) {
const minutes = Math.floor(totalSeconds / 60);
const seconds = totalSeconds % 60;
this.remaining = `${minutes}${seconds.toString().padStart(2, '0')}`;
},
// 带节流的刷新方法
handleRefresh() {
const now = Date.now();
// 如果距离上次刷新时间小于节流时间,不执行刷新
if (now - this.lastRefreshTime < this.refreshCooldown) {
uni.showToast({
title: `操作太频繁,请${Math.ceil((this.refreshCooldown - (now - this.lastRefreshTime)) / 1000)}秒后再试`,
icon: 'none',
duration: 2000
});
return;
}
// 更新上次刷新时间
this.lastRefreshTime = now;
// 执行刷新
this.countDown();
// 给用户反馈
uni.showToast({
title: '刷新成功',
icon: 'success',
duration: 1500
});
}
}
}
</script>
<style lang="scss" scoped>
.migrate-tips {
color: #ff0000;
font-weight: bold;
text-align: center;
font-size: 16px;
padding: 10px 0;
}
.code-wrap {
margin: 0 20px;
padding: 10px 15px;
background-color: #f0f0f0;
border-radius: 8px;
font-size: 16px;
.code-box {
display: flex;
align-items: baseline;
padding-top: 10px;
.code-number {
font-weight: bold;
font-size: 28px;
color: #000;
margin-right: 10px;
}
}
}
.migrate-intro {
margin: 20px;
.migrate-intro-title {
font-weight: bold;
font-size: 16px;
margin-bottom: 5px;
}
}
</style>

View File

@@ -241,6 +241,11 @@
name: "问题反馈/申诉",
url: "/pages/user/workOrder",
type: "workOrder"
},
{
name: "数据迁移",
url: "/pages/mine/migrate/index",
type: "pageJump"
}
],
//vip

View File

@@ -37,7 +37,7 @@
></view
>
</view>
<view v-if="$platform != 'ios'">
<view>
<text
class="vip_item_btn"
v-if="item.state == null"
@@ -226,9 +226,9 @@ export default {
//点击购买
openorderModal(item, type) {
console.log("item at line 120:", item);
if (this.$platform == "ios") {
return false;
}
// if (this.$platform == "ios") {
// return false;
// }
let text = "";
//如果是右侧按钮点击展示
//判断点击类型是vip价格还是延期价格

View File

@@ -49,7 +49,7 @@
<text class="mainTxt" v-if="classModel.type == '2'">精英班</text>
</view>
<view><text class="ciyao">学员人数</text><text
class="mainTxt">{{students.length}}/{{thisClass.number}}</text></view>
class="mainTxt">{{(students || []).length}}/{{thisClass.number || 0}}</text></view>
<view><text class="ciyao">管理成员</text><text class="mainTxt" @click="seeManager">点击查看</text></view>
</view>
@@ -220,7 +220,10 @@
<!-- 班内同学 -->
<template v-if="tabId == '2'">
<template v-if="students.length> 0">
<view v-if="studentsLoading" style="text-align: center;">
数据加载中
</view>
<template v-else-if="students.length> 0">
<view class="" style=" overflow: hidden; margin:20rpx 0">
<text style="font-size: 26rpx; color: #666;"> {{students.length}} 名学员</text>
</view>
@@ -236,8 +239,8 @@
</view>
<view class="textItems flex_box">
<text class="txt555"
v-if="item.student.nickname != null && item.student.nickname != ''">
{{item.student.nickname}}
v-if="item.student.name != null && item.student.name != ''">
{{item.student.name}}
</text>
<text v-else>匿名用户</text>
</view>
@@ -286,10 +289,10 @@
<view class="" v-if="tijiaoTitleId == 2 && false" style="margin: 20rpx 0;">
<radio-group @change="radioChange1" class="flex_box">
<view class="" style="margin-right:20rpx ;">
<radio value="0" />全部同学的</label>
<radio value="0" /><label>全部同学的</label>
</view>
<view class="">
<radio value="1" checked="true" />只看我自己的</label>
<radio value="1" checked="true" /><label>只看我自己的</label>
</view>
</radio-group>
</view>
@@ -309,7 +312,7 @@
</view>
<view class="leve3">
<view class="tips flex_box" v-if="item.zhedie">
<!-- <text>发布者{{item.createUser.nickname != null && item.createUser.nickname != '' ? item.createUser.nickname : '匿名用户'}}</text> -->
<!-- <text>发布者{{item.createUser.name != null && item.createUser.name != '' ? item.createUser.name : '匿名用户'}}</text> -->
<text style="" class="date">日期{{item.createTime}}</text>
</view>
<template v-if="tijiaoTitleId == 2 && isHave">
@@ -403,21 +406,21 @@
<view class="item">
<text class="adminName">班长</text>
<view class="personbox" v-if="admins.monitor.user != null">
<text>{{admins.monitor.user.nickname != null && admins.monitor.user.nickname != '' ? admins.monitor.user.nickname : '匿名用户'}}</text>
<text>{{admins.monitor.user.name != null && admins.monitor.user.name != '' ? admins.monitor.user.name : '匿名用户'}}</text>
</view>
<text v-else>暂未设置</text>
</view>
<view class="item">
<text class="adminName">副班长</text>
<view class="personbox" v-if="admins.dmonitor.user != null">
<text>{{admins.dmonitor.user.nickname != null && admins.dmonitor.user.nickname != '' ? admins.dmonitor.user.nickname : '匿名用户'}}</text>
<text>{{admins.dmonitor.user.name != null && admins.dmonitor.user.name != '' ? admins.dmonitor.user.name : '匿名用户'}}</text>
</view>
<text v-else>暂未设置</text>
</view>
<view class="item"><text class="adminName">学习委员</text>
<view class="personbox" v-if="admins.learner.user != null">
<text>{{admins.learner.user.nickname != null && admins.learner.user.nickname != '' ? admins.learner.user.nickname : '匿名用户'}}</text>
<text>{{admins.learner.user.name != null && admins.learner.user.name != '' ? admins.learner.user.name : '匿名用户'}}</text>
</view>
<text v-else>暂未设置</text>
</view>
@@ -425,7 +428,7 @@
<template v-if="admins.scorer.length > 0">
<view class="arryItemSub" v-for="(item,index) in admins.scorer" :key="index">
<template v-if="item.user != null">
<text>{{item.user.nickname != null && item.user.nickname != '' ? item.user.nickname+'' : '匿名用户,'}}</text>
<text>{{item.user.name != null && item.user.name != '' ? item.user.name+'' : '匿名用户,'}}</text>
<!-- <text>({{item.user.tel}}),</text> -->
</template>
</view>
@@ -505,7 +508,9 @@
<text class="small_btn border_radius_10"
v-if="!submitInfo.photo || submitInfo.photo != '' || submitInfo.photo != null"
@click="onPageJump('/pages/mine/userInfo/persData')"
style="display: block; height: 30px;">{{submitInfo.photo && submitInfo.photo != '' && submitInfo.photo != null ? '去修改' : '去上传'}}</text>
style="display: block; height: 30px;"
>
{{submitInfo.photo && submitInfo.photo != '' && submitInfo.photo != null ? '去修改' : '去上传'}}
</text>
</view>
</view>
@@ -568,6 +573,7 @@
showSubmitInfoBlank: false,
thisClass: {},
students: [],
studentsLoading: true,
tabId: undefined,
curTagIndex: 0,
scrollable: false,
@@ -774,6 +780,14 @@
this.submitInfo.photo = userObj.photo
}
}
if (this.thisClass.state == '3' || this.thisClass.state == '2') {
// 考试周 结班状态下的
this.students = await this.getStudentScoreList()
console.log('students考试周 结班状态下的', this.students);
} else {
this.students = await this.getStudentsList()
}
this.studentsLoading = false
},
components: {
sutdentScoreList,
@@ -963,13 +977,33 @@
.then(async (res) => {
console.log('课程购买情况',res);
if (res.code == 0) {
if (res.msg != '') {
msg = res.msg
var outputStr = await this.convertToHalfWidth(res.msg)
uni.showModal({
title: '提示',
content: `${outputStr}课程没有购买,请尽快购买班级内教学需要的课程,逾期您将被系统自动踢出班级,感谢您的理解和支持`
})
if (res.res && res.res.length > 0) {
const msgArr = res.res
for (const item of msgArr) {
const outputStr = await this.convertToHalfWidth(item)
const isPass = await new Promise(resolve => {
uni.showModal({
title: '提示',
content: `${outputStr}`,
success: (res) => {
if (res.confirm) {
resolve(true)
} else {
resolve(false)
}
}
})
})
if (!isPass) {
break
}
}
// msg = res.msg
// var outputStr = await this.convertToHalfWidth(res.msg)
// uni.showModal({
// title: '提示',
// content: `${outputStr}`
// })
}
}
}).catch(e => {
@@ -1066,10 +1100,42 @@
})
});
},
// 未开班和进行中状态下,学员的信息,带买课标识
async getStudentsList() {
var list = []
await $http.request({
url: "common/class/getClassUserCourseFlag",
method: "POST",
data: {
"classId": parseInt(this.classId)
},
header: {
'Content-Type': 'application/json'
},
})
.then(res => {
if (res.code == 0) {
list = res.result.students
} else {
uni.showToast({
title: '获取学员信息失败',
icon: 'none',
duration: 3000
})
}
}).catch(e => {
list = []
uni.showToast({
title: e.errMsg,
icon: 'none',
duration: 3000
})
});
return list
},
// 考试周和结班状态下,学员的信息
async getStudentScoreList() {
console.log('进来了码?');
var list = undefined
var list = []
await $http.request({
url: "common/class/userScoreList",
method: "POST",
@@ -1079,6 +1145,7 @@
header: {
'Content-Type': 'application/json'
},
timeout: '60000'
})
.then(res => {
if (res.code == 0) {
@@ -1894,13 +1961,6 @@ uni.navigateTo({
this.classModel = res.result.classModel
this.courses = res.result.courses
if (this.thisClass.state == '3' || this.thisClass.state == '2') {
// 考试周 结班状态下的
this.students = await this.getStudentScoreList()
console.log('students考试周 结班状态下的', this.students);
} else {
this.students = res.result.students
}
this.refresh = true
var ss = this.getTijiaoTitleList
if (this.thisClass.state != 0 && this.tabId != '3') {
@@ -2260,7 +2320,7 @@ uni.navigateTo({
color: #999;
}
.date {}
// .date {}
@@ -2688,7 +2748,7 @@ uni.navigateTo({
}
}
.optionsBox {}
// .optionsBox {}
.btn_box_certificate {
margin-top: 70rpx;
@@ -2713,13 +2773,13 @@ uni.navigateTo({
}
.userinfoPup {
.tips {
// .item{justify-content: space-around;}
}
// .tips {
// // .item{justify-content: space-around;}
// }
.small_btn {
color: #55aaff;
border: #55aaff 1px solid;
}
}
</style>
</style>

View File

@@ -228,7 +228,10 @@
</view>
<!-- 学员列表 -->
<view class="" v-if="tabId == '2'">
<template v-if="students.length > 0">
<view v-if="studentsLoading" style="text-align: center;">
数据加载中
</view>
<template v-else-if="students.length > 0">
<view class="" style="overflow: hidden; margin: 20rpx 0">
<text style="font-size: 26rpx; color: #666"
>共 {{ students.length }} 名学员</text
@@ -292,11 +295,11 @@
<text
class="txt555"
v-if="
item.student.nickname != null &&
item.student.nickname != ''
item.student.name != null &&
item.student.name != ''
"
>
{{ item.student.nickname }}
{{ item.student.name }}
<template>
<text>{{ item.student.tel }}</text>
</template>
@@ -429,9 +432,9 @@
v-if="admins.monitor.user != null && admins.monitor.id"
>
<text>{{
admins.monitor.user.nickname != null &&
admins.monitor.user.nickname != ""
? admins.monitor.user.nickname
admins.monitor.user.name != null &&
admins.monitor.user.name != ""
? admins.monitor.user.name
: "匿名用户"
}}</text>
<text v-if="admins.monitor.id"
@@ -447,9 +450,9 @@
v-if="admins.dmonitor.user != null && admins.dmonitor.id"
>
<text>{{
admins.dmonitor.user.nickname != null &&
admins.dmonitor.user.nickname != ""
? admins.dmonitor.user.nickname
admins.dmonitor.user.name != null &&
admins.dmonitor.user.name != ""
? admins.dmonitor.user.name
: "匿名用户"
}}</text>
<text>({{ admins.dmonitor.user.tel }})</text>
@@ -463,9 +466,9 @@
v-if="admins.learner.user != null && admins.learner.id"
>
<text>{{
admins.learner.user.nickname != null &&
admins.learner.user.nickname != ""
? admins.learner.user.nickname
admins.learner.user.name != null &&
admins.learner.user.name != ""
? admins.learner.user.name
: "匿名用户"
}}</text>
<text>({{ admins.learner.user.tel }})</text>
@@ -476,7 +479,7 @@
<template v-if="admins.counter.length > 0">
<view class="arryItemSub" v-for="(item,index) in admins.counter" :key="index">
<template v-if="item.user != null">
<text>{{item.user.nickname != null && item.user.nickname != '' ? item.user.nickname : '匿名用户'}}</text>
<text>{{item.user.name != null && item.user.name != '' ? item.user.name : '匿名用户'}}</text>
<text>({{item.user.tel}}) </text>
</template>
</view>
@@ -493,8 +496,8 @@
>
<template v-if="item.user != null">
<text>{{
item.user.nickname != null && item.user.nickname != ""
? item.user.nickname
item.user.name != null && item.user.name != ""
? item.user.name
: "匿名用户"
}}</text>
<text>({{ item.user.tel }}) </text>
@@ -516,9 +519,9 @@
<view class="upopBox" style="">
<h3 style="margin-bottom: 20rpx">
{{
thisStudent.student.nickname != null &&
thisStudent.student.nickname != ""
? thisStudent.student.nickname
thisStudent.student.name != null &&
thisStudent.student.name != ""
? thisStudent.student.name
: "匿名用户"
}}
</h3>
@@ -548,9 +551,9 @@
<view class="upopBox manScoreBox" style="">
<h3 style="margin-bottom: 20rpx">
{{
thisStudentScore.user.nickname != null &&
thisStudentScore.user.nickname != ""
? thisStudentScore.user.nickname
thisStudentScore.user.name != null &&
thisStudentScore.user.name != ""
? thisStudentScore.user.name
: "匿名用户"
}}
</h3>
@@ -639,6 +642,7 @@ export default {
showOverBtn: false,
},
students: [],
studentsLoading: true,
tabId: "2",
curTagIndex: 0,
scrollable: false,
@@ -1121,6 +1125,39 @@ export default {
that.opClass(statusCode);
}, 300);
},
// 未开班和进行中状态下,学员的信息,带买课标识
async getStudentsList() {
var list = undefined
await $http.request({
url: "common/class/getClassUserCourseFlag",
method: "POST",
data: {
"classId": parseInt(this.classId)
},
header: {
'Content-Type': 'application/json'
},
})
.then(res => {
if (res.code == 0) {
list = res.result.students
} else {
uni.showToast({
title: '获取学员信息失败',
icon: 'none',
duration: 3000
})
}
}).catch(e => {
list = []
uni.showToast({
title: e.errMsg,
icon: 'none',
duration: 3000
})
});
return list
},
// 考试周和结班状态下,学员的信息
async getStudentScoreList() {
var list = undefined;
@@ -1135,6 +1172,7 @@ export default {
//默认 无 说明:请求头
"Content-Type": "application/json",
},
timeout: '60000'
})
.then((res) => {
console.log("班状态下,学员的信息", this.classId, res);
@@ -1431,8 +1469,9 @@ export default {
this.students = await this.getStudentScoreList();
// console.log('students', this.students);
} else {
this.students = res.result.students;
this.students = await this.getStudentsList();
}
this.studentsLoading = false;
this.refresh = true;
if (this.thisClass.state == 0) {

View File

@@ -32,8 +32,11 @@
itemStyle="padding-left:10rpx; background-color:#fff; padding-right: 10rpx; height: 50px; font-size:26rpx"></u-tabs>
</view>
<!-- 学员列表 -->
<view class="" v-if="tabId == '2'">
<template v-if="students.length> 0 ">
<view class="" v-if="tabId == '2'">
<view v-if="studentsLoading" style="text-align: center;">
数据加载中
</view>
<template v-else-if="students.length> 0 ">
<view class="" style=" overflow: hidden; margin: 20rpx 0;">
<text style="font-size: 26rpx; color: #666;"> {{students.length}} 名学员</text>
<!-- <uni-section class="mb-10 nobg xueyuanTitle" title="班内学员" type="line" sub-title="">
@@ -91,8 +94,8 @@
</view>
<view :class="['textItems','flex_box']">
<text class="txt555"
v-if="item.student.nickname != null && item.student.nickname != ''">
{{item.student.nickname}}
v-if="item.student.name != null && item.student.name != ''">
{{item.student.name}}
<template>
<text>{{item.student.tel}}</text>
</template>
@@ -170,7 +173,7 @@
<view class="item">
<text class="adminName">班长</text>
<view class="personbox" v-if="admins.monitor.user != null && admins.monitor.id">
<text>{{admins.monitor.user.nickname != null && admins.monitor.user.nickname != '' ? admins.monitor.user.nickname : '匿名用户'}}</text>
<text>{{admins.monitor.user.name != null && admins.monitor.user.name != '' ? admins.monitor.user.name : '匿名用户'}}</text>
<text v-if="admins.monitor.id">({{admins.monitor.user.tel}})</text>
</view>
<text v-else>暂未设置</text>
@@ -178,14 +181,14 @@
<view class="item">
<text class="adminName">副班长</text>
<view class="personbox" v-if="admins.dmonitor.user != null && admins.dmonitor.id">
<text>{{admins.dmonitor.user.nickname != null && admins.dmonitor.user.nickname != '' ? admins.dmonitor.user.nickname : '匿名用户'}}</text>
<text>{{admins.dmonitor.user.name != null && admins.dmonitor.user.name != '' ? admins.dmonitor.user.name : '匿名用户'}}</text>
<text>({{admins.dmonitor.user.tel}})</text>
</view>
<text v-else>暂未设置</text>
</view>
<view class="item"><text class="adminName">学习委员</text>
<view class="personbox" v-if="admins.learner.user != null && admins.learner.id">
<text>{{admins.learner.user.nickname != null && admins.learner.user.nickname != '' ? admins.learner.user.nickname : '匿名用户'}}</text>
<text>{{admins.learner.user.name != null && admins.learner.user.name != '' ? admins.learner.user.name : '匿名用户'}}</text>
<text>({{admins.learner.user.tel}})</text>
</view>
<text v-else>暂未设置</text>
@@ -194,7 +197,7 @@
<template v-if="admins.counter.length > 0">
<view class="arryItemSub" v-for="(item,index) in admins.counter" :key="index">
<template v-if="item.user != null">
<text>{{item.user.nickname != null && item.user.nickname != '' ? item.user.nickname : '匿名用户'}}</text>
<text>{{item.user.name != null && item.user.name != '' ? item.user.name : '匿名用户'}}</text>
<text>({{item.user.tel}}) </text>
</template>
</view>
@@ -205,7 +208,7 @@
<template v-if="admins.scorer.length > 0">
<view class="arryItemSub" v-for="(item,index) in admins.scorer" :key="index">
<template v-if="item.user != null">
<text>{{item.user.nickname != null && item.user.nickname != '' ? item.user.nickname : '匿名用户'}}</text>
<text>{{item.user.name != null && item.user.name != '' ? item.user.name : '匿名用户'}}</text>
<text>({{item.user.tel}}) </text>
</template>
</view>
@@ -217,7 +220,7 @@
<u-popup key="2" v-if="showStudentBlank" :show="showStudentBlank" :round="10" @close="closePup" ref="">
<view class="upopBox" style="">
<h3 style="margin-bottom: 20rpx;">
{{thisStudent.student.nickname != null && thisStudent.student.nickname != '' ? thisStudent.student.nickname : "匿名用户"}}
{{thisStudent.student.name != null && thisStudent.student.name != '' ? thisStudent.student.name : "匿名用户"}}
</h3>
<view class="item">
<text><b>身份信息</b></text>
@@ -272,7 +275,7 @@
ref="">
<view class="upopBox manScoreBox" style="">
<h3 style="margin-bottom: 20rpx;">
{{thisStudentScore.user.nickname != null && thisStudentScore.user.nickname != '' ? thisStudentScore.user.nickname : "匿名用户"}}
{{thisStudentScore.user.name != null && thisStudentScore.user.name != '' ? thisStudentScore.user.name : "匿名用户"}}
</h3>
<view class="item">
<text><b>身份信息</b></text>
@@ -352,6 +355,7 @@
thisClass: {},
students: [],
studentsLoading: true,
tabId: '2',
curTagIndex: 0,
scrollable: false,
@@ -754,6 +758,39 @@
url: `/pages/miniClass/classCaskList?id=${this.thisClass.id}&type=${this.tijiaoTitleId}`
})
},
// 未开班和进行中状态下,学员的信息,带买课标识
async getStudentsList() {
var list = undefined
await $http.request({
url: "common/class/getClassUserCourseFlag",
method: "POST",
data: {
"classId": parseInt(this.classId)
},
header: {
'Content-Type': 'application/json'
},
})
.then(res => {
if (res.code == 0) {
list = res.result.students
} else {
uni.showToast({
title: '获取学员信息失败',
icon: 'none',
duration: 3000
})
}
}).catch(e => {
list = []
uni.showToast({
title: e.errMsg,
icon: 'none',
duration: 3000
})
});
return list
},
// 考试周和结班状态下,学员的信息
async getStudentScoreList() {
var list = undefined
@@ -766,6 +803,7 @@
header: { //默认 无 说明:请求头
'Content-Type': 'application/json'
},
timeout: '60000'
})
.then(res => {
console.log('考试周状态下,学员的信息',this.classId, res);
@@ -863,8 +901,9 @@
this.students = await this.getStudentScoreList()
// console.log('students', this.students);
} else {
this.students = res.result.students
this.students = await this.getStudentsList()
}
this.studentsLoading = false
this.refresh = true
}

View File

@@ -36,8 +36,8 @@
</view>
<view :class="['textItems','flex_box']">
<view class="txt555"
v-if="item.user.nickname != null && item.user.nickname != ''">
{{item.user.nickname}}
v-if="item.user.name != null && item.user.name != ''">
{{item.user.name}}
<template>
<text v-if="pageSorce!='myClass'">{{item.user.tel}}</text>
</template>

View File

@@ -29,7 +29,7 @@
<view class="textBox">
<view class="">
<text style="width: 100%; display: inline-block;">
{{form.monitor && form.monitor.nickname != '' && form.monitor.nickname != null ? form.monitor.nickname : '匿名用户'}}
{{form.monitor && form.monitor.name != '' && form.monitor.name != null ? form.monitor.name : '匿名用户'}}
</text>
<text style="width: 100%; display: inline-block;"> -
{{form.monitor.tel}}</text>
@@ -68,7 +68,7 @@
<view class="textBox">
<view class="">
<text style="width: 100%; display: inline-block;">
{{form.dmonitor && form.dmonitor.nickname != '' && form.dmonitor.nickname != null ? form.dmonitor.nickname : '匿名用户'}}
{{form.dmonitor && form.dmonitor.name != '' && form.dmonitor.name != null ? form.dmonitor.name : '匿名用户'}}
</text>
<text style="width: 100%; display: inline-block;"> -
{{form.dmonitor.tel}}</text>
@@ -106,7 +106,7 @@
<view class="textBox">
<view class="">
<text style="width: 100%; display: inline-block;">
{{form.learner && form.learner.nickname != '' && form.learner.nickname != null ? form.learner.nickname : '匿名用户'}}
{{form.learner && form.learner.name != '' && form.learner.name != null ? form.learner.name : '匿名用户'}}
</text>
<text style="width: 100%; display: inline-block;"> -
{{form.learner.tel}}</text>
@@ -146,7 +146,7 @@
<view class="textBox">
<view class="">
<text style="width: 100%; display: inline-block;">
{{item && item.nickname != '' && item.nickname != null ? item.nickname : '匿名用户'}}
{{item && item.name != '' && item.name != null ? item.name : '匿名用户'}}
</text>
<text style="width: 100%; display: inline-block;"> - {{item.tel}}</text>
</view>
@@ -183,7 +183,7 @@
<view class="textBox">
<view class="">
<text style="width: 100%; display: inline-block;">
{{item && item.nickname != '' && item.nickname != null ? item.nickname : '匿名用户'}}
{{item && item.name != '' && item.name != null ? item.name : '匿名用户'}}
</text>
<text style="width: 100%; display: inline-block;"> - {{item.tel}}</text>
</view>

View File

@@ -53,8 +53,8 @@
</view>
<view class="textItems flex_box">
<text class="nick"
v-if="item.student.nickname != null && item.student.nickname != ''">
{{item.student.nickname}}
v-if="item.student.name != null && item.student.name != ''">
{{item.student.name}}
</text>
<text class="nick" v-else>
匿名用户
@@ -81,7 +81,7 @@
</view>
<u-popup key="1" v-if="showEditBlank" :show="showEditBlank" :round="10" @close="closePup" ref="">
<view class="upopBox" style="">
<h3 style="margin-bottom: 20rpx;">{{thisStudent.student.nickname != null && thisStudent.student.nickname != '' ? thisStudent.student.nickname : "匿名用户"}}</h3>
<h3 style="margin-bottom: 20rpx;">{{thisStudent.student.name != null && thisStudent.student.name != '' ? thisStudent.student.name : "匿名用户"}}</h3>
<view class="item">
<text><b>身份信息</b></text>
<text v-if="thisStudent.student.vip == '0'">普通用户</text>
@@ -279,12 +279,12 @@
'Content-Type': 'application/json'
},
})
.then(res => {
.then(async res => {
this.refresh = false
if (res.code == 0) {
this.thisClass = res.result.class
this.students = res.result.students
this.students = await this.getStudentsList()
}
@@ -298,6 +298,39 @@
icon: 'none'
})
});
},
// 未开班和进行中状态下,学员的信息,带买课标识
async getStudentsList() {
var list = undefined
await $http.request({
url: "common/class/getClassUserCourseFlag",
method: "POST",
data: {
"classId": parseInt(this.classId)
},
header: {
'Content-Type': 'application/json'
},
})
.then(res => {
if (res.code == 0) {
list = res.result.students
} else {
uni.showToast({
title: '获取学员信息失败',
icon: 'none',
duration: 3000
})
}
}).catch(e => {
list = []
uni.showToast({
title: e.errMsg,
icon: 'none',
duration: 3000
})
});
return list
}
}
}

View File

@@ -53,7 +53,7 @@
<image v-else src="/static/icon/morenAvavter.png" mode="aspectFit"></image>
</view>
<view class="userName flex_box">
<text v-if="item.createUser.nickname != '' && item.createUser.nickname != null">匿名用户</text>
<text v-if="item.createUser.name != '' || item.createUser.name != null">{{item.createUser.name}}</text>
<text v-else>匿名用户</text>
</view>
</view>

View File

@@ -43,7 +43,7 @@
</view>
<view class="userName flex_box">
<text
v-if="item.createUser.nickname != '' && item.createUser.nickname != null">{{item.createUser.nickname}}</text>
v-if="item.createUser.name != '' && item.createUser.name != null">{{item.createUser.name}}</text>
<text v-else>匿名用户</text>
</view>
</view>
@@ -107,7 +107,7 @@
日期:{{curReplay.createTime}}
</view>
<view class="" v-if="curReplay.createUser" style="color: #999;padding: 10rpx 0; font-size: 26rpx;">
学员信息:{{curReplay.createUser.nickname != null && curReplay.createUser.nickname != '' ? curReplay.createUser.nickname : '匿名用户'}}
学员信息:{{curReplay.createUser.name != null && curReplay.createUser.name != '' ? curReplay.createUser.name : '匿名用户'}}
/ {{curReplay.createUser.tel}}
</view>
<!-- <view class="score" v-show="curReplay.scoreSuccess != 0">

View File

@@ -64,7 +64,7 @@
日期{{curReplay.createTime}}
</view>
<view class="" v-if="curReplay.createUser" style="color: #999;padding: 10rpx 0;">
学员信息{{curReplay.createUser.nickname != null && curReplay.createUser.nickname != '' ? curReplay.createUser.nickname : '匿名用户'}}
学员信息{{curReplay.createUser.name != null && curReplay.createUser.name != '' ? curReplay.createUser.name : '匿名用户'}}
/ {{curReplay.createUser.tel}}
</view>
</scroll-view>

View File

@@ -239,7 +239,14 @@ function judgePermission(permissionID, callback) {
if (isIos) {
handle(judgeIosPermissionLocation());
} else {
requestAndroidPermission("android.permission.ACCESS_FINE_LOCATION", "位置").then(handle);
// requestAndroidPermission("android.permission.ACCESS_FINE_LOCATION", "位置").then(handle);
}
} else
if (permissionID == "record") { // 麦克风
if (isIos) {
handle(judgeIosPermissionRecord());
} else {
// requestAndroidPermission("android.permission.RECORD_AUDIO", "麦克风").then(handle);
}
} else if (permissionID == "camera") { // 摄像头
if (isIos) {
@@ -253,12 +260,6 @@ function judgePermission(permissionID, callback) {
} else {
requestAndroidPermission("android.permission.READ_EXTERNAL_STORAGE", "相册读取").then(handle);
}
} else if (permissionID == "record") { // 麦克风
if (isIos) {
handle(judgeIosPermissionRecord());
} else {
requestAndroidPermission("android.permission.RECORD_AUDIO", "麦克风").then(handle);
}
} else if (permissionID == "push") { // 推送
if (isIos) {
handle(judgeIosPermissionPush());

View File

@@ -503,45 +503,45 @@ function wxAppletsLocation(successCallback, errCallback) {
}
// 获取地址信息
let locationAuthorize = true;
export const getAppWxLatLon = function(successCallback, errCallback) {
const _this = this;
// #ifdef MP
if (locationAuthorize) {
uni.authorize({
scope: 'scope.userLocation',
success: () => {
wxAppletsLocation(successCallback, errCallback);
locationAuthorize = false;
},
fail: () => {
locationAuthorize = false;
}
});
} else {
wxAppletsLocation(successCallback, errCallback);
}
// #endif
// #ifdef APP-PLUS
judgePermission("location", function(result) {
if (result == 1) {
uni.getLocation({
type: 'gcj02',
success: res => {
// store.commit("setCurrentAddress", {
// latitude: res.latitude,
// longitude: res.longitude
// });
successCallback(res);
},
fail: (err) => {
console.log("位置信息错误", err);
errCallback("位置信息获取失败");
}
});
}
});
// #endif
}
// export const getAppWxLatLon = function(successCallback, errCallback) {
// const _this = this;
// // #ifdef MP
// if (locationAuthorize) {
// uni.authorize({
// scope: 'scope.userLocation',
// success: () => {
// wxAppletsLocation(successCallback, errCallback);
// locationAuthorize = false;
// },
// fail: () => {
// locationAuthorize = false;
// }
// });
// } else {
// wxAppletsLocation(successCallback, errCallback);
// }
// // #endif
// // #ifdef APP-PLUS
// judgePermission("location", function(result) {
// if (result == 1) {
// uni.getLocation({
// type: 'gcj02',
// success: res => {
// // store.commit("setCurrentAddress", {
// // latitude: res.latitude,
// // longitude: res.longitude
// // });
// successCallback(res);
// },
// fail: (err) => {
// console.log("位置信息错误", err);
// errCallback("位置信息获取失败");
// }
// });
// }
// });
// // #endif
// }
//金额过滤
Vue.filter('money', function(val) {

View File

@@ -1,30 +0,0 @@
[appleAppid]
appleAppid=com.cn.medicine
[iosStyle]
iosStyle=common
[universalLinks]
universalLinks=https://verification.nuttyreading.com/uni-universallinks/__UNI__C7475A8/
spaceid=mp-3614b80b-2d75-4462-a481-4998f8187274
[universalLinks_qq]
universalLinks_qq=
spaceid_qq=
[universalLinks_weibo]
universalLinks_weibo=
spaceid_weibo=
[appstore]
appstore=
[iphone]
app%402x=57c603a7e76e93d4e909d70bc4f1c391
app%403x=dae9706c3d88c80e345fe86f92252814
notification%402x=90102496cae8ab78342248aafa2a930b
notification%403x=e172cef625674f072d3a1c937a048b77
settings%402x=83704cd271641c8750ad0edc3f6b54bf
settings%403x=a25a205a5b08635abac35931b1147c68
spotlight%402x=b5c21191cb9c68ea6be519f3f45b0460
spotlight%403x=57c603a7e76e93d4e909d70bc4f1c391

View File

@@ -1,3 +0,0 @@
iosProfile=D:/@证书/吴门医述251030/zhengshi/medicine_production_25103002 (1).mobileprovision
ioscertFile=D:/@证书/吴门医述251030/zhengshi/证书(1).p12
ioscertPassword=ai6IL9ZPZlB8nFR8AdVmIQ==

View File

@@ -1,11 +0,0 @@
{
"applinks" : {
"apps" : [],
"details" : [
{
"appID" : "84LKB8J47D.com.cn.medicine",
"paths" : [ "*", "/uni-universallinks/__UNI__C7475A8/*" ]
}
]
}
}

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -1,25 +0,0 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<script>
var __UniViewStartTime__ = Date.now();
var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') ||
CSS.supports('top: constant(a)'))
document.write(
'<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' +
(coverSupport ? ', viewport-fit=cover' : '') + '" />')
</script>
<title>View</title>
<link rel="stylesheet" href="view.css" />
</head>
<body>
<div id="app"></div>
<script src="__uniappes6.js"></script>
<script src="view.umd.min.js"></script>
<script src="app-view.js"></script>
</body>
</html>

View File

@@ -1,38 +0,0 @@
{
"version" : "1",
"prompt" : "template",
"title" : "服务协议和隐私政策",
"message" : "  请你务必审慎阅读、充分理解“隐私政策”各条款,包括但不限于:为了更好的向你提供服务,我们需要收集你的设备标识、操作日志等信息用于分析、优化应用性能。<br/>  你可阅读<a href=\"https://wumen.taihumed.com/agreement.html\">《用户协议》</a>和<a href=\"https://wumen.taihumed.com/privacy.html\">《隐私政策》</a>了解详细信息。如果你同意,请点击下面按钮开始接受我们的服务。",
"buttonAccept" : "同意并接受",
"buttonRefuse" : "暂不同意",
"hrefLoader" : "system",
"backToExit" : "false",
"second" : {
"title" : "确认提示",
"message" : "  进入应用前,你需先同意<a href=\"https://wumen.taihumed.com/agreement.html\">《用户协议》</a>和<a href=\"https://wumen.taihumed.com/privacy.html\">《隐私政策》</a>,否则将退出应用。",
"buttonAccept" : "同意并继续",
"buttonRefuse" : "退出应用"
},
"disagreeMode" : {
"support" : false,
"loadNativePlugins" : false,
"visitorEntry" : false,
"showAlways" : false
},
"styles" : {
"backgroundColor" : "#FFF",
"borderRadius" : "5px",
"title" : {
"color" : "#333"
},
"buttonAccept" : {
"color" : "#333"
},
"buttonRefuse" : {
"color" : "#333"
},
"buttonVisitor" : {
"color" : "#55aaff"
}
}
}

File diff suppressed because one or more lines are too long

View File

@@ -1 +0,0 @@
(function(e){function r(r){for(var n,l,i=r[0],p=r[1],a=r[2],c=0,s=[];c<i.length;c++)l=i[c],Object.prototype.hasOwnProperty.call(o,l)&&o[l]&&s.push(o[l][0]),o[l]=0;for(n in p)Object.prototype.hasOwnProperty.call(p,n)&&(e[n]=p[n]);f&&f(r);while(s.length)s.shift()();return u.push.apply(u,a||[]),t()}function t(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,i=1;i<t.length;i++){var p=t[i];0!==o[p]&&(n=!1)}n&&(u.splice(r--,1),e=l(l.s=t[0]))}return e}var n={},o={"app-config":0},u=[];function l(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,l),t.l=!0,t.exports}l.m=e,l.c=n,l.d=function(e,r,t){l.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},l.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l.t=function(e,r){if(1&r&&(e=l(e)),8&r)return e;if(4&r&&"object"===typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(l.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)l.d(t,n,function(r){return e[r]}.bind(null,n));return t},l.n=function(e){var r=e&&e.__esModule?function(){return e["default"]}:function(){return e};return l.d(r,"a",r),r},l.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},l.p="/";var i=this["webpackJsonp"]=this["webpackJsonp"]||[],p=i.push.bind(i);i.push=r,i=i.slice();for(var a=0;a<i.length;a++)r(i[a]);var f=p;t()})([]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 779 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 830 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 822 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 843 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Some files were not shown because too many files have changed in this diff Show More