556 lines
24 KiB
HTML
556 lines
24 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||
<!-- 在 head 标签中添加 meta 标签,并设置 viewport-fit=cover 值 -->
|
||
<meta name="viewport"
|
||
content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, viewport-fit=cover">
|
||
<title>Title</title>
|
||
<!-- 引入样式文件 -->
|
||
<link rel="stylesheet" href="https://cdn.staticfile.org/vant/2.12.5/index.min.css">
|
||
<link rel="stylesheet" href="https://res.wx.qq.com/open/libs/weui/2.2.0/weui.min.css">
|
||
|
||
<!-- 引入 Vue 和 Vant 的 JS 文件 -->
|
||
<script src="https://cdn.staticfile.org/vue/2.6.9/vue.min.js"></script>
|
||
<script src="https://cdn.staticfile.org/vant/2.12.5/vant.js"></script>
|
||
<script src="https://cdn.staticfile.org/jquery/2.2.4/jquery.js"></script>
|
||
<script src="/assets/platform/plugins/moment/moment.min.js"></script>
|
||
|
||
</head>
|
||
<style>
|
||
html, body {
|
||
position: absolute;
|
||
top: 0;
|
||
left: 0;
|
||
right: 0;
|
||
margin: auto;
|
||
max-width: 600px;
|
||
background-color: white;
|
||
}
|
||
|
||
html::-webkit-scrollbar {
|
||
display: none
|
||
}
|
||
|
||
[v-clock] {
|
||
display: none
|
||
}
|
||
|
||
html, body {
|
||
font-family: PingFang SC, 'Helvetica Neue', Arial, sans-serif;
|
||
}
|
||
|
||
.page-v {
|
||
width: 100%;
|
||
position: relative;
|
||
margin-bottom: 50px;
|
||
}
|
||
|
||
.detail-v {
|
||
margin-top: 15px;
|
||
padding-bottom: 30px;
|
||
}
|
||
|
||
.p15 {
|
||
padding: 0 15px;
|
||
}
|
||
|
||
.njuColor {
|
||
color: rgb(106, 0, 95);
|
||
}
|
||
|
||
.title-v {
|
||
margin: 10px 0;
|
||
}
|
||
|
||
.form-v {
|
||
/*margin-top: 20px;*/
|
||
}
|
||
|
||
.van-doc-demo-block__title {
|
||
margin: 0;
|
||
padding: 0 16px;
|
||
color: rgba(69, 90, 100, 0.6);
|
||
font-weight: normal;
|
||
font-size: 14px;
|
||
line-height: 16px;
|
||
}
|
||
|
||
.goods-card {
|
||
margin: 0;
|
||
background-color: white;
|
||
}
|
||
|
||
.delete-button {
|
||
height: 100%;
|
||
}
|
||
|
||
.van-swipe-cell__wrapper {
|
||
border: none;
|
||
}
|
||
</style>
|
||
<body>
|
||
<div v-clock id="app">
|
||
<div>
|
||
<van-swipe v-if="boxData.files&&boxData.files.length>0" class="my-swipe" :autoplay="3000"
|
||
indicator-color="white">
|
||
<van-swipe-item v-for="url in boxData.files">
|
||
<van-image
|
||
width="100%"
|
||
height="200px"
|
||
fit="cover"
|
||
:src="'${AppFileDomain!}/fileStreamPreview?id='+url.id"
|
||
></van-image>
|
||
</van-swipe-item>
|
||
</van-swipe>
|
||
<van-image
|
||
v-else
|
||
width="100%"
|
||
height="200px"
|
||
fit="cover"
|
||
src="***"
|
||
>
|
||
<template v-slot:error>封面图片</template>
|
||
</van-image>
|
||
</div>
|
||
<div v-if="active==0" class="page-v">
|
||
<div class="detail-v">
|
||
<div class="title-v p15">
|
||
<h3 :style="'color: '+boxData.hdcolor">活动介绍</h3>
|
||
<div class="van-hairline--top"></div>
|
||
<br/>
|
||
</div>
|
||
<div class="p15">
|
||
<div v-html="boxData.hdjs"></div>
|
||
</div>
|
||
<div class="title-v p15">
|
||
<br/>
|
||
<h3 :style="'color: '+boxData.hdcolor">参加人员</h3>
|
||
<div class="van-hairline--top"></div>
|
||
<br/>
|
||
</div>
|
||
<div class="p15">
|
||
<div v-html="boxData.hdcjry"></div>
|
||
</div>
|
||
<div class="title-v p15">
|
||
<br/>
|
||
<h3 :style="'color: '+boxData.hdcolor">奖励方式</h3>
|
||
<div class="van-hairline--top"></div>
|
||
<br/>
|
||
</div>
|
||
<div class="p15">
|
||
<div v-html="boxData.hdjlfs"></div>
|
||
</div>
|
||
<div class="title-v p15">
|
||
<br/>
|
||
<h3 :style="'color: '+boxData.hdcolor">活动内容</h3>
|
||
<div class="van-hairline--top"></div>
|
||
<br/>
|
||
</div>
|
||
<div class="p15">
|
||
<div v-html="boxData.hdnr"></div>
|
||
</div>
|
||
<div class="title-v p15">
|
||
<br/>
|
||
<h3 :style="'color: '+boxData.hdcolor">活动联系人</h3>
|
||
<div class="van-hairline--top"></div>
|
||
<br/>
|
||
</div>
|
||
<div class="p15" style="line-height:24pt;">
|
||
<div v-html="boxData.hdlxr"></div>
|
||
</div>
|
||
<div class="title-v p15" v-if="!isNull(boxData.hdother.replace(/<.*?>/g,''))">
|
||
<br/>
|
||
<h3 :style="'color: '+boxData.hdcolor">其他</h3>
|
||
<div class="van-hairline--top"></div>
|
||
<br/>
|
||
</div>
|
||
<div class="p15" style="line-height:24pt;" v-if="!isNull(boxData.hdother.replace(/<.*?>/g,''))">
|
||
<div v-html="boxData.hdother"></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div v-if="active==1" class="page-v">
|
||
<div class="detail-v" style="margin-top: 0">
|
||
<div class="weui-msg" v-if="showMsg">
|
||
<div class="weui-msg__icon-area">
|
||
<van-circle
|
||
layer-color="rgb(240,240,240)"
|
||
color="#07c160"
|
||
stroke-width="50"
|
||
v-if="showPlan"
|
||
v-model="percent"
|
||
:rate="percent"
|
||
:clockwise="false"
|
||
:text="percent+' %'"
|
||
></van-circle>
|
||
<span v-if="showPlan==false">
|
||
<i v-if="flag" class="weui-icon-success weui-icon_msg"></i>
|
||
<i v-if="!flag" class="weui-icon-warn weui-icon_msg"></i>
|
||
</span>
|
||
|
||
</div>
|
||
<div class="weui-msg__text-area">
|
||
<h2 class="weui-msg__title" v-if="showPlan">上传中...</h2>
|
||
<h2 class="weui-msg__title" v-if="!showPlan&&flag">上传成功!</h2>
|
||
<h2 class="weui-msg__title" v-if="!showPlan&&!flag">上传失败!</h2>
|
||
<div v-html="msg"></div>
|
||
</div>
|
||
<div class="weui-msg__opr-area">
|
||
<p class="weui-btn-area">
|
||
<a v-if="!showPlan" @click="showMsg=false"
|
||
:class="flag?'weui-btn weui-btn_primary':'weui-btn weui-btn_warn'">{{flag ? '确定' : '返回'}}</a>
|
||
</p>
|
||
</div>
|
||
</div>
|
||
<div class="form-v" v-if="!showMsg">
|
||
<div style="width: 100%;padding: 16px 0;">
|
||
<h2 class="van-doc-demo-block__title" :style="'font-weight: bolder;color: '+boxData.hdcolor">
|
||
基本信息</h2>
|
||
</div>
|
||
<van-cell-group>
|
||
<van-field
|
||
@input="doInput"
|
||
required
|
||
v-model="formData.loginname"
|
||
name="工资号"
|
||
label="工  号"
|
||
placeholder="工资号"
|
||
:rules="[{ required: true, message: '请填写工资号' }]"
|
||
></van-field>
|
||
<van-field
|
||
disabled
|
||
v-model="formData.username"
|
||
name="姓名"
|
||
label="姓  名"
|
||
:placeholder="getPlaceholder(formData,'username')"
|
||
></van-field>
|
||
<van-field
|
||
disabled
|
||
v-model="formData.unionname"
|
||
name="所属工会"
|
||
label="所属工会"
|
||
:placeholder="getPlaceholder(formData,'unionname')"
|
||
></van-field>
|
||
</van-cell-group>
|
||
<div style="width: 100%;padding: 16px 0;">
|
||
<span class="van-doc-demo-block__title" :style="'font-weight: bolder;color: '+boxData.hdcolor">
|
||
作品信息</span>
|
||
<p class="van-doc-demo-block__title" style="margin-top: 5px;color: red">
|
||
(如同时参加以下多个活动,或有多个主题,请分别提交)</p>
|
||
|
||
</div>
|
||
<van-tabs v-model="hdzplx" :color="boxData.hdcolor" type="line">
|
||
<van-tab v-for="lb,idx in boxData.lbs" :name="idx+1+''" :title="lb.lname">
|
||
<van-form @submit="doSubmit">
|
||
<van-field style="padding-top: 30px" maxlength="15"
|
||
:rules="[{ required: true, message: '请填写作品主题' }]"
|
||
v-model="formData.hdsbzpzt"
|
||
required
|
||
show-word-limit
|
||
label="作品主题" placeholder="主题"></van-field>
|
||
<van-field
|
||
v-if="lb.zplbs&&lb.zplbs.length>0"
|
||
required
|
||
readonly
|
||
clickable
|
||
name="picker"
|
||
:value="formData.hdzplx2"
|
||
@confirm="onConfirm"
|
||
label="作品类别"
|
||
placeholder="点击选择作品类别"
|
||
@click="showPicker = true"
|
||
:rules="[{ required: true, message: '请选择作品类别' }]"
|
||
></van-field>
|
||
<van-popup v-model="showPicker" position="bottom">
|
||
<van-picker
|
||
show-toolbar
|
||
value-key="zname"
|
||
:columns="lb.zplbs"
|
||
@confirm="onConfirm"
|
||
@cancel="showPicker = false"
|
||
></van-picker>
|
||
</van-popup>
|
||
<van-field type="textarea" show-word-limit maxlength="100" autosize
|
||
v-model="formData.hdsbzpms"
|
||
label="作品介绍"
|
||
placeholder="介绍"></van-field>
|
||
<van-field label="图  片" disabled placeholder="(左滑删除单个文件)" style="border: none;"
|
||
input-align="right"></van-field>
|
||
<van-swipe-cell v-for="img,idx in formData.imgList" style="border: none;padding-top: 20px;">
|
||
<van-row style="padding: 0 15px">
|
||
<van-col :span="6">
|
||
<van-image
|
||
width="100%"
|
||
height="25vw"
|
||
fit="cover"
|
||
:src="img.content"
|
||
></van-image>
|
||
</van-col>
|
||
<van-col :span="18">
|
||
<van-field style="width: 100%;height: 25vm;padding-right: 0;" autosize
|
||
v-model="img.ms"
|
||
type="textarea" rows="2"
|
||
maxlength="50"
|
||
:show-word-limit="!isNull(img.ms)"
|
||
placeholder="请输入描述信息"></van-field>
|
||
</van-col>
|
||
</van-row>
|
||
|
||
<van-button
|
||
native-type="button"
|
||
@click="formData.imgList.splice(idx,1)"
|
||
slot="right"
|
||
square
|
||
text="删除"
|
||
type="danger"
|
||
class="delete-button"
|
||
/>
|
||
</van-swipe-cell>
|
||
<van-field>
|
||
<template #input>
|
||
<van-uploader multiple :preview-image="false" :before-read="beforeReadImg"
|
||
accept="image/*"
|
||
:max-count="5"
|
||
v-model="formData.imgList">
|
||
</van-uploader>
|
||
</template>
|
||
</van-field>
|
||
<van-field label-width="150" label="音/视频、文档" disabled style="border: none;"
|
||
input-align="right"></van-field>
|
||
<van-swipe-cell v-for="video,idx in formData.videoList"
|
||
style="border: none;padding-top: 20px;">
|
||
<van-row style="padding: 0 15px">
|
||
<van-col :span="6">
|
||
<van-image
|
||
width="100%"
|
||
height="25vw"
|
||
fit="cover"
|
||
src="1"
|
||
>
|
||
<template v-slot:error>
|
||
<i class="van-icon van-icon-description van-uploader__file-icon">
|
||
<!----></i>
|
||
<div class="van-uploader__file-name van-ellipsis">{{video.file.name}}
|
||
</div>
|
||
</template>
|
||
</van-image>
|
||
</van-col>
|
||
<van-col :span="18">
|
||
<van-field style="width: 100%;padding-right: 0;" autosize v-model="video.ms"
|
||
type="textarea" rows="2"
|
||
maxlength="50"
|
||
:show-word-limit="!isNull(video.ms)"
|
||
placeholder="请输入描述信息"></van-field>
|
||
</van-col>
|
||
</van-row>
|
||
|
||
<van-button
|
||
native-type="button"
|
||
@click="formData.videoList.splice(idx,1)"
|
||
slot="right"
|
||
square
|
||
text="删除"
|
||
type="danger"
|
||
class="delete-button"
|
||
></van-button>
|
||
</van-swipe-cell>
|
||
<van-field>
|
||
<template #input>
|
||
<van-uploader :preview-image="false" result-type="file"
|
||
@oversize="vue.$toast.fail('文件大小不能超过200M!')"
|
||
:max-size="209715200"
|
||
:before-read="beforeReadVideo" accept="*" :max-count="2"
|
||
v-model="formData.videoList"></van-uploader>
|
||
</template>
|
||
</van-field>
|
||
<span style="padding-left: 15px;font-size: 12px;color: rgb(160,160,160)">(注意:图片最多5张,视频最大200M。)</span>
|
||
<div style="margin: 16px;">
|
||
<van-button round block :color="boxData.hdcolor" type="info" native-type="submit">
|
||
提交
|
||
</van-button>
|
||
</div>
|
||
</van-form>
|
||
</van-tab>
|
||
</van-tabs>
|
||
</van-form>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
<van-tabbar
|
||
style="max-width: 600px;position: fixed;left: 0;bottom: 0;right: 0;margin: auto"
|
||
v-model="active"
|
||
:active-color="boxData.hdcolor"
|
||
inactive-color="#000"
|
||
>
|
||
<van-tabbar-item icon="label-o">介绍</van-tabbar-item>
|
||
<van-tabbar-item icon="edit">报名</van-tabbar-item>
|
||
</van-tabbar>
|
||
<van-number-keyboard safe-area-inset-bottom/>
|
||
</div>
|
||
<script src="https://cdn.staticfile.org/js-cookie/2.2.1/js.cookie.min.js"></script>
|
||
<script>
|
||
|
||
var xhrOnProgress = function (fun) {
|
||
xhrOnProgress.onprogress = fun; //绑定监听
|
||
//使用闭包实现监听绑
|
||
return function () {
|
||
//通过$.ajaxSettings.xhr();获得XMLHttpRequest对象
|
||
var xhr = $.ajaxSettings.xhr();
|
||
//判断监听函数是否为函数
|
||
if (typeof xhrOnProgress.onprogress !== 'function')
|
||
return xhr;
|
||
//如果有监听函数并且xhr对象支持绑定时就把监听函数绑定上去
|
||
if (xhrOnProgress.onprogress && xhr.upload) {
|
||
xhr.upload.onprogress = xhrOnProgress.onprogress;
|
||
}
|
||
return xhr;
|
||
}
|
||
}
|
||
|
||
function getSuffix(filename) {
|
||
return /\.[^\.]+$/.exec(filename)
|
||
}
|
||
|
||
var vue = new Vue({
|
||
el: "#app",
|
||
data: function () {
|
||
return {
|
||
boxData: {},
|
||
zplxObj: {'温馨生活': 1, '烹饪乐趣': 2, '创意手工': 3, '一封家书': 4},
|
||
zplxArr: ['温馨生活', '烹饪乐趣', '创意手工', '一封家书'],
|
||
zplxObj2: {'防控疫情': 1, '教学教研': 2, '服务保障': 3},
|
||
zplxArr2: ['防控疫情', '教学教研', '服务保障'],
|
||
showPicker: false,
|
||
showMsg: false,
|
||
percent: 0,
|
||
flag: true,
|
||
showPlan: true,
|
||
msg: '',
|
||
hdzplx: '1',
|
||
formData: {
|
||
hdsbzpzt: '',
|
||
hdsbzpms: '',
|
||
imgList: [],
|
||
videoList: [],
|
||
},
|
||
formData2: {
|
||
hdsbzpzt: '',
|
||
hdsbzpms: '',
|
||
imgList: [],
|
||
videoList: [],
|
||
},
|
||
active: 0,
|
||
isNull: function (val) {
|
||
if (val == null || val == undefined || val == '') {
|
||
return true
|
||
}
|
||
return false
|
||
},
|
||
imgtype: ['gif', 'jpg', 'png', 'jpeg'],
|
||
audiotype: ['mp3', 'wma', 'flac', 'wav', 'm4a', 'amr', 'au'],
|
||
doctype: ['doc', 'docx', 'txt'],
|
||
videotype: ['flv', 'swf', 'mkv', 'avi', 'rm', 'rmvb', 'wmv', 'mp4', 'mov', 'mpg', 'mpeg', 'quicktime'],
|
||
}
|
||
},
|
||
methods: {
|
||
onConfirm: function (value) {
|
||
this.formData.hdzplx2 = value.zname;
|
||
this.showPicker = false;
|
||
},
|
||
getPlaceholder: function (formData, key) {
|
||
if (vue.isNull(formData.userid)) {
|
||
return "输入工资号后自动匹配"
|
||
} else {
|
||
if (vue.isNull(formData[key])) {
|
||
return '暂无'
|
||
}
|
||
return formData[key]
|
||
}
|
||
},
|
||
doInput: function (val) {
|
||
vue.$set(vue.formData, 'username', undefined)
|
||
vue.$set(vue.formData, 'unionname', undefined)
|
||
vue.$set(vue.formData, 'userid', undefined)
|
||
$.get("/platform/hd/wm/wmMobile/queryUserByLoginname", {loginname: val}, function (data) {
|
||
if (data.code == 0) {
|
||
if (!vue.isNull(data.data)) {
|
||
vue.$set(vue.formData, 'userid', data.data.id)
|
||
vue.$set(vue.formData, 'username', data.data.username)
|
||
vue.$set(vue.formData, 'unionname', data.data.unionname)
|
||
}
|
||
}
|
||
})
|
||
},
|
||
doSubmit: function () {
|
||
if (vue.isNull(vue.formData.userid)) {
|
||
vue.$toast.fail("请正确填写您的工资号!")
|
||
return
|
||
}
|
||
if (vue.hdzplx == 1 && vue.formData.videoList.length == 0 && vue.formData.imgList.length == 0) {
|
||
vue.$toast.fail("请您选择要上传的作品!")
|
||
return
|
||
} else if (vue.hdzplx == 2 && vue.formData2.videoList.length == 0 && vue.formData2.imgList.length == 0) {
|
||
vue.$toast.fail("请您选择要上传的作品!")
|
||
return
|
||
}
|
||
|
||
var str = vue.hdzplx == 1 ? '巾帼担当篇' : '巾帼温馨篇'
|
||
|
||
vue.$dialog.confirm({
|
||
title: '提醒',
|
||
message: '您当前选择的是“' + str + '”,是否确认上传?上传后您将不能对已上传的作品进行更改'
|
||
}).then(function (value) {
|
||
|
||
}).catch(function (reason) {
|
||
|
||
});
|
||
},
|
||
// 返回布尔值
|
||
beforeReadImg: function (file) {
|
||
return true;
|
||
},
|
||
// 返回布尔值
|
||
beforeReadVideo: function (file, detail) {
|
||
var suffix = getSuffix(file.name)
|
||
if (suffix == null) {
|
||
vue.$toast('获取不到后缀名!');
|
||
return false;
|
||
}
|
||
return true;
|
||
},
|
||
},
|
||
created: function () {
|
||
var self = this
|
||
if (window.innerWidth > 800) {
|
||
self.$notify({type: 'warning', message: '当前窗口宽度过大!部分区域显示会出现大小偏差'});
|
||
}
|
||
var wmhd_boxdata = localStorage.getItem("wmhd_boxdata")
|
||
if (wmhd_boxdata) {
|
||
this.boxData = JSON.parse(wmhd_boxdata)
|
||
localStorage.removeItem("wmhd_boxdata")
|
||
} else {
|
||
this.boxData = {
|
||
hdjs: '填写活动介绍',
|
||
hdcjry: '填写活动参加人员',
|
||
hdjlfs: '填写活动奖励方式',
|
||
hdnr: '填写活动内容',
|
||
hdlxr: '填写活动联系人',
|
||
hdother: '其他内容',
|
||
hdcolor: '#6A005F',
|
||
fileList: [],
|
||
lbs: [{lname: '活动类别1', zplbs: [{zname: '作品类别1'}, {zname: '作品类别2'}]}, {
|
||
lname: '活动类别2',
|
||
zplbs: [{zname: '作品类别1'}, {zname: '作品类别2'}]
|
||
}]
|
||
}
|
||
}
|
||
|
||
}
|
||
})
|
||
</script>
|
||
</body>
|
||
</html> |