Merge remote-tracking branch 'origin/main'

This commit is contained in:
2024-09-01 10:17:23 +08:00
49 changed files with 2913 additions and 1128 deletions
+4 -4
View File
@@ -1,17 +1,17 @@
nutz.application.name=union_hhu
server.port=8080
server.port=8081
server.host=0.0.0.0
jetty.contextPath=/
jetty.threadpool.idleTimeout=100000
jetty.threadpool.minThreads=10
jetty.threadpool.maxThreads=20000
jetty.threadpool.maxThreads=20000
jetty.page.403=/error/403.htmla
jetty.page.404=/error/404.html
jetty.page.500=/error/500.html
#结合ftp使用,或用nginx代理ftp路径
jetty.staticPath=D://files
#开发模式静态资源
jetty.staticPathLocal=E:/project/UNION_HHU/src/main/resources/static
jetty.staticPathLocal=
nutz.mvc.ignore=^(.+[.])(jsp|png|gif|jpg|js|css|jpeg|html|mp3|mp4|ico|svg)$
nutz.mvc.exclusions=/favicon/*,/assets/*,/druid/*,/upload/*
ftp.enabled=true
@@ -86,7 +86,7 @@ shiro.url.login=/platform
shiro.url.logout_redirect=/platform
shiro.url.unauth=/platform
#开发时设置本地路径,便于调试
beetl.RESOURCE.rootLocal=E:/project/UNION_HHU/src/main/resources/views/
beetl.RESOURCE.rootLocal=
beetl.RESOURCE.root=views/
beetl.DELIMITER_STATEMENT_START=<!--#
beetl.DELIMITER_STATEMENT_END=#-->
@@ -26,6 +26,23 @@ const removeHTMLTag = (str) => {
return str;
}
function groupBy(array, key) {
return array.reduce((result, currentItem) => {
// 使用 key 函数获取分组的键
const groupKey = key(currentItem);
// 检查结果对象中是否已经有了这个键
const existingGroup = result.find(item => item.key === groupKey);
if (existingGroup) {
// 如果已存在,则将当前项添加到该组数组中
existingGroup.items.push(currentItem);
} else {
// 如果不存在,则创建新组并添加当前项
result.push({ key: groupKey, items: [currentItem] });
}
return result;
}, []);
}
const CREATE_PREVIEW_URL = (val) => {
return FILE_STREAM_PREVIEW_ADDRESS + "?id=" + val
}
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
@@ -10,8 +10,8 @@
<van-cell-group>
<van-field readonly :value="viewData.username" label="姓名"></van-field>
<van-field readonly :value="viewData.loginname" label="工资号"></van-field>
<van-field readonly :value="viewData.unitname" label="单位"></van-field>
<van-field readonly :value="viewData.unionname" label="工会"></van-field>
<van-field readonly :value="viewData.dwname" label="单位"></van-field>
<van-field readonly :value="viewData.ghname" label="工会"></van-field>
</van-cell-group>
<div class="van-cell-group__title">
<div class="van-sidebar-item van-sidebar-item--select">
@@ -19,88 +19,143 @@
</div>
</div>
<van-cell-group>
<van-field readonly name="type" :value="viewData.hdsbzpzt" label="作品主题"></van-field>
<van-field readonly name="type" :value="viewData.lname" label="活动类别"></van-field>
<van-field readonly name="type" :value="viewData.hdname" label="作品主题"></van-field>
<van-field readonly name="type" :value="viewData.hdlbname" label="活动类别"></van-field>
<van-field readonly name="type" :value="viewData.step_count" label="健步走步数"
v-if="viewData.step_count"></van-field>
<van-field readonly name="type" :value="viewData.zname" label="作品类别" v-if="viewData.zname"></van-field>
<van-field readonly :value="viewData.hdsbzpms" label="简介"
<van-field readonly name="type" :value="viewData.zname" label="作品类别"
v-if="viewData.zname"></van-field>
<van-field readonly :value="viewData.hdsbzpms" label="创作说明"
input-align="left"
style="flex-flow: column"
rows="2" maxlength="200" type="textarea" show-word-limit autosize></van-field>
rows="2" type="textarea" show-word-limit autosize></van-field>
<van-field label="照片" style="flex-flow: column" input-align="left">
<template #label>
<div class="mb10">照&emsp;&emsp;片</div>
</template>
<van-field label="作品" style="flex-flow: column" input-align="left">
<template #input>
<vant-file-upload :files.sync="img2List" view :del="false"
v-if="img2List&&img2List.length>0"></vant-file-upload>
<div v-if="img2List.length===0" style="text-align: center;color: #c2bbbb;font-size: 10px;">
<div v-if="img2List.length===0"
style="text-align: center;color: #c2bbbb;font-size: 10px;">
没有照片。
</div>
</template>
</van-field>
<!--
<van-field label="视频" style="flex-flow: column" input-align="left">
<template #label>
<div class="mb10">视&emsp;&emsp;频</div>
</template>
<template #input>
<div v-if="videoList.length>0">
<div v-for="item in videoList" class="mt10">
<video id="myVideo" class="video-js vjs-default-skin vjs-big-play-centered" controls
preload="auto"
width="640" height="264"
data-setup="{}" webkit-playsinline='true' playsinline='true'
x-webkit-airplay='true'
x5-video-player-type='h5' x5-video-player-fullscreen='true'
x5-video-ignore-metadata='true'>
<source :src="item.url" type="video/mp4">
</video>
</div>
</div>
<div v-if="videoList.length===0"
style="text-align: center;color: #c2bbbb;font-size: 10px;">
没有视频。
</div>
<van-field label="视频" style="flex-flow: column" input-align="left">
<template #label>
<div class="mb10">视&emsp;&emsp;频</div>
</template>
<template #input>
<div v-if="videoList.length>0">
<div v-for="item in videoList" class="mt10">
<video id="myVideo" class="video-js vjs-default-skin vjs-big-play-centered" controls preload="auto"
width="640" height="264"
data-setup="{}" webkit-playsinline='true' playsinline='true' x-webkit-airplay='true'
x5-video-player-type='h5' x5-video-player-fullscreen='true' x5-video-ignore-metadata='true'>
<source :src="item.url" type="video/mp4">
</video>
</div>
</div>
<div v-if="videoList.length===0" style="text-align: center;color: #c2bbbb;font-size: 10px;">
没有视频。
</div>
</template>
</van-field>
</template>
</van-field>
<van-field label="音频" style="flex-flow: column" input-align="left">
<template #label>
<div class="mb10">音&emsp;&emsp;频</div>
</template>
<template #input>
<div v-if="audioList&&audioList.length>0">
<div v-for="audio in audioList" class="mt10">
<audio id="amusic" preload="auto" controls>
<source :src="FILE_DOMAIN+audio.url"/>
</audio>
</div>
</div>
<div style="text-align: center;color: #c2bbbb;font-size: 10px;"
v-if="audioList.length===0">
没有音频。
</div>
</template>
</van-field>
<van-field label="音频" style="flex-flow: column" input-align="left">
<template #label>
<div class="mb10">音&emsp;&emsp;频</div>
</template>
<template #input>
<div v-if="audioList&&audioList.length>0">
<div v-for="audio in audioList" class="mt10">
<audio id="amusic" preload="auto" controls>
<source :src="FILE_DOMAIN+audio.url"/>
</audio>
</div>
</div>
<div style="text-align: center;color: #c2bbbb;font-size: 10px;" v-if="audioList.length===0">
没有音频。
</div>
</template>
</van-field>
<van-field label="文档" style="flex-flow: column" input-align="left">
<template #label>
<div class="mb10">文&emsp;&emsp;档</div>
</template>
<template #input>
<div v-for="(item,index) in docList" v-if="docList&&docList.length>0">
<div class="text-nowrap color-puple"
@click="previewFile(item.filepath,item.filename,docList,index,item.id)">
{{ item.filename }}
</div>
</div>
<div v-if="docList.length===0" style="text-align: center;color: #c2bbbb;font-size: 10px;">
没有文档。
</div>
</template>
</van-field>
<van-field label="文档" style="flex-flow: column" input-align="left">
<template #label>
<div class="mb10">文&emsp;&emsp;档</div>
</template>
<template #input>
<div v-for="(item,index) in docList" v-if="docList&&docList.length>0">
<div class="text-nowrap color-puple"
@click="viewFile(docList)">
{{ item.filename }}
</div>
</div>
<div v-if="docList.length===0"
style="text-align: center;color: #c2bbbb;font-size: 10px;">
没有文档。
</div>
</template>
</van-field>-->
</van-cell-group>
<template v-if="viewData.union">
<div class="van-cell-group__title">
<div class="van-sidebar-item van-sidebar-item--select">
分工会审核信息
</div>
</div>
<van-cell-group>
<van-field readonly name="type" :value="viewData.union.username" label="审核人"></van-field>
<van-field label="审核时间" :value="viewData.union.auditTime" left-icon="clock-o"
readonly></van-field>
<van-field label="审核意见" left-icon="chat-o"
:value="viewData.union.auditOpinion ? viewData.union.auditOpinion : '暂无'"
readonly></van-field>
<van-field name="sign" label="签字">
<template #input>
<van-image width="200" height="100" :src="viewData.union.auditSign"
v-if="viewData.union.auditSign"></van-image>
<span v-else>暂无</span>
</template>
</van-field>
</van-cell-group>
</template>
<template v-if="viewData.school">
<div class="van-cell-group__title">
<div class="van-sidebar-item van-sidebar-item--select">
校工会审核信息
</div>
</div>
<van-cell-group>
<van-field readonly name="type" :value="viewData.school.username" label="审核人"></van-field>
<van-field label="审核时间" :value="viewData.school.auditTime" left-icon="clock-o"
readonly></van-field>
<van-field label="审核意见" left-icon="chat-o"
:value="viewData.school.auditOpinion ? viewData.school.auditOpinion : '暂无'"
readonly></van-field>
<van-field name="sign" label="签字">
<template #input>
<van-image width="200" height="100" :src="viewData.school.auditSign"
v-if="viewData.school.auditSign"></van-image>
<span v-else>暂无</span>
</template>
</van-field>
</van-cell-group>
</template>
</van-form>
@@ -145,12 +200,30 @@ module.exports = {
'vant-file-upload': httpVueLoader('/components/plugins/VantFileUpload.vue')
},
methods: {
viewFile(docList) {
if (docList && docList.length > 0) {
let pdfStreamUrl = encodeURIComponent(FILE_STREAM_PREVIEW_ADDRESS + '?id=' + docList[0].id) //将路径转码
window.open('/assets/platform/plugins/pdfJs/web/viewer.html?file=' + pdfStreamUrl, docList[0].filename)
} else {
this.$modal.msg('没有可查阅的文件')
}
},
async getInfo(id) {
const toast = vant.Toast.loading({
duration: 0,
forbidClick: true,
overlay: true,
message: '数据查询中...',
})
const {data, code, msg} = await $.get("/platform/hd/wmhd/findOneById", {id})
const refs = await $.get("/mobile/wmhd/list/findOne", {id})
const refs = await $.get("/platform/hd/wmhd/findxxById", {id})
if (refs) {
this.viewData = refs[0]
this.viewData = refs.data
this.videoList = []
this.img2List = []
this.docList = []
this.audioList = []
data.forEach(val => {
val.fjname = val.filename
val.fjurl = val.filepath
@@ -172,6 +245,7 @@ module.exports = {
this.viewData = {}
this.$toast.fail('获取信息失败');
}
toast.clear()
},
},
async created() {
@@ -193,4 +267,4 @@ module.exports = {
}
</style>
</style>
@@ -123,6 +123,10 @@ module.exports = {
this.viewData = resp.data
this.organizationAudit = resp.data.organizationAudit
this.schoolAudit = resp.data.schoolAudit
} else {
this.viewData = {}
this.organizationAudit = {}
this.schoolAudit = {}
}
}
}
@@ -96,7 +96,7 @@
<td colspan="3">{{ schoolAudit.auditOpinion }}</td>
</tr>
<tr>
<!-- <tr>
<th>签字</th>
<td colspan="3">
<div>
@@ -105,7 +105,7 @@
<span v-else>暂无</span>
</div>
</td>
</tr>
</tr>-->
</table>
</border-table>
</el-tab-pane>
@@ -81,7 +81,8 @@
<template v-if="viewInfo.zbxx.scoringMode === 1 && viewInfo.zbxx.reviewMode === 1">
<vi-title title="职工评家总结"></vi-title>
<file-upload :files.sync="viewInfo.commentPeo.files" view></file-upload>
<file-upload v-if="viewInfo.commentPeo.files && viewInfo.commentPeo.files.length > 0" :files.sync="viewInfo.commentPeo.files" view></file-upload>
<el-empty v-else :image-size="100" description="未上传总结"></el-empty>
</template>
</el-form>
@@ -159,139 +159,106 @@
<vi-title2 title="测评内容"></vi-title2>
<el-form-item label="" label-width="0" v-for="(nr,idx) in data.nrs">
<el-form-item label="" label-width="0" v-for="(nr,idx) in data.nrs">
<el-row type="flex" align="middle" justify="space-between">
<el-input v-model="nr.content" :disabled="is_view" maxlength="30" style="width: 50%"
placeholder="请填写测评内容">
<template slot="prepend"><span>
{{ nr.contentNumber = idx + 1 }}</span></template>
</el-input>
<el-button v-if="!is_view" size="medium" :disabled="data.nrs.length<=1" type="danger"
@click="data.nrs.splice(idx,1)"
icon="el-icon-delete"></el-button>
<el-row type="flex" align="middle" justify="space-between">
<el-input v-model="nr.content" :disabled="is_view" maxlength="30" style="width: 50%"
placeholder="请填写测评内容">
<template slot="prepend"><span>
{{ nr.contentNumber = idx + 1 }}</span></template>
</el-input>
<el-button v-if="!is_view" size="medium" :disabled="data.nrs.length<=1" type="danger"
@click="data.nrs.splice(idx,1)"
icon="el-icon-delete"></el-button>
</el-row>
<el-row style="margin-top: 20px">
<el-table :data="nr.bzs" style="width: 100%" border show-summary
:summary-method="getSummaries" size="small">
<el-table-column align="center" header-align="center" label="序号" type="index"
width="100px">
<template scope="{$index,row}">
{{ row.contentNumber = $index + 1 }}
</template>
</el-table-column>
<el-table-column label="测评标准" prop="inspection">
<template scope="{row}">
<el-input v-if="!is_view" v-model="row.inspection" placeholder="请填写测评标准" type="textarea"
rows="2"></el-input>
<div v-else style="white-space:break-spaces">{{ row.inspection }}</div>
</template>
</el-table-column>
<!-- <el-table-column label="单项分" prop="single_score" header-align="center" align="center" width="100px">
<template scope="{row}">
<el-input v-if="!is_view" v-model="row.single_score" placeholder="请填写单项分"></el-input>
<span v-else>{{ row.single_score }}</span>
</template>
</el-table-column>-->
<el-table-column label="标准分" prop="score" header-align="center" align="center"
width="100px" v-if="data.scoringMode===1">
<template scope="{row}">
<el-input v-if="!is_view" v-model.number="row.score" maxlength="4"
placeholder="请填写标准分"></el-input>
<span v-else>{{ row.score }}</span>
</template>
</el-table-column>
<!-- <el-table-column label="能否超过标准分" prop="beyond_highestscore" header-align="center" align="center" width="120px">
<template scope="{row}">
<el-switch
v-if="!is_view"
v-model="row.beyond_highestscore"
active-color="#13ce66"
inactive-color="#ff4949">
</el-switch>
<el-switch
v-else
disabled
v-model="row.beyond_highestscore">
</el-switch>
</template>
</el-table-column>-->
<el-table-column label="是否填写意见" prop="isEvidence" header-align="center" align="center"
width="120px" v-if="data.scoringMode===1">
<template scope="{row}">
<el-switch
:disabled="is_view"
v-model="row.isEvidence"
active-color="#13ce66"
inactive-color="#ff4949">
</el-switch>
</template>
</el-table-column>
<el-table-column v-if="!is_view" label="操作" header-align="center" align="center"
width="200px">
<template scope="{row,$index}">
<el-button size="mini" :disabled="nr.bzs.length<=1 || (!row.canDelete && row.id)"
type="danger" icon="el-icon-delete"
@click="nr.bzs.splice($index,1)"></el-button>
<el-button size="mini"
type="primary" icon="el-icon-plus"
@click="nr.bzs.splice($index+1,0,{inspection:null,score:null,isEvidence:true})"></el-button>
</template>
</el-table-column>
</el-table>
</el-row>
<el-row class="mt10 mb10" style="border-top: 1px dashed rgb(229, 225, 225)"></el-row>
</el-form-item>
<el-row type="flex" justify="center">
<el-button v-if="!is_view"
type="primary"
@click="data.nrs.push({bzs:[{inspection:null,score:null,isEvidence:true}]})">
添加测评内容
</el-button>
</el-row>
<el-row style="margin-top: 20px">
<el-table :data="nr.bzs" style="width: 100%" border show-summary
:summary-method="getSummaries" size="small">
<el-table-column align="center" header-align="center" label="序号" type="index"
width="100px">
<template scope="{$index,row}">
{{ row.contentNumber = $index + 1 }}
</template>
</el-table-column>
<el-table-column label="测评标准" prop="inspection" header-align="center" align="center">
<template scope="{row}">
<el-input v-if="!is_view" v-model="row.inspection" placeholder="请填写测评标准"></el-input>
<span v-else>{{ row.inspection }}</span>
</template>
</el-table-column>
<!-- <el-table-column label="单项分" prop="single_score" header-align="center" align="center" width="100px">
<template scope="{row}">
<el-input v-if="!is_view" v-model="row.single_score" placeholder="请填写单项分"></el-input>
<span v-else>{{ row.single_score }}</span>
</template>
</el-table-column>-->
<el-table-column label="标准分" prop="score" header-align="center" align="center"
width="100px" v-if="data.scoringMode===1">
<template scope="{row}">
<el-input v-if="!is_view" v-model.number="row.score" maxlength="4"
placeholder="请填写标准分"></el-input>
<span v-else>{{ row.score }}</span>
</template>
</el-table-column>
<!-- <el-table-column label="能否超过标准分" prop="beyond_highestscore" header-align="center" align="center" width="120px">
<template scope="{row}">
<el-switch
v-if="!is_view"
v-model="row.beyond_highestscore"
active-color="#13ce66"
inactive-color="#ff4949">
</el-switch>
<el-switch
v-else
disabled
v-model="row.beyond_highestscore">
</el-switch>
</template>
</el-table-column>-->
<el-table-column label="是否填写意见" prop="isEvidence" header-align="center" align="center"
width="120px" v-if="data.scoringMode===1">
<template scope="{row}">
<el-switch
:disabled="is_view"
v-model="row.isEvidence"
active-color="#13ce66"
inactive-color="#ff4949">
</el-switch>
</template>
</el-table-column>
<!--
<el-table-column label="关联模块" prop="associatedmodule" header-align="center" align="center" width="200px">
<template scope="{row}">
<el-input v-if="!is_view" v-model="row.associatedmodule" maxlength="10" placeholder="请填写关联模块"></el-input>
<span v-else>{{ row.associatedmodule }}</span>
</template>
</el-table-column>
<el-table-column label="关联标识" prop="bz_relation_id" header-align="center" align="center" width="100px">
<template scope="{row}">
<el-input v-if="!is_view" v-model="row.bz_relation_id" maxlength="20" placeholder="请填写关联标识,该标识唯一"></el-input>
<span v-else>{{ row.bz_relation_id }}</span>
</template>
</el-table-column>
-->
<!-- <el-table-column label="能否删除" prop="canDelete" header-align="center" align="center" width="100px">-->
<!-- <template scope="{row}">-->
<!-- <el-switch-->
<!-- v-if="!is_view"-->
<!-- :disabled="row.canDelete==false"-->
<!-- v-model="row.canDelete"-->
<!-- active-color="#13ce66"-->
<!-- inactive-color="#ff4949">-->
<!-- </el-switch>-->
<!-- <el-switch-->
<!-- v-else-->
<!-- :disabled="!row.canDelete && row.id"-->
<!-- v-model="row.canDelete">-->
<!-- </el-switch>-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column v-if="!is_view" label="操作" header-align="center" align="center"
width="200px">
<template scope="{row,$index}">
<el-button size="mini" :disabled="nr.bzs.length<=1 || (!row.canDelete && row.id)"
type="danger" icon="el-icon-delete"
@click="nr.bzs.splice($index,1)"></el-button>
<el-button size="mini"
type="primary" icon="el-icon-plus"
@click="nr.bzs.splice($index+1,0,{inspection:null,score:null,isEvidence:true})"></el-button>
</template>
</el-table-column>
</el-table>
</el-row>
<el-row class="mt10 mb10" style="border-top: 1px dashed rgb(229, 225, 225)"></el-row>
</el-form-item>
<el-row type="flex" justify="center">
<el-button v-if="!is_view"
type="primary"
@click="data.nrs.push({bzs:[{inspection:null,score:null,isEvidence:true}]})">
添加测评内容
</el-button>
</el-row>
<div>
<drawer-user-scope
@@ -303,10 +270,8 @@
</el-form>
</template>
<script>
const METHOD_NAME = "change"
+10 -3
View File
@@ -9,15 +9,15 @@
/>
<van-number-keyboard safe-area-inset-bottom/>
<title></title>
<link rel="stylesheet" href="https://cdn.staticfile.org/vant/2.12.5/index.min.css"/>
<link rel="stylesheet" href="${base!}/assets/platform/plugins/vant/index.min.css"/>
<link rel="stylesheet" href="${base!}/assets/mobile/css/theme.css">
<link rel="stylesheet" href="${base!}/assets/mobile/css/main.css">
<script src="${base!}/assets/platform/plugins/vue/vue.min.js"></script>
<script src="https://cdn.staticfile.org/vant/2.12.5/vant.min.js"></script>
<script src="${base!}/assets/platform/plugins/vant/vant.min.js"></script>
<script src="${base!}/assets/platform/plugins/vue-loader/httpVueLoader.js"></script>
<script src="${base!}/assets/mobile/js/basic.js"></script>
<script src="${base!}/assets/mobile/js/basic.js?v=0.0.1"></script>
<script src="${base!}/assets/platform/plugins/jquery/jquery-1.11.1.min.js"></script>
@@ -48,6 +48,13 @@
<script type="text/javascript"
src="https://webapi.amap.com/maps?v=2.0&key=6ab3452804ba35050880b5e047436853&plugin=AMap.PolyEditor,AMap.Geolocation"></script>
<script src="https://cdn-go.cn/cdn/vod-js-sdk-v6/latest/vod-js-sdk-v6.js"></script>
<link href="https://web.sdk.qcloud.com/player/tcplayer/release/v4.5.2/tcplayer.min.css" rel="stylesheet"/>
<!--如果需要在 Chrome 和 Firefox 等现代浏览器中通过 H5 播放 HLS 格式的视频,需要在 tcplayer.vx.x.x.min.js 之前引入 hls.min.x.xx.xm.js。-->
<script src="https://web.sdk.qcloud.com/player/tcplayer/release/v4.5.2/libs/hls.min.0.13.2m.js"></script>
<!--播放器脚本文件-->
<script src="https://web.sdk.qcloud.com/player/tcplayer/release/v4.5.2/tcplayer.v4.3.0.min.js"></script>
</head>
<body>
@@ -19,12 +19,12 @@ layout("/mobile/platform.html"){
</style>
<script src="https://cdn-go.cn/cdn/vod-js-sdk-v6/latest/vod-js-sdk-v6.js"></script>
<link href="https://web.sdk.qcloud.com/player/tcplayer/release/v4.3.0/tcplayer.min.css" rel="stylesheet"/>
<!--如果需要在 Chrome 和 Firefox 等现代浏览器中通过 H5 播放 HLS 格式的视频,需要在 tcplayer.vx.x.x.min.js 之前引入 hls.min.x.xx.xm.js。-->
<script src="https://web.sdk.qcloud.com/player/tcplayer/release/v4.3.0/libs/hls.min.0.13.2m.js"></script>
<!--播放器脚本文件-->
<script src="https://web.sdk.qcloud.com/player/tcplayer/release/v4.3.0/tcplayer.v4.3.0.min.js"></script>
<!--<script src="/assets/platform/plugins/vod/vod-js-sdk-v6.js"></script>-->
<!--<link href="/assets/platform/plugins/vod/tcplayer.min.css"/>-->
<!--<script src="/assets/platform/plugins/vod/hls.min.0.13.2m.js"></script>-->
<!--<script src="/assets/platform/plugins/vod/tcplayer.v4.3.0.min.js"></script>-->
<style>
#app {
@@ -33,6 +33,7 @@ layout("/mobile/platform.html"){
.video-container {
height: 300px;
position: relative;
}
#player-container-id {
@@ -75,7 +76,7 @@ layout("/mobile/platform.html"){
word-break: break-all;
}
.myWatchRecord{
.myWatchRecord {
font-size: 14px;
}
@@ -92,19 +93,66 @@ layout("/mobile/platform.html"){
></van-nav-bar>
<div class="video-container">
<video v-if="isPlay" id="player-container-id" preload="auto" playsinline
<video id="player-container-id" preload="auto"
autoplay
playsinline
webkit-playsinline>
</video>
<van-image
v-else
style="width: 100%;height: 100%"
:src="FILE_DOMAIN+'/fileStreamPreview?id='+albumInfo.cover"
></van-image>
<!-- <div v-if="!isPlay" style=" height: 100%;-->
<!-- background: #000;-->
<!-- position: absolute;-->
<!-- top: 0;-->
<!-- left: 0;-->
<!-- right: 0;-->
<!-- bottom: 0;">-->
<!-- <van-image-->
<!-- style="width: 90%;-->
<!-- height: 100%;-->
<!-- z-index: 999;"-->
<!-- fit="contain"-->
<!-- :src="FILE_DOMAIN+'/fileStreamPreview?id='+albumInfo.cover"-->
<!-- ></van-image>-->
<!-- <div class="tcp-skin">-->
<!-- <div class="vjs-big-play-button">-->
<!-- <div class="vjs-button-icon">-->
<!-- <svg height="100%" width="100%" viewBox="0 0 484 348">-->
<!-- <path class="draw-fill" transform="translate(4 4)"-->
<!-- d="M383,124C350-42,122.3-40.5,90.6,123.5c-110.4,18.5-131,185,.6,216.5H381.6C519.7,310.7,494.1,137.8,383,124Z"></path>-->
<!-- <path transform="translate(4 4)"-->
<!-- d="M200.4,110.2c-9.4-5.8-19.6,2.7-19.4,11.7V256.2c0,8,10.4,16.7,19.4,10.8,2.2-1.4,111.8-65.9,114-67.3,7.4-4,10.1-15.8,0-22.2Z"-->
<!-- style="fill:#fff ;"></path>-->
<!-- </svg>-->
<!-- </div>-->
<!-- </div>-->
<!-- </div>-->
<!-- </div>-->
</div>
<van-tabs v-model="tabIndex" sticky>
<!-- <van-tab title="目录">-->
<!-- <div style="height: 5px;background-color: #f6f7f9"></div>-->
<!-- <van-cell-group class="video-list">-->
<!-- <van-cell v-for="(o,i) in videoList" :key="o.id" @click="playVideo(o)">-->
<!-- <template #title>-->
<!-- <van-tag plain type="primary" style="margin-right: 10px">视频</van-tag>-->
<!-- <span style="margin-right: 10px">-->
<!-- {{i+1}}.-->
<!-- </span>-->
<!-- <span>-->
<!-- {{o.title}}-->
<!-- </span>-->
<!-- </template>-->
<!-- <template #label>-->
<!-- &lt;!&ndash; {{getWatchStatus(o)}}&ndash;&gt;-->
<!-- </template>-->
<!-- <template>-->
<!-- </template>-->
<!-- </van-cell>-->
<!-- </van-cell-group>-->
<!-- </van-tab>-->
<van-tab title="介绍">
<div style="height: 5px;background-color: #f6f7f9"></div>
@@ -124,33 +172,10 @@ layout("/mobile/platform.html"){
</van-cell>
</van-tab>
<van-tab title="目录">
<div style="height: 5px;background-color: #f6f7f9"></div>
<van-cell-group class="video-list">
<van-cell v-for="(o,i) in videoList" :key="o.id" @click="playVideo(o)">
<template #title>
<van-tag plain type="primary" style="margin-right: 10px">视频</van-tag>
<span style="margin-right: 10px">
{{i+1}}.
</span>
<span>
{{o.title}}
</span>
</template>
<template #label>
<!-- {{getWatchStatus(o)}}-->
</template>
<template>
</template>
</van-cell>
</van-cell-group>
</van-tab>
<van-tab title="学习记录">
<div style="height: 5px;background-color: #f6f7f9"></div>
<van-cell-group class="video-list">
<van-cell v-for="(o,i) in videoList" :key="o.id" @click="playVideo(o)">
<van-cell v-for="(o,i) in videoList" :key="o.id">
<template #title>
<van-tag plain type="primary" style="margin-right: 10px">视频</van-tag>
<span style="margin-right: 10px">
@@ -161,19 +186,21 @@ layout("/mobile/platform.html"){
</span>
</template>
<template #label>
<div v-if="o.everyDayMaxWatchNum && o.everyDayMaxWatchNum>0" style="padding: 10px 0;color: #0a84ff;white-space: normal">
<div v-if="o.everyDayMaxWatchNum && o.everyDayMaxWatchNum>0"
style="padding: 10px 0;color: #0a84ff;white-space: normal">
本视频在活动结束时每天最多只会统计
<span style="color: #0a84ff;font-weight: bold">{{o.everyDayMaxWatchNum}}</span>
次完整观看记录,您可以无限制的观看。
</div>
<div v-for="(v,k) in Object.groupBy(watchRecordList,v=>v.watchTime)" :key="k" class="myWatchRecord">
<div v-for="(v,index) in groupBy(watchRecordList,v=>v.watchTime)" :key="index"
class="myWatchRecord">
<div style="display: flex;justify-content: space-between">
<div>
{{moment(k).format('YYYY年MM月DD日')}}
{{moment(v.key).format('YYYY年MM月DD日')}}
</div>
<div style="color: #000000;">
观看次数
<span style="font-weight: bold">{{v.length}}</span>
<span style="font-weight: bold">{{v.items && v.items.filter(v=>v.finish).length}}</span>
</div>
</div>
</div>
@@ -184,9 +211,9 @@ layout("/mobile/platform.html"){
</van-tab>
</van-tabs>
<div class="bottom-wrap" v-show="isPlay">
<van-button type="info" block @click="endLearn">上传学习记录</van-button>
</div>
<!-- <div class="bottom-wrap" v-show="isPlay">-->
<!-- <van-button type="info" block @click="endLearn">上传学习记录</van-button>-->
<!-- </div>-->
</div>
@@ -213,6 +240,8 @@ layout("/mobile/platform.html"){
player: null,
vvv: []
}
},
@@ -221,8 +250,8 @@ layout("/mobile/platform.html"){
methods: {
async getVideoInfo() {
const {data} = await $.get('/mobile/trainEducation/getVideoList', {albumId: this.albumId})
this.vvv = data
this.videoList = data
},
async getAlbumInfo() {
const {data} = await $.get('/mobile/trainEducation/getAlbumInfo', {id: this.albumId})
@@ -364,7 +393,7 @@ layout("/mobile/platform.html"){
if (resp.code === 0) {
this.$modal.msgSuccess('上传成功')
} else {
this.$modal.msgError('上传成功')
this.$modal.msgError('上传失败')
}
}).catch(err => {
console.log(err)
@@ -373,14 +402,19 @@ layout("/mobile/platform.html"){
}
},
created() {
async created() {
// this.watchPage()
const id = this.GetQueryString("id")
const id = GetQueryString("id")
if (id) {
this.albumId = id
this.getAlbumInfo()
this.getVideoInfo()
this.getMyWatchRecord()
await this.getAlbumInfo()
await this.getVideoInfo()
await this.getMyWatchRecord()
if (this.videoList && this.videoList.length > 0) {
this.playVideo(this.videoList[0])
} else {
this.$toast('暂无视频学习')
}
}
}
})
@@ -140,6 +140,14 @@ layout("/mobile/platform.html"){
this.pageData()
},
async toCommentator(o){
const start = new Date(o.startTime);
const end = new Date(o.endTime);
const now = new Date();
// 检查当前时间是否在 startTime 和 endTime 之间
return now >= start && now <= end;
//自评模式
if (o.reviewMode == 1 && !o.canJoin) {
vant.Dialog.alert({
@@ -158,7 +166,7 @@ layout("/mobile/platform.html"){
confirmButtonColor: '#1867b0'
})
return
}
}``
const resp = await $.get('/mobile/wakeshome/review/appraisal/isAssess',{id:o.id})
if (resp.data > 0){
@@ -265,12 +265,12 @@ layout("/layouts/platform.html"){
<el-table-column align="center" header-align="center" label="上传时间" prop="hdsbsj"
show-overflow-tooltip>
</el-table-column>
<el-table-column align="center" header-align="center" label="申请状态"
<!--<el-table-column align="center" header-align="center" label="申请状态"
prop="auditState" sortable>
<template scope="scope">
<span :style="'color:'+scope.row.statecolor">{{scope.row.statename}}</span>
</template>
</el-table-column>
</el-table-column>-->
<!-- <el-table-column align="center" header-align="center" label="总点赞数"
prop="dz_znum" sortable>
<template scope="scope">
@@ -721,9 +721,9 @@ layout("/layouts/platform.html"){
// this.getActivitybxAgenda();
this.getDifficultAgenda();
this.getCondolenceAgenda();
this.getTaAgenda();
// this.getTaAgenda();
this.getRxdjAgenda();
this.getMemberAgenda();
// this.getMemberAgenda();
this.getSyrAgenda();
this.getOfferAdviceAgenda()
}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -46,8 +46,16 @@ layout("/layouts/platform.html"){
:prop="column.prop"
:sortable="column.sortable"
>
<template v-if="column.prop==='sumDuration'" scope="{row}">
{{(row.sumDuration / 60 / 60).toFixed(2) + 'h'}}
<!-- <template v-if="column.prop==='sumDuration'" scope="{row}">-->
<!-- {{(row.sumDuration / 60 / 60).toFixed(2) + 'h'}}-->
<!-- </template>-->
<template v-if="column.prop==='isQualified'" scope="{row}">
<span v-if="row.watchCount>=row.qualifiedNum" class="text-success">
是
</span>
<span v-else class="text-danger">
否
</span>
</template>
</el-table-column>
<!-- <el-table-column align="center" header-align="center" label="操作" width="200">-->
@@ -110,7 +118,8 @@ layout("/layouts/platform.html"){
{prop: 'unitname', label: '单位'},
{prop: 'unionname', label: '分工会'},
// {prop: 'studyDuration', label: '观看总时长'},
{prop: 'watchCount', label: '学习总次数'}
{prop: 'watchCount', label: '学习总次数'},
{prop: 'isQualified', label: '是否达标'},
],
viewTableColumns: [
{prop: 'username', label: '姓名'},
@@ -118,7 +127,7 @@ layout("/layouts/platform.html"){
{prop: 'unitname', label: '单位'},
{prop: 'unionname', label: '分工会'},
// {prop: 'studyDuration', label: '观看总时长'},
{prop: 'watchCount', label: '学习总次数'}
{prop: 'watchCount', label: '学习总次数'},
],
viewPageForm: {
pageNumber: 1,
@@ -140,6 +140,10 @@ layout("/layouts/platform.html"){
<el-input-number :min="1" :max="100" v-model="formData.everyDayMaxWatchNum"></el-input-number>
</el-form-item>
<el-form-item label="合格/达标次数" prop="qualifiedNum">
<el-input-number :min="1" :max="1000" v-model="formData.qualifiedNum"></el-input-number>
</el-form-item>
<el-form-item label="是否启用" prop="disabled">
<el-switch
v-model="formData.disabled"
@@ -187,7 +187,7 @@ layout("/layouts/platform.html"){
</span>
</el-dialog>
<el-dialog title="资料阅览" :visible.sync="viewDialogVisible">
<el-dialog title="资料阅览" :visible.sync="viewDialogVisible" :modal-append-to-body="false">
<el-descriptions class="margin-top" title="" :column="2" border>
<el-descriptions-item span="2">
<template slot="label">资料名称</template>
@@ -68,6 +68,10 @@ layout("/layouts/platform.html"){
<el-form-item class="is-required" label="基层工会简况"
prop="basicInformation">
<text-editor v-model="formData.basicInformation"></text-editor>
<div style="text-align: right">
<span style="color: #0a84ff">当前字数:{{ formData.basicInformation ? (dd3s.html2txt(formData.basicInformation).length) : 0 }}</span>
<span>{{ ';最多500字' }}</span>
</div>
<!-- <el-input type="textarea" v-model="formData.basicInformation" maxlength="500" show-word-limit :rows="10"></el-input>-->
</el-form-item>
</el-col>
@@ -193,11 +193,11 @@ layout("/layouts/platform.html"){
<el-col :lg="24" :sm="24">
<el-form-item required label="附件上传" prop="files">
<file-upload :files.sync="formData.files" card :max="10"
:type="['doc','docx','xls','xlsx','pdf','ppt','mp4', 'jpg', 'png', 'jpeg']">
:type="['doc','docx','xls','xlsx','pdf','ppt', 'jpg', 'png', 'jpeg']">
<template #el-upload__tip>
</template>
</file-upload>
<div class="el-upload__tip">可上传照片、视频、文档等资料,视频只能上传MP4格式</div>
<div class="el-upload__tip">可上传照片、文档等资料</div>
</el-form-item>
</el-col>
</el-row>
@@ -248,7 +248,7 @@ layout("/layouts/platform.html"){
if (resp.code === 0) {
this.notifySuccess(resp.msg)
setTimeout(() => {
sublime.jumpPagePjax('/platform/wakeshome/declaration/mine')
sublime.jumpPagePjax('/platform/wakeshome/info/mine')
}, 500)
} else {
this.notifyWarning(resp.msg)
@@ -270,7 +270,7 @@ layout("/layouts/platform.html"){
if (resp.code === 0) {
this.notifySuccess(resp.msg)
setTimeout(() => {
sublime.jumpPagePjax('/platform/wakeshome/declaration/mine')
sublime.jumpPagePjax('/platform/wakeshome/info/mine')
}, 500)
} else {
this.notifyWarning(resp.msg)
@@ -296,7 +296,7 @@ layout("/layouts/platform.html"){
this.$set(this.formData, 'applyTime', moment().format('YYYY-MM-DD'))
this.$set(this.formData, 'unionName', "${@shiro.getPrincipalProperty('union').getUnionname()}")
} else {
const resp = await $.get('/platform/wakeshome/declaration/mine/getInfoById',{id:this.id})
const resp = await $.get('/platform/wakeshome/info/mine/getInfoById',{id:this.id})
if (resp.code === 0){
this.formData = {...resp.data}
}
@@ -70,7 +70,7 @@ layout("/layouts/platform.html"){
</el-button>
<el-button @click="openEdit(row)"
size="mini" type="primary"
v-if="[8100].includes(row.state) || !row.state">编辑
v-if="[8100,8125].includes(row.state) || !row.state">编辑
</el-button>
<el-button @click="doDelete(row)"
size="mini" type="danger"
@@ -143,7 +143,7 @@ layout("/layouts/platform.html"){
},
openEdit(row) {
sublime.jumpPagePjax('/platform/wakeshome/declaration/apply?id=' + row.id)
sublime.jumpPagePjax('/platform/wakeshome/info/apply?id=' + row.id)
},
async flushUnits() {
this.$set(this.pageForm, "unitId", null)
@@ -70,7 +70,7 @@ layout("/layouts/platform.html"){
</el-table-column>
<el-table-column align="center" header-align="center" label="操作" fixed="right" width="150px">
<template scope="{row}">
<el-button @click="openView(row)" v-if="![8120].includes(row.state) && row.state" size="mini" type="primary">查看</el-button>
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
<el-button @click="openAudit(row)" v-if="[8120].includes(row.state) || !row.state" size="mini" type="primary">审核</el-button>
<el-button @click="doRollBack(row.id)" v-if="[8125,8130].includes(row.state) || !row.state" size="mini" type="danger">撤回</el-button>
</template>
@@ -164,7 +164,7 @@ layout("/layouts/platform.html"){
align="center">
<template scope="{row}">
<el-input v-model="row.inspection"
readonly></el-input>
readonly type="textarea" rows="2"></el-input>
</template>
</el-table-column>
@@ -396,12 +396,15 @@ layout("/layouts/platform.html"){
if (!this.formData.reviewResult) {
await this.createdReviewResult()
}
this.formData.bzList = JSON.stringify(this.formData.bzList)
const resp = await $.post('/mobile/wakeshome/review/appraisal/doSubmit',this.formData)
if (resp.code === 0) {
this.$message.success('提交成功')
this.$refs.guava.index()
this.formData = {}
this.pageData()
} else {
this.$message.warning(resp.msg)
}
})
@@ -437,8 +440,6 @@ layout("/layouts/platform.html"){
this.formData.evaluatedPersonName = user.username
this.formData.evaluatedPersonType = user.evaluatedPersonType
}
this.formData.bzList = JSON.stringify(this.formData.bzList)
},
},
async created() {
@@ -88,7 +88,6 @@ layout("/layouts/platform.html"){
</template>
<template #view>
<union-comment-zb :data="viewData" :is_view="true"></union-comment-zb>
</template>
</guava>
@@ -81,8 +81,12 @@ layout("/layouts/platform.html"){
width="240px" fixed="right">
<template scope="{row}">
<el-button size="mini" @click="openView(row)">查看</el-button>
<el-tooltip :content="canDownload ? ('导出【'+ row.unionName +'】管理员自我评议的评议结果') : ('导出【'+ row.unionName +'】下所有评议结果的压缩包') " placement="top">
<el-button v-if="canDownload" size="mini" type="primary" @click="doDownLoad(row,canDownload)">导出</el-button>
<el-tooltip
:content="canDownload ? ('导出【'+ row.unionName +'】管理员自我评议的评议结果') : ('导出【'+ row.unionName +'】下所有评议结果的压缩包') "
placement="top">
<el-button v-if="canDownload" size="mini" type="primary"
@click="doDownLoad(row,canDownload)">导出
</el-button>
</el-tooltip>
<el-button size="mini" type="primary" @click="downloadFilesByUnion(row)">导出附件</el-button>
</template>
@@ -155,9 +159,10 @@ layout("/layouts/platform.html"){
<el-table-column prop="userOnline" align="center" header-align="center"
label="操作" width="240px" fixed="right">
<template scope="{row}">
<el-button plain size="mini" @click="openUserView(row)">查看</el-button>
<el-button plain size="mini" type="primary" @click="downloadByPeoId(row)">导出</el-button>
<el-button plain size="mini" type="primary" @click="downloadFilesByPeoId(row)">导出附件</el-button>
<el-button size="mini" @click="openUserView(row)">查看</el-button>
<el-button size="mini" type="primary" @click="downloadByPeoId(row)">导出</el-button>
<el-button size="mini" type="primary" @click="downloadFilesByPeoId(row)">导出附件
</el-button>
</template>
</el-table-column>
</el-table>
@@ -237,7 +242,7 @@ layout("/layouts/platform.html"){
'wakes-home-review': httpVueLoader('/components/wakeshome/review/ReviewResult.vue?v=' + moment(new Date()).unix()),
},
methods: {
doDownLoad(row,flag){
doDownLoad(row, flag) {
if (flag) {
// 为true,自我评议
window.open(loc() + '/doDownLoadSingleByUnionId?zbId=' + this.pageForm.zbId + '&unionId=' + row.id)
@@ -246,15 +251,37 @@ layout("/layouts/platform.html"){
window.open(loc() + '/doDownLoadZipByUnionId?zbId=' + this.pageForm.zbId + '&unionId=' + row.id)
}
},
downloadFilesByUnion(row){
downloadFilesByUnion(row) {
const result = this.validateHasFiles({unionId: row.id, zbId: this.pageForm.zbId})
if (!result) {
return
}
window.open(loc() + '/exportFilesByUnionId?zbId=' + this.pageForm.zbId + '&unionId=' + row.id)
},
downloadByPeoId(row){
downloadByPeoId(row) {
window.open(loc() + '/exportByPeoId?peoId=' + row.id)
},
downloadFilesByPeoId(){
downloadFilesByPeoId(row) {
const result = this.validateHasFiles({peoId: row.id})
if (!result) {
return
}
window.open(loc() + '/exportFilesByPeoId?peoId=' + row.id)
},
validateHasFiles(data) {
$.post('/platform/wakeshome/review/statistics/validateHasFiles', {
peoId: data.peoId ? data.peoId : '',
zbId: data.zbId ? data.zbId : '',
unionId: data.unionId ? data.unionId : ''
}).then(res => {
if (res.code === 0) {
return true
} else {
this.$message.warning("未上传附件,无法导出")
return false
}
})
},
async getReviewResultNum(row) {
const res = await $.post(loc() + "/getReviewResultNum", {
zbId: this.userPageForm.zbId,
@@ -318,8 +345,8 @@ layout("/layouts/platform.html"){
},
computed: {
canDownload() {
const data = this.zbList.find(v=> v.id === this.pageForm.zbId)
return data.commentTarget===3 && data.unionIds && data.unionIds.length > 0
const data = this.zbList.find(v => v.id === this.pageForm.zbId)
return data.commentTarget === 3 && data.unionIds && data.unionIds.length > 0
}
},
async created() {