first commit

This commit is contained in:
2026-09-09 09:14:28 +08:00
commit 5343198112
5199 changed files with 1052895 additions and 0 deletions
@@ -0,0 +1,691 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style>
.el-icon-download {
color: white;
}
.file-down-span {
background: black;
opacity: 0.5;
z-index: 1000;
width: 100px;
text-align: center;
/*position: absolute;*/
position: relative;
bottom: -100px;
cursor: pointer;
}
.file-down-span:hover {
opacity: 0.9;
}
.el-icon-circle-close {
color: white;
}
.textareaDiv {
white-space: pre-wrap;
white-space: -moz-pre-wrap;
white-space: -o-pre-wrap;
word-wrap: break-word;
text-align: left;
}
</style>
<div id="app" v-cloak>
<el-row class="header navbar bg-white shadow">
<div class="btn-group tool-button mt5">
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyWord" class="input-with-select">
<el-select v-model="pageForm.searchName" slot="prepend" placeholder="请选择" style="width: 120px">
<el-option label="文件名称" value="file.title"></el-option>
<!-- <el-option label="活动名称" value="hdname"></el-option>-->
</el-select>
</el-input>
</div>
<div class="btn-group tool-button mt5">
<el-date-picker
style="width: 200px"
v-model="pageForm.year"
type="year" value-format="yyyy"
@change="yearChange('hdOptions','pageForm');pageForm.hdid_arr=null"
placeholder="选择年份" clearable>
</el-date-picker>
</div>
<div class="btn-group tool-button mt5">
<el-cascader style="width: 100%" clearable placeholder="请选择所属活动" :options="hdOptions"
v-model="pageForm.hdid_arr"
filterable :props="hdProps"></el-cascader>
</div>
<div class="btn-group tool-button mt5">
<el-button type="primary" @click="doSearch" icon="el-icon-search"></el-button>
</div>
<div class="pull-right offscreen-right mt5">
<el-button size="medium" @click="openAdd"><i class="el-icon-upload2"></i> 上传活动资料</el-button>
</div>
</el-row>
<el-row class="el-table-container">
<el-table
:data="tableData"
size="mini"
header-align="center"
@sort-change="pageOrder"
style="width: 100%"
>
<el-table-column label="序号" type="index" header-align="center" align="center">
<template scope="scope">
<span>{{scope.$index+(pageForm.pageNumber - 1) * pageForm.pageSize + 1}} </span>
</template>
</el-table-column>
<el-table-column
sortable
prop="year"
label="年份"
header-align="center" align="center">
</el-table-column>
<el-table-column
prop="title"
label="资料名称"
header-align="center" align="center">
</el-table-column>
<el-table-column
sortable
prop="hdtype"
label="活动类型"
header-align="center" align="center">
<template slot-scope="scope">
<span v-if="scope.row.hdtype==1">校工会活动</span>
<span v-if="scope.row.hdtype==2">基层工会活动</span>
<span v-if="scope.row.hdtype==3">协会活动</span>
</template>
</el-table-column>
<el-table-column
sortable
prop="hdname"
label="活动名称"
header-align="center" align="center">
</el-table-column>
<el-table-column
sortable
prop="username"
label="上传人"
header-align="center" align="center">
</el-table-column>
<el-table-column
sortable
prop="create_time"
label="上传时间"
header-align="center" align="center">
</el-table-column>
<el-table-column
prop="userOnline"
label="操作"
width="250" align="center">
<template slot-scope="scope">
<el-button size="mini" @click="openView(scope.row.id)">查看</el-button>
<el-button type="primary" @click="openEdit(scope.row.id)" size="mini">编辑</el-button>
<el-button type="danger" @click="doDelete(scope.row.id)" size="mini">删除</el-button>
</template>
</el-table-column>
</el-table>
</el-row>
<el-row class="el-pagination-container">
<el-pagination
@size-change="pageSizeChange"
@current-change="pageNumberChange"
:current-page="pageForm.pageNumber"
:page-sizes="[10, 20, 30, 50]"
:page-size="pageForm.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="pageForm.totalCount">
</el-pagination>
</el-row>
<!-- 新建-->
<el-dialog
title="上传活动资料"
:visible.sync="addDialogVisible"
:close-on-click-modal="false"
width="50%"
>
<el-form :model="formData" ref="addForm" :rules="formRules" size="medium" label-width="100px">
<el-divider content-position="left"><span style="color: #409eff">资料信息</span></el-divider>
<el-row>
<el-col :span="12">
<el-form-item prop="year" label="年&emsp;&emsp;份">
<el-date-picker
style="width: 100%;"
v-model="formData.year"
type="year" value-format="yyyy"
@change="yearChange('formHdOptions','formData');formData.hdid_arr=null"
placeholder="选择年份" clearable>
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="hdid_arr" label="所属活动">
<el-cascader style="width: 100%" @change="hdChange" placeholder="请选择所属活动"
:options="formHdOptions"
v-model="formData.hdid_arr"
filterable :props="hdProps"></el-cascader>
</el-form-item>
</el-col>
</el-row>
<el-form-item prop="title" label="资料名称">
<el-input maxlength="100" placeholder="请填写资料名称" v-model="formData.title" type="text"></el-input>
</el-form-item>
<el-form-item prop="description" label="资料描述">
<el-input maxlength="500" :autosize="{ minRows: 4, maxRows: 8}" placeholder="请填写资料描述"
v-model="formData.description" type="textarea"></el-input>
</el-form-item>
<el-divider content-position="left"><span style="color: #409eff">资料文件</span></el-divider>
<el-form-item prop="fjs" label="文&emsp;&emsp;件">
<el-upload
class="upload-demo"
accept="*"
action="****"
list-type="picture"
:on-remove="handleRemove"
:on-change="handleChange"
:auto-upload="false"
limit="5"
:file-list="fileList">
<el-button size="small" type="primary">点击上传</el-button>
<div slot="tip" class="el-upload__tip">只能上传jpg/jpeg/png/doc/docx/pdf/xls/xlsx/rar/zip/7z文件</div>
</el-upload>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="addDialogVisible = false">取 消</el-button>
<el-button type="primary" @click="doAdd">确 定</el-button>
</span>
</el-dialog>
<!-- 编辑-->
<el-dialog
title="修改活动资料"
:visible.sync="editDialogVisible"
:close-on-click-modal="false"
width="50%"
>
<el-form :model="formData" ref="editForm" :rules="formRules" size="medium" label-width="100px">
<el-divider content-position="left"><span style="color: #409eff">资料信息</span></el-divider>
<el-row>
<el-col :span="12">
<el-form-item prop="year" label="年&emsp;&emsp;份">
<el-date-picker
style="width: 100%;"
v-model="formData.year"
type="year" value-format="yyyy"
@change="yearChange('formHdOptions','formData');formData.hdid_arr=null"
placeholder="选择年份" clearable>
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="hdid_arr" label="所属活动">
<el-cascader style="width: 100%" @change="hdChange" placeholder="请选择所属活动"
:options="formHdOptions"
v-model="formData.hdid_arr"
filterable :props="hdProps"></el-cascader>
</el-form-item>
</el-col>
</el-row>
<el-form-item prop="title" label="资料名称">
<el-input maxlength="100" placeholder="请填写资料名称" v-model="formData.title" type="text"></el-input>
</el-form-item>
<el-form-item prop="description" label="资料描述">
<el-input maxlength="500" :autosize="{ minRows: 4, maxRows: 8}" placeholder="请填写资料描述"
v-model="formData.description" type="textarea"></el-input>
</el-form-item>
<el-divider content-position="left"><span style="color: #409eff">资料文件</span></el-divider>
<el-form-item prop="fjs" label="文&emsp;&emsp;件">
<el-upload
class="upload-demo"
accept="*"
action="****"
:on-remove="handleRemove"
:on-change="handleChange"
:auto-upload="false"
limit="5"
:file-list="fileList">
<el-button size="small" type="primary">点击上传</el-button>
<div slot="tip" class="el-upload__tip">只能上传jpg/jpeg/png/doc/docx/pdf/xls/xlsx/rar/zip/7z文件</div>
</el-upload>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="editDialogVisible = false">取 消</el-button>
<el-button type="primary" @click="doEdit">确 定</el-button>
</span>
</el-dialog>
<el-dialog
title="查看活动资料"
:visible.sync="viewDialogVisible"
:close-on-click-modal="false" custom-class="ViewDialogClass"
width="50%"
>
<el-collapse v-model="activeNames">
<el-collapse-item title="资料信息" name="1">
<table style="width: 100%">
<tr>
<td class="tpa">资料名称</td>
<td class="tpb" colspan="3">{{viewData.title}}</td>
</tr>
<tr>
<td class="tpa">年份</td>
<td class="tpb">{{viewData.year}}</td>
<td class="tpa">所属活动</td>
<td class="tpb">{{viewData.hdname}}</td>
</tr>
<tr>
<td class="tpa">上传人</td>
<td class="tpb">{{viewData.username}}</td>
<td class="tpa">上传时间</td>
<td class="tpb">{{viewData.create_time}}</td>
</tr>
<tr>
<td class="tpa">资料描述</td>
<td class="tpb textareaDiv" colspan="3">{{viewData.description}}</td>
</tr>
</table>
</el-collapse-item>
<el-collapse-item title="资料文件" name="2">
<div style="text-align: left;padding: 10px" v-if="viewData.fjs&&viewData.fjs.length">
<div v-for="item in viewData.fjs" style="display: inline-block;width: 100px;margin-right:10px">
<div class="file-down-span" @click="downLoad(item)">
<i class="el-icon-download"></i>
</div>
<el-image fit="cover" v-if="isImage(item.fjurl)"
style="width: 100px;height: 100px;box-shadow: 0 0 5px rgb(200,200,200)"
:src="'/platform/base/Common/showPic?fjurl='+item.fjurl"
:preview-src-list="prevImgList">
</el-image>
<el-image v-else style="width: 100px;height: 100px;box-shadow: 0 0 5px rgb(200,200,200)"
src="***">
<div slot="error" class="image-slot"
style="width: 100%;height: 100%; display:flex;align-items: center;text-align: center">
<span style="font-size: 12px;color: rgb(180,180,180);width: 100%;text-align: center;overflow: hidden;padding: 0 10px;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical">{{item.fjname}}</span>
</div>
</el-image>
</div>
</div>
<div v-else
style="width: 100%;height: 50px;line-height: 50px;text-align: center;color: rgb(180,180,180)">暂无文件
</div>
</el-collapse-item>
</el-collapse>
<span slot="footer" class="dialog-footer">
<el-button @click="viewDialogVisible = false">关闭</el-button>
</span>
</el-dialog>
</div>
<script>
const vue = new Vue({
el: '#app',
data() {
var valiHdid_arr = (rule, value, callback) => {
console.log(value)
if (!value) {
callback(new Error('请选择所属活动'));
} else if (value && value.length == 1) {
callback(new Error('请选择所属活动'));
} else {
callback()
}
};
return {
activeNames: ['1', '2'],
fileList: [],
userOptions: [],
loading: false,
formData: {},
addDialogVisible: false,
editDialogVisible: false,
viewDialogVisible: false,
tableData: [],
pageForm: {
searchName: "file.title",
searchKeyword: "",
pageNumber: 1,
pageSize: 10,
totalCount: 0,
pageOrderName: "",
pageOrderBy: ""
},
formRules: {
hdid_arr: [{validator: valiHdid_arr, trigger: ['blur', 'change']}],
year: [{required: true, message: '请选择年份', trigger: ['blur', 'change']}],
// hdid_arr: [{required: true, message: '请选择所属活动', trigger: ['blur', 'change']}],
title: [{required: true, message: '请填写资料名称', trigger: ['blur', 'change']}],
},
hdOptions: [],
formHdOptions: [],
hdProps: {
value: 'id',
label: 'name',
},
delFiles: [],
viewData: {},
prevImgList: [],
getSuffix: (name) => {
return name.substr(name.lastIndexOf('.') + 1).toLowerCase()
},
isImage: (path) => {
const imageType = ['jpg', 'jpeg', 'png']
return imageType.includes(this.getSuffix(path))
}
}
},
methods: {
async get_hd_options(year) {
let {data} = await $.post(base + "/platform/hd/file/manger/getHdOptions", {year: year}).then()
return data;
},
async yearChange(key, key2) {
const year = this[key2].year;
this[key] = await this.get_hd_options(year)
},
downLoad: function (item) {
location.href = '/platform/base/Common/download?filepath=' + item.fjurl + '&filename=' + item.fjname
},
openView(id) {
this.prevImgList = []
$.post(base + "/platform/hd/file/manger/findOne", {id: id}, (data) => {
if (data.code == 0) {
const getSuffix = (name) => {
return name.substr(name.lastIndexOf('.') + 1).toLowerCase()
}
const imageType = ['jpg', 'jpeg', 'png']
const {fjs} = data.data
data.data.images = []
data.data.files = []
fjs.forEach(fj => {
if (imageType.includes(getSuffix(fj.fjname))) {
data.data.images.push(fj)
this.prevImgList.push('/platform/base/Common/showPic?fjurl=' + fj.fjurl)
} else {
data.data.files.push(fj)
}
})
this.viewData = data.data;//加载后台表单数据
this.viewDialogVisible = true;//打开编辑窗口
} else {
this.$message({
message: data.msg,
type: 'error'
});
}
}, "json");
},
doDelete(id) {
this.$confirm('确定要删除吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
callback: function (a, b) {
if ("confirm" == a) {//确认后再执行
$.post(base + "/platform/hd/file/manger/delete", {id: id}, (data) => {
if (data.code == 0) {
vue.$message({
message: data.msg,
type: 'success'
});
vue.pageData();
} else {
vue.$message({
message: data.msg,
type: 'error'
});
}
}, "json");
}
}
});
},
hdChange(e) {
},
handleChange(file, fileList) {
const del = () => {
fileList.splice(fileList.indexOf(file), 1);
}
if (file.size == 0) {
this.$message.warning("您选择的是空文件!");
del()
}
const type = ['jpg', 'jpeg', 'png', 'doc', 'docx', 'pdf', 'xls', 'xlsx', 'rar', 'zip', '7z']
const suffix = file.name.substr(file.name.lastIndexOf('.') + 1).toLowerCase()
if (!type.includes(suffix)) {
this.$message.warning('不支持的文件类型!');
del()
}
this.fileList = fileList;
}
,
handleRemove(file, fileList) {
this.fileList = fileList;
if (file.status == 'ok') {
this.delFiles.push(file.id)
}
},
doEdit() {
this.$refs["editForm"].validate((valid) => {
if (valid) {
let hdid_arr = this.formData.hdid_arr
this.formData.hdtype = hdid_arr[0]
this.formData.hdid = hdid_arr[1]
var formdata = new FormData();
for (key in this.formData) {
formdata.append(key, this.formData[key] && key != 'fileList' && key != 'fjs' ? this.formData[key] : '')
}
this.fileList.forEach(function (val) {
if (val.status == 'ready') {
formdata.append("files", val.raw, val.raw.name);
}
});
formdata.append("delFiles", JSON.stringify(this.delFiles))
var loading = this.$loading({
lock: true,
text: '数据正在提交中,请稍后...',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
$.ajax({
url: "/platform/hd/file/manger/doEdit",
type: "post",
data: formdata,
processData: false,
contentType: false,
success: (data) => {
if (data.code === 0) {
this.$message.success('修改成功!');
this.editDialogVisible = false;
this.pageData()
} else {
this.$message.error(data.msg);
}
loading.close()
},
error: (data) => {
this.$message.error("应用程序出现异常!");
loading.close()
}
});
}
});
}
,
openEdit(id) {
this.fileList = []
$.post(base + "/platform/hd/file/manger/findOne", {id: id}, (data) => {
if (data.code == 0) {
data.data.year = data.data.year + ''
data.data.fjs.forEach((fj) => {
this.fileList.push({
id: fj.id,
name: fj.fjname,
status: 'ok'
})
})
data.data.hdid_arr = [data.data.hdtype + '', data.data.hdid]
this.formData = data.data;//加载后台表单数据
this.yearChange('formHdOptions', 'formData')
this.editDialogVisible = true;//打开编辑窗口
} else {
this.$message({
message: data.msg,
type: 'error'
});
}
}, "json");
}
,
doAdd() {
this.$refs["addForm"].validate((valid) => {
if (valid) {
let hdid_arr = this.formData.hdid_arr
this.formData.hdtype = hdid_arr[0]
this.formData.hdid = hdid_arr[1]
var formdata = new FormData();
for (key in this.formData) {
formdata.append(key, this.formData[key] ? this.formData[key] : '')
}
this.fileList.forEach(function (val) {
formdata.append("files", val.raw, val.raw.name);
});
var loading = this.$loading({
lock: true,
text: '数据正在提交中,请稍后...',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
$.ajax({
url: "/platform/hd/file/manger/doAdd",
type: "post",
data: formdata,
processData: false,
contentType: false,
success: (data) => {
if (data.code === 0) {
this.$message.success('创建成功!');
this.addDialogVisible = false;
this.pageData()
} else {
this.$message.error(data.msg);
}
loading.close()
},
error: (data) => {
this.$message.error("应用程序出现异常!");
loading.close()
}
});
}
});
}
,
openAdd() {
this.formData = {
year: new Date().getFullYear() + ''
};//打开新增窗口,表单先清空
this.yearChange('formHdOptions', 'formData')
this.fileList = []
this.userOptions = []
if (this.$refs["addForm"])
this.$refs["addForm"].resetFields();
this.addDialogVisible = true;
}
,
doSearch() {
this.pageForm.pageNumber = 1
this.pageData()
}
,
pageOrder(column) {//按字段排序
this.pageForm.pageOrderName = column.prop;
this.pageForm.pageOrderBy = column.order;
this.pageData();
}
,
pageNumberChange(val) {//页码更新操作
this.pageForm.pageNumber = val;
this.pageData();
}
,
pageSizeChange(val) {//分页大小更新操作
this.pageForm.pageSize = val;
this.pageData();
}
,
pageData() {//加载分页数据
sublime.showLoadingbar();//显示loading
if (this.pageForm.hdid_arr) {
this.pageForm.hdid = this.pageForm.hdid_arr[1]
}
$.post(base + "/platform/hd/file/manger/pageData", this.pageForm, (data) => {
sublime.closeLoadingbar();//关闭loading
if (data.code == 0) {
this.tableData = data.data.list;
this.pageForm.totalCount = data.data.totalCount;
} else {
this.$message({
message: data.msg,
type: 'error'
});
}
}, "json");
},
getHdOptions() {
$.post(base + "/platform/hd/file/manger/getHdOptions", (data) => {
if (data.code == 0) {
this.hdOptions = data.data;
}
}, "json");
},
},
created() {
this.pageData();
// this.getHdOptions()
}
})
</script>
<!--#
}
#-->