作者 徐浩

20240118合并代码

@@ -554,8 +554,53 @@ const setUsermsg = function(data) { @@ -554,8 +554,53 @@ const setUsermsg = function(data) {
554 ) 554 )
555 } 555 }
556 556
  557 +const wx_uploadFile = function(tempFilePath) {
  558 + return new Promise((resolve, reject) => {
  559 + var jkurl='login/upload'
  560 + uni.uploadFile({
  561 + url: IPurl + jkurl,
  562 + filePath: tximg,
  563 + name: 'file',
  564 + header: header,
  565 + formData: {
  566 + token: uni.getStorageSync('token')
  567 + },
  568 + complete: (res) => {
  569 + uni.hideLoading();
  570 + uni.stopPullDownRefresh(); //慎用hideLoading,会关闭wx.showToast弹窗
  571 + // console.log(`耗时${Date.now() - timeStart}`);
  572 + if (res.statusCode == 200) { //请求成功
  573 + var ndata = JSON.parse(res.data)
  574 + if (ndata.code == -1) {
  575 + store.commit('logout')
  576 + uni.navigateTo({
  577 + url: '/pagesC_mxx/login/login'
  578 + })
  579 + return
  580 + } else if (ndata.code == 0) {
  581 + if (ndata.msg) {
  582 + uni.showToast({
  583 + icon: 'none',
  584 + title: ndata.msg
  585 + })
  586 + } else {
  587 +
  588 + uni.showToast({
  589 + icon: 'none',
  590 + title: '操作失败'
  591 + })
  592 + }
  593 + }
  594 + resolve(ndata)
  595 + } else {
  596 + reject(res);
  597 + }
  598 + }
  599 + });
  600 + })
  601 +}
