Files
UNION_HUTB/target/classes/views/platform/hd/filemange/FileMange.html
T
2026-09-09 09:14:28 +08:00

377 lines
17 KiB
HTML

<!--#
layout("/layouts/platform.html"){
#-->
<style>
.clearBtn {
position: absolute;
right: 20px;
top: 20px;
}
</style>
<div id="app" v-cloak>
<guava ref="guava">
<template>
<el-row class="header navbar bg-white shadow">
<div class="btn-group tool-button mt5">
<el-date-picker
v-model="pageForm.year"
type="year"
value-format="yyyy" style="width: 150px"
placeholder="选择年">
</el-date-picker>
</div>
<div class="btn-group tool-button mt5">
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword"
@keyup.enter.native="doSearch">
<el-select v-model="pageForm.searchName" slot="prepend" placeholder="查询类型"
style="width: 120px;">
<el-option label="活动名称" value="hd.name"></el-option>
</el-select>
</el-input>
</div>
<div class="btn-group tool-button mt5" v-if="all">
<el-select v-model="pageForm.type" placeholder="活动组织单位" filterable clearable style="width: 160px;">
<el-option
v-for="item in [{id:1,name:'校工会活动'},{id:2,name:'院级工会活动'},{id:3,name:'协会活动'}]"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</div>
<div class="btn-group tool-button mt5" v-if="all">
<el-select v-model="pageForm.unionId" placeholder="工会" filterable clearable
:disabled="[1].includes(pageForm.type)" style="width: 160px;">
<el-option
v-for="item in unions"
:key="item.id"
:label="item.unionname"
:value="item.id">
</el-option>
</el-select>
</div>
<div class="btn-group tool-button mt5" v-if="all">
<el-select v-model="pageForm.clubId" placeholder="协会" filterable clearable
:disabled="[1].includes(pageForm.type)" style="width: 160px;">
<el-option
v-for="item in clubs"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</div>
<div class="btn-group tool-button mt5">
<el-button type="primary" icon="el-icon-search" @click="doSearch"></el-button>
</div>
</el-row>
<el-row class="el-table-container">
<el-table :data="tableData" style="width: 100%" row-key="id" @sort-change="pageOrder">
<el-table-column align="center" header-align="center" label="序号" type="index">
<template scope="scope">
<span>{{scope.$index+(pageForm.pageNumber - 1) * pageForm.pageSize + 1}} </span>
</template>
</el-table-column>
<el-table-column label="活动名称" prop="name" header-align="center" align="left" show-overflow-tooltip>
<template scope="{row}">
<el-link type="primary" @click="openView(row)"><i>{{row.name}}</i></el-link>
</template>
</el-table-column>
<el-table-column label="活动类型" prop="style" header-align="center"
align="center" sortable></el-table-column>
<el-table-column label="活动项目" prop="project" header-align="center"
align="center" sortable></el-table-column>
<el-table-column label="活动组织单位" prop="be_time" header-align="center"
align="center" sortable>
<template scope="{row:{type,unionname,clubname}}">
<span v-if="type==1">校工会活动</span>
<span v-if="type==2&&unionname">{{unionname}}</span>
<span v-if="type==3&&clubname">{{clubname}}</span>
</template>
</el-table-column>
<el-table-column label="活动日期" prop="be_time" header-align="center"
align="center" sortable>
<template scope="{row:{be_time,end_time}}">
{{moment(be_time).format('YYYY-MM-DD')}}
<!-- {{be_time}} - {{end_time}}-->
</template>
</el-table-column>
<el-table-column label="活动状态" prop="status" header-align="center"
align="center" sortable>
<template scope="{row:{apply_be_time,apply_end_time,be_time,end_time}}">
<div v-html="getStatus(apply_be_time,apply_end_time,be_time,end_time)"></div>
</template>
</el-table-column>
<el-table-column align="center" header-align="center" label="操作" width="180px">
<template scope="{row}">
<el-button size="mini" icon="el-icon-zoom-in" @click="openView(row)">查看</el-button>
<el-button icon="el-icon-upload" size="mini" @click="openAdd(row)">上传</el-button>
</template>
</el-table-column>
</el-table>
</el-row>
<!--#include("/layouts/pagination.html"){}#-->
</template>
<template #edit>
<el-form :model="formData" ref="form" :rules="formRules" label-width="120px">
<el-form-item label="填写资料信息&emsp;" label-width="135px" class="view-header">
</el-form-item>
<el-row gutter="20">
<el-col :span="12">
<el-form-item prop="activity_name" label="活&emsp;&emsp;动">
<el-input disabled v-model="formData.activity_name" type="text"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="username" label="上传人">
<el-input disabled v-model="formData.username" type="text"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row gutter="20">
<el-col :span="12">
<el-form-item prop="name" label="资料名称">
<el-input maxlength="100" placeholder="请填写资料名称" v-model="formData.name"
type="text"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="type" label="资料类型">
<el-select v-model="formData.type" placeholder="请选择资料类型"
style="width: 100%;">
<el-option
v-for="item in fileType"
:key="item.name"
:label="item.name"
:value="item.name">
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row gutter="20">
<el-col :span="12">
<el-form-item prop="files" label="文&emsp;&emsp;件">
<file-upload :files.sync="formData.files" card></file-upload>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div style="float: right;margin: 20px 0">
<el-button plain type="primary" @click="doAdd">确 定</el-button>
</div>
</template>
<template #view>
<div class="block">
<el-timeline>
<el-timeline-item v-for="(v,k) in files" :timestamp="k" placement="top" icon="el-icon-more"
type="primary">
<el-card v-for="file,i in v" style="margin-bottom: 20px;position: relative">
<div class="clearBtn">
<el-button circle icon="el-icon-delete" @click="doDelete(k,i,file.id)"></el-button>
</div>
<div style="display: flex;flex-direction:row;">
<h4>{{file.name}}&emsp;</h4>
<h4><span style="font-size: 14px;color: rgb(200,200,200)">{{file.type}}</span></h4>
</div>
<div style="margin: 20px 0">
<file-upload :files="file.files"
:view="true"></file-upload>
</div>
<div style="text-align: right" class="text-primary">{{file.user_name}}</div>
</el-card>
</el-timeline-item>
</el-timeline>
</div>
</template>
</guava>
</div>
<script>
const all = "${@shiro.hasAnyRoles('sysadmin,A06,xghhdwy')}" === 'true'
const union = "${@shiro.hasAnyRoles('H04,gh08')}" === 'true'
const club = "${@shiro.hasAnyRoles('H02')}" === 'true'
const vue = new Vue({
el: '#app',
mixins: [initTableMixins],
data() {
return {
tableData: [],
pageForm: {
searchName: 'hd.name',
year: moment().format("YYYY")
},
formRules: {
username: [{required: true, message: '必填', trigger: ['blur', 'change']}],
activity_name: [{required: true, message: '必填', trigger: ['blur', 'change']}],
name: [{required: true, message: '必填', trigger: ['blur', 'change']}],
type: [{required: true, message: '必填', trigger: ['blur', 'change']}],
files: [{required: true, message: '必填', trigger: ['blur', 'change']}],
},
unions: [],
clubs: [],
all, union, club,
fileType: [],
files: {},
}
},
components: {
'guava': httpVueLoader('/components/plugins/Guava.vue'),
'file-upload': httpVueLoader('/components/plugins/FileUpload.vue'),
},
methods: {
getStatus(apply_start_time, apply_end_time, start_time, end_time) {
// if (close) {
// return `<span class="el-tag el-tag--info el-tag--light">活动已关闭</span>`
// }
const now = moment().valueOf()
const dateNow = moment(moment(moment().format('YYYY-MM-DD')).valueOf()).valueOf()
if (dateNow < moment(apply_start_time).valueOf()) {
return `<span class="el-tag el-tag--danger el-tag--light">未开始报名</span>`
} else if (moment(apply_start_time).valueOf() <= dateNow && dateNow <= moment(apply_end_time).valueOf()) {
return `<span class="el-tag el-tag--success el-tag--light">活动报名中</span>`
} else if (moment(apply_end_time).valueOf() < now && now < moment(start_time).valueOf()) {
return `<span class="el-tag el-tag--warning el-tag--light">报名已结束</span>`
} else if (moment(start_time).valueOf() < now && now < moment(end_time).valueOf()) {
return `<span class="el-tag el-tag--light">活动进行中</span>`
} else if (moment(end_time).valueOf() < now) {
return `<span class="el-tag el-tag--info el-tag--light">活动已结束</span>`
}
},
doDelete(key, index, id) {
this.$confirm('确定要删除吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
callback: (a, b) => {
if ("confirm" == a) {//确认后再执行
$.post(loc() + "/delete", {id: id}, (data) => {
if (data.code == 0) {
this.$message.success(data.msg)
this.files[key].splice(index, 1)
if (!this.files[key].length) {
delete this.files[key]
let i = 0
for (let k in this.files) {
i += this.files[k].length
}
if (!i) {
this.$refs.guava.index()
}
}
} else {
this.$message.error(data.msg)
}
}, "json");
}
}
});
},
doAdd() {
this.$refs["form"].validate(async (valid) => {
if (valid) {
const loading = this.$loading({
lock: true,
text: '正在提交...',
spinner: 'el-icon-loading',
background: COVER_LAYER_COLOR
});
const resp = await $.post(location.href + "/doAdd", {
data: JSON.stringify(this.formData),
})
closeLoadingFunc(loading, resp, async () => {
this.$refs.guava.index()
this.openView({id: this.formData.activity_id})
}, (data, msg) => {
this.$message.error(msg);
})
}
});
},
async openView(row) {
const {id} = row
this.$set(row, "loading", true)
const resp = await $.get(loc() + "/getFiles", {id})
requestLaterFun(resp, (v) => {
this.$set(row, "loading", false)
if (!Object.keys(v).length) {
this.$notify({
title: '警告',
message: '该活动尚未上传资料!',
type: 'warning'
});
this.$refs.guava.index()
return
}
this.files = v
this.$refs.guava.view()
})
},
openAdd(row) {
this.formData = {
activity_id: row.id,
activity_name: row.name,
username: "${@shiro.getPrincipalProperty('username')}"
}
this.$refs.guava.edit()
if (this.$refs['form']) {
this.$refs['form'].resetFields()
}
},
},
async created() {
this.pageData();
if (all) {
this.unions = await getUnions()
this.clubs = await getClubs()
}
this.fileType = await getFileType()
}
})
</script>
<!--#
}
#-->