|
@@ -19,7 +19,7 @@
|
|
|
</Option>
|
|
|
</Select>
|
|
|
<!-- 特殊选择 -->
|
|
|
- <Select v-model="curNoSubmit" style="width:150px;margin-left: 15px;" @on-change="doFilter" placeholder="选择更多条件" clearable>
|
|
|
+ <Select v-model="curNoSubmit" style="width:150px;margin-left: 15px;" @on-change="doFilter" :placeholder="$t('assessment.moreCond')" clearable>
|
|
|
<Option v-for="(item,index) in noSubmitList" :value="index" :key="index">
|
|
|
{{ item }}
|
|
|
</Option>
|
|
@@ -28,45 +28,45 @@
|
|
|
<Input v-special-char v-model="searchVal" search :placeholder="$t('ability.place1')" style="width: 150px;margin-left: 15px;" @on-search="doFilter" @on-enter="doFilter" />
|
|
|
<!-- 人数统计 -->
|
|
|
<span style="margin-left: 10px;">
|
|
|
- 共
|
|
|
+ {{ $t('assessment.unit1') }}
|
|
|
<span style="font-weight: bolder;color: #006EE6;font-size:18px">{{ assessmentList.length }}</span>
|
|
|
- 人 优秀:
|
|
|
+ {{ $t('assessment.unit2') }} {{ $t('assessment.good') }}:
|
|
|
<span style="font-weight: bolder;color: #27b686;font-size:18px">{{ countArr[0] }}</span>
|
|
|
- 人({{ rateArr[0] }}) 合格:
|
|
|
+ {{ $t('assessment.unit2') }}({{ rateArr[0] }}) {{ $t('assessment.normal') }}:
|
|
|
<span style="font-weight: bolder;color: #e6a714;font-size:18px">{{ countArr[1] }}</span>
|
|
|
- 人({{ rateArr[1] }}) 不合格:
|
|
|
+ {{ $t('assessment.unit2') }}({{ rateArr[1] }}) {{ $t('assessment.bad') }}:
|
|
|
<span style="font-weight: bolder;color: #e61b1b;font-size:18px">{{ countArr[2] }}</span>
|
|
|
- 人({{ rateArr[2] }}) 未进行:
|
|
|
+ {{ $t('assessment.unit2') }}({{ rateArr[2] }}) {{ $t('assessment.noStart') }}:
|
|
|
<span style="font-weight: bolder;color: #787272;font-size:18px">{{ countArr[3] }}</span>
|
|
|
- 人({{ rateArr[3] }})
|
|
|
+ {{ $t('assessment.unit2') }}({{ rateArr[3] }})
|
|
|
</span>
|
|
|
</div>
|
|
|
<div class="assessment-header-right">
|
|
|
<span class="tool-item" @click="onExportTable">
|
|
|
<Icon type="md-download"></Icon>
|
|
|
- <span>导出</span>
|
|
|
+ <span>{{ $t('assessment.export') }}</span>
|
|
|
</span>
|
|
|
<span class="tool-item">
|
|
|
<i-switch size="large" @on-change="onExpandAllChange">
|
|
|
- <span slot="open">收起</span>
|
|
|
- <span slot="close">展开</span>
|
|
|
+ <span slot="open">{{ $t('assessment.close') }}</span>
|
|
|
+ <span slot="close">{{ $t('assessment.open') }}</span>
|
|
|
</i-switch>
|
|
|
</span>
|
|
|
<span class="tool-item">
|
|
|
- <span>互评</span>
|
|
|
+ <span>{{ $t('assessment.otherAppraise') }}</span>
|
|
|
<i-switch v-model="isOpenAppraise" size="large" @on-change="onSwitchChange" :before-change="beforeHpAppraiseChange">
|
|
|
- <span slot="open">开启</span>
|
|
|
- <span slot="close">关闭</span>
|
|
|
+ <span slot="open">{{ $t('assessment.on') }}</span>
|
|
|
+ <span slot="close">{{ $t('assessment.off') }}</span>
|
|
|
</i-switch>
|
|
|
</span>
|
|
|
<span class="tool-item" @click="doUploadProvince" v-if="hasAreaAccess">
|
|
|
- <Icon type="ios-paper-plane" size="18" /> {{ `推送省平台` }}
|
|
|
+ <Icon type="ios-paper-plane" size="18" /> {{ $t('assessment.toProvince') }}
|
|
|
</span>
|
|
|
</div>
|
|
|
</div>
|
|
|
<!-- 研修表格清单部分 -->
|
|
|
<div class="assessment-table-box">
|
|
|
- <Table :columns="assessmentCol" :data="assessmentList" stripe border ellipsis :loading="tableLoading" ref="table" :max-height="tableHeight" no-data-text="当前条件下未匹配到教师数据" @on-row-click="onRowClick">
|
|
|
+ <Table :columns="assessmentCol" :data="assessmentList" stripe border ellipsis :loading="tableLoading" ref="table" :max-height="tableHeight" :no-data-text="$t('assessment.noData')" @on-row-click="onRowClick">
|
|
|
<!-- 个人信息列 -->
|
|
|
<template slot-scope="{ row,index }" slot="userInfo">
|
|
|
<div class="user-info">
|
|
@@ -78,7 +78,7 @@
|
|
|
<p class="user-info-top-group">
|
|
|
<Tag color="geekblue" v-if="row.userInfo.groupName">{{ row.userInfo.groupName }}
|
|
|
</Tag>
|
|
|
- <Tag color="orange" v-else>未分组</Tag>
|
|
|
+ <Tag color="orange" v-else>{{ $t('assessment.noGroup') }}</Tag>
|
|
|
</p>
|
|
|
</div>
|
|
|
</div>
|
|
@@ -86,19 +86,19 @@
|
|
|
<p class="user-hours">
|
|
|
<span>
|
|
|
<Icon :type="row.hourStatus.train ? 'ios-checkmark-circle' : 'ios-close-circle'" :color="row.hourStatus.train ? '#29be84' : '#f35050'" size="16" />
|
|
|
- 校本研修:{{ row.hoursArr[0] }} / {{ settingHours.offlineTime }}
|
|
|
+ {{ $t('assessment.offline') }}:{{ row.hoursArr[0] }} / {{ settingHours.offlineTime }}
|
|
|
</span>
|
|
|
<span>
|
|
|
<Icon :type="row.hourStatus.online ? 'ios-checkmark-circle' : 'ios-close-circle'" :color="row.hourStatus.online ? '#29be84' : '#f35050'" size="16" />
|
|
|
- 线上研修:{{ row.hoursArr[1] }} / {{ settingHours.onlineTime }}
|
|
|
+ {{ $t('assessment.online') }}:{{ row.hoursArr[1] }} / {{ settingHours.onlineTime }}
|
|
|
</span>
|
|
|
<span>
|
|
|
<Icon :type="row.hourStatus.ability ? 'ios-checkmark-circle' : 'ios-close-circle'" :color="row.hourStatus.ability ? '#29be84' : '#f35050'" size="16" />
|
|
|
- 认证材料:{{ row.hoursArr[2] }} / {{ settingHours.submitTime }}
|
|
|
+ {{ $t('assessment.ability') }}:{{ row.hoursArr[2] }} / {{ settingHours.submitTime }}
|
|
|
</span>
|
|
|
<span>
|
|
|
<Icon :type="row.hourStatus.video ? 'ios-checkmark-circle' : 'ios-close-circle'" :color="row.hourStatus.video ? '#29be84' : '#f35050'" size="16" />
|
|
|
- 课堂实录:{{ row.hoursArr[3] }} / {{ settingHours.classTime }}
|
|
|
+ {{ $t('assessment.video') }}:{{ row.hoursArr[3] }} / {{ settingHours.classTime }}
|
|
|
</span>
|
|
|
</p>
|
|
|
</div>
|
|
@@ -106,16 +106,16 @@
|
|
|
<div class="total-time">
|
|
|
<span style="margin-right: 5px;">
|
|
|
<!-- <img src="@/assets/image/icon_total.png" width="20"> -->
|
|
|
- 共
|
|
|
+ {{ $t('assessment.unit1') }}
|
|
|
</span>
|
|
|
<span :class="['total-hour', isAllTimePass(row) ? 'color-suc' : 'color-fail']">{{ _.sum(row.hoursArr) }}</span>
|
|
|
<span>/ {{ settingHours.allTime }}</span>
|
|
|
- <span style="margin-left: 10px;">学时</span>
|
|
|
+ <span style="margin-left: 10px;">{{ $t('assessment.hour') }}</span>
|
|
|
</div>
|
|
|
<div>
|
|
|
<RadioGroup v-model="row.finalScore" type="button" size="small" button-style="solid" @on-change="onFinalScoreChange(row)" @click.stop.native v-if="row.finalScore > 0 && expandedArr.includes(index)">
|
|
|
- <Radio :label="2">优秀</Radio>
|
|
|
- <Radio :label="1">合格</Radio>
|
|
|
+ <Radio :label="2">{{ $t('assessment.good') }}</Radio>
|
|
|
+ <Radio :label="1">{{ $t('assessment.normal') }}</Radio>
|
|
|
</RadioGroup>
|
|
|
</div>
|
|
|
</div>
|
|
@@ -128,19 +128,19 @@
|
|
|
<span>
|
|
|
<span :class="['total-hour', row.hoursArr[1] >= settingHours.onlineTime ? 'color-suc' : 'color-fail']">{{ row.hoursArr[1] }}</span>
|
|
|
<span style="margin: 0 5px;">/ {{ settingHours.onlineTime }}</span>
|
|
|
- <span>学时</span>
|
|
|
+ <span>{{ $t('assessment.hour') }}</span>
|
|
|
</span>
|
|
|
<!-- <Icon :type="expandedArr.includes(index) ? 'ios-arrow-up' : 'ios-arrow-down'" style="cursor: pointer;" size="20" color="#a7a7a7" @click="onExpandChange(index)"/> -->
|
|
|
</div>
|
|
|
<div class="analysis-details" v-show="expandedArr.includes(index)">
|
|
|
<div v-if="row.abilities.length === 0" class="no-train">
|
|
|
<img src="../../assets/image/no_data.png" width="80">
|
|
|
- <span>暂无线上研修记录</span>
|
|
|
+ <span>{{ $t('assessment.noOnline') }}</span>
|
|
|
</div>
|
|
|
<div class="abilities-item" v-for="(item,index) in row.abilities" :key="index" @click.stop.prevent="() => {}">
|
|
|
<span class="overflow-text" :title="item.name">{{ item.no }}{{ item.name }}</span>
|
|
|
<span style="margin-left: 5px;"><span :class="item.videoTime >= getLimitMinutes(item) ? 'color-suc' : 'color-fail'" style="font-weight: bold;font-size: 16px;">{{ Math.min(item.videoTime,getLimitMinutes(item)) }}</span>
|
|
|
- / {{ getLimitMinutes(item) }} 分钟</span>
|
|
|
+ / {{ getLimitMinutes(item) }} {{ $t('assessment.minute') }}</span>
|
|
|
</div>
|
|
|
</div>
|
|
|
</template>
|
|
@@ -150,37 +150,37 @@
|
|
|
<span>
|
|
|
<span :class="['total-hour', row.hoursArr[2] >= settingHours.submitTime ? 'color-suc' : 'color-fail']">{{ row.hoursArr[2] }}</span>
|
|
|
<span style="margin: 0 5px;">/ {{ settingHours.submitTime }}</span>
|
|
|
- <span>学时</span>
|
|
|
+ <span>{{ $t('assessment.hour') }}</span>
|
|
|
</span>
|
|
|
- <span>未提交数:<span class="count-num">{{ row.abilities.filter(i => i.zpscore === -1).length }}</span></span>
|
|
|
+ <span>{{ $t('assessment.noSubmitNum') }}:<span class="count-num">{{ row.abilities.filter(i => i.zpscore === -1).length }}</span></span>
|
|
|
<!-- <Icon :type="expandedArr.includes(index) ? 'ios-arrow-up' : 'ios-arrow-down'" style="cursor: pointer;" size="20" color="#a7a7a7" @click="onExpandChange(index)"/> -->
|
|
|
</div>
|
|
|
<div class="analysis-details" v-show="expandedArr.includes(index)">
|
|
|
<div v-if="row.abilities.length === 0" class="no-train">
|
|
|
<img src="../../assets/image/no_data.png" width="80">
|
|
|
- <span>暂无认证材料记录</span>
|
|
|
+ <span>{{ $t('assessment.noAbility') }}</span>
|
|
|
</div>
|
|
|
<div class="abilities-item" v-for="(item,index) in row.abilities" :key="index">
|
|
|
<span>
|
|
|
<Tag color="#848c94" class="appraise-tag">
|
|
|
- <span class="appraise-tag-left">自评</span>
|
|
|
+ <span class="appraise-tag-left">{{ $t('assessment.selfAppraise') }}</span>
|
|
|
<span :class="['appraise-tag-right',colorMap[item.zpscore + 1]]">{{ resultMap[item.zpscore + 1] }}</span>
|
|
|
</Tag>
|
|
|
<Tag color="#848c94" class="appraise-tag" @click.native="doShowComments(item.id,row.userInfo)">
|
|
|
- <span class="appraise-tag-left">互评</span>
|
|
|
+ <span class="appraise-tag-left">{{ $t('assessment.otherAppraise') }}</span>
|
|
|
<span :class="['appraise-tag-right',colorMap[item.hpscore + 1]]">{{ resultMap[item.hpscore + 1] }}</span>
|
|
|
</Tag>
|
|
|
<Tag color="#848c94" class="appraise-tag" @click.native="doShowComments(item.id,row.userInfo)" :title="item.xzscore > -1 ? `最后评价人:${ item.xztmdname }\n最后评价时间:${ $tools.formatTime(item.xztime,'yyyy-MM-dd hh:mm') }` : '暂无校评数据'">
|
|
|
- <span class="appraise-tag-left">校评</span>
|
|
|
+ <span class="appraise-tag-left">{{ $t('assessment.schoolAppraise') }}</span>
|
|
|
<span :class="['appraise-tag-right',colorMap[item.xzscore + 1]]">{{ resultMap[item.xzscore + 1] }}</span>
|
|
|
</Tag>
|
|
|
- <span class="detate-other" :title="'已评论' + item.debateOrther + '人'" @click.stop="doShowMyComments(item.replyIds)">
|
|
|
+ <span class="detate-other" :title="$t('assessment.comment') + item.debateOrther + $t('assessment.unit2')" @click.stop="doShowMyComments(item.replyIds)">
|
|
|
<Icon type="ios-text" size="24" color="#47afff" />
|
|
|
<span>{{ item.debateOrther > 0 ? item.debateOrther : 0 }}</span>
|
|
|
</span>
|
|
|
</span>
|
|
|
<span>
|
|
|
- <Button type="info" size="small" :title="item.zpscore < 0 ? '教师未提交认证材料,无法评审' : '前往评审教师提交的认证材料'" :disabled="item.zpscore < 0" @click.stop="doReviewAbility(item,row)">去评审</Button>
|
|
|
+ <Button type="info" size="small" :title="item.zpscore < 0 ? $t('assessment.tip1') : $t('assessment.tip2')" :disabled="item.zpscore < 0" @click.stop="doReviewAbility(item,row)">{{ $t('assessment.goAppraise') }}</Button>
|
|
|
</span>
|
|
|
</div>
|
|
|
</div>
|
|
@@ -191,26 +191,26 @@
|
|
|
<span>
|
|
|
<span :class="['total-hour', row.hoursArr[0] >= settingHours.offlineTime ? 'color-suc' : 'color-fail']">{{ row.hoursArr[0] }}</span>
|
|
|
<span style="margin: 0 5px;">/ {{ settingHours.offlineTime }}</span>
|
|
|
- <span>学时</span>
|
|
|
+ <span>{{ $t('assessment.hour') }}</span>
|
|
|
</span>
|
|
|
- <span>未提交数:<span class="count-num">{{ row.trains.filter(item => item.haswork && !item.url).length }}</span></span>
|
|
|
+ <span>{{ $t('assessment.noSubmitNum') }}:<span class="count-num">{{ row.trains.filter(item => item.haswork && !item.url).length }}</span></span>
|
|
|
<!-- <Icon :type="expandedArr.includes(index) ? 'ios-arrow-up' : 'ios-arrow-down'" style="cursor: pointer;" size="20" color="#a7a7a7" @click="onExpandChange(index)"/> -->
|
|
|
</div>
|
|
|
<div class="analysis-details" v-show="expandedArr.includes(index)">
|
|
|
<div v-if="row.trains.length === 0" class="no-train">
|
|
|
<img src="../../assets/image/no_data.png" width="80">
|
|
|
- <span>暂无校本研修记录</span>
|
|
|
+ <span>{{ $t('assessment.noOffline') }}</span>
|
|
|
</div>
|
|
|
<div class="abilities-item" v-for="(item,index) in row.trains" :key="index">
|
|
|
<span class="overflow-text" :title="item.name">{{ item.name }}</span>
|
|
|
- <span>{{ item.sethour }}学时</span>
|
|
|
+ <span>{{ item.sethour }}{{ $t('assessment.hour') }}</span>
|
|
|
<span @click.stop.prevent="() => {}">
|
|
|
<i-switch size="large" true-color="#07bea3" v-model="item.score === 1" @mousedown.native="trainSwitchMousedown(row,item)" :before-change="beforeTrainChange" @on-change="onTrainSwitchChange(row,$event)">
|
|
|
<span slot="open">Pass</span>
|
|
|
<span slot="close">Fail</span>
|
|
|
</i-switch>
|
|
|
</span>
|
|
|
- <Icon type="ios-folder" style="cursor: pointer;" size="18" :color="item.url ? '#2db694' : '#b6b6b6'" v-if="item.haswork" :title="item.url ? '已提交PDF' : '未提交PDF'" @click.stop="onClickFolder(item)" />
|
|
|
+ <Icon type="ios-folder" style="cursor: pointer;" size="18" :color="item.url ? '#2db694' : '#b6b6b6'" v-if="item.haswork" :title="item.url ? $t('assessment.hasPdf') : $t('assessment.noPdf')" @click.stop="onClickFolder(item)" />
|
|
|
<Icon type="ios-folder" style="opacity: 0;" v-if="!item.haswork" />
|
|
|
</div>
|
|
|
</div>
|
|
@@ -221,36 +221,36 @@
|
|
|
<span>
|
|
|
<span :class="['total-hour', row.hoursArr[3] >= settingHours.classTime ? 'color-suc' : 'color-fail']">{{ row.hoursArr[3] }}</span>
|
|
|
<span style="margin: 0 5px;">/ {{ settingHours.classTime }}</span>
|
|
|
- <span>学时</span>
|
|
|
+ <span>{{ $t('assessment.hour') }}</span>
|
|
|
</span>
|
|
|
- <Tag :color="row.video ? 'green' : 'orange'">{{ row.video ? '已上传' : '未上传' }}</Tag>
|
|
|
+ <Tag :color="row.video ? 'green' : 'orange'">{{ row.video ? $t('assessment.hasUpload') : $t('assessment.noUpload') }}</Tag>
|
|
|
<Icon :type="expandedArr.includes(index) ? 'ios-arrow-up' : 'ios-arrow-down'" style="cursor: pointer;" size="20" color="#a7a7a7" />
|
|
|
</div>
|
|
|
<div class="analysis-details" v-show="expandedArr.includes(index)">
|
|
|
<div v-if="!row.video" class="no-train">
|
|
|
<img src="../../assets/image/no_data.png" width="80">
|
|
|
- <span>暂未上传课堂实录</span>
|
|
|
+ <span>{{ $t('assessment.noVideo') }}</span>
|
|
|
</div>
|
|
|
<div class="video-item" v-else>
|
|
|
<img class="video-item-poster" :src="getVideoPoster(row)" @error="errorImg($event)" alt="">
|
|
|
<span>{{ row.video.name }}</span>
|
|
|
<span>
|
|
|
<Tag color="#848c94" class="appraise-tag" v-if="row.video.score > -1">
|
|
|
- <span class="appraise-tag-left">校评</span>
|
|
|
+ <span class="appraise-tag-left">{{ $t('assessment.schoolAppraise') }}</span>
|
|
|
<span :class="['appraise-tag-right',colorMap[row.video.score + 1]]">{{ resultMap[row.video.score + 1] }}</span>
|
|
|
</Tag>
|
|
|
- <Button type="info" size="small" style="margin:10px 0" v-if="row.video" @click.stop="doReviewVideo(row)">{{ row.video.score > -1 ? '重新评审' : '去评审' }}</Button>
|
|
|
+ <Button type="info" size="small" style="margin:10px 0" v-if="row.video" @click.stop="doReviewVideo(row)">{{ row.video.score > -1 ? $t('assessment.reAppraise') : $t('assessment.goAppraise') }}</Button>
|
|
|
</span>
|
|
|
</div>
|
|
|
</div>
|
|
|
</template>
|
|
|
<!-- 操作列 -->
|
|
|
- <template slot-scope="{ row,index }" slot="action">
|
|
|
+ <!-- <template slot-scope="{ row,index }" slot="action">
|
|
|
<span style="font-size: 14px;cursor: pointer;color: #10ABE7;font-weight: bold;margin-top: 20px;display: inline-block;" @click="onExpandChange(index)">
|
|
|
<span style="margin-right: 5px;">{{ expandedArr.includes(index) ? '收起' : '详情' }}</span>
|
|
|
<Icon :type="expandedArr.includes(index) ? 'ios-arrow-up' : 'ios-arrow-down'" />
|
|
|
</span>
|
|
|
- </template>
|
|
|
+ </template> -->
|
|
|
</Table>
|
|
|
</div>
|
|
|
</div>
|
|
@@ -260,11 +260,11 @@
|
|
|
<VideoReview v-if="isReviewVideo" :reviewData="videoData" mode="other" @goBack="videoGoBack"></VideoReview>
|
|
|
<!-- 展示用户评论弹窗 -->
|
|
|
<Modal v-model="showCommentModal" width="1200" footer-hide class="tree-modal comment-modal">
|
|
|
- <p slot="header">评论详情</p>
|
|
|
+ <p slot="header">{{ $t('assessment.commentDetails') }}</p>
|
|
|
<Table :columns="appraiseColumns" :data="appraiseList" border max-height="600">
|
|
|
<template slot-scope="{ row }" slot="type">
|
|
|
<Tag :color="row.type === 'school' ? 'success' : 'warning'">
|
|
|
- {{ row.type === 'school' ? '校评' : '互评' }}
|
|
|
+ {{ row.type === 'school' ? $t('assessment.schoolAppraise') : $t('assessment.otherAppraise') }}
|
|
|
</Tag>
|
|
|
</template>
|
|
|
<template slot-scope="{ row }" slot="score">
|
|
@@ -279,7 +279,7 @@
|
|
|
</Modal>
|
|
|
<!-- 展示作业提交PDF选择弹窗 -->
|
|
|
<Modal v-model="choosePdfModal" width="800" footer-hide class="tree-modal comment-modal">
|
|
|
- <p slot="header">作业提交内容</p>
|
|
|
+ <p slot="header">{{ $t('assessment.homework') }}</p>
|
|
|
<div>
|
|
|
<span class="hw-item" v-for="(item,index) in attachmentList" :key="index" @click="onPreview(item)">{{ item.name }}</span>
|
|
|
</div>
|
|
@@ -316,9 +316,9 @@ export default {
|
|
|
videoData: null,
|
|
|
colorMap: ['color-none', 'color-bad', 'color-normal', 'color-good'],
|
|
|
tagColorMap: ['error', 'primary', 'success'],
|
|
|
- resultMap: ['暂无', '不合格', '合格', '优秀'],
|
|
|
- statusList: ['全部状态', '未进行', '不合格', '合格', '优秀'],
|
|
|
- noSubmitList: ['认证材料未提交', '校本研修作业未提交', '课堂实录未提交'],
|
|
|
+ resultMap: [vm.$t('assessment.no'), vm.$t('assessment.bad'), vm.$t('assessment.normal'), vm.$t('assessment.good')],
|
|
|
+ statusList: [vm.$t('assessment.allStatus'), vm.$t('assessment.noStart'), vm.$t('assessment.bad'), vm.$t('assessment.normal'), vm.$t('assessment.good')],
|
|
|
+ noSubmitList: [vm.$t('assessment.noSubmit1'), vm.$t('assessment.noSubmit2'), vm.$t('assessment.noSubmit3')],
|
|
|
tableHeight: document.documentElement.clientHeight * 0.86,
|
|
|
isReviewAbility: false,
|
|
|
isReviewVideo: false,
|
|
@@ -337,7 +337,7 @@ export default {
|
|
|
assessmentList: [],
|
|
|
assessmentCol: [
|
|
|
{
|
|
|
- title: '教师信息',
|
|
|
+ title: vm.$t('assessment.teacherInfo'),
|
|
|
slot: 'userInfo',
|
|
|
className: 'userInfo-column',
|
|
|
width: 300,
|
|
@@ -347,7 +347,7 @@ export default {
|
|
|
minWidth: 200,
|
|
|
renderHeader: (h, params) => {
|
|
|
return h('div', [
|
|
|
- h('strong', '线上研修'),
|
|
|
+ h('strong', vm.$t('assessment.online')),
|
|
|
h('Tooltip', {
|
|
|
props: {
|
|
|
placement: 'right',
|
|
@@ -372,7 +372,7 @@ export default {
|
|
|
whiteSpace: 'normal',
|
|
|
wordBreak: 'break-all'
|
|
|
}
|
|
|
- }, '教师在线上研修观看能力点所关联的视频资源总时长,1学时=45分钟')
|
|
|
+ }, vm.$t('assessment.tip3'))
|
|
|
])
|
|
|
|
|
|
])
|
|
@@ -388,7 +388,7 @@ export default {
|
|
|
}
|
|
|
}, [
|
|
|
h('div', [
|
|
|
- h('strong', '认证材料'),
|
|
|
+ h('strong', vm.$t('assessment.ability')),
|
|
|
h('Tooltip', {
|
|
|
props: {
|
|
|
placement: 'right',
|
|
@@ -413,7 +413,7 @@ export default {
|
|
|
whiteSpace: 'normal',
|
|
|
wordBreak: 'break-all'
|
|
|
}
|
|
|
- }, this.settingHours.limitAbility > 0 ? `最少有${this.settingHours.limitAbility}个能力点的认证材料合格即可获得学时` : `认证材料必须全部通过才能获得学时`)
|
|
|
+ }, this.settingHours.limitAbility > 0 ? `${vm.$t('assessment.tip4')}${this.settingHours.limitAbility}${vm.$t('assessment.tip5')}` : vm.$t('assessment.tip6'))
|
|
|
])
|
|
|
|
|
|
]),
|
|
@@ -435,7 +435,7 @@ export default {
|
|
|
vm.doBatchAbility()
|
|
|
}
|
|
|
}
|
|
|
- }, '全部合格')
|
|
|
+ }, vm.$t('assessment.allNormal'))
|
|
|
])
|
|
|
])
|
|
|
},
|
|
@@ -450,7 +450,7 @@ export default {
|
|
|
},
|
|
|
}, [
|
|
|
h('span', [
|
|
|
- h('strong', '校本研修'),
|
|
|
+ h('strong', vm.$t('assessment.offline')),
|
|
|
h('Tooltip', {
|
|
|
props: {
|
|
|
placement: 'right',
|
|
@@ -475,7 +475,7 @@ export default {
|
|
|
whiteSpace: 'normal',
|
|
|
wordBreak: 'break-all'
|
|
|
}
|
|
|
- }, `根据省平台要求,教师必须满足以下条件才可获得校本研修活动学时: 1.10学时中至少有一次需提交作业的校本研修活动 2.在活动中成功提交PDF作业`)
|
|
|
+ }, vm.$t('assessment.tip7'))
|
|
|
]),
|
|
|
]),
|
|
|
h('Button', {
|
|
@@ -496,7 +496,7 @@ export default {
|
|
|
vm.doBatchTrain()
|
|
|
}
|
|
|
}
|
|
|
- }, '全部通过')
|
|
|
+ }, vm.$t('assessment.allPass'))
|
|
|
])
|
|
|
])
|
|
|
},
|
|
@@ -510,7 +510,7 @@ export default {
|
|
|
},
|
|
|
}, [
|
|
|
h('span', [
|
|
|
- h('strong', '课堂实录'),
|
|
|
+ h('strong', vm.$t('assessment.video')),
|
|
|
h('Tooltip', {
|
|
|
props: {
|
|
|
placement: 'right',
|
|
@@ -535,7 +535,7 @@ export default {
|
|
|
whiteSpace: 'normal',
|
|
|
wordBreak: 'break-all'
|
|
|
}
|
|
|
- }, '教师提交课堂实录并且考核通过后即可获得5学时')
|
|
|
+ }, vm.$t('assessment.tip8'))
|
|
|
]),
|
|
|
]),
|
|
|
h('Button', {
|
|
@@ -556,7 +556,7 @@ export default {
|
|
|
vm.doBatchVideo()
|
|
|
}
|
|
|
}
|
|
|
- }, '全部合格')
|
|
|
+ }, vm.$t('assessment.allNormal'))
|
|
|
])
|
|
|
])
|
|
|
},
|
|
@@ -584,15 +584,15 @@ export default {
|
|
|
key: 'name'
|
|
|
},
|
|
|
{
|
|
|
- title: `被评价人`,
|
|
|
+ title: vm.$t('assessment.atName'),
|
|
|
key: 'atName'
|
|
|
},
|
|
|
{
|
|
|
- title: `评价类型`,
|
|
|
+ title: vm.$t('assessment.type'),
|
|
|
slot: 'type'
|
|
|
},
|
|
|
{
|
|
|
- title: `评价结果`,
|
|
|
+ title: vm.$t('assessment.score'),
|
|
|
slot: 'score',
|
|
|
},
|
|
|
{
|
|
@@ -601,7 +601,7 @@ export default {
|
|
|
width: 500
|
|
|
},
|
|
|
{
|
|
|
- title: `评论时间`,
|
|
|
+ title: vm.$t('assessment.time'),
|
|
|
key: 'time',
|
|
|
width: 200,
|
|
|
sortable: true
|
|
@@ -626,7 +626,7 @@ export default {
|
|
|
methods: {
|
|
|
/* 导出表格数据 */
|
|
|
onExportTable() {
|
|
|
- let header = ['姓名', '总学时', '线上研修学时', '未修满能力点', '已修满的能力点数量', '认证材料学时', '校本研修学时', '课堂实录学时', '认证材料需提交数', '认证材料未提交数', '未提交认证材料能力点', '作业未提交数', '课堂实录是否提交']
|
|
|
+ let header = [this.$t('assessment.header1'), this.$t('assessment.header2'), this.$t('assessment.header3'), this.$t('assessment.header4'), this.$t('assessment.header5'), this.$t('assessment.header6'), this.$t('assessment.header7'), this.$t('assessment.header8'), this.$t('assessment.header9'), this.$t('assessment.header10'), this.$t('assessment.header11'), this.$t('assessment.header12'), this.$t('assessment.header13')]
|
|
|
let keys = ['name', 'totalTime', 'online', 'unFinishArr', 'finishArr', 'ability', 'offline', 'video', 'abilityCount', 'noAbilityCount', 'noAbilityNoArr', 'noHwCount', 'isSubmitVideo']
|
|
|
console.log(this.assessmentList)
|
|
|
let datas = this.assessmentList.map(i => {
|
|
@@ -643,7 +643,7 @@ export default {
|
|
|
noAbilityCount: i.abilities.filter(i => i.zpscore === -1).length,
|
|
|
noAbilityNoArr: i.abilities.filter(j => j.zpscore === -1).map(k => k.no).join(','),
|
|
|
noHwCount: i.trains.filter(item => item.haswork && !item.url).length,
|
|
|
- isSubmitVideo: i.video ? '已提交' : '未提交'
|
|
|
+ isSubmitVideo: i.video ? this.$t('assessment.hasSubmit') : this.$t('assessment.noSubmit')
|
|
|
}
|
|
|
})
|
|
|
const params = {
|
|
@@ -651,7 +651,7 @@ export default {
|
|
|
key: keys,
|
|
|
data: datas,
|
|
|
autoWidth: true,
|
|
|
- filename: this.$store.state.user.schoolProfile.school_base.name + '研修情况统计表'
|
|
|
+ filename: this.$store.state.user.schoolProfile.school_base.name + this.$t('assessment.tableName')
|
|
|
}
|
|
|
excel.export_array_to_excel(params)
|
|
|
},
|
|
@@ -697,10 +697,10 @@ export default {
|
|
|
this.assessmentList = this.getRenderJson(res).sort((a, b) => a.userInfo.name.localeCompare(b.userInfo.name))
|
|
|
this.originList = this._.cloneDeep(this.assessmentList)
|
|
|
if (!this.groupList.length) {
|
|
|
- this.groupList = ['全部教研组', ...new Set(res.teacherTrains.map(i => i.groupName))]
|
|
|
+ this.groupList = [this.$t('assessment.allGroups'), ...new Set(res.teacherTrains.map(i => i.groupName))]
|
|
|
if (this.groupList.some(i => !i.groupName)) {
|
|
|
this.groupList = this.groupList.filter(i => i)
|
|
|
- this.groupList.push('未分组')
|
|
|
+ this.groupList.push(this.$t('assessment.noGroup'))
|
|
|
}
|
|
|
}
|
|
|
this.settingHours = res.setting
|
|
@@ -753,7 +753,7 @@ export default {
|
|
|
/* 点击PDF提交文件图标 */
|
|
|
async onClickFolder(item) {
|
|
|
if (!item.url) {
|
|
|
- this.$Message.warning('暂未提交作品,无法查看')
|
|
|
+ this.$Message.warning(this.$t('assessment.noSubmitTip'))
|
|
|
} else {
|
|
|
this.choosePdfModal = true
|
|
|
this.attachmentList = item.other
|
|
@@ -820,7 +820,7 @@ export default {
|
|
|
}).then(res => {
|
|
|
if (!res.error) {
|
|
|
this.originList.find(i => i.userInfo.tmdId === row.userInfo.tmdId).finalScore = row.finalScore
|
|
|
- this.$Message.success(`已将${row.userInfo.name}的最终研修结果评定为 ${this.resultMap[row.finalScore + 1]}`)
|
|
|
+ this.$Message.success(`${this.$t('assessment.tip9')}${row.userInfo.name}${this.$t('assessment.tip10')} ${this.resultMap[row.finalScore + 1]}`)
|
|
|
}
|
|
|
})
|
|
|
},
|
|
@@ -873,7 +873,7 @@ export default {
|
|
|
name: i.tmdname,
|
|
|
type: i.roleType,
|
|
|
score: i.score,
|
|
|
- content: `无评价内容`,
|
|
|
+ content: this.$t('assessment.noComment'),
|
|
|
atName: userInfo.name,
|
|
|
time: this.$tools.formatTime(i.time, 'yyyy-MM-dd hh:mm')
|
|
|
})
|
|
@@ -887,7 +887,7 @@ export default {
|
|
|
doShowMyComments(replyIds) {
|
|
|
console.log(replyIds)
|
|
|
if (!replyIds.length) {
|
|
|
- this.$Message.warning('无评论数据')
|
|
|
+ this.$Message.warning(this.$t('assessment.noComment'))
|
|
|
} else {
|
|
|
this.$api.ability.getReplyInfo({
|
|
|
school: this.$store.state.userInfo.schoolCode,
|
|
@@ -937,7 +937,7 @@ export default {
|
|
|
this.tableLoading = true
|
|
|
let submitVal = this.curNoSubmit
|
|
|
// 教研组名称
|
|
|
- let groupNameVal = this.curGroup === 0 ? 'all' : (this.groupList[this.curGroup] === '未分组' ? null : this.groupList[this.curGroup])
|
|
|
+ let groupNameVal = this.curGroup === 0 ? 'all' : (this.groupList[this.curGroup] === this.$t('assessment.noGroup') ? null : this.groupList[this.curGroup])
|
|
|
// 是否合格的状态
|
|
|
let statusVal = this.curStatus === 0 ? 'all' : this.curStatus - 2
|
|
|
// 执行过滤操作
|
|
@@ -971,7 +971,7 @@ export default {
|
|
|
return new Promise((resolve) => {
|
|
|
this.$Modal.confirm({
|
|
|
title: this.$t('syllabus.modifyTip'),
|
|
|
- content: `确认 ${this.isOpenAppraise ? '关闭' : '开启'} 互评吗?`,
|
|
|
+ content: `${this.$t('assessment.tip11')} ${this.isOpenAppraise ? this.$t('assessment.off') : this.$t('assessment.on')} ${this.$t('assessment.tip12')}`,
|
|
|
onOk: () => {
|
|
|
resolve();
|
|
|
}
|
|
@@ -985,13 +985,13 @@ export default {
|
|
|
"hpappraise": this.isOpenAppraise ? 1 : 0
|
|
|
}).then(res => {
|
|
|
if (!res.error) {
|
|
|
- this.$Message.success(`设置成功!当前互评状态为:${this.isOpenAppraise ? '开启' : '关闭'}`)
|
|
|
+ this.$Message.success(`${this.$t('assessment.tip13')}:${this.isOpenAppraise ? this.$t('assessment.on') : this.$t('assessment.off')}`)
|
|
|
localStorage.setItem('hpAppraise', this.isOpenAppraise ? 1 : 0)
|
|
|
} else {
|
|
|
- this.$Message.error('设置失败!')
|
|
|
+ this.$Message.error(this.$t('assessment.tip14'))
|
|
|
}
|
|
|
}).catch(e => {
|
|
|
- this.$Message.error('设置失败!')
|
|
|
+ this.$Message.error(this.$t('assessment.tip14'))
|
|
|
})
|
|
|
},
|
|
|
/* 点击校本研修switch时获取点击的对象 */
|
|
@@ -1004,7 +1004,7 @@ export default {
|
|
|
return new Promise((resolve, reject) => {
|
|
|
// 如果是需要提交作业的活动 但是教师没有提交作业 则不允许通过
|
|
|
if (!this.curTrainObj.url && this.curTrainObj.haswork) {
|
|
|
- this.$Message.warning('当前教师暂未上传活动pdf作业,无法通过!')
|
|
|
+ this.$Message.warning(this.$t('assessment.tip15'))
|
|
|
reject()
|
|
|
} else {
|
|
|
resolve();
|
|
@@ -1033,9 +1033,9 @@ export default {
|
|
|
// newScore === 0 ? originItem.hoursArr[0]-- : originItem.hoursArr[0]++
|
|
|
this.getAssessmentList()
|
|
|
if (this.curTrainObj.haswork === 0 && newScore === 1) {
|
|
|
- this.$Message.warning(`根据省平台要求,教师必须满足以下条件才可获得校本研修活动学时: 1.10学时中至少有一次需提交作业的校本研修活动 2.在活动中成功提交PDF作业`)
|
|
|
+ this.$Message.warning(this.$t('assessment.tip7'))
|
|
|
} else {
|
|
|
- this.$Message.success(`操作成功!`)
|
|
|
+ this.$Message.success(this.$t('assessment.tip16'))
|
|
|
}
|
|
|
}
|
|
|
})
|
|
@@ -1043,8 +1043,8 @@ export default {
|
|
|
/* 批量通过校本研修 */
|
|
|
doBatchTrain() {
|
|
|
this.$Modal.confirm({
|
|
|
- title: '全部通过',
|
|
|
- content: `确认将所有教师参与的 不需要提交的 以及 需要并且已经提交PDF 的研修活动全部设置为通过吗?`,
|
|
|
+ title: this.$t('assessment.allPass'),
|
|
|
+ content: this.$t('assessment.tip17'),
|
|
|
onOk: () => {
|
|
|
// 判断是否有存在未提交PDF的活动
|
|
|
let allTrainIds = [...new Set(this.assessmentList.map(i => i.trains).flat(1).map(j => j.id))]
|
|
@@ -1076,7 +1076,7 @@ export default {
|
|
|
"type": batchScore
|
|
|
}).then(res => {
|
|
|
if (!res.error) {
|
|
|
- this.$Message.success(`操作成功!`)
|
|
|
+ this.$Message.success(this.$t('assessment.tip16'))
|
|
|
// // 更新源数据
|
|
|
// if(noPdfArr.length){
|
|
|
// let noPdfNames = [...new Set(noPdfArr.map(i => i.tmdName))]
|
|
@@ -1105,8 +1105,8 @@ export default {
|
|
|
/* 批量通过认证材料 */
|
|
|
doBatchAbility() {
|
|
|
this.$Modal.confirm({
|
|
|
- title: '全部合格',
|
|
|
- content: `确认将所有教师已经自评过的微能力点全部设置为合格吗?`,
|
|
|
+ title: this.$t('assessment.allNormal'),
|
|
|
+ content: this.$t('assessment.tip18'),
|
|
|
onOk: () => {
|
|
|
let tmdIds = this.assessmentList.filter(i => i.abilities.some(j => j.zpscore > -1)).map(k => k.userInfo.tmdId)
|
|
|
this.tableLoading = true
|
|
@@ -1116,10 +1116,10 @@ export default {
|
|
|
roleType: "school"
|
|
|
}).then(res => {
|
|
|
if (!res.error) {
|
|
|
- this.$Message.success('操作成功!')
|
|
|
+ this.$Message.success(this.$t('assessment.tip16'))
|
|
|
this.getAssessmentList()
|
|
|
} else {
|
|
|
- this.$Message.error('操作失败!')
|
|
|
+ this.$Message.error(this.$t('assessment.tip19'))
|
|
|
}
|
|
|
})
|
|
|
}
|
|
@@ -1129,8 +1129,8 @@ export default {
|
|
|
/* 批量通过课堂实录 */
|
|
|
doBatchVideo() {
|
|
|
this.$Modal.confirm({
|
|
|
- title: '全部合格',
|
|
|
- content: `确认将所有教师已提交的课堂实录全部设置为合格吗?`,
|
|
|
+ title: this.$t('assessment.allNormal'),
|
|
|
+ content: this.$t('assessment.tip20'),
|
|
|
onOk: () => {
|
|
|
let hasVideoTmdIds = this.assessmentList.filter(i => i.video).map(j => j.userInfo.tmdId)
|
|
|
this.tableLoading = true
|
|
@@ -1139,10 +1139,10 @@ export default {
|
|
|
score: 1
|
|
|
}).then(res => {
|
|
|
if (!res.error) {
|
|
|
- this.$Message.success('操作成功!')
|
|
|
+ this.$Message.success(this.$t('assessment.tip16'))
|
|
|
this.getAssessmentList()
|
|
|
} else {
|
|
|
- this.$Message.error('操作失败!')
|
|
|
+ this.$Message.error(this.$t('assessment.tip19'))
|
|
|
}
|
|
|
})
|
|
|
}
|
|
@@ -1155,8 +1155,8 @@ export default {
|
|
|
console.log(this.assessmentList);
|
|
|
let batchScore = 1
|
|
|
this.$Modal.confirm({
|
|
|
- title: '批量操作',
|
|
|
- content: '确认将当前所有教师的校本研修评定为合格吗?',
|
|
|
+ title: this.$t('assessment.tip22'),
|
|
|
+ content: this.$t('assessment.tip21'),
|
|
|
onOk() {
|
|
|
this.tableLoading = true
|
|
|
this.$api.ability.setFinalScore({
|
|
@@ -1164,7 +1164,7 @@ export default {
|
|
|
"tmdids": that.assessmentList.map(i => i.userInfo.tmdId)
|
|
|
}).then(res => {
|
|
|
if (!res.error) {
|
|
|
- this.$Message.success(`设置成功!`)
|
|
|
+ this.$Message.success(this.$t('assessment.tip23'))
|
|
|
that.assessmentList.forEach(i => i.finalScore = batchScore)
|
|
|
that.originList.forEach(i => i.finalScore = batchScore)
|
|
|
that.tableLoading = false
|
|
@@ -1175,7 +1175,7 @@ export default {
|
|
|
},
|
|
|
/* 上传省平台 */
|
|
|
doUploadProvince() {
|
|
|
- this.$Message.warning('暂未对接省平台')
|
|
|
+ this.$Message.warning(this.$t('assessment.noProvince'))
|
|
|
},
|
|
|
/* 图片加载失败处理 */
|
|
|
errorImg(event) {
|
|
@@ -1224,7 +1224,7 @@ export default {
|
|
|
},
|
|
|
getStatusCount() {
|
|
|
return status => {
|
|
|
- let groupNameVal = this.curGroup === 0 ? 'all' : (this.groupList[this.curGroup] === '未分组' ? null : this.groupList[this.curGroup])
|
|
|
+ let groupNameVal = this.curGroup === 0 ? 'all' : (this.groupList[this.curGroup] === this.$t('assessment.noGroup') ? null : this.groupList[this.curGroup])
|
|
|
return this.originList.filter(i => i.finalScore === status && (groupNameVal === 'all' ? true : (i.userInfo.groupName === groupNameVal))).length
|
|
|
}
|
|
|
}
|