557 602
558 -const wx_upload = function(tximg,type) { 603 +const wx_upload = function(tximg,type = 'img') {
559 return new Promise((resolve, reject) => { 604 return new Promise((resolve, reject) => {
560 uni.showLoading({ 605 uni.showLoading({
561 mask: true, 606 mask: true,
@@ -564,13 +609,14 @@ const wx_upload = function(tximg,type) { @@ -564,13 +609,14 @@ const wx_upload = function(tximg,type) {
564 // #ifndef H5 609 // #ifndef H5
565 console.log(tximg) 610 console.log(tximg)
566 var jkurl='login/upload' 611 var jkurl='login/upload'
567 - 612 + console.log('type', type)
568 uni.uploadFile({ 613 uni.uploadFile({
569 url: IPurl + jkurl, 614 url: IPurl + jkurl,
570 filePath: tximg, 615 filePath: tximg,
571 name: 'file', 616 name: 'file',
572 header: header, 617 header: header,
573 formData: { 618 formData: {
  619 + type,
574 token: uni.getStorageSync('token') 620 token: uni.getStorageSync('token')
575 }, 621 },
576 // success: (uploadFileRes) => { 622 // success: (uploadFileRes) => {
@@ -2018,6 +2064,7 @@ export default { @@ -2018,6 +2064,7 @@ export default {
2018 get_fwb, 2064 get_fwb,
2019 wx_upload, 2065 wx_upload,
2020 wxpay, 2066 wxpay,
  2067 + wx_uploadFile,
2021 baseurl, 2068 baseurl,
2022 2069
2023 emojiList, 2070 emojiList,
  1 +<template>
  2 + <view class="RecordingDevice">
  3 + <view class="RecordingDevice-2">
  4 + <VoicePlayback ref="voicePlayback"/>
  5 + </view>
  6 + <view class="RecordingDevice-1">
  7 + <view class="RecordingDevice-1-i">
  8 + <view class="RecordingDevice-1-i-taps" v-if="hours || minutes || seconds">
  9 + <image class="RecordingDevice-1-i-taps-bg" src="@/static/imagesV2/icon64.png" mode="widthFix"></image>
  10 +
  11 + <view class="RecordingDevice-1-i-taps-c">
  12 + <image class="RecordingDevice-1-i-taps-c-l" src="@/static/imagesV2/icon65.png" mode="widthFix"></image>
  13 +
  14 + <text class="RecordingDevice-1-i-taps-c-t">{{ formattedTime }}</text>
  15 + </view>
  16 + </view>
  17 + <view v-if="isTape === RECORDINGSTATUS.INPROGRESS" @click="pauseRecord">
  18 + <view class="RecordingDevice-1-i-1">
  19 + <image class="RecordingDevice-1-i-1-i" src="@/static/imagesV2/icon61.png" mode="widthFix"></image>
  20 + </view>
  21 + <view class="RecordingDevice-1-i-2">暂停</view>
  22 + </view>
  23 + <view v-else @click="start">
  24 + <view class="RecordingDevice-1-i-1">
  25 + <image class="RecordingDevice-1-i-1-i" src="@/static/imagesV2/icon66.png" mode="widthFix"></image>
  26 + </view>
  27 + <view class="RecordingDevice-1-i-2">开始</view>
  28 + </view>
  29 + </view>
  30 + <view class="RecordingDevice-1-i" @click="stopRecord">
  31 + <view class="RecordingDevice-1-i-1">
  32 + <image class="RecordingDevice-1-i-1-i" src="@/static/imagesV2/icon62.png" mode="widthFix"></image>
  33 + </view>
  34 + <view class="RecordingDevice-1-i-2">完成</view>
  35 + </view>
  36 + <view class="RecordingDevice-1-i" @click="reRecording">
  37 + <view class="RecordingDevice-1-i-1">
  38 + <image class="RecordingDevice-1-i-1-i" src="@/static/imagesV2/icon63.png" mode="widthFix"></image>
  39 + </view>
  40 + <view class="RecordingDevice-1-i-2">重录</view>
  41 + </view>
  42 + </view>
  43 + </view>
  44 +</template>
  45 +
  46 +<script>
  47 + import VoicePlayback from "@/components/VoicePlayback/index.vue"
  48 + /**
  49 + * 录制状态
  50 + */
  51 + const RECORDINGSTATUS = {
  52 + /**
  53 + * 未开始
  54 + * @value 1
  55 + */
  56 + 'NOTSTARTEDYET': 1,
  57 + /**
  58 + * 进行中
  59 + * @value 2
  60 + */
  61 + 'INPROGRESS': 2,
  62 + /**
  63 + * 暂停中
  64 + * @value 3
  65 + */
  66 + 'PAUSED': 3
  67 + }
  68 + export default {
  69 + name: 'RecordingDevice',
  70 + components: {
  71 + VoicePlayback
  72 + },
  73 + computed: {
  74 + formattedTime() {
  75 + const hours = this.padDigits(this.hours);
  76 + const minutes = this.padDigits(this.minutes);
  77 + const seconds = this.padDigits(this.seconds);
  78 + return `${hours}:${minutes}:${seconds}`;
  79 + }
  80 + },
  81 + data() {
  82 + return {
  83 + RECORDINGSTATUS,
  84 + // 是否正在录制
  85 + isTape: RECORDINGSTATUS.NOTSTARTEDYET,
  86 + recorder: null,
  87 + seconds: 0,
  88 + minutes: 0,
  89 + hours: 0,
  90 + timer: null,
  91 + }
  92 + },
  93 + mounted() {
  94 + this.recorder = uni.getRecorderManager();
  95 + this.recorder.onStop(res => {
  96 + if(this.isTape !== RECORDINGSTATUS.NOTSTARTEDYET) {
  97 + console.log('停止录制...');
  98 + console.log('录制文件路径:', res.tempFilePath);
  99 + this.uploadFiles(res.tempFilePath)
  100 + this.isTape = RECORDINGSTATUS.NOTSTARTEDYET;
  101 + }
  102 + });
  103 + this.recorder.onStart(() => {
  104 + this.isTape = RECORDINGSTATUS.INPROGRESS;
  105 + console.log('开始录制...');
  106 + });
  107 + this.recorder.stop();
  108 + },
  109 + beforeDestroy() {
  110 + this.stopTimer();
  111 + },
  112 + methods: {
  113 + padDigits(number) {
  114 + return (number < 10) ? '0' + number : number;
  115 + },
  116 + startTimer() {
  117 + this.timer = setInterval(() => {
  118 + this.seconds++;
  119 + if (this.seconds >= 60) {
  120 + this.seconds = 0;
  121 + this.minutes++;
  122 + if (this.minutes >= 60) {
  123 + this.minutes = 0;
  124 + this.hours++;
  125 + }
  126 + }
  127 + }, 1000);
  128 + },
  129 + resetTimer() {
  130 + clearInterval(this.timer);
  131 + this.timer = null;
  132 + this.seconds = 0
  133 + this.minutes = 0
  134 + this.hours = 0
  135 + },
  136 + stopTimer() {
  137 + clearInterval(this.timer);
  138 + this.timer = null;
  139 + },
  140 + formatTwoDigits(value) {
  141 + return value.toString().padStart(2, '0');
  142 + },
  143 + reRecording() {
  144 + this.isTape = RECORDINGSTATUS.NOTSTARTEDYET
  145 + this.recorder.stop();
  146 + this.resetTimer()
  147 + },
  148 + start() {
  149 + if(this.isTape === RECORDINGSTATUS.PAUSED) {
  150 + this.resumeRecord()
  151 + } else if(this.isTape === RECORDINGSTATUS.NOTSTARTEDYET){
  152 + this.startRecord()
  153 + this.resetTimer()
  154 + }
  155 + this.startTimer()
  156 + },
  157 + startRecord() {
  158 + this.recorder.start({
  159 + format: 'mp3',
  160 + });
  161 + },
  162 + pauseRecord() {
  163 + this.recorder.pause();
  164 + this.isTape = RECORDINGSTATUS.PAUSED;
  165 + this.stopTimer()
  166 + console.log('暂停录制...');
  167 + },
  168 + resumeRecord() {
  169 + this.recorder.resume();
  170 + this.paused = false;
  171 + this.isTape = RECORDINGSTATUS.INPROGRESS;
  172 + console.log('继续录制...');
  173 + },
  174 + stopRecord() {
  175 + if(this.isTape === RECORDINGSTATUS.NOTSTARTEDYET) {
  176 + uni.showToast({
  177 + icon: 'none',
  178 + title: '请录制音频'
  179 + })
  180 + return
  181 + }
  182 + this.resetTimer()
  183 + this.recorder.stop();
  184 + },
  185 + uploadFiles(tempFilePath) {
  186 + this.$service.wx_upload(tempFilePath, 'video').then(res => {
  187 + this.$refs.voicePlayback.setUrl(res.data)
  188 + })
  189 + }
  190 + }
  191 + }
  192 +</script>
  193 +
  194 +<style lang="scss" scoped>
  195 + .RecordingDevice{
  196 + .RecordingDevice-2{
  197 + background-color: #F5F6F8;
  198 + padding: 44rpx 43rpx;
  199 + border-radius: 20rpx;
  200 + }
  201 + .RecordingDevice-1{
  202 + display: flex;
  203 + justify-content: space-around;
  204 + padding-top: 120rpx;
  205 + .RecordingDevice-1-i{
  206 + text-align: center;
  207 + position: relative;
  208 + .RecordingDevice-1-i-taps{
  209 + position: absolute;
  210 + top: 0;
  211 + left: 50%;
  212 + transform: translate(-50%, -100%);
  213 + .RecordingDevice-1-i-taps-bg{
  214 + height: 68rpx;
  215 + width: 216rpx;
  216 + }
  217 + .RecordingDevice-1-i-taps-c{
  218 + position: absolute;
  219 + top: 0;
  220 + display: flex;
  221 + align-items: center;
  222 + height: 68rpx;
  223 + width: 216rpx;
  224 + padding-bottom: 12rpx;
  225 + justify-content: center;
  226 + .RecordingDevice-1-i-taps-c-l{
  227 + height: 36rpx;
  228 + width: 36rpx;
  229 + }
  230 + .RecordingDevice-1-i-taps-c-t{
  231 + font-size: 28rpx;
  232 + color: #646464;
  233 + margin-left: 13rpx;
  234 + }
  235 + }
  236 + }
  237 + .RecordingDevice-1-i-1{
  238 + .RecordingDevice-1-i-1-i{
  239 + height: 120rpx;
  240 + width: 120rpx;
  241 + }
  242 + }
  243 + .RecordingDevice-1-i-2{
  244 + font-size: 28rpx;
  245 + color: #323232;
  246 + margin-top: 10rpx;
  247 + }
  248 + }
  249 + }
  250 + }
  251 +</style>
1 <template> 1 <template>
2 <view class="VoicePlayback" @click="operation"> 2 <view class="VoicePlayback" @click="operation">
3 <view class="VoicePlayback-1"> 3 <view class="VoicePlayback-1">
4 - <image class="VoicePlayback-1-i" src="@/static/imagesV2/icon42.png" mode="widthFix"></image> 4 + <image class="VoicePlayback-1-i" v-if="isPlay" src="@/static/imagesV2/icon42s.png" mode="widthFix"></image>
  5 + <image class="VoicePlayback-1-i" v-else src="@/static/imagesV2/icon42.png" mode="widthFix"></image>
5 </view> 6 </view>
6 <view class="VoicePlayback-2">{{ convertTimeToHMS(remainingTime) }}</view> 7 <view class="VoicePlayback-2">{{ convertTimeToHMS(remainingTime) }}</view>
7 </view> 8 </view>
@@ -34,21 +35,23 @@ @@ -34,21 +35,23 @@
34 } else { 35 } else {
35 this.audioContext.pause() 36 this.audioContext.pause()
36 } 37 }
37 - console.log(this.duration) 38 + },
  39 + setUrl(url) {
  40 + this.audioContext.src = url
38 }, 41 },
39 init() { 42 init() {
40 this.audioContext = wx.createInnerAudioContext(); 43 this.audioContext = wx.createInnerAudioContext();
41 this.audioContext.src = require("@/static/imagesV2/test.mp3") 44 this.audioContext.src = require("@/static/imagesV2/test.mp3")
42 this.audioContext.onPlay(() => { 45 this.audioContext.onPlay(() => {
43 - console.log('音频开始播放', this.audioContext.duration);  
44 this.isPlay = true 46 this.isPlay = true
45 }); 47 });
46 this.audioContext.onPause(() => { 48 this.audioContext.onPause(() => {
47 - console.log('音频暂停播放');  
48 this.isPlay = false 49 this.isPlay = false
49 }); 50 });
  51 + this.audioContext.onEnded(() => {
  52 + this.audioContext.stop()
  53 + })
50 this.audioContext.onStop(() => { 54 this.audioContext.onStop(() => {
51 - console.log('音频停止播放');  
52 this.isPlay = false 55 this.isPlay = false
53 }); 56 });
54 this.audioContext.onCanplay(() => { 57 this.audioContext.onCanplay(() => {
@@ -60,11 +63,13 @@ @@ -60,11 +63,13 @@
60 }, 100) 63 }, 100)
61 }) 64 })
62 this.audioContext.onTimeUpdate(() => { 65 this.audioContext.onTimeUpdate(() => {
  66 + this.duration = this.audioContext.duration
63 this.currentTime = this.audioContext.currentTime 67 this.currentTime = this.audioContext.currentTime
64 this.remainingTime = this.duration - this.currentTime 68 this.remainingTime = this.duration - this.currentTime
65 }); 69 });
66 }, 70 },
67 convertTimeToHMS(time) { 71 convertTimeToHMS(time) {
  72 + console.log(time)
68 time = parseInt(time) 73 time = parseInt(time)
69 var hours = Math.floor(time / 3600); 74 var hours = Math.floor(time / 3600);
70 var minutes = Math.floor((time % 3600) / 60); 75 var minutes = Math.floor((time % 3600) / 60);
@@ -132,4 +132,34 @@ export const PAYMENTTYPE = { @@ -132,4 +132,34 @@ export const PAYMENTTYPE = {
132 * @value 2 132 * @value 2
133 */ 133 */
134 'ALIPAY': 2 134 'ALIPAY': 2
  135 +}
  136 +/**
  137 + * 解答类型
  138 + */
  139 +export const ANSWERTYPE = {
  140 + /**
  141 + * 待解答
  142 + * @value 1
  143 + */
  144 + 'TOBEANSWERED': 1,
  145 + /**
  146 + * 已解答
  147 + * @value 2
  148 + */
  149 + 'ANSWERED': 2
  150 +}
  151 +/**
  152 + * 回答类型
  153 + */
  154 +export const MESSAGETYPE = {
  155 + /**
  156 + * 文字解答
  157 + * @value 1
  158 + */
  159 + 'TEXTANSWER': 1,
  160 + /**
  161 + * 语音解答
  162 + * @value 2
  163 + */
  164 + 'VOICEANSWERS': 2
135 } 165 }
@@ -51,6 +51,11 @@ @@ -51,6 +51,11 @@
51 /* 小程序特有相关 */ 51 /* 小程序特有相关 */
52 "mp-weixin" : { 52 "mp-weixin" : {
53 "appid" : "wx5bbc433d447d1a86", 53 "appid" : "wx5bbc433d447d1a86",
  54 + "permissions": {
  55 + "scope.record": {
  56 + "desc": "用于录制音频"
  57 + }
  58 + },
54 "setting" : { 59 "setting" : {
55 "urlCheck" : false, 60 "urlCheck" : false,
56 "es6" : true 61 "es6" : true
  1 +<template>
  2 + <view class="evaluationRecords">
  3 + <view class="answer-item2">
  4 + <view class="answer-item2-star">
  5 + <u-rate :count="5" :readonly="true" :size="18" activeColor="#fc6402" v-model="value"></u-rate>
  6 + <view class="answer-item2-star-l">4.0</view>
  7 + </view>
  8 + <view class="myQuestion-2-i-1">
  9 + <view class="myQuestion-2-i-1-l">
  10 + <image class="myQuestion-2-i-1-l-i" src="@/static/images/tx.png" mode="widthFix"></image>
  11 + </view>
  12 + <view class="myQuestion-2-i-1-r">
  13 + <view class="myQuestion-2-i-1-r-1">李晋心</view>
  14 + <view class="myQuestion-2-i-1-r-2">2023-12-10发布</view>
  15 + </view>
  16 + </view>
  17 + <view class="myQuestion-2-i-2">
  18 + 老师你好请问工商管理专业的应届生可以报考工商管理
  19 + 内的二级专业吗?比如说会计学,旅游管理?
  20 + </view>
  21 + <view class="myQuestion-2-i-4">
  22 + <u--image
  23 + v-for="(item, index) in []"
  24 + :key="index"
  25 + radius="15rpx"
  26 + height="145rpx"
  27 + width="145rpx"
  28 + @click.native="seeImg(index)"
  29 + :src="item"></u--image>
  30 + </view>
  31 + </view>
  32 + </view>
  33 +</template>
  34 +
  35 +<script>
  36 + export default {
  37 + data() {
  38 + return {
  39 +
  40 + };
  41 + }
  42 + }
  43 +</script>
  44 +
  45 +<style lang="scss" scoped>
  46 +.evaluationRecords{
  47 + padding: 20rpx 25rpx;
  48 + .answer-item2{
  49 + padding: 30rpx;
  50 + background-color: #FFFFFF;
  51 + box-sizing: border-box;
  52 + border-radius: 20rpx;
  53 + position: relative;
  54 + margin-bottom: 20rpx;
  55 + .answer-item2-star{
  56 + position: absolute;
  57 + top: 43rpx;
  58 + right: 29rpx;
  59 + display: flex;
  60 + align-items: center;
  61 + .answer-item2-star-l{
  62 + font-size: 24rpx;
  63 + color: #323232;
  64 + }
  65 + }
  66 + .myQuestion-2-i-1{
  67 + display: flex;
  68 + align-items: center;
  69 + .myQuestion-2-i-1-l{
  70 + .myQuestion-2-i-1-l-i{
  71 + height: 60rpx;
  72 + width: 60rpx;
  73 + border-radius: 100%;
  74 + }
  75 + }
  76 + .myQuestion-2-i-1-r{
  77 + margin-left: 30rpx;
  78 + .myQuestion-2-i-1-r-1{
  79 + font-size: 26rpx;
  80 + color: #323232;
  81 + font-weight: bold;
  82 + }
  83 + .myQuestion-2-i-1-r-2{
  84 + font-size: 24rpx;
  85 + color: #979797;
  86 + margin-top: 5rpx;
  87 + }
  88 + }
  89 + }
  90 + .myQuestion-2-i-2{
  91 + line-height: 39rpx;
  92 + color: #323232;
  93 + font-size: 26rpx;
  94 + margin: 30rpx 0;
  95 + }
  96 + .myQuestion-2-i-4{
  97 + display: grid;
  98 + grid-template-columns: repeat(4, 1fr);
  99 + grid-row-gap: 20rpx;
  100 + grid-column-gap: 20rpx;
  101 + margin-top: 30rpx;
  102 + }
  103 + }
  104 +}
  105 +</style>
@@ -29,19 +29,19 @@ @@ -29,19 +29,19 @@
29 <view class="homePage-2-4-1-l-2">评价分</view> 29 <view class="homePage-2-4-1-l-2">评价分</view>
30 </view> 30 </view>
31 </view> 31 </view>
32 - <view class="homePage-2-4-2"> 32 + <view class="homePage-2-4-2" @click="toOnLine">
33 <image class="homePage-bg" src="@/static/imagesV2/icon56.png" mode="widthFix"></image> 33 <image class="homePage-bg" src="@/static/imagesV2/icon56.png" mode="widthFix"></image>
34 <view class="homePage-2-4-2-c"> 34 <view class="homePage-2-4-2-c">
35 在线答疑 35 在线答疑
36 </view> 36 </view>
37 </view> 37 </view>
38 - <view class="homePage-2-4-2"> 38 + <view class="homePage-2-4-2" @click="toEvaluationRecords">
39 <image class="homePage-bg" src="@/static/imagesV2/icon57.png" mode="widthFix"></image> 39 <image class="homePage-bg" src="@/static/imagesV2/icon57.png" mode="widthFix"></image>
40 <view class="homePage-2-4-2-c"> 40 <view class="homePage-2-4-2-c">
41 评价记录 41 评价记录
42 </view> 42 </view>
43 </view> 43 </view>
44 - <view class="homePage-2-4-2"> 44 + <view class="homePage-2-4-2" @click="toRateMe">
45 <image class="homePage-bg" src="@/static/imagesV2/icon58.png" mode="widthFix"></image> 45 <image class="homePage-bg" src="@/static/imagesV2/icon58.png" mode="widthFix"></image>
46 <view class="homePage-2-4-2-c"> 46 <view class="homePage-2-4-2-c">
47 教师评价 47 教师评价
@@ -60,11 +60,26 @@ @@ -60,11 +60,26 @@
60 } 60 }
61 }, 61 },
62 methods: { 62 methods: {
  63 + toRateMe() {
  64 + uni.navigateTo({
  65 + url: '/new_tec/rateMe/rateMe'
  66 + })
  67 + },
  68 + toOnLine() {
  69 + uni.navigateTo({
  70 + url: '/new_tec/onLine/onLine'
  71 + })
  72 + },
63 toEditInfo() { 73 toEditInfo() {
64 uni.navigateTo({ 74 uni.navigateTo({
65 url: '/new_tec/editInfo/editInfo' 75 url: '/new_tec/editInfo/editInfo'
66 }) 76 })
67 }, 77 },
  78 + toEvaluationRecords() {
  79 + uni.navigateTo({
  80 + url: '/new_tec/evaluationRecords/evaluationRecords'
  81 + })
  82 + },
68 toNewSetting() { 83 toNewSetting() {
69 uni.navigateTo({ 84 uni.navigateTo({
70 url: '/pagesB/newSetting/newSetting' 85 url: '/pagesB/newSetting/newSetting'
  1 +<template>
  2 + <view class="onLine">
  3 + <view class="onLine-1">
  4 + <view @click="selectItem(ANSWERTYPE.TOBEANSWERED)" :class="{'onLine-1-i': true, 'onLine-1-is': type === ANSWERTYPE.TOBEANSWERED}">待解答</view>
  5 + <view @click="selectItem(ANSWERTYPE.ANSWERED)" :class="{'onLine-1-i': true, 'onLine-1-is': type === ANSWERTYPE.ANSWERED}">已解答</view>
  6 + </view>
  7 + <view class="onLine-2">
  8 + <view class="onLine-2-i" @click="toDetails">
  9 + <view class="onLine-2-i-op">
  10 + <image class="onLine-2-i-op-i" src="@/static/imagesV2/icon41.png" mode="widthFix"></image>
  11 + <text class="onLine-2-i-op-t">解答</text>
  12 + </view>
  13 + <view class="onLine-2-i-1">
  14 + <image src="@/static/images/tx.png" class="onLine-2-i-1-1"></image>
  15 + <view class="onLine-2-i-1-r">
  16 + <view class="onLine-2-i-1-r-1">李晋心</view>
  17 + <view class="onLine-2-i-1-r-2">2023-12-10发布</view>
  18 + </view>
  19 + </view>
  20 + <view class="onLine-2-i-2">
  21 + 老师你好请问工商管理专业的应届生可以报考工商管理 内的二级专业吗?比如说会计学,旅游管理?
  22 + </view>
  23 + </view>
  24 + <u-empty
  25 + mode="data"
  26 + text="暂无数据"
  27 + icon="/static/imagesV2/icon24.png"
  28 + >
  29 + </u-empty>
  30 + </view>
  31 + </view>
  32 +</template>
  33 +
  34 +<script>
  35 + import { ANSWERTYPE } from "@/emit/index.js"
  36 + export default {
  37 + data() {
  38 + return {
  39 + ANSWERTYPE,
  40 + type: ANSWERTYPE.TOBEANSWERED
  41 + };
  42 + },
  43 + methods: {
  44 + toDetails() {
  45 + uni.navigateTo({
  46 + url: '/new_tec/onLineDetails/onLineDetails'
  47 + })
  48 + },
  49 + selectItem(type) {
  50 + this.type = type
  51 + }
  52 + }
  53 + }
  54 +</script>
  55 +
  56 +<style lang="scss" scoped>
  57 +.onLine{
  58 + .onLine-1{
  59 + border-top:1rpx solid #f3f4f6;
  60 + display: flex;
  61 + background: #fff;
  62 + justify-content: space-around;
  63 + position: fixed;
  64 + width: 100%;
  65 + top: 0;
  66 + left: 0;
  67 + .onLine-1-i{
  68 + font-size: 28rpx;
  69 + color: #323232;
  70 + height: 88rpx;
  71 + display: flex;
  72 + align-items: center;
  73 + justify-content: center;
  74 + }
  75 + .onLine-1-is{
  76 + color: #2D81FF;
  77 + position: relative;
  78 + &:before{
  79 + content: '';
  80 + position: absolute;
  81 + bottom: 0;
  82 + left: 50%;
  83 + background-image: url(@/static/imagesV2/icon23.png);
  84 + background-size: 100% 100%;
  85 + transform: translateX(-50%);
  86 + height: 24rpx;
  87 + width: 24rpx;
  88 + }
  89 + }
  90 + }
  91 + .onLine-2{
  92 + padding: 20rpx 25rpx;
  93 + padding-top: calc(88rpx + 20rpx);
  94 + padding-bottom: calc(25rpx + env(safe-area-inset-bottom));
  95 + .onLine-2-i{
  96 + background: #fff;
  97 + border-radius: 20rpx;
  98 + padding: 40rpx 30rpx;
  99 + position: relative;
  100 + margin-bottom: 20rpx;
  101 + .onLine-2-i-op{
  102 + position: absolute;
  103 + right: 30rpx;
  104 + top: 40rpx;
  105 + background-color: rgba(#2D81FF, .1);
  106 + height: 56rpx;
  107 + padding: 0 34rpx;
  108 + border-radius: 200rpx;
  109 + display: flex;
  110 + align-items: center;
  111 + justify-content: center;
  112 + line-height: 1.4;
  113 + color: #2D81FF;
  114 + .onLine-2-i-op-i{
  115 + height: 24rpx;
  116 + width: 24rpx;
  117 + }
  118 + .onLine-2-i-op-t{
  119 + font-size: 26rpx;
  120 + margin-left: 5rpx;
  121 + }
  122 + }
  123 + .onLine-2-i-1{
  124 + display: flex;
  125 + align-items: center;
  126 + .onLine-2-i-1-1{
  127 + height: 60rpx;
  128 + width: 60rpx;
  129 + }
  130 + .onLine-2-i-1-r{
  131 + margin-left: 30rpx;
  132 + .onLine-2-i-1-r-1{
  133 + font-size: 26rpx;
  134 + color: #323232;
  135 + }
  136 + .onLine-2-i-1-r-2{
  137 + font-size: 24rpx;
  138 + color: #979797;
  139 + margin-top: 5rpx;
  140 + }
  141 + }
  142 + }
  143 + .onLine-2-i-2{
  144 + font-size: 26rpx;
  145 + line-height: 39rpx;
  146 + margin-top: 30rpx;
  147 + }
  148 + }
  149 + }
  150 +}
  151 +</style>
  1 +<template>
  2 + <view class="onLineDetails">
  3 + <view class="answer-item2">
  4 + <view class="answer-item2-star">
  5 + <u-rate :count="5" :readonly="true" :size="18" activeColor="#fc6402" v-model="value"></u-rate>
  6 + <view class="answer-item2-star-l">4.0</view>
  7 + </view>
  8 + <view class="myQuestion-2-i-1">
  9 + <view class="myQuestion-2-i-1-l">
  10 + <image class="myQuestion-2-i-1-l-i" src="@/static/images/tx.png" mode="widthFix"></image>
  11 + </view>
  12 + <view class="myQuestion-2-i-1-r">
  13 + <view class="myQuestion-2-i-1-r-1">李晋心</view>
  14 + <view class="myQuestion-2-i-1-r-2">2023-12-10发布</view>
  15 + </view>
  16 + </view>
  17 + <view class="myQuestion-2-i-2">
  18 + 老师你好请问工商管理专业的应届生可以报考工商管理
  19 + 内的二级专业吗?比如说会计学,旅游管理?
  20 + </view>
  21 + <view class="myQuestion-2-i-4">
  22 + <u--image
  23 + v-for="(item, index) in []"
  24 + :key="index"
  25 + radius="15rpx"
  26 + height="145rpx"
  27 + width="145rpx"
  28 + @click.native="seeImg(index)"
  29 + :src="item"></u--image>
  30 + </view>
  31 + <view class="myQuestion-2-i-3">
  32 + <view class="myQuestion-2-i-3-c">
  33 + <view class="myQuestion-2-i-3-c-1">
  34 + <view class="myQuestion-2-i-3-c-1-l">
  35 + <image class="myQuestion-2-i-3-c-1-l-i" src="@/static/images/tx.png" mode="widthFix"></image>
  36 + <text class="myQuestion-2-i-3-c-1-l-t">程菲老师回复</text>
  37 + </view>
  38 + <view class="myQuestion-2-i-3-c-1-r">2023-12-10</view>
  39 + </view>
  40 + <view class="myQuestion-2-i-3-c-2">
  41 + 同学你好,这个问题问的好,你说的这些都是不可以报的!
  42 + </view>
  43 + <view style="margin-top: 28rpx;">
  44 + <VoicePlayback />
  45 + </view>
  46 + </view>
  47 + </view>
  48 + </view>
  49 + <view class="onLineDetails-1">
  50 + <view class="onLineDetails-1-1">
  51 + <view class="onLineDetails-1-1-l">解答</view>
  52 + <view class="onLineDetails-1-1-r">
  53 + <text class="onLineDetails-1-1-r-t" @click="switchItem(MESSAGETYPE.VOICEANSWERS)" v-if="answerType === MESSAGETYPE.TEXTANSWER">文字解答</text>
  54 + <text class="onLineDetails-1-1-r-t" @click="switchItem(MESSAGETYPE.TEXTANSWER)" v-if="answerType === MESSAGETYPE.VOICEANSWERS">语音解答</text>
  55 + <image class="onLineDetails-1-1-r-i" src="@/static/imagesV2/icon59.png" mode="widthFix"></image>
  56 + </view>
  57 + </view>
  58 + <view class="onLineDetails-1-2" v-if="answerType === MESSAGETYPE.TEXTANSWER">
  59 + <textarea class="onLineDetails-1-2-c" placeholder="请输入" v-model="content_one"></textarea>
  60 + </view>
  61 + <view v-else>
  62 + <RecordingDevice />
  63 + </view>
  64 + </view>
  65 + </view>
  66 +</template>
  67 +
  68 +<script>
  69 + import { MESSAGETYPE } from "@/emit/index.js"
  70 + import RecordingDevice from "@/components/RecordingDevice/index.vue"
  71 + import VoicePlayback from "@/components/VoicePlayback/index.vue"
  72 + export default {
  73 + components: {
  74 + RecordingDevice,
  75 + VoicePlayback
  76 + },
  77 + data() {
  78 + return {
  79 + MESSAGETYPE,
  80 + answerType: MESSAGETYPE.VOICEANSWERS,
  81 + value: 5
  82 + };
  83 + },
  84 + onHide() {
  85 +
  86 + },
  87 + methods: {
  88 + switchItem(type) {
  89 + this.answerType = type
  90 + }
  91 + }
  92 + }
  93 +</script>
  94 +
  95 +<style lang="scss" scoped>
  96 +.onLineDetails{
  97 + padding: 20rpx 25rpx;
  98 + .answer-item2{
  99 + padding: 30rpx;
  100 + background-color: #FFFFFF;
  101 + box-sizing: border-box;
  102 + border-radius: 20rpx;
  103 + position: relative;
  104 + .answer-item2-star{
  105 + position: absolute;
  106 + top: 43rpx;
  107 + right: 29rpx;
  108 + display: flex;
  109 + align-items: center;
  110 + .answer-item2-star-l{
  111 + font-size: 24rpx;
  112 + color: #323232;
  113 + }
  114 + }
  115 + .myQuestion-2-i-1{
  116 + display: flex;
  117 + align-items: center;
  118 + .myQuestion-2-i-1-l{
  119 + .myQuestion-2-i-1-l-i{
  120 + height: 60rpx;
  121 + width: 60rpx;
  122 + border-radius: 100%;
  123 + }
  124 + }
  125 + .myQuestion-2-i-1-r{
  126 + margin-left: 30rpx;
  127 + .myQuestion-2-i-1-r-1{
  128 + font-size: 26rpx;
  129 + color: #323232;
  130 + font-weight: bold;
  131 + }
  132 + .myQuestion-2-i-1-r-2{
  133 + font-size: 24rpx;
  134 + color: #979797;
  135 + margin-top: 5rpx;
  136 + }
  137 + }
  138 + }
  139 + .myQuestion-2-i-2{
  140 + line-height: 39rpx;
  141 + color: #323232;
  142 + font-size: 26rpx;
  143 + margin: 30rpx 0;
  144 + }
  145 + .myQuestion-2-i-3{
  146 + padding-top: 33rpx;
  147 + margin-top: 20rpx;
  148 + border-top: 1rpx solid #F3F3F7;
  149 + .myQuestion-2-i-3-c{
  150 + border-radius: 20rpx;
  151 + background: #F5F6F8;
  152 + padding: 30rpx;
  153 + .myQuestion-2-i-3-c-1{
  154 + display: flex;
  155 + justify-content: space-between;
  156 + align-items: center;
  157 + .myQuestion-2-i-3-c-1-l{
  158 + display: flex;
  159 + align-items: center;
  160 + .myQuestion-2-i-3-c-1-l-i{
  161 + height: 48rpx;
  162 + width: 48rpx;
  163 + border-radius: 200rpx;
  164 + }
  165 + .myQuestion-2-i-3-c-1-l-t{
  166 + font-size: 26rpx;
  167 + margin-left: 19rpx;
  168 + color: #323232;
  169 + }
  170 + }
  171 + .myQuestion-2-i-3-c-1-r{
  172 + font-size: 24rpx;
  173 + color: #979797;
  174 + }
  175 + }
  176 + .myQuestion-2-i-3-c-2{
  177 + line-height: 39rpx;
  178 + font-size: 26rpx;
  179 + color: #323232;
  180 + margin-top: 28rpx;
  181 + }
  182 + }
  183 + }
  184 + .myQuestion-2-i-4{
  185 + display: grid;
  186 + grid-template-columns: repeat(4, 1fr);
  187 + grid-row-gap: 20rpx;
  188 + grid-column-gap: 20rpx;
  189 + margin-top: 30rpx;
  190 + }
  191 + }
  192 + .onLineDetails-1{
  193 + background: #FFFFFF;
  194 + border-radius: 20rpx;
  195 + margin-top: 18rpx;
  196 + padding: 0 30rpx;
  197 + padding-bottom: 40rpx;
  198 + .onLineDetails-1-1{
  199 + height: 130rpx;
  200 + display: flex;
  201 + align-items: center;
  202 + justify-content: space-between;
  203 + .onLineDetails-1-1-l{
  204 + font-size: 30rpx;
  205 + color: #000000;
  206 + position: relative;
  207 + padding-left: 35rpx;
  208 + &:before{
  209 + content: '';
  210 + width: 8rpx;
  211 + height: 25rpx;
  212 + background-color: #2D81FF;
  213 + border-radius: 20rpx;
  214 + position: absolute;
  215 + top: 50%;
  216 + left: 0;
  217 + transform: translateY(-50%);
  218 + }
  219 + }
  220 + .onLineDetails-1-1-r{
  221 + display: flex;
  222 + align-items: center;
  223 + .onLineDetails-1-1-r-t{
  224 + font-size: 28rpx;
  225 + color: #646464;
  226 + }
  227 + .onLineDetails-1-1-r-i{
  228 + height: 30rpx;
  229 + width: 30rpx;
  230 + margin-left: 10rpx;
  231 + }
  232 + }
  233 + }
  234 + .onLineDetails-1-2{
  235 + background-color: #F5F6F8;
  236 + padding: 30rpx 40rpx;
  237 + border-radius: 20rpx;
  238 + .onLineDetails-1-2-c{
  239 + font-size: 28rpx;
  240 + }
  241 + }
  242 + }
  243 +}
  244 +</style>
  1 +<template>
  2 + <view class="rateMe">
  3 + <view class="rateMe-1">
  4 + <image class="rateMe-1-bg" src="@/static/imagesV2/icon67.png" mode="widthFix"></image>
  5 + <view class="rateMe-1-c">
  6 + <view class="rateMe-1-c-i">
  7 + <view class="rateMe-1-c-i-1">6.6</view>
  8 + <view class="rateMe-1-c-i-2">总评分(分)</view>
  9 + </view>
  10 + <view class="rateMe-1-c-i">
  11 + <view class="rateMe-1-c-i-1">13</view>
  12 + <view class="rateMe-1-c-i-2">评价人数(人)</view>
  13 + </view>
  14 + </view>
  15 + </view>
  16 + <view class="rateMe-2">
  17 + <view class="rateMe-2-1">
  18 + <view class="rateMe-2-1-l">评分</view>
  19 + <view class="rateMe-2-1-c">
  20 + <u-rate :count="10" v-model="value"></u-rate>
  21 + </view>
  22 + <view class="rateMe-2-1-r">一般</view>
  23 + </view>
  24 + <view class="rateMe-2-2">
  25 + <text style="color: #979797;">其它评价及建议:</text>
  26 + <text>张东老师教学水平高,桃李满天 下,学识渊博,深受学生敬仰。</text>
  27 + </view>
  28 + </view>
  29 + </view>
  30 +</template>
  31 +
  32 +<script>
  33 + export default {
  34 + data() {
  35 + return {
  36 + value: 10
  37 + }
  38 + },
  39 + methods: {
  40 +
  41 + }
  42 + }
  43 +</script>
  44 +
  45 +<style lang="scss" scoped>
  46 +.rateMe{
  47 + padding: 20rpx 25rpx;
  48 + .rateMe-1{
  49 + position: relative;
  50 + .rateMe-1-bg{
  51 + height: 200rpx;
  52 + width: 100%;
  53 + }
  54 + .rateMe-1-c{
  55 + position: absolute;
  56 + height: 200rpx;
  57 + width: 100%;
  58 + display: flex;
  59 + top: 0;
  60 + left: 0;
  61 + .rateMe-1-c-i{
  62 + width: 50%;
  63 + color: #fff;
  64 + display: flex;
  65 + flex-direction: column;
  66 + align-items: center;
  67 + justify-content: center;
  68 + position: relative;
  69 + &:first-child{
  70 + &:before{
  71 + content: '';
  72 + position: absolute;
  73 + height: 50rpx;
  74 + border-left: rgba(#F2F2F2, .2) solid 1rpx;
  75 + top: 50%;
  76 + right: 0;
  77 + transform: translateY(-50%);
  78 + }
  79 + }
  80 + .rateMe-1-c-i-1{
  81 + font-size: 38rpx;
  82 + font-weight: bold;
  83 + }
  84 + }
  85 + }
  86 + }
  87 + .rateMe-2{
  88 + padding: 40rpx 30rpx;
  89 + background: #fff;
  90 + border-radius: 20rpx;
  91 + margin-top: 20rpx;
  92 + .rateMe-2-1{
  93 + display: flex;
  94 + align-items: center;
  95 + .rateMe-2-1-l{
  96 + font-size: 24rpx;
  97 + color: #323232;
  98 + }
  99 + .rateMe-2-1-c{
  100 + margin: 0 40rpx;
  101 + }
  102 + .rateMe-2-1-r{
  103 + font-size: 24rpx;
  104 + color: #FC5101;
  105 + }
  106 + }
  107 + .rateMe-2-2{
  108 + margin-top: 20rpx;
  109 + padding: 40rpx 30rpx;
  110 + background: #F5F6F8;
  111 + margin-top: 30rpx;
  112 + font-size: 26rpx;
  113 + }
  114 + }
  115 +}
  116 +</style>
@@ -816,6 +816,42 @@ @@ -816,6 +816,42 @@
816 } 816 }
817 817
818 } 818 }
  819 + ,{
  820 + "path" : "onLine/onLine",
  821 + "style" :
  822 + {
  823 + "navigationBarTitleText": "在线答疑",
  824 + "enablePullDownRefresh": false
  825 + }
  826 +
  827 + }
  828 + ,{
  829 + "path" : "onLineDetails/onLineDetails",
  830 + "style" :
  831 + {
  832 + "navigationBarTitleText": "解答问题",
  833 + "enablePullDownRefresh": false
  834 + }
  835 +
  836 + }
  837 + ,{
  838 + "path" : "evaluationRecords/evaluationRecords",
  839 + "style" :
  840 + {
  841 + "navigationBarTitleText": "评价记录",
  842 + "enablePullDownRefresh": false
  843 + }
  844 +
  845 + }
  846 + ,{
  847 + "path" : "rateMe/rateMe",
  848 + "style" :
  849 + {
  850 + "navigationBarTitleText": "学员对我评分",
  851 + "enablePullDownRefresh": false
  852 + }
  853 +
  854 + }
819 ] 855 ]
820 } 856 }
821 ] 857 ]
@@ -37,10 +37,10 @@ @@ -37,10 +37,10 @@
37 }) 37 })
38 }else{ 38 }else{
39 var identity=uni.getStorageSync('identity') 39 var identity=uni.getStorageSync('identity')
40 - // uni.reLaunch({  
41 - // url:'/new_tec/homePage/homePage'  
42 - // })  
43 - // return 40 + uni.reLaunch({
  41 + url:'/new_tec/homePage/homePage'
  42 + })
  43 + return
44 if(identity==2){ 44 if(identity==2){
45 uni.reLaunch({ 45 uni.reLaunch({
46 url:'/pages/tch_index/tch_index' 46 url:'/pages/tch_index/tch_index'
@@ -143,6 +143,12 @@ @@ -143,6 +143,12 @@
143 url: '/pagesStu/answerForm/answerForm' 143 url: '/pagesStu/answerForm/answerForm'
144 }) 144 })
145 }, 145 },
  146 + seeImg(index) {
  147 + uni.previewImage({
  148 + current: index, // 当前显示图片的链接,不填则默认为 urls 的第一张图片
  149 + urls: this.info.imgs // 需要预览的图片链接列表
  150 + })
  151 + },
146 toMyQuestion() { 152 toMyQuestion() {
147 uni.navigateTo({ 153 uni.navigateTo({
148 url: '/pagesStu/myQuestion/myQuestion' 154 url: '/pagesStu/myQuestion/myQuestion'
@@ -65,7 +65,7 @@ @@ -65,7 +65,7 @@
65 </template> 65 </template>
66 66
67 <script> 67 <script>
68 - import VoicePlayback from "./components/VoicePlayback/index.vue" 68 + import VoicePlayback from "@/components/VoicePlayback/index.vue"
69 export default { 69 export default {
70 components: { 70 components: {
71 VoicePlayback 71 VoicePlayback
@@ -60,12 +60,12 @@ @@ -60,12 +60,12 @@
60 this.type = type 60 this.type = type
61 }, 61 },
62 toBigShotsDetails() { 62 toBigShotsDetails() {
63 - // uni.navigateTo({  
64 - // url: '/pagesStu/bigShotsDetails/bigShotsDetails'  
65 - // })  
66 uni.navigateTo({ 63 uni.navigateTo({
67 - url: '/pagesStu/audioFrequency/audioFrequency' 64 + url: '/pagesStu/bigShotsDetails/bigShotsDetails'
68 }) 65 })
  66 + // uni.navigateTo({
  67 + // url: '/pagesStu/audioFrequency/audioFrequency'
  68 + // })
69 } 69 }
70 } 70 }
71 } 71 }