first commit
This commit is contained in:
@@ -0,0 +1,370 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.dialog-footer .el-button {
|
||||
padding: 12px 30px;
|
||||
}
|
||||
|
||||
.el-transfer {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.el-transfer-panel {
|
||||
text-align: left;
|
||||
width: 35%;
|
||||
height: 400px;
|
||||
}
|
||||
|
||||
.el-transfer-panel__list.is-filterable {
|
||||
height: 300px;
|
||||
}
|
||||
|
||||
.v-box .el-card__header {
|
||||
padding: 5px 15px;
|
||||
}
|
||||
|
||||
.v-tree-layout-left .v-tree {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.v-tree-layout-left .custom-tree-node {
|
||||
width: 90%;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.v-tree-layout-left .v-tree .v-node {
|
||||
width: 100%;
|
||||
display: inline-block;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.v-tree-layout-left .v-tree {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.v-tree-layout-left .custom-tree-node {
|
||||
width: 90%;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.v-tree-layout-left .v-tree .v-node {
|
||||
width: 100%;
|
||||
display: inline-block;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<tree-layout style="height: calc(100vh - 50px)">
|
||||
<template #tree>
|
||||
|
||||
<div style="border-right: 2px solid rgb(240,240,240);padding: 20px;">
|
||||
<el-input
|
||||
placeholder="输入关键字进行查找"
|
||||
v-model="filterText">
|
||||
</el-input>
|
||||
</div>
|
||||
|
||||
<el-tree ref="tree" :data="treeData" class="v-tree" v-loading="treeLoading" node-key="id"
|
||||
:props="defaultProps"
|
||||
default-expand-all :expand-on-click-node="false"
|
||||
@node-click="handleNodeClick" accordion
|
||||
highlight-current :filter-node-method="filterNode">
|
||||
<div class="custom-tree-node" slot-scope="{ node, data }">
|
||||
|
||||
<div v-if="node.level==1" style="font-size: 16px;" class="v-node"><i
|
||||
class="el-icon-s-home"></i>
|
||||
{{ data.name }}
|
||||
</div>
|
||||
|
||||
<div v-if="node.level==2"
|
||||
style="font-size: 15px" :title="data.name" class="v-node">
|
||||
<i class="el-icon-star-on" v-if="checkData.name==data.name"></i>
|
||||
<i class="el-icon-star-off" v-else></i>
|
||||
{{ data.name }}
|
||||
</div>
|
||||
|
||||
|
||||
<div v-if="node.level==3"
|
||||
style="font-size: 14px" :title="data.name" class="v-node">
|
||||
<i class="fa fa-dot-circle-o" v-if="checkData.name==data.name"></i>
|
||||
<i class="fa fa-circle-o" v-else></i>
|
||||
{{ data.name }}
|
||||
</div>
|
||||
|
||||
|
||||
<div v-if="node.level>3"
|
||||
style="font-size: 14px" :title="data.name" class="v-node">
|
||||
<i class="fa fa-dot-circle-o" v-if="checkData.name==data.name"></i>
|
||||
<i class="fa fa-circle-o" v-else></i>
|
||||
{{ data.name }}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</el-tree>
|
||||
|
||||
</template>
|
||||
|
||||
<template v-if="node.level==1">
|
||||
<div v-if="node.level==1" style="padding: 5px 10px">
|
||||
<el-table :data="basicTypeData">
|
||||
<el-table-column label="序号" type="index">
|
||||
<template scope="scope">
|
||||
<span>{{scope.$index+(pageForm.pageNumber - 1) * pageForm.pageSize + 1}} </span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="name" align="center" label="名称"></el-table-column>
|
||||
<el-table-column prop="code" align="center" label="代码"></el-table-column>
|
||||
<el-table-column prop="note" align="center" show-overflow-tooltip
|
||||
label="备注"></el-table-column>
|
||||
<el-table-column align="center" label="操作" width="100px">
|
||||
<template scope="{row}">
|
||||
<el-dropdown @command="dropdownCommand">
|
||||
<el-button plain size="mini">
|
||||
<i class="ti-settings"></i>
|
||||
<span class="ti-angle-down"></span>
|
||||
</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item :command="{type:'edit',data:row}"
|
||||
:disabled="checkData.code==50000||checkData.code==40000">
|
||||
编辑
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'delete',data:row}"
|
||||
:disabled="checkData.code==50000||checkData.code==40000||checkData.code=='jcsjgl'">
|
||||
删除
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<el-card class="mt20 text-right" shadow="never">
|
||||
<span style="color: red">新建基础类型</span>
|
||||
<el-button size="medium" type="primary" circle
|
||||
@click="openBasicType()">
|
||||
<i class="el-icon-plus"></i>
|
||||
</el-button>
|
||||
</el-card>
|
||||
</div>
|
||||
|
||||
|
||||
</template>
|
||||
</tree-layout>
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
<el-dialog :close-on-click-modal="false" :title="title" :visible.sync="basicTypeDialog" width="50%">
|
||||
<el-form :model="formData" ref="addForm" :rules="rules" label-width="100px">
|
||||
<el-row gutter="30">
|
||||
<el-form-item label="上级名称" prop="name" label-width="110px">
|
||||
<el-input maxlength="100" disabled :value="checkData.name"
|
||||
type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="基础类型名称" prop="name" label-width="110px">
|
||||
<el-input maxlength="100" placeholder="请输入基础类型名称" v-model="formData.name"
|
||||
type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="基础类型代码" prop="code" label-width="110px">
|
||||
<el-input maxlength="100" placeholder="请输入基础类型名称" v-model="formData.code"
|
||||
type="text"
|
||||
:disabled="checkData.code==50000||checkData.code==40000||checkData.code=='jcsjgl'"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="基础类型备注" prop="note" label-width="110px">
|
||||
<el-input maxlength="100" placeholder="请输入基础类型备注" v-model="formData.note"
|
||||
type="textarea"></el-input>
|
||||
</el-form-item>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<div style="display: flex;justify-content:flex-end;margin-top: 30px">
|
||||
<el-button type="primary" :loading="loading" @click="!formData.id?doAddType():doEditType()">提 交
|
||||
</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
title: '',
|
||||
checkData: {},
|
||||
filterText: '',
|
||||
treeData: [],
|
||||
basicTypeData: [],
|
||||
tableData: [],
|
||||
treeLoading: true,
|
||||
basicTypeDialog: false,
|
||||
loading: false,
|
||||
defaultProps: {
|
||||
children: 'child',
|
||||
label: 'name',
|
||||
},
|
||||
node: {
|
||||
level: 1
|
||||
},
|
||||
options: [{
|
||||
value: 'ziyuan',
|
||||
label: '资源',
|
||||
children: [{
|
||||
value: 'axure',
|
||||
label: 'Axure Components'
|
||||
}]
|
||||
}],
|
||||
rules: {
|
||||
name: [{required: true, message: '必填', trigger: ['change', 'blur']}],
|
||||
code: [{required: true, message: '必填', trigger: ['change', 'blur']}],
|
||||
},
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'tree-layout': httpVueLoader('/components/plugins/TreeLayout.vue'),
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
},
|
||||
watch: {
|
||||
filterText(val) {
|
||||
this.$refs.tree.filter(val);
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
dropdownCommand: function (command) {
|
||||
const {type, data} = command
|
||||
if (type == 'edit') {
|
||||
this.openEditType(data)
|
||||
} else if (type == 'delete') {
|
||||
this.doDelete(data.id)
|
||||
}
|
||||
},
|
||||
pageData() {//加载机构数据
|
||||
sublime.showLoadingbar();//显示loading
|
||||
this.tabLoading = true
|
||||
this.pageForm.parentId = this.checkData.id
|
||||
$.post(loc() + "/pageData", this.pageForm, (data) => {
|
||||
sublime.closeLoadingbar();//关闭loading
|
||||
this.tabLoading = false
|
||||
if (data.code == 0) {
|
||||
this.basicTypeData = data.data.list;
|
||||
this.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
this.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
filterNode(value, data, node) {
|
||||
if (!value) return true;
|
||||
return data.name.indexOf(value) !== -1
|
||||
return false
|
||||
},
|
||||
async handleNodeClick(data, node) {
|
||||
this.checkData = data
|
||||
this.checkNode = node
|
||||
console.log(this.checkData)
|
||||
this.pageData()
|
||||
},
|
||||
async loadTree(flush) {
|
||||
this.treeLoading = true
|
||||
const resp = await $.post(loc() + "/getTreeData")
|
||||
requestLaterFun(resp, () => {
|
||||
this.treeLoading = false
|
||||
this.treeData = resp.data
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
}, () => {
|
||||
this.treeLoading = false
|
||||
})
|
||||
if (flush && resp.code == 0) {
|
||||
this.checkData = resp.data[0]
|
||||
this.pageData();
|
||||
}
|
||||
},
|
||||
async openBasicType() {
|
||||
const {id} = this.checkData
|
||||
this.formData = {
|
||||
parentId: id
|
||||
}
|
||||
this.basicTypeDialog = true
|
||||
if (this.$refs['addForm']) {
|
||||
this.$refs['addForm'].resetFields()
|
||||
}
|
||||
},
|
||||
doAddType() {
|
||||
this.$refs["addForm"].validate(async (valid) => {
|
||||
if (valid) {
|
||||
this.loading = true
|
||||
const resp = await $.post(loc() + "/doAdd", this.formData)
|
||||
requestLaterMsgFun(this, resp, () => {
|
||||
this.basicTypeDialog = false
|
||||
this.pageData();
|
||||
this.loadTree(true)
|
||||
}, null, () => {
|
||||
this.loading = false
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
doEditType() {
|
||||
this.$refs["addForm"].validate(async (valid) => {
|
||||
if (valid) {
|
||||
this.loading = true
|
||||
const resp = await $.post(loc() + "/doEditType", this.formData)
|
||||
requestLaterMsgFun(this, resp, () => {
|
||||
this.pageData();
|
||||
/* this.loadTree(true)*/
|
||||
}, null, () => {
|
||||
this.loading = false
|
||||
this.basicTypeDialog = false
|
||||
})
|
||||
}
|
||||
});
|
||||
},
|
||||
openEditType(row) {
|
||||
this.formData = {
|
||||
id: row.id,
|
||||
name: row.name,
|
||||
code: row.code,
|
||||
note: row.note
|
||||
}
|
||||
this.basicTypeDialog = true
|
||||
},
|
||||
doDelete(id) {
|
||||
this.$confirm('确定要删除该机构吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: async (a, b) => {
|
||||
if ("confirm" == a) {
|
||||
const resp = await $.post(loc() + "/doDelete", {id: id})
|
||||
requestLaterFun(resp, () => {
|
||||
this.$notify.success({title: '成功', message: resp.msg});
|
||||
this.pageData()
|
||||
this.loadTree(true)
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
})
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.loadTree(true)
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,645 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
|
||||
<div id="app" class="platform" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<div class="search">
|
||||
|
||||
|
||||
<div class="d-search-item btn-group tool-button mr10">
|
||||
<el-checkbox-group @change="doSearch" v-model="pageForm.isMenWomen">
|
||||
<el-checkbox-button :key="2" :label="2">男子</el-checkbox-button>
|
||||
<el-checkbox-button :key="3" :label="3">女子</el-checkbox-button>
|
||||
</el-checkbox-group>
|
||||
</div>
|
||||
<div class="d-search-item btn-group tool-button mr10">
|
||||
<el-checkbox-group @change="doSearch" v-model="pageForm.isMenWomen">
|
||||
<el-checkbox-button :key="4" :label="4">单项</el-checkbox-button>
|
||||
<el-checkbox-button :key="5" :label="5">团体</el-checkbox-button>
|
||||
</el-checkbox-group>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="d-search-item btn-group tool-button mr10">
|
||||
<el-select v-model="pageForm.group" @focus="focusGroup" placeholder="请选择比赛组别" clearable
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in groupList"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
|
||||
<div class="d-search-item btn-group tool-button mr10">
|
||||
<el-select @focus="exerciseType" clearable filterable placeholder="请选择运动类型"
|
||||
style="width: 100%" v-model="pageForm.events">
|
||||
<el-option
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
v-for="item in exerciseTypeList">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="search-query">
|
||||
<el-button type="primary" icon="el-icon-search" @click="doSearch">搜索</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool label="比赛项目列表" :app="this">
|
||||
|
||||
<template #label_end>
|
||||
|
||||
</template>
|
||||
|
||||
<template #func>
|
||||
<el-date-picker
|
||||
class="ml10"
|
||||
v-model="pageForm.ageDate"
|
||||
type="daterange"
|
||||
range-separator="-"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
format="yyyy 年 MM 月 dd 日"
|
||||
value-format="yyyy-MM-dd">
|
||||
</el-date-picker>
|
||||
<el-button class="ml10" type="primary" icon="el-icon-check" @click="doAssignmentDate">统赋年龄限制
|
||||
</el-button>
|
||||
<el-button type="primary" icon="el-icon-edit-outline"
|
||||
@click="openAdd">
|
||||
创建比赛项目
|
||||
</el-button>
|
||||
</template>
|
||||
</table-tool>
|
||||
|
||||
|
||||
<el-table :data="tableData" style="width: 100%;margin-bottom: 20px" row-key="id"
|
||||
@sort-change="pageOrder"
|
||||
v-loading="tableLoading" :size="tableSize" class="vi-table">
|
||||
<el-table-column align="center" header-align="center" type="index" :index="indexMethod" label="序号"
|
||||
width="80px"></el-table-column>
|
||||
<el-table-column
|
||||
align="center"
|
||||
header-align="center"
|
||||
v-for="column in tableColumns"
|
||||
:label="column.label"
|
||||
:prop="column.prop" :sortable="column.sortable"
|
||||
:sortable="column.sortable" show-overflow-tooltip>
|
||||
|
||||
<template scope="{row}" v-if="column.prop=='baname'">
|
||||
<span>{{row.baname!=null?row.baname:'暂无'}}</span>
|
||||
</template>
|
||||
|
||||
<template scope="{row}" v-else-if="column.prop=='diname'">
|
||||
<span>{{row.diname!=null?row.diname:'暂无'}}</span>
|
||||
</template>
|
||||
|
||||
<template scope="{row}" v-else-if="column.prop=='isMenWomen'">
|
||||
<span v-if="row.isMenWomen==1">男子</span>
|
||||
<span v-if="row.isMenWomen==2">女子</span>
|
||||
</template>
|
||||
|
||||
<template scope="{row}" v-else-if="column.prop=='spname'">
|
||||
<span>{{row.spname!=null?row.spname:''}}</span>
|
||||
</template>
|
||||
|
||||
<template scope="{row}" v-else-if="column.prop=='projectType'">
|
||||
<span>{{row.projectType=='1'?'单项':'团体'}}</span>
|
||||
</template>
|
||||
|
||||
<template scope="{row}" v-else-if="column.prop=='note'">
|
||||
<span>{{row.note!=''?row.note:'暂无'}}</span>
|
||||
</template>
|
||||
|
||||
<template scope="{row}" v-else-if="column.prop=='whetherEnable'">
|
||||
<el-switch @change="switchChange(row)" v-model="row.whetherEnable" active-color="#13ce66"
|
||||
inactive-color="#ff4949"></el-switch>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column prop="userOnline" align="center" header-align="center" label="操作"
|
||||
width="150px">
|
||||
<template scope="{row}">
|
||||
<el-dropdown @command="dropdownCommand">
|
||||
<el-button size="mini" :loading="row.loading">
|
||||
<i class="ti-settings"></i>
|
||||
<span class="ti-angle-down"></span>
|
||||
</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item :command="{type:'edit',row}">
|
||||
编辑
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'delete',row}">
|
||||
删除
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
|
||||
|
||||
</template>
|
||||
|
||||
|
||||
<template #edit>
|
||||
|
||||
<vi-title title="填写比赛项目信息"></vi-title>
|
||||
|
||||
|
||||
<el-form :model="formData" ref="form" :rules="formRules" label-width="120px"
|
||||
label-suffix=":">
|
||||
<el-row gutter="40">
|
||||
<el-col :span="24">
|
||||
<el-form-item prop="isInterest" label="是否趣味项目">
|
||||
<el-checkbox v-model="formData.isInterest">{{formData.isInterest?'是趣味':'不是趣味'}}
|
||||
</el-checkbox>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="isMenWomen" label="性别">
|
||||
<el-select v-model="formData.isMenWomen" placeholder="请选择男女分组" allow-create filterable
|
||||
default-first-option clearable style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in menWomenList"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="competitionCategory" label="比赛组别">
|
||||
<el-select v-model="formData.competitionCategory" @focus="focusGroup" placeholder="请选择比赛组别"
|
||||
clearable style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in groupList"
|
||||
:key="item.id"
|
||||
:label="item.name+'('+item.code+')'"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="distance" label="距离">
|
||||
<el-select v-model="formData.distance" @focus="focusDistance" placeholder="请选择距离"
|
||||
clearable style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in distanceList"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="exerciseType" label="运动类型">
|
||||
<el-select v-model="formData.exerciseType" @focus="exerciseType"
|
||||
@change="changeExercise_typeList" placeholder="请选择运动类型"
|
||||
filterable
|
||||
clearable style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in exerciseTypeList"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="sports" label="运动项目">
|
||||
<el-select v-model="formData.sports" placeholder="请选择具体运动项目"
|
||||
clearable style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in exerciseTypeList2"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="projectType" label="项目类型">
|
||||
<el-select v-model="formData.projectType" placeholder="请选择具体运动项目" allow-create filterable
|
||||
default-first-option clearable style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in projectTypeList"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="ageDate" label="年龄限制范围" v-if="formData.projectType==1">
|
||||
<el-date-picker
|
||||
style="width: 100%"
|
||||
v-model="formData.ageDate"
|
||||
type="daterange"
|
||||
range-separator="-"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
format="yyyy 年 MM 月 dd 日"
|
||||
value-format="yyyy-MM-dd">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
|
||||
</el-col>
|
||||
|
||||
|
||||
</el-row>
|
||||
|
||||
</el-form>
|
||||
<div style="float: right;margin: 20px 0">
|
||||
<el-button type="primary" @click="formData.id?doEdit():doAdd()">提 交</el-button>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
groupList: [],
|
||||
exerciseTypeList: [],
|
||||
distanceList: [],
|
||||
exerciseTypeList2: [],
|
||||
eventDialog: false,
|
||||
loading: false,
|
||||
title: "",
|
||||
pageForm: {
|
||||
activityId: null,
|
||||
ageDate: null,
|
||||
isMenWomen: []
|
||||
},
|
||||
tableColumns: [
|
||||
{prop: 'isMenWomen', label: '男子/女子', sortable: true},
|
||||
{prop: 'baname', label: '比赛组别', sortable: true},
|
||||
{prop: 'diname', label: '距离', sortable: true},
|
||||
{prop: 'exename', label: '运动类型', sortable: true},
|
||||
{prop: 'spname', label: '运动项目', sortable: true},
|
||||
{prop: 'projectType', label: '项目类型', sortable: true},
|
||||
{prop: 'whetherEnable', label: '是否启用'},
|
||||
{prop: 'allName', label: '全称'},
|
||||
],
|
||||
projectTypeList: [
|
||||
{id: '1', name: '单项'},
|
||||
{id: '2', name: '团体'},
|
||||
],
|
||||
menWomenList: [
|
||||
{id: 1, name: '男子'},
|
||||
{id: 2, name: '女子'},
|
||||
],
|
||||
formRules: {
|
||||
exerciseType: [{required: true, message: '必填', trigger: ['change', 'blur']}],
|
||||
projectType: [{required: true, message: '必填', trigger: ['change', 'blur']}],
|
||||
/* competitionCategory: [{required: true, message: '必填', trigger: ['change', 'blur']}],
|
||||
distance: [{required: true, message: '必填', trigger: ['change', 'blur']}],
|
||||
exerciseType: [{required: true, message: '必填', trigger: ['change', 'blur']}],
|
||||
*/
|
||||
},
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
},
|
||||
methods: {
|
||||
async doAssignmentDate() {
|
||||
const aa = this.pageForm.isMenWomen.map(v => {
|
||||
if (v == 5) {
|
||||
return true
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
})
|
||||
if (aa.find(v => v == true) || this.pageForm.isMenWomen.length == 0) {
|
||||
this.$notify({
|
||||
title: '警告',
|
||||
message: '只能设置单项项目',
|
||||
type: 'warning'
|
||||
});
|
||||
return
|
||||
}
|
||||
|
||||
if (this.pageForm.ageDate == null) {
|
||||
this.$notify({
|
||||
title: '警告',
|
||||
message: '请选择需要赋值的时间段',
|
||||
type: 'warning'
|
||||
});
|
||||
return
|
||||
}
|
||||
const confirm = await this.$confirm('确定要统一给单项的项目赋年龄限制吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm === "confirm") {
|
||||
const data = await $.post(loc() + "/doAssignmentDate", {
|
||||
startAgeDate: this.pageForm.ageDate[0],
|
||||
endAgeDate: this.pageForm.ageDate[1],
|
||||
eventIds: JSON.stringify(this.tableData.map(v => v.id))
|
||||
})
|
||||
this.$notify.success({title: '成功', message: data.msg});
|
||||
this.doSearch()
|
||||
}
|
||||
|
||||
|
||||
},
|
||||
dropdownCommand(command) {
|
||||
const {type, row} = command
|
||||
if (type === 'edit') {
|
||||
this.openEdit(row)
|
||||
} else if (type === 'delete') {
|
||||
this.doDelete(row)
|
||||
}
|
||||
},
|
||||
openAdd() {
|
||||
this.$refs.guava.edit()
|
||||
if (this.$refs['form']) {
|
||||
this.$refs['form'].resetFields()
|
||||
}
|
||||
this.formData = {}
|
||||
},
|
||||
|
||||
//查询比赛组别
|
||||
async focusGroup() {
|
||||
const resp = await $.post(loc() + "/focusGroup")
|
||||
requestLaterFun(resp, () => {
|
||||
this.groupList = resp.data;
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
})
|
||||
},
|
||||
|
||||
//查询运动类型
|
||||
async exerciseType() {
|
||||
const resp = await $.post(loc() + "/exerciseType")
|
||||
requestLaterFun(resp, () => {
|
||||
this.exerciseTypeList = resp.data;
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
})
|
||||
},
|
||||
|
||||
//查询距离
|
||||
async focusDistance() {
|
||||
const resp = await $.post(loc() + "/focusDistance")
|
||||
requestLaterFun(resp, () => {
|
||||
this.distanceList = resp.data;
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
})
|
||||
},
|
||||
|
||||
//根据运动id查询下面有哪些具体的运动项目
|
||||
async changeExercise_typeList() {
|
||||
const resp = await $.post(loc() + "/changeExercise_typeList", {exerciseType: this.formData.exerciseType})
|
||||
requestLaterFun(resp, () => {
|
||||
this.exerciseTypeList2 = resp.data;
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
})
|
||||
},
|
||||
doAdd() {
|
||||
this.$refs["form"].validate(async (valid) => {
|
||||
if (valid) {
|
||||
let allName = '';
|
||||
|
||||
this.menWomenList.find(v => {
|
||||
if (v.id === this.formData.isMenWomen) {
|
||||
allName += v.name
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
this.groupList.find(v => {
|
||||
if (v.id === this.formData.competitionCategory) {
|
||||
allName += v.name
|
||||
}
|
||||
})
|
||||
|
||||
this.distanceList.find(v => {
|
||||
if (v.id === this.formData.distance) {
|
||||
allName += v.name + '米'
|
||||
}
|
||||
})
|
||||
|
||||
/* this.exerciseTypeList.find(v => {
|
||||
if (v.id === this.formData.exerciseType) {
|
||||
allName += v.name
|
||||
}
|
||||
})*/
|
||||
|
||||
this.exerciseTypeList2.find(v => {
|
||||
if (v.id === this.formData.sports) {
|
||||
allName += v.name
|
||||
}
|
||||
})
|
||||
|
||||
this.projectTypeList.find(v => {
|
||||
if (v.id === this.formData.projectType) {
|
||||
allName += "(" + v.name + ")"
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
this.formData.allName = allName
|
||||
if (this.formData.ageDate && this.formData.ageDate.length > 0) {
|
||||
this.formData.startAgeDate = this.formData.ageDate[0]
|
||||
this.formData.endAgeDate = this.formData.ageDate[1]
|
||||
}
|
||||
|
||||
|
||||
this.loading = true
|
||||
const resp = await $.post(loc() + "/doAdd", this.formData)
|
||||
requestLaterMsgFun(this, resp, () => {
|
||||
this.pageData();
|
||||
this.$refs.guava.index()
|
||||
}, (data, msg) => {
|
||||
this.$message.error(msg);
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
pageData() {
|
||||
sublime.showLoadingbar();
|
||||
this.tabLoading = true
|
||||
const pageForm = clone(this.pageForm)
|
||||
pageForm.isMenWomen = JSON.stringify(pageForm.isMenWomen)
|
||||
$.post(base + "/platform/activity/basic/event/pageData", pageForm, (data) => {
|
||||
sublime.closeLoadingbar();
|
||||
this.tabLoading = false
|
||||
if (data.code == 0) {
|
||||
this.tableData = data.data.list;
|
||||
this.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
this.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
async switchChange(data) {
|
||||
this.formData = data
|
||||
const resp = await $.post(loc() + "/doEdit", this.formData)
|
||||
requestLaterFun(resp, () => {
|
||||
this.$notify.success({title: '成功', message: resp.msg});
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
}, () => {
|
||||
this.pageData()
|
||||
})
|
||||
},
|
||||
doEdit() {
|
||||
this.$refs["form"].validate(async (valid) => {
|
||||
if (valid) {
|
||||
let allName = '';
|
||||
|
||||
this.menWomenList.find(v => {
|
||||
if (v.id === this.formData.isMenWomen) {
|
||||
allName += v.name
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
this.groupList.find(v => {
|
||||
if (v.id === this.formData.competitionCategory) {
|
||||
allName += v.name
|
||||
}
|
||||
})
|
||||
|
||||
this.distanceList.find(v => {
|
||||
if (v.id === this.formData.distance) {
|
||||
allName += v.name + '米'
|
||||
}
|
||||
})
|
||||
|
||||
/* this.exerciseTypeList.find(v => {
|
||||
if (v.id === this.formData.exerciseType) {
|
||||
allName += v.name
|
||||
}
|
||||
})*/
|
||||
|
||||
this.exerciseTypeList2.find(v => {
|
||||
if (v.id === this.formData.sports) {
|
||||
allName += v.name
|
||||
}
|
||||
})
|
||||
|
||||
this.projectTypeList.find(v => {
|
||||
if (v.id === this.formData.projectType) {
|
||||
allName += "(" + v.name + ")"
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
this.formData.allName = allName
|
||||
if (this.formData.ageDate && this.formData.ageDate.length > 0) {
|
||||
this.formData.startAgeDate = this.formData.ageDate[0]
|
||||
this.formData.endAgeDate = this.formData.ageDate[1]
|
||||
}
|
||||
|
||||
this.loading = true
|
||||
const resp = await $.post(loc() + "/doEdit", this.formData)
|
||||
requestLaterMsgFun(this, resp, () => {
|
||||
this.pageData();
|
||||
this.$refs.guava.index()
|
||||
}, (data, msg) => {
|
||||
this.$message.error(msg);
|
||||
})
|
||||
}
|
||||
});
|
||||
},
|
||||
openEdit(data) {
|
||||
this.focusGroup()
|
||||
this.exerciseType()
|
||||
this.focusDistance()
|
||||
this.formData = {
|
||||
id: data.id,
|
||||
isInterest: data.isInterest,
|
||||
competitionCategory: data.competitionCategory,
|
||||
distance: data.distance,
|
||||
exerciseType: data.exerciseType,
|
||||
sports: data.sports,
|
||||
projectType: data.projectType,
|
||||
note: data.note,
|
||||
isMenWomen: data.isMenWomen
|
||||
|
||||
}
|
||||
if (data.startAgeDate != null) {
|
||||
this.$set(this.formData, "ageDate", [data.startAgeDate, data.endAgeDate])
|
||||
}
|
||||
|
||||
this.changeExercise_typeList()
|
||||
this.$refs.guava.edit()
|
||||
},
|
||||
doDelete(row) {
|
||||
const {id} = row
|
||||
this.$confirm('确定要删除该活动吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: async (a, b) => {
|
||||
if ("confirm" === a) {//确认后再执行
|
||||
|
||||
this.$set(row, "loading", true)
|
||||
|
||||
const resp = await $.post(loc() + "/doDelete", {id: id});
|
||||
|
||||
requestLaterMsgFun(vue, resp, async () => {
|
||||
this.pageData()
|
||||
}, () => {
|
||||
}, () => {
|
||||
this.$set(row, "loading", false)
|
||||
})
|
||||
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,45 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<style>
|
||||
|
||||
|
||||
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava>
|
||||
<user-scope ref="userScope"></user-scope>
|
||||
</guava>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'user-scope': httpVueLoader('/components/plugins/UserScope.vue?v=' + new Date().getTime()),
|
||||
},
|
||||
methods: {
|
||||
|
||||
},
|
||||
mounted() {
|
||||
|
||||
},
|
||||
async created() {
|
||||
|
||||
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,576 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<tree-layout style="height: calc(100vh - 50px)">
|
||||
<template #tree>
|
||||
<div style="border-right: 2px solid rgb(240,240,240);padding: 20px;">
|
||||
<el-input
|
||||
placeholder="输入关键字进行查找" clearable
|
||||
v-model="filterText">
|
||||
</el-input>
|
||||
</div>
|
||||
<el-tree ref="tree" :data="treeData" class="v-tree" v-loading="treeLoading" node-key="id"
|
||||
:props="defaultProps"
|
||||
default-expand-all :expand-on-click-node="false"
|
||||
@node-click="handleNodeClick" accordion @node-expand="nodeExpand"
|
||||
highlight-current :filter-node-method="filterNode">
|
||||
<div class="custom-tree-node" slot-scope="{ node, data }">
|
||||
|
||||
<div v-if="node.level==1" style="font-size: 16px;" class="v-node"><i
|
||||
class="el-icon-s-home"></i>
|
||||
{{ data.name }}
|
||||
</div>
|
||||
|
||||
<div v-if="node.level==2"
|
||||
style="font-size: 15px" :title="data.name" class="v-node">
|
||||
<i class="el-icon-star-on" v-if="checkData.name==data.name"></i>
|
||||
<i class="el-icon-star-off" v-else></i>
|
||||
{{ data.name }}
|
||||
</div>
|
||||
|
||||
|
||||
<div v-if="node.level==3"
|
||||
style="font-size: 14px" :title="data.name" class="v-node">
|
||||
<i class="fa fa-dot-circle-o" v-if="checkData.name==data.name"></i>
|
||||
<i class="fa fa-circle-o" v-else></i>
|
||||
{{ data.name }}
|
||||
</div>
|
||||
|
||||
|
||||
<div v-if="node.level>3"
|
||||
style="font-size: 14px" :title="data.name" class="v-node">
|
||||
<i class="fa fa-dot-circle-o" v-if="checkData.name==data.name"></i>
|
||||
<i class="fa fa-circle-o" v-else></i>
|
||||
{{ data.name }}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</el-tree>
|
||||
|
||||
</template>
|
||||
<template>
|
||||
|
||||
<div v-if="checkNode.level===1" style="padding: 5px 10px">
|
||||
<el-card shadow="never">
|
||||
<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="name"></el-option>
|
||||
<el-option label="单位代码" value="unitcode"></el-option>
|
||||
</el-select>
|
||||
</el-input>
|
||||
</div>
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-button type="primary" icon="el-icon-search" @click="doSearch"></el-button>
|
||||
</div>
|
||||
|
||||
<div class="pull-right offscreen-right mt5">
|
||||
<div class="btn-group tool-button">
|
||||
<el-button icon="el-icon-plus" @click="openAdd">新建单位</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<el-card class="mt10" shadow="never">
|
||||
<el-table :data="tableData" style="width: 100%" row-key="id" @sort-change="pageOrder"
|
||||
v-loading="tabLoading" size="medium">
|
||||
<el-table-column align="center" :key="1" 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 align="center" header-align="center" label="单位名称"
|
||||
prop="name"></el-table-column>
|
||||
|
||||
<el-table-column align="center" header-align="center" label="单位代码"
|
||||
prop="unitcode">
|
||||
<template scope="{row}">
|
||||
{{row.unitcode}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="单位等级" header-align="center" prop="unitlevel"
|
||||
:show-overflow-tooltip="true" align="center">
|
||||
<template slot-scope="scope">
|
||||
<el-button v-if="scope.row.unitlevel==1" size="mini" type="success" round
|
||||
style=" vertical-align: middle;">1级
|
||||
</el-button>
|
||||
<el-button v-if="scope.row.unitlevel==2" size="mini" type="warning" round
|
||||
style=" vertical-align: middle;">2级
|
||||
</el-button>
|
||||
<el-button v-if="scope.row.unitlevel==3" size="mini" type="danger" round
|
||||
style=" vertical-align: middle;">3级
|
||||
</el-button>
|
||||
<el-button v-if="scope.row.unitlevel>3" size="mini" type="info" round
|
||||
style=" vertical-align: middle;">{{scope.row.unitlevel}}级
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" header-align="center" prop="operating" label="操作"
|
||||
width="200px">
|
||||
<template slot-scope="{row}">
|
||||
<el-dropdown @command="dropdownCommand">
|
||||
<el-button size="mini">
|
||||
<i class="ti-settings"></i>
|
||||
<span class="ti-angle-down"></span>
|
||||
</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item :command="{type:'edit',data:row}">
|
||||
编辑
|
||||
</el-dropdown-item>
|
||||
|
||||
<el-dropdown-item :command="{type:'delete',data:row}">
|
||||
删除
|
||||
</el-dropdown-item>
|
||||
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
|
||||
</div>
|
||||
|
||||
<div v-if="checkNode.level===2">
|
||||
<el-card shadow="never">
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-input placeholder="请输入内容" clearable v-model="userPageForm.searchKeyword"
|
||||
@keyup.enter.native="doUserSearch">
|
||||
<el-select v-model="userPageForm.searchName" slot="prepend" placeholder="查询类型"
|
||||
style="width: 80px;">
|
||||
<el-option label="姓名" value="username"></el-option>
|
||||
<el-option label="工号" value="loginname"></el-option>
|
||||
</el-select>
|
||||
</el-input>
|
||||
</div>
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-button type="primary" icon="el-icon-search" @click="doUserSearch"></el-button>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never">
|
||||
<el-tabs v-model="activeName1" type="card" @tab-click="handleClick">
|
||||
<el-tab-pane label="单位人员" name="first"></el-tab-pane>
|
||||
<el-tab-pane label="单位负责人" name="second"></el-tab-pane>
|
||||
</el-tabs>
|
||||
|
||||
<el-table :data="userTableData" style="width: 100%" @sort-change="userPageOrder"
|
||||
size="medium">
|
||||
<el-table-column align="center" header-align="center" label="序号" type="index">
|
||||
<template scope="scope">
|
||||
<span>{{scope.$index+(userPageForm.pageNumber - 1) * userPageForm.pageSize + 1}} </span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" header-align="center" label="姓名"
|
||||
prop="username"></el-table-column>
|
||||
|
||||
<el-table-column align="center" header-align="center" label="工号"
|
||||
prop="loginname"></el-table-column>
|
||||
|
||||
<el-table-column align="center" header-align="center" label="性别"
|
||||
prop="sex">
|
||||
<template scope="{row:{sex}}">
|
||||
<span v-if="sex">{{sex}}</span>
|
||||
<span v-else>暂无</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" header-align="center" label="手机号"
|
||||
prop="mobile">
|
||||
<template scope="{row:{mobile}}">
|
||||
<span v-if="mobile">{{mobile}}</span>
|
||||
<span v-else>暂无</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" header-align="center" label="是否会员"
|
||||
prop="member">
|
||||
<template scope="{row:{member}}">
|
||||
<span v-if="member==1" class="text-success">是</span>
|
||||
<span v-else>否</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
</el-table>
|
||||
<el-row v-if="activeName1 === 'first'" class="el-pagination-container">
|
||||
<el-pagination
|
||||
@size-change="userPageSizeChange"
|
||||
@current-change="userPageNumberChange"
|
||||
:current-page="userPageForm.pageNumber"
|
||||
:page-sizes="[10, 20, 30, 50]"
|
||||
:page-size="userPageForm.pageSize"
|
||||
layout="total, sizes, prev, pager, next"
|
||||
:total="userPageForm.totalCount">
|
||||
</el-pagination>
|
||||
</el-row>
|
||||
</el-card>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</template>
|
||||
</tree-layout>
|
||||
</template>
|
||||
<template #edit>
|
||||
|
||||
<el-divider content-position="left"><span style="color: rgb(121, 187, 255)">请填写以下单位信息</span>
|
||||
</el-divider>
|
||||
<el-form :model="formData" ref="form" :rules="formRules" label-position="top"
|
||||
label-width="120px"
|
||||
style="padding: 0 30px">
|
||||
<el-row gutter="30">
|
||||
<el-col :span="24">
|
||||
<el-form-item label="上级单位">
|
||||
<el-input maxlength="100" disabled :value="checkData.name"
|
||||
type="text"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="单位名称" prop="name">
|
||||
<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 label="单位代码" prop="unitcode">
|
||||
<el-input maxlength="100" placeholder="请输入协会编码" v-model="formData.unitcode"
|
||||
type="text"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="单位简称" prop="aliasName">
|
||||
<el-input maxlength="100" placeholder="请输入单位简称" v-model="formData.aliasName"
|
||||
type="text"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="联系电话" prop="telephone">
|
||||
<el-input maxlength="100" placeholder="请输入联系电话" v-model="formData.telephone"
|
||||
type="text"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="单位邮箱" prop="email">
|
||||
<el-input maxlength="100" placeholder="请输入单位邮箱" v-model="formData.email"
|
||||
type="text"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="单位网站" prop="website">
|
||||
<el-input maxlength="100" placeholder="请输入单位网站" v-model="formData.website"
|
||||
type="text"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="单位地址" prop="address">
|
||||
<el-input maxlength="100" placeholder="请输入单位地址" v-model="formData.address"
|
||||
type="text"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="单位介绍" prop="note">
|
||||
<el-input maxlength="500" type="textarea" placeholder="请输入单位介绍"
|
||||
v-model="formData.note"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
|
||||
<div style="display: flex;justify-content:flex-end;margin-top: 30px">
|
||||
<el-button type="primary" :loading="loading" @click="!formData.id?doAdd():doEdit()">提 交
|
||||
</el-button>
|
||||
</div>
|
||||
</el-form>
|
||||
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
data() {
|
||||
return {
|
||||
activeName1: 'first',
|
||||
userTableData: [],
|
||||
userPageForm: {
|
||||
searchName: "username",
|
||||
searchKeyword: "",
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
pageOrderName: "",
|
||||
pageOrderBy: ""
|
||||
},
|
||||
loading: false,
|
||||
filterText: '',
|
||||
defaultProps: {
|
||||
children: 'child',
|
||||
label: 'name',
|
||||
},
|
||||
exKeys: ['0'],
|
||||
activeName: [],
|
||||
typeOptions: [],
|
||||
treeLoading: true,
|
||||
tabLoading: false,
|
||||
formData: {},
|
||||
detailData: {},
|
||||
treeData: [],
|
||||
tableData: [],
|
||||
pageForm: {
|
||||
searchName: "name",
|
||||
searchKeyword: "",
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
pageOrderName: "",
|
||||
pageOrderBy: ""
|
||||
},
|
||||
formRules: {
|
||||
name: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
code: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
},
|
||||
checkNode: {level: 1},
|
||||
checkData: {},
|
||||
campusOptions: [],
|
||||
loading: false,
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'tree-layout': httpVueLoader('/components/plugins/TreeLayout.vue'),
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
},
|
||||
watch: {
|
||||
filterText(val) {
|
||||
this.$refs.tree.filter(val);
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
handleClick(tab, event) {
|
||||
this.doUserSearch()
|
||||
},
|
||||
|
||||
dropdownCommand: function (command) {
|
||||
const {type, data} = command
|
||||
if (type == 'view') {
|
||||
|
||||
} else if (type == 'edit') {
|
||||
this.openEdit(data.id)
|
||||
} else if (type == 'delete') {
|
||||
this.doDelete(data.id)
|
||||
}
|
||||
},
|
||||
filterNode(value, data, node) {
|
||||
if (!value) return true;
|
||||
return data.name.indexOf(value) !== -1
|
||||
|
||||
return false
|
||||
},
|
||||
nodeExpand(data, node, e) {
|
||||
|
||||
},
|
||||
async handleNodeClick(data, node) {
|
||||
this.checkData = data
|
||||
this.checkNode = node
|
||||
if (node.level === 1) {
|
||||
this.doSearch()
|
||||
} else if (node.level === 2) {
|
||||
this.doUserSearch()
|
||||
}
|
||||
},
|
||||
async doDelete(id) {
|
||||
const confirm = await this.$confirm('确定要删除该单位吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm === "confirm") {
|
||||
const resp = await $.post(loc() + "/doDelete", {id})
|
||||
requestLaterMsgFun(this, resp, () => {
|
||||
this.loadTree(false)
|
||||
this.pageData()
|
||||
}, null, () => {
|
||||
|
||||
})
|
||||
}
|
||||
},
|
||||
|
||||
doEdit() {
|
||||
this.$refs["form"].validate(async (valid) => {
|
||||
if (valid) {
|
||||
this.loading = true
|
||||
const resp = await $.post(loc() + "/doEdit", this.formData)
|
||||
requestLaterMsgFun(this, resp, () => {
|
||||
this.loadTree(false)
|
||||
this.pageData();
|
||||
}, null, () => {
|
||||
this.loading = false
|
||||
this.$refs.guava.index()
|
||||
})
|
||||
}
|
||||
});
|
||||
},
|
||||
async openEdit(id) {
|
||||
const resp = await $.get(loc() + "/findOne", {id})
|
||||
requestLaterFun(resp, (data) => {
|
||||
this.formData = data
|
||||
this.$refs.guava.edit()
|
||||
if (this.$refs['form']) {
|
||||
this.$refs['form'].resetFields()
|
||||
}
|
||||
}, (data, msg) => {
|
||||
this.$message({
|
||||
message: msg,
|
||||
type: 'error'
|
||||
});
|
||||
})
|
||||
},
|
||||
doAdd() {
|
||||
this.$refs["form"].validate(async (valid) => {
|
||||
if (valid) {
|
||||
this.loading = true
|
||||
const resp = await $.post(loc() + "/doAdd", this.formData)
|
||||
requestLaterMsgFun(this, resp, () => {
|
||||
this.loadTree(false)
|
||||
this.pageData();
|
||||
}, null, () => {
|
||||
this.loading = false
|
||||
this.$refs.guava.index()
|
||||
})
|
||||
}
|
||||
});
|
||||
},
|
||||
openAdd() {
|
||||
const {id, unitlevel} = this.checkData
|
||||
this.formData = {
|
||||
parentId: id,
|
||||
unitlevel: unitlevel + 1
|
||||
}
|
||||
this.$refs.guava.edit()
|
||||
if (this.$refs['form']) {
|
||||
this.$refs['form'].resetFields()
|
||||
}
|
||||
},
|
||||
doSearch() {
|
||||
this.tabKey = new Date().getTime()
|
||||
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
|
||||
this.tabLoading = true
|
||||
this.pageForm.parentId = this.checkData.id
|
||||
$.post(loc() + "/pageData", this.pageForm, (data) => {
|
||||
sublime.closeLoadingbar();//关闭loading
|
||||
this.tabLoading = false
|
||||
if (data.code == 0) {
|
||||
this.tableData = data.data.list;
|
||||
this.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
this.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
async loadTree(flush) {
|
||||
this.treeLoading = true
|
||||
const {code, data, msg} = await $.get(loc() + "/getUnitTreeData")
|
||||
this.treeLoading = false
|
||||
if (code == 0) {
|
||||
this.treeData = data
|
||||
} else {
|
||||
this.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
|
||||
if (flush && code == 0) {
|
||||
this.checkData = data[0]
|
||||
this.pageData();
|
||||
}
|
||||
},
|
||||
|
||||
doUserSearch() {
|
||||
this.tabKey = new Date().getTime()
|
||||
this.userPageForm.pageNumber = 1
|
||||
this.userPageData()
|
||||
},
|
||||
userPageOrder(column) {
|
||||
this.userPageForm.pageOrderName = column.prop;
|
||||
this.userPageForm.pageOrderBy = column.order;
|
||||
this.userPageData();
|
||||
},
|
||||
userPageNumberChange(val) {
|
||||
this.userPageForm.pageNumber = val;
|
||||
this.userPageData();
|
||||
},
|
||||
userPageSizeChange(val) {
|
||||
this.userPageForm.pageSize = val;
|
||||
this.userPageData();
|
||||
},
|
||||
async userPageData() {
|
||||
sublime.showLoadingbar();
|
||||
this.userPageForm.unitId = this.checkData.id
|
||||
|
||||
const resp = await $.post(loc() + "/findPersonByUnitId", this.userPageForm)
|
||||
|
||||
requestLaterFun(resp, (data) => {
|
||||
if (this.activeName1 === 'first') {
|
||||
this.userTableData = data.userList.list
|
||||
this.userPageForm.totalCount = data.userList.totalCount;
|
||||
} else {
|
||||
this.userTableData = data.principal
|
||||
this.userPageForm.totalCount = 0;
|
||||
}
|
||||
|
||||
}, () => {
|
||||
this.$notify.error({title: '错误', message: '操作失败'});
|
||||
}, () => {
|
||||
sublime.closeLoadingbar();
|
||||
});
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.loadTree(true)
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,43 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<style>
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava>
|
||||
<user-data-scope
|
||||
ref="userDataScope"
|
||||
:group_id.sync="formData.activityGroupId"
|
||||
></user-data-scope>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
components: {
|
||||
'user-data-scope': httpVueLoader('/components/plugins/UserDataScope.vue?v=' + new Date().getTime()),
|
||||
},
|
||||
computed: {
|
||||
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
|
||||
},
|
||||
async created() {
|
||||
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,31 @@
|
||||
|
||||
class typeUtil {
|
||||
|
||||
constructor() {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取全部会议类型
|
||||
* @returns {Promise<*[]|*>}
|
||||
*/
|
||||
async getAllType() {
|
||||
const resp = await $.get('/platform/activity/site/type/findAll')
|
||||
if (resp.code === 0) {
|
||||
resp.data.forEach(v => {
|
||||
v['text'] = v['meetingTypeName']
|
||||
v['value'] = v['id']
|
||||
})
|
||||
return resp.data
|
||||
}
|
||||
return []
|
||||
}
|
||||
|
||||
async findMaxStateId() {
|
||||
const resp = await $.get('/platform/activity/site/type/findMaxStateId')
|
||||
if (resp.code === 0) {
|
||||
return resp.data
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,108 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.el-popover__title {
|
||||
font-size: 15px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.my-mt {
|
||||
margin-top: 15px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" class="platform" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-calendar>
|
||||
<template slot="dateCell" slot-scope="{date, data}">
|
||||
<p :class="data.isSelected ? 'is-selected' : ''">
|
||||
{{ data.day.split('-').slice(1).join('-') }} {{ data.isSelected ? '✔️' : ''}}
|
||||
</p>
|
||||
|
||||
<div v-for="item in tableData">
|
||||
<div v-if="data.day.toString()==moment(item.startTime).format('YYYY-MM-DD')">
|
||||
<el-popover placement="top-start" title="活动信息" width="320" trigger="hover">
|
||||
|
||||
<div style="font-size: 10px">
|
||||
<el-row class="my-mt">
|
||||
<el-col :span="5"><b>主办单位</b>:</el-col>
|
||||
<el-col :span="19">{{item.unitName}}</el-col>
|
||||
</el-row>
|
||||
<el-row class="my-mt">
|
||||
<el-col :span="5"><b>活动地址</b>:</el-col>
|
||||
<el-col :span="19">{{item.address}}</el-col>
|
||||
</el-row>
|
||||
<el-row class="my-mt">
|
||||
<el-col :span="5"><b>报名时间</b>:</el-col>
|
||||
<el-col :span="19">{{moment(item.applyStartTime).format('YYYY-MM-DD HH:mm')}} 至
|
||||
{{moment(item.applyEndTime).format('YYYY-MM-DD HH:mm')}}
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row class="my-mt">
|
||||
<el-col :span="5"><b>活动时间</b>:</el-col>
|
||||
<el-col :span="19">{{moment(item.startTime).format('YYYY-MM-DD HH:mm')}} 至
|
||||
{{moment(item.endTime).format('YYYY-MM-DD HH:mm')}}
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row class="my-mt">
|
||||
<el-col :span="5"><b>报名链接</b>:</el-col>
|
||||
<el-col :span="19">
|
||||
<el-link style="font-size: 8px" type="primary" target="_blank"
|
||||
href="/platform/activity/apply">
|
||||
点击报名
|
||||
</el-link>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
|
||||
<span class="text-primary" slot="reference">
|
||||
{{item.name}}-(<span
|
||||
v-html="activity.school.getStatus(item.close,item.applyStartTime,item.applyEndTime,item.startTime,item.endTime)"></span>)
|
||||
</span>
|
||||
</el-popover>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</el-calendar>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
data() {
|
||||
return {
|
||||
tableKey: new Date().getTime(),
|
||||
tabLoading: false,
|
||||
tableData: []
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
},
|
||||
methods: {
|
||||
async getData() {
|
||||
this.tabLoading = true
|
||||
const resp = await $.get(loc() + "/getData")
|
||||
|
||||
requestLaterFun(resp, (data) => {
|
||||
this.tableData = data
|
||||
this.tableKey = new Date().getTime()
|
||||
}, () => {
|
||||
this.$notify.error({title: '错误', message: resp.msg});
|
||||
}, () => {
|
||||
this.tabLoading = false
|
||||
});
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
await this.getData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,932 @@
|
||||
<!--活动成绩管理 djx 2019-6-28 -->
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
|
||||
.dia .el-dialog__body {
|
||||
padding: 10px 20px;
|
||||
}
|
||||
|
||||
.el-step__title {
|
||||
font-size: 14px;
|
||||
line-height: 24px;
|
||||
}
|
||||
|
||||
.el-step__icon {
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
}
|
||||
|
||||
/*.el-card__body {*/
|
||||
/* padding: 10px 20px 0px;*/
|
||||
/*}*/
|
||||
|
||||
[class*=el-col-] {
|
||||
text-align: center;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.el-divider__text {
|
||||
color: #f56c6c;
|
||||
}
|
||||
|
||||
.bmqk .el-card__body {
|
||||
padding: 10px 20px;
|
||||
}
|
||||
|
||||
|
||||
.v-0x2323544 {
|
||||
text-align: center;
|
||||
color: rgb(180, 180, 180);
|
||||
}
|
||||
|
||||
.v-0x345756765 {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
</style>
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<div class="search">
|
||||
<div class="search-item">
|
||||
<div class="search-item-label"></div>
|
||||
<div class="search-item-option">
|
||||
<el-date-picker
|
||||
v-model="pageForm.year"
|
||||
type="year"
|
||||
value-format="yyyy" style="width: 100%"
|
||||
placeholder="选择年">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-item">
|
||||
<div class="search-item-label"></div>
|
||||
<div class="search-item-option">
|
||||
<el-select v-model="pageForm.activityId" placeholder="请选择活动名称" filterable clearable
|
||||
style="width: 100%" @change="getEvents">
|
||||
<el-option
|
||||
v-for="item in activitys"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-item">
|
||||
<div class="search-item-label"></div>
|
||||
<div class="search-item-option">
|
||||
<el-select v-model="pageForm.eventId" placeholder="请选择项目名称" filterable clearable
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in events"
|
||||
:key="item.id"
|
||||
:label="item.allname"
|
||||
:value="item.eventid">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-query">
|
||||
<el-button type="primary" icon="el-icon-search" @click="doSearch">搜索</el-button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- <el-row type="flex" :gutter="20" align="center" class="search-card">-->
|
||||
<!-- <el-col :span="7">-->
|
||||
<!-- <el-date-picker-->
|
||||
<!-- v-model="pageForm.year"-->
|
||||
<!-- type="year"-->
|
||||
<!-- value-format="yyyy" style="width: 100%"-->
|
||||
<!-- placeholder="选择年">-->
|
||||
<!-- </el-date-picker>-->
|
||||
<!-- </el-col>-->
|
||||
<!-- <el-col :span="7">-->
|
||||
<!-- <el-select v-model="pageForm.activityId" placeholder="请选择活动名称" filterable clearable-->
|
||||
<!-- style="width: 100%" @change="getEvents">-->
|
||||
<!-- <el-option-->
|
||||
<!-- v-for="item in activitys"-->
|
||||
<!-- :key="item.id"-->
|
||||
<!-- :label="item.name"-->
|
||||
<!-- :value="item.id">-->
|
||||
<!-- </el-option>-->
|
||||
<!-- </el-select>-->
|
||||
<!-- </el-col>-->
|
||||
<!-- <el-col :span="7">-->
|
||||
|
||||
<!-- </el-col>-->
|
||||
<!-- <el-col :span="1">-->
|
||||
<!-- <div class="btn-group tool-button mt5">-->
|
||||
<!-- <el-button type="primary" icon="el-icon-search" @click="doSearch"></el-button>-->
|
||||
<!-- </div>-->
|
||||
<!-- </el-col>-->
|
||||
|
||||
<!-- </el-row>-->
|
||||
|
||||
</el-card>
|
||||
|
||||
|
||||
<!--表格-->
|
||||
<el-card shadow="never" class="mt10">
|
||||
<el-row class="el-table-container">
|
||||
<el-table :data="tableData" style="width: 100%;margin-bottom: 20px" row-key="id" class="vi-table">
|
||||
|
||||
<el-table-column align="center" header-align="center" type="index" :index="indexMethod"
|
||||
label="序号"
|
||||
width="80px"></el-table-column>
|
||||
|
||||
<el-table-column
|
||||
align="center"
|
||||
header-align="center"
|
||||
v-for="column in tableColumns"
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable">
|
||||
|
||||
<template v-if="column.prop=='events'" scope="{row}">
|
||||
<span>{{row.allName}}</span>
|
||||
</template>
|
||||
|
||||
<template v-else-if="column.prop=='gameStyle'" scope="{row}">
|
||||
<span>{{activity.school.gameStyle[row.gameStyle]}}</span>
|
||||
</template>
|
||||
|
||||
<template v-else-if="column.prop=='startTime'" scope="{row}">
|
||||
{{moment(row.startTime).format('YYYY-MM-DD')}} -
|
||||
{{moment(row.endTime).format('YYYY-MM-DD')}}
|
||||
</template>
|
||||
|
||||
<template v-else-if="column.prop=='state'"
|
||||
scope="{row:{close,applyStartTime,applyEndTime,startTime,endTime}}">
|
||||
<div v-html="activity.school.getStatus(close,applyStartTime,applyEndTime,startTime,endTime)"></div>
|
||||
</template>
|
||||
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" label="操作" width="220px">
|
||||
<template slot-scope="scope">
|
||||
<el-button @click="openView(scope)" size="mini">查看</el-button>
|
||||
<el-button type="primary" @click="openCj(scope)" size="mini">
|
||||
分配成绩
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
</el-table>
|
||||
</el-row>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<info ref="info"></info>
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
<!--分配成绩-->
|
||||
<el-dialog title="获奖设置" class="dia"
|
||||
:visible.sync="tdDialogVisible" custom-class="ViewDialogClass" width="60%" top="3%">
|
||||
|
||||
<el-row style="text-align: right">
|
||||
<el-select placeholder="请选择奖品类型" style="width: 16%" size="mini" @change="changeVal" v-model="jplx"
|
||||
clearable="true" filterable="true">
|
||||
<el-option label="奖品" value="奖品"></el-option>
|
||||
<el-option label="现金奖赏" value="现金奖赏"></el-option>
|
||||
</el-select>
|
||||
<el-input size="mini" v-if="isShow" style="width: 14%" placeholder="统一设置奖品名称" v-model="jpmc"></el-input>
|
||||
<el-input size="mini" style="width: 14%" placeholder="统一设置金额" v-model="money" type="number">
|
||||
<template slot="append">元</template>
|
||||
</el-input>
|
||||
</el-row>
|
||||
|
||||
<el-table :data="tdTableData" size="small">
|
||||
<el-table-column align="center" width="280" header-align="center" label="获奖单位" prop="unitid">
|
||||
<template slot-scope="scope">
|
||||
<el-select placeholder="请选择获奖单位" size="small" v-model="scope.row.unitId" style="width: 68%;"
|
||||
clearable filterable>
|
||||
<el-option
|
||||
v-for="item in unitSel"
|
||||
:key="item.id"
|
||||
:label="item.unitname"
|
||||
:value="item.unitid">
|
||||
</el-option>
|
||||
<!-- <el-option v-for="item in unitSel" :label="item.unitname" :value="item.unitId"></el-option>-->
|
||||
</el-select>
|
||||
<el-popover popper-class="aa"
|
||||
placement="top-start"
|
||||
width="280"
|
||||
trigger="click"
|
||||
@show="popShow(scope)">
|
||||
<el-table :data="cyUser" max-height="260" size="mini">
|
||||
<el-table-column width="120" property="username" label="姓名"></el-table-column>
|
||||
<el-table-column width="120" property="sex" label="性别"></el-table-column>
|
||||
</el-table>
|
||||
<el-link v-show="cyUser!=null" slot="reference" type="primary" :underline="false"
|
||||
style="margin-left: 6px;margin-bottom: 6px;">参赛人员
|
||||
</el-link>
|
||||
</el-popover>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="荣誉奖项" prop="mc">
|
||||
<template slot-scope="scope">
|
||||
<el-input size="small" v-model="scope.row.mc"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column v-if="isShow" align="center" header-align="center" label="奖品名称" prop="jpmc">
|
||||
<template slot-scope="scope">
|
||||
<el-input size="small" v-model="scope.row.jpmc"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="金额" prop="money">
|
||||
<template slot-scope="scope">
|
||||
<el-input size="small" v-model="scope.row.money" type="number">
|
||||
<template slot="append">元</template>
|
||||
</el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="操作" width="60px">
|
||||
<template slot-scope="scope">
|
||||
<i v-if="scope.$index == 0" type="success" style="font-size: 2.8em;color:#67C23A;cursor: pointer"
|
||||
@click="addRow(scope)" class="el-icon-circle-plus" circle></i>
|
||||
<i v-if="scope.$index > 0" type="success" style="font-size: 2.8em;color:#f56c6c;cursor: pointer"
|
||||
@click="delRow(scope)" class="el-icon-error" circle></i>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="tdDialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="tdSave">保 存</el-button>
|
||||
<el-button type="success" @click="tdDo">提 交</el-button>
|
||||
</span>
|
||||
|
||||
</el-dialog>
|
||||
|
||||
<!--个人-->
|
||||
<el-dialog title="设置活动获奖人员" class="dia"
|
||||
:visible.sync="grDialogVisible" custom-class="ViewDialogClass" width="60%" top="3%">
|
||||
|
||||
<el-steps :active="active" align-center>
|
||||
<el-step title="选择获奖人员"></el-step>
|
||||
<el-step title="设置获奖信息"></el-step>
|
||||
</el-steps>
|
||||
|
||||
<el-row style="margin-top: 20px;" v-show="active=='1'">
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-input style="width:180px;" size="mini" placeholder="可按姓名、教工号查询" v-model="grPageForm.searchKeyword"
|
||||
clearable></el-input>
|
||||
</div>
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-select placeholder="请选择单位" size="mini" v-model="grPageForm.unit" style="width: 160px;"
|
||||
clearable="true" filterable="true">
|
||||
<el-option v-for="item in unit" :label="item.name" :value="item.id"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-button type="primary" size="mini" icon="el-icon-search" @click="doGrSearch"></el-button>
|
||||
</div>
|
||||
</el-row>
|
||||
|
||||
<el-table :data="grTableData" ref="grTable" size="small" :row-key="rowKey" @selection-change="changeFun"
|
||||
v-show="active=='1'">
|
||||
<el-table-column :reserve-selection="true"
|
||||
@selection-change="changeFun"
|
||||
type="selection"
|
||||
width="40">
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="序号" type="index">
|
||||
<template scope="scope">
|
||||
<span>{{scope.$index+(grPageForm.pageNumber - 1) * grPageForm.pageSize + 1}} </span></template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="教工号" prop="loginname"></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="姓名" prop="username"></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="性别" prop="sex"></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="单位" prop="unitname"></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="电话" prop="mobile"></el-table-column>
|
||||
</el-table>
|
||||
<el-row class="el-pagination-container" v-show="active=='1'">
|
||||
<el-pagination
|
||||
@size-change="grpageSizeChange"
|
||||
@current-change="grpageNumberChange"
|
||||
:current-page="grPageForm.pageNumber"
|
||||
:page-sizes="[10, 20, 30, 50]"
|
||||
:page-size="grPageForm.pageSize"
|
||||
layout="total, sizes, prev, pager, next, jumper"
|
||||
:total="grPageForm.totalCount">
|
||||
</el-pagination>
|
||||
</el-row>
|
||||
|
||||
<el-card class="box-card" v-show="active=='2'" style="margin-top: 20px">
|
||||
<div slot="header" class="clearfix">
|
||||
<span style="color: #ebb563">请填写以下人员的获奖信息</span>
|
||||
|
||||
<el-input size="mini" style="width: 20%;float: right;" placeholder="统一设置金额" v-model="money"
|
||||
type="number">
|
||||
<template slot="append">元</template>
|
||||
</el-input>
|
||||
<el-input size="mini" v-if="isShow" style="width: 20%;float: right;margin-left: 8px;margin-right: 8px;"
|
||||
placeholder="统一设置奖品名称" v-model="jpmc"></el-input>
|
||||
<el-select placeholder="请选择奖品类型" style="width: 20%;float: right;" size="mini" @change="changeVal"
|
||||
v-model="jplx" clearable="true" filterable="true">
|
||||
<el-option label="奖品" value="奖品"></el-option>
|
||||
<el-option label="现金奖赏" value="现金奖赏"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
|
||||
<el-form :model="formData" label-position="top" size="small" label-width="86px">
|
||||
|
||||
<el-row>
|
||||
<el-col :span="3" style="background-color: #EBEEF5;color: black;font-weight: bold">姓名</el-col>
|
||||
<el-col :span="3" style="background-color: #EBEEF5;color: black;font-weight: bold">性别</el-col>
|
||||
<el-col :span="isShow==true?'6':'9'"
|
||||
style="background-color: #EBEEF5;color: black;font-weight: bold">获奖信息
|
||||
</el-col>
|
||||
<el-col :span="6" v-if="isShow" style="background-color: #EBEEF5;color: black;font-weight: bold">
|
||||
奖品名称
|
||||
</el-col>
|
||||
<el-col :span="isShow==true?'6':'9'"
|
||||
style="background-color: #EBEEF5;color: black;font-weight: bold">金额
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
<el-row v-for="item in multipleSelection">
|
||||
<el-col :span="3">
|
||||
<el-lebel style="color: grey">{{item.username}}</el-lebel>
|
||||
</el-col>
|
||||
<el-col :span="3">
|
||||
<el-lebel style="color: grey">{{item.sex}}</el-lebel>
|
||||
</el-col>
|
||||
<el-col :span="isShow==true?'6':'9'">
|
||||
<el-input maxlength="100" placeholder="请输入获奖信息" size="mini" v-model="item.mc" style="width: 88%"
|
||||
auto-complete="off" tabindex="4" type="text"></el-input>
|
||||
</el-col>
|
||||
<el-col :span="6" v-if="isShow">
|
||||
<el-input maxlength="100" placeholder="请输入奖品名称" size="mini" v-model="item.jpmc"
|
||||
style="width: 88%" auto-complete="off" tabindex="4" type="text"></el-input>
|
||||
</el-col>
|
||||
<el-col :span="isShow==true?'6':'9'">
|
||||
<el-input maxlength="100" placeholder="请输入金额" size="mini" v-model="item.money"
|
||||
style="width: 88%" auto-complete="off" tabindex="4" type="number">
|
||||
<template slot="append">元</template>
|
||||
</el-input>
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
|
||||
<el-row style="margin: 20px 0px;" v-if="multipleSelection.length==0">
|
||||
<el-divider content-position="center">您还没有选择获奖人员</el-divider>
|
||||
</el-row>
|
||||
|
||||
</el-form>
|
||||
</el-card>
|
||||
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="grDialogVisible = false">取 消</el-button>
|
||||
<el-button type="warning" @click="active = '1'" v-if="active == '2'">上一步</el-button>
|
||||
<el-button type="primary" @click="active = '2'" v-if="active == '1'">下一步</el-button>
|
||||
<el-button type="primary" @click="grSave" v-if="active == '2'">保 存</el-button>
|
||||
<el-button type="success" @click="grjxDo" v-if="active == '2'">提 交</el-button>
|
||||
</span>
|
||||
|
||||
</el-dialog>
|
||||
|
||||
</div>
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: "#app",
|
||||
mixins: [initTableMixins],
|
||||
data: function () {
|
||||
return {
|
||||
activitys: [],
|
||||
events: [],
|
||||
pageForm: {//分页
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
searchKeyword: "",
|
||||
hdlx: "",
|
||||
hdxm: "",
|
||||
year: new Date().getFullYear() + "",
|
||||
},
|
||||
tableData: [],//表格
|
||||
queryHdlx: [],
|
||||
queryHdxm: [],
|
||||
/*团队获奖设置*/
|
||||
tdDialogVisible: false,
|
||||
tdTableData: [],
|
||||
unitSel: [],
|
||||
temp: [],
|
||||
cyUser: [],
|
||||
/*个人获奖设置*/
|
||||
grDialogVisible: false,
|
||||
grTableData: [],
|
||||
grPageForm: {//分页
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
searchKeyword: "",
|
||||
id: "",
|
||||
unit: "",
|
||||
},
|
||||
unit: [],
|
||||
multipleSelection: [],
|
||||
active: "1",
|
||||
formData: {},
|
||||
|
||||
/*查看*/
|
||||
infoDialogVisible: false,
|
||||
activeName: '1',
|
||||
viewData: [],
|
||||
bmTableData: [],
|
||||
bmfs: "",
|
||||
hdms: "",
|
||||
hjTableData: [],
|
||||
gzryListTableData: [],
|
||||
|
||||
jplx: "",
|
||||
isShow: true,
|
||||
jpmc: "",
|
||||
money: "",
|
||||
isshow: true,
|
||||
xqactive: "1",
|
||||
tableColumns: [
|
||||
{prop: 'name', label: '活动名称'},
|
||||
{prop: 'address', label: '活动地点'},
|
||||
{prop: 'allName', label: '活动项目'},
|
||||
{prop: 'gameStyle', label: '活动类型'},
|
||||
{prop: 'startTime', label: '活动日期'},
|
||||
{prop: 'state', label: '活动状态'},
|
||||
{prop: 'applyNum', label: '已报名人数'},
|
||||
]
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'info': httpVueLoader('/components/activity/school/Info.vue'),
|
||||
},
|
||||
methods: {
|
||||
pageData: function () {
|
||||
|
||||
var self = this;
|
||||
sublime.showLoadingbar();//显示loading
|
||||
$.post(base + "/platform/activity/school/grades/data", self.pageForm, function (data) {
|
||||
sublime.closeLoadingbar();//关闭loading
|
||||
if (data.code == 0) {
|
||||
self.tableData = data.data.hds.list;
|
||||
self.pageForm.totalCount = data.data.hds.totalCount;
|
||||
self.queryHdlx = data.data.hdlx;
|
||||
self.unit = data.data.unit;
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
openView(data) {
|
||||
this.$refs.info.getInfo(data.row.id)
|
||||
this.$refs.guava.view()
|
||||
},
|
||||
/*分页*/
|
||||
pageSizeChange: function (val) {
|
||||
this.pageForm.pageSize = val;
|
||||
this.pageData();
|
||||
},
|
||||
pageNumberChange: function (val) {
|
||||
this.pageForm.pageNumber = val;
|
||||
this.pageData();
|
||||
},
|
||||
grpageSizeChange: function (val) {
|
||||
this.grPageForm.pageSize = val;
|
||||
this.flag();
|
||||
},
|
||||
grpageNumberChange: function (val) {
|
||||
this.grPageForm.pageNumber = val;
|
||||
this.flag();
|
||||
},
|
||||
|
||||
doSearch: function () {
|
||||
this.pageForm.pageNumber = 1;
|
||||
this.pageData();
|
||||
},
|
||||
doGrSearch() {
|
||||
this.flag();
|
||||
},
|
||||
|
||||
flag() {
|
||||
$.post(base + "/platform/activity/school/grades/findGrUser", this.grPageForm, (data) => {
|
||||
if (data.code == 0) {
|
||||
this.grTableData = data.data.list;
|
||||
this.grPageForm.totalCount = data.data.totalCount;
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
changeVal: function (obj) {
|
||||
var self = this;
|
||||
if (obj == "现金奖赏") {
|
||||
self.isShow = false;
|
||||
} else if (obj == "奖品") {
|
||||
self.isShow = true;
|
||||
}
|
||||
},
|
||||
|
||||
openCj: function (scope) {
|
||||
var self = this;
|
||||
self.jplx = "";
|
||||
self.tdTableData = [{
|
||||
unitId: "",
|
||||
mc: "",
|
||||
jpmc: "",
|
||||
money: "",
|
||||
}];
|
||||
self.temp = scope.row;
|
||||
if (scope.row.awardsMode == 2) {
|
||||
$.post(base + "/platform/activity/school/grades/findUnit", {id: scope.row.id}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.unitSel = data.data;
|
||||
|
||||
}
|
||||
}, "json");
|
||||
setTimeout(function () {
|
||||
$.post(base + "/platform/activity/school/grades/findSaveCj", {
|
||||
id: scope.row.id,
|
||||
eventId: scope.row.eventId
|
||||
}, function (data) {
|
||||
if (data.code == 0) {
|
||||
if (data.data.length == 0) {
|
||||
self.tdTableData = [{
|
||||
unitId: "",
|
||||
mc: "",
|
||||
jpmc: "",
|
||||
money: "",
|
||||
}];
|
||||
} else {
|
||||
self.jplx = data.data[0].jplx;
|
||||
self.tdTableData = data.data;
|
||||
}
|
||||
}
|
||||
}, "json");
|
||||
}, 200);
|
||||
self.tdDialogVisible = true;
|
||||
} else if (scope.row.awardsMode == 1) {
|
||||
self.grPageForm.id = scope.row.id;
|
||||
self.grPageForm.eventId = scope.row.eventId;
|
||||
self.active = "1";
|
||||
$.post(base + "/platform/activity/school/grades/findGrUser", self.grPageForm, (data) => {
|
||||
if (data.code == 0) {
|
||||
self.grTableData = data.data.list;
|
||||
self.grPageForm.totalCount = data.data.totalCount;
|
||||
self.grDialogVisible = true;
|
||||
}
|
||||
}, "json");
|
||||
setTimeout(function () {
|
||||
$.post(base + "/platform/activity/school/grades/findGrCj", {
|
||||
id: scope.row.id,
|
||||
eventId: scope.row.eventId
|
||||
}, function (data) {
|
||||
if (data.code == 0) {
|
||||
if (data.data.length > 0) {
|
||||
self.jplx = data.data[0].jplx;
|
||||
} else {
|
||||
self.jplx = "";
|
||||
}
|
||||
|
||||
for (var i = 0; i < data.data.length; i++) {
|
||||
|
||||
for (var d = 0; d < self.grTableData.length; d++) {
|
||||
|
||||
if (data.data[i].id == self.grTableData[d].id) {
|
||||
self.grTableData[d].mc = data.data[i].mc;
|
||||
self.grTableData[d].jpmc = data.data[i].jpmc;
|
||||
self.grTableData[d].money = data.data[i].money;
|
||||
/*self.grTableData[d]=data.data[i];*/
|
||||
self.$refs.grTable.toggleRowSelection(self.grTableData[d], true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}, "json");
|
||||
}, 200);
|
||||
|
||||
}
|
||||
},
|
||||
|
||||
addRow: function (scope) {
|
||||
var self = this;
|
||||
var list = {
|
||||
unitId: "",
|
||||
mc: "",
|
||||
jpmc: self.jpmc,
|
||||
money: self.money,
|
||||
};
|
||||
self.tdTableData.push(list);
|
||||
},
|
||||
|
||||
delRow: function (scope) {
|
||||
var self = this;
|
||||
self.tdTableData.splice(scope.$index, 1);
|
||||
},
|
||||
|
||||
popShow: function (scope) {
|
||||
var self = this;
|
||||
$.post(base + "/platform/activity/school/grades/findCyRy", {
|
||||
unitid: scope.row.unitId,
|
||||
activityId: self.temp.id
|
||||
}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.cyUser = data.data;
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
|
||||
tdSave: function () {
|
||||
var self = this;
|
||||
var array = new Array();
|
||||
self.tdTableData.forEach(function (obj) {
|
||||
array.push({
|
||||
activityId: self.temp.id,
|
||||
eventId: self.temp.eventId,
|
||||
mc: obj.mc,
|
||||
unitId: obj.unitId,
|
||||
hdms: self.temp.awardsMode,
|
||||
jpmc: obj.jpmc,
|
||||
money: obj.money,
|
||||
jplx: self.jplx,
|
||||
});
|
||||
});
|
||||
$.post(base + "/platform/activity/school/grades/tdDo", {
|
||||
data: JSON.stringify(array),
|
||||
activityId: self.temp.id,
|
||||
}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.pageData();
|
||||
self.tdDialogVisible = false;
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
|
||||
tdDo: function () {
|
||||
var self = this;
|
||||
var array = new Array();
|
||||
self.tdTableData.forEach(function (obj) {
|
||||
array.push({
|
||||
activityId: self.temp.id,
|
||||
eventId: self.temp.eventId,
|
||||
mc: obj.mc,
|
||||
unitId: obj.unitId,
|
||||
hdms: self.temp.awardsMode,
|
||||
jpmc: obj.jpmc,
|
||||
money: obj.money,
|
||||
jplx: self.jplx,
|
||||
});
|
||||
});
|
||||
if (self.jplx == "" || self.jplx == null) {
|
||||
self.$message({
|
||||
message: "请选择奖品类型!",
|
||||
type: 'warning'
|
||||
});
|
||||
return;
|
||||
}
|
||||
if (self.jplx == "奖品") {
|
||||
var flag = 0;
|
||||
self.tdTableData.forEach(function (obj) {
|
||||
if (obj.unitId == "" || obj.mc == "" || obj.jpmc == "" || obj.money == "") {
|
||||
flag = 1;
|
||||
return;
|
||||
}
|
||||
});
|
||||
if (flag == 1) {
|
||||
self.$message({
|
||||
message: "请填写相应的信息!",
|
||||
type: 'warning'
|
||||
});
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (self.jplx == "现金奖赏") {
|
||||
var flag = 0;
|
||||
self.tdTableData.forEach(function (obj) {
|
||||
if (obj.unitId == "" || obj.mc == "" || obj.money == "") {
|
||||
flag = 1;
|
||||
return;
|
||||
}
|
||||
});
|
||||
if (flag == 1) {
|
||||
self.$message({
|
||||
message: "请填写相应的信息!",
|
||||
type: 'warning'
|
||||
});
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
self.$confirm("一旦提交不可修改,确定提交吗?", "温馨提示", {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: async (a, b) => {
|
||||
if ("confirm" == a) {
|
||||
|
||||
const resp = await $.post("/platform/activity/school/grades/tdDo", {
|
||||
grades: JSON.stringify(array),
|
||||
unitid: array.unitId,
|
||||
eventId: eventId
|
||||
})
|
||||
|
||||
AssertResponseMessage({
|
||||
response: resp,
|
||||
success: () => {
|
||||
self.pageData();
|
||||
self.tdDialogVisible = false;
|
||||
}
|
||||
})
|
||||
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
grSave: function () {
|
||||
var self = this;
|
||||
var array = new Array();
|
||||
self.multipleSelection.forEach(function (obj) {
|
||||
array.push({
|
||||
activityId: self.temp.id,
|
||||
userId: obj.id,
|
||||
mc: obj.mc,
|
||||
unitId: obj.unitId,
|
||||
hdms: self.temp.awardsMode,
|
||||
jpmc: obj.jpmc,
|
||||
money: obj.money,
|
||||
jplx: self.jplx,
|
||||
});
|
||||
});
|
||||
$.post(base + "/platform/activity/school/grades/grjxDo", {
|
||||
data: JSON.stringify(array),
|
||||
}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.pageData();
|
||||
self.grDialogVisible = false;
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
grjxDo: function () {
|
||||
var self = this;
|
||||
|
||||
if (self.multipleSelection.length == 0) {
|
||||
self.$message({
|
||||
message: "您还没有选择获奖人员!",
|
||||
type: 'error'
|
||||
});
|
||||
return;
|
||||
}
|
||||
if (self.jplx == "" || self.jplx == null) {
|
||||
self.$message({
|
||||
message: "请选择奖品类型!",
|
||||
type: 'warning'
|
||||
});
|
||||
return;
|
||||
}
|
||||
if (self.jplx == "奖品") {
|
||||
var flag = 0;
|
||||
self.multipleSelection.forEach(function (obj) {
|
||||
if (obj.mc == "" || obj.jpmc == "" || obj.money == "") {
|
||||
flag = 1;
|
||||
return;
|
||||
}
|
||||
});
|
||||
if (flag == 1) {
|
||||
self.$message({
|
||||
message: "请填写相应的信息!",
|
||||
type: 'warning'
|
||||
});
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (self.jplx == "现金奖赏") {
|
||||
var flag = 0;
|
||||
self.multipleSelection.forEach(function (obj) {
|
||||
if (obj.mc == "" || obj.money == "") {
|
||||
flag = 1;
|
||||
return;
|
||||
}
|
||||
});
|
||||
if (flag == 1) {
|
||||
self.$message({
|
||||
message: "请填写相应的信息!",
|
||||
type: 'warning'
|
||||
});
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
var array = new Array();
|
||||
self.multipleSelection.forEach(function (obj) {
|
||||
array.push({
|
||||
activityId: self.temp.id,
|
||||
userId: obj.userid,
|
||||
mc: obj.mc,
|
||||
unitId: obj.unitId,
|
||||
hdms: self.temp.awardsMode,
|
||||
jpmc: obj.jpmc,
|
||||
money: obj.money,
|
||||
jplx: self.jplx,
|
||||
});
|
||||
});
|
||||
self.$confirm("一旦提交不可修改,确定提交吗?", "温馨提示", {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: function (a, b) {
|
||||
if ("confirm" == a) {
|
||||
|
||||
$.post(base + "/platform/activity/school/grades/grjxDo", {
|
||||
grades: JSON.stringify(array),
|
||||
}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.pageData();
|
||||
self.multipleSelection = [];
|
||||
setTimeout(function () {
|
||||
self.$refs.grTable.clearSelection();
|
||||
}, 500)
|
||||
self.grDialogVisible = false;
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
rowKey: function (row) {
|
||||
var self = this;
|
||||
return row.id;
|
||||
},
|
||||
|
||||
changeFun: function (val) {
|
||||
this.multipleSelection = val;
|
||||
},
|
||||
async getActivitys() {
|
||||
const {data} = await $.get("/platform/activity/remind/getActivitys")
|
||||
return data;
|
||||
|
||||
},
|
||||
async getEvents() {
|
||||
const resp = await $.post("/platform/activity/apply/getEvents", {activityId: this.pageForm.activityId})
|
||||
this.events = resp
|
||||
}
|
||||
|
||||
},
|
||||
async created() {
|
||||
this.pageData();
|
||||
this.activitys = await this.getActivitys()
|
||||
/*this.events = await activity.getEvents()*/
|
||||
},
|
||||
watch: {
|
||||
"pageForm.hdlx": function (obj) {
|
||||
var self = this;
|
||||
if (obj != "" && obj != null && obj != "undefined") {
|
||||
self.pageForm.hdxm = "";
|
||||
$.post(base + "/platform/hd/xhdgl/xhdxxgl/findHdXm", {id: obj}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.queryHdxm = data.data;
|
||||
self.pageForm.hdxm = data.data[0].id;
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
},
|
||||
"jpmc": function (obj) {
|
||||
var self = this;
|
||||
self.tdTableData.forEach(function (value) {
|
||||
value.jpmc = obj;
|
||||
});
|
||||
self.multipleSelection.forEach(function (value) {
|
||||
value.jpmc = obj;
|
||||
});
|
||||
},
|
||||
"money": function (obj) {
|
||||
var self = this;
|
||||
self.tdTableData.forEach(function (value) {
|
||||
value.money = obj;
|
||||
});
|
||||
self.multipleSelection.forEach(function (value) {
|
||||
value.money = obj;
|
||||
});
|
||||
}
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,350 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
|
||||
</style>
|
||||
|
||||
<div id="app" class="platform" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<div class="search">
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">年  度</div>
|
||||
<div class="search-item-option">
|
||||
<el-date-picker
|
||||
v-model="pageForm.year"
|
||||
type="year"
|
||||
value-format="yyyy" style="width: 100%"
|
||||
placeholder="选择年">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">活动名称</div>
|
||||
<div class="search-item-option">
|
||||
<!--<el-input v-model="pageForm.name" placeholder="请输入活动名称" clearable></el-input>-->
|
||||
<el-select v-model="pageForm.activityId" placeholder="请选择活动名称" filterable clearable
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in activities"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">活动级别</div>
|
||||
<div class="search-item-option">
|
||||
<!-- <el-select v-model="pageForm.gameStyle" placeholder="请选择活动类型" filterable clearable
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="(k,v) in activity.school.gameStyle"
|
||||
:key="v"
|
||||
:label="k"
|
||||
:value="v">
|
||||
</el-option>
|
||||
</el-select>-->
|
||||
<el-select v-model="pageForm.activityLevel" placeholder="请选择活动级别"
|
||||
clearable
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in activityTypeList"
|
||||
:key="item.code"
|
||||
:label="item.name"
|
||||
:value="item.code">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-query">
|
||||
<el-button type="primary" icon="el-icon-search" @click="doSearch">搜索</el-button>
|
||||
</div>
|
||||
|
||||
<div class="search-item" style="width: 80vw">
|
||||
<div class="search-item-label">一键查询</div>
|
||||
<div class="search-item-option">
|
||||
<el-radio-group v-model="pageForm.query" @change="doSearch">
|
||||
<el-radio-button v-for="it in queryOptions" :label="it.key" :key="it.key">
|
||||
{{it.value}}
|
||||
</el-radio-button>
|
||||
</el-radio-group>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool label="活动列表" :app="this">
|
||||
<template #func>
|
||||
<el-button type="primary" icon="el-icon-edit-outline" size="small"
|
||||
@click="openAdd">
|
||||
创建活动
|
||||
</el-button>
|
||||
</template>
|
||||
</table-tool>
|
||||
|
||||
<el-table :data="tableData" style="width: 100%;margin-bottom: 20px" row-key="id"
|
||||
@sort-change="pageOrder" v-loading="tableLoading" :size="tableSize" class="vi-table">
|
||||
|
||||
<el-table-column align="center" header-align="center" type="index" :index="indexMethod" label="序号"
|
||||
width="80px"></el-table-column>
|
||||
|
||||
<el-table-column
|
||||
align="center"
|
||||
header-align="center"
|
||||
v-for="column in tableColumns"
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
show-overflow-tooltip
|
||||
:sortable="column.sortable">
|
||||
|
||||
<template v-if="column.prop=='events'" scope="{row}">
|
||||
<span>{{row.allName}}</span>
|
||||
</template>
|
||||
|
||||
<template v-else-if="column.prop=='gameStyle'" scope="{row}">
|
||||
<span>{{activity.school.gameStyle[row.gameStyle]}}</span>
|
||||
</template>
|
||||
|
||||
<template v-else-if="column.prop=='foundUnit'" scope="{row}">
|
||||
<span v-if="row.activityLevel===40001">校工会</span>
|
||||
<span v-if="row.activityLevel===40002">{{row.unionname}}</span>
|
||||
<span v-if="row.activityLevel===40003">{{row.clubName}}</span>
|
||||
</template>
|
||||
|
||||
<template v-else-if="column.prop=='startTime'" scope="{row}">
|
||||
{{moment(row.startTime).format('YYYY-MM-DD')}} -
|
||||
{{moment(row.endTime).format('YYYY-MM-DD')}}
|
||||
</template>
|
||||
|
||||
<template v-else-if="column.prop=='state'"
|
||||
scope="{row:{close,applyStartTime,applyEndTime,startTime,endTime,isSave}}">
|
||||
<div v-html="activity.school.getStatus(close,applyStartTime,applyEndTime,startTime,endTime,isSave)"></div>
|
||||
</template>
|
||||
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column prop="userOnline" align="center" header-align="center" label="操作" width="150px">
|
||||
<template scope="{row}">
|
||||
<el-dropdown @command="dropdownCommand">
|
||||
<el-button size="mini" :loading="row.loading">
|
||||
<i class="ti-settings"></i>
|
||||
<span class="ti-angle-down"></span>
|
||||
</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item :command="{type:'view',row}">
|
||||
查看
|
||||
</el-dropdown-item>
|
||||
<!-- <el-dropdown-item :command="{type:'export',row}">
|
||||
导出名单docx
|
||||
</el-dropdown-item>-->
|
||||
<el-dropdown-item :command="{type:'exportXlsx',row}">
|
||||
导出名单
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'edit',row}">
|
||||
编辑
|
||||
</el-dropdown-item>
|
||||
<!--#if(@shiro.hasRole('sysadmin')){#-->
|
||||
<el-dropdown-item :command="{type:'delete',row}">
|
||||
删除
|
||||
</el-dropdown-item>
|
||||
<!--#}#-->
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #edit_func>
|
||||
<el-button type="primary" @click="doSave">保 存</el-button>
|
||||
<el-button type="primary" @click="doOperate">提 交</el-button>
|
||||
</template>
|
||||
|
||||
<template #edit>
|
||||
<add-activity :form="formData" ref="activity" @flip="flip" @flush="flush" :is_club="is_club"
|
||||
:is_union="is_union" :is_sysadmin="is_sysadmin" :is_a06="is_A06"></add-activity>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<info ref="info"></info>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
let E = window.wangEditor
|
||||
const editors = {}
|
||||
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
is_club: false,
|
||||
is_union: false,
|
||||
is_sysadmin: false,
|
||||
is_A06: false,
|
||||
activities: [],
|
||||
unitOptions: [],
|
||||
activityTypeList: [],
|
||||
planList: [],
|
||||
typeList: [],
|
||||
types: [],
|
||||
events: [],
|
||||
submitDisabled: false,
|
||||
formData: {
|
||||
activityGroupId: null,
|
||||
personType: 1,
|
||||
activityLevel: 1,
|
||||
gameStyle: 1,
|
||||
applyWay: [2],
|
||||
awardsMode: [],
|
||||
combinationMethod: []
|
||||
},
|
||||
tableColumns: [
|
||||
{prop: 'name', label: '活动名称'},
|
||||
{prop: 'activityCode', label: '活动编号', sortable: true},
|
||||
{prop: 'address', label: '活动地点'},
|
||||
{prop: 'foundUnit', label: '创建单位', sortable: true},
|
||||
{prop: 'activityLevelName', label: '活动级别', sortable: true},
|
||||
{prop: 'startTime', label: '活动日期', sortable: true},
|
||||
{prop: 'state', label: '活动状态', sortable: true},
|
||||
{prop: 'applyNum', label: '已报名人数', sortable: true},
|
||||
{prop: 'foundDate', label: '创建时间', sortable: true},
|
||||
],
|
||||
pageForm: {
|
||||
query: 'zero'
|
||||
},
|
||||
queryOptions: [
|
||||
{key: 'zero', value: '全部'},
|
||||
{key: 'one', value: '正在报名'},
|
||||
{key: 'two', value: '报名结束'},
|
||||
{key: 'three', value: '活动进行中'},
|
||||
{key: 'four', value: '活动已结束'},
|
||||
],
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'info': httpVueLoader('/components/activity/school/Info.vue?v=' + new Date().getTime()),
|
||||
'add-activity': httpVueLoader('/components/activity/school/AddActivity.vue?v=' + new Date().getTime())
|
||||
},
|
||||
methods: {
|
||||
flip() {
|
||||
this.pageData()
|
||||
this.$refs.guava.index()
|
||||
},
|
||||
flush() {
|
||||
this.pageData()
|
||||
},
|
||||
dropdownCommand(command) {
|
||||
const {type, row} = command
|
||||
if (type === 'view') {
|
||||
this.openView(row)
|
||||
} else if (type === 'edit') {
|
||||
this.openEdit(row)
|
||||
} else if (type === 'delete') {
|
||||
this.doDelete(row)
|
||||
} else if (type === 'export') {
|
||||
window.open("/platform/activity/common/export?id=" + row.id)
|
||||
} else if (type === 'exportXlsx') {
|
||||
location.href = "/platform/activity/common/exportXlsx?id=" + row.id
|
||||
}
|
||||
},
|
||||
openView(row) {
|
||||
const {id} = row
|
||||
this.$refs.info.getInfo(id)
|
||||
this.$refs.guava.view()
|
||||
},
|
||||
async openAdd() {
|
||||
this.$refs.activity.openAdd()
|
||||
this.$refs.guava.edit()
|
||||
},
|
||||
async openEdit(row) {
|
||||
const {id, applyStartTime, isSave} = row
|
||||
this.formData.id = id
|
||||
const now = moment().valueOf()
|
||||
/* if (!isSave && now > moment(applyStartTime).valueOf()) {
|
||||
/!* this.$confirm('该活动已开始报名,现在编辑将会删除所有已报名的记录!是否确认编辑?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(async () => {
|
||||
this.$refs.activity.openEdit(row)
|
||||
this.$refs.guava.edit()
|
||||
}).catch(() => {
|
||||
|
||||
});*!/
|
||||
this.$refs.activity.openEdit(row)
|
||||
this.$refs.guava.edit()
|
||||
} else {
|
||||
this.$refs.activity.openEdit(row, true)
|
||||
this.$refs.guava.edit()
|
||||
}*/
|
||||
this.$refs.activity.openEdit(row, true)
|
||||
this.$refs.guava.edit()
|
||||
},
|
||||
doDelete(row) {
|
||||
const {id} = row
|
||||
this.$confirm('确定要删除该活动吗?', '提示', {type: 'warning'}).then(async () => {
|
||||
this.$set(row, "loading", true)
|
||||
const resp = await $.post(loc() + "/doDelete", {id});
|
||||
requestLaterMsgFun(vue, resp, async () => {
|
||||
this.pageData()
|
||||
}, () => {
|
||||
}, () => {
|
||||
this.$set(row, "loading", false)
|
||||
})
|
||||
}
|
||||
);
|
||||
},
|
||||
async getActivitys() {
|
||||
const {data} = await $.get("/platform/activity/remind/getActivitys")
|
||||
return data;
|
||||
},
|
||||
async getActivityTypeList(code) {
|
||||
const {data} = await $.get("/platform/activity/basic/basic/settings/getActivityTwoLevelType", {code: code})
|
||||
return data;
|
||||
},
|
||||
async doOperate() {
|
||||
await this.$refs.activity.operate()
|
||||
},
|
||||
async doSave() {
|
||||
this.$refs.activity.doSave()
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
if ("${@shiro.hasRole('H02')}" === "true") {
|
||||
this.is_club = true
|
||||
}
|
||||
if ("${@shiro.hasRole('H04')}" === "true") {
|
||||
this.is_union = true
|
||||
}
|
||||
if ("${@shiro.hasRole('sysadmin')}" === "true") {
|
||||
this.is_sysadmin = true
|
||||
}
|
||||
if ("${@shiro.hasRole('A06')}" === "true") {
|
||||
this.is_A06 = true
|
||||
}
|
||||
this.pageData()
|
||||
this.activities = await this.getActivitys()
|
||||
this.unitOptions = await getUnits(null)
|
||||
this.activityTypeList = await this.getActivityTypeList("40000")
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,385 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<style>
|
||||
#content .w-e-toolbar, #content .w-e-text-container {
|
||||
z-index: 1 !important;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" class="platform" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<div class="search">
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">计划年份</div>
|
||||
<div class="search-item-option">
|
||||
<el-date-picker
|
||||
style="width: 100%"
|
||||
v-model="pageForm.year"
|
||||
value-format="yyyy"
|
||||
type="year"
|
||||
placeholder="选择年">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">计划名称</div>
|
||||
<div class="search-item-option">
|
||||
<el-input v-model="pageForm.name" placeholder="请输入计划名称" clearable></el-input>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">项目名称:</div>
|
||||
<div class="search-item-option">
|
||||
<el-select v-model="pageForm.eventId" placeholder="请选择活动项目" filterable clearable
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in eventList"
|
||||
:key="item.id"
|
||||
:label="item.allName"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-query">
|
||||
<el-button type="primary" icon="el-icon-search" @click="pageData">搜索</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool label="计划列表" :app="this">
|
||||
<template #func>
|
||||
<el-button type="primary" icon="el-icon-edit-outline" size="small"
|
||||
@click="openAdd">
|
||||
创建活动计划
|
||||
</el-button>
|
||||
</template>
|
||||
</table-tool>
|
||||
|
||||
<el-table :data="tableData" style="width: 100%;margin-bottom: 20px" row-key="id"
|
||||
@sort-change="pageOrder" v-loading="tableLoading" :size="tableSize" class="vi-table">
|
||||
|
||||
<el-table-column align="center" header-align="center" type="index" :index="indexMethod" label="序号"
|
||||
width="80px"></el-table-column>
|
||||
|
||||
<el-table-column
|
||||
align="center"
|
||||
header-align="center"
|
||||
v-for="column in tableColumns"
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
show-overflow-tooltip
|
||||
:sortable="column.sortable">
|
||||
|
||||
<template v-if="column.prop=='carryOut'" scope="{row}">
|
||||
<span v-if="row.carryOut" class="text-success">已执行</span>
|
||||
<span v-if="!row.carryOut" class="text-primary">未执行</span>
|
||||
</template>
|
||||
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column prop="userOnline" align="center" header-align="center" label="操作" width="150px">
|
||||
<template scope="{row}">
|
||||
<el-dropdown @command="dropdownCommand">
|
||||
<el-button size="mini" :loading="row.loading">
|
||||
<i class="ti-settings"></i>
|
||||
<span class="ti-angle-down"></span>
|
||||
</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item :command="{type:'activity',row}" v-if="!row.carryOut">
|
||||
创建活动
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'view',row}">
|
||||
查看
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'edit',row}">
|
||||
编辑
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'delete',row}">
|
||||
删除
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #edit_func>
|
||||
<template v-if="!flag">
|
||||
<el-button type="primary" @click="operation">确 定</el-button>
|
||||
</template>
|
||||
|
||||
<template v-if="flag">
|
||||
<el-button type="primary" @click="doSave">保 存</el-button>
|
||||
<el-button type="primary" @click="doActivity">确 定</el-button>
|
||||
</template>
|
||||
</template>
|
||||
|
||||
<template #edit>
|
||||
<template v-if="!flag">
|
||||
<vi-title title="填写计划信息"></vi-title>
|
||||
<el-form :model="formData" ref="form" :rules="formRules" label-width="100px" label-position="left"
|
||||
label-suffix=":" style="padding: 0 2%">
|
||||
|
||||
<el-form-item prop="type" label="活动类型">
|
||||
<el-radio-group v-model="formData.type">
|
||||
<el-radio :label="1" border>校工会活动计划</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item prop="name" label="计划名称">
|
||||
<el-input maxlength="50" placeholder="请填写计划名称" v-model="formData.name"
|
||||
type="text"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item prop="time" label="计划时间">
|
||||
<el-date-picker
|
||||
v-model="formData.time"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="选择日期"
|
||||
style="width: 100%">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item prop="event" label="活动项目">
|
||||
<el-select v-model="formData.event" placeholder="请选择活动项目" filterable multiple
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in eventList"
|
||||
:key="item.id"
|
||||
:label="item.allName"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item prop="content" label="计划内容" class="is-required">
|
||||
<div id="content"></div>
|
||||
</el-form-item>
|
||||
|
||||
<div style="float: right;margin: 20px 0">
|
||||
<el-button type="primary" @click="operation">提 交</el-button>
|
||||
</div>
|
||||
</el-form>
|
||||
</template>
|
||||
|
||||
<add-activity v-show="flag" :form="activityFormData" ref="activity" @flip="flip"></add-activity>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<plan-info ref="info"></plan-info>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
let E = window.wangEditor
|
||||
const editors = {}
|
||||
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
let validContent = (rule, value, callback) => {
|
||||
if (!this.formData.content || !dd3s.html2txt(this.formData.content)) {
|
||||
callback(new Error('请填写计划内容'));
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
};
|
||||
return {
|
||||
eventList: [],
|
||||
flag: false,
|
||||
formData: {
|
||||
name: '',
|
||||
time: '',
|
||||
event: [],
|
||||
content: ''
|
||||
},
|
||||
activityFormData: {
|
||||
personType: 1,
|
||||
activityLevel: 1,
|
||||
gameStyle: 1,
|
||||
applyWay: [2],
|
||||
awardsMode: [],
|
||||
combinationMethod: []
|
||||
},
|
||||
tableColumns: [
|
||||
{prop: 'name', label: '计划名称'},
|
||||
{prop: 'time', label: '计划时间'},
|
||||
{prop: 'allName', label: '活动项目'},
|
||||
{prop: 'carryOut', label: '计划状态'},
|
||||
],
|
||||
formRules: {
|
||||
name: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
time: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
event: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
type: [{required: true, message: '必选', trigger: ['blur', 'change']}],
|
||||
content: [{validator: validContent, trigger: ['blur', 'change']}]
|
||||
},
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'add-activity': httpVueLoader('/components/activity/school/AddActivity.vue'),
|
||||
'plan-info': httpVueLoader('/components/activity/school/planInfo.vue?v=1.0.0'),
|
||||
},
|
||||
methods: {
|
||||
flip() {
|
||||
this.pageData()
|
||||
this.$refs.guava.index()
|
||||
},
|
||||
dropdownCommand(command) {
|
||||
const {type, row} = command
|
||||
if (type === 'view') {
|
||||
this.openView(row)
|
||||
} else if (type === 'edit') {
|
||||
this.openEdit(row)
|
||||
} else if (type === 'delete') {
|
||||
this.doDelete(row)
|
||||
} else if (type === 'activity') {
|
||||
this.openActivity(row)
|
||||
}
|
||||
},
|
||||
openView(row) {
|
||||
const {id} = row
|
||||
this.$refs.info.getInfo(id)
|
||||
this.$refs.guava.view()
|
||||
},
|
||||
openActivity(row) {
|
||||
this.flag = true
|
||||
this.activityFormData = {}
|
||||
this.$refs.guava.edit()
|
||||
|
||||
this.$nextTick(() => {
|
||||
this.$refs.activity.openAdd(row)
|
||||
})
|
||||
},
|
||||
doSave() {
|
||||
this.$refs.activity.doSave()
|
||||
},
|
||||
doActivity() {
|
||||
this.formData.id ? this.$refs.activity.doEdit() : this.$refs.activity.doAdd()
|
||||
},
|
||||
async openEdit(row) {
|
||||
this.flag = false
|
||||
|
||||
const cloneRow = clone(row)
|
||||
cloneRow.event = JSON.parse(cloneRow.event)
|
||||
this.formData = cloneRow
|
||||
this.$refs.guava.edit()
|
||||
this.$nextTick(() => {
|
||||
this.initEditor()
|
||||
})
|
||||
},
|
||||
async openAdd() {
|
||||
this.formData = {
|
||||
type: 1
|
||||
}
|
||||
this.flag = false
|
||||
this.$refs.guava.edit()
|
||||
this.$nextTick(() => {
|
||||
this.initEditor()
|
||||
if (this.$refs['form']) {
|
||||
this.$refs['form'].resetFields()
|
||||
}
|
||||
this.formData = {
|
||||
name: '',
|
||||
time: '',
|
||||
event: [],
|
||||
content: ''
|
||||
}
|
||||
})
|
||||
},
|
||||
async operation() {
|
||||
let url = this.formData.id ? "/doEdit" : "/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(loc() + url, {
|
||||
id: this.formData.id,
|
||||
name: this.formData.name,
|
||||
time: this.formData.time,
|
||||
content: this.formData.content,
|
||||
event: JSON.stringify(this.formData.event)
|
||||
})
|
||||
|
||||
closeLoadingFunc(loading, resp, async () => {
|
||||
this.pageData()
|
||||
this.$refs.guava.index()
|
||||
}, (data, msg) => {
|
||||
this.$notify.error(msg);
|
||||
})
|
||||
} else {
|
||||
this.$notify.error({title: '错误', message: '存在未填写的的必填项'});
|
||||
}
|
||||
});
|
||||
},
|
||||
doDelete(row) {
|
||||
const {id} = row
|
||||
this.$confirm('确定要删除该计划吗?', '提示', {type: 'warning'}).then(async () => {
|
||||
const resp = await $.post(loc() + "/doDelete", {id: id});
|
||||
|
||||
requestLaterMsgFun(vue, resp, () => {
|
||||
this.pageData()
|
||||
}, () => {
|
||||
this.$notify.error({title: '错误', message: resp.msg});
|
||||
})
|
||||
})
|
||||
},
|
||||
initActivityEditor() {
|
||||
let keys = ['athleteQualification', 'registrationMethod', 'competitionMethod', 'rewardMethod', 'precautions', 'eventNotification']
|
||||
keys.forEach(key => {
|
||||
$("#" + key).html("")
|
||||
editors[key] = new E('#' + key)
|
||||
editors[key].config.onchange = (html) => {
|
||||
this.formData[key] = html
|
||||
}
|
||||
editors[key].create()
|
||||
if (this.formData[key]) {
|
||||
editors[key].txt.html(this.formData[key])
|
||||
}
|
||||
})
|
||||
},
|
||||
initEditor() {
|
||||
let keys = ['content']
|
||||
keys.forEach(key => {
|
||||
$("#" + key).html("")
|
||||
editors[key] = new E('#' + key)
|
||||
editors[key].config.onchange = (html) => {
|
||||
this.formData[key] = html
|
||||
}
|
||||
editors[key].create()
|
||||
if (this.formData[key]) {
|
||||
editors[key].txt.html(this.formData[key])
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.pageData()
|
||||
this.eventList = await activity.getEvents()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,400 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<div id="app" v-cloak>
|
||||
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<div class="search">
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">年  度</div>
|
||||
<div class="search-item-option">
|
||||
<el-date-picker
|
||||
v-model="pageForm.year"
|
||||
@change="getActivitys"
|
||||
type="year"
|
||||
value-format="yyyy" style="width: 100%"
|
||||
placeholder="选择年" :clearable="false">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">活动名称</div>
|
||||
<div class="search-item-option">
|
||||
<el-select v-model="pageForm.activityId" placeholder="请选择活动名称" filterable :clearable="false"
|
||||
style="width: 100%" @change="actChange(pageForm.activityId)">
|
||||
<el-option
|
||||
v-for="item in activityList"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">工会名称</div>
|
||||
<div class="search-item-option">
|
||||
<el-select v-model="pageForm.unionId" placeholder="请选择工会" filterable :clearable="false"
|
||||
style="width: 100%" @change="unionChange(pageForm.unionId)">
|
||||
<el-option
|
||||
v-for="item in unionList"
|
||||
:key="item.id"
|
||||
:label="item.unionname"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="search-query">
|
||||
<el-button type="primary" icon="el-icon-s-order" @click="summary">汇总表</el-button>
|
||||
</div>
|
||||
|
||||
<div class="pull-right offscreen-right" style="margin-left: auto ">
|
||||
<el-button type="primary" icon="el-icon-printer" @click="print">打 印</el-button>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</el-card>
|
||||
<div id=print>
|
||||
<!-- <el-card shadow="never" class="mt10">
|
||||
<table class="table table-bordered">
|
||||
<tr>
|
||||
<td colspan="11" class="text-center">
|
||||
<span v-if="activityList.find(v=>v.id === pageForm.activityId)">
|
||||
{{ activityList.find(v=>v.id === pageForm.activityId).name }}
|
||||
({{unionName}})
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td>项目</td>
|
||||
<td v-for="i in 8">
|
||||
第{{i}}名
|
||||
</td>
|
||||
<td>备注</td>
|
||||
</tr>
|
||||
<tr v-for="(o,k,index) in tableDataUnionPrize['团体项目']">
|
||||
<td style="vertical-align:middle" v-if="0==index"
|
||||
:rowspan="Object.keys(tableDataUnionPrize['团体项目']).length">团体项目
|
||||
</td>
|
||||
<td>{{k}}</td>
|
||||
<td v-for="i in 8">
|
||||
<span v-if="o.filter(f=>f.ranking==i && f.numberOfPeople!=null) && o.filter(f=>f.ranking==i && f.numberOfPeople!=null).length>0">
|
||||
{{o.filter(f=>f.ranking==i && f.numberOfPeople!=null).map(g=>g.numberOfPeople).reduce((a,b)=>a+b)}}
|
||||
</span>
|
||||
</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr v-for="(o,k,index) in tableDataUnionPrize['男子项目']">
|
||||
<td style="vertical-align:middle" v-if="0==index"
|
||||
:rowspan="Object.keys(tableDataUnionPrize['男子项目']).length">男子项目
|
||||
</td>
|
||||
<td>{{k}}</td>
|
||||
<td v-for="i in 8">
|
||||
{{o.filter(f=>f.ranking==i).map(g=>g.username).join('、')}}
|
||||
</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr v-for="(o,k,index) in tableDataUnionPrize['女子项目']">
|
||||
<td style="vertical-align:middle" dd v-if="0==index"
|
||||
:rowspan="Object.keys(tableDataUnionPrize['女子项目']).length">女子项目
|
||||
</td>
|
||||
<td>{{k}}</td>
|
||||
<td v-for="i in 8">
|
||||
{{o.filter(f=>f.ranking==i).map(g=>g.username).join('、')}}
|
||||
</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>合计</td>
|
||||
<td></td>
|
||||
<td v-for="i in 9">
|
||||
{{lastSum[i]}}
|
||||
</td>
|
||||
</tr>
|
||||
<!– <tr v-for="(o,k,index) in tableDataUnionPrize['其他']">–>
|
||||
<!– <td v-if="0==index" :rowspan="Object.keys(tableDataUnionPrize['其他']).length">其他</td>–>
|
||||
<!– <td>{{k}}</td>–>
|
||||
<!– <td v-for="i in 8">–>
|
||||
<!– <span v-if="o.filter(f=>f.ranking==i && f.numberOfPeople!=null) && o.filter(f=>f.ranking==i && f.numberOfPeople!=null).length>0">–>
|
||||
<!– {{o.filter(f=>f.ranking==i && f.numberOfPeople!=null).map(g=>g.numberOfPeople).reduce((a,b)=>a+b)}}–>
|
||||
<!– </span>–>
|
||||
<!– </td>–>
|
||||
<!– <td></td>–>
|
||||
<!– </tr>–>
|
||||
|
||||
|
||||
</table>
|
||||
</el-card>-->
|
||||
|
||||
<el-card class="mt10" shadow="never" v-if="pageForm.activityId!=null">
|
||||
<vi-title :title="unionName+'奖品名单'"></vi-title>
|
||||
<template>
|
||||
<table class="table table-bordered" v-if="isSummary==1">
|
||||
<tr>
|
||||
<td class="text-center" colspan="11">
|
||||
<span v-if="activityList.find(v=>v.id === pageForm.activityId)">
|
||||
{{ activityList.find(v=>v.id === pageForm.activityId).name }}
|
||||
({{unionName}})
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td>项目</td>
|
||||
<td v-for="i in 8">
|
||||
第{{i}}名
|
||||
</td>
|
||||
<td>备注</td>
|
||||
</tr>
|
||||
<tr v-for="(o,k,index) in tableDataUnionPrize['团体项目']">
|
||||
<td :rowspan="Object.keys(tableDataUnionPrize['团体项目']).length" style="vertical-align:middle"
|
||||
v-if="0==index">团体项目
|
||||
</td>
|
||||
<td>{{k}}</td>
|
||||
<td v-for="i in 8">
|
||||
<span v-if="o.filter(f=>f.ranking==i && f.numberOfPeople!=null) && o.filter(f=>f.ranking==i && f.numberOfPeople!=null).length>0">
|
||||
{{o.filter(f=>f.ranking==i && f.numberOfPeople!=null).map(g=>g.numberOfPeople).reduce((a,b)=>a+b)}}
|
||||
</span>
|
||||
</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr v-for="(o,k,index) in tableDataUnionPrize['男子项目']">
|
||||
<td :rowspan="Object.keys(tableDataUnionPrize['男子项目']).length" style="vertical-align:middle"
|
||||
v-if="0==index">男子项目
|
||||
</td>
|
||||
<td>{{k}}</td>
|
||||
<td v-for="i in 8">
|
||||
{{o.filter(f=>f.ranking==i).map(g=>g.username).join('、')}}
|
||||
</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr v-for="(o,k,index) in tableDataUnionPrize['女子项目']">
|
||||
<td :rowspan="Object.keys(tableDataUnionPrize['女子项目']).length" dd
|
||||
style="vertical-align:middle"
|
||||
v-if="0==index">女子项目
|
||||
</td>
|
||||
<td>{{k}}</td>
|
||||
<td v-for="i in 8">
|
||||
{{o.filter(f=>f.ranking==i).map(g=>g.username).join('、')}}
|
||||
</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>合计</td>
|
||||
<td></td>
|
||||
<td v-for="i in 9">
|
||||
{{lastSum[i]}}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<el-table :data="tableData" :header-cell-style="{background:'#FAFAFA'}" @sort-change="pageOrder"
|
||||
border row-key="id"
|
||||
size="mini" stripe style="width: 100%"
|
||||
v-if="isSummary==2" v-loading="tableLoading">
|
||||
|
||||
|
||||
<el-table-column :index="indexMethod" align="center" header-align="center" label="序号"
|
||||
type="index"
|
||||
width="80px"></el-table-column>
|
||||
<el-table-column
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
align="center"
|
||||
header-align="center"
|
||||
show-overflow-tooltip
|
||||
v-for="column in summaryColumns"
|
||||
v-if="isSummary==2">
|
||||
</el-table-column>
|
||||
|
||||
|
||||
<el-table-column align="center" header-align="center" label="签字"
|
||||
show-overflow-tooltip v-if="isSummary==2"></el-table-column>
|
||||
|
||||
</el-table>
|
||||
</template>
|
||||
</el-card>
|
||||
</div>
|
||||
|
||||
</template>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
isSummary: 1,
|
||||
activityList: [],
|
||||
unionList: [],
|
||||
unionName: "",
|
||||
pageForm: {
|
||||
activityId: "",
|
||||
unionId: "",
|
||||
year: new Date().getFullYear() + ''
|
||||
},
|
||||
summaryColumns: [
|
||||
{prop: 'unionname', label: '分工会'},
|
||||
{prop: 'one', label: '第一名'},
|
||||
{prop: 'two', label: '第二名'},
|
||||
{prop: 'three', label: '第三名'},
|
||||
{prop: 'four', label: '第四名'},
|
||||
{prop: 'fives', label: '第五名'},
|
||||
{prop: 'six', label: '第六名'},
|
||||
{prop: 'seven', label: '第七名'},
|
||||
{prop: 'eight', label: '第八名'},
|
||||
{prop: 'totalPeople', label: '合计'},
|
||||
],
|
||||
tableDataUnionPrize: {},
|
||||
lastSum: {}
|
||||
}
|
||||
},
|
||||
components: {},
|
||||
methods: {
|
||||
getTableTdContent(d, i) {
|
||||
return d.filter(v => {
|
||||
if (v.isteampersonal === 1) {
|
||||
if (v.ranking == i) {
|
||||
console.log(v, i)
|
||||
return v.username
|
||||
}
|
||||
} else {
|
||||
if (v.ranking == i) {
|
||||
return v.numberofpeople
|
||||
}
|
||||
}
|
||||
}).map(v => {
|
||||
return v.isteampersonal === 1 ? v.username : v.numberofpeople
|
||||
}).toString()
|
||||
},
|
||||
|
||||
async summary() {
|
||||
if (this.activityList.length === 0) {
|
||||
return
|
||||
}
|
||||
this.$set(this.pageForm, "unionId", null)
|
||||
this.isSummary = 2
|
||||
this.tableData = []
|
||||
// this.pageForm.activityId = this.activityList[1].id
|
||||
const {data} = await $.get(loc() + "/summary", this.pageForm)
|
||||
this.$set(this, "tableData", data.score)
|
||||
this.unionName = "汇总"
|
||||
},
|
||||
print() {
|
||||
let subOutputRankPrint = document.getElementById('print');
|
||||
let newContent = subOutputRankPrint.innerHTML;
|
||||
let oldContent = document.body.innerHTML;
|
||||
document.body.innerHTML = newContent;
|
||||
window.print();
|
||||
window.location.reload();
|
||||
document.body.innerHTML = oldContent;
|
||||
return false;
|
||||
},
|
||||
actChange(activityId) {
|
||||
this.tableColumns = []
|
||||
this.tableData = []
|
||||
this.pageForm.activityId = ""
|
||||
const activityData = this.activityList.find(v => v.id == activityId)
|
||||
this.pageForm.activityId = activityData.id
|
||||
this.getPrizes()
|
||||
},
|
||||
unionChange(unionId) {
|
||||
this.tableColumns = []
|
||||
this.tableData = []
|
||||
this.pageForm.unionId = ""
|
||||
this.isSummary = 1
|
||||
const unionData = this.unionList.find(v => v.id == unionId)
|
||||
this.pageForm.unionId = unionData.id
|
||||
this.unionName = unionData.unionname
|
||||
this.getPrizes()
|
||||
},
|
||||
async getActivitys() {
|
||||
this.tableData = []
|
||||
const {data} = await $.get("/platform/activity/score/statistics/getActivitys", {year: this.pageForm.year})
|
||||
this.pageForm.activityId = ""
|
||||
this.activityList = data
|
||||
this.pageForm.activityId = data[0].id
|
||||
await this.getPrizes()
|
||||
|
||||
},
|
||||
async getPrizes() {
|
||||
const {data} = await $.get(loc() + "/getPrizes", this.pageForm)
|
||||
this.tableDataUnionPrize = data
|
||||
const lastSum = {}
|
||||
for (let i = 1; i <= 8; i++) {
|
||||
let sum = 0
|
||||
if (!$.isEmptyObject(data['男子项目'])) {
|
||||
let xm = []
|
||||
for (let key in data['男子项目']) {
|
||||
xm = xm.concat(data['男子项目'][key])
|
||||
}
|
||||
sum += xm.filter(v => v.ranking === i).length
|
||||
}
|
||||
if (!$.isEmptyObject(data['女子项目'])) {
|
||||
let xm = []
|
||||
for (let key in data['女子项目']) {
|
||||
xm = xm.concat(data['女子项目'][key])
|
||||
}
|
||||
sum += xm.filter(v => v.ranking === i).length
|
||||
}
|
||||
if (!$.isEmptyObject(data['团体项目'])) {
|
||||
let xm = []
|
||||
for (let key in data['团体项目']) {
|
||||
xm = xm.concat(data['团体项目'][key])
|
||||
}
|
||||
const teams = xm.filter(v => v.ranking === i).map(v => Number(v.numberOfPeople))
|
||||
if (teams && teams.length > 0) {
|
||||
sum += teams.reduce((a, b) => a + b)
|
||||
}
|
||||
}
|
||||
lastSum[i] = sum
|
||||
}
|
||||
|
||||
lastSum[9] = Object.values(lastSum).reduce((a, b) => a + b)
|
||||
this.lastSum = lastSum
|
||||
|
||||
// if (this.pageForm.activityId == null) {
|
||||
// this.tableDataUnionPrize = data
|
||||
// } else {
|
||||
// data.eventList.map(v => {
|
||||
// v.sss = []
|
||||
// data.score.map(x => {
|
||||
// if (v.label === x.allname) {
|
||||
// v.sss.push(x)
|
||||
// }
|
||||
// })
|
||||
// })
|
||||
// this.tableData = data.eventList
|
||||
// }
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
await this.getActivitys()
|
||||
this.unionList = await getUnions(null)
|
||||
if (this.unionList.length > 0) {
|
||||
this.pageForm.unionId = this.unionList[0].id
|
||||
this.unionName = this.unionList[0].unionname
|
||||
}
|
||||
await this.getPrizes()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,694 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.mb10 {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.d .el-card__header {
|
||||
padding: 10px 20px;
|
||||
}
|
||||
|
||||
.d .el-card__body {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.search .search-item {
|
||||
width: 25%;
|
||||
}
|
||||
|
||||
.search .search-item-label {
|
||||
min-width: 70px;
|
||||
}
|
||||
|
||||
.el-row-title {
|
||||
|
||||
margin-bottom: 20px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
<div id="app" class="platform" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<div class="search">
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">活动年份</div>
|
||||
<el-date-picker v-model="pageForm.year" type="year" placeholder="选择年份"
|
||||
style="width: 100%" :clearable="false" value-format="yyyy"
|
||||
@change="yearChange()"></el-date-picker>
|
||||
</div>
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">活动级别</div>
|
||||
<div class="search-item-option">
|
||||
<el-select v-model="pageForm.activityLevel" placeholder="请选择活动级别"
|
||||
clearable
|
||||
style="width: 100%" @change="changeLevel">
|
||||
<el-option
|
||||
v-for="item in activityTypeList"
|
||||
:key="item.code"
|
||||
:label="item.name"
|
||||
:value="item.code">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">活动名称</div>
|
||||
<el-select v-model="pageForm.id" filterable style="width: 100%;font-weight:bold;"
|
||||
placeholder="请选择活动"
|
||||
@change="getData()">
|
||||
<el-option v-for="item in activities" :label="item.name" :value="item.id"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label" v-if="pageForm.activityLevel!=='40003'">院级工会</div>
|
||||
<div class="search-item-label" v-if="pageForm.activityLevel==='40003'">协会名称</div>
|
||||
<div class="search-item-option">
|
||||
<el-select style="width: 100%;font-weight:bold;" v-model="pageForm.unionid"
|
||||
placeholder="院级工会筛选"
|
||||
filterable clearable
|
||||
@change="changeVVV" @clear="changeVVV">
|
||||
<el-option
|
||||
v-for="item in unions"
|
||||
:key="item.id"
|
||||
:label="item.unionname"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!--#if(!@shiro.hasRole('H04')){#-->
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">报名状态</div>
|
||||
<div class="search-item-option">
|
||||
<el-radio-group v-model="pageForm.applyed">
|
||||
<el-radio style="background-color: white" label="1" border>未报名</el-radio>
|
||||
<el-radio style="background-color: white" label="2" border>已报名</el-radio>
|
||||
</el-radio-group>
|
||||
</div>
|
||||
</div>
|
||||
<!--#}#-->
|
||||
|
||||
<!-- <div class="search-item">
|
||||
<div class="search-item-option">
|
||||
<el-button type="primary" plain @click="export">导出</el-button>
|
||||
</div>
|
||||
</div>-->
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt10 d" style="padding: 20px">
|
||||
<el-row :gutter="20" class="el-row-title" style="margin-left: 0;margin-right: 0;">
|
||||
<el-col :span="2">序号</el-col>
|
||||
<el-col :span="4">年度</el-col>
|
||||
<el-col :span="6">
|
||||
<span v-if="pageForm.activityLevel!=='40003'">分工会名称</span>
|
||||
<span v-if="pageForm.activityLevel==='40003'">协会名称</span>
|
||||
</el-col>
|
||||
<el-col :span="6">活动名称</el-col>
|
||||
<el-col :span="4">人数</el-col>
|
||||
<el-col :span="2">
|
||||
<el-button style="position: absolute;right: 0px" plain size="small" icon="el-icon-printer"
|
||||
type="primary" @click="doExport">导 出
|
||||
</el-button>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-table :data="[]" size="mini" v-if="noneData||tabLoading" v-loading="tabLoading"></el-table>
|
||||
|
||||
<el-card v-else class="box-card mb10" v-for="app,tabIdx in apply" shadow="hover" v-loading="tabLoading">
|
||||
<div slot="header" class="clearfix">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="2">{{tabIdx + 1}}</el-col>
|
||||
<el-col :span="4">{{pageForm.year}}</el-col>
|
||||
<el-col :span="6">{{isDisPlayCode?'('+app.unioncode+')':null}}{{app.unionname}}</el-col>
|
||||
<el-col :span="6">{{pageForm.activityName || '暂无'}}</el-col>
|
||||
<el-col :span="2">{{app.num |money}} 人</el-col>
|
||||
<el-col :span="4">
|
||||
<el-button style="float: right; padding: 3px 5px" @click="$set(app,'show',!app.show)"
|
||||
type="text">{{app.show?'折叠':'展开'}}
|
||||
</el-button>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
<transition name="el-fade-in-linear">
|
||||
<div v-show="app.show" class="text item transition-box" style="padding: 20px 20px">
|
||||
<el-timeline v-if="pageForm.applyType===1||pageForm.applyType===3">
|
||||
<!-- <el-timeline-item timestamp="领队信息" placement="top" v-if="app.leader.username!=null">
|
||||
<el-card shadow="never">
|
||||
<el-form label-suffix=":" label-position="right" label-width="80px"
|
||||
style="margin-top: 30px">
|
||||
<el-row gutter="20">
|
||||
<el-col :span="4">
|
||||
<el-form-item label="姓名">
|
||||
{{ app.leader.username | str }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="4">
|
||||
<el-form-item label="性别">
|
||||
{{ app.leader.sex | str }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="4">
|
||||
<el-form-item label="工号">
|
||||
{{ app.leader.loginname | str }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="4">
|
||||
<el-form-item label="电话">
|
||||
{{ app.leader.mobile | str }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="4">
|
||||
<el-form-item label="单位">
|
||||
{{ app.leader.unitname | str }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</el-card>
|
||||
|
||||
</el-timeline-item>
|
||||
<el-timeline-item timestamp="教练信息" placement="top" v-if="app.coach.username!=null">
|
||||
<el-card shadow="never">
|
||||
<el-form label-suffix=":" label-position="right" label-width="80px"
|
||||
style="margin-top: 30px">
|
||||
<el-row gutter="20">
|
||||
<el-col :span="4">
|
||||
<el-form-item label="姓名">
|
||||
{{ app.coach.username | str }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="4">
|
||||
<el-form-item label="性别">
|
||||
{{ app.coach.sex | str }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="4">
|
||||
<el-form-item label="工号">
|
||||
{{ app.coach.loginname | str }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="4">
|
||||
<el-form-item label="电话">
|
||||
{{ app.coach.mobile | str }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="4">
|
||||
<el-form-item label="单位">
|
||||
{{ app.coach.unitname | str }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</el-card>
|
||||
|
||||
</el-timeline-item>-->
|
||||
|
||||
<el-timeline-item timestamp="运动员信息" placement="top">
|
||||
|
||||
<el-table border stripe :data="app.apply2" size="mini" :key="tableKey">
|
||||
|
||||
<el-table-column
|
||||
type="index" label="序号" header-align="center" align="center" sortable
|
||||
width="100">
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column
|
||||
align="center"
|
||||
header-align="center"
|
||||
v-for="column in tableColumns"
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
:width="column.width">
|
||||
|
||||
<template scope="{row}" v-if="column.prop=='team'">
|
||||
<span v-if="row.team">{{ row.team }}</span>
|
||||
<span v-if="!row.team">暂无</span>
|
||||
</template>
|
||||
<template scope="{row:{projectType}}"
|
||||
v-else-if="column.prop=='projectType'">
|
||||
{{projectType==1?'单项':'团体'}}
|
||||
</template>
|
||||
|
||||
<!-- <template scope="{row:{divisionLevelLeadership}}"
|
||||
v-else-if="column.prop=='divisionLevelLeadership'">
|
||||
<span v-if="divisionLevelLeadership" class="text-primary">是</span>
|
||||
<span v-else class="text-danger">否</span>
|
||||
</template>-->
|
||||
|
||||
<template scope="{row}" v-else-if="column.prop=='identity'">
|
||||
<el-tag v-if="row.identity.includes(1)" effect="light">运动员</el-tag>
|
||||
<el-tag v-if="row.identity.includes(2)" type="success" effect="light">教练
|
||||
</el-tag>
|
||||
<el-tag v-if="row.identity.includes(3)" type="warning" effect="light">领队
|
||||
</el-tag>
|
||||
<el-tag v-if="row.identity.includes(4)" type="warning"
|
||||
effect="light">处级领导
|
||||
</el-tag>
|
||||
<el-tag v-if="row.identity.includes(5)" type="warning" effect="light">替补
|
||||
</el-tag>
|
||||
|
||||
</template>
|
||||
|
||||
</el-table-column>
|
||||
|
||||
</el-table>
|
||||
|
||||
</el-timeline-item>
|
||||
</el-timeline>
|
||||
|
||||
<el-timeline v-else-if="pageForm.applyType===2">
|
||||
<el-timeline-item timestamp="领队信息" placement="top" v-if="app.leader.username!=null">
|
||||
<el-card shadow="never">
|
||||
<el-form label-suffix=":" label-position="right" label-width="80px"
|
||||
style="margin-top: 30px">
|
||||
<el-row gutter="20">
|
||||
<el-col :span="4">
|
||||
<el-form-item label="姓名">
|
||||
{{ app.leader.username | str }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="4">
|
||||
<el-form-item label="性别">
|
||||
{{ app.leader.sex | str }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="4">
|
||||
<el-form-item label="工号">
|
||||
{{ app.leader.loginname | str }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="4">
|
||||
<el-form-item label="电话">
|
||||
{{ app.leader.mobile | str }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="4">
|
||||
<el-form-item label="单位">
|
||||
{{ app.leader.unitname | str }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</el-card>
|
||||
|
||||
</el-timeline-item>
|
||||
<el-timeline-item timestamp="教练信息" placement="top" v-if="app.coach.username!=null">
|
||||
<el-card shadow="never">
|
||||
<el-form label-suffix=":" label-position="right" label-width="80px"
|
||||
style="margin-top: 30px">
|
||||
<el-row gutter="20">
|
||||
<el-col :span="4">
|
||||
<el-form-item label="姓名">
|
||||
{{ app.coach.username | str }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="4">
|
||||
<el-form-item label="性别">
|
||||
{{ app.coach.sex | str }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="4">
|
||||
<el-form-item label="工号">
|
||||
{{ app.coach.loginname | str }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="4">
|
||||
<el-form-item label="电话">
|
||||
{{ app.coach.mobile | str }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="4">
|
||||
<el-form-item label="单位">
|
||||
{{ app.coach.unitname | str }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</el-card>
|
||||
|
||||
</el-timeline-item>
|
||||
<el-timeline-item timestamp="运动员信息" placement="top">
|
||||
<el-row gutter="40">
|
||||
<el-col :span="4">
|
||||
<div class="search-item">
|
||||
<div class="search-item-option">
|
||||
<el-select v-model="app.eventId" placeholder="请选择活动项目"
|
||||
filterable clearable
|
||||
style="width: 100%" @change="doEvent(app)">
|
||||
<el-option
|
||||
v-for="item in events"
|
||||
:key="item.id"
|
||||
:label="item.allname"
|
||||
:value="item.eventid">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :span="4">
|
||||
<div class="search-item">
|
||||
<div class="search-item-option">
|
||||
<el-select v-model="app.projectType" placeholder="请选择项目类型"
|
||||
allow-create filterable
|
||||
default-first-option clearable style="width: 100%"
|
||||
@change="doEventType(app)">
|
||||
<el-option
|
||||
v-for="item in projectTypeList"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-table border stripe :data="app.apply2" size="mini" :key="tableKey">
|
||||
<el-table-column
|
||||
type="index" label="序号" header-align="center" align="center" sortable
|
||||
width="100">
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column
|
||||
align="center"
|
||||
header-align="center"
|
||||
v-for="column in tableColumns"
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
:width="column.width"
|
||||
show-overflow-tooltip>
|
||||
|
||||
<template scope="{row}" v-if="column.prop=='team'">
|
||||
<span v-if="row.team">{{ row.team }}</span>
|
||||
<span v-if="!row.team">暂无</span>
|
||||
</template>
|
||||
|
||||
<!-- <template scope="{row:{divisionLevelLeadership}}"
|
||||
v-else-if="column.prop=='divisionLevelLeadership'">
|
||||
<span v-if="divisionLevelLeadership" class="text-primary">是</span>
|
||||
<span v-else class="text-danger">否</span>
|
||||
</template>-->
|
||||
|
||||
<template scope="{row:{projectType}}"
|
||||
v-else-if="column.prop=='projectType'">
|
||||
{{projectType==1?'单项':'团体'}}
|
||||
</template>
|
||||
|
||||
<template scope="{row}" v-else-if="column.prop=='identity'">
|
||||
<el-tag v-if="row.identity.includes(1)" effect="light">运动员</el-tag>
|
||||
<el-tag v-if="row.identity.includes(2)" type="success" effect="light">教练
|
||||
</el-tag>
|
||||
<el-tag v-if="row.identity.includes(3)" type="warning" effect="light">领队
|
||||
</el-tag>
|
||||
<el-tag v-if="row.identity.includes(4)" type="warning"
|
||||
effect="light">处级领导
|
||||
</el-tag>
|
||||
<el-tag v-if="row.identity.includes(5)" type="warning" effect="light">替补
|
||||
</el-tag>
|
||||
|
||||
</template>
|
||||
|
||||
</el-table-column>
|
||||
|
||||
</el-table>
|
||||
|
||||
</el-timeline-item>
|
||||
</el-timeline>
|
||||
|
||||
|
||||
</div>
|
||||
</transition>
|
||||
|
||||
</el-card>
|
||||
</el-card>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
data() {
|
||||
return {
|
||||
events: [],
|
||||
activityTypeList: [],
|
||||
noneData: true,
|
||||
tabLoading: true,
|
||||
activities: [],
|
||||
apply: [],
|
||||
apply2: [],
|
||||
unions: [],
|
||||
rootData: [],
|
||||
tableKey: '',
|
||||
pageForm: {
|
||||
id: '',
|
||||
unionid: "",
|
||||
year: new Date().getFullYear() + '',
|
||||
...getPageForm(),
|
||||
},
|
||||
tableColumns: [
|
||||
{prop: 'allName', label: '项目名称', sortable: true, width: '200px'},
|
||||
{prop: 'team', label: '所属队', sortable: true},
|
||||
{prop: 'username', label: '姓名'},
|
||||
{prop: 'loginname', label: '教工号'},
|
||||
{prop: 'sex', label: '性别'},
|
||||
/* {prop: 'divisionLevelLeadership', label: '是否处级领导', sortable: true},*/
|
||||
{prop: 'unitname', label: '单位', sortable: true},
|
||||
{prop: 'mobile', label: '电话'},
|
||||
{prop: 'projectType', label: '项目类型', sortable: true},
|
||||
{prop: 'identity', label: '身份', sortable: true, width: '300px'},
|
||||
],
|
||||
projectTypeList: [
|
||||
{id: '1', name: '单项'},
|
||||
{id: '2', name: '团体'},
|
||||
],
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'info': httpVueLoader('/components/activity/school/Info.vue'),
|
||||
},
|
||||
filters: {
|
||||
money(val) {
|
||||
return val ? val : 0
|
||||
},
|
||||
str(val) {
|
||||
return val ? val : '暂无'
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
'pageForm.applyed': (val) => {
|
||||
vue.changeVVV(val)
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async changeLevel() {
|
||||
await this.getNearActivity()
|
||||
},
|
||||
doExport() {
|
||||
const {id, unionid} = this.pageForm
|
||||
|
||||
location.href = "/platform/activity/common/exportXlsx?id=" + id
|
||||
},
|
||||
async yearChange() {
|
||||
this.pageForm.id = null
|
||||
await this.getNearActivity()
|
||||
},
|
||||
changeVVV() {
|
||||
if (this.pageForm.unionid) {
|
||||
this.apply = this.rootData.filter(v => {
|
||||
return v.id === this.pageForm.unionid
|
||||
})
|
||||
} else {
|
||||
this.apply = JSON.parse(JSON.stringify(this.rootData))
|
||||
}
|
||||
|
||||
if (this.pageForm.applyed === '1') {
|
||||
this.apply = this.apply.filter(v => {
|
||||
return v.num === 0
|
||||
})
|
||||
} else if (this.pageForm.applyed === '2') {
|
||||
this.apply = this.apply.filter(v => {
|
||||
return v.num > 0
|
||||
})
|
||||
}
|
||||
|
||||
this.tableKey = new Date().getTime()
|
||||
},
|
||||
async getNearActivity() {
|
||||
const resp = await $.get(loc() + "/getNearActivity", {
|
||||
year: this.pageForm.year,
|
||||
activityLevel: this.pageForm.activityLevel
|
||||
})
|
||||
requestLaterFun(resp, (v) => {
|
||||
this.activities = v
|
||||
if (v.length) {
|
||||
this.pageForm.id = v[0].id
|
||||
this.getData()
|
||||
} else {
|
||||
this.pageForm.unionid = ""
|
||||
this.unionis = []
|
||||
this.pageForm.id = ""
|
||||
this.noneData = true
|
||||
this.tabLoading = false
|
||||
}
|
||||
}, () => {
|
||||
this.$notify.error({title: '错误', message: resp.msg});
|
||||
})
|
||||
},
|
||||
async changeActivit() {
|
||||
const resp = await $.post("/platform/activity/apply/getEvents", {activityId: this.pageForm.id})
|
||||
this.events = resp
|
||||
|
||||
},
|
||||
doEventType(app) {
|
||||
const {apply, projectType} = app
|
||||
if (!app.projectType) {
|
||||
|
||||
this.$set(app, "apply2", apply)
|
||||
} else {
|
||||
const arr = apply.filter(i => {
|
||||
return i.projectType == projectType
|
||||
})
|
||||
this.$set(app, "apply2", arr)
|
||||
}
|
||||
},
|
||||
doEvent(app) {
|
||||
const {apply, eventId} = app
|
||||
|
||||
if (!app.eventId) {
|
||||
this.$set(app, "apply2", apply)
|
||||
} else {
|
||||
const arr = apply.filter(i => {
|
||||
return !i.unionLeader && !i.unionCoach && i.evid == eventId
|
||||
})
|
||||
this.$set(app, "apply2", arr)
|
||||
}
|
||||
},
|
||||
async getData() {
|
||||
this.noneData = true
|
||||
this.tabLoading = true
|
||||
await this.changeActivit()
|
||||
const activity = this.activities.filter(v => {
|
||||
return v.id === this.pageForm.id
|
||||
})
|
||||
|
||||
this.pageForm.activityName = activity.length > 0 ? activity[0].name : null
|
||||
this.pageForm.applyType = activity[0].applyType
|
||||
|
||||
const resp = await $.get(loc() + "/getData", this.pageForm)
|
||||
|
||||
requestLaterFun(resp, (v) => {
|
||||
if (v.length) {
|
||||
/* if (activity[0].applyType == 2) {*/
|
||||
v.forEach(x => {
|
||||
|
||||
const leaders = x.apply.filter(i => {
|
||||
return i.unionLeader
|
||||
})
|
||||
|
||||
x.leader = {}
|
||||
if (leaders.length) {
|
||||
x.leader = leaders[0]
|
||||
}
|
||||
|
||||
const coachs = x.apply.filter(i => {
|
||||
return i.unionCoach
|
||||
})
|
||||
|
||||
x.coach = {}
|
||||
if (coachs.length) {
|
||||
x.coach = coachs[0]
|
||||
}
|
||||
|
||||
x.apply = x.apply.filter(i => {
|
||||
return !i.unionLeader && !i.unionCoach
|
||||
})
|
||||
|
||||
})
|
||||
/*}*//* else {
|
||||
v.forEach(x => {
|
||||
const leaders = x.apply.filter(i => {
|
||||
return i.identity.includes(3)
|
||||
})
|
||||
x.leader = {}
|
||||
if (leaders.length) {
|
||||
x.leader = leaders[0]
|
||||
}
|
||||
const coachs = x.apply.filter(i => {
|
||||
return i.identity.includes(2)
|
||||
})
|
||||
|
||||
x.coach = {}
|
||||
if (coachs.length) {
|
||||
x.coach = coachs[0]
|
||||
}
|
||||
|
||||
x.apply = x.apply.filter(i => {
|
||||
return i.identity.includes(1)
|
||||
})
|
||||
})
|
||||
}*/
|
||||
|
||||
|
||||
v.sort((a, b) => {
|
||||
return b.num - a.num
|
||||
})
|
||||
this.unions = v.map(v => {
|
||||
return {id: v.id, unionname: v.unionname}
|
||||
})
|
||||
|
||||
if (this.unions.length == 1) {
|
||||
this.pageForm.unionid = this.unions[0].id
|
||||
}
|
||||
this.rootData = JSON.parse(JSON.stringify(v))
|
||||
this.rootData.forEach(x => {
|
||||
x.apply2 = clone(x.apply)
|
||||
})
|
||||
this.noneData = false
|
||||
} else {
|
||||
this.unions = []
|
||||
this.pageForm.unionid = ""
|
||||
this.noneData = true
|
||||
|
||||
}
|
||||
if (this.pageForm.activityLevel !== '40001' && this.rootData && this.rootData.length > 0) {
|
||||
this.$set(this.rootData[0], "show", true)
|
||||
}
|
||||
this.apply = this.rootData
|
||||
|
||||
this.tableKey = new Date().getTime()
|
||||
}, () => {
|
||||
this.$notify.error({title: '错误', message: resp.msg});
|
||||
this.noneData = true
|
||||
}, () => {
|
||||
this.tabLoading = false
|
||||
})
|
||||
},
|
||||
async getActivityTypeList(code) {
|
||||
const {data} = await $.get("/platform/activity/basic/basic/settings/getActivityTwoLevelType", {code: code})
|
||||
return data;
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
await this.changeActivit()
|
||||
this.activityTypeList = await this.getActivityTypeList("40000")
|
||||
this.$set(this.pageForm, "activityLevel", this.activityTypeList[0].code)
|
||||
await this.getNearActivity()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,311 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<div id="app" class="platform" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<div class="search">
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">活动名称</div>
|
||||
<div class="search-item-option">
|
||||
<!-- <el-input v-model="pageForm.name" placeholder="请输入活动名称" clearable></el-input>-->
|
||||
<el-select v-model="pageForm.activityId" placeholder="请选择活动项目" filterable clearable
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in activitys"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--<div class="search-item">
|
||||
<div class="search-item-label">活动项目:</div>
|
||||
<div class="search-item-option">
|
||||
<el-select v-model="pageForm.eventId" placeholder="请选择活动项目" filterable clearable
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in events"
|
||||
:key="item.id"
|
||||
:label="item.allname"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>-->
|
||||
|
||||
<div class="search-query">
|
||||
<el-button type="primary" icon="el-icon-search" @click="doSearch">搜索</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool label="活动信息" :app="this"></table-tool>
|
||||
|
||||
<el-table :data="tableData" style="width: 100%;margin-bottom: 20px" row-key="id"
|
||||
@sort-change="pageOrder" v-loading="tableLoading" :size="tableSize" class="vi-table">
|
||||
|
||||
<el-table-column align="center" header-align="center" type="index" :index="indexMethod" label="序号"
|
||||
width="80px"></el-table-column>
|
||||
<el-table-column
|
||||
align="center"
|
||||
header-align="center"
|
||||
v-for="column in tableColumns"
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable">
|
||||
|
||||
<template v-if="column.prop=='events'" scope="{row}">
|
||||
<span>{{row.allName}}</span>
|
||||
</template>
|
||||
|
||||
<template v-else-if="column.prop=='gameStyle'" scope="{row}">
|
||||
<span>{{activity.school.gameStyle[row.gameStyle]}}</span>
|
||||
</template>
|
||||
|
||||
<template v-else-if="column.prop=='startTime'" scope="{row}">
|
||||
{{moment(row.startTime).format('YYYY-MM-DD')}} -
|
||||
{{moment(row.endTime).format('YYYY-MM-DD')}}
|
||||
</template>
|
||||
|
||||
<template v-else-if="column.prop=='state'"
|
||||
scope="{row:{close,applyStartTime,applyEndTime,startTime,endTime}}">
|
||||
<div v-html="activity.school.getStatus(close,applyStartTime,applyEndTime,startTime,endTime)"></div>
|
||||
</template>
|
||||
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column prop="userOnline" align="center" header-align="center" label="操作" width="150px">
|
||||
<template scope="{row}">
|
||||
<el-dropdown @command="dropdownCommand">
|
||||
<el-button size="mini" :loading="row.loading">
|
||||
<i class="ti-settings"></i>
|
||||
<span class="ti-angle-down"></span>
|
||||
</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item
|
||||
v-if="moment(row.applyEndTime).valueOf() >= moment().valueOf() && moment().valueOf() >= moment(row.applyStartTime).valueOf()"
|
||||
:command="{type:'remind',row}">
|
||||
发送提醒
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'view',row}">
|
||||
查看
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #edit>
|
||||
<vi-title title="发送提醒"></vi-title>
|
||||
<el-divider content-position="right">
|
||||
<el-button @click="sendAllRemind" type="primary" size="mini"><i class="el-icon-position"></i> 一键发送提醒
|
||||
</el-button>
|
||||
</el-divider>
|
||||
|
||||
<el-table :data="unionData" style="width: 100%;margin-bottom: 20px" row-key="id" v-loading="tableLoading"
|
||||
class="vi-table">
|
||||
|
||||
<el-table-column align="center" header-align="center" type="index" :index="indexMethod" label="序号"
|
||||
width="80px"></el-table-column>
|
||||
|
||||
<el-table-column type="expand" class="info">
|
||||
<template slot-scope="{row}">
|
||||
<el-card class="box-card">
|
||||
<el-table :data="row.users" style="width: 100%;margin-bottom: 20px" row-key="id" border
|
||||
stripe :size="tableSize" class="vi-table">
|
||||
|
||||
<el-table-column align="center" header-align="center" type="index"
|
||||
:index="indexMethod"
|
||||
label="序号" width="80px"></el-table-column>
|
||||
|
||||
<el-table-column
|
||||
align="center"
|
||||
header-align="center"
|
||||
v-for="column in applyColumns"
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable">
|
||||
|
||||
<template scope="{row}" v-if="column.prop=='divisionLevelLeadership'">
|
||||
<span v-if="row.divisionLevelLeadership==true" class="text-primary">是</span>
|
||||
<span v-else class="text-danger">否</span>
|
||||
</template>
|
||||
|
||||
<template scope="{row:{identity}}" v-else-if="column.prop=='identity'">
|
||||
<el-tag v-if="identity==1" effect="dark">运动员</el-tag>
|
||||
<el-tag v-if="identity==2" type="success" effect="dark">教练</el-tag>
|
||||
<el-tag v-if="identity==3" type="warning" effect="dark">领队</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-card>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column
|
||||
align="center"
|
||||
header-align="center"
|
||||
v-for="column in unionColumns"
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable">
|
||||
|
||||
<template scope="{row}" v-if="column.prop=='telephone'">
|
||||
<span>{{row.telephone?row.telephone:'暂无'}}</span>
|
||||
</template>
|
||||
|
||||
<template scope="{row}" v-if="column.prop=='unionleader'">
|
||||
<span>{{row.unionleader?row.unionleader:'暂无'}}</span>
|
||||
</template>
|
||||
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" header-align="center" label="操作" width="150px">
|
||||
<template scope="{row}">
|
||||
<el-tooltip class="item" effect="dark" content="发送提醒" placement="top-start">
|
||||
<el-button @click="sendRemind(row)" type="primary" size="mini"
|
||||
icon="el-icon-message"></el-button>
|
||||
</el-tooltip>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
</el-table>
|
||||
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<info ref="info"></info>
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
activityId: '',
|
||||
planList: [],
|
||||
typeList: [],
|
||||
events: [],
|
||||
activitys: [],
|
||||
unionData: [],
|
||||
unionColumns: [
|
||||
{prop: 'unionname', label: '工会名称'},
|
||||
{prop: 'unionleader', label: '负责人'},
|
||||
{prop: 'telephone', label: '联系方式'},
|
||||
{prop: 'num', label: '已报名人数'},
|
||||
],
|
||||
applyColumns: [
|
||||
{prop: 'username', label: '姓名'},
|
||||
{prop: 'loginname', label: '工号'},
|
||||
{prop: 'mobile', label: '电话'},
|
||||
{prop: 'sex', label: '性别'},
|
||||
{prop: 'divisionLevelLeadership', label: '是否处级领导'},
|
||||
{prop: 'identity', label: '身份'}
|
||||
],
|
||||
tableColumns: [
|
||||
{prop: 'name', label: '活动名称'},
|
||||
{prop: 'address', label: '活动地点'},
|
||||
{prop: 'gameStyle', label: '活动类型'},
|
||||
{prop: 'startTime', label: '活动日期'},
|
||||
{prop: 'state', label: '活动状态'},
|
||||
{prop: 'applyNum', label: '已报名人数'},
|
||||
]
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'info': httpVueLoader('/components/activity/school/Info.vue'),
|
||||
},
|
||||
methods: {
|
||||
dropdownCommand(command) {
|
||||
const {type, row} = command
|
||||
if (type === 'remind') {
|
||||
this.openRemind(row)
|
||||
} else if (type === 'view') {
|
||||
this.openView(row)
|
||||
}
|
||||
},
|
||||
openView(row) {
|
||||
const {id} = row
|
||||
this.$refs.info.getInfo(id)
|
||||
this.$refs.guava.view()
|
||||
},
|
||||
async openRemind(row) {
|
||||
this.activityId = row.id
|
||||
this.$refs.guava.edit()
|
||||
const {data} = await $.get(loc() + "/getUnionRemind", {activityId: row.id})
|
||||
this.unionData = data
|
||||
},
|
||||
sendRemind(row) {
|
||||
if (!row.telephone) {
|
||||
this.$notify.warning({title: '警告', message: '该工会联系方式为空,无法发送短信进行提醒!'});
|
||||
return
|
||||
}
|
||||
this.$confirm("确定要发送提醒短信给【" + row.unionname + "】的负责人吗?", '温馨提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(async () => {
|
||||
const resp = await $.get(loc() + "/sendRemind", {phone: row.telephone, unionname: row.unionname})
|
||||
requestLaterMsgFun(vue, resp)
|
||||
});
|
||||
},
|
||||
sendAllRemind() {
|
||||
this.$confirm("确定发送提醒短信给所有未报名的分工会吗?", '温馨提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(async () => {
|
||||
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '正在发送...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: COVER_LAYER_COLOR
|
||||
});
|
||||
|
||||
const resp = await $.get(loc() + "/sendAllRemind", {activityId: this.activityId})
|
||||
|
||||
closeLoadingFunc(loading, resp, async () => {
|
||||
this.$notify.success({title: '成功', message: 发送成功});
|
||||
}, () => {
|
||||
this.$notify.error(resp.msg);
|
||||
})
|
||||
});
|
||||
},
|
||||
async getActivitys() {
|
||||
const {data} = await $.get(loc() + "/getActivitys")
|
||||
return data;
|
||||
|
||||
},
|
||||
async getEvents() {
|
||||
const resp = await $.post("/platform/activity/apply/getEvents", {activityId: this.pageForm.activityId})
|
||||
this.events = resp
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.pageData()
|
||||
this.activitys = await this.getActivitys()
|
||||
this.planList = await activity.getSchoolActivityPlan()
|
||||
this.unitOptions = await getUnits(null)
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,868 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<div id="app" class="platform" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<div class="search">
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">年  度</div>
|
||||
<div class="search-item-option">
|
||||
<el-date-picker
|
||||
@change="yearChange"
|
||||
v-model="pageForm.year"
|
||||
type="year"
|
||||
value-format="yyyy" style="width: 100%"
|
||||
placeholder="选择年">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">活动名称</div>
|
||||
<div class="search-item-option">
|
||||
<el-select v-model="pageForm.activityId" placeholder="请选择活动名称" filterable clearable
|
||||
style="width: 100%" @change="doSearchS">
|
||||
<el-option
|
||||
v-for="item in activityList"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">活动项目</div>
|
||||
<div class="search-item-option">
|
||||
<el-select v-model="pageForm.eventId" placeholder="请选择活动项目" filterable clearable
|
||||
style="width: 100%" @change="doSearchS">
|
||||
<el-option
|
||||
v-for="item in events"
|
||||
:key="item.eventId"
|
||||
:label="item.allName"
|
||||
:value="item.eventId">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool label="项目列表" :app="this">
|
||||
<template #label_end>
|
||||
<!--<el-radio-group v-model="pageForm.isMenWomen" @change="doSearch"
|
||||
style="margin-left: 10px">
|
||||
<el-radio-button :label="1">全部</el-radio-button>
|
||||
<el-radio-button :label="2">男子</el-radio-button>
|
||||
<el-radio-button :label="3">女子</el-radio-button>
|
||||
<el-radio-button :label="4">团体</el-radio-button>
|
||||
</el-radio-group>-->
|
||||
<el-checkbox-group @change="doSearch" class="mr10" v-model="pageForm.isMenWomen">
|
||||
<el-checkbox-button :key="2" :label="2">男子</el-checkbox-button>
|
||||
<el-checkbox-button :key="3" :label="3">女子</el-checkbox-button>
|
||||
</el-checkbox-group>
|
||||
|
||||
<el-checkbox-group @change="doSearch" v-model="pageForm.isMenWomen">
|
||||
<el-checkbox-button :key="4" :label="4">单项</el-checkbox-button>
|
||||
<el-checkbox-button :key="5" :label="5">团体</el-checkbox-button>
|
||||
</el-checkbox-group>
|
||||
|
||||
<div class="search-item-option">
|
||||
<el-select v-model="pageForm.groupName" placeholder="请选择组别"
|
||||
filterable clearable
|
||||
style="width: 100%;margin-bottom: 5px;margin-left: 10px" @change="doSearch">
|
||||
<el-option
|
||||
v-for="item in groupList"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.name">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
|
||||
</template>
|
||||
</table-tool>
|
||||
|
||||
<el-table :data="tableData" style="width: 100%;margin-bottom: 20px" row-key="id"
|
||||
@sort-change="pageOrder" v-loading="tableLoading" :size="tableSize" class="vi-table">
|
||||
|
||||
<el-table-column align="center" header-align="center" type="index" :index="indexMethod" label="序号"
|
||||
width="80px"></el-table-column>
|
||||
|
||||
<el-table-column prop="allName" align="center" header-align="center"
|
||||
label="项目名称"></el-table-column>
|
||||
|
||||
<el-table-column prop="rs" align="center" header-align="center"
|
||||
label="获奖人数"></el-table-column>
|
||||
|
||||
|
||||
<el-table-column prop="userOnline" align="center" header-align="center" label="操作" width="150px">
|
||||
<template scope="{row}">
|
||||
<el-dropdown @command="dropdownCommand">
|
||||
<el-button size="mini" :loading="row.loading">
|
||||
<i class="ti-settings"></i>
|
||||
<span class="ti-angle-down"></span>
|
||||
</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item :command="{type:'input',row}">
|
||||
录入成绩
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'view',row}">
|
||||
查  看
|
||||
</el-dropdown-item>
|
||||
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #edit_func>
|
||||
<el-button type="primary" @click="openAdd" v-if="awardsMode==1">临时获奖人员添加</el-button>
|
||||
<el-button type="primary" @click="doAdd">确 定</el-button>
|
||||
</template>
|
||||
|
||||
<template #edit>
|
||||
<template>
|
||||
<vi-title title="录入成绩"></vi-title>
|
||||
<el-form :model="formData" ref="addForm" label-width="120px"
|
||||
label-suffix=":">
|
||||
<el-row gutter="40">
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="name" label="活动名称">
|
||||
<el-input maxlength="200" disabled v-model="name"
|
||||
type="text"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="allName" label="活动项目">
|
||||
<el-input maxlength="200" disabled v-model="allName"
|
||||
type="text"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
|
||||
<div style="display: flex;margin: 20px 0">
|
||||
<el-divider content-position="left">获奖名次列表</el-divider>
|
||||
<div style="padding-left: 10px;padding-top: 10px;">
|
||||
<el-tooltip class="item" effect="dark" content="点击添加活动人员" placement="top">
|
||||
<el-button style="float: right;margin-bottom: 10px" type="primary" icon="el-icon-plus"
|
||||
size="mini"
|
||||
@click="openAddUser">
|
||||
添加
|
||||
</el-button>
|
||||
</el-tooltip>
|
||||
</div>
|
||||
</div>
|
||||
<el-table style="margin-bottom: 20px" border stripe :data="userData" size="small"
|
||||
v-loading="userTabLoading">
|
||||
<el-table-column
|
||||
type="index" label="序号" header-align="center" align="center" width="100">
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" header-align="center"
|
||||
:label="awardsMode==1?'姓名':'分工会'"
|
||||
prop="id">
|
||||
<template scope="{$index,row}">
|
||||
<el-select v-model="row.userId" @change="(val)=>{userDetailsChange(val,row)}"
|
||||
placeholder="请输入姓名" filterable clearable
|
||||
style="width: 100%" size="small" v-if="awardsMode==1">
|
||||
<el-option
|
||||
v-for="item in userList"
|
||||
:disabled="item.disabled"
|
||||
:key="item.id"
|
||||
:label="item.username+'('+item.loginname+')'+item.sex"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
<el-select v-model="row.unionId" @change="(val)=>{unionDetailsChange(val,row)}"
|
||||
placeholder="请输入分工会" filterable clearable
|
||||
style="width: 100%" size="small" v-if="awardsMode==2">
|
||||
<el-option
|
||||
v-for="item in unionList"
|
||||
:disabled="item.disabled"
|
||||
:key="item.id"
|
||||
:label="item.unionname"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" header-align="center" label="名次" prop="ranking">
|
||||
<template scope="{$index,row}">
|
||||
<el-select v-model="row.ranking" @change="rankingChange(row)"
|
||||
placeholder="请输入名次" filterable clearable
|
||||
style="width: 100%" size="small">
|
||||
<el-option
|
||||
v-for="item in rankingList"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" header-align="center" label="积分" prop="integral">
|
||||
<template scope="{row}">
|
||||
<el-input-number v-model="row.integral"
|
||||
type="text"></el-input-number>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" header-align="center" label="人数" prop="numberOfPeople"
|
||||
v-if="awardsMode==2">
|
||||
<template scope="{row}">
|
||||
<el-input-number v-model="row.numberOfPeople"
|
||||
type="text"></el-input-number>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" header-align="center" label="分工会" prop="unionname"
|
||||
v-if="awardsMode==1">
|
||||
<template scope="{row}">
|
||||
<el-input v-model="row.unionname" disabled placeholder="分工会"
|
||||
type="text"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
|
||||
<el-table-column prop="userOnline" align="center" header-align="center" label="操作"
|
||||
width="150px">
|
||||
<template scope="{$index,row}">
|
||||
<el-button type="danger" icon="el-icon-delete" circle
|
||||
@click="delUser($index,row)"></el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
</el-table>
|
||||
|
||||
</el-form>
|
||||
|
||||
</template>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<el-form :model="formData" ref="addForm" label-width="120px" label-suffix=":">
|
||||
<el-row gutter="40">
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="name" label="活动名称">
|
||||
<el-input maxlength="200" disabled v-model="name"
|
||||
type="text"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="allName" label="活动项目">
|
||||
<el-input maxlength="200" disabled v-model="allName"
|
||||
type="text"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
|
||||
<div style="display: flex;margin: 20px 0">
|
||||
<el-divider content-position="left">获奖名次列表</el-divider>
|
||||
</div>
|
||||
<el-table style="margin-bottom: 20px" border stripe :data="viewData" size="small"
|
||||
v-loading="userTabLoading">
|
||||
<el-table-column
|
||||
type="index" label="序号" header-align="center" align="center" width="100">
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" header-align="center"
|
||||
:label="awardsMode==1?'姓名':'分工会'"
|
||||
prop="id">
|
||||
<template scope="{$index,row}">
|
||||
<el-select v-model="row.userId" @change="(val)=>{userDetailsChange(val,row)}"
|
||||
placeholder="请输入姓名" filterable clearable disabled
|
||||
style="width: 100%" size="small" v-if="awardsMode==1">
|
||||
<el-option
|
||||
v-for="item in userList"
|
||||
:key="item.id"
|
||||
:label="item.username+'('+item.loginname+')'+item.sex"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
<el-select v-model="row.unionId" @change="(val)=>{unionDetailsChange(val,row)}"
|
||||
placeholder="请输入分工会" filterable clearable disabled
|
||||
style="width: 100%" size="small" v-if="awardsMode==2">
|
||||
<el-option
|
||||
v-for="item in unionList"
|
||||
:key="item.id"
|
||||
:label="item.unionname"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" header-align="center" label="名次" prop="ranking">
|
||||
<template scope="{$index,row}">
|
||||
<el-select v-model="row.ranking" @change="rankingChange(row)"
|
||||
placeholder="请输入名次" filterable clearable disabled
|
||||
style="width: 100%" size="small">
|
||||
<el-option
|
||||
v-for="item in rankingList"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" header-align="center" label="积分" prop="integral">
|
||||
<template scope="{row}">
|
||||
<el-input v-model="row.integral" disabled type="text"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" header-align="center" label="人数" prop="numberOfPeople"
|
||||
v-if="awardsMode==2">
|
||||
<template scope="{row}">
|
||||
<el-input v-model="row.numberOfPeople" disabled type="text"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" header-align="center" label="分工会" prop="unionname"
|
||||
v-if="awardsMode==1">
|
||||
<template scope="{row}">
|
||||
<el-input v-model="row.unionname" disabled placeholder="分工会"
|
||||
type="text"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
</el-table>
|
||||
</template>
|
||||
|
||||
</guava>
|
||||
|
||||
<el-dialog
|
||||
title="添加人员"
|
||||
:visible.sync="dialogVisible"
|
||||
width="40%"
|
||||
:close-on-click-modal="false"
|
||||
>
|
||||
<el-form :model="formData" ref="form" :rules="formRules" label-width="100px">
|
||||
<!-- <el-form-item prop="loginname" label="工  号">
|
||||
<el-input maxlength="50" placeholder="请填写工号" v-model="formData.loginname"
|
||||
type="text" @blur="userBlur"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="username" label="姓  名">
|
||||
<el-input maxlength="50" placeholder="请填写姓名" v-model="formData.username"
|
||||
type="text"></el-input>
|
||||
</el-form-item>-->
|
||||
<el-form-item prop="mobile" label="姓名或工号">
|
||||
<el-select
|
||||
style="width: 100%"
|
||||
v-model="formData.userid"
|
||||
filterable
|
||||
clearable
|
||||
remote
|
||||
reserve-keyword
|
||||
allow-create
|
||||
default-first-option
|
||||
placeholder="请输入姓名或工号查找"
|
||||
:remote-method="userRemoteMethod"
|
||||
@change="userChange2">
|
||||
<el-option
|
||||
v-for="item in userOptions"
|
||||
:key="item.id"
|
||||
:label="item.username+'('+item.loginname+')'"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item prop="loginname" label="工  号">
|
||||
<el-input maxlength="50" placeholder="请填写工号" v-model="formData.loginname"
|
||||
type="text"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item prop="mobile" label="电  话">
|
||||
<el-input maxlength="50" placeholder="请填写电话" v-model="formData.mobile"
|
||||
type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="sex" label="性  别">
|
||||
<el-radio-group v-model="formData.sex">
|
||||
<el-radio :label="'男'" border>男</el-radio>
|
||||
<el-radio :label="'女'" border>女</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item prop="unitId" label="所在单位">
|
||||
<el-select v-model="formData.unitId" placeholder="请选择所在单位" clearable @change="unitChange" filterable
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in unitOptions"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item prop="unionname" label="所属工会">
|
||||
<el-input disabled placeholder="所属工会" v-model="formData.unionname"
|
||||
type="text"></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="doAddUser">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
|
||||
userOptions: [],
|
||||
groupList: [
|
||||
{value: 1, name: "甲组"},
|
||||
{value: 2, name: "乙组"},
|
||||
{value: 3, name: "丙组"},
|
||||
{value: 4, name: "丁组"}
|
||||
],
|
||||
dialogVisible: false,
|
||||
viewData: [],
|
||||
userTabLoading: false,
|
||||
awardsMode: "",
|
||||
isMenWomen: "",
|
||||
allName: "",
|
||||
name: "",
|
||||
eventId: "",
|
||||
activityId: "",
|
||||
userData: [],
|
||||
userList: [],
|
||||
userList2: [],
|
||||
unionList: [],
|
||||
unionList2: [],
|
||||
activityList: [],
|
||||
events: [],
|
||||
unitOptions: [],
|
||||
rankingList: [
|
||||
{name: "第一名", id: 1},
|
||||
{name: "第二名", id: 2},
|
||||
{name: "第三名", id: 3},
|
||||
{name: "第四名", id: 4},
|
||||
{name: "第五名", id: 5},
|
||||
{name: "第六名", id: 6},
|
||||
{name: "第七名", id: 7},
|
||||
{name: "第八名", id: 8}],
|
||||
sexList: [{sex: "男", id: 1}, {sex: "女", id: 2}],
|
||||
pageForm: {
|
||||
isMenWomen: [],
|
||||
year: new Date().getFullYear() + "",
|
||||
},
|
||||
formRules: {
|
||||
unitId: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
username: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
loginname: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
}
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
},
|
||||
methods: {
|
||||
|
||||
dropdownCommand(command) {
|
||||
const {type, row} = command
|
||||
if (type === 'view') {
|
||||
this.openView(row)
|
||||
} else if (type === 'input') {
|
||||
this.openInput(row)
|
||||
}
|
||||
},
|
||||
async userRemoteMethod(query) {
|
||||
if (query) {
|
||||
const userData = await searchUser(query, null, null, null, null)
|
||||
this.userOptions = userData
|
||||
}
|
||||
},
|
||||
userChange2(userid) {
|
||||
const aa = this.userOptions.find(v => v.id === userid)
|
||||
|
||||
if (aa != undefined) {
|
||||
this.$set(this.formData, "username", aa.username)
|
||||
this.$set(this.formData, "loginname", aa.loginname)
|
||||
this.$set(this.formData, "mobile", aa.mobile)
|
||||
this.$set(this.formData, "unitId", aa.unitid)
|
||||
this.$set(this.formData, "unionId", aa.unionid)
|
||||
this.$set(this.formData, "unionname", aa.unionname)
|
||||
this.$set(this.formData, "sex", aa.sex)
|
||||
} else {
|
||||
this.$set(this.formData, "username", userid)
|
||||
}
|
||||
|
||||
},
|
||||
async unitChange() {
|
||||
const uniotData = this.unitOptions.find(v => v.id == this.formData.unitId)
|
||||
this.$set(this.formData, "unionname", uniotData.unionname)
|
||||
this.$set(this.formData, "unionId", uniotData.unionid)
|
||||
this.$set(this.formData, "unitname", uniotData.name)
|
||||
},
|
||||
async openAdd() {
|
||||
this.unitOptions = await getUnits(null)
|
||||
this.$set(this.formData, "activityId", this.activityId)
|
||||
this.$set(this.formData, "eventId", this.eventId)
|
||||
this.$set(this.formData, "awardsMode", this.awardsMode)
|
||||
this.$set(this.formData, "identity", ['1'])
|
||||
this.$set(this.formData, "status", 2)
|
||||
this.$set(this.formData, "sex", "男")
|
||||
this.dialogVisible = true
|
||||
if (this.$refs['form']) {
|
||||
this.$refs['form'].resetFields()
|
||||
}
|
||||
|
||||
},
|
||||
async doAddUser() {
|
||||
this.$refs["form"].validate(async (valid) => {
|
||||
if (valid) {
|
||||
if (this.userList.some(v => v.id === this.formData.userid)) {
|
||||
this.notifyWarning("您添加的运动员已经是远动员!")
|
||||
return
|
||||
}
|
||||
await $.post(loc() + "/doAdd", {
|
||||
activityResults: JSON.stringify(this.userData),
|
||||
activityId: this.activityId,
|
||||
eventId: this.eventId
|
||||
})
|
||||
const pageForm = clone(this.formData)
|
||||
pageForm.identity = JSON.stringify(this.formData.identity)
|
||||
const resp = await $.post(loc() + "/doAddUser", pageForm)
|
||||
requestLaterFun(resp, async () => {
|
||||
await this.userChange()
|
||||
this.userDetailsChange()
|
||||
this.dialogVisible = false
|
||||
}, () => {
|
||||
this.notifyWarning(resp.msg)
|
||||
}, () => {
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
async yearChange() {
|
||||
this.activityList = []
|
||||
this.events = []
|
||||
this.$set(this.pageForm, "activityId", "")
|
||||
this.$set(this.pageForm, "eventId", "")
|
||||
const {data} = await $.get("/platform/activity/score/statistics/getActivitys", {year: this.pageForm.year})
|
||||
this.activityList = data
|
||||
if (data.length > 0) {
|
||||
this.pageForm.activityId = this.activityList[0].id
|
||||
}
|
||||
await this.doSearchS()
|
||||
},
|
||||
async changeActivit() {
|
||||
const resp = await $.post("/platform/activity/apply/getEvents", {activityId: this.pageForm.activityId})
|
||||
this.events = resp
|
||||
},
|
||||
async doAdd() {
|
||||
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '正在提交...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: COVER_LAYER_COLOR
|
||||
});
|
||||
this.userData.activityId = this.activityId
|
||||
this.userData.eventId = this.eventId
|
||||
const resp = await $.post(loc() + "/doAdd", {
|
||||
activityResults: JSON.stringify(this.userData),
|
||||
activityId: this.activityId,
|
||||
eventId: this.eventId
|
||||
})
|
||||
closeLoadingFunc(loading, resp, async () => {
|
||||
this.pageData()
|
||||
this.$refs.guava.index()
|
||||
}, (data, msg) => {
|
||||
this.$message.error(msg);
|
||||
})
|
||||
|
||||
|
||||
},
|
||||
rankingChange() {
|
||||
for (let ranking = 1; ranking <= 8; ranking++) {
|
||||
let size = 0
|
||||
let indexArray = [];
|
||||
this.userData.forEach((v, index) => {
|
||||
if (ranking == v.ranking) {
|
||||
size++
|
||||
indexArray.push(index)
|
||||
}
|
||||
})
|
||||
if (size == 1) {
|
||||
/*
|
||||
if (this.awardsMode == 2) {
|
||||
this.userData[indexArray[0]].integral = (this.calScore(ranking) / 2).toFixed(2);
|
||||
console.log(this.calScore(ranking),2)
|
||||
} else {
|
||||
this.userData[indexArray[0]].integral = this.calScore(ranking).toFixed(2);
|
||||
console.log(this.calScore(ranking),1)
|
||||
}*/
|
||||
|
||||
this.userData[indexArray[0]].integral = this.calScore(ranking).toFixed(2);
|
||||
} else {
|
||||
var scoreArray = 0;
|
||||
for (var i = 0; i < size; i++) {
|
||||
scoreArray += this.calScore(ranking * 1 + i * 1);
|
||||
}
|
||||
/* if (this.awardsMode == 2) {
|
||||
scoreArray = scoreArray / size / 2;
|
||||
console.log(scoreArray, 2)
|
||||
} else {
|
||||
scoreArray = scoreArray / size;
|
||||
console.log(scoreArray, 1)
|
||||
}*/
|
||||
scoreArray = scoreArray / size;
|
||||
indexArray.forEach(v => {
|
||||
this.userData[v].integral = scoreArray.toFixed(2);
|
||||
})
|
||||
}
|
||||
}
|
||||
},
|
||||
calScore(ranking) {
|
||||
let score;
|
||||
if (ranking < 5) {// 1 2 3 4
|
||||
if (ranking < 3) {//1 2
|
||||
if (ranking == 1) {
|
||||
score = this.awardsMode == 1 ? 9 : 9 * 2;
|
||||
} else if (ranking == 2) {
|
||||
score = this.awardsMode == 1 ? 7 : 7 * 2;
|
||||
}
|
||||
} else {//3 4
|
||||
if (ranking == 3) {
|
||||
score = this.awardsMode == 1 ? 6 : 6 * 2;
|
||||
} else if (ranking == 4) {
|
||||
score = this.awardsMode == 1 ? 5 : 5 * 2;
|
||||
}
|
||||
}
|
||||
} else {//5 6 7 8
|
||||
if (ranking < 7) {//5 6
|
||||
if (ranking == 5) {
|
||||
score = this.awardsMode == 1 ? 4 : 4 * 2;
|
||||
} else if (ranking == 6) {
|
||||
score = this.awardsMode == 1 ? 3 : 3 * 2;
|
||||
}
|
||||
} else {//7 8 9
|
||||
if (ranking == 7) {
|
||||
score = this.awardsMode == 1 ? 2 : 2 * 2;
|
||||
} else if (ranking == 8) {
|
||||
score = this.awardsMode == 1 ? 1 : 1 * 2;
|
||||
} else if (ranking == 9) {
|
||||
score = this.awardsMode == 1 ? 1 : 1 * 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
return score;
|
||||
},
|
||||
userDetailsChange(val, row) {
|
||||
const useridArr = this.userData.map(v => v.userId)
|
||||
this.userList.forEach(v => {
|
||||
v.disabled = useridArr.includes(v.id)
|
||||
if (row && row.userId === v.id) {
|
||||
const o = {
|
||||
unionId: v.unionid,
|
||||
activityId: this.activityId,
|
||||
eventId: this.eventId,
|
||||
isTeamPersonal: 1,
|
||||
unionname: v.unionname
|
||||
}
|
||||
Object.assign(row, o)
|
||||
|
||||
}
|
||||
|
||||
})
|
||||
},
|
||||
async unionDetailsChange(val, row) {
|
||||
let data = ''
|
||||
if (row) {
|
||||
const {unionId} = row
|
||||
data = await $.get(loc() + "/getUnionDetails", {
|
||||
activityId: this.activityId,
|
||||
eventId: this.eventId,
|
||||
unionId: unionId
|
||||
})
|
||||
}
|
||||
|
||||
this.$nextTick(() => {
|
||||
const unionIdArr = this.userData.map(v => v.unionId)
|
||||
this.unionList.forEach(v => {
|
||||
v.disabled = unionIdArr.includes(v.id)
|
||||
if (row && row.unionId === v.id) {
|
||||
const o = {
|
||||
numberOfPeople: data.data,
|
||||
activityId: this.activityId,
|
||||
eventId: this.eventId,
|
||||
isTeamPersonal: 2
|
||||
}
|
||||
Object.assign(row, o)
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
delUser(index, row) {
|
||||
this.userData.splice(index, 1)
|
||||
this.userDetailsChange()
|
||||
this.unionDetailsChange()
|
||||
},
|
||||
async getUserList() {
|
||||
const {data} = await $.get(loc() + "/getUserList", {
|
||||
activityId: this.activityId,
|
||||
eventId: this.eventId,
|
||||
isMenWomen: this.isMenWomen
|
||||
})
|
||||
return data;
|
||||
|
||||
},
|
||||
async getUnionList(row) {
|
||||
const {activityId, eventId} = row
|
||||
const {data} = await $.get(loc() + "/getUnionList", {
|
||||
activityId: activityId,
|
||||
eventId: eventId
|
||||
})
|
||||
return data;
|
||||
},
|
||||
openAddUser() {
|
||||
this.userData.push({})
|
||||
},
|
||||
async userChange() {
|
||||
this.userList = await this.getUserList()
|
||||
this.userList2 = this.userList
|
||||
this.userData = []
|
||||
const {data} = await $.get(loc() + "/getUserData", {
|
||||
activityId: this.activityId,
|
||||
eventId: this.eventId,
|
||||
isMenWomen: this.isMenWomen
|
||||
})
|
||||
if (data.length > 0) {
|
||||
this.userData = data
|
||||
this.viewData = data
|
||||
}
|
||||
this.$forceUpdate();
|
||||
|
||||
},
|
||||
|
||||
async getUnionData(row) {
|
||||
const {activityId, eventId} = row
|
||||
const {data} = await $.get(loc() + "/getUnionData", {
|
||||
activityId: activityId,
|
||||
eventId: eventId
|
||||
})
|
||||
return data
|
||||
},
|
||||
|
||||
|
||||
async openView(row) {
|
||||
this.isMenWomen = ""
|
||||
this.userData = []
|
||||
this.viewData = []
|
||||
this.userList = []
|
||||
this.awardsMode = row.awardsMode
|
||||
this.name = row.name
|
||||
this.allName = row.allName
|
||||
this.activityId = row.activityId
|
||||
this.eventId = row.eventId
|
||||
if (row.awardsMode == 2) {
|
||||
this.unionList = await this.getUnionList(row)
|
||||
this.viewData = await this.getUnionData(row)
|
||||
await this.unionDetailsChange(row)
|
||||
} else {
|
||||
await this.userChange()
|
||||
this.userDetailsChange()
|
||||
}
|
||||
|
||||
this.$refs.guava.view()
|
||||
},
|
||||
async openInput(row) {
|
||||
this.isMenWomen = ""
|
||||
this.userData = []
|
||||
this.userList = []
|
||||
this.awardsMode = row.awardsMode
|
||||
this.name = row.name
|
||||
this.allName = row.allName
|
||||
this.activityId = row.activityId
|
||||
this.eventId = row.eventId
|
||||
this.isMenWomen = row.isMenWomen
|
||||
if (row.awardsMode == 2) {
|
||||
this.unionList = await this.getUnionList(row)
|
||||
this.userData = await this.getUnionData(row)
|
||||
await this.unionDetailsChange()
|
||||
} else {
|
||||
await this.userChange()
|
||||
this.userDetailsChange()
|
||||
}
|
||||
this.$refs.guava.edit()
|
||||
|
||||
|
||||
},
|
||||
async getActivitys() {
|
||||
const {data} = await $.get("/platform/activity/remind/getActivitys")
|
||||
return data;
|
||||
|
||||
},
|
||||
async doSearchS() {
|
||||
this.doSearch()
|
||||
await this.changeActivit()
|
||||
},
|
||||
doSearch() {
|
||||
this.pageForm.pageNumber = 1
|
||||
this.pageData()
|
||||
},
|
||||
pageData() {
|
||||
sublime.showLoadingbar();
|
||||
this.tabLoading = true
|
||||
const pageForm = clone(this.pageForm)
|
||||
pageForm.isMenWomen = JSON.stringify(pageForm.isMenWomen)
|
||||
$.post(base + "/platform/activity/results/input/pageData", pageForm, (data) => {
|
||||
sublime.closeLoadingbar();
|
||||
this.tabLoading = false
|
||||
if (data.code == 0) {
|
||||
this.tableData = data.data.list;
|
||||
this.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
this.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
},
|
||||
|
||||
async created() {
|
||||
this.yearChange()
|
||||
this.pageData()
|
||||
/* this.activityList = await this.getActivitys()
|
||||
if (this.activityList.length) {
|
||||
this.pageForm.activityId = this.activityList[0].id
|
||||
}
|
||||
await this.changeActivit()
|
||||
this.pageData()*/
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,152 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<div id="app" class="platform" v-cloak>
|
||||
<guava ref="guava" padding="0">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<div class="search">
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">活动项目:</div>
|
||||
<div class="search-item-option">
|
||||
<el-select v-model="pageForm.events" placeholder="请选择活动项目" filterable clearable
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in events"
|
||||
:key="item.id"
|
||||
:label="item.allName"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-query">
|
||||
<el-button type="primary" icon="el-icon-search" @click="pageData">搜索</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool label="活动信息" :app="this"></table-tool>
|
||||
<el-table :data="tableData" style="width: 100%;margin-bottom: 20px" row-key="id"
|
||||
@sort-change="pageOrder" v-loading="tableLoading" :size="tableSize" class="vi-table">
|
||||
|
||||
<el-table-column align="center" header-align="center" type="index" :index="indexMethod" label="序号"
|
||||
width="80px"></el-table-column>
|
||||
<el-table-column
|
||||
align="center"
|
||||
header-align="center"
|
||||
v-for="column in tableColumns"
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable">
|
||||
|
||||
<template v-if="column.prop=='identity'" scope="{row}">
|
||||
<span v-if="row.identity===1">运动员</span>
|
||||
<span v-if="row.identity===2">教练</span>
|
||||
<span v-if="row.identity===3">领队</span>
|
||||
</template>
|
||||
|
||||
<template v-else-if="column.prop=='events'" scope="{row}">
|
||||
<span>{{row.allName}}</span>
|
||||
</template>
|
||||
|
||||
<template v-else-if="column.prop=='gameStyle'" scope="{row}">
|
||||
<span>{{activity.school.gameStyle[row.gameStyle]}}</span>
|
||||
</template>
|
||||
|
||||
<template v-else-if="column.prop=='startTime'" scope="{row}">
|
||||
{{moment(row.startTime).format('YYYY-MM-DD')}} -
|
||||
{{moment(row.endTime).format('YYYY-MM-DD')}}
|
||||
</template>
|
||||
|
||||
<template v-else-if="column.prop=='state'"
|
||||
scope="{row:{close,applyStartTime,applyEndTime,startTime,endTime}}">
|
||||
<div v-html="activity.school.getStatus(close,applyStartTime,applyEndTime,startTime,endTime)"></div>
|
||||
</template>
|
||||
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column prop="userOnline" align="center" header-align="center" label="操作" width="150px">
|
||||
<template scope="{row}">
|
||||
<el-dropdown @command="dropdownCommand">
|
||||
<el-button size="mini" :loading="row.loading">
|
||||
<i class="ti-settings"></i>
|
||||
<span class="ti-angle-down"></span>
|
||||
</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item :command="{type:'pass',row}">
|
||||
通过
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'fail',row}">
|
||||
不通过
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
|
||||
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
events: [],
|
||||
tableColumns: [
|
||||
{prop: 'loginname', label: '申请人工号'},
|
||||
{prop: 'username', label: '申请人姓名'},
|
||||
{prop: 'mobile', label: '申请人电话'},
|
||||
{prop: 'identity', label: '申请角色'},
|
||||
{prop: 'allName', label: '活动项目'},
|
||||
{prop: 'startTime', label: '活动日期'},
|
||||
{prop: 'state', label: '活动状态'},
|
||||
]
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
},
|
||||
methods: {
|
||||
dropdownCommand(command) {
|
||||
const {type, row} = command
|
||||
if (type === 'pass') {
|
||||
this.doPassFail(row, 2)
|
||||
} else if (type === 'fail') {
|
||||
this.doPassFail(row, 3)
|
||||
}
|
||||
},
|
||||
async doPassFail(row, status) {
|
||||
const resp = await $.post(loc() + "/doPassFail", {id: row.id, status: status})
|
||||
requestLaterFun(resp, () => {
|
||||
this.pageData()
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
})
|
||||
},
|
||||
|
||||
},
|
||||
async created() {
|
||||
this.pageData()
|
||||
this.events = await activity.getEvents()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,439 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<style>
|
||||
#app {
|
||||
/*max-height: calc(100vh - 50px);
|
||||
overflow: hidden;*/
|
||||
}
|
||||
|
||||
.query-row {
|
||||
height: 70px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.query-row:not(:last-child) {
|
||||
border-bottom: 1px dashed rgb(230, 230, 230);
|
||||
}
|
||||
|
||||
|
||||
.query-row-title {
|
||||
width: 120px;
|
||||
}
|
||||
|
||||
.el-select,.el-input{
|
||||
width: 80%;
|
||||
}
|
||||
.el-date-editor.el-input, .el-date-editor.el-input__inner{
|
||||
width: 175px!important;
|
||||
}
|
||||
|
||||
|
||||
|
||||
</style>
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<div style="max-height: 250px">
|
||||
<el-card shadow="never">
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="3">
|
||||
<el-date-picker
|
||||
v-model="pageForm.year"
|
||||
@change="getActivitys"
|
||||
type="year"
|
||||
value-format="yyyy"
|
||||
placeholder="选择年" :clearable="false">
|
||||
</el-date-picker>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
活动名称
|
||||
<el-select v-model="pageForm.activityId" placeholder="请选择活动名称" filterable
|
||||
:clearable="false" @change="activityChange">
|
||||
<el-option
|
||||
v-for="item in activityList"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-col>
|
||||
<el-col :span="6" v-if="isUnion">
|
||||
工会名称
|
||||
<el-select v-model="pageForm.unionname" placeholder="请选择工会" filterable clearable
|
||||
@change="unionChange(pageForm.unionId)">
|
||||
<el-option
|
||||
v-for="item in unionList"
|
||||
:key="item.id"
|
||||
:label="item.unionname"
|
||||
:value="item.unionname">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-col>
|
||||
<el-col :span="3">
|
||||
<el-button type="primary" icon="el-icon-search" @click="getYear8(1)">年度男子团体总分</el-button>
|
||||
</el-col>
|
||||
<el-col :span="3">
|
||||
<el-button type="primary" icon="el-icon-search" @click="getYear8(2)">年度女子团体总分</el-button>
|
||||
|
||||
</el-col>
|
||||
<el-col :span="3">
|
||||
<el-button type="primary" icon="el-icon-search" @click="annualResults">年度团体总分</el-button>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
|
||||
<!-- <div class="search">-->
|
||||
|
||||
<!-- <div class="search-item">-->
|
||||
<!-- <div class="search-item-label">年  度:</div>-->
|
||||
<!-- <div class="search-item-option">-->
|
||||
<!-- <el-date-picker-->
|
||||
<!-- v-model="pageForm.year"-->
|
||||
<!-- @change="getActivitys"-->
|
||||
<!-- type="year"-->
|
||||
<!-- value-format="yyyy" style="width: 100%"-->
|
||||
<!-- placeholder="选择年" :clearable="false">-->
|
||||
<!-- </el-date-picker>-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
|
||||
<!-- <div class="search-item">-->
|
||||
<!-- <div class="search-item-label">活动名称:</div>-->
|
||||
<!-- <div class="search-item-option">-->
|
||||
<!-- <el-select v-model="pageForm.activityId" placeholder="请选择活动名称" filterable-->
|
||||
<!-- style="width: 100%" :clearable="false" @change="activityChange">-->
|
||||
<!-- <el-option-->
|
||||
<!-- v-for="item in activityList"-->
|
||||
<!-- :key="item.id"-->
|
||||
<!-- :label="item.name"-->
|
||||
<!-- :value="item.id">-->
|
||||
<!-- </el-option>-->
|
||||
<!-- </el-select>-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
<!-- <div class="search-item" v-if="isUnion">-->
|
||||
<!-- <div class="search-item-label">工会名称:</div>-->
|
||||
<!-- <div class="search-item-option">-->
|
||||
<!-- <el-select v-model="pageForm.unionname" placeholder="请选择工会" filterable clearable-->
|
||||
<!-- style="width: 100%" @change="unionChange(pageForm.unionId)">-->
|
||||
<!-- <el-option-->
|
||||
<!-- v-for="item in unionList"-->
|
||||
<!-- :key="item.id"-->
|
||||
<!-- :label="item.unionname"-->
|
||||
<!-- :value="item.unionname">-->
|
||||
<!-- </el-option>-->
|
||||
<!-- </el-select>-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
|
||||
<!-- <div class="pull-right offscreen-right" style="margin-left: auto">-->
|
||||
<!-- <el-button type="primary" icon="el-icon-search" @click="getYear8(1)">年度男子团体总分</el-button>-->
|
||||
<!-- <el-button type="primary" icon="el-icon-search" @click="getYear8(2)">年度女子团体总分</el-button>-->
|
||||
<!-- <el-button type="primary" icon="el-icon-search" @click="annualResults">年度团体总分</el-button>-->
|
||||
<!-- </div>-->
|
||||
|
||||
|
||||
<!-- </div>-->
|
||||
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" style="margin-top: 10px">
|
||||
|
||||
|
||||
<el-row type="flex" align="middle" class="query-row">
|
||||
<el-col class="query-row-title">按活动统计:</el-col>
|
||||
<el-col class="query-row-content" v-if="isSearchOptions">
|
||||
<el-button
|
||||
style="margin-left: 10px"
|
||||
size="medium"
|
||||
v-for="item in searchOptions"
|
||||
:key="item.id"
|
||||
:type="item.name" @click="searchClick(item.id)">{{item.name}}
|
||||
</el-button>
|
||||
</el-col>
|
||||
<el-col class="query-row-content" v-else>
|
||||
<el-button style="margin-left: 10px"
|
||||
size="medium" @click="gradesClick(9)">成绩统计
|
||||
</el-button>
|
||||
</el-col>
|
||||
<div class="pull-right offscreen-right" style="margin-left: auto">
|
||||
|
||||
<el-button type="primary" icon="el-icon-printer" @click="doGetYear8" v-if="isYear8">导出
|
||||
</el-button>
|
||||
<el-button type="primary" icon="el-icon-printer" @click="print" v-else>打 印</el-button>
|
||||
</div>
|
||||
</el-row>
|
||||
|
||||
|
||||
</el-card>
|
||||
</div>
|
||||
<div id=print ref="print">
|
||||
<el-card shadow="never" class="mt10"
|
||||
v-show="[1,2,3,4,5,9,10].includes(isSearchOptions)&&isSearchOptions">
|
||||
<vi-title v-if="isSearchOptions==1" title="男子单项成绩"></vi-title>
|
||||
<vi-title v-if="isSearchOptions==2" title="女子单项成绩"></vi-title>
|
||||
<vi-title v-if="isSearchOptions==3" title="男子团体成绩"></vi-title>
|
||||
<vi-title v-if="isSearchOptions==4" title="女子团体成绩"></vi-title>
|
||||
<vi-title v-if="isSearchOptions==5" title="男女混合类成绩"></vi-title>
|
||||
<vi-title v-if="isSearchOptions==9&&isSearch" title="分工会男子项目积分"></vi-title>
|
||||
<vi-title v-if="isSearchOptions==9&&!isSearch" title="分工会项目成绩"></vi-title>
|
||||
<vi-title v-if="isSearchOptions==10" title="分工会女子项目积分"></vi-title>
|
||||
<is-male-female :form="pageForm" ref="female"></is-male-female>
|
||||
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt10" v-show="[6,7,8].includes(isSearchOptions)&&isSearchOptions">
|
||||
<vi-title v-if="isSearchOptions==6" title="男子项目前八"></vi-title>
|
||||
<vi-title v-if="isSearchOptions==7" title="女子项目前八"></vi-title>
|
||||
<vi-title v-if="isSearchOptions==8" title="综合类前八"></vi-title>
|
||||
<el-row>
|
||||
<top-eight :form="pageForm" ref="doeight"></top-eight>
|
||||
</el-row>
|
||||
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt10" v-show="[11,12].includes(isSearchOptions)&&isSearchOptions">
|
||||
<vi-title v-if="isSearchOptions==11" title="分工会男子总分前八"></vi-title>
|
||||
<vi-title v-if="isSearchOptions==12" title="分工会女子总分前八"></vi-title>
|
||||
<score-top-eight :form="pageForm" ref="doTopEight"></score-top-eight>
|
||||
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt10" v-show="[99].includes(isSearchOptions)">
|
||||
<vi-title v-if="isSearchOptions==99" title="全年成绩"></vi-title>
|
||||
<el-table :data="annualResultsTableData" style="width: 100%;height: 100%" stripe border
|
||||
show-summary
|
||||
:header-cell-style="{background:'#FAFAFA'}" row-key="id" @sort-change="pageOrder"
|
||||
v-loading="tableLoading" size="mini" fixed ref="annualResults"
|
||||
>
|
||||
|
||||
<el-table-column align="center" header-align="center" type="index"
|
||||
label="名次"
|
||||
width="80px" fixed></el-table-column>
|
||||
<el-table-column
|
||||
align="center"
|
||||
header-align="center"
|
||||
v-for="column in annualTableColumns"
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
show-overflow-tooltip>
|
||||
</el-table-column>
|
||||
|
||||
</el-table>
|
||||
</el-card>
|
||||
</div>
|
||||
|
||||
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
isMenWomen: "",
|
||||
isUnion: false,
|
||||
isYear8: false,
|
||||
annualTableColumns: [],
|
||||
annualResultsTableData: [],
|
||||
annualMaxHeight: 0,
|
||||
colspan: [],
|
||||
eventList: [],
|
||||
score: [],
|
||||
titleCol: 0,
|
||||
activityList: [],
|
||||
events: [],
|
||||
unionList: [],
|
||||
units: [],
|
||||
isSearch: true,
|
||||
searchOptions: [],
|
||||
Options: [
|
||||
/* {id: 1, name: "男子单项"},
|
||||
{id: 2, name: "女子单项"},
|
||||
{id: 3, name: "男子团体"},
|
||||
{id: 4, name: "女子团体"},
|
||||
{id: 5, name: "男女混合类"},*/
|
||||
{id: 9, name: "分工会男子项目积分"},
|
||||
{id: 10, name: "分工会女子项目积分"},
|
||||
{id: 6, name: "男子项目前八"},
|
||||
{id: 7, name: "女子项目前八"},
|
||||
{id: 8, name: "团体前八"},
|
||||
|
||||
{id: 11, name: "分工会男子总分前八"},
|
||||
{id: 12, name: "分工会女子总分前八"},
|
||||
|
||||
],
|
||||
isSearchOptions: 9,
|
||||
pageForm: {
|
||||
activityId: "",
|
||||
personTypes: [],
|
||||
year: new Date().getFullYear() + "",
|
||||
},
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'is-male-female': httpVueLoader('/components/activity/score/isMaleFemale.vue?v=' + new Date().getTime()),
|
||||
'top-eight': httpVueLoader('/components/activity/score/topEight.vue?v=' + new Date().getTime()),
|
||||
'score-top-eight': httpVueLoader('/components/activity/score/scoreTopEight.vue?v=' + new Date().getTime()),
|
||||
},
|
||||
methods: {
|
||||
print() {
|
||||
let subOutputRankPrint = document.getElementById('print');
|
||||
let newContent = subOutputRankPrint.innerHTML;
|
||||
let oldContent = document.body.innerHTML;
|
||||
document.body.innerHTML = newContent;
|
||||
window.print();
|
||||
window.location.reload();
|
||||
document.body.innerHTML = oldContent;
|
||||
return false;
|
||||
|
||||
},
|
||||
activityChange() {
|
||||
const aa = this.activityList.find(v => v.id == this.pageForm.activityId)
|
||||
if (aa.applyType == 1) {
|
||||
this.isSearch = false
|
||||
this.searchOptions = [{id: 9, name: "分工会项目成绩"}]
|
||||
} else {
|
||||
this.searchOptions = this.Options
|
||||
}
|
||||
this.searchClick(9)
|
||||
},
|
||||
unionChange() {
|
||||
this.searchClick(9)
|
||||
},
|
||||
searchClick(id) {
|
||||
this.isSearchOptions = id
|
||||
if (id <= 5 || id == 9 || id == 10) {
|
||||
if (id == 1 || id == 2) {
|
||||
this.isUnion = false
|
||||
this.isYear8 = false
|
||||
this.pageForm.sex = id == 1 ? "男" : "女"
|
||||
this.pageForm.awardsMode = 1
|
||||
} else if (id == 3 || id == 4) {
|
||||
this.isUnion = false
|
||||
this.isUnionisYear8 = false
|
||||
this.pageForm.sex = id == 3 ? "男" : "女"
|
||||
this.pageForm.awardsMode = 2
|
||||
} else if (id == 9 || id == 10) {
|
||||
this.isUnion = true
|
||||
this.pageForm.sex = id == 9 ? "男" : "女"
|
||||
this.pageForm.awardsMode = 4
|
||||
} else {
|
||||
this.pageForm.awardsMode = 3
|
||||
}
|
||||
this.$refs.female.isMaleFemale()
|
||||
} else if (id == 6 || id == 7 || id == 8) {
|
||||
if (id == 6 || id == 7) {
|
||||
this.isUnion = false
|
||||
this.isYear8 = false
|
||||
this.pageForm.sex = id == 6 ? "男" : "女"
|
||||
this.pageForm.awardsMode = 1
|
||||
} else if (id == 8) {
|
||||
this.pageForm.awardsMode = 2
|
||||
}
|
||||
this.$refs.doeight.isTopEight()
|
||||
} else if (id == 11 || id == 12) {
|
||||
this.pageForm.sex = id == 11 ? "男" : "女"
|
||||
this.$refs.doTopEight.isScoreTopEight()
|
||||
}
|
||||
},
|
||||
async doGetYear8() {
|
||||
location.href = loc() + "/doGetYear8?year=" + this.pageForm.year+"&isMenWomen="+this.isMenWomen
|
||||
},
|
||||
async getYear8(isMenWomen) {
|
||||
this.isMenWomen = isMenWomen
|
||||
this.isUnion = false
|
||||
this.isYear8 = true
|
||||
this.$set(this.pageForm, "activityId", null)
|
||||
this.$set(this.pageForm, "unionname", null)
|
||||
this.annualTableColumns = []
|
||||
this.annualResultsTableData = []
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '数据正在查询中,请稍后...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: COVER_LAYER_COLOR
|
||||
});
|
||||
this.isSearchOptions = 99
|
||||
const {data} = await $.get(loc() + "/getYear8", {
|
||||
year: this.pageForm.year,
|
||||
isMenWomen: isMenWomen
|
||||
})
|
||||
this.annualResultsTableData = data.score
|
||||
this.annualResultsTableData = this.annualResultsTableData.sort((a, b) => b['总分'] - a['总分'])
|
||||
|
||||
data.label.forEach(v => {
|
||||
this.annualTableColumns.push({label: v, prop: v})
|
||||
})
|
||||
loading.close();
|
||||
},
|
||||
|
||||
async annualResults() {
|
||||
this.isUnion = false
|
||||
this.isYear8 = false
|
||||
this.$set(this.pageForm, "activityId", null)
|
||||
this.$set(this.pageForm, "unionname", null)
|
||||
this.annualTableColumns = []
|
||||
this.annualResultsTableData = []
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '数据正在查询中,请稍后...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: COVER_LAYER_COLOR
|
||||
});
|
||||
this.isSearchOptions = 99
|
||||
const {data} = await $.get(loc() + "/getAnnualResults", {
|
||||
year: this.pageForm.year
|
||||
})
|
||||
this.annualResultsTableData = data.score
|
||||
this.annualResultsTableData = this.annualResultsTableData.sort((a, b) => b['总分'] - a['总分'])
|
||||
|
||||
data.label.forEach(v => {
|
||||
this.annualTableColumns.push({label: v, prop: v})
|
||||
})
|
||||
loading.close();
|
||||
},
|
||||
async getActivitys() {
|
||||
|
||||
const {data} = await $.get(loc() + "/getActivitys", {year: this.pageForm.year})
|
||||
this.pageForm = {
|
||||
activityId: "",
|
||||
year: this.pageForm.year
|
||||
},
|
||||
this.activityList = data
|
||||
|
||||
},
|
||||
async changeActivit() {
|
||||
const resp = await $.post("/platform/activity/apply/getEvents", {activityId: this.pageForm.activityId})
|
||||
this.events = resp
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
this.searchOptions = this.Options
|
||||
this.unionList = await getUnions(null)
|
||||
await this.getActivitys()
|
||||
if (this.activityList.length) {
|
||||
this.pageForm.activityId = this.activityList[0].id
|
||||
}
|
||||
setTimeout(() => {
|
||||
this.searchClick(9)
|
||||
}, 200)
|
||||
},
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,598 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
|
||||
</style>
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-date-picker v-model="pageForm.year"
|
||||
type="year" value-format="yyyy" style="width: 200px" 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: 110px;">
|
||||
<el-option label="场地名称" value="name"></el-option>
|
||||
<el-option label="场地地址" value="address"></el-option>
|
||||
</el-select>
|
||||
</el-input>
|
||||
</div>
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-select v-model="pageForm.siteType" placeholder="场地类型" clearable
|
||||
style="width: 200px;">
|
||||
<el-option v-for="item in activityTypeList" :label="item.text" :value="item.value"></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>
|
||||
|
||||
<div class="pull-right offscreen-right mt5">
|
||||
<el-button type="primary" icon="el-icon-plus" @click="openAdd">新建场地</el-button>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt20">
|
||||
<el-table :data="tableData" row-key="id" @sort-change="pageOrder"
|
||||
v-loading="tableLoading">
|
||||
<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 align="center" show-overflow-tooltip header-align="center" label="场地名称"
|
||||
prop="name"></el-table-column>
|
||||
<el-table-column align="center" show-overflow-tooltip header-align="center" label="排序编号"
|
||||
prop="sortNum"></el-table-column>
|
||||
<el-table-column align="center" show-overflow-tooltip header-align="center" label="场地地址"
|
||||
prop="address"></el-table-column>
|
||||
<el-table-column align="center" show-overflow-tooltip header-align="center" label="联系人"
|
||||
prop="contact_person"></el-table-column>
|
||||
<el-table-column align="center" show-overflow-tooltip header-align="center" label="联系方式"
|
||||
prop="contact_phone"></el-table-column>
|
||||
|
||||
<el-table-column align="center" :show-overflow-tooltip="true" header-align="center" label="开启状态"
|
||||
prop="state">
|
||||
<template slot-scope="{row}">
|
||||
<el-switch disabled v-model="row.state" active-color="#13ce66"
|
||||
inactive-color="#ff4949"></el-switch>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" label="操作" width="250px">
|
||||
<template slot-scope="{row}">
|
||||
<el-button type="primary" @click="openEdit(row.id)" size="mini">编辑</el-button>
|
||||
<el-button type="danger" @click="doDelete(row)" size="mini">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
|
||||
|
||||
</template>
|
||||
|
||||
<template #edit>
|
||||
<vi-title title="输入场地信息"></vi-title>
|
||||
<el-form :model="formData" ref="addForm" :rules="formRules" label-width="120px">
|
||||
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="name" label="场地名称">
|
||||
<el-input maxlength="100" placeholder="请输入场地名称" v-model="formData.name"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="address" label="场地地址">
|
||||
<el-input maxlength="100" placeholder="请输入场地地址" v-model="formData.address"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="contact_person" label="联系人">
|
||||
<el-input v-model="formData.contact_person" placeholder="请输入联系人" type="text"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="contact_phone" label="联系方式">
|
||||
<el-input v-model="formData.contact_phone" placeholder="请输入联系方式" type="text"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<!--<el-form-item prop="create_username" label="创建人">
|
||||
<el-input readonly v-model="formData.create_username" type="text"></el-input>
|
||||
</el-form-item>-->
|
||||
<el-form-item prop="openDayNum" label="开放天数段">
|
||||
<el-input placeholder="请输入开放天数段" v-model="formData.openDayNum" type="number"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="create_time" label="创建时间">
|
||||
<el-input readonly v-model="formData.create_time" type="text"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="typeId" label="场地类型">
|
||||
<el-select v-model="formData.typeId" style="width: 100%" filterable
|
||||
placeholder="请选择场地类型">
|
||||
<el-option v-for="item in activityTypeList" :label="item.meetingTypeName"
|
||||
:value="item.id"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="reserveTarget" label="面向对象">
|
||||
<el-radio-group v-model="formData.reserveTarget" size="medium">
|
||||
<el-radio-button :label="1">面向分工会</el-radio-button>
|
||||
<el-radio-button :label="2">面向个人</el-radio-button>
|
||||
<el-radio-button :label="3">面向集体</el-radio-button>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="sexLimit" label="性别限制">
|
||||
<el-radio-group v-model="formData.sexLimit" size="medium">
|
||||
<el-radio-button :label="0">不限制</el-radio-button>
|
||||
<el-radio-button :label="1">男</el-radio-button>
|
||||
<el-radio-button :label="2">女</el-radio-button>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="state" label="开启状态">
|
||||
<el-radio-group v-model="formData.state" size="medium">
|
||||
<el-radio-button :label="true">开启</el-radio-button>
|
||||
<el-radio-button :label="false">禁用</el-radio-button>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="sortNum" label="排序编号">
|
||||
<el-input v-model="formData.sortNum" placeholder="请输入排序编号" type="number"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="容纳人数" prop="maxNum">
|
||||
<el-input v-model="formData.maxNum" placeholder="请输入容纳人数" type="number"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="禁用时间">
|
||||
<el-button type="primary" @click="openSetUpTime" size="small">点击设置禁用时间</el-button>
|
||||
<span style="color: #c64120">您已设置{{ formData.notApplyTimeList ? formData.notApplyTimeList.length : 0 }}个禁用时间</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-form-item label="场地介绍">
|
||||
<text-editor v-model="formData.introduce"></text-editor>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<vi-title2 title="添加场次(温馨提醒:如果设置了预约时间单位,那么系统会在开始时间至结束时间范围内,按照设置的单位来拆分成多个时间段,如果未设置或者为0,则表示开始时间至结束时间是一个时间段)">
|
||||
<template #func>
|
||||
<el-button type="primary" @click="formData.open_hours.push({})">
|
||||
添加
|
||||
</el-button>
|
||||
</template>
|
||||
</vi-title2>
|
||||
<el-table :data="formData.open_hours" border size="mini">
|
||||
|
||||
<el-table-column prop="weekNum" label="星期" align="center" header-align="center">
|
||||
<template slot-scope="{row}">
|
||||
<el-select style="width: 100%" v-model="row.weekNum" filterable placeholder="请选择星期">
|
||||
<el-option label="周一" :value="1"></el-option>
|
||||
<el-option label="周二" :value="2"></el-option>
|
||||
<el-option label="周三" :value="3"></el-option>
|
||||
<el-option label="周四" :value="4"></el-option>
|
||||
<el-option label="周五" :value="5"></el-option>
|
||||
<el-option label="周六" :value="6"></el-option>
|
||||
<el-option label="周日" :value="0"></el-option>
|
||||
</el-select>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column prop="start_time" label="开始时间" align="center" header-align="center">
|
||||
<template slot-scope="{row}">
|
||||
<el-time-select
|
||||
style="width: 100%"
|
||||
placeholder="开始时间"
|
||||
v-model="row.start_time"
|
||||
:picker-options="{ start: '00:00',step: '00:30',end: '24:00'}">
|
||||
</el-time-select>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column prop="end_time" label="结束时间" align="center" header-align="center">
|
||||
<template slot-scope="{row}">
|
||||
<el-time-select
|
||||
style="width: 100%"
|
||||
placeholder="结束时间"
|
||||
v-model="row.end_time"
|
||||
:picker-options="{start: '00:00',step: '00:30',end: '24:00',minTime: row.start_time }">
|
||||
</el-time-select>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column prop="timeUnit" label="预约时间单位(小时)" align="center" header-align="center">
|
||||
<template slot-scope="{row}">
|
||||
<el-input-number style="width: 100%" v-model="row.timeUnit" placeholder="请输入预约时间单位" :step="0.5"></el-input-number>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="操作" align="center" header-align="center" width="100px">
|
||||
<template slot-scope="scope">
|
||||
<el-button type="danger" icon="el-icon-delete" circle
|
||||
:disabled="formData.open_hours.length==0"
|
||||
@click="formData.open_hours.splice(scope.$index, 1)"></el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
</el-table>
|
||||
<div style="float: right;margin: 20px 0">
|
||||
<el-button type="primary" :disabled="subDis" @click="operation">确 定</el-button>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
<el-dialog :close-on-click-modal="false" :visible.sync="setUpTimeDialog" title="设置时间" top="50px">
|
||||
<vi-title title="选择日期"></vi-title>
|
||||
<el-date-picker
|
||||
@change="setUpDateChange"
|
||||
placeholder="请选择一个或多个日期"
|
||||
style="width: 100%"
|
||||
type="dates"
|
||||
v-model="formData.setUpDate"
|
||||
value-format="yyyy-MM-dd">
|
||||
</el-date-picker>
|
||||
<vi-title title="设置禁用时间" class="mt20"></vi-title>
|
||||
<el-row>
|
||||
<el-time-select
|
||||
:picker-options="{
|
||||
start: '08:30',
|
||||
step: '00:05',
|
||||
end: '23:30'
|
||||
}"
|
||||
placeholder="开始时间"
|
||||
v-model="timeOneKeySet.startTime">
|
||||
</el-time-select>
|
||||
<el-time-select
|
||||
:picker-options="{
|
||||
start: '08:30',
|
||||
step: '00:05',
|
||||
end: '23:30'
|
||||
}"
|
||||
placeholder="结束时间"
|
||||
v-model="timeOneKeySet.endTime">
|
||||
</el-time-select>
|
||||
<el-button @click="oneKeySetStartEndTime" type="primary">一键设置开始/结束时间</el-button>
|
||||
</el-row>
|
||||
|
||||
<el-table :data="formData.notApplyTimeList" class="mt10" max-height="520px" size="mini" @selection-change="handleSelectionChange">
|
||||
<el-table-column
|
||||
type="selection"
|
||||
width="55">
|
||||
</el-table-column>
|
||||
<el-table-column label="日期" width="200">
|
||||
<template v-slot="{row}">
|
||||
<i class="el-icon-time"></i>
|
||||
{{moment(row.date).format('YYYY-MM-DD')}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="开始时间">
|
||||
<template v-slot="{row}">
|
||||
<el-time-select
|
||||
size="mini"
|
||||
:picker-options="pickerOptions"
|
||||
placeholder="开始时间"
|
||||
v-model="row.startTime">
|
||||
</el-time-select>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="结束时间">
|
||||
<template v-slot="{row}">
|
||||
<el-time-select
|
||||
size="mini"
|
||||
:picker-options="pickerOptions"
|
||||
placeholder="结束时间"
|
||||
v-model="row.endTime">
|
||||
</el-time-select>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="200">
|
||||
<template v-slot="{row, $index}">
|
||||
<el-button
|
||||
size="mini"
|
||||
@click="formData.notApplyTimeList.splice($index,0,{date:row.date,startTime:'',endTime:''})"
|
||||
type="primary">
|
||||
新增同天时段
|
||||
</el-button>
|
||||
<el-button size="mini" @click="removeSetUpTableRow(row,$index)" type="danger">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<el-row class="mt20" justify="end" type="flex">
|
||||
<el-button @click="setUpTimeDialog = false">取消</el-button>
|
||||
<el-button @click="doConfirmSetUpCourse" type="primary">确定</el-button>
|
||||
</el-row>
|
||||
</el-dialog>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
<!--# include("/platform/activity/includeJs/activityUtil.js"){} #-->
|
||||
const activityUtil = new typeUtil()
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
data() {
|
||||
return {
|
||||
pickerOptions: {
|
||||
start: "08:30",
|
||||
step: "00:05",
|
||||
end: "23:30"
|
||||
},
|
||||
timeOneKeySet: {
|
||||
startTime: "",
|
||||
endTime: ""
|
||||
},
|
||||
activityTypeList: [],
|
||||
tabKey: '',
|
||||
tableLoading: false,
|
||||
subDis: false,
|
||||
tableData: [],
|
||||
formData: {
|
||||
open_hours: [{}],
|
||||
sexLimit: 0,
|
||||
notApplyTimeList: [],
|
||||
reserveTarget: 2,
|
||||
openDayNum: 7,
|
||||
},
|
||||
pageForm: {
|
||||
searchName: "name",
|
||||
searchKeyword: "",
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
pageOrderName: "",
|
||||
pageOrderBy: "",
|
||||
year: ""
|
||||
},
|
||||
formRules: {
|
||||
name: [{required: true, message: '请输入场地名称', trigger: ['blur', 'change']}],
|
||||
address: [{required: true, message: '请输入场地地址', trigger: ['blur', 'change']}],
|
||||
contact_person: [{required: true, message: '请输入联系人', trigger: ['blur', 'change']}],
|
||||
contact_phone: [{required: true, message: '请输入联系方式', trigger: ['blur', 'change']}],
|
||||
state: [{required: true, message: '请选择开启状态', trigger: ['blur', 'change']}],
|
||||
typeId: [{required: true, message: '请选择场地类型', trigger: ['blur', 'change']}],
|
||||
openWeekTime: [{required: true, message: '请选择预约时间', trigger: ['blur', 'change']}],
|
||||
reserveTarget: [{required: true, message: '请选择面向对象', trigger: ['blur', 'change']}],
|
||||
maxNum: [{required: true, message: '请输入容纳人数', trigger: ['blur', 'change']}],
|
||||
openDayNum: [{required: true, message: '请输入开放天数段', trigger: ['blur', 'change']}],
|
||||
},
|
||||
|
||||
setUpTimeDialog: false,
|
||||
multipleSelection: [],
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
},
|
||||
methods: {
|
||||
handleSelectionChange(val) {
|
||||
this.multipleSelection = val
|
||||
},
|
||||
doConfirmSetUpCourse() {
|
||||
const courseTableData = this.formData.notApplyTimeList
|
||||
/*if (courseTableData.length === 0) {
|
||||
this.$message.warning("请选择禁用时间")
|
||||
return
|
||||
}*/
|
||||
if (courseTableData && courseTableData.length > 0) {
|
||||
const valid = courseTableData.every(v => v.startTime && v.endTime && (v.startTime < v.endTime))
|
||||
if (!valid) {
|
||||
this.$message.warning("时间不完整或者有误")
|
||||
return
|
||||
}
|
||||
this.setUpTimeDialog = false
|
||||
}
|
||||
},
|
||||
removeSetUpTableRow(row, index) {
|
||||
this.formData.notApplyTimeList.splice(index, 1)
|
||||
const courseDateArray = this.formData.notApplyTimeList.map(v => moment(v.date).format("YYYY-MM-DD"))
|
||||
const scdList = this.formData.setUpDate
|
||||
this.formData.setUpDate = scdList.filter(v => {
|
||||
return courseDateArray.includes(moment(v).format("YYYY-MM-DD"))
|
||||
})
|
||||
},
|
||||
oneKeySetStartEndTime() {
|
||||
if(this.multipleSelection.length === 0) {
|
||||
this.$message.warning('请选择需要一键设置的时间')
|
||||
return
|
||||
}
|
||||
const { startTime, endTime } = this.timeOneKeySet
|
||||
this.formData.notApplyTimeList.forEach(v => {
|
||||
const o = this.multipleSelection.find(o => o.date === v.date && o.startTime === v.startTime && o.endTime === v.endTime)
|
||||
if(o) {
|
||||
this.$set(v, "startTime", startTime)
|
||||
this.$set(v, "endTime", endTime)
|
||||
}
|
||||
})
|
||||
this.$forceUpdate()
|
||||
},
|
||||
setUpDateChange(val) {
|
||||
if (!val) {
|
||||
this.formData.notApplyTimeList = []
|
||||
return
|
||||
}
|
||||
if (this.formData.notApplyTimeList === undefined) {
|
||||
this.$set(this.formData, "notApplyTimeList", [])
|
||||
}
|
||||
const ctList = new Set(this.formData.notApplyTimeList.map(v => moment(v.date).format("YYYY-MM-DD")))
|
||||
val.forEach(v => {
|
||||
if (!ctList.has(v)) {
|
||||
this.formData.notApplyTimeList.push({
|
||||
date: v, time: null
|
||||
})
|
||||
}
|
||||
})
|
||||
this.formData.notApplyTimeList = this.formData.notApplyTimeList.filter(v => {
|
||||
return val.includes(moment(v.date).format("YYYY-MM-DD"))
|
||||
})
|
||||
this.formData.notApplyTimeList.sort((a, b) => {
|
||||
return Date.parse(a["date"]) - Date.parse(b["date"])
|
||||
})
|
||||
},
|
||||
openSetUpTime() {
|
||||
if(this.formData.notApplyTimeList) {
|
||||
this.$set(this.formData, 'setUpDate', this.formData.notApplyTimeList.map(o => o.date))
|
||||
}
|
||||
this.setUpTimeDialog = true
|
||||
},
|
||||
doDelete(row) {
|
||||
this.$confirm('此操作将删除【' + row.name + '】场地的所有信息!', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: (a, b) => {
|
||||
if ("confirm" === a) {
|
||||
$.post(location.href + "/doDelete", {id: row.id}, (data) => {
|
||||
if (data.code === 0) {
|
||||
this.$message.success(data.msg)
|
||||
this.pageData();
|
||||
} else {
|
||||
this.$message.error(data.msg)
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
async operation() {
|
||||
let method = this.formData.id ? "/doEdit" : "/doAdd"
|
||||
this.subDis = true
|
||||
this.$refs["addForm"].validate(async (valid) => {
|
||||
if (valid) {
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '正在提交...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: 'rgba(0, 0, 0, 0.7)'
|
||||
});
|
||||
|
||||
const {code, data, msg} = await $.post(location.href + method, {data: JSON.stringify(this.formData)})
|
||||
if (code === 0) {
|
||||
this.pageData()
|
||||
this.$message.success(msg);
|
||||
this.$refs.guava.index()
|
||||
} else {
|
||||
this.$message.error(msg);
|
||||
}
|
||||
loading.close()
|
||||
this.subDis = false
|
||||
}
|
||||
});
|
||||
},
|
||||
async findOneSite(id) {
|
||||
const {data} = await $.get("/platform/activity/site/mange/findOneSite", {id: id})
|
||||
return data
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
},
|
||||
async openEdit(id) {
|
||||
this.formData = await this.findOneSite(id)
|
||||
if(!this.formData.notApplyTimeList) {
|
||||
this.$set(this.formData, 'notApplyTimeList', [])
|
||||
}
|
||||
this.$refs.guava.edit()
|
||||
},
|
||||
openAdd() {
|
||||
this.formData = {
|
||||
state: true,
|
||||
open_hours: [{}],
|
||||
create_username: '${@shiro.getPrincipalProperty("username")}',
|
||||
create_time: moment().format('YYYY-MM-DD'),
|
||||
sexLimit: '0',
|
||||
notApplyTimeList: [],
|
||||
reserveTarget: 2,
|
||||
openDayNum: 7,
|
||||
}
|
||||
this.$refs.guava.edit()
|
||||
|
||||
if (this.$refs['addForm']) {
|
||||
this.$refs['addForm'].resetFields()
|
||||
}
|
||||
},
|
||||
doSearch() {
|
||||
this.tabKey = new Date().getTime()
|
||||
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();
|
||||
this.tableLoading = true
|
||||
$.post(location.href + "/pageData", this.pageForm, (res) => {
|
||||
const {code, data, msg} = res
|
||||
sublime.closeLoadingbar();
|
||||
this.tableLoading = false
|
||||
if (code === 0) {
|
||||
for (let i = 0; i < data.list.length; i++) {
|
||||
data.list[i].open_hours = site.reverseRankingDate(data.list[i].open_hours)
|
||||
}
|
||||
this.tableData = data.list;
|
||||
this.pageForm.totalCount = data.totalCount;
|
||||
} else {
|
||||
this.$message.error(msg);
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.pageData();
|
||||
this.activityTypeList = await activityUtil.getAllType()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,222 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<div class="btn-group tool-button">
|
||||
<el-date-picker
|
||||
v-model="pageForm.startTime" clearable value-format="yyyy-MM-dd"
|
||||
type="date"
|
||||
placeholder="请选择开始时间">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
<div class="btn-group tool-button">
|
||||
<el-date-picker
|
||||
v-model="pageForm.endTime" clearable value-format="yyyy-MM-dd"
|
||||
type="date"
|
||||
placeholder="请选择结束时间">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
<div class="btn-group tool-button">
|
||||
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword"
|
||||
@keyup.enter.native="doSearch">
|
||||
<el-select v-model="pageForm.searchName" slot="prepend" placeholder="查询类型"
|
||||
style="width: 110px;">
|
||||
<el-option label="场地名称" value="asi.name"></el-option>
|
||||
<el-option label="预约人" value="asr.reserve_person"></el-option>
|
||||
</el-select>
|
||||
</el-input>
|
||||
</div>
|
||||
<div class="btn-group tool-button">
|
||||
<el-select v-model="pageForm.siteType" placeholder="场地类型" clearable
|
||||
style="width: 200px;">
|
||||
<el-option v-for="item in activityTypeList" :label="item.text" :value="item.value"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
<div class="btn-group tool-button">
|
||||
<el-button type="primary" icon="el-icon-search" @click="doSearch"></el-button>
|
||||
</div>
|
||||
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt20">
|
||||
<table-tool :app="this" label="申请列表">
|
||||
<template #func>
|
||||
<el-button @click="exportExcel" size="small" type="primary">导出</el-button>
|
||||
</template>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" row-key="id" @sort-change="pageOrder"
|
||||
v-loading="tableLoading">
|
||||
<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 align="center" sortable show-overflow-tooltip header-align="center" label="场地名称"
|
||||
prop="site_name"></el-table-column>
|
||||
<el-table-column align="center" sortable header-align="center" label="预约人"
|
||||
prop="reserve_person"></el-table-column>
|
||||
<el-table-column align="center" sortable show-overflow-tooltip header-align="center" label="预约单位"
|
||||
prop="reserve_person_unit"></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="联系方式"
|
||||
prop="reserve_person_phone"></el-table-column>
|
||||
<el-table-column align="center" sortable show-overflow-tooltip header-align="center"
|
||||
label="预约日期"
|
||||
prop="concat_day"></el-table-column>
|
||||
<el-table-column align="center" sortable show-overflow-tooltip header-align="center"
|
||||
label="开始时间"
|
||||
prop="start_time">
|
||||
<template slot-scope="{row}">
|
||||
<span>{{row.start_time}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" sortable show-overflow-tooltip header-align="center"
|
||||
label="结束时间"
|
||||
prop="end_time">
|
||||
<template slot-scope="{row}">
|
||||
<span>{{row.end_time}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" show-overflow-tooltip header-align="center" label="反馈意见"
|
||||
prop="back_option">
|
||||
<template slot-scope="{row}">
|
||||
<span v-if="row.reserve_person_id === userid || role == true">{{row.back_option}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" show-overflow-tooltip header-align="center" label="预约事由"
|
||||
prop="reserve_cause"></el-table-column>
|
||||
<el-table-column align="center" show-overflow-tooltip="true" header-align="center" sortable
|
||||
label="预约状态" prop="state_name">
|
||||
<template slot-scope="{row}">
|
||||
<!--<span :style="'color:'+row.state_color">{{row.state_name}}</span>-->
|
||||
<span v-if="[0].includes(row.stateaudittype)"
|
||||
style="color: #e6a23c">{{row.state_name}}</span>
|
||||
<span v-if="row.stateaudittype==3" style="color: #67c23a">{{row.state_name}}</span>
|
||||
<span v-if="row.stateaudittype==1" style="color: #f56c6c">{{row.state_name}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="操作" width="250px">
|
||||
<template slot-scope="{row}">
|
||||
<el-button @click="openView(row.id)" size="mini">查看</el-button>
|
||||
|
||||
<el-button type="danger" @click="doDelete(row.id)"
|
||||
size="mini">删除
|
||||
</el-button>
|
||||
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
</el-table>
|
||||
<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-card>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<reserve-info ref="reserve"></reserve-info>
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
<!--# include("/platform/activity/includeJs/activityUtil.js"){} #-->
|
||||
const activityUtil = new typeUtil()
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
userid: "${@shiro.getPrincipalProperty('id')}",
|
||||
role: "${@shiro.hasRole('sysadmin')||@shiro.hasRole('xghng')||@shiro.hasRole('A06')}",
|
||||
activityTypeList: [],
|
||||
reserveViewData: {},
|
||||
tableLoading: false,
|
||||
tableData: [],
|
||||
pageForm: {
|
||||
searchName: "asi.name",
|
||||
searchKeyword: "",
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
pageOrderName: "",
|
||||
pageOrderBy: "",
|
||||
isAudit: false,
|
||||
siteType: '',
|
||||
startTime: new Date().getFullYear() + '-01-01',
|
||||
endTime: new Date().getFullYear() + '-12-31',
|
||||
},
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'reserve-info': httpVueLoader('/components/activity/site/ReserveInfo.vue'),
|
||||
},
|
||||
methods: {
|
||||
exportExcel() {
|
||||
window.location.href = "/platform/activity/site/record/exportExcel" +
|
||||
"?startTime=" + this.pageForm.startTime + "" +
|
||||
"&endTime=" + this.pageForm.endTime + "" +
|
||||
"&searchName=" + this.pageForm.searchName + "" +
|
||||
"&searchKeyword=" + this.pageForm.searchKeyword + "" +
|
||||
"&siteType=" + this.pageForm.siteType
|
||||
;
|
||||
},
|
||||
openView(id) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.reserve.openView(id)
|
||||
},
|
||||
pageData() {
|
||||
sublime.showLoadingbar();
|
||||
this.tableLoading = true
|
||||
let form = clone(this.pageForm)
|
||||
if (form.isAudit === null) {
|
||||
delete form.isAudit
|
||||
}
|
||||
$.post(location.href + "/pageData", form, (res) => {
|
||||
const {code, data, msg} = res
|
||||
sublime.closeLoadingbar();
|
||||
this.tableLoading = false
|
||||
if (code == 0) {
|
||||
this.tableData = data.list;
|
||||
this.pageForm.totalCount = data.totalCount;
|
||||
} else {
|
||||
this.$message.error(msg);
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
async doDelete(id) {
|
||||
const confirm = await this.$confirm("您确定要删除此预约吗?", '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm !== 'confirm') return
|
||||
const resp = await $.post('/platform/activity/site/reserve/doDelete', {id, op: 1})
|
||||
if (resp.code === 0) {
|
||||
this.notifySuccess(resp.msg)
|
||||
this.doSearch()
|
||||
} else {
|
||||
this.notifyWarning(resp.msg)
|
||||
}
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.activityTypeList = await activityUtil.getAllType()
|
||||
this.pageData();
|
||||
},
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,785 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style xmlns="">
|
||||
.text {
|
||||
font-size: 14px;
|
||||
}
|
||||
.e-item {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.el-divider--horizontal {
|
||||
margin: 5px 0;
|
||||
}
|
||||
.v-tab .el-card__header {
|
||||
padding: 10px 15px;
|
||||
font-weight: bold;
|
||||
}
|
||||
.reserve_btn {
|
||||
font-size: 16px;
|
||||
float: right;
|
||||
padding: 3px 0
|
||||
}
|
||||
.is-selected {
|
||||
color: #1989FA;
|
||||
}
|
||||
.div-Calendar {
|
||||
box-sizing: border-box;
|
||||
height: 100%;
|
||||
}
|
||||
.el-carousel__button {
|
||||
background-color: #c0c4cc;
|
||||
}
|
||||
.el-carousel__container {
|
||||
height: 280px;
|
||||
}
|
||||
.el-button--mini.is-circle {
|
||||
padding: 5px;
|
||||
font-size: 1px;
|
||||
}
|
||||
.slider {
|
||||
position: relative;
|
||||
}
|
||||
.cover {
|
||||
position: absolute;
|
||||
height: 6px;
|
||||
background-color: #409EFF;
|
||||
margin: 16px 0;
|
||||
z-index: 999;
|
||||
}
|
||||
.cover2 {
|
||||
position: absolute;
|
||||
height: 6px;
|
||||
background-color: #E4E7ED;
|
||||
margin: 16px 0;
|
||||
z-index: 1000;
|
||||
}
|
||||
.el-slider__marks-text {
|
||||
margin-top: 10px !important;
|
||||
}
|
||||
.el-slider__stop {
|
||||
z-index: 1001;
|
||||
}
|
||||
.el-slider__bar {
|
||||
z-index: 1000;
|
||||
}
|
||||
.el-slider__marks-text {
|
||||
min-width: 40px !important;
|
||||
}
|
||||
.el-slider__button-wrapper {
|
||||
display: none !important;
|
||||
}
|
||||
.el-calendar-day:has(.not-allow-day) {
|
||||
background-color: #F5F5F5;
|
||||
}
|
||||
.div-Calendar p {
|
||||
margin: 0;
|
||||
}
|
||||
</style>
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<div class="btn-group tool-button">
|
||||
<el-select v-model="pageForm.siteType" placeholder="场地类型" clearable
|
||||
style="width: 200px;">
|
||||
<el-option v-for="item in activityTypeList" :label="item.text" :value="item.value"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
|
||||
<div class="btn-group tool-button">
|
||||
<el-date-picker
|
||||
v-model="pageForm.time" placeholder="选择月"
|
||||
type="month" value-format="yyyy-MM">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
<div class="btn-group tool-button">
|
||||
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword"
|
||||
@keyup.enter.native="doSearch">
|
||||
<el-select v-model="pageForm.searchName" slot="prepend" placeholder="查询类型"
|
||||
style="width: 105px;">
|
||||
<el-option label="场地名称" value="asi.name"></el-option>
|
||||
<el-option label="预约人" value="asr.reserve_person"></el-option>
|
||||
</el-select>
|
||||
</el-input>
|
||||
</div>
|
||||
<div class="btn-group tool-button">
|
||||
<el-button type="primary" icon="el-icon-search" @click="doSearch"></el-button>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<el-row class="el-table-container">
|
||||
|
||||
<el-carousel :interval="5000" arrow="always" style="margin: 10px auto;">
|
||||
<el-carousel-item v-for="index in Math.ceil(siteList.length/4)" :key="index">
|
||||
<el-row :gutter="20">
|
||||
<el-col v-for="item in siteList.slice((index-1)*4,index*4)" :span="6">
|
||||
<el-card class="box-card" style="border-radius: 10px">
|
||||
<div slot="header" class="clearfix" style="font-size: 16px;padding: 5px 0">
|
||||
<span>{{item.name}}</span>
|
||||
<el-button @click.stop="onReserve(item)" class="reserve_btn" type="text">预约</el-button>
|
||||
</div>
|
||||
<div @click="siteChange(item.id)">
|
||||
<div class="text e-item">
|
||||
<span style="color: gray">场地地址:</span>
|
||||
{{item.address}}
|
||||
</div>
|
||||
<div class="text e-item">
|
||||
<span style="color: gray">联 系 人:</span>
|
||||
{{(item.unitname ? item.unitname : '') + ' ' + item.contact_person}}
|
||||
</div>
|
||||
<div class="text e-item">
|
||||
<span style="color: gray">联系方式:</span>
|
||||
{{item.contact_phone}}
|
||||
</div>
|
||||
<div class="text e-item">
|
||||
<span style="color: gray">面向对象:</span>
|
||||
<span v-if="item.reservetarget == 1">分工会</span>
|
||||
<span v-if="item.reservetarget == 2">个人</span>
|
||||
<span v-if="item.reservetarget == 3">集体</span>
|
||||
</div>
|
||||
<div class="text e-item">
|
||||
<span style="color: gray">场地介绍:</span>
|
||||
<el-link @click="viewIntroduce(item)" type="primary" style="position: relative; top: -2px">点击查看</el-link>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-carousel-item>
|
||||
</el-carousel>
|
||||
|
||||
<el-row class="v-tab">
|
||||
<el-card class="box-card" shadow="never">
|
||||
<vi-title2 title="预约列表">
|
||||
<template #func>
|
||||
<el-button style="float: right" type="primary" @click="siteChange()" size="mini">全部</el-button>
|
||||
</template>
|
||||
</vi-title2>
|
||||
|
||||
<el-table :data="tableData" row-key="id"
|
||||
v-loading="tableLoading">
|
||||
<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 align="center" sortable show-overflow-tooltip header-align="center"
|
||||
label="场地名称"
|
||||
prop="site_name"></el-table-column>
|
||||
<el-table-column align="center" sortable header-align="center" label="预约人"
|
||||
prop="reserve_person"></el-table-column>
|
||||
<el-table-column align="center" sortable show-overflow-tooltip header-align="center"
|
||||
label="所属单位"
|
||||
prop="reserve_person_unit"></el-table-column>
|
||||
<el-table-column align="center" sortable show-overflow-tooltip header-align="center"
|
||||
label="预约日期"
|
||||
prop="concat_day"></el-table-column>
|
||||
<el-table-column align="center" sortable show-overflow-tooltip header-align="center"
|
||||
label="开始时间"
|
||||
prop="start_time">
|
||||
<template slot-scope="{row}">
|
||||
<span>{{row.start_time}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" sortable show-overflow-tooltip header-align="center"
|
||||
label="结束时间"
|
||||
prop="end_time">
|
||||
<template slot-scope="{row}">
|
||||
<span>{{row.end_time}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="联系方式"
|
||||
prop="reserve_person_phone"></el-table-column>
|
||||
<el-table-column align="center" show-overflow-tooltip header-align="center" label="预约事由"
|
||||
prop="reserve_cause"></el-table-column>
|
||||
<el-table-column align="center" show-overflow-tooltip="true" header-align="center" sortable
|
||||
label="预约状态" prop="state_name">
|
||||
<template slot-scope="{row}">
|
||||
<!--<span :style="'color:'+row.state_color">{{row.state_name}}</span>-->
|
||||
<span v-if="[0].includes(row.stateaudittype)" style="color: #e6a23c">{{row.state_name}}</span>
|
||||
<span v-if="row.stateaudittype==3" style="color: #67c23a">{{row.state_name}}</span>
|
||||
<span v-if="row.stateaudittype==1" style="color: #f56c6c">{{row.state_name}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="操作" fixed="right"
|
||||
width="200px">
|
||||
<template scope="scope">
|
||||
<el-dropdown @command="dropdownCommand">
|
||||
<el-button size="mini">
|
||||
<i class="ti-settings"></i>
|
||||
<span class="ti-angle-down"></span>
|
||||
</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item :command="{type:'view',data:scope.row}">
|
||||
查看
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item
|
||||
v-if="scope.row.reserve_person_id === '${@shiro.getPrincipalProperty('id')}'"
|
||||
:command="{type:'backOption',data:scope.row}">
|
||||
反馈意见
|
||||
</el-dropdown-item>
|
||||
<!--# if(@shiro.hasRole('sysadmin')){ #-->
|
||||
<el-dropdown-item
|
||||
:command="{type:'delete',data:scope.row}">
|
||||
删除
|
||||
</el-dropdown-item>
|
||||
<!--# } #-->
|
||||
<el-dropdown-item
|
||||
v-if="scope.row.reserve_person_id === '${@shiro.getPrincipalProperty('id')}'"
|
||||
:command="{type:'cancel',data:scope.row}">
|
||||
撤销预约
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<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-card>
|
||||
</el-row>
|
||||
|
||||
</el-row>
|
||||
</template>
|
||||
|
||||
<template #edit>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12" :offset="6" style="text-align: center">
|
||||
<div style="font-size: large;color: #303133">
|
||||
您正在预约【<span style="color: #409EFF">{{infoViewData.name}}</span>】活动场地
|
||||
</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-calendar v-model="reserve_time">
|
||||
<template slot="dateCell" slot-scope="{date, data}">
|
||||
<div :class="getDayClass(data)" @click="pushDay(data)">
|
||||
<p :style="dayArray.includes(data.day) ? 'color: #246fb4' : ''">
|
||||
{{ data.day.split('-').slice(1).join('-') }} {{ dayArray.includes(data.day) ? '✔️' : ''}}
|
||||
</p>
|
||||
<div v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('xghng')||@shiro.hasRole('A06')}"
|
||||
v-for="item in reserveViewData">
|
||||
<div v-if="data.day.toString() == item.reserve_day"
|
||||
:style="{backgroundColor:([0].includes(item.stateaudittype)?'#FAECD9':item.reserve_state==30?'#E0F4D9':'#FEE2E2')}">
|
||||
<el-row style="line-height: 20px">
|
||||
<el-col :span="4" style="font-size: 10px">
|
||||
<span v-if="[0].includes(item.stateaudittype)">待审</span>
|
||||
<span v-if="item.stateaudittype==3">通过</span>
|
||||
<span v-if="item.stateaudittype==1">拒绝</span>
|
||||
</el-col>
|
||||
<el-col :span="20" style="font-size: 10px">
|
||||
<span>
|
||||
<b>{{item.reserve_person}}</b>:{{item.start_time}}-{{item.end_time}}
|
||||
</span>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</el-calendar>
|
||||
<div style="text-align: right">
|
||||
<el-button @click="openAdd" type="primary">下一步</el-button>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<reserve-info ref="reserve"></reserve-info>
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
<el-dialog title="新增场地预约" class="dia" :close-on-click-modal="false" @close="diaClose" top="2%"
|
||||
:visible.sync="addDialogVisible" custom-class="ViewDialogClass" width="50%">
|
||||
|
||||
<vi-title :title="'您已选择的预约日期为:'+ dayArray.toString()" style="margin-left: 48px"></vi-title>
|
||||
|
||||
<el-form :model="formData" ref="addForm" :rules="formRules" label-position="right"
|
||||
label-width="100px">
|
||||
<el-form-item label="预约人" prop="reserve_person">
|
||||
<el-select disabled allow-create style="width: 100%" v-model="formData.reserve_person" filterable remote
|
||||
value-key="id" reserve-keyword placeholder="请输入关键词" @change="userChange"
|
||||
:remote-method="remoteMethod" :loading="loading">
|
||||
<el-option v-for="item in restaurants" :key="item.id" :label="item.username"
|
||||
:value="item"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="性别" prop="sex">
|
||||
<el-input readonly v-model="formData.sex" maxlength="100"
|
||||
placeholder="请输入性别"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="工号" prop="loginname">
|
||||
<el-input readonly v-model="formData.loginname" maxlength="100"
|
||||
placeholder="请输入工号"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="所属单位" prop="reserve_person_unit">
|
||||
<el-input readonly v-model="formData.reserve_person_unit" maxlength="100"
|
||||
placeholder="请输入所属单位"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="联系电话" prop="reserve_person_phone">
|
||||
<el-input maxlength="11" placeholder="请输入联系电话"
|
||||
v-model="formData.reserve_person_phone"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="预约时间" prop="time">
|
||||
<el-select v-model="formData.time" style="width: 100%" filterable @change="timeChange"
|
||||
placeholder="请选择预约时间">
|
||||
<el-option v-for="item in allowTimeList"
|
||||
:disabled="item.disabled === true"
|
||||
:value="item.start_time + '-' + item.end_time">
|
||||
<template #default>
|
||||
<span v-if="item.disabled === true">
|
||||
{{ item.start_time + ' - ' + item.end_time + '(' + item.tooltip + ')' }}
|
||||
</span>
|
||||
<span v-else>{{ item.start_time + ' - ' + item.end_time }}</span>
|
||||
</template>
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="预约人数" prop="joinCount">
|
||||
<el-input-number
|
||||
:disabled="infoViewData.reservetarget === 1 || infoViewData.reservetarget === 3"
|
||||
v-model="formData.joinCount"
|
||||
:min="1" :max="9999"
|
||||
label="请输入预约人数"
|
||||
style="width: 100%"></el-input-number>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="预约事由" prop="reserve_cause">
|
||||
<el-input maxlength="1000" placeholder="请输入预约事由" autosize v-model="formData.reserve_cause"
|
||||
type="textarea" :autosize="{ minRows: 4, maxRows: 6}"></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="closeAdd">取 消</el-button>
|
||||
<el-button type="primary" :disabled="subDis" @click="doAdd">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog :visible.sync="drawer" title="场地介绍" width="40%" top="3%">
|
||||
<div v-html="viewData.introduce"></div>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="drawer = false">确定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
<!--# include("/platform/activity/includeJs/activityUtil.js"){} #-->
|
||||
const activityUtil = new typeUtil()
|
||||
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
data() {
|
||||
return {
|
||||
activityTypeList: [],
|
||||
drawer: false,
|
||||
siteList: [],
|
||||
restaurants: [],
|
||||
reserve_time: '',
|
||||
infoViewData: {},
|
||||
reserveViewData: {},
|
||||
tableLoading: false,
|
||||
addDialogVisible: false,
|
||||
subDis: false,
|
||||
loading: false,
|
||||
tableData: [],
|
||||
formData: {
|
||||
open_hours: [{}],
|
||||
start_time: '',
|
||||
end_time: '',
|
||||
reserve_person_phone: '',
|
||||
reserve_cause: '',
|
||||
time: '',
|
||||
sex: "${@shiro.getPrincipalProperty('sex')}",
|
||||
loginname: "${@shiro.getPrincipalProperty('loginname')}"
|
||||
},
|
||||
pageForm: {
|
||||
searchName: "asr.reserve_person",
|
||||
searchKeyword: "",
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
pageOrderName: "",
|
||||
pageOrderBy: "",
|
||||
time: ''
|
||||
},
|
||||
userid: '',
|
||||
formRules: {
|
||||
reserve_person: [{required: true, message: '请填写预约人', trigger: ['blur', 'change']}],
|
||||
reserve_person_unit: [{required: true, message: '请填写单位', trigger: ['blur', 'change']}],
|
||||
reserve_person_phone: [{required: true, message: '请填写联系电话', trigger: ['blur', 'change']}],
|
||||
start_time: [{required: true, message: '请选择预约时间', trigger: ['blur', 'change']}],
|
||||
time: [{required: true, message: '请选择预约时间', trigger: ['blur', 'change']}],
|
||||
joinCount: [{required: true, message: '请输入预约人数', trigger: ['blur', 'change']}],
|
||||
/*reserve_cause: [{required: true, message: '请选择预约事由', trigger: ['blur', 'change']}],*/
|
||||
},
|
||||
dayArray: [],
|
||||
allowDayList: [],
|
||||
allowTimeList: [],
|
||||
|
||||
viewData: {},
|
||||
reverseData: {},
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'reserve-info': httpVueLoader('/components/activity/site/ReserveInfo.vue?v=1.0.0'),
|
||||
},
|
||||
methods: {
|
||||
viewIntroduce(item) {
|
||||
this.viewData = item
|
||||
this.drawer = true
|
||||
},
|
||||
diaClose() {
|
||||
this.formData.time = ''
|
||||
this.formData.start_time = ''
|
||||
this.formData.end_time = ''
|
||||
},
|
||||
timeChange(o) {
|
||||
this.formData.start_time = o.split('-')[0]
|
||||
this.formData.end_time = o.split('-')[1]
|
||||
},
|
||||
dropdownCommand(command) {
|
||||
const {type, data} = command
|
||||
if (type === 'view') {
|
||||
this.userid = data.reserve_person_id;
|
||||
this.openView(data)
|
||||
} else if (type === 'delete') {
|
||||
this.doDelete(data.id, 1)
|
||||
} else if (type === 'cancel') {
|
||||
this.doDelete(data.id, 2)
|
||||
} else if (type === 'backOption') {
|
||||
this.backOption(data)
|
||||
}
|
||||
},
|
||||
backOption(row) {
|
||||
this.$prompt('请填写反馈意见', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
inputValidator: (value) => {
|
||||
if (value === null) {
|
||||
return '反馈意见不能为空'
|
||||
}
|
||||
}
|
||||
}).then(async ({value}) => {
|
||||
const res = await $.post('/mobile/activity/site/info/backOption', {
|
||||
id: row.id,
|
||||
option: value
|
||||
})
|
||||
if (res.code === 0) {
|
||||
await this.doSearch()
|
||||
this.$message.success(res.msg)
|
||||
} else {
|
||||
this.$message.warning(res.msg)
|
||||
}
|
||||
}).catch(() => {
|
||||
});
|
||||
},
|
||||
async siteChange(id) {
|
||||
this.pageForm.siteId = id
|
||||
this.pageData()
|
||||
},
|
||||
userChange(data) {
|
||||
this.$set(this.formData, "reserve_person", data.username ? data.username : data)
|
||||
this.$set(this.formData, "reserve_person_unit", data.unit_name)
|
||||
this.$set(this.formData, "reserve_person_phone", data.mobile ? data.mobile : '')
|
||||
},
|
||||
remoteMethod(keywords) {
|
||||
$.post(location.href + "/findUser", {keywords: keywords}, (res) => {
|
||||
const {code, data, msg} = res
|
||||
if (code === 0) {
|
||||
this.restaurants = data;
|
||||
} else {
|
||||
this.restaurants = [];
|
||||
this.$message.error(msg);
|
||||
}
|
||||
this.loading = false;
|
||||
})
|
||||
},
|
||||
closeAdd() {
|
||||
this.addDialogVisible = false
|
||||
this.formData.end_time = ''
|
||||
},
|
||||
onReserve(data) {
|
||||
if(data.reservetarget === 1 && "${@shiro.hasAnyRoles('gh01', 'H04')}" === 'false' && "${@shiro.hasRole('sysadmin')}" === 'false') {
|
||||
this.$message.warning('该场地只能分工会预约')
|
||||
return
|
||||
}
|
||||
this.reverseData = data
|
||||
this.dayArray = []
|
||||
this.getAllowTime()
|
||||
if (data.sexlimit === 1 || data.sexlimit === 2) {
|
||||
const sex = data.sexlimit === 1 ? '男' : '女'
|
||||
if ("${@shiro.getPrincipalProperty('sex')}" === sex) {
|
||||
this.openReserve(data)
|
||||
} else {
|
||||
this.$message.warning('抱歉,该场地仅限' + sex + '性会员预约')
|
||||
}
|
||||
} else {
|
||||
this.openReserve(data)
|
||||
}
|
||||
},
|
||||
getDayClass(data) {
|
||||
const d = new Date(data.day).getDay()
|
||||
let classStr = 'div-Calendar'
|
||||
if(this.allowDayList.length > 0 && !this.allowDayList.includes(data.day)) {
|
||||
classStr += ' not-allow-day';
|
||||
}
|
||||
if(this.infoViewData.openweektime) {
|
||||
const openWeedTime = JSON.parse(this.infoViewData.openweektime)
|
||||
if(!openWeedTime.includes(d)) {
|
||||
classStr += ' not-allow-day';
|
||||
}
|
||||
}
|
||||
if(this.infoViewData.notapplytimelist) {
|
||||
const notApplyTimeList = JSON.parse(this.infoViewData.notapplytimelist)
|
||||
if(notApplyTimeList.includes(data.day)) {
|
||||
classStr += ' not-allow-day';
|
||||
}
|
||||
}
|
||||
if(moment(data.day).isBefore(moment().startOf('day'))) {
|
||||
classStr += ' not-allow-day';
|
||||
}
|
||||
return classStr
|
||||
},
|
||||
async pushDay(data) {
|
||||
this.$nextTick(async () => {
|
||||
await this.getAllowTime(moment(data.day).year(), moment(data.day).month() + 1)
|
||||
})
|
||||
if (this.allowDayList.length > 0 && !this.allowDayList.includes(data.day)) {
|
||||
this.$message.warning(data.day + "不能预约")
|
||||
return
|
||||
}
|
||||
if (this.infoViewData.notapplytimelist) {
|
||||
const notApplyTimeList = JSON.parse(this.infoViewData.notapplytimelist)
|
||||
if (notApplyTimeList.includes(data.day)) {
|
||||
this.$message.warning(data.day + "不能预约")
|
||||
return
|
||||
}
|
||||
}
|
||||
if (data.day < moment(new Date()).format('YYYY-MM-DD')) {
|
||||
this.$message.warning('你选择的日期已过')
|
||||
return
|
||||
}
|
||||
if (this.dayArray.includes(data.day)) {
|
||||
this.dayArray.splice(this.dayArray.indexOf(data.day), 1)
|
||||
} else {
|
||||
this.dayArray = []
|
||||
this.dayArray.push(data.day)
|
||||
this.dayArray.sort()
|
||||
}
|
||||
},
|
||||
async openAdd() {
|
||||
//查询用户点击的这一天已经被预约的时间段
|
||||
if (this.dayArray && this.dayArray.length === 0) {
|
||||
this.$message.warning('请选择预约日期')
|
||||
return
|
||||
}
|
||||
|
||||
this.$set(this.formData, "reserve_person", '${@shiro.getPrincipalProperty("username")}')
|
||||
this.$set(this.formData, "reserve_person_unit", '${@shiro.getPrincipalProperty("unit").getName()}')
|
||||
this.$set(this.formData, "reserve_person_phone", '${@shiro.getPrincipalProperty("mobile")}')
|
||||
|
||||
if (this.$refs['addForm']) {
|
||||
this.$refs['addForm'].resetFields()
|
||||
}
|
||||
|
||||
if(this.infoViewData.reservetarget === 1 || this.infoViewData.reservetarget === 3) {
|
||||
this.$set(this.formData, "joinCount", this.infoViewData.maxnum)
|
||||
} else {
|
||||
this.$set(this.formData, "joinCount", 1)
|
||||
}
|
||||
|
||||
this.allowTimeList = await this.getTimesByDay()
|
||||
this.addDialogVisible = true
|
||||
},
|
||||
async doDelete(id, op) {
|
||||
if (op === 2) {
|
||||
const res = await $.post(location.href + "/isCanRollBack", {id: id});
|
||||
if (res === true) {
|
||||
this.$message.warning('此预约状态下不能进行撤回操作')
|
||||
return
|
||||
}
|
||||
}
|
||||
let text = op === 1 ? '删除' : '撤销'
|
||||
this.$confirm("您确定要" + text + "此预约吗?", '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: (a, b) => {
|
||||
if ("confirm" === a) {
|
||||
$.post(location.href + "/doDelete", {id, op}, (data) => {
|
||||
if (data.code === 0) {
|
||||
this.$message.success(data.msg)
|
||||
this.pageData();
|
||||
} else {
|
||||
this.$message.warning(data.msg)
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
async doAdd() {
|
||||
if (!this.formData.time) {
|
||||
this.$message.warning('未选择预约时间')
|
||||
return
|
||||
}
|
||||
const s = this.formData.time.split('-')[0]
|
||||
const e = this.formData.time.split('-')[1]
|
||||
if (moment().unix() >= moment(this.dayArray[0] + ' ' + e + ':00').unix()) {
|
||||
this.$message.warning('您预约的时间段已过')
|
||||
return
|
||||
}
|
||||
this.$refs["addForm"].validate(async (valid) => {
|
||||
if (valid) {
|
||||
this.subDis = true
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '正在提交...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: 'rgba(0, 0, 0, 0.7)'
|
||||
});
|
||||
const {code, msg} = await $.post(location.href + "/doAdd", {
|
||||
data: JSON.stringify(this.formData),
|
||||
days: JSON.stringify(this.dayArray)
|
||||
})
|
||||
if (code === 0) {
|
||||
this.addDialogVisible = false
|
||||
this.$message.success(msg);
|
||||
this.pageData()
|
||||
this.$refs.guava.index()
|
||||
} else {
|
||||
this.$message.warning(msg)
|
||||
}
|
||||
loading.close()
|
||||
this.subDis = false
|
||||
}
|
||||
});
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
const role = "${@shiro.hasRole('sysadmin')||@shiro.hasRole('xghng')||@shiro.hasRole('A06')}"
|
||||
this.$refs.reserve.role = role
|
||||
const backOptionShow = "${@shiro.getPrincipalProperty('id')}" === this.userid
|
||||
this.$refs.reserve.backOptionShow = (role || backOptionShow)
|
||||
this.$refs.reserve.openView(row.id)
|
||||
},
|
||||
async openReserve(data) {
|
||||
data.open_hours = site.reverseRankingDate(data.open_hours)
|
||||
this.reserveViewData = await this.findReserveInfo(data.id)
|
||||
/*this.reserveViewData.forEach(item => {
|
||||
item.index = 0
|
||||
})*/
|
||||
this.formData.site_id = data.id
|
||||
this.infoViewData = data
|
||||
this.$refs.guava.edit()
|
||||
},
|
||||
async doSearch() {
|
||||
this.pageForm.pageNumber = 1
|
||||
this.pageData()
|
||||
this.siteList = await this.findAllOpenSite()
|
||||
},
|
||||
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();
|
||||
this.tableLoading = true
|
||||
$.post(location.href + "/pageData", this.pageForm, (res) => {
|
||||
const {code, data, msg} = res
|
||||
sublime.closeLoadingbar();
|
||||
this.tableLoading = false
|
||||
if (code === 0) {
|
||||
this.tableData = data.list;
|
||||
this.pageForm.totalCount = data.totalCount;
|
||||
} else {
|
||||
this.$message.error(msg);
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
async findReserveInfo(siteId) {
|
||||
const {data} = await $.get("/platform/activity/site/reserve/findReserveInfo", {siteId})
|
||||
return data;
|
||||
},
|
||||
async findAllOpenSite(siteId) {
|
||||
const {data} = await $.get("/platform/activity/site/reserve/findAllOpenSite", {
|
||||
time: this.pageForm.time,
|
||||
siteId: siteId,
|
||||
siteType: this.pageForm.siteType,
|
||||
})
|
||||
return data
|
||||
},
|
||||
async getAllowTime(year = null, month = null) {
|
||||
const titleText = $('.el-calendar__title').text().trim().replaceAll(' ', '')
|
||||
const m = moment(titleText, "YYYY年M月")
|
||||
const { data } = await $.get("/platform/activity/site/reserve/getAllowTime", {
|
||||
siteId: this.reverseData.id,
|
||||
year: year != null ? year : m.year(),
|
||||
month: month != null ? month : m.month() + 1,
|
||||
})
|
||||
this.allowDayList = data
|
||||
},
|
||||
async getTimesByDay() {
|
||||
const { data } = await $.get("/platform/activity/site/reserve/getTimesByDay", {
|
||||
siteId: this.reverseData.id,
|
||||
day: moment(this.reserve_time).format('YYYY-MM-DD'),
|
||||
})
|
||||
return data
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.activityTypeList = await activityUtil.getAllType()
|
||||
this.siteList = await this.findAllOpenSite()
|
||||
await this.getAllowTime()
|
||||
this.pageData()
|
||||
this.$nextTick(() => {
|
||||
// 点击前一个月
|
||||
let prevBtn = document.querySelector(
|
||||
".el-calendar__button-group .el-button-group>button:nth-child(1)"
|
||||
);
|
||||
prevBtn.addEventListener("click", e => {
|
||||
this.getAllowTime()
|
||||
})
|
||||
//点击下一个月
|
||||
let nextBtn = document.querySelector(
|
||||
".el-calendar__button-group .el-button-group>button:nth-child(3)"
|
||||
);
|
||||
nextBtn.addEventListener("click", () => {
|
||||
this.getAllowTime()
|
||||
});
|
||||
//点击今天
|
||||
let todayBtn = document.querySelector(
|
||||
".el-calendar__button-group .el-button-group>button:nth-child(2)"
|
||||
);
|
||||
todayBtn.addEventListener("click", () => {
|
||||
this.getAllowTime()
|
||||
});
|
||||
})
|
||||
},
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,357 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<div class="btn-group tool-button">
|
||||
<el-date-picker
|
||||
v-model="pageForm.month" clearable value-format="yyyy-MM"
|
||||
type="month"
|
||||
placeholder="选择月">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
<div class="btn-group tool-button">
|
||||
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword"
|
||||
@keyup.enter.native="doSearch">
|
||||
<el-select v-model="pageForm.searchName" slot="prepend" placeholder="查询类型"
|
||||
style="width: 110px;">
|
||||
<el-option label="场地名称" value="asi.name"></el-option>
|
||||
<el-option label="预约人" value="asr.reserve_person"></el-option>
|
||||
</el-select>
|
||||
</el-input>
|
||||
</div>
|
||||
<div class="btn-group tool-button">
|
||||
<el-select v-model="pageForm.siteType" placeholder="场地类型" clearable
|
||||
style="width: 200px;">
|
||||
<el-option v-for="item in activityTypeList" :label="item.text" :value="item.value"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
<div class="btn-group tool-button">
|
||||
<el-button type="primary" icon="el-icon-search" @click="doSearch"></el-button>
|
||||
</div>
|
||||
|
||||
<div class="pull-right offscreen-right mt5">
|
||||
<el-radio-group v-model="pageForm.isAudit" @change="doSearch">
|
||||
<el-radio-button :label="null">全部</el-radio-button>
|
||||
<el-radio-button :label="true">已审核</el-radio-button>
|
||||
<el-radio-button :label="false">未审核</el-radio-button>
|
||||
</el-radio-group>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt20">
|
||||
<div style="text-align: right" v-if="pageForm.isAudit === false">
|
||||
<el-button @click="doReview('many', false)" type="danger" size="mini">一键驳回</el-button>
|
||||
<el-button @click="doReview('many', true)" type="primary" size="mini">一键通过</el-button>
|
||||
</div>
|
||||
<el-table :data="tableData" row-key="id" @sort-change="pageOrder"
|
||||
@selection-change="handleSelectionChange"
|
||||
v-loading="tableLoading">
|
||||
<el-table-column v-if="pageForm.isAudit === false" type="selection" width="55"
|
||||
:reserve-selection="true"></el-table-column>
|
||||
<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 align="center" sortable show-overflow-tooltip header-align="center" label="场地名称"
|
||||
prop="site_name"></el-table-column>
|
||||
<el-table-column align="center" sortable header-align="center" label="预约人"
|
||||
prop="reserve_person"></el-table-column>
|
||||
<el-table-column align="center" sortable show-overflow-tooltip header-align="center" label="所属单位"
|
||||
prop="reserve_person_unit"></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="联系方式"
|
||||
prop="reserve_person_phone"></el-table-column>
|
||||
<el-table-column align="center" sortable show-overflow-tooltip header-align="center"
|
||||
label="预约天数"
|
||||
prop="days"></el-table-column>
|
||||
<el-table-column align="center" sortable show-overflow-tooltip header-align="center"
|
||||
label="预约日期"
|
||||
prop="concat_day"></el-table-column>
|
||||
<el-table-column align="center" sortable show-overflow-tooltip header-align="center"
|
||||
label="开始时间"
|
||||
prop="start_time">
|
||||
<template slot-scope="{row}">
|
||||
<span>{{row.start_time}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" sortable show-overflow-tooltip header-align="center"
|
||||
label="结束时间"
|
||||
prop="end_time">
|
||||
<template slot-scope="{row}">
|
||||
<span>{{row.end_time}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" show-overflow-tooltip header-align="center" label="预约事由"
|
||||
prop="reserve_cause"></el-table-column>
|
||||
<el-table-column align="center" show-overflow-tooltip="true" header-align="center"
|
||||
label="预约状态" prop="state_name">
|
||||
<template slot-scope="{row}">
|
||||
<!--<span :style="'color:'+row.state_color">{{row.state_name}}</span>-->
|
||||
<span v-if="[0].includes(row.stateaudittype)"
|
||||
style="color: #e6a23c">{{row.state_name}}</span>
|
||||
<span v-if="row.stateaudittype==3" style="color: #67c23a">{{row.state_name}}</span>
|
||||
<span v-if="row.stateaudittype==1" style="color: #f56c6c">{{row.state_name}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="操作" width="250px">
|
||||
<template slot-scope="{row}">
|
||||
<el-button @click="userid = row.reserve_person_id; openView(row.id)" size="mini">查看
|
||||
</el-button>
|
||||
|
||||
<el-button v-if="pageForm.isAudit === false" type="primary" @click="openReview2(row)"
|
||||
size="mini">审核
|
||||
</el-button>
|
||||
|
||||
<!--# if(@shiro.hasRole('sysadmin')||@shiro.hasRole('xgh02')){ #-->
|
||||
<!--<el-button v-if="pageForm.isAudit === false" type="primary" @click="openReview(row)"
|
||||
size="mini">
|
||||
批示
|
||||
</el-button>-->
|
||||
<!--# } #-->
|
||||
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
</el-table>
|
||||
<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-card>
|
||||
|
||||
|
||||
|
||||
</template>
|
||||
|
||||
<template #edit style="padding: 0 10%">
|
||||
<reserve-info v-if="pageForm.isAudit === false" ref="reserve3" btn>
|
||||
<template #btn>
|
||||
<el-row style="margin: 40px 0;text-align: right">
|
||||
<el-button type="danger" @click="doReview('one', false)">驳回</el-button>
|
||||
<el-button type="primary" @click="doReview('one', true)">通过</el-button>
|
||||
</el-row>
|
||||
</template>
|
||||
</reserve-info>
|
||||
|
||||
<!--<reserve-info v-if="pageForm.isAudit === false" ref="reserve2" label="主席批示" handle>
|
||||
<template #handle>
|
||||
<el-form :model="formData" ref="addForm" :rules="formRules" size="small" label-width="100px">
|
||||
<el-form-item label="批示信息 " label-width="135px" class="view-header">
|
||||
</el-form-item>
|
||||
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="xld_id" label="批示人">
|
||||
<el-input value="${@shiro.getPrincipalProperty('username')}"
|
||||
disabled></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="time" label="批示时间">
|
||||
<el-input v-model="formData.time" disabled></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-form-item prop="opinion" label="批示意见">
|
||||
<el-input type="textarea" v-model="formData.opinion" rows="6" maxlength="500"
|
||||
placeholder="请填写您的批示意见"></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row style="margin: 40px 0;text-align: right">
|
||||
<el-button type="primary" @click="doInstructions">确 定</el-button>
|
||||
</el-row>
|
||||
</template>
|
||||
</reserve-info>-->
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<reserve-info ref="reserve"></reserve-info>
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
<!--# include("/platform/activity/includeJs/activityUtil.js"){} #-->
|
||||
const activityUtil = new typeUtil()
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
data() {
|
||||
return {
|
||||
selectTable: [],
|
||||
activityTypeList: [],
|
||||
reserveViewData: {},
|
||||
tableLoading: false,
|
||||
tableData: [],
|
||||
formData: {},
|
||||
pageForm: {
|
||||
searchName: "asi.name",
|
||||
searchKeyword: "",
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
pageOrderName: "",
|
||||
pageOrderBy: "",
|
||||
isAudit: false,
|
||||
},
|
||||
formRules: {
|
||||
opinion: [{required: true, message: '请填写批示意见', trigger: ['blur', 'change']}],
|
||||
},
|
||||
userid: '',
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'reserve-info': httpVueLoader('/components/activity/site/ReserveInfo.vue'),
|
||||
},
|
||||
methods: {
|
||||
openView(id) {
|
||||
this.$refs.guava.view()
|
||||
const role = "${@shiro.hasRole('sysadmin')||@shiro.hasRole('xghng')||@shiro.hasRole('A06')}"
|
||||
this.$refs.reserve.role = role
|
||||
const backOptionShow = "${@shiro.getPrincipalProperty('id')}" === this.userid
|
||||
this.$refs.reserve.backOptionShow = (role || backOptionShow)
|
||||
this.$refs.reserve.openView(id)
|
||||
},
|
||||
handleSelectionChange(val) {
|
||||
this.selectTable = val;
|
||||
},
|
||||
openReview(row) {
|
||||
this.reserveViewData = row
|
||||
this.formData = {
|
||||
id: row.id,
|
||||
state: 30,
|
||||
time: moment().format('YYYY-MM-DD')
|
||||
}
|
||||
|
||||
if (this.$refs['addForm']) {
|
||||
this.$refs['addForm'].resetFields()
|
||||
}
|
||||
|
||||
this.$nextTick(() => {
|
||||
this.$refs.guava.edit()
|
||||
this.$refs.reserve2.openView(row.id)
|
||||
})
|
||||
},
|
||||
openReview2(row) {
|
||||
this.reserveViewData = row
|
||||
this.formData = {
|
||||
id: row.id,
|
||||
}
|
||||
this.$nextTick(() => {
|
||||
this.$refs.guava.edit()
|
||||
const role = "${@shiro.hasRole('sysadmin')||@shiro.hasRole('xghng')||@shiro.hasRole('A06')}"
|
||||
this.$refs.reserve3.role = role
|
||||
const backOptionShow = "${@shiro.getPrincipalProperty('id')}" === row.reserve_person_id
|
||||
this.$refs.reserve3.backOptionShow = (role || backOptionShow)
|
||||
this.$refs.reserve3.openView(row.id)
|
||||
})
|
||||
},
|
||||
doReview(type, state) {
|
||||
let that = this
|
||||
if (type === 'many' && this.selectTable.length === 0) {
|
||||
this.$notify.warning({title: '警告', message: '一键审核请先在多选框中进行选择!'});
|
||||
return
|
||||
}
|
||||
let typeText = type === 'many' ? '一键' : ''
|
||||
let typeT = type === 'many' ? '这些' : '此'
|
||||
let text = state ? '通过' : '驳回'
|
||||
this.$prompt('您确定要' + typeText + text + typeT + '预约吗?', '温馨提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
inputPlaceholder: '请在此填写审核意见',
|
||||
inputType: 'textarea',
|
||||
inputValidator: (value) => {
|
||||
if (value === null) {
|
||||
return '审核意见不能为空'
|
||||
}
|
||||
}
|
||||
}).then(async ({value}) => {
|
||||
let id = ''
|
||||
if (type === 'one') {
|
||||
id = JSON.stringify([that.formData.id])
|
||||
} else {
|
||||
id = JSON.stringify(this.selectTable.map(x => x.id))
|
||||
}
|
||||
$.post(location.href + "/doReview", {
|
||||
id: id,
|
||||
auditOpinion: value,
|
||||
isPass: state
|
||||
}, (res) => {
|
||||
if (res.code === 0) {
|
||||
that.$message.success(res.msg)
|
||||
this.selectTable = []
|
||||
that.pageData();
|
||||
that.$refs.guava.index()
|
||||
}
|
||||
}, "json");
|
||||
}).catch(() => {
|
||||
});
|
||||
},
|
||||
doInstructions() {
|
||||
$.post(location.href + "/doReview", this.formData, (res) => {
|
||||
if (res.code == 0) {
|
||||
this.$message.success(res.msg)
|
||||
this.pageData();
|
||||
this.$refs.guava.index()
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
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();
|
||||
this.tableLoading = true
|
||||
let form = clone(this.pageForm)
|
||||
if (form.isAudit === null) {
|
||||
delete form.isAudit
|
||||
}
|
||||
$.post(location.href + "/pageData", form, (res) => {
|
||||
const {code, data, msg} = res
|
||||
sublime.closeLoadingbar();
|
||||
this.tableLoading = false
|
||||
if (code == 0) {
|
||||
this.tableData = data.list;
|
||||
this.pageForm.totalCount = data.totalCount;
|
||||
} else {
|
||||
this.$message.error(msg);
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.activityTypeList = await activityUtil.getAllType()
|
||||
this.pageData();
|
||||
},
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,402 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<style>
|
||||
.audit-userids-select .el-select__tags {
|
||||
flex-wrap: unset;
|
||||
overflow: auto;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<el-card shadow="never">
|
||||
<table-tool :app="this" label="类型列表">
|
||||
<template #func>
|
||||
<el-button @click="openAdd" size="small" type="primary">新增类型</el-button>
|
||||
</template>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :size="tableSize"
|
||||
@sort-change="pageOrder" class="vi-table"
|
||||
row-key="id" style="width: 100%">
|
||||
|
||||
<el-table-column align="center" header-align="center" label="序号" type="index"
|
||||
width="80px"></el-table-column>
|
||||
|
||||
<el-table-column
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
:width="column.width"
|
||||
align="center"
|
||||
header-align="center"
|
||||
min-width="50"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns"
|
||||
>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="操作">
|
||||
<template scope="{row}">
|
||||
<el-button @click="openEdit(row)" size="mini" type="primary">编辑</el-button>
|
||||
<el-button @click="doDelete(row.id)" size="mini" type="danger">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
</el-table>
|
||||
</el-card>
|
||||
|
||||
<template #edit>
|
||||
<el-form :model="formData" :rules="formRules" label-width="80px" ref="form">
|
||||
<el-form-item label="名称" prop="meetingTypeName">
|
||||
<el-input v-model="formData.meetingTypeName"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="模块名称" prop="moduleName">
|
||||
<el-input v-model="formData.moduleName"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="序号" prop="sortNum">
|
||||
<el-input-number :max="tableData.length + 1" :min="1" :precision="0"
|
||||
v-model="formData.sortNum"></el-input-number>
|
||||
</el-form-item>
|
||||
|
||||
<el-table :data="formData.auditStateList">
|
||||
<el-table-column label="节点ID" prop="stateId" width="100px">
|
||||
<template slot-scope="scope">
|
||||
<el-input readonly v-model="scope.row.stateId"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="审核节点名称" prop="stateName">
|
||||
<template slot-scope="scope">
|
||||
<el-input v-model="scope.row.stateName"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="审核人" prop="selectUserId">
|
||||
<template slot-scope="scope">
|
||||
<el-select :remote-method="userRemoteMethod" class="audit-userids-select" filterable
|
||||
multiple placeholder="请输入姓名或工号查找"
|
||||
remote style="width: 100%"
|
||||
v-model="scope.row.selectUserId">
|
||||
<el-option :key="item.id" :label="item.username + '(' + item.loginname + ')'"
|
||||
:value="item.id"
|
||||
v-for="item in userList"></el-option>
|
||||
</el-select>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="筛选审核人" width="100px">
|
||||
<template scope="scope">
|
||||
<el-button @click="openUserSelect(scope.$index)" type="text">筛选用户</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="通过下个节点" pro="afterPassStateId" width="120px">
|
||||
<template slot-scope="scope">
|
||||
<el-select v-model="scope.row.afterPassStateId">
|
||||
<el-option :label="item"
|
||||
:value="item"
|
||||
v-for="item in stateIdList"></el-option>
|
||||
</el-select>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="拒绝下个节点" pro="afterRejectStateId" width="120px">
|
||||
<template slot-scope="scope">
|
||||
<el-select v-model="scope.row.afterRejectStateId">
|
||||
<el-option :label="item"
|
||||
:value="item"
|
||||
v-for="item in stateIdList"></el-option>
|
||||
</el-select>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="审核类型" prop="stateAuditType" width="150px">
|
||||
<template slot-scope="scope">
|
||||
<el-select v-model="scope.row.stateAuditType">
|
||||
<el-option :label="item.desc"
|
||||
:value="item.value"
|
||||
v-for="item in stateAuditTypeList"></el-option>
|
||||
</el-select>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column width="100px">
|
||||
<template scope="scope" slot="header">
|
||||
<el-button @click="addState"
|
||||
icon="el-icon-circle-plus-outline"
|
||||
size="mini"
|
||||
type="primary"></el-button>
|
||||
</template>
|
||||
<template scope="scope">
|
||||
<el-button @click="formData.auditStateList.splice(scope.$index, 1)"
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
type="danger"></el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form>
|
||||
<el-row class="mt10" justify="end" type="flex">
|
||||
<el-button @click="$refs.guava.index()">取消</el-button>
|
||||
<el-button @click="doConfirm" type="primary">确定</el-button>
|
||||
</el-row>
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
<condition :fields="fields"
|
||||
:show_filter_result="true"
|
||||
@confirm="cndConfirm"
|
||||
ref="cnd"
|
||||
v-model="cnd"></condition>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
<!--# include("/platform/activity/includeJs/activityUtil.js"){} #-->
|
||||
const activityUtil = new typeUtil()
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
components: {
|
||||
'condition': httpVueLoader('/components/plugins/ConditionStructure.vue?v=1.0.0'),
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
tableColumns: [
|
||||
{prop: 'meetingTypeName', label: '类型名称'},
|
||||
{prop: 'moduleName', label: '模块名称'},
|
||||
{prop: 'sortNum', label: '排序编号'}],
|
||||
stateAuditTypeList: [],
|
||||
formData: {
|
||||
auditStateList: []
|
||||
},
|
||||
formRules: {
|
||||
meetingTypeName: [{required: true, message: '请输入类型名称', trigger: ['blur', 'change']}],
|
||||
moduleName: [{required: true, message: '请输入模块名称,英文命名', trigger: ['blur', 'change']}],
|
||||
sortNum: [{required: true, message: '请输入排序编号', trigger: ['blur', 'change']}]
|
||||
},
|
||||
userList: [],
|
||||
maxStateId: 0,
|
||||
userSelectDialogVisible: false,
|
||||
cnd: {},
|
||||
fields: [],
|
||||
nodeIndex: null
|
||||
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
async 'formData.auditStateList'(val) {
|
||||
const {id} = this.formData
|
||||
for (let i = 0; i < val.length; i++) {
|
||||
let item = val[i]
|
||||
if (id) {
|
||||
if (item.isAddRow) {
|
||||
//当前行是新增的第几行
|
||||
const addIndex = i + 1 - val.filter(v => !v.isAddRow).length
|
||||
|
||||
const stateId = val[0].stateId + i * 10
|
||||
const licitStateCode = await this.checkStateId(stateId, addIndex)
|
||||
item['stateId'] = licitStateCode
|
||||
}
|
||||
} else {
|
||||
item['stateId'] = this.maxStateId + (i + 1) * 10
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
// this.$set(this.formData,'auditStateList',val)
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
dialogTitle() {
|
||||
if (this.formData.id) {
|
||||
return '编辑'
|
||||
}
|
||||
return '新增'
|
||||
},
|
||||
stateIdList() {
|
||||
return this.formData.auditStateList.map(v => v.stateId)
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async checkStateId(stateId, stateIndex) {
|
||||
const resp = await $.get(loc() + '/checkStateId', {stateId, stateIndex})
|
||||
if (resp.code === 0) {
|
||||
return resp.data
|
||||
} else {
|
||||
this.notifyError(resp.msg)
|
||||
}
|
||||
},
|
||||
|
||||
addState() {
|
||||
this.formData.auditStateList.push({
|
||||
stateId: this.maxStateId,
|
||||
stateName: null,
|
||||
selectUserId: [],
|
||||
auditStateUserList: [],
|
||||
afterPassStateId: null,
|
||||
afterRejectStateId: null,
|
||||
isAddRow: true
|
||||
})
|
||||
},
|
||||
|
||||
async findAll() {
|
||||
const resp_data = await $.get(loc() + '/findAll')
|
||||
if (resp_data.code === 0) {
|
||||
resp_data.data.forEach(v => {
|
||||
v.auditStateList.forEach(x => {
|
||||
if (x.matchCnd) {
|
||||
console.log(x.matchCnd)
|
||||
x.matchCnd = JSON.parse(x.matchCnd)
|
||||
console.log(x.matchCnd)
|
||||
}
|
||||
})
|
||||
})
|
||||
this.tableData = resp_data.data
|
||||
}
|
||||
},
|
||||
openAdd() {
|
||||
this.formData = {
|
||||
meetingName: null,
|
||||
sortNum: this.tableData.length + 1,
|
||||
auditStateList: [{}]
|
||||
}
|
||||
this.$refs.guava.edit()
|
||||
},
|
||||
async doConfirm() {
|
||||
try {
|
||||
const valid = await this.$refs['form'].validate()
|
||||
if (valid) {
|
||||
this.formData.auditStateList.forEach(v => {
|
||||
v['auditStateUserList'] = v.selectUserId.map(x => {
|
||||
return {userId: x}
|
||||
})
|
||||
v['matchCnd'] = JSON.stringify(v['matchCnd'])
|
||||
})
|
||||
const resp = await $.post(loc() + '/doHandle', {data: JSON.stringify(this.formData)})
|
||||
if (resp.code === 0) {
|
||||
this.$refs.guava.index()
|
||||
this.notifySuccess(resp.msg)
|
||||
this.findAll()
|
||||
} else {
|
||||
this.notifyError(resp.msg)
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
}
|
||||
},
|
||||
async openEdit(row) {
|
||||
const d = clone(row)
|
||||
let u = []
|
||||
d.auditStateList.forEach(v => {
|
||||
v['selectUserId'] = v.auditStateUserList.map(x => x.userId)
|
||||
u = u.concat(v['selectUserId'])
|
||||
})
|
||||
this.userList = await queryUserByIds(u)
|
||||
|
||||
this.formData = d
|
||||
this.$refs.guava.edit()
|
||||
},
|
||||
async doDelete(id) {
|
||||
try {
|
||||
const confirm = await this.$confirm('您确定要删除吗', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm === 'confirm') {
|
||||
const resp = await $.post(loc() + '/delete/' + id)
|
||||
if (resp.code === 0) {
|
||||
this.notifySuccess(resp.msg)
|
||||
this.findAll()
|
||||
} else {
|
||||
this.notifyWarning(resp.msg)
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
}
|
||||
},
|
||||
async userRemoteMethod(query) {
|
||||
if (query) {
|
||||
this.userList = await searchUser(query)
|
||||
}
|
||||
},
|
||||
openUserSelect(node_index) {
|
||||
this.nodeIndex = node_index
|
||||
const node = this.formData.auditStateList[node_index]
|
||||
if (node.matchCnd) {
|
||||
this.cnd = node.matchCnd
|
||||
console.log('......')
|
||||
} else {
|
||||
this.cnd = {method: "AND", conditions: [{}]}
|
||||
}
|
||||
this.$refs.cnd.open(false)
|
||||
},
|
||||
async initCndFields() {
|
||||
this.cnd = {
|
||||
method: "AND",
|
||||
conditions: [{}],
|
||||
}
|
||||
/*const meet_data = await getOpenMeeting()
|
||||
const meet_options = meet_data.map(v => {
|
||||
return {"label": v.jdhallname, "value": v.id}
|
||||
})
|
||||
this.fields.push(
|
||||
{label: '教代会', value: 'jdhid', type: "select", options: meet_options}
|
||||
)*/
|
||||
const {data: role_data} = await $.get('/platform/sys/role/getAllRoles')
|
||||
const role_options = role_data.map(v => {
|
||||
return {"label": v.name, "value": v.id}
|
||||
})
|
||||
this.fields.push(
|
||||
{label: '角色', value: 'roleId', type: "select", options: role_options}
|
||||
)
|
||||
this.fields.push(
|
||||
{label: '姓名', value: 'username', options: null}
|
||||
)
|
||||
|
||||
|
||||
},
|
||||
async cndConfirm(val) {
|
||||
if (val) {
|
||||
const matchCnd = clone(val)
|
||||
if (matchCnd.conditions && matchCnd.conditions.length > 0) {
|
||||
this.formData.auditStateList[this.nodeIndex].matchCnd = matchCnd
|
||||
const resp = await $.post('/platform/userFilter/findUserByCnd', {cnd: JSON.stringify(matchCnd)})
|
||||
if (resp.code === 0) {
|
||||
if (resp.data) {
|
||||
const d = this.formData.auditStateList[this.nodeIndex]
|
||||
d.matchCnd = matchCnd
|
||||
d.selectUserId = [...new Set(d.selectUserId.concat(resp.data.map(v => v.id)))]
|
||||
|
||||
this.$set(this.formData.auditStateList, this.nodeIndex, d)
|
||||
let u = []
|
||||
this.formData.auditStateList.forEach(v => {
|
||||
u = u.concat(v.selectUserId.map(x => x))
|
||||
})
|
||||
this.userList = await queryUserByIds([...new Set(u)])
|
||||
}
|
||||
}
|
||||
console.log(resp)
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.findAll()
|
||||
this.initCndFields()
|
||||
this.maxStateId = await activityUtil.findMaxStateId()
|
||||
this.stateAuditTypeList = await getEnumOptions('AuditTypeEnum')
|
||||
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,112 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<el-card shadow="never">
|
||||
<!--#include("/platform/activity/summary/common/addSummaryCommon.html"){}#-->
|
||||
</el-card>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
components: {},
|
||||
data() {
|
||||
return {
|
||||
formData: {
|
||||
files: [],
|
||||
tissueId: '',
|
||||
},
|
||||
summaryType: [],
|
||||
id: '',
|
||||
clubOptions: [],
|
||||
userOptions: [],
|
||||
summaryFrom: '3',
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async querySqr(key) {
|
||||
const data = await selectUser(key, 30)
|
||||
this.userOptions = data.list
|
||||
},
|
||||
cancel() {
|
||||
if (this.id) {
|
||||
sublime.jumpPagePjax('/platform/activity/yearSummary/club')
|
||||
}
|
||||
},
|
||||
async doHandle() {
|
||||
const valid = await this.$refs['form'].validate()
|
||||
if (valid) {
|
||||
this.formData.userId = "${@shiro.getPrincipalProperty('id')}";
|
||||
this.formData.summaryFrom = "3";
|
||||
this.formData.files = JSON.stringify(this.formData.files)
|
||||
const resp = await $.post('/platform/activity/yearSummary/doHandle', this.formData)
|
||||
if (resp.code === 0) {
|
||||
this.$notify({
|
||||
title: '成功',
|
||||
message: resp.msg,
|
||||
type: 'success',
|
||||
duration: 500,
|
||||
onClose: () => {
|
||||
sublime.jumpPagePjax('/platform/activity/yearSummary/club')
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
async initData() {
|
||||
const id = GetQueryString("id")
|
||||
this.id = id
|
||||
if (id) {
|
||||
const resp = await $.post('/platform/activity/yearSummary/findOne', {id})
|
||||
if (resp.code === 0) {
|
||||
this.formData = resp.data
|
||||
this.formData.files = JSON.parse(this.formData.files)
|
||||
this.userOptions = [
|
||||
{
|
||||
username: this.formData.username,
|
||||
loginname: this.formData.loginname,
|
||||
id: this.formData.userId,
|
||||
}
|
||||
]
|
||||
}
|
||||
} else {
|
||||
this.formData.userId = "${@shiro.getPrincipalProperty('id')}"
|
||||
this.userOptions = [
|
||||
{
|
||||
username: "${@shiro.getPrincipalProperty('username')}",
|
||||
loginname: "${@shiro.getPrincipalProperty('loginname')}",
|
||||
id: "${@shiro.getPrincipalProperty('id')}",
|
||||
}
|
||||
]
|
||||
const clubs = await $.post('/platform/activity/yearSummary/getMyClub')
|
||||
this.formData.tissueId = clubs[0] === undefined ? '' : clubs[0]
|
||||
}
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
await this.initData()
|
||||
this.summaryType = await getDictOptions('summaryType')
|
||||
this.clubOptions = await getClubs()
|
||||
const isAdmin = "${@shiro.hasAnyRoles('sysadmin', 'A06')}" === 'true'
|
||||
if (!isAdmin) {
|
||||
const clubs = await this.getMyClub()
|
||||
let clubArray = []
|
||||
for (let c of Array.from(clubs)) {
|
||||
const cl = this.clubOptions.find(x => x.id === c)
|
||||
if (cl) {
|
||||
clubArray.push(cl)
|
||||
}
|
||||
}
|
||||
this.clubOptions = clubArray
|
||||
}
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,245 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<style>
|
||||
.el-descriptions__table {
|
||||
table-layout: fixed !important;
|
||||
}
|
||||
|
||||
.el-descriptions-item__cell {
|
||||
text-align: center !important;
|
||||
}
|
||||
</style>
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
|
||||
<el-card shadow="never">
|
||||
<div class="search">
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">年度</div>
|
||||
<div class="search-item-option">
|
||||
<el-date-picker
|
||||
placeholder="选择年度" style="width: 100%"
|
||||
type="year"
|
||||
v-model="pageForm.year"
|
||||
value-format="yyyy">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">协会(社团)</div>
|
||||
<div class="search-item-option">
|
||||
<el-select v-model="pageForm.tissueId" placeholder="请选择协会(社团)" style="width: 100%;">
|
||||
<el-option v-for="item in unionOptions" :label="item.name" :value="item.id"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">总结类型</div>
|
||||
<div class="search-item-option">
|
||||
<el-select v-model="pageForm.summaryType" placeholder="请选择总结类型" style="width: 100%;">
|
||||
<el-option v-for="item in summaryType" :label="item.name" :value="item.id"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-query">
|
||||
<el-button type="primary" icon="el-icon-search" @click="pageData">搜索</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt20">
|
||||
<el-table :data="tableData" @sort-change='pageOrder'>
|
||||
<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 prop="year" label="年度">
|
||||
</el-table-column>
|
||||
<el-table-column sortable prop="name" label="协会(社团)">
|
||||
</el-table-column>
|
||||
<el-table-column sortable prop="typename" label="总结类型">
|
||||
</el-table-column>
|
||||
<el-table-column sortable prop="username" label="上传人">
|
||||
</el-table-column>
|
||||
<el-table-column sortable prop="ctime" label="上传时间">
|
||||
</el-table-column>
|
||||
<el-table-column prop="userOnline" label="操作" width="100px">
|
||||
<template slot-scope="scope">
|
||||
<el-dropdown @command="dropdownCommand">
|
||||
<el-button plain size="mini"><i class="ti-settings"></i><span class="ti-angle-down"></span>
|
||||
</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item :command="{type:'view',data:scope.row}">
|
||||
查看
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'edit',data:scope.row}">
|
||||
编辑
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'delete',data:scope.row}">
|
||||
删除
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<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-card>
|
||||
|
||||
<template #view>
|
||||
<div style="width: 80%; margin: 0 auto">
|
||||
<vi-title title="总结详情"></vi-title>
|
||||
<el-descriptions :column="2" border class="table_fixed">
|
||||
<el-descriptions-item label="年度">
|
||||
{{viewData.year}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="协会(社团)">
|
||||
{{viewData.name}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="总结类型">
|
||||
{{viewData.typename}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="上传人">
|
||||
{{viewData.username}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="上传时间" :span="2">
|
||||
{{viewData.ctime}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="附件">
|
||||
<file-upload v-if="viewData.files&&viewData.files.length"
|
||||
:files="JSON.parse(viewData.files)"
|
||||
:view="true"></file-upload>
|
||||
<span v-else>暂无</span>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</div>
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
let vue = new Vue({
|
||||
el: "#app",
|
||||
components: {
|
||||
'file-upload': httpVueLoader('/components/plugins/FileUpload.vue'),
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
tableData: [],
|
||||
fileList: [],
|
||||
pageForm: {
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
pageOrderName: "",
|
||||
pageOrderBy: "",
|
||||
summaryFrom: '3',
|
||||
year: moment().format('YYYY')
|
||||
},
|
||||
formData: {},
|
||||
summaryType: [],
|
||||
unionOptions: [],
|
||||
viewData: {},
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.viewData = row
|
||||
},
|
||||
dropdownCommand(command) {
|
||||
const {type, data} = command
|
||||
if (type == 'view') {
|
||||
this.openView(data)
|
||||
} else if (type == 'edit') {
|
||||
this.openEdit(data)
|
||||
} else if (type == 'delete') {
|
||||
this.doDelete(data.id)
|
||||
}
|
||||
},
|
||||
doDelete(id) {
|
||||
this.$confirm('确定要删除吗', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
}).then(() => {
|
||||
$.post(base + '/platform/activity/yearSummary/doDelete', {id: id}).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.doSearch()
|
||||
this.$message.success(res.msg)
|
||||
}
|
||||
})
|
||||
}).catch(() => {
|
||||
})
|
||||
},
|
||||
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() {
|
||||
$.post('/platform/activity/yearSummary/pageData', this.pageForm).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.tableData = res.data.list
|
||||
this.pageForm.totalCount = res.data.totalCount
|
||||
}
|
||||
})
|
||||
},
|
||||
openEdit(row) {
|
||||
sublime.jumpPagePjax('/platform/activity/yearSummary/addClubSummary?id=' + row.id)
|
||||
},
|
||||
async getMyClub() {
|
||||
return await $.post('/platform/activity/yearSummary/getMyClub')
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.unionOptions = await getClubs()
|
||||
const isAdmin = "${@shiro.hasAnyRoles('sysadmin', 'A06')}" === 'true'
|
||||
if (!isAdmin) {
|
||||
const clubs = await this.getMyClub()
|
||||
let clubArray = []
|
||||
for (let c of Array.from(clubs)) {
|
||||
const cl = this.unionOptions.find(x => x.id === c)
|
||||
if (cl) {
|
||||
clubArray.push(cl)
|
||||
}
|
||||
}
|
||||
this.unionOptions = clubArray
|
||||
}
|
||||
this.summaryType = await getDictOptions('summaryType')
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,57 @@
|
||||
<el-form :model="formData" label-width="120px" ref="form">
|
||||
<vi-title title="年度总结"></vi-title>
|
||||
<el-row :gutter="10" type="flex">
|
||||
<el-col :span="24">
|
||||
<el-form-item label="姓名" prop="username">
|
||||
<el-select v-model="formData.userId" style="width: 100%"
|
||||
filterable
|
||||
remote
|
||||
clearable
|
||||
reserve-keyword
|
||||
placeholder="输入工号或姓名查找"
|
||||
:remote-method="querySqr">
|
||||
<el-option v-for="o in userOptions" :label="o.username+'-'+o.loginname" :value="o.id"
|
||||
:key="o.id"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row v-if="summaryFrom === '2'" :gutter="10" type="flex">
|
||||
<el-col :span="24">
|
||||
<el-form-item label="所属工会" prop="tissueId">
|
||||
<el-select v-model="formData.tissueId" placeholder="请选择所属工会" style="width: 100%;">
|
||||
<el-option v-for="item in unionOptions" :label="item.unionname" :value="item.id"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row v-if="summaryFrom === '3'" :gutter="10" type="flex">
|
||||
<el-col :span="24">
|
||||
<el-form-item label="协会(社团)" prop="tissueId">
|
||||
<el-select v-model="formData.tissueId" placeholder="请选择协会(社团)" style="width: 100%;">
|
||||
<el-option v-for="item in clubOptions" :label="item.name" :value="item.id"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="10" type="flex">
|
||||
<el-col :span="24">
|
||||
<el-form-item label="总结类型" prop="summaryType" :rules="{required:true,message: '请选择总结类型', trigger: 'blur'}">
|
||||
<el-select v-model="formData.summaryType" placeholder="请选择总结类型" style="width: 100%;">
|
||||
<el-option v-for="item in summaryType" :label="item.name" :value="item.id"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="10" type="flex">
|
||||
<el-col :span="24">
|
||||
<el-form-item prop="files" label="附件上传">
|
||||
<file-upload :files.sync="formData.files"></file-upload>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<el-row class="mt10" justify="end" type="flex">
|
||||
<el-button @click="cancel">取消</el-button>
|
||||
<el-button @click="doHandle" type="primary">提交</el-button>
|
||||
</el-row>
|
||||
@@ -0,0 +1,99 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<el-card shadow="never">
|
||||
<!--#include("/platform/activity/summary/common/addSummaryCommon.html"){}#-->
|
||||
</el-card>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
components: {},
|
||||
data() {
|
||||
return {
|
||||
formData: {
|
||||
files: [],
|
||||
tissueId: '',
|
||||
},
|
||||
summaryFrom: '1',
|
||||
summaryType: [],
|
||||
id: '',
|
||||
unionOptions: [],
|
||||
userOptions: [],
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async querySqr(key) {
|
||||
const data = await selectUser(key, 30)
|
||||
this.userOptions = data.list
|
||||
},
|
||||
cancel() {
|
||||
if (this.id) {
|
||||
sublime.jumpPagePjax('/platform/activity/yearSummary/school')
|
||||
}
|
||||
},
|
||||
async doHandle() {
|
||||
const valid = await this.$refs['form'].validate()
|
||||
if (valid) {
|
||||
this.formData.userId = "${@shiro.getPrincipalProperty('id')}";
|
||||
this.formData.summaryFrom = "1";
|
||||
this.formData.files = JSON.stringify(this.formData.files)
|
||||
const resp = await $.post('/platform/activity/yearSummary/doHandle', this.formData)
|
||||
if (resp.code === 0) {
|
||||
this.$notify({
|
||||
title: '成功',
|
||||
message: resp.msg,
|
||||
type: 'success',
|
||||
duration: 500,
|
||||
onClose: () => {
|
||||
sublime.jumpPagePjax('/platform/activity/yearSummary/school')
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
async initData() {
|
||||
const id = GetQueryString("id")
|
||||
this.id = id
|
||||
if (id) {
|
||||
const resp = await $.post('/platform/activity/yearSummary/findOne', {id})
|
||||
if (resp.code === 0) {
|
||||
this.formData = resp.data
|
||||
this.formData.files = JSON.parse(this.formData.files)
|
||||
this.userOptions = [
|
||||
{
|
||||
username: this.formData.username,
|
||||
loginname: this.formData.loginname,
|
||||
id: this.formData.userId,
|
||||
}
|
||||
]
|
||||
}
|
||||
} else {
|
||||
this.formData.userId = "${@shiro.getPrincipalProperty('id')}"
|
||||
this.userOptions = [
|
||||
{
|
||||
username: "${@shiro.getPrincipalProperty('username')}",
|
||||
loginname: "${@shiro.getPrincipalProperty('loginname')}",
|
||||
id: "${@shiro.getPrincipalProperty('id')}",
|
||||
}
|
||||
]
|
||||
this.formData.tissueId = "${@shiro.getPrincipalProperty('union').getId()}"
|
||||
}
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
await this.initData()
|
||||
this.summaryType = await getDictOptions('summaryType')
|
||||
this.unionOptions = await getUnions()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,235 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<style>
|
||||
.el-descriptions__table {
|
||||
table-layout: fixed !important;
|
||||
}
|
||||
|
||||
.el-descriptions-item__cell {
|
||||
text-align: center !important;
|
||||
}
|
||||
</style>
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
|
||||
<el-card shadow="never">
|
||||
<div class="search">
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">年度</div>
|
||||
<div class="search-item-option">
|
||||
<el-date-picker
|
||||
placeholder="选择年度" style="width: 100%"
|
||||
type="year"
|
||||
v-model="pageForm.year"
|
||||
value-format="yyyy">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--<div class="search-item">
|
||||
<div class="search-item-label">所属工会</div>
|
||||
<div class="search-item-option">
|
||||
<el-select v-model="pageForm.tissueId" placeholder="请选择所属工会" style="width: 100%;">
|
||||
<el-option v-for="item in unionOptions" :label="item.unionname" :value="item.id"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>-->
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">总结类型</div>
|
||||
<div class="search-item-option">
|
||||
<el-select v-model="pageForm.summaryType" placeholder="请选择总结类型" style="width: 100%;">
|
||||
<el-option v-for="item in summaryType" :label="item.name" :value="item.id"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-query">
|
||||
<el-button type="primary" icon="el-icon-search" @click="pageData">搜索</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt20">
|
||||
<el-table :data="tableData" @sort-change='pageOrder'>
|
||||
<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 prop="year" label="年度">
|
||||
</el-table-column>
|
||||
<!--<el-table-column sortable prop="name" label="所属工会">
|
||||
</el-table-column>-->
|
||||
<el-table-column sortable prop="typename" label="总结类型">
|
||||
</el-table-column>
|
||||
<el-table-column sortable prop="username" label="上传人">
|
||||
</el-table-column>
|
||||
<el-table-column sortable prop="ctime" label="上传时间">
|
||||
</el-table-column>
|
||||
<el-table-column prop="userOnline" label="操作" width="100px">
|
||||
<template slot-scope="scope">
|
||||
<el-dropdown @command="dropdownCommand">
|
||||
<el-button plain size="mini"><i class="ti-settings"></i><span class="ti-angle-down"></span>
|
||||
</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item :command="{type:'view',data:scope.row}">
|
||||
查看
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'edit',data:scope.row}">
|
||||
编辑
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'delete',data:scope.row}">
|
||||
删除
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<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-card>
|
||||
|
||||
<template #view>
|
||||
<div style="width: 80%; margin: 0 auto">
|
||||
<vi-title title="总结详情"></vi-title>
|
||||
<el-descriptions :column="2" border class="table_fixed">
|
||||
<el-descriptions-item label="年度">
|
||||
{{viewData.year}}
|
||||
</el-descriptions-item>
|
||||
<!-- <el-descriptions-item label="所属工会">
|
||||
{{viewData.name}}
|
||||
</el-descriptions-item>-->
|
||||
<el-descriptions-item label="总结类型">
|
||||
{{viewData.typename}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="上传人">
|
||||
{{viewData.username}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="上传时间" :span="2">
|
||||
{{viewData.ctime}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="附件">
|
||||
<file-upload v-if="viewData.files&&viewData.files.length"
|
||||
:files="JSON.parse(viewData.files)"
|
||||
:view="true"></file-upload>
|
||||
<span v-else>暂无</span>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</div>
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
let vue = new Vue({
|
||||
el: "#app",
|
||||
components: {
|
||||
'file-upload': httpVueLoader('/components/plugins/FileUpload.vue'),
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
tableData: [],
|
||||
fileList: [],
|
||||
pageForm: {
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
pageOrderName: "",
|
||||
pageOrderBy: "",
|
||||
summaryFrom: '1',
|
||||
year: moment().format('YYYY')
|
||||
},
|
||||
formData: {},
|
||||
summaryType: [],
|
||||
unionOptions: [],
|
||||
viewData: {},
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.viewData = row
|
||||
},
|
||||
dropdownCommand(command) {
|
||||
const {type, data} = command
|
||||
if (type == 'view') {
|
||||
this.openView(data)
|
||||
} else if (type == 'edit') {
|
||||
this.openEdit(data)
|
||||
} else if (type == 'delete') {
|
||||
this.doDelete(data.id)
|
||||
}
|
||||
},
|
||||
doDelete(id) {
|
||||
this.$confirm('确定要删除吗', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
}).then(() => {
|
||||
$.post(base + '/platform/activity/yearSummary/doDelete', {id: id}).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.doSearch()
|
||||
this.$message.success(res.msg)
|
||||
}
|
||||
})
|
||||
}).catch(() => {
|
||||
})
|
||||
},
|
||||
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() {
|
||||
$.post('/platform/activity/yearSummary/pageData', this.pageForm).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.tableData = res.data.list
|
||||
this.pageForm.totalCount = res.data.totalCount
|
||||
}
|
||||
})
|
||||
},
|
||||
openEdit(row) {
|
||||
sublime.jumpPagePjax('/platform/activity/yearSummary/addSchoolSummary?id=' + row.id)
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
this.unionOptions = await getUnions()
|
||||
const isAdmin = "${@shiro.hasAnyRoles('sysadmin', 'A06')}" === 'true'
|
||||
if (!isAdmin) {
|
||||
const selfUnion = "${@shiro.getPrincipalProperty('union').getId()}";
|
||||
this.unionOptions = this.unionOptions.find(x => x.id === selfUnion)
|
||||
}
|
||||
this.summaryType = await getDictOptions('summaryType')
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,105 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<el-card shadow="never">
|
||||
<!--#include("/platform/activity/summary/common/addSummaryCommon.html"){}#-->
|
||||
</el-card>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
components: {},
|
||||
data() {
|
||||
return {
|
||||
formData: {
|
||||
files: [],
|
||||
tissueId: '',
|
||||
},
|
||||
summaryFrom: '2',
|
||||
summaryType: [],
|
||||
id: '',
|
||||
unionOptions: [],
|
||||
userOptions: [],
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async querySqr(key) {
|
||||
const data = await selectUser(key, 30)
|
||||
this.userOptions = data.list
|
||||
},
|
||||
cancel() {
|
||||
if (this.id) {
|
||||
sublime.jumpPagePjax('/platform/activity/yearSummary/union')
|
||||
}
|
||||
},
|
||||
async doHandle() {
|
||||
const valid = await this.$refs['form'].validate()
|
||||
if (valid) {
|
||||
this.formData.userId = "${@shiro.getPrincipalProperty('id')}";
|
||||
this.formData.tissueId = "${@shiro.getPrincipalProperty('union').getId()}";
|
||||
this.formData.summaryFrom = "2";
|
||||
this.formData.files = JSON.stringify(this.formData.files)
|
||||
const resp = await $.post('/platform/activity/yearSummary/doHandle', this.formData)
|
||||
if (resp.code === 0) {
|
||||
this.$notify({
|
||||
title: '成功',
|
||||
message: resp.msg,
|
||||
type: 'success',
|
||||
duration: 500,
|
||||
onClose: () => {
|
||||
sublime.jumpPagePjax('/platform/activity/yearSummary/union')
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
async initData() {
|
||||
const id = GetQueryString("id")
|
||||
this.id = id
|
||||
if (id) {
|
||||
const resp = await $.post('/platform/activity/yearSummary/findOne', {id})
|
||||
if (resp.code === 0) {
|
||||
this.formData = resp.data
|
||||
this.formData.files = JSON.parse(this.formData.files)
|
||||
this.userOptions = [
|
||||
{
|
||||
username: this.formData.username,
|
||||
loginname: this.formData.loginname,
|
||||
id: this.formData.userId,
|
||||
}
|
||||
]
|
||||
}
|
||||
} else {
|
||||
this.formData.userId = "${@shiro.getPrincipalProperty('id')}"
|
||||
this.userOptions = [
|
||||
{
|
||||
username: "${@shiro.getPrincipalProperty('username')}",
|
||||
loginname: "${@shiro.getPrincipalProperty('loginname')}",
|
||||
id: "${@shiro.getPrincipalProperty('id')}",
|
||||
}
|
||||
]
|
||||
this.formData.tissueId = "${@shiro.getPrincipalProperty('union').getId()}"
|
||||
}
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
await this.initData()
|
||||
this.summaryType = await getDictOptions('summaryType')
|
||||
this.unionOptions = await getUnions()
|
||||
const isAdmin = "${@shiro.hasAnyRoles('sysadmin', 'A06')}" === 'true'
|
||||
if (!isAdmin) {
|
||||
const selfUnion = "${@shiro.getPrincipalProperty('union').getId()}";
|
||||
this.unionOptions = [this.unionOptions.find(x => x.id === selfUnion)]
|
||||
}
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,236 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<style>
|
||||
.el-descriptions__table {
|
||||
table-layout: fixed !important;
|
||||
}
|
||||
|
||||
.el-descriptions-item__cell {
|
||||
text-align: center !important;
|
||||
}
|
||||
</style>
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
|
||||
<el-card shadow="never">
|
||||
<div class="search">
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">年度</div>
|
||||
<div class="search-item-option">
|
||||
<el-date-picker
|
||||
placeholder="选择年度" style="width: 100%"
|
||||
type="year"
|
||||
v-model="pageForm.year"
|
||||
value-format="yyyy">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">所属工会</div>
|
||||
<div class="search-item-option">
|
||||
<el-select v-model="pageForm.tissueId" placeholder="请选择所属工会" style="width: 100%;">
|
||||
<el-option v-for="item in unionOptions" :label="item.unionname"
|
||||
:value="item.id"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">总结类型</div>
|
||||
<div class="search-item-option">
|
||||
<el-select v-model="pageForm.summaryType" placeholder="请选择总结类型" style="width: 100%;">
|
||||
<el-option v-for="item in summaryType" :label="item.name" :value="item.id"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-query">
|
||||
<el-button type="primary" icon="el-icon-search" @click="pageData">搜索</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt20">
|
||||
<el-table :data="tableData" @sort-change='pageOrder'>
|
||||
<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 prop="year" label="年度">
|
||||
</el-table-column>
|
||||
<el-table-column sortable prop="name" label="所属工会">
|
||||
</el-table-column>
|
||||
<el-table-column sortable prop="typename" label="总结类型">
|
||||
</el-table-column>
|
||||
<el-table-column sortable prop="username" label="上传人">
|
||||
</el-table-column>
|
||||
<el-table-column sortable prop="ctime" label="上传时间">
|
||||
</el-table-column>
|
||||
<el-table-column prop="userOnline" label="操作" width="100px">
|
||||
<template slot-scope="scope">
|
||||
<el-dropdown @command="dropdownCommand">
|
||||
<el-button plain size="mini"><i class="ti-settings"></i><span class="ti-angle-down"></span>
|
||||
</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item :command="{type:'view',data:scope.row}">
|
||||
查看
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'edit',data:scope.row}">
|
||||
编辑
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'delete',data:scope.row}">
|
||||
删除
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<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-card>
|
||||
|
||||
<template #view>
|
||||
<div style="width: 80%; margin: 0 auto">
|
||||
<vi-title title="总结详情"></vi-title>
|
||||
<el-descriptions :column="2" border class="table_fixed">
|
||||
<el-descriptions-item label="年度">
|
||||
{{viewData.year}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="所属工会">
|
||||
{{viewData.name}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="总结类型">
|
||||
{{viewData.typename}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="上传人">
|
||||
{{viewData.username}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="上传时间" :span="2">
|
||||
{{viewData.ctime}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="附件">
|
||||
<file-upload v-if="viewData.files&&viewData.files.length"
|
||||
:files="JSON.parse(viewData.files)"
|
||||
:view="true"></file-upload>
|
||||
<span v-else>暂无</span>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</div>
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
let vue = new Vue({
|
||||
el: "#app",
|
||||
components: {
|
||||
'file-upload': httpVueLoader('/components/plugins/FileUpload.vue'),
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
tableData: [],
|
||||
fileList: [],
|
||||
pageForm: {
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
pageOrderName: "",
|
||||
pageOrderBy: "",
|
||||
summaryFrom: '2',
|
||||
year: moment().format('YYYY')
|
||||
},
|
||||
formData: {},
|
||||
summaryType: [],
|
||||
unionOptions: [],
|
||||
viewData: {},
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.viewData = row
|
||||
},
|
||||
dropdownCommand(command) {
|
||||
const {type, data} = command
|
||||
if (type == 'view') {
|
||||
this.openView(data)
|
||||
} else if (type == 'edit') {
|
||||
this.openEdit(data)
|
||||
} else if (type == 'delete') {
|
||||
this.doDelete(data.id)
|
||||
}
|
||||
},
|
||||
doDelete(id) {
|
||||
this.$confirm('确定要删除吗', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
}).then(() => {
|
||||
$.post(base + '/platform/activity/yearSummary/doDelete', {id: id}).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.doSearch()
|
||||
this.$message.success(res.msg)
|
||||
}
|
||||
})
|
||||
}).catch(() => {
|
||||
})
|
||||
},
|
||||
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() {
|
||||
$.post('/platform/activity/yearSummary/pageData', this.pageForm).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.tableData = res.data.list
|
||||
this.pageForm.totalCount = res.data.totalCount
|
||||
}
|
||||
})
|
||||
},
|
||||
openEdit(row) {
|
||||
sublime.jumpPagePjax('/platform/activity/yearSummary/addUnionSummary?id=' + row.id)
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
this.unionOptions = await getUnions()
|
||||
const isAdmin = "${@shiro.hasAnyRoles('sysadmin', 'A06')}" === 'true'
|
||||
if (!isAdmin) {
|
||||
const selfUnion = "${@shiro.getPrincipalProperty('union').getId()}";
|
||||
this.unionOptions = [this.unionOptions.find(x => x.id === selfUnion)]
|
||||
}
|
||||
this.summaryType = await getDictOptions('summaryType')
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,443 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.el-divider {
|
||||
background-color: #409EFF !important;
|
||||
}
|
||||
|
||||
.el-divider__text {
|
||||
color: #409EFF !important;
|
||||
}
|
||||
|
||||
.el-timeline-item__timestamp {
|
||||
color: #409EFF;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" class="platform" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<div class="search">
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">活动时间:</div>
|
||||
<div class="search-item-option">
|
||||
<el-date-picker
|
||||
style="width: 100%"
|
||||
v-model="pageForm.year"
|
||||
value-format="yyyy"
|
||||
type="year"
|
||||
placeholder="选择年">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">活动名称:</div>
|
||||
<div class="search-item-option">
|
||||
<el-input v-model="pageForm.name" placeholder="请输入活动名称" clearable></el-input>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">工会名称:</div>
|
||||
<div class="search-item-option">
|
||||
<el-select v-model="pageForm.unionId" placeholder="请选择工会" filterable clearable
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in unionList"
|
||||
:key="item.id"
|
||||
:label="item.unionname"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-query">
|
||||
<el-button type="primary" icon="el-icon-search" @click="pageData">搜索</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool label="活动列表" :app="this">
|
||||
<template #func>
|
||||
<el-button type="primary" icon="el-icon-edit-outline" size="small"
|
||||
@click="openAdd">
|
||||
创建活动
|
||||
</el-button>
|
||||
</template>
|
||||
</table-tool>
|
||||
|
||||
<el-table :data="tableData" style="width: 100%;margin-bottom: 20px" row-key="id"
|
||||
@sort-change="pageOrder" v-loading="tableLoading" :size="tableSize" class="vi-table">
|
||||
|
||||
<el-table-column align="center" header-align="center" type="index" :index="indexMethod" label="序号"
|
||||
width="80px"></el-table-column>
|
||||
|
||||
<el-table-column
|
||||
align="center"
|
||||
header-align="center"
|
||||
v-for="column in tableColumns"
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable">
|
||||
|
||||
<template v-if="column.prop=='time'" scope="{row}">
|
||||
<span>
|
||||
{{moment(row.startTime).format('YYYY-MM-DD')}} - {{moment(row.endTime).format('YYYY-MM-DD')}}
|
||||
</span>
|
||||
</template>
|
||||
|
||||
<template v-else-if="column.prop=='type'" scope="{row}">
|
||||
<span v-if="row.type==40001">分工会活动计划</span>
|
||||
<span v-if="row.type==40003">协会(社团)活动计划</span>
|
||||
<span v-if="row.type==40003">校工会活动计划</span>
|
||||
</template>
|
||||
|
||||
<template v-else-if="column.prop=='tussueName'" scope="{row}">
|
||||
<span v-if="row.type==40002">{{row.unionname?row.unionname:'暂无'}}</span>
|
||||
<span v-if="row.type==40003">{{row.clubName?row.clubName:'暂无'}}</span>
|
||||
<span v-else>暂无</span>
|
||||
</template>
|
||||
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column prop="userOnline" align="center" header-align="center" label="操作" width="150px">
|
||||
<template scope="{row}">
|
||||
<el-dropdown @command="dropdownCommand">
|
||||
<el-button size="mini" :loading="row.loading">
|
||||
<i class="ti-settings"></i>
|
||||
<span class="ti-angle-down"></span>
|
||||
</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item :command="{type:'view',row}">
|
||||
查看
|
||||
</el-dropdown-item>
|
||||
<!--# if(!@shiro.hasRole('A06')){ #-->
|
||||
<el-dropdown-item :command="{type:'export',row}">
|
||||
导出
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'edit',row}">
|
||||
编辑
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'delete',row}">
|
||||
删除
|
||||
</el-dropdown-item>
|
||||
<!--# } #-->
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #edit_func>
|
||||
<el-button type="primary" @click="operation">确 定</el-button>
|
||||
</template>
|
||||
|
||||
<template #edit>
|
||||
<vi-title title="填写活动信息"></vi-title>
|
||||
<el-form :model="formData" ref="addForm" :rules="formRules" label-width="100px" label-position="left"
|
||||
label-suffix=":" style="padding: 0 2%">
|
||||
|
||||
<el-form-item prop="name" label="活动名称">
|
||||
<el-input maxlength="50" placeholder="请填写活动名称" v-model="formData.name"
|
||||
type="text"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<!--<el-row :gutter="40">
|
||||
<el-col :span="12">
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="type" label="活动类型">
|
||||
<el-radio-group v-model="formData.type">
|
||||
<el-radio label="1" border>分工会活动</el-radio>
|
||||
<el-radio label="2" border>协会(社团)活动</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>-->
|
||||
|
||||
<el-row :gutter="40">
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="time" label="活动时间">
|
||||
<el-date-picker
|
||||
style="width: 100%"
|
||||
v-model="formData.time"
|
||||
type="daterange"
|
||||
value-format="yyyy-MM-dd"
|
||||
range-separator="-"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="peopleNum" label="活动人数">
|
||||
<el-input maxlength="10" placeholder="请填写活动人数" v-model="formData.peopleNum"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="40">
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="address" label="活动地址">
|
||||
<el-input maxlength="50" placeholder="请填写活动地址" v-model="formData.address"
|
||||
type="text"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<div style="display: flex;margin: 20px 0">
|
||||
<el-divider content-position="left">活动人员列表</el-divider>
|
||||
|
||||
<div style="padding-left: 10px">
|
||||
<el-tooltip class="item" effect="dark" content="点击添加活动人员" placement="top">
|
||||
<el-button icon="el-icon-plus" circle @click="openAddUser" type="primary"></el-button>
|
||||
</el-tooltip>
|
||||
</div>
|
||||
</div>
|
||||
<el-table style="margin-bottom: 20px" border stripe :data="userData" size="small"
|
||||
v-loading="userTabLoading">
|
||||
<el-table-column
|
||||
type="index" label="序号" header-align="center" align="center" width="100">
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column
|
||||
align="center"
|
||||
header-align="center"
|
||||
v-for="column in userColumns"
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable">
|
||||
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column prop="userOnline" align="center" header-align="center" label="操作"
|
||||
width="150px">
|
||||
<template scope="{row}">
|
||||
<el-button type="danger" icon="el-icon-delete" circle @click="delUser"></el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
</el-table>
|
||||
|
||||
<el-divider content-position="left">活动资料</el-divider>
|
||||
<file-upload :files.sync="formData.files"></file-upload>
|
||||
|
||||
</el-form>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<tissue-info ref="info"></tissue-info>
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
<el-dialog title="添加人员" :visible.sync="dialogVisible" width="40%">
|
||||
|
||||
<el-form :model="formData" ref="form" :rules="formRules" label-width="100px">
|
||||
<el-form-item prop="userId" label="参加人员">
|
||||
<el-select v-model="formData.tissuePersonList" placeholder="请选择参加人员"
|
||||
multiple
|
||||
filterable
|
||||
remote
|
||||
reserve-keyword
|
||||
:remote-method="remoteMethod"
|
||||
:loading="selectLoading"
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in userList"
|
||||
:key="item.userId"
|
||||
:label="item.userName+'-'+item.loginName+'-'+item.unitName"
|
||||
:value="item.userId">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="doAddUser">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
selectLoading: false,
|
||||
userTabLoading: false,
|
||||
dialogVisible: false,
|
||||
userData: [],
|
||||
userList: [],
|
||||
unionList: [],
|
||||
formData: {
|
||||
tissuePersonList: []
|
||||
},
|
||||
tableColumns: [
|
||||
{prop: 'name', label: '活动名称'},
|
||||
{prop: 'address', label: '活动地点'},
|
||||
{prop: 'type', label: '活动类型'},
|
||||
{prop: 'tussueName', label: '所属组织'},
|
||||
{prop: 'time', label: '活动日期'},
|
||||
{prop: 'peopleNum', label: '活动人数'}
|
||||
],
|
||||
userColumns: [
|
||||
{prop: 'userName', label: '姓名'},
|
||||
{prop: 'loginName', label: '工号'},
|
||||
{prop: 'sex', label: '性别'},
|
||||
{prop: 'mobile', label: '联系方式'},
|
||||
{prop: 'unitName', label: '所属单位'},
|
||||
{prop: 'unionName', label: '所属工会'}
|
||||
],
|
||||
formRules: {
|
||||
name: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
address: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
peopleNum: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
time: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
type: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
}
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'file-upload': httpVueLoader('/components/plugins/FileUpload.vue'),
|
||||
'tissue-info': httpVueLoader('/components/activity/school/tissueInfo.vue')
|
||||
},
|
||||
methods: {
|
||||
dropdownCommand(command) {
|
||||
const {type, row} = command
|
||||
if (type === 'view') {
|
||||
this.openView(row)
|
||||
} else if (type === 'edit') {
|
||||
this.openEdit(row)
|
||||
} else if (type === 'delete') {
|
||||
this.doDelete(row)
|
||||
} else if (type === 'export') {
|
||||
location.href = "/platform/activity/union/info/mange/export?id=" + row.id
|
||||
}
|
||||
},
|
||||
async remoteMethod(query) {
|
||||
if (query) {
|
||||
this.selectLoading = true;
|
||||
const {data} = await $.post(loc() + "/findUser", {serachWord: query})
|
||||
this.userList = data
|
||||
this.selectLoading = false;
|
||||
}
|
||||
},
|
||||
openAddUser() {
|
||||
this.formData.tissuePersonList = []
|
||||
this.dialogVisible = true
|
||||
},
|
||||
doAddUser() {
|
||||
this.formData.tissuePersonList = this.userList.filter(v => this.formData.tissuePersonList.some(x => v.userId === x))
|
||||
this.userData = this.userData.concat(this.formData.tissuePersonList)
|
||||
this.dialogVisible = false
|
||||
},
|
||||
delUser(row) {
|
||||
this.userData.splice(this.userData.indexOf(row.userId), 1)
|
||||
this.formData.tissuePersonList.splice(this.formData.tissuePersonList.indexOf(row.userId), 1)
|
||||
},
|
||||
openView(row) {
|
||||
const {id} = row
|
||||
this.$refs.info.getInfo(id)
|
||||
this.$refs.guava.view()
|
||||
},
|
||||
async openEdit(row) {
|
||||
const {id} = row
|
||||
const resp = await $.post(loc() + "/findOne", {id})
|
||||
|
||||
requestLaterFun(resp, (data) => {
|
||||
data.type = data.type + ''
|
||||
data.files = JSON.parse(data.files)
|
||||
data.time = [data.startTime, data.endTime]
|
||||
this.userData = clone(data.tissuePersonList)
|
||||
this.formData = data
|
||||
}, () => {
|
||||
this.$notify.error({title: '错误', message: resp.msg});
|
||||
})
|
||||
|
||||
this.$refs.guava.edit()
|
||||
},
|
||||
async openAdd() {
|
||||
this.$refs.guava.edit()
|
||||
this.userData = []
|
||||
this.$nextTick(() => {
|
||||
this.formData = {
|
||||
name: '',
|
||||
time: '',
|
||||
peopleNum: '',
|
||||
address: '',
|
||||
files: [],
|
||||
type: "40002",
|
||||
tissuePersonList: []
|
||||
}
|
||||
if (this.$refs['addForm']) {
|
||||
this.$refs['addForm'].resetFields()
|
||||
}
|
||||
})
|
||||
},
|
||||
async operation() {
|
||||
let url = this.formData.id ? "/doEdit" : "/doAdd"
|
||||
this.$refs["addForm"].validate(async (valid) => {
|
||||
if (valid) {
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '正在提交...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: COVER_LAYER_COLOR
|
||||
});
|
||||
|
||||
const formData = JSON.parse(JSON.stringify(this.formData))
|
||||
|
||||
if (formData.time && formData.time.length) {
|
||||
formData.startTime = formData.time[0]
|
||||
formData.endTime = formData.time[1]
|
||||
formData.time = undefined
|
||||
}
|
||||
|
||||
const resp = await $.post(loc() + url, {tissue: JSON.stringify(formData),})
|
||||
|
||||
closeLoadingFunc(loading, resp, async () => {
|
||||
this.pageData()
|
||||
this.$refs.guava.index()
|
||||
}, (data, msg) => {
|
||||
this.$notify.error({title: '错误', message: msg});
|
||||
})
|
||||
} else {
|
||||
this.$notify.error({title: '错误', message: '存在未填写的的必填项'});
|
||||
}
|
||||
});
|
||||
},
|
||||
doDelete(row) {
|
||||
const {id} = row
|
||||
this.$confirm('确定要删除该活动吗?', '提示', {type: 'warning'}).then(async () => {
|
||||
this.$set(row, "loading", true)
|
||||
const resp = await $.post(loc() + "/doDelete", {id: id});
|
||||
requestLaterMsgFun(vue, resp, async () => {
|
||||
this.pageData()
|
||||
}, () => {
|
||||
}, () => {
|
||||
this.$set(row, "loading", false)
|
||||
});
|
||||
})
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
this.pageData()
|
||||
this.unionList = await getUnions(null)
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,342 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<div id="app" class="platform" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<div class="search">
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">计划年份:</div>
|
||||
<div class="search-item-option">
|
||||
<el-date-picker
|
||||
style="width: 100%"
|
||||
v-model="pageForm.year"
|
||||
value-format="yyyy"
|
||||
type="year"
|
||||
placeholder="选择年">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">计划名称:</div>
|
||||
<div class="search-item-option">
|
||||
<el-input v-model="pageForm.name" placeholder="请输入计划名称" clearable></el-input>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">工会名称:</div>
|
||||
<div class="search-item-option">
|
||||
<el-select v-model="pageForm.tissueId" placeholder="请选择工会" filterable clearable
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in unionList"
|
||||
:key="item.id"
|
||||
:label="item.unionname"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<template v-if="searchMore">
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">项目名称:</div>
|
||||
<div class="search-item-option">
|
||||
<el-select v-model="pageForm.eventId" placeholder="请选择活动项目" filterable clearable
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in eventList"
|
||||
:key="item.id"
|
||||
:label="item.allName"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
||||
<div class="search-query">
|
||||
<el-button type="primary" icon="el-icon-search" @click="pageData">搜索</el-button>
|
||||
<more v-model="searchMore"></more>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool label="计划列表" :app="this">
|
||||
<template #func>
|
||||
<el-button type="primary" icon="el-icon-edit-outline" size="small"
|
||||
@click="openAdd">
|
||||
创建活动计划
|
||||
</el-button>
|
||||
</template>
|
||||
</table-tool>
|
||||
|
||||
<el-table :data="tableData" style="width: 100%;margin-bottom: 20px" row-key="id"
|
||||
@sort-change="pageOrder" v-loading="tableLoading" :size="tableSize" class="vi-table">
|
||||
|
||||
<el-table-column align="center" header-align="center" type="index" :index="indexMethod" label="序号"
|
||||
width="80px"></el-table-column>
|
||||
|
||||
<el-table-column
|
||||
align="center"
|
||||
header-align="center"
|
||||
v-for="column in tableColumns"
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable">
|
||||
|
||||
<template v-if="column.prop=='carryOut'" scope="{row}">
|
||||
<span v-if="row.carryOut" class="text-success">已执行</span>
|
||||
<span v-if="!row.carryOut" class="text-primary">未执行</span>
|
||||
</template>
|
||||
|
||||
<template v-else-if="column.prop=='type'" scope="{row}">
|
||||
<span v-if="row.type==40001">分工会活动计划</span>
|
||||
<span v-if="row.type==40003">协会(社团)活动计划</span>
|
||||
<span v-if="row.type==40003">校工会活动计划</span>
|
||||
</template>
|
||||
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column prop="userOnline" align="center" header-align="center" label="操作" width="150px">
|
||||
<template scope="{row}">
|
||||
<el-dropdown @command="dropdownCommand">
|
||||
<el-button size="mini" :loading="row.loading">
|
||||
<i class="ti-settings"></i>
|
||||
<span class="ti-angle-down"></span>
|
||||
</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item :command="{type:'view',row}">
|
||||
查看
|
||||
</el-dropdown-item>
|
||||
<!--# if(!@shiro.hasRole('A06')){ #-->
|
||||
<el-dropdown-item :command="{type:'edit',row}">
|
||||
编辑
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'delete',row}">
|
||||
删除
|
||||
</el-dropdown-item>
|
||||
<!--# } #-->
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #edit_func>
|
||||
<el-button type="primary" @click="operation">确 定</el-button>
|
||||
</template>
|
||||
|
||||
<template #edit>
|
||||
<vi-title title="填写计划信息"></vi-title>
|
||||
<el-form :model="formData" ref="form" :rules="formRules" label-width="100px" label-position="left"
|
||||
label-suffix=":" style="padding: 0 2%">
|
||||
|
||||
<el-form-item prop="type" label="活动类型">
|
||||
<el-radio-group v-model="formData.type">
|
||||
<el-radio label="2" border>分工会活动计划</el-radio>
|
||||
<el-radio label="3" border>协会(社团)活动计划</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item prop="name" label="计划名称">
|
||||
<el-input maxlength="50" placeholder="请填写计划名称" v-model="formData.name"
|
||||
type="text"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item prop="time" label="计划时间">
|
||||
<el-date-picker
|
||||
v-model="formData.time"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="选择日期"
|
||||
style="width: 100%">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item prop="eventId" label="活动项目">
|
||||
<el-select v-model="formData.eventId" placeholder="请选择活动项目" filterable clearable
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in eventList"
|
||||
:key="item.id"
|
||||
:label="item.allName"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item prop="content" label="计划内容" class="is-required">
|
||||
<div id="content"></div>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<plan-info ref="info"></plan-info>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
let E = window.wangEditor
|
||||
const editors = {}
|
||||
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
let validContent = (rule, value, callback) => {
|
||||
if (!this.formData.content || !dd3s.html2txt(this.formData.content)) {
|
||||
callback(new Error('请填写计划内容'));
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
};
|
||||
return {
|
||||
unionList: [],
|
||||
eventList: [],
|
||||
flag: false,
|
||||
formData: {
|
||||
name: '',
|
||||
time: '',
|
||||
eventId: '',
|
||||
content: ''
|
||||
},
|
||||
tableColumns: [
|
||||
{prop: 'name', label: '计划名称'},
|
||||
{prop: 'time', label: '计划预计时间'},
|
||||
{prop: 'allName', label: '活动项目'},
|
||||
{prop: 'type', label: '类型'},
|
||||
{prop: 'carryOut', label: '计划状态'}
|
||||
],
|
||||
formRules: {
|
||||
type: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
name: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
time: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
eventId: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
content: [{validator: validContent, trigger: ['blur', 'change']}]
|
||||
},
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'plan-info': httpVueLoader('/components/activity/school/planInfo.vue'),
|
||||
},
|
||||
methods: {
|
||||
dropdownCommand(command) {
|
||||
const {type, row} = command
|
||||
if (type === 'view') {
|
||||
this.openView(row)
|
||||
} else if (type === 'edit') {
|
||||
this.openEdit(row)
|
||||
} else if (type === 'delete') {
|
||||
this.doDelete(row)
|
||||
}
|
||||
},
|
||||
openView(row) {
|
||||
const {id} = row
|
||||
this.$refs.info.getInfo(id)
|
||||
this.$refs.guava.view()
|
||||
},
|
||||
async openEdit(row) {
|
||||
this.flag = false
|
||||
row.type = row.type + ''
|
||||
this.formData = row
|
||||
this.$refs.guava.edit()
|
||||
this.$nextTick(() => {
|
||||
this.initEditor()
|
||||
})
|
||||
},
|
||||
async openAdd() {
|
||||
this.formData = {}
|
||||
this.flag = false
|
||||
this.$refs.guava.edit()
|
||||
this.$nextTick(() => {
|
||||
this.initEditor()
|
||||
if (this.$refs['form']) {
|
||||
this.$refs['form'].resetFields()
|
||||
}
|
||||
|
||||
this.formData = {
|
||||
type: '2',
|
||||
name: '',
|
||||
time: '',
|
||||
eventId: '',
|
||||
content: ''
|
||||
}
|
||||
})
|
||||
},
|
||||
async operation() {
|
||||
let url = this.formData.id ? "/doEdit" : "/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(loc() + url, {
|
||||
data: JSON.stringify(this.formData),
|
||||
})
|
||||
|
||||
closeLoadingFunc(loading, resp, async () => {
|
||||
this.pageData()
|
||||
this.$refs.guava.index()
|
||||
}, (data, msg) => {
|
||||
this.$notify.error(msg);
|
||||
})
|
||||
} else {
|
||||
this.$notify.error({title: '错误', message: '存在未填写的的必填项'});
|
||||
}
|
||||
});
|
||||
},
|
||||
doDelete(row) {
|
||||
const {id} = row
|
||||
this.$confirm('确定要删除该计划吗?', '提示', {type: 'warning'}).then(async () => {
|
||||
const resp = await $.post(loc() + "/doDelete", {id: id});
|
||||
|
||||
requestLaterMsgFun(vue, resp, () => {
|
||||
this.pageData()
|
||||
}, () => {
|
||||
this.$notify.error({title: '错误', message: resp.msg});
|
||||
})
|
||||
})
|
||||
},
|
||||
initEditor() {
|
||||
let keys = ['content']
|
||||
keys.forEach(key => {
|
||||
$("#" + key).html("")
|
||||
editors[key] = new E('#' + key)
|
||||
editors[key].config.onchange = (html) => {
|
||||
this.formData[key] = html
|
||||
}
|
||||
editors[key].create()
|
||||
if (this.formData[key]) {
|
||||
editors[key].txt.html(this.formData[key])
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.pageData()
|
||||
this.eventList = await activity.getEvents()
|
||||
this.unionList = await getUnions(null);
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,152 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<style>
|
||||
.el-descriptions__table {
|
||||
table-layout: fixed !important;
|
||||
}
|
||||
|
||||
.el-descriptions-item__cell {
|
||||
text-align: center !important;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<el-card shadow="never">
|
||||
<!--#include("/platform/activity/union/addPlanCommon.html"){}#-->
|
||||
</el-card>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
let E = window.wangEditor
|
||||
const editors = {}
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'plan-info': httpVueLoader('/components/activity/school/planInfo.vue'),
|
||||
},
|
||||
data() {
|
||||
let validContent = (rule, value, callback) => {
|
||||
if (!this.formData.content || !dd3s.html2txt(this.formData.content)) {
|
||||
callback(new Error('请填写计划内容'));
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
};
|
||||
return {
|
||||
activityTypeList: [],
|
||||
eventList: [],
|
||||
formData: {
|
||||
type: '40003',
|
||||
name: '',
|
||||
time: '',
|
||||
event: '',
|
||||
content: ''
|
||||
},
|
||||
formRules: {
|
||||
type: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
name: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
time: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
money: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
event: [{required: true, message: '必填', trigger: ['blur']}],
|
||||
activityType: [{required: true, message: '必填', trigger: ['blur']}],
|
||||
content: [{validator: validContent, trigger: ['blur', 'change']}]
|
||||
},
|
||||
id: '',
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
cancel() {
|
||||
if (this.id) {
|
||||
sublime.jumpPagePjax('/platform/activity/plan/club')
|
||||
}
|
||||
},
|
||||
doHandle() {
|
||||
let url = this.formData.id ? "/doEdit" : "/doAdd"
|
||||
this.$refs["form"].validate(async (valid) => {
|
||||
if (valid) {
|
||||
|
||||
const resp = await $.post('/platform/activity/plan' + url, {
|
||||
id: this.formData.id,
|
||||
name: this.formData.name,
|
||||
time: this.formData.time,
|
||||
content: this.formData.content,
|
||||
money: this.formData.money,
|
||||
event: JSON.stringify(this.formData.event),
|
||||
type: '40003',
|
||||
activityType: this.formData.activityType,
|
||||
})
|
||||
|
||||
if (resp.code === 0) {
|
||||
this.$notify({
|
||||
title: '成功',
|
||||
message: resp.msg,
|
||||
type: 'success',
|
||||
duration: 500,
|
||||
onClose: () => {
|
||||
sublime.jumpPagePjax('/platform/activity/plan/club')
|
||||
}
|
||||
});
|
||||
}
|
||||
} else {
|
||||
this.$notify.error({title: '错误', message: '存在未填写的的必填项'});
|
||||
}
|
||||
});
|
||||
},
|
||||
initEditor() {
|
||||
let keys = ['content']
|
||||
keys.forEach(key => {
|
||||
$("#" + key).html("")
|
||||
editors[key] = new E('#' + key)
|
||||
editors[key].config.onchange = (html) => {
|
||||
this.formData[key] = html
|
||||
}
|
||||
editors[key].create()
|
||||
if (this.formData[key]) {
|
||||
editors[key].txt.html(this.formData[key])
|
||||
}
|
||||
})
|
||||
},
|
||||
async getEvents() {
|
||||
const {code, data, msg} = await $.get("/platform/activity/common/getEvents")
|
||||
return data
|
||||
},
|
||||
async getActivityType() {
|
||||
const {code, data, msg} = await $.get("/platform/activity/common/getActivityType")
|
||||
return data
|
||||
},
|
||||
async initData() {
|
||||
const id = GetQueryString("id")
|
||||
this.id = id
|
||||
if (id) {
|
||||
const resp = await $.post('/platform/activity/plan/findOne', {id})
|
||||
if (resp.code === 0) {
|
||||
const cloneRow = clone(resp.data)
|
||||
cloneRow.event = JSON.parse(cloneRow.event)
|
||||
this.formData = cloneRow
|
||||
this.$nextTick(() => {
|
||||
this.initEditor()
|
||||
})
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
const self = this
|
||||
setTimeout(function () {
|
||||
self.initEditor()
|
||||
}, 100)
|
||||
//this.eventList = await this.getEvents()
|
||||
this.activityTypeList = await this.getActivityType()
|
||||
await this.initData()
|
||||
},
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,65 @@
|
||||
<vi-title title="填写计划信息"></vi-title>
|
||||
<el-form :model="formData" ref="form" :rules="formRules" label-width="100px" label-position="left"
|
||||
label-suffix=":" style="padding: 0 2%">
|
||||
|
||||
<!-- <el-form-item prop="type" label="活动类型">
|
||||
<el-radio-group v-model="formData.type">
|
||||
<el-radio label="2" border>分工会活动计划</el-radio>
|
||||
<el-radio label="3" border>协会(社团)活动计划</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>-->
|
||||
|
||||
<el-form-item prop="name" label="计划名称">
|
||||
<el-input maxlength="50" placeholder="请填写计划名称" v-model="formData.name"
|
||||
type="text"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item prop="time" label="活动时间">
|
||||
<el-date-picker
|
||||
v-model="formData.time"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="选择日期"
|
||||
style="width: 100%">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
|
||||
<!--<el-form-item prop="event" label="活动项目">
|
||||
<!–<el-input maxlength="50" placeholder="请填写活动项目" v-model="formData.event"
|
||||
type="text"></el-input>–>
|
||||
<el-select v-model="formData.event" placeholder="请选择活动项目" filterable clearable multiple
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in eventList"
|
||||
:key="item.id"
|
||||
:label="item.allName"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>-->
|
||||
|
||||
<el-form-item prop="activityType" label="活动类型">
|
||||
<el-select v-model="formData.activityType" placeholder="请选择活动类型" filterable clearable
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in activityTypeList"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item prop="money" label="预算费用" class="is-required">
|
||||
<el-input maxlength="50" placeholder="请填写整数或者小数" v-model="formData.money"
|
||||
type="number"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item prop="content" label="计划内容" class="is-required">
|
||||
<div id="content"></div>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-row class="mt10" justify="end" type="flex">
|
||||
<el-button @click="cancel">取消</el-button>
|
||||
<el-button @click="doHandle" type="primary">提交</el-button>
|
||||
</el-row>
|
||||
@@ -0,0 +1,152 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<style>
|
||||
.el-descriptions__table {
|
||||
table-layout: fixed !important;
|
||||
}
|
||||
|
||||
.el-descriptions-item__cell {
|
||||
text-align: center !important;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<el-card shadow="never">
|
||||
<!--#include("/platform/activity/union/addPlanCommon.html"){}#-->
|
||||
</el-card>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
let E = window.wangEditor
|
||||
const editors = {}
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'plan-info': httpVueLoader('/components/activity/school/planInfo.vue'),
|
||||
},
|
||||
data() {
|
||||
let validContent = (rule, value, callback) => {
|
||||
if (!this.formData.content || !dd3s.html2txt(this.formData.content)) {
|
||||
callback(new Error('请填写计划内容'));
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
};
|
||||
return {
|
||||
activityTypeList: [],
|
||||
eventList: [],
|
||||
formData: {
|
||||
type: '40001',
|
||||
name: '',
|
||||
time: '',
|
||||
event: '',
|
||||
content: ''
|
||||
},
|
||||
formRules: {
|
||||
type: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
name: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
time: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
money: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
event: [{required: true, message: '必填', trigger: ['blur']}],
|
||||
activityType: [{required: true, message: '必填', trigger: ['blur']}],
|
||||
content: [{validator: validContent, trigger: ['blur', 'change']}]
|
||||
},
|
||||
id: '',
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
cancel() {
|
||||
if (this.id) {
|
||||
sublime.jumpPagePjax('/platform/activity/plan/school')
|
||||
}
|
||||
},
|
||||
doHandle() {
|
||||
let url = this.formData.id ? "/doEdit" : "/doAdd"
|
||||
this.$refs["form"].validate(async (valid) => {
|
||||
if (valid) {
|
||||
|
||||
const resp = await $.post('/platform/activity/plan' + url, {
|
||||
id: this.formData.id,
|
||||
name: this.formData.name,
|
||||
time: this.formData.time,
|
||||
content: this.formData.content,
|
||||
money: this.formData.money,
|
||||
event: JSON.stringify(this.formData.event),
|
||||
type: '40001',
|
||||
activityType: this.formData.activityType,
|
||||
})
|
||||
|
||||
if (resp.code === 0) {
|
||||
this.$notify({
|
||||
title: '成功',
|
||||
message: resp.msg,
|
||||
type: 'success',
|
||||
duration: 500,
|
||||
onClose: () => {
|
||||
sublime.jumpPagePjax('/platform/activity/plan/school')
|
||||
}
|
||||
});
|
||||
}
|
||||
} else {
|
||||
this.$notify.error({title: '错误', message: '存在未填写的的必填项'});
|
||||
}
|
||||
});
|
||||
},
|
||||
initEditor() {
|
||||
let keys = ['content']
|
||||
keys.forEach(key => {
|
||||
$("#" + key).html("")
|
||||
editors[key] = new E('#' + key)
|
||||
editors[key].config.onchange = (html) => {
|
||||
this.formData[key] = html
|
||||
}
|
||||
editors[key].create()
|
||||
if (this.formData[key]) {
|
||||
editors[key].txt.html(this.formData[key])
|
||||
}
|
||||
})
|
||||
},
|
||||
async getEvents() {
|
||||
const {code, data, msg} = await $.get("/platform/activity/common/getEvents")
|
||||
return data
|
||||
},
|
||||
async getActivityType() {
|
||||
const {code, data, msg} = await $.get("/platform/activity/common/getActivityType")
|
||||
return data
|
||||
},
|
||||
async initData() {
|
||||
const id = GetQueryString("id")
|
||||
this.id = id
|
||||
if (id) {
|
||||
const resp = await $.post('/platform/activity/plan/findOne', {id})
|
||||
if (resp.code === 0) {
|
||||
const cloneRow = clone(resp.data)
|
||||
cloneRow.event = JSON.parse(cloneRow.event)
|
||||
this.formData = cloneRow
|
||||
this.$nextTick(() => {
|
||||
this.initEditor()
|
||||
})
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
const self = this
|
||||
setTimeout(function () {
|
||||
self.initEditor()
|
||||
}, 100)
|
||||
//this.eventList = await this.getEvents()
|
||||
this.activityTypeList = await this.getActivityType()
|
||||
await this.initData()
|
||||
},
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,152 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<style>
|
||||
.el-descriptions__table {
|
||||
table-layout: fixed !important;
|
||||
}
|
||||
|
||||
.el-descriptions-item__cell {
|
||||
text-align: center !important;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<el-card shadow="never">
|
||||
<!--#include("/platform/activity/union/addPlanCommon.html"){}#-->
|
||||
</el-card>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
let E = window.wangEditor
|
||||
const editors = {}
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'plan-info': httpVueLoader('/components/activity/school/planInfo.vue'),
|
||||
},
|
||||
data() {
|
||||
let validContent = (rule, value, callback) => {
|
||||
if (!this.formData.content || !dd3s.html2txt(this.formData.content)) {
|
||||
callback(new Error('请填写计划内容'));
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
};
|
||||
return {
|
||||
activityTypeList: [],
|
||||
eventList: [],
|
||||
formData: {
|
||||
type: '40002',
|
||||
name: '',
|
||||
time: '',
|
||||
event: '',
|
||||
content: ''
|
||||
},
|
||||
formRules: {
|
||||
type: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
name: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
time: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
money: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
event: [{required: true, message: '必填', trigger: ['blur']}],
|
||||
activityType: [{required: true, message: '必填', trigger: ['blur']}],
|
||||
content: [{validator: validContent, trigger: ['blur', 'change']}]
|
||||
},
|
||||
id: '',
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
cancel() {
|
||||
if (this.id) {
|
||||
sublime.jumpPagePjax('/platform/activity/plan/union')
|
||||
}
|
||||
},
|
||||
doHandle() {
|
||||
let url = this.formData.id ? "/doEdit" : "/doAdd"
|
||||
this.$refs["form"].validate(async (valid) => {
|
||||
if (valid) {
|
||||
|
||||
const resp = await $.post('/platform/activity/plan' + url, {
|
||||
id: this.formData.id,
|
||||
name: this.formData.name,
|
||||
time: this.formData.time,
|
||||
content: this.formData.content,
|
||||
money: this.formData.money,
|
||||
event: JSON.stringify(this.formData.event),
|
||||
type: '40002',
|
||||
activityType: this.formData.activityType,
|
||||
})
|
||||
|
||||
if (resp.code === 0) {
|
||||
this.$notify({
|
||||
title: '成功',
|
||||
message: resp.msg,
|
||||
type: 'success',
|
||||
duration: 500,
|
||||
onClose: () => {
|
||||
sublime.jumpPagePjax('/platform/activity/plan/union')
|
||||
}
|
||||
});
|
||||
}
|
||||
} else {
|
||||
this.$notify.error({title: '错误', message: '存在未填写的的必填项'});
|
||||
}
|
||||
});
|
||||
},
|
||||
initEditor() {
|
||||
let keys = ['content']
|
||||
keys.forEach(key => {
|
||||
$("#" + key).html("")
|
||||
editors[key] = new E('#' + key)
|
||||
editors[key].config.onchange = (html) => {
|
||||
this.formData[key] = html
|
||||
}
|
||||
editors[key].create()
|
||||
if (this.formData[key]) {
|
||||
editors[key].txt.html(this.formData[key])
|
||||
}
|
||||
})
|
||||
},
|
||||
async getEvents() {
|
||||
const {code, data, msg} = await $.get("/platform/activity/common/getEvents")
|
||||
return data
|
||||
},
|
||||
async getActivityType() {
|
||||
const {code, data, msg} = await $.get("/platform/activity/common/getActivityType")
|
||||
return data
|
||||
},
|
||||
async initData() {
|
||||
const id = GetQueryString("id")
|
||||
this.id = id
|
||||
if (id) {
|
||||
const resp = await $.post('/platform/activity/plan/findOne', {id})
|
||||
if (resp.code === 0) {
|
||||
const cloneRow = clone(resp.data)
|
||||
cloneRow.event = JSON.parse(cloneRow.event)
|
||||
this.formData = cloneRow
|
||||
this.$nextTick(() => {
|
||||
this.initEditor()
|
||||
})
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
const self = this
|
||||
setTimeout(function () {
|
||||
self.initEditor()
|
||||
}, 100)
|
||||
//this.eventList = await this.getEvents()
|
||||
this.activityTypeList = await this.getActivityType()
|
||||
await this.initData()
|
||||
},
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,786 @@
|
||||
<style>
|
||||
.avatar-uploader .el-upload {
|
||||
border: 1px dashed #d9d9d9;
|
||||
border-radius: 6px;
|
||||
cursor: pointer;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.avatar-uploader .el-upload:hover {
|
||||
border-color: #409EFF;
|
||||
}
|
||||
|
||||
.avatar-uploader-icon {
|
||||
font-size: 28px;
|
||||
color: #8c939d;
|
||||
width: 178px;
|
||||
height: 178px;
|
||||
line-height: 178px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.avatar {
|
||||
width: 178px;
|
||||
height: 178px;
|
||||
display: block;
|
||||
}
|
||||
|
||||
#signMap .amap-icon img {
|
||||
position: absolute !important;
|
||||
width: 100% !important;
|
||||
height: 100% !important;
|
||||
top: 0 !important;
|
||||
left: 0 !important;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<el-card shadow="never" style="min-height: calc(100vh - 70px);position: relative">
|
||||
<el-form :model="formData" ref="addForm" :rules="formRules" label-width="130px"
|
||||
label-suffix=":">
|
||||
<el-tabs tab-position="top" v-model="activeName">
|
||||
<el-tab-pane label="活动基础信息" name="1">
|
||||
<vi-title title="填写活动信息"></vi-title>
|
||||
|
||||
<el-row :gutter="40">
|
||||
<el-col :xs="24" :lg="12" :xl="12">
|
||||
<el-form-item prop="name" label="活动名称">
|
||||
<el-input maxlength="50" placeholder="请填写活动名称" v-model="formData.name"
|
||||
type="text"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :lg="12" :xl="12">
|
||||
<el-form-item prop="activityCode" label="活动编号">
|
||||
<el-input maxlength="50" disabled v-model="formData.activityCode"
|
||||
type="text"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :xs="24" :lg="12" :xl="12">
|
||||
<el-form-item prop="projectTypeCode" label="活动项目类型">
|
||||
<el-select v-model="formData.projectTypeCode" placeholder="请选择活动类型"
|
||||
style="width: 100%;">
|
||||
<el-option
|
||||
v-for="item in projectType"
|
||||
:key="item.id"
|
||||
:label="item.name+' ('+item.code+')'"
|
||||
:value="item.code">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :xs="24" :lg="12" :xl="12">
|
||||
<el-form-item prop="address" label="活动地址">
|
||||
<el-input maxlength="50" placeholder="请填写活动地址" v-model="formData.address"
|
||||
type="text"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :xs="24" :lg="12" :xl="12">
|
||||
<el-form-item prop="userId" label="联系人">
|
||||
<el-select v-model="formData.userId" placeholder="请选择联系人"
|
||||
filterable
|
||||
remote
|
||||
clearable
|
||||
reserve-keyword
|
||||
:remote-method="remoteMethod"
|
||||
:loading="selectLoading"
|
||||
style="width: 100%" @change="userChang">
|
||||
<el-option
|
||||
v-for="item in userList"
|
||||
:key="item.userId"
|
||||
:label="item.userName+'-'+item.loginName+'-'+item.unitName"
|
||||
:value="item.userId">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :lg="12" :xl="12">
|
||||
<el-form-item prop="mobile" label="联系方式">
|
||||
<el-input maxlength="50" placeholder="请填写联系方式" v-model="formData.mobile"
|
||||
type="text"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :xs="24" :lg="12" :xl="12">
|
||||
<el-form-item prop="plannedDate" label="活动计划时间">
|
||||
<!--<el-input maxlength="50" placeholder="活动计划时间"
|
||||
v-model="formData.plannedDate"></el-input>-->
|
||||
<el-date-picker
|
||||
style="width: 100%"
|
||||
v-model="formData.plannedDate"
|
||||
type="daterange"
|
||||
value-format="yyyy-MM-dd"
|
||||
range-separator="-"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期" @change="plannedDateChange">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :xs="24" :lg="12" :xl="12">
|
||||
<el-form-item prop="time" label="实际活动时间">
|
||||
<el-date-picker
|
||||
style="width: 100%"
|
||||
v-model="formData.time"
|
||||
type="daterange"
|
||||
value-format="yyyy-MM-dd"
|
||||
range-separator="-"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :xs="24" :lg="12" :xl="12">
|
||||
<el-form-item
|
||||
:rules="[{required:[1,2].includes(formData.signUpMethod),message:'请选择报名日期',trigger:['change','blur']}]"
|
||||
label="报名日期"
|
||||
prop="applyTime2">
|
||||
<el-date-picker
|
||||
style="width: 100%"
|
||||
v-model="formData.applyTime2"
|
||||
type="datetimerange"
|
||||
value-format="yyyy-MM-dd HH:mm"
|
||||
range-separator="-"
|
||||
start-placeholder="开始时间"
|
||||
end-placeholder="结束时间">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :xs="24" :lg="12" :xl="12">
|
||||
<el-form-item prop="peopleNum" label="活动人数">
|
||||
<el-input maxlength="10" placeholder="请填写活动人数"
|
||||
:disabled="[1,2].includes(formData.signUpMethod)"
|
||||
v-model="formData.peopleNum"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :xs="24" :lg="12" :xl="12">
|
||||
<el-form-item prop="groupId" label="参加人员范围">
|
||||
<el-select placeholder="参加人员范围" v-model="formData.groupId" style="width: 100%;"
|
||||
@change="groupIdChange"
|
||||
clearable
|
||||
filterable>
|
||||
<el-option v-for="item in activityGroupList" :label="item.groupName"
|
||||
:value="item.groupId"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :lg="12" :xl="12" :xs="24">
|
||||
<el-form-item prop="signUpMethod" label="报名方式">
|
||||
<el-radio-group v-model="formData.signUpMethod" @change="signUpMethodChange">
|
||||
<el-radio :label="null">无需报名</el-radio>
|
||||
<el-radio :label="1">个人报名</el-radio>
|
||||
<el-radio :label="2" v-if="type===40001">分工会报名</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :xs="12" :lg="12" :xl="12" v-if="[1,2].includes(formData.signUpMethod)">
|
||||
<el-form-item prop="userNumberLimit" label="报名人数限制">
|
||||
<el-radio-group v-model="formData.userNumberLimit">
|
||||
<el-radio :label="1" :disabled="formData.signUpMethod===2">总人数限制</el-radio>
|
||||
<el-radio :label="2" v-if="type===40001">分工会人数限制</el-radio>
|
||||
<el-radio :label="null">不限制</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :xs="12" :lg="12" :xl="12"
|
||||
v-if="[1,2].includes(formData.signUpMethod) && formData.userNumberLimit===1">
|
||||
<el-form-item prop="totalUserNumberLimit" label="总人数限制">
|
||||
<el-input-number v-model="formData.totalUserNumberLimit" :min="1" :max="2000"
|
||||
:precision="0"
|
||||
></el-input-number>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="24"
|
||||
v-if="[1,2].includes(formData.signUpMethod) && formData.userNumberLimit===2">
|
||||
<el-form-item prop="unionUserNumberLimit" label="分工会人数限制">
|
||||
<el-table border stripe :data="formData.unionUserNumberLimit" size="small"
|
||||
height="500">
|
||||
<el-table-column type="index" label="序号" header-align="center" align="center"
|
||||
width="100">
|
||||
</el-table-column>
|
||||
<el-table-column label="分工会名称" prop="unionName"></el-table-column>
|
||||
<el-table-column label="分工会人数" prop="unionNum"></el-table-column>
|
||||
<el-table-column label="限制人数" prop="limitNum">
|
||||
<template slot-scope="{row}">
|
||||
<el-input-number v-model="row.limitNum" :min="1" :max="row.unionNum"
|
||||
:precision="0"
|
||||
></el-input-number>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12" v-if="[1,2].includes(formData.signUpMethod)">
|
||||
<el-form-item label="是否需要签到">
|
||||
<el-radio-group v-model="formData.needSign"
|
||||
@change="(val)=>{formData.needSign?initMap():null}">
|
||||
<el-radio :label="true">需要</el-radio>
|
||||
<el-radio :label="false">不需要</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12" v-if="formData.needSign">
|
||||
<el-form-item label="签到半径(m)">
|
||||
<el-input-number v-model="formData.rangeMeter"
|
||||
@change="rangeMeterChange"
|
||||
:precision="0" :step="1"
|
||||
:min="50"
|
||||
:max="1000"></el-input-number>
|
||||
<!-- <el-button type="primary" @click="marker.setMap(null);">清除点位</el-button>-->
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
<el-col :span="24" v-show="formData.needSign">
|
||||
<el-form-item label="活动签到点位">
|
||||
<el-card shadow="never">
|
||||
<div style="width: 100%;height: 300px" id="signMap"></div>
|
||||
</el-card>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item prop="activityContent" label="活动内容">
|
||||
<el-input
|
||||
type="textarea"
|
||||
:rows="7"
|
||||
placeholder="请输入活动内容"
|
||||
v-model="formData.activityContent">
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item prop="activityExamineContent" label="活动考核内容">
|
||||
<el-input
|
||||
type="textarea"
|
||||
:rows="7"
|
||||
placeholder="请输入活动考核内容"
|
||||
v-model="formData.activityExamineContent">
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="24" v-if="formData.signUpMethod!=null">
|
||||
<el-form-item prop="cover" label="封面图">
|
||||
<el-upload
|
||||
class="avatar-uploader"
|
||||
:action="FILE_UPLOAD_ADDRESS"
|
||||
:show-file-list="false"
|
||||
:on-success="handleAvatarSuccess"
|
||||
:before-upload="beforeAvatarUpload">
|
||||
<img v-if="formData.cover"
|
||||
:src="FILE_DOMAIN + '/fileStreamPreview?id=' + formData.cover"
|
||||
class="avatar">
|
||||
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
|
||||
</el-upload>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
|
||||
</el-tab-pane>
|
||||
|
||||
<el-tab-pane label="活动费用" name="2">
|
||||
<div style="display: flex;margin: 20px 0">
|
||||
<el-divider content-position="left">购置物品及价格</el-divider>
|
||||
|
||||
<div style="padding-left: 10px">
|
||||
<el-tooltip class="item" effect="dark" content="点击添加购置物品及价格" placement="top">
|
||||
<el-button icon="el-icon-plus" circle @click="formData.goods.push({})"
|
||||
type="primary"></el-button>
|
||||
</el-tooltip>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<el-form-item>
|
||||
<el-table :data="formData.goods" border size="mini" style="width: 100%" height="200">
|
||||
|
||||
<el-table-column sortable type="index" width="100" label="序号"
|
||||
align="center" header-align="center">
|
||||
</el-table-column>
|
||||
<el-table-column prop="name" label="物品名称" align="center"
|
||||
header-align="center">
|
||||
<template slot-scope="{row}">
|
||||
<el-input maxlength="50" placeholder="物品名称" v-model="row.name"
|
||||
type="text"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="price" label="预算费用" align="center"
|
||||
header-align="center">
|
||||
<template slot-scope="{row}">
|
||||
<el-input maxlength="50" placeholder="预算费用" v-model="row.price"
|
||||
type="number" @input="blur"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="actualPrice" label="实际费用" align="center"
|
||||
header-align="center">
|
||||
<template slot-scope="{row}">
|
||||
<el-input maxlength="50" placeholder="实际费用" v-model="row.actualPrice"
|
||||
type="number" @input="blur"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" fixed="right" align="center" header-align="center"
|
||||
width="80px"
|
||||
fixed="right">
|
||||
<template slot-scope="scope">
|
||||
<el-button type="danger" icon="el-icon-delete" circle
|
||||
:disabled="formData.goods.length==0"
|
||||
@click="delNotesItem(scope)"></el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form-item>
|
||||
|
||||
<el-divider content-position="left" class="dia"><span style="color: #3ea1ec;">附件</span>
|
||||
</el-divider>
|
||||
<el-row :gutter="40">
|
||||
|
||||
<el-col :xs="24" :lg="12" :xl="12" class="mb25">
|
||||
<el-form-item prop="billFiles" label="发票">
|
||||
<file-upload :files.sync="formData.billFiles" card></file-upload>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :lg="12" :xl="12" class="mb25">
|
||||
<el-form-item prop="photoFiles" label="照片">
|
||||
<file-upload :files.sync="formData.photoFiles" card></file-upload>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
|
||||
<el-row>
|
||||
<el-col :xs="24" :lg="12" :xl="12">
|
||||
<el-form-item prop="otherFiles" label="其他">
|
||||
<file-upload :files.sync="formData.otherFiles" card></file-upload>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
</el-tab-pane>
|
||||
|
||||
<el-tab-pane label="活动人员信息" name="3">
|
||||
<table-tool label="活动人员信息" :app="this">
|
||||
<template #func>
|
||||
<el-button icon="el-icon-plus" @click="openAddUser"
|
||||
type="primary">添加活动人员
|
||||
</el-button>
|
||||
</template>
|
||||
</table-tool>
|
||||
<el-table border stripe :data="userData" size="small"
|
||||
v-loading="userTabLoading" height="500">
|
||||
<el-table-column
|
||||
type="index" label="序号" header-align="center" align="center"
|
||||
width="100">
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column
|
||||
align="center"
|
||||
header-align="center"
|
||||
v-for="column in userColumns"
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable">
|
||||
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column prop="userOnline" align="center" header-align="center"
|
||||
label="操作"
|
||||
width="150px">
|
||||
<template scope="{row}">
|
||||
<el-button type="danger" size="mini"
|
||||
@click="delUser(row)">删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
</el-table>
|
||||
</el-tab-pane>
|
||||
|
||||
<el-tab-pane label="活动总结" name="4">
|
||||
<el-form-item prop="activitySummary" label="活动总结">
|
||||
<el-input
|
||||
:disabled="!formData.time || Date.now() < Date.parse(formData.time[1])"
|
||||
type="textarea"
|
||||
:rows="5"
|
||||
placeholder="请输入活动内容"
|
||||
v-model="formData.activitySummary">
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-alert
|
||||
class="mb20"
|
||||
style="margin-left: 130px"
|
||||
v-if="!formData.time || Date.now() < Date.parse(formData.time[1])"
|
||||
show-icon
|
||||
title="活动结束后可输入活动总结"
|
||||
type="info">
|
||||
</el-alert>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</el-form>
|
||||
<div style="padding: 20px;text-align: center;">
|
||||
<el-button type="primary" @click="operation" style="width: 300px">确 定</el-button>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
</guava>
|
||||
|
||||
<el-dialog title="添加人员" :visible.sync="dialogVisible" width="40%" :close-on-click-modal="false">
|
||||
|
||||
<el-form :model="formData" label-width="100px">
|
||||
<el-form-item prop="userId" label="参加人员">
|
||||
<el-select v-model="formData.tissuePersonList" placeholder="请选择参加人员"
|
||||
multiple
|
||||
filterable
|
||||
remote
|
||||
:remote-method="remoteMethod"
|
||||
:loading="selectLoading"
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in userList"
|
||||
:disabled="userData.map(v=>v.userId).includes(item.userId)"
|
||||
:key="item.userId"
|
||||
:label="item.userName+'-'+item.loginName+'-'+item.unitName"
|
||||
:value="item.userId">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="doAddUser">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
let marker = null
|
||||
let map = null
|
||||
let circle = null
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
activeName: '1',
|
||||
actvivtyUrl: "/platform/activity/info/mange",
|
||||
selectLoading: false,
|
||||
userTabLoading: false,
|
||||
dialogVisible: false,
|
||||
userData: [],
|
||||
userList: [],
|
||||
unionList: [],
|
||||
projectType: [],
|
||||
pageForm: {
|
||||
type: type,
|
||||
year: new Date().getFullYear() + ''
|
||||
},
|
||||
formRules: {
|
||||
groupId: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
name: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
type: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
projectTypeCode: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
address: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
plannedDate: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
},
|
||||
userColumns: [
|
||||
{prop: 'userName', label: '姓名'},
|
||||
{prop: 'loginName', label: '工号'},
|
||||
{prop: 'sex', label: '性别'},
|
||||
{prop: 'mobile', label: '联系方式'},
|
||||
{prop: 'unitName', label: '所属单位'},
|
||||
{prop: 'unionName', label: '所属工会'}
|
||||
],
|
||||
/*ZXY - ADD*/
|
||||
activityGroupList: []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
beforeAvatarUpload(file) {
|
||||
const isLt4M = file.size / 1024 / 1024 / 1024 / 1024 < 2;
|
||||
if (!isLt4M) {
|
||||
this.$message.warning('上传头像图片大小不能超过 4MB!');
|
||||
}
|
||||
return isLt4M;
|
||||
},
|
||||
rangeMeterChange(val) {
|
||||
if (!marker || !this.formData.location || !Array.isArray(this.formData.location)) {
|
||||
return
|
||||
}
|
||||
const lng = parseFloat(this.formData.location[0])
|
||||
const lat = parseFloat(this.formData.location[1])
|
||||
if (circle) {
|
||||
map.remove(circle)
|
||||
circle = null
|
||||
}
|
||||
circle = new AMap.Circle({
|
||||
center: new AMap.LngLat(lng, lat), // 圆心位置
|
||||
radius: val, //半径
|
||||
strokeColor: "#F33", //线颜色
|
||||
strokeOpacity: 1, //线透明度
|
||||
strokeWeight: 1, //线粗细度
|
||||
fillColor: "#ee2200", //填充颜色
|
||||
fillOpacity: 0.35 //填充透明度
|
||||
})
|
||||
map.add(circle)
|
||||
map.setFitView()
|
||||
},
|
||||
|
||||
async handleAvatarSuccess(res, file) {
|
||||
this.$set(this.formData, 'cover', res.data.filepath)
|
||||
await this.$refs['addForm'].validate()
|
||||
},
|
||||
plannedDateChange(val) {
|
||||
this.$set(this.formData, "time", val)
|
||||
},
|
||||
userChang(val) {
|
||||
this.$set(this.formData, "mobile", val ? this.userList.find(v => v.userId === val).mobile : null)
|
||||
},
|
||||
delNotesItem(scope) {
|
||||
this.delNotesList.push(scope.row.id)
|
||||
this.formData.goods.splice(scope.$index, 1)
|
||||
},
|
||||
async remoteMethod(query) {
|
||||
if (query) {
|
||||
this.selectLoading = true;
|
||||
const {data} = await $.post(this.actvivtyUrl + "/findUser", {
|
||||
serachWord: query,
|
||||
activity_type: type
|
||||
})
|
||||
this.userList = data
|
||||
this.selectLoading = false;
|
||||
}
|
||||
},
|
||||
openAddUser() {
|
||||
this.formData.tissuePersonList = []
|
||||
this.dialogVisible = true
|
||||
},
|
||||
doAddUser() {
|
||||
this.formData.tissuePersonList = this.userList.filter(v => this.formData.tissuePersonList.some(x => v.userId === x))
|
||||
this.userData = this.userData.concat(this.formData.tissuePersonList)
|
||||
this.dialogVisible = false
|
||||
},
|
||||
async delUser(row) {
|
||||
this.userData.splice(this.userData.indexOf(row.userId), 1)
|
||||
this.formData.tissuePersonList.splice(this.formData.tissuePersonList.indexOf(row.userId), 1)
|
||||
|
||||
// const confirm = await this.$confirm('您确定要删除吗?', '提示', {
|
||||
// confirmButtonText: '确定',
|
||||
// cancelButtonText: '取消',
|
||||
// type: 'warning'
|
||||
// })
|
||||
// if (confirm === 'confirm') {
|
||||
// this.userData.splice(this.userData.indexOf(row.userId), 1)
|
||||
// this.formData.tissuePersonList.splice(this.formData.tissuePersonList.indexOf(row.userId), 1)
|
||||
// const resp = await $.post('/platform/activity/apply/doDeleteActivityRegister', {
|
||||
// activityId: row.tissueId,
|
||||
// userId: row.userId
|
||||
// })
|
||||
// }
|
||||
},
|
||||
async groupIdChange(val) {
|
||||
const resp = await $.get('/platform/activity/apply/getUnionData', {activityScopeGroupId: val})
|
||||
this.formData.unionUserNumberLimit = resp.data
|
||||
},
|
||||
|
||||
async operation() {
|
||||
if (this.formData.applyTime2 && this.formData.applyTime2.length > 0) {
|
||||
if (moment(this.formData.time[0]).valueOf() <= moment(this.formData.applyTime2[0]).valueOf()) {
|
||||
this.$notify.error({title: '错误', message: '活动时间必须晚于报名时间'});
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
let url = this.formData.id ? "/doEdit" : "/doAdd"
|
||||
this.$refs["addForm"].validate(async (valid) => {
|
||||
if (valid) {
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '正在提交...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: COVER_LAYER_COLOR
|
||||
});
|
||||
|
||||
const formData = JSON.parse(JSON.stringify(this.formData))
|
||||
formData.type = this.pageForm.type
|
||||
formData.apply_type = 1
|
||||
const {time, applyTime2, plannedDate} = formData
|
||||
if (applyTime2 && applyTime2.length) {
|
||||
formData.applyStartTime = applyTime2[0]
|
||||
formData.applyEndTime = applyTime2[1]
|
||||
formData.applyTime2 = undefined
|
||||
}
|
||||
if (time && time.length) {
|
||||
formData.startTime = formData.time[0]
|
||||
formData.endTime = formData.time[1]
|
||||
formData.time = undefined
|
||||
}
|
||||
if (plannedDate && plannedDate.length) {
|
||||
formData.startPlannedDate = formData.plannedDate[0]
|
||||
formData.endPlannedDate = formData.plannedDate[1]
|
||||
formData.plannedDate = undefined
|
||||
}
|
||||
|
||||
const resp = await $.post(this.actvivtyUrl + url, {tissue: JSON.stringify(formData)})
|
||||
|
||||
closeLoadingFunc(loading, resp, async () => {
|
||||
if (type === 40002) {
|
||||
window.location = "/platform/activity/info/mange/union"
|
||||
} else if (type === 40003) {
|
||||
window.location = "/platform/activity/info/mange/club"
|
||||
} else {
|
||||
window.location = "/platform/activity/info/mange/school"
|
||||
}
|
||||
}, (data, msg) => {
|
||||
this.$notify.error({title: '错误', message: msg});
|
||||
})
|
||||
} else {
|
||||
this.$notify.error({title: '错误', message: '存在未填写的的必填项'});
|
||||
}
|
||||
});
|
||||
},
|
||||
async init() {
|
||||
this.delNotesList = []
|
||||
this.formData = {
|
||||
time: [],
|
||||
applyTime2: [],
|
||||
plannedDate: [],
|
||||
goods: [],
|
||||
billFiles: [],
|
||||
photoFiles: [],
|
||||
otherFiles: [],
|
||||
tissuePersonList: [],
|
||||
unionUserNumberLimit: [],
|
||||
signUpMethod: null,
|
||||
rangerMeter: 100
|
||||
}
|
||||
const {data} = await $.get('/platform/activity/apply/generateActivityCode', {activity_type: type})
|
||||
this.$set(this.formData, 'activityCode', data)
|
||||
this.unionList = await getUnions(null)
|
||||
const resp = await $.get('/platform/activity/apply/getUnionData', {activityScopeGroupId: this.formData.groupId})
|
||||
this.formData.unionUserNumberLimit = resp.data
|
||||
await this.initMap()
|
||||
},
|
||||
async findOne(id) {
|
||||
const resp = await $.post(this.actvivtyUrl + "/findOne", {id})
|
||||
requestLaterFun(resp, async (data) => {
|
||||
if (data.userId) {
|
||||
const user = await queryUserByIds([data.userId])
|
||||
await this.remoteMethod(user[0].loginname)
|
||||
}
|
||||
data.type = data.type + ''
|
||||
if (data.billFiles && data.billFiles.length > 0) data.billFiles = JSON.parse(data.billFiles)
|
||||
if (data.photoFiles && data.photoFiles.length > 0) data.photoFiles = JSON.parse(data.photoFiles)
|
||||
if (data.otherFiles && data.otherFiles.length > 0) data.otherFiles = JSON.parse(data.otherFiles)
|
||||
if (data.applyStartTime) data.applyTime2 = [data.applyStartTime, data.applyEndTime]
|
||||
if (data.startTime) data.time = [data.startTime, data.endTime]
|
||||
if (data.startPlannedDate) data.plannedDate = [data.startPlannedDate, data.endPlannedDate]
|
||||
this.userData = clone(data.tissuePersonList)
|
||||
console.log(data)
|
||||
data.unionUserNumberLimit = JSON.parse(data.unionUserNumberLimit)
|
||||
data.location = JSON.parse(data.location)
|
||||
this.formData = data
|
||||
if (!this.formData.unionUserNumberLimit) {
|
||||
const resp = await $.get('/platform/activity/apply/getUnionData', {activityScopeGroupId: this.formData.groupId})
|
||||
this.formData.unionUserNumberLimit = resp.data
|
||||
}
|
||||
if (this.formData.needSign) {
|
||||
await this.initMap()
|
||||
}
|
||||
}, () => {
|
||||
this.$notify.error({title: '错误', message: resp.msg});
|
||||
})
|
||||
},
|
||||
initMap() {
|
||||
this.$nextTick(() => {
|
||||
// if (map == null) {
|
||||
map = new AMap.Map("signMap", {
|
||||
resizeEnable: true,
|
||||
center: [118.640081, 32.082496],
|
||||
zoom: 16
|
||||
})
|
||||
// }
|
||||
|
||||
if (!this.formData.needSign) {
|
||||
return
|
||||
}
|
||||
|
||||
if (this.formData.location && Array.isArray(this.formData.location)) {
|
||||
const lng = parseFloat(this.formData.location[0])
|
||||
const lat = parseFloat(this.formData.location[1])
|
||||
if (marker) {
|
||||
map.remove(marker)
|
||||
marker = null
|
||||
}
|
||||
|
||||
marker = new AMap.Marker({
|
||||
position: [lng, lat],
|
||||
offset: new AMap.Pixel(-13, -30)
|
||||
})
|
||||
console.log(marker)
|
||||
map.add(marker)
|
||||
this.rangeMeterChange(this.formData.rangeMeter)
|
||||
}
|
||||
map.on('click', (e) => {
|
||||
if (!this.formData.rangeMeter) {
|
||||
this.$message.warning('请先设置签到半径')
|
||||
return
|
||||
}
|
||||
|
||||
if (marker) {
|
||||
map.remove(marker)
|
||||
}
|
||||
if (circle) {
|
||||
map.remove(circle)
|
||||
}
|
||||
marker = new AMap.Marker({
|
||||
position: [e.lnglat.getLng(), e.lnglat.getLat()],
|
||||
offset: new AMap.Pixel(-13, -30)
|
||||
})
|
||||
map.add(marker)
|
||||
this.formData.location = []
|
||||
this.formData.location.push(e.lnglat.getLng())
|
||||
this.formData.location.push(e.lnglat.getLat())
|
||||
this.rangeMeterChange(this.formData.rangeMeter)
|
||||
|
||||
});
|
||||
})
|
||||
},
|
||||
signUpMethodChange(val) {
|
||||
if (val == null) {
|
||||
this.$set(this.formData, 'userNumberLimit', null)
|
||||
this.$set(this.formData, 'needSign', false)
|
||||
this.$set(this.formData, 'rangeMeter', null)
|
||||
}
|
||||
},
|
||||
async getActivityGroup() {
|
||||
const resp = await $.get('/platform/activity/basic/scope/getActivityUserScopeGroup')
|
||||
this.activityGroupList = resp.data
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
await this.getActivityGroup()
|
||||
this.projectType = await getActivityTwoLevelType("50000")
|
||||
const id = GetQueryString("id")
|
||||
id ? await this.findOne(id) : this.init()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<script>
|
||||
window.type = 40003
|
||||
</script>
|
||||
<!--#include("/platform/activity/union/layoutActivity.html"){}#-->
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,12 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<script>
|
||||
window.type = 40003
|
||||
</script>
|
||||
<!--#include("/platform/activity/union/applyActivity.html"){}#-->
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,20 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.el-descriptions__table {
|
||||
table-layout: fixed !important;
|
||||
}
|
||||
|
||||
.el-descriptions-item__cell {
|
||||
text-align: center !important;
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
window.type = 40003
|
||||
</script>
|
||||
<!--#include("/platform/activity/union/layoutAuditActivity.html"){}#-->
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,20 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.el-descriptions__table {
|
||||
table-layout: fixed !important;
|
||||
}
|
||||
|
||||
.el-descriptions-item__cell {
|
||||
text-align: center !important;
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
window.type = 40003
|
||||
</script>
|
||||
<!--#include("/platform/activity/union/layoutPlan.html"){}#-->
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,336 @@
|
||||
<style>
|
||||
.el-divider {
|
||||
background-color: #409EFF !important;
|
||||
}
|
||||
|
||||
.el-divider__text {
|
||||
color: #409EFF !important;
|
||||
}
|
||||
|
||||
.el-timeline-item__timestamp {
|
||||
color: #409EFF;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" class="platform" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<div class="search">
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">活动时间</div>
|
||||
<div class="search-item-option">
|
||||
<el-date-picker
|
||||
style="width: 100%"
|
||||
v-model="pageForm.year"
|
||||
value-format="yyyy"
|
||||
type="year"
|
||||
placeholder="选择年">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">活动名称</div>
|
||||
<div class="search-item-option">
|
||||
<el-input v-model="pageForm.name" placeholder="请输入活动名称" clearable></el-input>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item" v-if="type==1">
|
||||
<div class="search-item-label">工会名称</div>
|
||||
<div class="search-item-option">
|
||||
<el-select v-model="pageForm.unionId" placeholder="请选择工会" filterable clearable
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in unionList"
|
||||
:key="item.id"
|
||||
:label="item.unionname"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-query">
|
||||
<el-button type="primary" icon="el-icon-search" @click="pageData">搜索</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool label="活动列表" :app="this">
|
||||
</table-tool>
|
||||
|
||||
<el-table :data="tableData" style="width: 100%;margin-bottom: 20px" row-key="id"
|
||||
@sort-change="pageOrder" v-loading="tableLoading" :size="tableSize" class="vi-table">
|
||||
|
||||
<el-table-column align="center" header-align="center" type="index" :index="indexMethod" label="序号"
|
||||
width="80px"></el-table-column>
|
||||
|
||||
<el-table-column
|
||||
align="center"
|
||||
header-align="center"
|
||||
v-for="column in tableColumns"
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable">
|
||||
|
||||
<template v-if="column.prop=='time'" scope="{row}">
|
||||
<span>
|
||||
{{moment(row.startTime).format('YYYY-MM-DD')}} - {{moment(row.endTime).format('YYYY-MM-DD')}}
|
||||
</span>
|
||||
</template>
|
||||
|
||||
<template v-else-if="column.prop=='projectTypeName'" scope="{row}">
|
||||
{{row.projectTypeName}}({{row.projectTypeCode}})
|
||||
</template>
|
||||
|
||||
<template v-else-if="column.prop=='tussueName'" scope="{row}">
|
||||
<span v-if="row.type==40002">{{row.unionname?row.unionname:'暂无'}}</span>
|
||||
<span v-if="row.type==40003">{{row.clubName?row.clubName:'暂无'}}</span>
|
||||
<span v-if="row.type==40001">校工会</span>
|
||||
</template>
|
||||
<template v-else-if="column.prop=='state'" scope="{row}">
|
||||
{{row.state===1?'未审核':row.state===2?'审核不通过':'审核通过'}}
|
||||
</template>
|
||||
|
||||
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column prop="userOnline" align="center" header-align="center" label="操作" width="150px">
|
||||
<template scope="{row}">
|
||||
<el-dropdown @command="dropdownCommand">
|
||||
<el-button size="mini" :loading="row.loading">
|
||||
<i class="ti-settings"></i>
|
||||
<span class="ti-angle-down"></span>
|
||||
</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item :command="{type:'view',row}">
|
||||
查看
|
||||
</el-dropdown-item>
|
||||
|
||||
<el-dropdown-item :command="{type:'edit',row}"
|
||||
:disabled="row.projectTypeCode==50004">
|
||||
编辑
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'delete',row}"
|
||||
:disabled="row.projectTypeCode==50004">
|
||||
删除
|
||||
</el-dropdown-item>
|
||||
<!-- <el-dropdown-item :command="{type:'export',row}">
|
||||
导出人员名单
|
||||
</el-dropdown-item>-->
|
||||
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
|
||||
<template #view>
|
||||
<tissue-info ref="info"></tissue-info>
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
actvivtyUrl: "/platform/activity/info/mange",
|
||||
selectLoading: false,
|
||||
userTabLoading: false,
|
||||
dialogVisible: false,
|
||||
userData: [],
|
||||
userList: [],
|
||||
unionList: [],
|
||||
pageForm: {
|
||||
type: type,
|
||||
year: new Date().getFullYear() + ''
|
||||
},
|
||||
formData: {
|
||||
tissuePersonList: []
|
||||
},
|
||||
tableColumns: [
|
||||
{prop: 'name', label: '活动名称'},
|
||||
{prop: 'address', label: '活动地点'},
|
||||
{prop: 'projectTypeName', label: '活动项目类型'},
|
||||
{prop: 'tussueName', label: '举办单位'},
|
||||
{prop: 'time', label: '活动日期'},
|
||||
{prop: 'applyTime', label: '创建时间', sortable: true},
|
||||
{prop: 'state', label: '审核状态', sortable: true,checked: 1},
|
||||
|
||||
],
|
||||
userColumns: [
|
||||
{prop: 'userName', label: '姓名'},
|
||||
{prop: 'loginName', label: '工号'},
|
||||
{prop: 'sex', label: '性别'},
|
||||
{prop: 'mobile', label: '联系方式'},
|
||||
{prop: 'unitName', label: '所属单位'},
|
||||
{prop: 'unionName', label: '所属工会'}
|
||||
],
|
||||
formRules: {
|
||||
name: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
address: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
peopleNum: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
time: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
type: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
}
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'file-upload': httpVueLoader('/components/plugins/FileUpload.vue'),
|
||||
'tissue-info': httpVueLoader('/components/activity/school/tissueInfo.vue')
|
||||
},
|
||||
methods: {
|
||||
dropdownCommand(command) {
|
||||
const {type, row} = command
|
||||
if (type === 'view') {
|
||||
this.openView(row)
|
||||
} else if (type === 'edit') {
|
||||
this.openEdit(row)
|
||||
} else if (type === 'delete') {
|
||||
this.doDelete(row)
|
||||
} else if (type === 'export') {
|
||||
location.href = "/platform/activity/info/mange/export?id=" + row.id
|
||||
}
|
||||
},
|
||||
async remoteMethod(query) {
|
||||
if (query) {
|
||||
this.selectLoading = true;
|
||||
const {data} = await $.post(this.actvivtyUrl + "/findUser", {serachWord: query})
|
||||
this.userList = data
|
||||
this.selectLoading = false;
|
||||
}
|
||||
},
|
||||
openAddUser() {
|
||||
this.formData.tissuePersonList = []
|
||||
this.dialogVisible = true
|
||||
},
|
||||
doAddUser() {
|
||||
this.formData.tissuePersonList = this.userList.filter(v => this.formData.tissuePersonList.some(x => v.userId === x))
|
||||
this.userData = this.userData.concat(this.formData.tissuePersonList)
|
||||
this.dialogVisible = false
|
||||
},
|
||||
delUser(row) {
|
||||
this.userData.splice(this.userData.indexOf(row.userId), 1)
|
||||
this.formData.tissuePersonList.splice(this.formData.tissuePersonList.indexOf(row.userId), 1)
|
||||
},
|
||||
openView(row) {
|
||||
const {id} = row
|
||||
this.$refs.info.getInfo(id)
|
||||
this.$refs.guava.view()
|
||||
},
|
||||
async openEdit(row) {
|
||||
const {id, type} = row
|
||||
if (type == 40002) {
|
||||
window.location = "/platform/activity/apply/union?id=" + id
|
||||
} else if (type == 40003) {
|
||||
window.location = "/platform/activity/apply/club?id=" + id
|
||||
} else {
|
||||
window.location = "/platform/activity/apply/school?id=" + id
|
||||
}
|
||||
/*this.$refs.guava.edit()*/
|
||||
},
|
||||
async openAdd() {
|
||||
this.$refs.guava.edit()
|
||||
this.userData = []
|
||||
this.$nextTick(() => {
|
||||
this.formData = {
|
||||
name: '',
|
||||
time: '',
|
||||
peopleNum: '',
|
||||
address: '',
|
||||
files: [],
|
||||
type: "40002",
|
||||
tissuePersonList: []
|
||||
}
|
||||
if (this.$refs['addForm']) {
|
||||
this.$refs['addForm'].resetFields()
|
||||
}
|
||||
})
|
||||
},
|
||||
async operation() {
|
||||
let url = this.formData.id ? "/doEdit" : "/doAdd"
|
||||
this.$refs["addForm"].validate(async (valid) => {
|
||||
if (valid) {
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '正在提交...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: COVER_LAYER_COLOR
|
||||
});
|
||||
|
||||
const formData = JSON.parse(JSON.stringify(this.formData))
|
||||
formData.type = this.pageForm.type
|
||||
if (formData.time && formData.time.length) {
|
||||
formData.startTime = formData.time[0]
|
||||
formData.endTime = formData.time[1]
|
||||
formData.time = undefined
|
||||
}
|
||||
|
||||
const resp = await $.post(this.actvivtyUrl + url, {tissue: JSON.stringify(formData),})
|
||||
|
||||
closeLoadingFunc(loading, resp, async () => {
|
||||
this.pageData()
|
||||
this.$refs.guava.index()
|
||||
}, (data, msg) => {
|
||||
this.$notify.error({title: '错误', message: msg});
|
||||
})
|
||||
} else {
|
||||
this.$notify.error({title: '错误', message: '存在未填写的的必填项'});
|
||||
}
|
||||
});
|
||||
},
|
||||
doDelete(row) {
|
||||
const {id} = row
|
||||
this.$confirm('确定要删除该活动吗?', '提示', {type: 'warning'}).then(async () => {
|
||||
this.$set(row, "loading", true)
|
||||
const resp = await $.post(this.actvivtyUrl + "/doDelete", {id: id});
|
||||
requestLaterMsgFun(vue, resp, async () => {
|
||||
this.pageData()
|
||||
}, () => {
|
||||
}, () => {
|
||||
this.$set(row, "loading", false)
|
||||
});
|
||||
})
|
||||
},
|
||||
pageData() {
|
||||
/*console.log(window.type)
|
||||
this.tableColumns=[];
|
||||
if (window.type = 40001){
|
||||
console.log("11111111111111111111111111")
|
||||
// this.tableColumns.push({prop: 'state', label: '审核状态', sortable: true,checked: 0})
|
||||
this.tableColumns.find(v=>{})
|
||||
}*/
|
||||
sublime.showLoadingbar();
|
||||
this.tableLoading = true
|
||||
$.post("/platform/activity/info/mange/pageData", this.pageForm, (data) => {
|
||||
sublime.closeLoadingbar();
|
||||
this.tableLoading = false
|
||||
if (data.code === 0) {
|
||||
this.tableData = data.data.list;
|
||||
this.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
this.$message.error(data.msg);
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.pageData()
|
||||
this.unionList = await getUnions(null)
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
@@ -0,0 +1,272 @@
|
||||
<div id="app" class="platform" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
|
||||
|
||||
<el-card shadow="never">
|
||||
<div class="search">
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">活动时间</div>
|
||||
<div class="search-item-option">
|
||||
<el-date-picker
|
||||
style="width: 100%"
|
||||
v-model="pageForm.year"
|
||||
value-format="yyyy"
|
||||
type="year"
|
||||
placeholder="选择年">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">活动名称</div>
|
||||
<div class="search-item-option">
|
||||
<el-input v-model="pageForm.name" placeholder="请输入活动名称" clearable></el-input>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item" v-if="type==40002">
|
||||
<div class="search-item-label">工会名称</div>
|
||||
<div class="search-item-option">
|
||||
<el-select v-model="pageForm.unionId" placeholder="请选择工会" filterable clearable
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in unionList"
|
||||
:key="item.id"
|
||||
:label="item.unionname"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-query">
|
||||
<el-button type="primary" icon="el-icon-search" @click="pageData">搜索</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool label="活动列表" :app="this">
|
||||
<template #func>
|
||||
<el-radio-group @change="doSearch" size="small" v-model="pageForm.state">
|
||||
<el-radio-button :label="i.code" v-for="i in auditList">{{i.name}}</el-radio-button>
|
||||
</el-radio-group>
|
||||
</template>
|
||||
</table-tool>
|
||||
|
||||
|
||||
<el-table :data="tableData" style="width: 100%;margin-bottom: 20px" row-key="id"
|
||||
@sort-change="pageOrder" v-loading="tableLoading" :size="tableSize" class="vi-table">
|
||||
|
||||
<el-table-column align="center" header-align="center" type="index" :index="indexMethod" label="序号"
|
||||
width="80px"></el-table-column>
|
||||
|
||||
<el-table-column
|
||||
align="center"
|
||||
header-align="center"
|
||||
v-for="column in tableColumns"
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable">
|
||||
|
||||
<template v-if="column.prop=='time'" scope="{row}">
|
||||
<span>
|
||||
{{moment(row.startTime).format('YYYY-MM-DD')}} - {{moment(row.endTime).format('YYYY-MM-DD')}}
|
||||
</span>
|
||||
</template>
|
||||
|
||||
<template v-else-if="column.prop=='projectTypeName'" scope="{row}">
|
||||
{{row.projectTypeName}}({{row.projectTypeCode}})
|
||||
</template>
|
||||
|
||||
<template v-else-if="column.prop=='tussueName'" scope="{row}">
|
||||
<span v-if="row.type==40002">{{row.unionname?row.unionname:'暂无'}}</span>
|
||||
<span v-if="row.type==40003">{{row.clubName?row.clubName:'暂无'}}</span>
|
||||
<span v-if="row.type==40001">校工会</span>
|
||||
</template>
|
||||
|
||||
<template v-else-if="column.prop=='state'" scope="{row}">
|
||||
{{row.state===1?'未审核':row.state===2?'审核不通过':'审核通过'}}
|
||||
</template>
|
||||
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column prop="userOnline" align="center" header-align="center" label="操作" width="150px">
|
||||
<template scope="{row}">
|
||||
<el-button size="mini" :loading="row.loading" @click="openView(row)">
|
||||
查看
|
||||
</el-button>
|
||||
<el-button size="mini" :loading="row.loading" type="primary" @click="openAudit(row)"
|
||||
v-if="row.state===1">
|
||||
审核
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<tissue-info ref="info"></tissue-info>
|
||||
</template>
|
||||
|
||||
<template #edit>
|
||||
<tissue-info ref="editInfo" :handle="true" label="校工会审核">
|
||||
<template #handle>
|
||||
<el-form :model="formData" label-position="right"
|
||||
style="padding: 20px 0"
|
||||
label-width="120px">
|
||||
<el-form-item label="审核信息 " label-width="135px" class="view-header">
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-row gutter="20">
|
||||
<el-col :span="8">
|
||||
<el-form-item prop="username" label="审核人">
|
||||
<el-input v-model="formData.username"
|
||||
disabled></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item prop="time" label="审核时间">
|
||||
<el-input v-model="formData.auditTime" disabled></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item prop="idea" label="审核意见">
|
||||
<el-input type="textarea" v-model="formData.auditOpinion" rows="4" maxlength="500"
|
||||
placeholder="请填写您的审核意见"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
|
||||
</el-form>
|
||||
|
||||
|
||||
<div style="float: right;margin: 20px 0">
|
||||
<el-button type="danger" @click="doReview(false)" :disabled="subDis" :loading="subLoading1">拒
|
||||
绝
|
||||
</el-button>
|
||||
<el-button type="success" @click="doReview(true)" :disabled="subDis" :loading="subLoading2">通
|
||||
过
|
||||
</el-button>
|
||||
</div>
|
||||
|
||||
</template>
|
||||
</tissue-info>
|
||||
</template>
|
||||
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
auditList: [{code: true, name: "已审核"}, {code: false, name: "未审核"}],
|
||||
selectLoading: false,
|
||||
userTabLoading: false,
|
||||
dialogVisible: false,
|
||||
userData: [],
|
||||
userList: [],
|
||||
unionList: [],
|
||||
subDis: false,
|
||||
subLoading1: false,
|
||||
subLoading2: false,
|
||||
pageForm: {
|
||||
state: false,
|
||||
type: type,
|
||||
year: new Date().getFullYear() + ''
|
||||
},
|
||||
tableColumns: [
|
||||
{prop: 'name', label: '活动名称'},
|
||||
{prop: 'address', label: '活动地点'},
|
||||
{prop: 'projectTypeName', label: '活动项目类型'},
|
||||
{prop: 'tussueName', label: '举办单位'},
|
||||
{prop: 'time', label: '活动日期'},
|
||||
{prop: 'applyTime', label: '创建时间', sortable: true},
|
||||
{prop: 'state', label: '审核状态', sortable: true},
|
||||
|
||||
],
|
||||
userColumns: [
|
||||
{prop: 'userName', label: '姓名'},
|
||||
{prop: 'loginName', label: '工号'},
|
||||
{prop: 'sex', label: '性别'},
|
||||
{prop: 'mobile', label: '联系方式'},
|
||||
{prop: 'unitName', label: '所属单位'},
|
||||
{prop: 'unionName', label: '所属工会'}
|
||||
],
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'file-upload': httpVueLoader('/components/plugins/FileUpload.vue'),
|
||||
'tissue-info': httpVueLoader('/components/activity/school/tissueInfo.vue')
|
||||
},
|
||||
methods: {
|
||||
openAudit(row) {
|
||||
this.$refs.editInfo.getInfo(row.id)
|
||||
this.$refs.guava.edit()
|
||||
this.formData = {
|
||||
id: row.id,
|
||||
username: "${@shiro.getPrincipalProperty('username')}",
|
||||
auditTime: moment().format('YYYY-MM-DD'),
|
||||
}
|
||||
},
|
||||
async doReview(flag) {
|
||||
const confirm = await this.$confirm('确定要审核' + (flag ? '通过' : '拒绝') + '吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm === "confirm") {
|
||||
this.formData.flag = flag
|
||||
this.subDis = true
|
||||
flag ? this.subLoading2 = true : this.subLoading1 = true
|
||||
const resp = await $.post("/platform/activity/audit/doReview", this.formData)
|
||||
requestLaterMsgFun(vue, resp, null, null, (v) => {
|
||||
|
||||
this.subDis = false
|
||||
this.subLoading1 = false
|
||||
this.subLoading2 = false
|
||||
|
||||
this.pageData()
|
||||
this.$refs.guava.index()
|
||||
})
|
||||
}
|
||||
|
||||
},
|
||||
openView(row) {
|
||||
const {id} = row
|
||||
this.$refs.info.getInfo(id)
|
||||
this.$refs.guava.view()
|
||||
},
|
||||
pageData() {
|
||||
sublime.showLoadingbar();
|
||||
this.tableLoading = true
|
||||
$.post("/platform/activity/audit/pageData", this.pageForm, (data) => {
|
||||
sublime.closeLoadingbar();
|
||||
this.tableLoading = false
|
||||
if (data.code === 0) {
|
||||
this.tableData = data.data.list;
|
||||
this.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
this.$message.error(data.msg);
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.unionList = await getUnions(null)
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
@@ -0,0 +1,412 @@
|
||||
<div id="app" class="platform" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<div class="search">
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">年度</div>
|
||||
<div class="search-item-option">
|
||||
<el-date-picker
|
||||
style="width: 100%"
|
||||
v-model="pageForm.year"
|
||||
value-format="yyyy"
|
||||
type="year"
|
||||
placeholder="选择年">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">计划名称</div>
|
||||
<div class="search-item-option">
|
||||
<el-input v-model="pageForm.name" placeholder="请输入计划名称" clearable></el-input>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div v-if="window.type === 40002" class="search-item">
|
||||
<div class="search-item-label">工会名称</div>
|
||||
<div class="search-item-option">
|
||||
<el-select v-model="pageForm.tissueId" placeholder="请选择工会" filterable clearable
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in unionList"
|
||||
:key="item.id"
|
||||
:label="item.unionname"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div v-if="window.type === 40003" class="search-item">
|
||||
<div class="search-item-label">协会(社团)</div>
|
||||
<div class="search-item-option">
|
||||
<el-select v-model="pageForm.tissueId" placeholder="请选择协会(社团)" filterable clearable
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in clubList"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- <template v-if="searchMore">
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">项目名称</div>
|
||||
<div class="search-item-option">
|
||||
<el-select v-model="pageForm.eventId" placeholder="请选择活动项目" filterable clearable
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in eventList"
|
||||
:key="item.id"
|
||||
:label="item.allName"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
</template>-->
|
||||
|
||||
|
||||
<div class="search-query">
|
||||
<el-button type="primary" icon="el-icon-search" @click="pageData">搜索</el-button>
|
||||
<!-- <more v-model="searchMore"></more>-->
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<!--<table-tool label="计划列表" :app="this">
|
||||
<!–<template #func>
|
||||
<el-button type="primary" icon="el-icon-edit-outline" size="small"
|
||||
@click="openAdd">
|
||||
创建活动计划
|
||||
</el-button>
|
||||
</template>–>
|
||||
</table-tool>-->
|
||||
|
||||
<el-table :data="tableData" style="width: 100%;margin-bottom: 20px" row-key="id"
|
||||
@sort-change="pageOrder" v-loading="tableLoading" :size="tableSize">
|
||||
|
||||
<el-table-column align="center" header-align="center" type="index" :index="indexMethod" label="序号"
|
||||
width="80px"></el-table-column>
|
||||
|
||||
<el-table-column prop="year" label="年度"></el-table-column>
|
||||
|
||||
<el-table-column v-if="window.type === 40002" prop="unionname" label="所属工会" show-overflow-tooltip>
|
||||
<template scope="{row}">
|
||||
<span>{{unionList.find(x => x.id == row.tissueId) === undefined ? '' : unionList.find(x => x.id == row.tissueId).unionname}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column v-if="window.type === 40003" prop="clubname" label="协会(社团)" show-overflow-tooltip>
|
||||
<template scope="{row}">
|
||||
<span>{{clubList.find(x => x.id == row.tissueId) === undefined ? '' : clubList.find(x => x.id == row.tissueId).name}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column prop="name" label="计划名称" show-overflow-tooltip></el-table-column>
|
||||
<!--<el-table-column prop="allName" label="活动项目" show-overflow-tooltip>
|
||||
</el-table-column>-->
|
||||
<el-table-column prop="activityTypeName" label="活动类型" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="time" label="计划预计时间" sortable></el-table-column>
|
||||
<el-table-column prop="money" label="预算费用"></el-table-column>
|
||||
<!--<el-table-column prop="carryOut" label="计划状态">
|
||||
<template scope="{row}">
|
||||
<span v-if="row.carryOut" class="text-success">已执行</span>
|
||||
<span v-if="!row.carryOut" class="text-primary">未执行</span>
|
||||
</template>
|
||||
</el-table-column>-->
|
||||
|
||||
<el-table-column prop="userOnline" align="center" header-align="center" label="操作" width="150px">
|
||||
<template scope="{row}">
|
||||
<el-dropdown @command="dropdownCommand">
|
||||
<el-button size="mini" :loading="row.loading">
|
||||
<i class="ti-settings"></i>
|
||||
<span class="ti-angle-down"></span>
|
||||
</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item :command="{type:'view',row}">
|
||||
查看
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'edit',row}">
|
||||
编辑
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'delete',row}">
|
||||
删除
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #edit_func>
|
||||
<el-button type="primary" @click="operation">确 定</el-button>
|
||||
</template>
|
||||
|
||||
<template #edit>
|
||||
<vi-title title="填写计划信息"></vi-title>
|
||||
<el-form :model="formData" ref="form" :rules="formRules" label-width="100px" label-position="left"
|
||||
label-suffix=":" style="padding: 0 2%">
|
||||
|
||||
<!-- <el-form-item prop="type" label="活动类型">
|
||||
<el-radio-group v-model="formData.type">
|
||||
<el-radio label="2" border>分工会活动计划</el-radio>
|
||||
<el-radio label="3" border>协会(社团)活动计划</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>-->
|
||||
|
||||
<el-form-item prop="name" label="计划名称">
|
||||
<el-input maxlength="50" placeholder="请填写计划名称" v-model="formData.name"
|
||||
type="text"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item prop="time" label="计划时间">
|
||||
<el-date-picker
|
||||
v-model="formData.time"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="选择日期"
|
||||
style="width: 100%">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item prop="event" label="活动项目">
|
||||
<!--<el-input maxlength="50" placeholder="请填写活动项目" v-model="formData.event"
|
||||
type="text"></el-input>-->
|
||||
<el-select v-model="formData.event" placeholder="请选择活动项目" filterable clearable multiple
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in eventList"
|
||||
:key="item.id"
|
||||
:label="item.allName"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item prop="content" label="计划内容" class="is-required">
|
||||
<div id="content"></div>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<plan-info ref="info"></plan-info>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
let E = window.wangEditor
|
||||
const editors = {}
|
||||
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
let validContent = (rule, value, callback) => {
|
||||
if (!this.formData.content || !dd3s.html2txt(this.formData.content)) {
|
||||
callback(new Error('请填写计划内容'));
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
};
|
||||
return {
|
||||
clubList: [],
|
||||
planUrl: "/platform/activity/plan",
|
||||
unionList: [],
|
||||
eventList: [],
|
||||
flag: false,
|
||||
pageForm: {
|
||||
type: type,
|
||||
year: new Date().getFullYear() + ''
|
||||
},
|
||||
formData: {
|
||||
name: '',
|
||||
time: '',
|
||||
event: '',
|
||||
content: ''
|
||||
},
|
||||
tableColumns: [
|
||||
{prop: 'name', label: '计划名称'},
|
||||
{prop: 'time', label: '计划预计时间'},
|
||||
{prop: 'allName', label: '活动项目'},
|
||||
{prop: 'carryOut', label: '计划状态'}
|
||||
],
|
||||
formRules: {
|
||||
type: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
name: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
time: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
event: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
content: [{validator: validContent, trigger: ['blur', 'change']}]
|
||||
},
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'plan-info': httpVueLoader('/components/activity/school/planInfo.vue'),
|
||||
},
|
||||
methods: {
|
||||
dropdownCommand(command) {
|
||||
const {type, row} = command
|
||||
if (type === 'view') {
|
||||
this.openView(row)
|
||||
} else if (type === 'edit') {
|
||||
this.openEdit(row)
|
||||
} else if (type === 'delete') {
|
||||
this.doDelete(row)
|
||||
}
|
||||
},
|
||||
openView(row) {
|
||||
const {id} = row
|
||||
this.$refs.info.getInfo(id)
|
||||
this.$refs.guava.view()
|
||||
},
|
||||
async openEdit(row) {
|
||||
/* this.flag = false
|
||||
/!* row.type = row.type + ''
|
||||
this.formData = row*!/
|
||||
const cloneRow = clone(row)
|
||||
cloneRow.event = JSON.parse(cloneRow.event)
|
||||
this.formData = cloneRow
|
||||
this.$refs.guava.edit()
|
||||
this.$nextTick(() => {
|
||||
this.initEditor()
|
||||
})*/
|
||||
if (window.type === 40002) {
|
||||
sublime.jumpPagePjax('/platform/activity/plan/addUnionPlan?id=' + row.id)
|
||||
} else if (window.type === 40003) {
|
||||
sublime.jumpPagePjax('/platform/activity/plan/addClubPlan?id=' + row.id)
|
||||
} else if (window.type === 40001) {
|
||||
sublime.jumpPagePjax('/platform/activity/plan/addSchoolPlan?id=' + row.id)
|
||||
}
|
||||
},
|
||||
async openAdd() {
|
||||
this.formData = {}
|
||||
this.flag = false
|
||||
this.$refs.guava.edit()
|
||||
this.$nextTick(() => {
|
||||
this.initEditor()
|
||||
if (this.$refs['form']) {
|
||||
this.$refs['form'].resetFields()
|
||||
}
|
||||
|
||||
this.formData = {
|
||||
type: '40003',
|
||||
name: '',
|
||||
time: '',
|
||||
event: '',
|
||||
content: ''
|
||||
}
|
||||
})
|
||||
},
|
||||
async operation() {
|
||||
let url = this.formData.id ? "/doEdit" : "/doAdd"
|
||||
this.$refs["form"].validate(async (valid) => {
|
||||
if (valid) {
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '正在提交...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: COVER_LAYER_COLOR
|
||||
});
|
||||
|
||||
this.formData.type = this.pageForm.type
|
||||
|
||||
const resp = await $.post(this.planUrl + url, {
|
||||
id: this.formData.id,
|
||||
name: this.formData.name,
|
||||
time: this.formData.time,
|
||||
content: this.formData.content,
|
||||
event: JSON.stringify(this.formData.event),
|
||||
type: this.pageForm.type,
|
||||
})
|
||||
|
||||
closeLoadingFunc(loading, resp, async () => {
|
||||
this.pageData()
|
||||
this.$refs.guava.index()
|
||||
}, (data, msg) => {
|
||||
this.$notify.error(msg);
|
||||
})
|
||||
} else {
|
||||
this.$notify.error({title: '错误', message: '存在未填写的的必填项'});
|
||||
}
|
||||
});
|
||||
},
|
||||
doDelete(row) {
|
||||
const {id} = row
|
||||
this.$confirm('确定要删除该计划吗?', '提示', {type: 'warning'}).then(async () => {
|
||||
const resp = await $.post(this.planUrl + "/doDelete", {id: id});
|
||||
|
||||
requestLaterMsgFun(vue, resp, () => {
|
||||
this.pageData()
|
||||
}, () => {
|
||||
this.$notify.error({title: '错误', message: resp.msg});
|
||||
})
|
||||
})
|
||||
},
|
||||
initEditor() {
|
||||
let keys = ['content']
|
||||
keys.forEach(key => {
|
||||
$("#" + key).html("")
|
||||
editors[key] = new E('#' + key)
|
||||
editors[key].config.onchange = (html) => {
|
||||
this.formData[key] = html
|
||||
}
|
||||
editors[key].create()
|
||||
if (this.formData[key]) {
|
||||
editors[key].txt.html(this.formData[key])
|
||||
}
|
||||
})
|
||||
},
|
||||
pageData() {
|
||||
sublime.showLoadingbar();
|
||||
this.tableLoading = true
|
||||
$.post("/platform/activity/plan/pageData", this.pageForm, (data) => {
|
||||
sublime.closeLoadingbar();
|
||||
this.tableLoading = false
|
||||
if (data.code === 0) {
|
||||
this.tableData = data.data.list;
|
||||
this.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
this.$message.error(data.msg);
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
async getMyClub() {
|
||||
return await $.post('/platform/activity/yearSummary/getMyClub')
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.pageData()
|
||||
this.eventList = await activity.getEvents()
|
||||
this.unionList = await getUnions(null);
|
||||
this.clubList = await getClubs()
|
||||
const isAdmin = "${@shiro.hasAnyRoles('sysadmin', 'A06')}" === 'true'
|
||||
if (!isAdmin) {
|
||||
const selfUnion = "${@shiro.getPrincipalProperty('union').getId()}";
|
||||
this.unionList = [this.unionList.find(x => x.id === selfUnion)]
|
||||
|
||||
const clubs = await this.getMyClub()
|
||||
let clubArray = []
|
||||
for (let c of Array.from(clubs)) {
|
||||
const cl = this.clubList.find(x => x.id === c)
|
||||
if (cl) {
|
||||
clubArray.push(cl)
|
||||
}
|
||||
}
|
||||
this.clubList = clubArray
|
||||
}
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<script>
|
||||
window.type = 40001
|
||||
</script>
|
||||
<!--#include("/platform/activity/union/layoutActivity.html"){}#-->
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,12 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<script>
|
||||
window.type = 40001
|
||||
</script>
|
||||
<!--#include("/platform/activity/union/applyActivity.html"){}#-->
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,20 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.el-descriptions__table {
|
||||
table-layout: fixed !important;
|
||||
}
|
||||
|
||||
.el-descriptions-item__cell {
|
||||
text-align: center !important;
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
window.type = 40001
|
||||
</script>
|
||||
<!--#include("/platform/activity/union/layoutPlan.html"){}#-->
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,12 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<script>
|
||||
window.type = 40002
|
||||
</script>
|
||||
<!--#include("/platform/activity/union/layoutActivity.html"){}#-->
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,12 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<script>
|
||||
window.type = 40002
|
||||
</script>
|
||||
<!--#include("/platform/activity/union/applyActivity.html"){}#-->
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,20 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.el-descriptions__table {
|
||||
table-layout: fixed !important;
|
||||
}
|
||||
|
||||
.el-descriptions-item__cell {
|
||||
text-align: center !important;
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
window.type = 40002
|
||||
</script>
|
||||
<!--#include("/platform/activity/union/layoutAuditActivity.html"){}#-->
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,20 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.el-descriptions__table {
|
||||
table-layout: fixed !important;
|
||||
}
|
||||
|
||||
.el-descriptions-item__cell {
|
||||
text-align: center !important;
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
window.type = 40002
|
||||
</script>
|
||||
<!--#include("/platform/activity/union/layoutPlan.html"){}#-->
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,524 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.el-collapse-item__arrow {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
.top_block {
|
||||
width: 100%;
|
||||
padding: 30px 80px;
|
||||
}
|
||||
|
||||
.tr {
|
||||
text-align: right;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.tl {
|
||||
text-align: left;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.top_title {
|
||||
font-size: 14px;
|
||||
color: #808492;
|
||||
}
|
||||
|
||||
.fs18 {
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.fs26 {
|
||||
font-size: 26px;
|
||||
}
|
||||
|
||||
.fs20 {
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
.title {
|
||||
font-size: 18px;
|
||||
height: 36px;
|
||||
line-height: 36px;
|
||||
}
|
||||
|
||||
.none-data {
|
||||
min-height: 300px;
|
||||
background: url("/none.png") no-repeat center center;
|
||||
background-size: 360px 260px;
|
||||
}
|
||||
|
||||
.none-data-title {
|
||||
position: absolute;
|
||||
display: block;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
bottom: 20%;
|
||||
left: 0;
|
||||
color: rgb(160, 160, 160);
|
||||
}
|
||||
|
||||
.item-title {
|
||||
color: rgb(160, 160, 160);
|
||||
}
|
||||
|
||||
.item-content {
|
||||
color: rgb(100, 100, 100);
|
||||
}
|
||||
|
||||
.mb20 {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.item-type {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
text-align: center;
|
||||
height: 100px;
|
||||
line-height: 100px;
|
||||
}
|
||||
|
||||
.el-collapse, .el-collapse-item__header, .el-collapse-item__wrap {
|
||||
border: none;
|
||||
}
|
||||
|
||||
.el-collapse-item__content {
|
||||
padding-bottom: 0;
|
||||
}
|
||||
|
||||
.status {
|
||||
text-align: center;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
margin: auto;
|
||||
height: 90px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.status-icon {
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
|
||||
.status-name {
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
font-size: 12px;
|
||||
color: rgb(180, 180, 180);
|
||||
}
|
||||
|
||||
.chartTitle {
|
||||
font-size: 14px;
|
||||
color: #808492;
|
||||
margin: 20px 0;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<el-row style="border-bottom: 10px solid rgb(240,240,240);padding: 20px;">
|
||||
<template v-if="hasChangeUserRole=='true'">
|
||||
<div class="btn-group tool-button">
|
||||
<span style="font-weight: bold">查找用户:</span>
|
||||
</div>
|
||||
<div class="btn-group tool-button">
|
||||
<el-select
|
||||
style="width: 300px"
|
||||
v-model="userid"
|
||||
filterable
|
||||
remote
|
||||
reserve-keyword
|
||||
placeholder="请输入姓名或工号进行查询"
|
||||
:remote-method="remoteMethod"
|
||||
:loading="search_user_loading" @change="userChange">
|
||||
<el-option
|
||||
v-for="item in userOptions"
|
||||
:key="item.id"
|
||||
:label="item.username+'('+item.loginname+')'"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</template>
|
||||
<!-- <div class="btn-group tool-button">-->
|
||||
<!-- <el-date-picker-->
|
||||
<!-- @change="queryAll"-->
|
||||
<!-- v-model="dateRange"-->
|
||||
<!-- type="daterange"-->
|
||||
<!-- value-format="yyyy-MM-dd"-->
|
||||
<!-- range-separator="至"-->
|
||||
<!-- start-placeholder="开始日期"-->
|
||||
<!-- end-placeholder="结束日期">-->
|
||||
<!-- </el-date-picker>-->
|
||||
<!-- <!– <el-button type="primary" @click="" icon="el-icon-search"></el-button>–>-->
|
||||
<!-- </div>-->
|
||||
<div class="pull-right offscreen-right mt5">
|
||||
<div class="btn-group tool-button mt5">
|
||||
<span style="font-weight: bold">{{user.sex?user.sex:''}}{{user.unitname?' / '+user.unitname:''}} {{user.unionname?' / '+user.unionname:''}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</el-row>
|
||||
<div class="top_block" style="border-bottom: 10px solid rgb(240,240,240);" v-loading="top_block_loading">
|
||||
<el-row style="height: 40px">
|
||||
<el-col offset="4" class="tr" :span="3">
|
||||
<span class="top_title">职工慰问申请数</span>
|
||||
</el-col>
|
||||
<el-col :span="3" class="tr">
|
||||
<span class="top_title">困难帮扶申请数</span>
|
||||
</el-col>
|
||||
<el-col :span="3" class="tr">
|
||||
<span class="top_title">子女入学登记数</span>
|
||||
</el-col>
|
||||
<el-col :span="3" class="tr">
|
||||
<span class="top_title">撰写提案数</span>
|
||||
</el-col>
|
||||
<el-col :span="3" class="tr">
|
||||
<span class="top_title">参与活动数</span>
|
||||
</el-col>
|
||||
<el-col :span="3" class="tr">
|
||||
<span class="top_title">经费报销次数</span>
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
|
||||
<el-row style="height: 60px;line-height: 60px">
|
||||
<el-col class="tl" :span="4">
|
||||
<span class="top_title">今年</span>
|
||||
</el-col>
|
||||
<el-col class="tr" :span="3">
|
||||
<span class="fs26" style="color: #409EFF;">{{numData.now_year.zgww?numData.now_year.zgww:0}}</span>
|
||||
</el-col>
|
||||
<el-col class="tr" :span="3">
|
||||
<span class="fs26" style="color: #409EFF;">{{numData.now_year.knbf?numData.now_year.knbf:0}}</span>
|
||||
</el-col>
|
||||
<el-col class="tr" :span="3">
|
||||
<span class="fs26" style="color: #409EFF;">{{numData.now_year.znrx?numData.now_year.znrx:0}}</span>
|
||||
</el-col>
|
||||
<el-col class="tr" :span="3">
|
||||
<span class="fs26" style="color: #409EFF;">{{numData.now_year.ta?numData.now_year.ta:0}}</span>
|
||||
</el-col>
|
||||
<el-col class="tr" :span="3">
|
||||
<span class="fs26" style="color: #409EFF;">{{numData.now_year.hd?numData.now_year.hd:0}}</span>
|
||||
</el-col>
|
||||
<el-col class="tr" :span="3">
|
||||
<span class="fs26" style="color: #409EFF;">{{numData.now_year.jfbx?numData.now_year.jfbx:0}}</span>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row style="height: 40px;line-height: 40px">
|
||||
<el-col class="tl" :span="4">
|
||||
<span class="top_title">全部</span>
|
||||
</el-col>
|
||||
<el-col class="tr" :span="3">
|
||||
<span class="fs18">{{numData.all.zgww?numData.all.zgww:0}}</span>
|
||||
</el-col>
|
||||
<el-col class="tr" :span="3">
|
||||
<span class="fs18">{{numData.all.knbf?numData.all.knbf:0}}</span>
|
||||
</el-col>
|
||||
<el-col class="tr" :span="3">
|
||||
<span class="fs18">{{numData.all.znrx?numData.all.znrx:0}}</span>
|
||||
</el-col>
|
||||
<el-col class="tr" :span="3">
|
||||
<span class="fs18">{{numData.all.ta?numData.all.ta:0}}</span>
|
||||
</el-col>
|
||||
<el-col class="tr" :span="3">
|
||||
<span class="fs18">{{numData.all.hd?numData.all.hd:0}}</span>
|
||||
</el-col>
|
||||
<el-col class="tr" :span="3">
|
||||
<span class="fs18">{{numData.all.jfbx?numData.all.jfbx:0}}</span>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
|
||||
<el-row style="height: 500px;border-bottom: 10px solid rgb(240,240,240);padding: 20px 30px;padding-top: 10px;"
|
||||
v-loading="chart_one_loading">
|
||||
<div style="position: absolute;top: 25px;right: 40px;z-index: 999">
|
||||
<el-date-picker
|
||||
class="year"
|
||||
style="width: 120px;"
|
||||
size="mini"
|
||||
v-model="numYear.startYear"
|
||||
type="year" :clearable="false"
|
||||
value-format="yyyy"
|
||||
@change="if(numYear.endYear){getNumByYear();}"
|
||||
placeholder="选择年">
|
||||
</el-date-picker>
|
||||
-
|
||||
<el-date-picker
|
||||
class="year"
|
||||
style="width: 120px;"
|
||||
size="mini"
|
||||
v-model="numYear.endYear"
|
||||
type="year" :clearable="false"
|
||||
value-format="yyyy"
|
||||
@change="if(numYear.startYear){getNumByYear();}"
|
||||
placeholder="选择年">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
<div class="chartTitle">职工动态曲线</div>
|
||||
<div id="chart_one" style="width: 100%;height:85%;margin-top: 40px"></div>
|
||||
</el-row>
|
||||
|
||||
|
||||
<el-card class="box-card">
|
||||
<div slot="header" class="clearfix" style="position: relative">
|
||||
<span class="title">职工动态时间线</span>
|
||||
<el-select v-model="type" @change="timeLine" placeholder="请选择" style="float: right; padding: 0;">
|
||||
<el-option v-for="(v,k) in typeObj" :key="k" :label="v.name" :value="k"></el-option>
|
||||
</el-select>
|
||||
<div style="float: right; padding: 0;margin-right: 10px">
|
||||
<el-date-picker
|
||||
@change="timeLine"
|
||||
v-model="dateRange"
|
||||
type="daterange"
|
||||
value-format="yyyy-MM-dd"
|
||||
range-separator="-"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
</div>
|
||||
<div class="text item" v-loading="timeline_loading">
|
||||
<el-timeline v-if="list.length">
|
||||
<el-timeline-item v-for="item in list" :color="typeObj[item.type]['color']"
|
||||
:timestamp="item.time"
|
||||
placement="top">
|
||||
<el-card shadow="hover">
|
||||
<el-collapse>
|
||||
<el-collapse-item name="1">
|
||||
<template slot="title">
|
||||
<div :style="'color:'+ typeObj[item.type].color">
|
||||
<i :class="typeObj[item.type].icon"></i> {{typeObj[item.type].name}}
|
||||
</div>
|
||||
</template>
|
||||
</el-collapse-item>
|
||||
</el-collapse>
|
||||
</el-card>
|
||||
</el-timeline-item>
|
||||
</el-timeline>
|
||||
|
||||
<el-row v-else class="none-data">
|
||||
<span class="none-data-title">暂无数据</span>
|
||||
</el-row>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
data: () => {
|
||||
return {
|
||||
hasChangeUserRole: "${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('H04')}",
|
||||
dateRange: [],
|
||||
type: 'all',
|
||||
chart_one_loading: false,
|
||||
top_block_loading: false,
|
||||
search_user_loading: false,
|
||||
timeline_loading: false,
|
||||
userid: '',
|
||||
yearnum: 10,
|
||||
typeObj: {
|
||||
all: {
|
||||
name: '全部',
|
||||
color: ''
|
||||
},
|
||||
zgww: {
|
||||
name: '职工慰问',
|
||||
color: '#5B8FF9',
|
||||
icon: 'fa fa-bed'
|
||||
},
|
||||
knbf: {
|
||||
name: '困难帮扶',
|
||||
color: '#5AD8A6',
|
||||
icon: 'fa fa-handshake-o'
|
||||
},
|
||||
znrx: {
|
||||
name: '子女入学',
|
||||
color: '#F6BD16',
|
||||
icon: 'fa fa-graduation-cap'
|
||||
},
|
||||
ta: {
|
||||
name: '撰写提案',
|
||||
color: "#E8684A",
|
||||
icon: 'fa fa-lightbulb-o'
|
||||
},
|
||||
xhd: {
|
||||
name: '校工会活动',
|
||||
color: "#6DC8EC",
|
||||
icon: 'el-icon-basketball'
|
||||
},
|
||||
fhhd: {
|
||||
name: '分工会活动',
|
||||
color: "#6DC8EC",
|
||||
icon: 'el-icon-basketball'
|
||||
},
|
||||
sthd: {
|
||||
name: '社团活动',
|
||||
color: "#6DC8EC",
|
||||
icon: 'el-icon-basketball'
|
||||
},
|
||||
yybx: {
|
||||
name: '经费报销',
|
||||
color: "#9270CA",
|
||||
icon: 'fa fa-money'
|
||||
},
|
||||
},
|
||||
numData: {
|
||||
now_year: {},
|
||||
all: {},
|
||||
},
|
||||
userOptions: [],
|
||||
user: {},
|
||||
list: [],
|
||||
desc: true,
|
||||
numYear: {
|
||||
startYear: new Date().getFullYear() - 9 + '',
|
||||
endYear: new Date().getFullYear() + '',
|
||||
},
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
timeLine() {
|
||||
this.timeline_loading = true
|
||||
$.post("/platform/caredata/staff/timeLine", {
|
||||
userid: this.userid,
|
||||
type: this.type,
|
||||
desc: this.desc,
|
||||
startTime: this.dateRange && this.dateRange.length ? this.dateRange[0] : '',
|
||||
endTime: this.dateRange && this.dateRange.length ? this.dateRange[1] : '',
|
||||
}, (res) => {
|
||||
if (res.code == 0) {
|
||||
let {data} = res
|
||||
this.list = data
|
||||
}
|
||||
this.timeline_loading = false
|
||||
}, "json");
|
||||
},
|
||||
userChange(id) {
|
||||
this.queryAll()
|
||||
this.user = this.userOptions.find(v => v.id == id)
|
||||
},
|
||||
queryAll() {
|
||||
this.getNumByYear()
|
||||
this.getYearNumAndAllNum()
|
||||
this.timeLine()
|
||||
},
|
||||
remoteMethod(str) {
|
||||
this.search_user_loading = true
|
||||
$.get("/platform/caredata/staff/queryUser", {
|
||||
key: str,
|
||||
}, (res) => {
|
||||
if (res.code == 0) {
|
||||
let {list} = res.data
|
||||
this.userOptions = list
|
||||
}
|
||||
this.search_user_loading = false
|
||||
}, "json");
|
||||
},
|
||||
getNumByYear() {
|
||||
this.chart_one_loading = true
|
||||
|
||||
let container = document.getElementById('chart_one');
|
||||
container.innerHTML = ''
|
||||
|
||||
const config = {
|
||||
"title": {
|
||||
"visible": true,
|
||||
"text": "职工动态曲线"
|
||||
},
|
||||
"description": {
|
||||
"visible": true,
|
||||
"text": "单位(条)"
|
||||
},
|
||||
"legend": {
|
||||
"position": "top-right",
|
||||
"flipPage": false
|
||||
},
|
||||
"point": {
|
||||
"visible": true
|
||||
},
|
||||
"smooth": true,
|
||||
"forceFit": false,
|
||||
"width": $('#chart_one').width(),
|
||||
"height": $('#chart_one').height(),
|
||||
"xField": "year",
|
||||
"yField": "value",
|
||||
"stackField": "type",
|
||||
|
||||
}
|
||||
let plot
|
||||
|
||||
if (this.userid) {
|
||||
$.post("/platform/caredata/staff/getNumByYear", {
|
||||
userid: this.userid,
|
||||
yearnum: this.yearnum,
|
||||
startYear: this.numYear.startYear,
|
||||
endYear: this.numYear.endYear,
|
||||
}, (res) => {
|
||||
if (res.code == 0) {
|
||||
let {data} = res
|
||||
|
||||
plot = new G2Plot.Area(container, {
|
||||
data,
|
||||
...config,
|
||||
});
|
||||
|
||||
plot.render();
|
||||
|
||||
this.chart_one_loading = false
|
||||
}
|
||||
}, "json");
|
||||
} else {
|
||||
let data = []
|
||||
let year = new Date().getFullYear()
|
||||
for (let i = year - this.yearnum + 1; i <= year; i++) {
|
||||
for (let k in this.typeObj) {
|
||||
data.push({
|
||||
type: this.typeObj[k]['name'],
|
||||
value: 0,
|
||||
year: i
|
||||
})
|
||||
}
|
||||
}
|
||||
plot = new G2Plot.StackArea(container, {data, ...config,});
|
||||
plot.render();
|
||||
this.chart_one_loading = false
|
||||
}
|
||||
},
|
||||
getYearNumAndAllNum() {
|
||||
this.top_block_loading = true
|
||||
$.post("/platform/caredata/staff/getYearNumAndAllNum", {
|
||||
userid: this.userid,
|
||||
}, (res) => {
|
||||
if (res.code == 0) {
|
||||
let {data} = res
|
||||
this.numData = data
|
||||
}
|
||||
this.top_block_loading = false
|
||||
}, "json");
|
||||
},
|
||||
},
|
||||
created: function () {
|
||||
$.get("/platform/caredata/staff/initUser", (res) => {
|
||||
if (res.code == 0) {
|
||||
this.userOptions = [res.data]
|
||||
this.userid = this.userOptions[0].id
|
||||
this.userChange(this.userOptions[0].id)
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
mounted: function () {
|
||||
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,311 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.formData .viewFile {
|
||||
height: 200px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<el-card shadow="never">
|
||||
<div class="search">
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">年  度:</div>
|
||||
<div class="search-item-option">
|
||||
<el-date-picker
|
||||
placeholder="选择年"
|
||||
style="width: 100%"
|
||||
type="year" v-model="pageForm.year"
|
||||
value-format="yyyy">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">姓名/工号:</div>
|
||||
<div class="search-item-option">
|
||||
<el-input @keyup.enter.native="doSearch" clearable
|
||||
placeholder="请输入内容"
|
||||
v-model="pageForm.searchKeyword">
|
||||
<el-select clearable placeholder="查询类型"
|
||||
slot="prepend"
|
||||
style="width: 100px;"
|
||||
v-model="pageForm.searchName">
|
||||
<el-option label="姓名" value="userName"></el-option>
|
||||
<el-option label="工号" value="loginName"></el-option>
|
||||
</el-select>
|
||||
</el-input>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">摘要:</div>
|
||||
<div class="search-item-option">
|
||||
<el-input v-model="pageForm.notes" placeholder="请输入摘要" clearable>
|
||||
</el-input>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">所属工会:</div>
|
||||
<div class="search-item-option">
|
||||
<el-select placeholder="所属工会" v-model="pageForm.unionId"
|
||||
style="width: 100%;"
|
||||
clearable="true"
|
||||
@change="flushUnits" @clear="flushUnits"
|
||||
filterable>
|
||||
<el-option v-for="item in unions" :label="item.unionname"
|
||||
:value="item.id"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">所属单位:</div>
|
||||
<div class="search-item-option">
|
||||
<el-select placeholder="所属单位" v-model="pageForm.unitId"
|
||||
style="width: 100%;"
|
||||
clearable="true"
|
||||
filterable="true">
|
||||
<el-option v-for="item in units" :label="item.name"
|
||||
:value="item.id"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">所属协会:</div>
|
||||
<div class="search-item-option">
|
||||
<el-select placeholder="所属协会" v-model="pageForm.clubId"
|
||||
style="width: 100%;"
|
||||
clearable="true"
|
||||
filterable="true">
|
||||
<el-option v-for="item in clubs" :label="item.name"
|
||||
:value="item.id"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-query">
|
||||
<el-button @click="doSearch" icon="el-icon-search" type="primary">搜索
|
||||
</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
<el-card class="mt10" shadow="never">
|
||||
<table-tool :app="this" label="预审列表">
|
||||
<template #func>
|
||||
<el-radio-group v-model="pageForm.auditState" @change="doSearch" size="small">
|
||||
<el-radio-button :label="0">全部</el-radio-button>
|
||||
<el-radio-button :label="1">已审核</el-radio-button>
|
||||
<el-radio-button :label="2">未审核</el-radio-button>
|
||||
</el-radio-group>
|
||||
</template>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" @sort-change="pageOrder" row-key="id"
|
||||
style="width: 100%"
|
||||
v-loading="tableLoading">
|
||||
<el-table-column :index="indexMethod" align="center" header-align="center"
|
||||
label="序号"
|
||||
type="index"
|
||||
width="80px"></el-table-column>
|
||||
<el-table-column
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
align="center"
|
||||
header-align="center"
|
||||
v-for="column in tableColumns">
|
||||
<template scope="{row}" v-if="column.prop==='auditState'">
|
||||
<el-tag v-if="row.auditState===0" type="info">保存中</el-tag>
|
||||
<el-tag v-if="row.auditState===1" type="info">待审核</el-tag>
|
||||
<el-tag v-else-if="row.auditState===2" type="danger">退回修改</el-tag>
|
||||
<el-tag v-else-if="row.auditState===3" type="danger">退回修改并结束</el-tag>
|
||||
<el-tag v-else-if="row.auditState===4" type="success">已通过</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="操作"
|
||||
width="300">
|
||||
<template scope="{row}">
|
||||
<el-button @click="openView(row)" type="primary" size="mini">查看
|
||||
</el-button>
|
||||
<el-button @click="openAudit(row)" type="primary" size="mini"
|
||||
:disabled="![1].includes(row.auditState)">审核
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</guava>
|
||||
|
||||
<el-dialog
|
||||
title="预审材料信息"
|
||||
:visible.sync="dialogVisible"
|
||||
width="40%"
|
||||
:close-on-click-modal="false"
|
||||
>
|
||||
<info ref="auditInfo">
|
||||
<template #handle>
|
||||
<el-form :model="formData" ref="form" :rules="formRules" label-position="right"
|
||||
style="padding: 20px 0"
|
||||
label-width="120px">
|
||||
|
||||
<el-row gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="username" label="审核人员">
|
||||
<el-input v-model="formData.username"
|
||||
disabled></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="time" label="审核时间">
|
||||
<el-input v-model="formData.auditTime" disabled></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
</el-row>
|
||||
<el-form-item prop="opinion" label="审核意见">
|
||||
<el-input type="textarea" v-model="formData.auditOpinion" rows="4"
|
||||
maxlength="500"
|
||||
placeholder="请填写您的审核意见"></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</template>
|
||||
</info>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="dialogVisible = false">关 闭</el-button>
|
||||
<el-button type="danger" @click="doSubmit(1)">退回修改</el-button>
|
||||
<el-button type="danger" @click="doSubmit(2)">退回修改并结束</el-button>
|
||||
<el-button type="primary" @click="doSubmit(3)">通 过</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog
|
||||
title="预审材料信息"
|
||||
:visible.sync="viewDialogVisible"
|
||||
width="50%"
|
||||
:close-on-click-modal="false">
|
||||
<info ref="info"></info>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="viewDialogVisible = false" type="primary">关 闭</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
<script>
|
||||
<!--#include("info.js"){}#-->
|
||||
new Vue({
|
||||
el: "#app",
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
units: [],
|
||||
unions: [],
|
||||
clubs: [],
|
||||
pageForm: {
|
||||
auditState: 0,
|
||||
searchName: "userName",
|
||||
year: new Date().getFullYear() + "",
|
||||
clubId: ""
|
||||
},
|
||||
tableColumns: [
|
||||
{prop: "loginName", label: "工号"},
|
||||
{prop: "userName", label: "姓名"},
|
||||
{prop: "unitName", label: "单位"},
|
||||
{prop: "unionName", label: "工会"},
|
||||
{prop: "clubName", label: "协会"},
|
||||
{prop: "notes", label: "事由"},
|
||||
{prop: "applyDate", label: "填写时间"},
|
||||
{prop: "auditState", label: "状态"}
|
||||
],
|
||||
formRules: {},
|
||||
dialogVisible: false,
|
||||
viewDialogVisible: false
|
||||
}
|
||||
},
|
||||
components: {
|
||||
"info": info
|
||||
},
|
||||
methods: {
|
||||
openView(row) {
|
||||
this.viewDialogVisible = true
|
||||
setTimeout(() => {
|
||||
this.$refs.info.openView(row.id)
|
||||
}, 300)
|
||||
},
|
||||
openAudit(row) {
|
||||
this.formData = {
|
||||
id: row.id,
|
||||
auditOpinion: "",
|
||||
auditTime: moment().format("YYYY-MM-DD"),
|
||||
username: "${@shiro.getPrincipalProperty('username')}"
|
||||
}
|
||||
this.dialogVisible = true
|
||||
setTimeout(() => {
|
||||
this.$refs.auditInfo.openAudit(row.id, true)
|
||||
}, 300)
|
||||
},
|
||||
doSubmit(flag) {
|
||||
this.$refs.form.validate(async (valid) => {
|
||||
if (valid) {
|
||||
let msg = ""
|
||||
if (flag === 1) {
|
||||
msg = "退回修改"
|
||||
} else if (flag === 2) {
|
||||
msg = "退回修改并结束流程"
|
||||
} else {
|
||||
msg = "通过"
|
||||
}
|
||||
this.$confirm("确定要" + msg + "吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
}).then(() => {
|
||||
this.formData.flag = flag
|
||||
$.post("/platform/clubPreAudit/audit/doSubmit", this.formData).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.$message({
|
||||
type: "success",
|
||||
message: "操作成功!"
|
||||
})
|
||||
this.dialogVisible = false
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
}
|
||||
})
|
||||
},
|
||||
async flushUnits() {
|
||||
this.$set(this.pageForm, "unitId", "")
|
||||
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('H03')}" === "true") {
|
||||
this.units = await getUnits(this.pageForm.unionId)
|
||||
} else {
|
||||
this.units = await getUnits("${@shiro.getPrincipalProperty('unit').getUnionid()}")
|
||||
}
|
||||
},
|
||||
async getClubs() {
|
||||
const resp = await $.post("/platform/clubPreAudit/manage/getClubs")
|
||||
if (resp.code === 0) {
|
||||
this.clubs = resp.data
|
||||
}
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.unions = await getUnions(null)
|
||||
this.flushUnits()
|
||||
await this.getClubs()
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,102 @@
|
||||
let info = {
|
||||
/*language=HTML*/
|
||||
template: `
|
||||
<el-tabs tab-position="top" v-model="activeName" v-loading="loading">
|
||||
<el-tab-pane label="预审信息" name="1">
|
||||
<el-form label-width="110px" class="formData">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="姓名">
|
||||
{{viewData.userName}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="工号">
|
||||
{{viewData.loginName}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="单位">
|
||||
{{viewData.unitName}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="工会">
|
||||
{{viewData.unionName}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="协会">
|
||||
{{viewData.clubName}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="摘要">
|
||||
{{viewData.notes}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="联系方式">
|
||||
{{viewData.mobile}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="材料" prop="files">
|
||||
<file-upload card :files.sync="viewData.files"
|
||||
view></file-upload>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="审核信息" name="2" v-if="viewData.auditId">
|
||||
<el-form label-width="110px" class="formData">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="姓名">
|
||||
{{viewData.auditInfo.username}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="审核时间">
|
||||
{{viewData.auditInfo.auditTime}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="审核意见">
|
||||
{{viewData.auditInfo.auditOpinion}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-form>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane v-if="handle" :label="label" name="999">
|
||||
<slot name="handle"></slot>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</el-tabs>
|
||||
`,
|
||||
data() {
|
||||
return {
|
||||
handle: false,
|
||||
label: "审核",
|
||||
loading: false,
|
||||
activeName: "1",
|
||||
viewData: {}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async openAudit(id, handle) {
|
||||
this.handle = handle
|
||||
await this.openView(id)
|
||||
},
|
||||
async openView(id) {
|
||||
this.loading = true
|
||||
const resp = await $.post("/platform/clubPreAudit/manage/findOne", {id})
|
||||
resp.data.files = JSON.parse(resp.data.files)
|
||||
this.viewData = resp.data
|
||||
this.loading = false
|
||||
if (this.handle){
|
||||
this.activeName = "999"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,292 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.formData .viewFile {
|
||||
height: 200px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<el-card shadow="never">
|
||||
<div class="search">
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">年  度:</div>
|
||||
<div class="search-item-option">
|
||||
<el-date-picker
|
||||
placeholder="选择年"
|
||||
style="width: 100%"
|
||||
type="year" v-model="pageForm.year"
|
||||
value-format="yyyy">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">事由:</div>
|
||||
<div class="search-item-option">
|
||||
<el-input v-model="pageForm.notes" placeholder="请选择或输入摘要" clearable>
|
||||
</el-input>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-query">
|
||||
<el-button @click="doSearch" icon="el-icon-search" type="primary">搜索
|
||||
</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
<el-card class="mt10" shadow="never">
|
||||
<table-tool :app="this" label="预审列表">
|
||||
<template #func>
|
||||
<el-button v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('xhbxy')}" type="primary" @click="openAdd" size="small">新增预审材料</el-button>
|
||||
</template>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" @sort-change="pageOrder" row-key="id"
|
||||
style="width: 100%"
|
||||
v-loading="tableLoading">
|
||||
<el-table-column :index="indexMethod" align="center" header-align="center"
|
||||
label="序号"
|
||||
type="index"
|
||||
width="80px"></el-table-column>
|
||||
<el-table-column
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
align="center"
|
||||
header-align="center"
|
||||
v-for="column in tableColumns">
|
||||
<template scope="{row}" v-if="column.prop==='auditState'">
|
||||
<el-tag v-if="row.auditState===0" type="info">保存中</el-tag>
|
||||
<el-tag v-if="row.auditState===1" type="info">待审核</el-tag>
|
||||
<el-tag v-else-if="row.auditState===2" type="danger">退回修改</el-tag>
|
||||
<el-tag v-else-if="row.auditState===3" type="danger">退回修改并结束</el-tag>
|
||||
<el-tag v-else-if="row.auditState===4" type="success">已通过</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="操作"
|
||||
width="300">
|
||||
<template scope="{row}">
|
||||
<el-button @click="openView(row)" type="primary" size="mini">查看
|
||||
</el-button>
|
||||
<el-button @click="openEdit(row)" type="primary" size="mini"
|
||||
:disabled="![0,1,2].includes(row.auditState)">编辑
|
||||
</el-button>
|
||||
<el-button @click="doDelete(row.id)" type="danger" size="mini"
|
||||
:disabled="![0,1].includes(row.auditState)">删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</guava>
|
||||
|
||||
<el-dialog
|
||||
title="预审材料信息"
|
||||
:visible.sync="dialogVisible"
|
||||
width="60%"
|
||||
:close-on-click-modal="false"
|
||||
>
|
||||
<el-form :model="formData" :rules="rules" ref="form" label-width="100px" class="formData">
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="姓名" prop="userName">
|
||||
<el-input v-model="formData.userName" disabled>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="工号" prop="loginName">
|
||||
<el-input v-model="formData.loginName" disabled>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="单位" prop="unitName">
|
||||
<el-input v-model="formData.unitName" disabled>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="工会" prop="unionName">
|
||||
<el-input v-model="formData.unionName" disabled>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="协会" prop="clubName">
|
||||
<el-input v-model="formData.clubName" disabled>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="摘要" prop="notes">
|
||||
<el-input v-model="formData.notes"
|
||||
placeholder="请输入摘要" maxlength="50" show-word-limit>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="联系电话" prop="mobile">
|
||||
<el-input v-model="formData.mobile"
|
||||
placeholder="请输入联系电话" maxlength="50" show-word-limit>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="材料" prop="files">
|
||||
<file-upload :files.sync="formData.files"
|
||||
:type="['jpg', 'jpeg', 'png', 'JPG', 'JPEG', 'PNG']" :max="30">
|
||||
<template #el-upload__tip>
|
||||
<div class="el-upload__tip" slot="tip">
|
||||
请上传类型为jpg/png/jpeg等格式的图片,最多上传30个文件
|
||||
</div>
|
||||
</template>
|
||||
</file-upload>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="dialogVisible = false">关 闭</el-button>
|
||||
<el-button type="primary" @click="doSubmit(false)" :loading="formLoading">保 存</el-button>
|
||||
<el-button type="primary" @click="doSubmit(true)" :loading="formLoading">提 交</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog
|
||||
title="预审材料信息"
|
||||
:visible.sync="viewDialogVisible"
|
||||
width="50%"
|
||||
:close-on-click-modal="false">
|
||||
<info ref="info"></info>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="viewDialogVisible = false" type="primary">关 闭</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
<script>
|
||||
<!--#include("info.js"){}#-->
|
||||
const vue = new Vue({
|
||||
el: "#app",
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
pageForm: {
|
||||
year: new Date().getFullYear() + ""
|
||||
},
|
||||
tableColumns: [
|
||||
{ prop: "loginName", label: "工号" },
|
||||
{ prop: "userName", label: "姓名" },
|
||||
{ prop: "unitName", label: "单位" },
|
||||
{ prop: "unionName", label: "工会" },
|
||||
{ prop: "clubName", label: "协会" },
|
||||
{ prop: "notes", label: "摘要" },
|
||||
{ prop: "applyDate", label: "填写时间" },
|
||||
{ prop: "auditState", label: "状态" }
|
||||
],
|
||||
dialogVisible: false,
|
||||
viewDialogVisible: false,
|
||||
rules: {
|
||||
notes: [{ required: true, message: "必填", trigger: "blur" }],
|
||||
mobile: [{ required: true, message: "必填", trigger: "blur" }],
|
||||
files: [{ required: true, message: "必填", trigger: "blur" }]
|
||||
}
|
||||
}
|
||||
},
|
||||
components: {
|
||||
"info": info
|
||||
},
|
||||
methods: {
|
||||
async openAdd() {
|
||||
this.formData = {
|
||||
applyDate: moment().format("YYYY-MM-DD"),
|
||||
userName: "${@shiro.getPrincipalProperty('username')}",
|
||||
loginName: "${@shiro.getPrincipalProperty('loginname')}",
|
||||
unitName: "${@shiro.getPrincipalProperty('unit').getName()}",
|
||||
unionName: "${@shiro.getPrincipalProperty('union').getUnionname()}",
|
||||
clubName: "",
|
||||
clubId: ""
|
||||
}
|
||||
|
||||
// 获取用户所属协会
|
||||
const clubResp = await $.post("/platform/clubPreAudit/manage/getUserClub")
|
||||
if (clubResp.code === 0 && clubResp.data) {
|
||||
this.formData.clubName = clubResp.data.clubName || ""
|
||||
this.formData.clubId = clubResp.data.clubId || ""
|
||||
}
|
||||
|
||||
this.dialogVisible = true
|
||||
this.$nextTick(() => {
|
||||
this.$refs.form.clearValidate()
|
||||
})
|
||||
},
|
||||
openView(row) {
|
||||
this.viewDialogVisible = true
|
||||
setTimeout(() => {
|
||||
this.$refs.info.openView(row.id)
|
||||
}, 300)
|
||||
},
|
||||
openEdit(row) {
|
||||
const data = clone(row)
|
||||
data.files = JSON.parse(data.files)
|
||||
this.formData = data
|
||||
this.dialogVisible = true
|
||||
},
|
||||
doDelete(id) {
|
||||
this.$confirm("确认删除?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
}).then(() => {
|
||||
$.post("/platform/clubPreAudit/manage/doDelete", { id }).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.$message({
|
||||
type: "success",
|
||||
message: "删除成功!"
|
||||
})
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
doSubmit(flag) {
|
||||
this.$refs.form.validate(async (valid) => {
|
||||
if (valid) {
|
||||
this.$confirm("确定要" + (flag ? "提交" : "保存") + "吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
}).then(() => {
|
||||
this.formLoading = true
|
||||
$.post("/platform/clubPreAudit/manage/doSubmit", {
|
||||
preAudit: JSON.stringify(this.formData),
|
||||
flag: flag
|
||||
}).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.$message({
|
||||
type: "success",
|
||||
message: "操作成功!"
|
||||
})
|
||||
this.dialogVisible = false
|
||||
this.pageData()
|
||||
}
|
||||
this.formLoading = false
|
||||
})
|
||||
})
|
||||
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,258 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.formData .viewFile {
|
||||
height: 200px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<el-card shadow="never">
|
||||
<div class="search">
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">时间段:</div>
|
||||
<div class="search-item-option">
|
||||
<el-date-picker
|
||||
v-model="pageForm.date"
|
||||
type="daterange"
|
||||
@change="dateChange"
|
||||
align="right"
|
||||
unlink-panels
|
||||
value-format="yyyy-MM-dd"
|
||||
style="width: 100%"
|
||||
range-separator="至"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:picker-options="pickerOptions">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">姓名/工号:</div>
|
||||
<div class="search-item-option">
|
||||
<el-input @keyup.enter.native="doSearch" clearable
|
||||
placeholder="请输入内容"
|
||||
v-model="pageForm.searchKeyword">
|
||||
<el-select clearable placeholder="查询类型"
|
||||
slot="prepend"
|
||||
style="width: 100px;"
|
||||
v-model="pageForm.searchName">
|
||||
<el-option label="姓名" value="userName"></el-option>
|
||||
<el-option label="工号" value="loginName"></el-option>
|
||||
</el-select>
|
||||
</el-input>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">摘要:</div>
|
||||
<div class="search-item-option">
|
||||
<el-input v-model="pageForm.notes" placeholder="请输入摘要" clearable>
|
||||
</el-input>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">所属工会:</div>
|
||||
<div class="search-item-option">
|
||||
<el-select placeholder="所属工会" v-model="pageForm.unionId"
|
||||
style="width: 100%;"
|
||||
clearable="true"
|
||||
@change="flushUnits" @clear="flushUnits"
|
||||
filterable>
|
||||
<el-option v-for="item in unions" :label="item.unionname"
|
||||
:value="item.id"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">所属单位:</div>
|
||||
<div class="search-item-option">
|
||||
<el-select placeholder="所属单位" v-model="pageForm.unitId"
|
||||
style="width: 100%;"
|
||||
clearable="true"
|
||||
filterable="true">
|
||||
<el-option v-for="item in units" :label="item.name"
|
||||
:value="item.id"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">所属协会:</div>
|
||||
<div class="search-item-option">
|
||||
<el-select placeholder="所属协会" v-model="pageForm.clubId"
|
||||
style="width: 100%;"
|
||||
clearable="true"
|
||||
filterable="true">
|
||||
<el-option v-for="item in clubs" :label="item.name"
|
||||
:value="item.id"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-query">
|
||||
<el-button @click="doSearch" icon="el-icon-search" type="primary">搜索
|
||||
</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
<el-card class="mt10" shadow="never">
|
||||
<table-tool :app="this" label="预审列表">
|
||||
<template #func>
|
||||
|
||||
</template>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" @sort-change="pageOrder" row-key="id"
|
||||
style="width: 100%"
|
||||
v-loading="tableLoading">
|
||||
<el-table-column :index="indexMethod" align="center" header-align="center"
|
||||
label="序号"
|
||||
type="index"
|
||||
width="80px"></el-table-column>
|
||||
<el-table-column
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
align="center"
|
||||
header-align="center"
|
||||
v-for="column in tableColumns">
|
||||
<template scope="{row}" v-if="column.prop==='auditState'">
|
||||
<el-tag v-if="row.auditState===0" type="info">保存中</el-tag>
|
||||
<el-tag v-if="row.auditState===1" type="info">待审核</el-tag>
|
||||
<el-tag v-else-if="row.auditState===2" type="danger">退回修改</el-tag>
|
||||
<el-tag v-else-if="row.auditState===3" type="danger">退回修改并结束</el-tag>
|
||||
<el-tag v-else-if="row.auditState===4" type="success">已通过</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="操作"
|
||||
width="100">
|
||||
<template scope="{row}">
|
||||
<el-button @click="openView(row)" type="primary" size="mini">查看
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</guava>
|
||||
|
||||
<el-dialog
|
||||
title="预审材料信息"
|
||||
:visible.sync="viewDialogVisible"
|
||||
width="40%"
|
||||
:close-on-click-modal="false">
|
||||
<info ref="info"></info>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="viewDialogVisible = false" type="primary">关 闭</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
<script>
|
||||
<!--#include("info.js"){}#-->
|
||||
new Vue({
|
||||
el: "#app",
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
units: [],
|
||||
unions: [],
|
||||
clubs: [],
|
||||
pageForm: {
|
||||
date: [moment().subtract(1, "months")._d, new Date()],
|
||||
year: new Date().getFullYear() + "",
|
||||
clubId: ""
|
||||
},
|
||||
tableColumns: [
|
||||
{prop: "loginName", label: "工号"},
|
||||
{prop: "userName", label: "姓名"},
|
||||
{prop: "unitName", label: "单位"},
|
||||
{prop: "unionName", label: "工会"},
|
||||
{prop: "clubName", label: "协会"},
|
||||
{prop: "notes", label: "事由"},
|
||||
{prop: "applyDate", label: "填写时间"},
|
||||
{prop: "auditState", label: "状态"}
|
||||
],
|
||||
formRules: {},
|
||||
viewDialogVisible: false,
|
||||
pickerOptions: {
|
||||
shortcuts: [{
|
||||
text: "最近一周",
|
||||
onClick(picker) {
|
||||
const end = new Date()
|
||||
const start = new Date()
|
||||
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7)
|
||||
picker.$emit("pick", [start, end])
|
||||
}
|
||||
}, {
|
||||
text: "最近一个月",
|
||||
onClick(picker) {
|
||||
const end = new Date()
|
||||
const start = new Date()
|
||||
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30)
|
||||
picker.$emit("pick", [start, end])
|
||||
}
|
||||
}, {
|
||||
text: "最近三个月",
|
||||
onClick(picker) {
|
||||
const end = new Date()
|
||||
const start = new Date()
|
||||
start.setTime(start.getTime() - 3600 * 1000 * 24 * 90)
|
||||
picker.$emit("pick", [start, end])
|
||||
}
|
||||
}]
|
||||
}
|
||||
}
|
||||
},
|
||||
components: {
|
||||
"info": info
|
||||
},
|
||||
methods: {
|
||||
dateChange(val) {
|
||||
if (val && val.length > 0) {
|
||||
this.$set(this.pageForm, "startDate", val[0])
|
||||
this.$set(this.pageForm, "endDate", val[1])
|
||||
} else {
|
||||
this.$set(this.pageForm, "startDate", "")
|
||||
this.$set(this.pageForm, "endDate", "")
|
||||
}
|
||||
|
||||
},
|
||||
openView(row) {
|
||||
this.viewDialogVisible = true
|
||||
setTimeout(() => {
|
||||
this.$refs.info.openView(row.id)
|
||||
}, 300)
|
||||
},
|
||||
async flushUnits() {
|
||||
this.$set(this.pageForm, "unitId", "")
|
||||
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('H03')}" === "true") {
|
||||
this.units = await getUnits(this.pageForm.unionId)
|
||||
} else {
|
||||
this.units = await getUnits("${@shiro.getPrincipalProperty('unit').getUnionid()}")
|
||||
}
|
||||
},
|
||||
async getClubs() {
|
||||
const resp = await $.post("/platform/clubPreAudit/manage/getClubs")
|
||||
if (resp.code === 0) {
|
||||
this.clubs = resp.data
|
||||
}
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.unions = await getUnions(null)
|
||||
this.flushUnits()
|
||||
await this.getClubs()
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,609 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.left_aside {
|
||||
width: 200px;
|
||||
background-color: #eaecf6;
|
||||
height: 500px;
|
||||
}
|
||||
|
||||
.left_tree {
|
||||
margin-top: 10px;
|
||||
margin-left: 10px;
|
||||
background-color: #eaecf6;
|
||||
}
|
||||
|
||||
.note {
|
||||
width: 100%;
|
||||
height: 320px;
|
||||
}
|
||||
|
||||
.el-upload input[type=file] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.avatar-uploader .el-upload {
|
||||
border: 1px dashed #d9d9d9;
|
||||
border-radius: 6px;
|
||||
cursor: pointer;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.avatar-uploader .el-upload:hover {
|
||||
border-color: #409EFF;
|
||||
}
|
||||
|
||||
.avatar-uploader-icon {
|
||||
font-size: 28px;
|
||||
color: #8c939d;
|
||||
width: 128px;
|
||||
height: 128px;
|
||||
line-height: 128px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.avatar {
|
||||
width: 128px;
|
||||
height: 128px;
|
||||
display: block;
|
||||
}
|
||||
</style>
|
||||
<link href="${base!}/assets/platform/plugins/umeditor/themes/default/css/umeditor.min.css" type="text/css"
|
||||
rel="stylesheet">
|
||||
<script src="${base!}/assets/platform/plugins/umeditor/umeditor.config.js"></script>
|
||||
<script src="${base!}/assets/platform/plugins/umeditor/umeditor.js"></script>
|
||||
<div id="app" v-cloak>
|
||||
<el-row class="header navbar bg-white shadow">
|
||||
<div class="btn-group tool-button mt5">
|
||||
<span>站点:</span>
|
||||
<el-select size="medium" v-model="site.id" placeholder="请选择" @change="siteChange">
|
||||
<el-option
|
||||
v-for="item in sites"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value">
|
||||
</el-option>
|
||||
</el-select>
|
||||
<el-button size="medium" @click="openAdd">
|
||||
<i class="ti-plus"></i>
|
||||
新建文章
|
||||
</el-button>
|
||||
</div>
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-input placeholder="请输入标题" v-model="pageForm.searchKeyword" @keyup.enter.native="doSearch">
|
||||
<el-button slot="append" icon="el-icon-search" @click="doSearch"></el-button>
|
||||
</el-input>
|
||||
</div>
|
||||
<div class="pull-right offscreen-right mt5">
|
||||
<el-button size="medium" @click="delMore" type="danger" :disabled="selectData.length==0">
|
||||
<i class="el-icon-delete"></i>
|
||||
删除
|
||||
</el-button>
|
||||
</div>
|
||||
</el-row>
|
||||
<el-row style="padding-top: 50px;">
|
||||
<section class="el-container">
|
||||
<aside class="el-aside left_aside">
|
||||
<el-tree
|
||||
@node-click="treeClick"
|
||||
class="left_tree"
|
||||
:data="channelData"
|
||||
node-key="id"
|
||||
:props="defaultProps">
|
||||
</el-tree>
|
||||
</aside>
|
||||
<main class="el-main">
|
||||
<el-breadcrumb separator-class="el-icon-arrow-right">
|
||||
<el-breadcrumb-item>{{site.site_name}}</el-breadcrumb-item>
|
||||
<el-breadcrumb-item>{{pageForm.channelName||'所有栏目'}}</el-breadcrumb-item>
|
||||
</el-breadcrumb>
|
||||
<el-row style="margin-top: 5px;">
|
||||
<el-table
|
||||
:data="tableData"
|
||||
@sort-change='pageOrder'
|
||||
size="small"
|
||||
header-align="center"
|
||||
style="width: 100%"
|
||||
@selection-change="handleSelectionChange"
|
||||
:default-sort="{prop: 'publishAt', order: 'descending'}"
|
||||
>
|
||||
<el-table-column
|
||||
type="selection"
|
||||
width="35">
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="文章标题" header-align="left" prop="title"
|
||||
:show-overflow-tooltip="true">
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column sortable label="发布时间" header-align="center" prop="publishAt"
|
||||
width="240">
|
||||
<template slot-scope="scope">
|
||||
{{formatAt(scope.row.publishAt)}} - {{formatAt(scope.row.endAt)}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="发布状态" header-align="center" align="center" prop="disabled"
|
||||
width="120">
|
||||
<template slot-scope="scope">
|
||||
<i v-if="scope.row.disabled" class="fa fa-circle text-danger ml5"></i>
|
||||
<i v-if="!scope.row.disabled" class="fa fa-circle text-success ml5"></i>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column
|
||||
prop="id"
|
||||
label="操作"
|
||||
width="120">
|
||||
<template slot-scope="scope">
|
||||
<el-dropdown @command="dropdownCommand">
|
||||
<el-button size="mini">
|
||||
<i class="ti-settings"></i>
|
||||
<span class="ti-angle-down"></span>
|
||||
</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item :command="{type:'view',id:scope.row.id}">
|
||||
预览
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item divided
|
||||
:command="{type:'enable',id:scope.row.id,row:scope.row}">
|
||||
启用
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'disable',id:scope.row.id,row:scope.row}">
|
||||
禁用
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item divided :command="{type:'edit',id:scope.row.id}">
|
||||
修改
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item
|
||||
:command="{type:'delete',id:scope.row.id,title:scope.row.title}">
|
||||
删除
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</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>
|
||||
</main>
|
||||
</section>
|
||||
</el-row>
|
||||
|
||||
<el-dialog
|
||||
:title="dialogTitle"
|
||||
:visible.sync="dialogVisible"
|
||||
width="60%">
|
||||
<el-form :model="formData" ref="dialogForm" :rules="formRules" size="small" label-width="80px">
|
||||
<el-form-item prop="title" label="文章标题">
|
||||
<el-input maxlength="255" placeholder="文章标题"
|
||||
v-model="formData.title"
|
||||
auto-complete="off" tabindex="1" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="author" label="文章作者">
|
||||
<el-input maxlength="50" placeholder="文章作者"
|
||||
v-model="formData.author"
|
||||
auto-complete="off" tabindex="1" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="info" label="文章简介">
|
||||
<el-input type="textarea" v-model="formData.info"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="url" label="URL">
|
||||
<el-input maxlength="50" placeholder="URL"
|
||||
v-model="formData.url"
|
||||
auto-complete="off" tabindex="2" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="publishAt" label="发布时间">
|
||||
<el-date-picker
|
||||
format="yyyy-MM-dd HH:mm:ss"
|
||||
value-format="timestamp"
|
||||
v-model="formData.time"
|
||||
type="datetimerange"
|
||||
range-separator="至"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item prop="disabled" label="发布状态">
|
||||
<el-switch
|
||||
v-model="formData.disabled"
|
||||
active-color="#ff4949"
|
||||
inactive-color="#13ce66">
|
||||
</el-switch>
|
||||
</el-form-item>
|
||||
<el-form-item prop="picurl" label="标题图">
|
||||
<el-upload
|
||||
class="avatar-uploader"
|
||||
tabindex="5"
|
||||
action="${base}/open/file/upload/image"
|
||||
name="Filedata"
|
||||
:show-file-list="false"
|
||||
:on-success="function(resp,file,fileList){return handlePicSuccess(resp,file,fileList,'picurl')}">
|
||||
|
||||
<img v-if="formData.picurl" :src="'${AppFileDomain!}'+formData.picurl" class="avatar">
|
||||
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
|
||||
</el-upload>
|
||||
</el-form-item>
|
||||
<el-form-item prop="content" label="文章内容">
|
||||
<!--一个页面中不能出现两个umeditor对象,所以新建和修改用同一个dialog来做吧-->
|
||||
<script type="text/plain" id="content" class="note"></script>
|
||||
<!---->
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="dialogVisible = false"> 取 消 </el-button>
|
||||
<el-button type="primary" @click="doSave"> 确 定 </el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog
|
||||
title="预览文章"
|
||||
:visible.sync="viewDialogVisible"
|
||||
width="60%">
|
||||
<el-row style="text-align: center">
|
||||
<h4>{{formData.title}}</h4>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<span>作者:{{formData.author}}</span>
|
||||
<span>发布时间:{{formatAt(formData.publishAt)}} - {{formatAt(formData.endAt)}}</span>
|
||||
</el-row>
|
||||
<el-row style="margin-top: 5px !important;margin-bottom: 5px !important;border-bottom: 1px solid #DDD;">
|
||||
</el-row>
|
||||
<el-row>
|
||||
<span v-html="formData.content"></span>
|
||||
</el-row>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="viewDialogVisible = false"> 关 闭 </el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
<script>
|
||||
new Vue({
|
||||
el: "#app",
|
||||
data: function () {
|
||||
var sites = [];
|
||||
<!--#for(o in siteList){#-->
|
||||
sites.push({value: "${o.id!}", label: "${o.site_name!}"});
|
||||
<!--#}#-->
|
||||
var site = {id: "", site_name: ""};
|
||||
<!--#if(!isEmpty(site)){#-->
|
||||
site = {id: "${site.id}", site_name: "${site.site_name}"};
|
||||
<!--#}#-->
|
||||
return {
|
||||
dialogVisible: false,
|
||||
viewDialogVisible: false,
|
||||
dialogTitle: "新建文章",
|
||||
sites: sites,
|
||||
site: site,
|
||||
selectData: [],
|
||||
pageForm: {
|
||||
siteId: site.id,
|
||||
channelId: "",
|
||||
channelName: "",
|
||||
searchKeyword: "",
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
pageOrderName: "publishAt",
|
||||
pageOrderBy: "descending"
|
||||
},
|
||||
channelData: [],
|
||||
defaultProps: {
|
||||
children: 'children',
|
||||
label: 'label'
|
||||
},
|
||||
tableData: [],
|
||||
formData: {
|
||||
id: "",
|
||||
},
|
||||
formRules: {
|
||||
title: [
|
||||
{required: true, message: '标题', trigger: 'blur'}
|
||||
],
|
||||
info: [
|
||||
{required: false, message: '请输入文章作者', trigger: 'blur'},
|
||||
{min: 0, max: 500, message: '长度500个字符以内', trigger: 'blur'}
|
||||
]
|
||||
},
|
||||
action: "add"
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
siteChange: function (val) {
|
||||
window.location.href = "${base}/platform/cms/article/" + val;
|
||||
},
|
||||
channelLoad: function () {
|
||||
var self = this;
|
||||
$.post(base + "/platform/cms/article/tree/" + self.site.id, {}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.channelData = data.data;
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
openAdd: function () {
|
||||
var self = this;
|
||||
if (typeof(self.pageForm.channelId) == "undefined" || self.pageForm.channelId == "" || self.pageForm.channelId == "root") {
|
||||
self.$message({
|
||||
message: "请在左侧选定一个栏目",
|
||||
type: 'error'
|
||||
});
|
||||
return false;
|
||||
}
|
||||
self.dialogVisible = true;
|
||||
self.dialogTitle = "新建文章";
|
||||
self.action = "add";
|
||||
self.formData = {
|
||||
id: "",
|
||||
author: "${@shiro.getPrincipalProperty('username')}",
|
||||
time: [
|
||||
moment().format("x"),
|
||||
moment("2099-12-31 23:59:59").format("x")
|
||||
]
|
||||
};//打开新增窗口,表单先清空
|
||||
if (self.$refs["dialogForm"])
|
||||
self.$refs["dialogForm"].resetFields();
|
||||
UM.getEditor("content");
|
||||
setTimeout(function () {
|
||||
UM.getEditor("content").setContent("", false);
|
||||
}, 200);
|
||||
},
|
||||
doSave: function () {
|
||||
if ("add" == this.action) {
|
||||
this.doAdd();
|
||||
}
|
||||
if ("edit" == this.action) {
|
||||
this.doEdit();
|
||||
}
|
||||
},
|
||||
doAdd: function () {
|
||||
var self = this;
|
||||
var url = base + "/platform/cms/article/addDo/" + self.site.id;
|
||||
self.$refs["dialogForm"].validate(function (valid) {
|
||||
if (valid) {//表单验证通过
|
||||
self.formData.content = UM.getEditor("content").getContent();
|
||||
self.formData.siteid = self.site.id;
|
||||
self.formData.channelId = self.pageForm.channelId;
|
||||
self.formData.time_param = JSON.stringify(self.formData.time);
|
||||
$.post(url, self.formData, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.dialogVisible = false;
|
||||
self.pageData();
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
});
|
||||
},
|
||||
doEdit: function () {
|
||||
var self = this;
|
||||
var url = base + "/platform/cms/article/editDo";
|
||||
self.$refs["dialogForm"].validate(function (valid) {
|
||||
if (valid) {//表单验证通过
|
||||
self.formData.content = UM.getEditor("content").getContent();
|
||||
self.formData.time_param = JSON.stringify(self.formData.time);
|
||||
$.post(url, self.formData, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.dialogVisible = false;
|
||||
self.pageData();
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
});
|
||||
},
|
||||
delMore: function () {
|
||||
var self = this;
|
||||
if (self.selectData.length == 0) {
|
||||
self.$message({
|
||||
message: "请选择消息",
|
||||
type: 'warning'
|
||||
});
|
||||
return false;
|
||||
}
|
||||
var ids = [];
|
||||
self.selectData.forEach(function (val) {
|
||||
ids.push(val.id);
|
||||
});
|
||||
self.$confirm('您确定要删除选中的 ' + ids.length + ' 条消息? ', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: function (a, b) {
|
||||
if ("confirm" == a) {//确认后再执行
|
||||
$.post(base + "/platform/cms/article/delete", {ids: ids.toString()}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.pageData();
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
pageOrder: function (column) {//按字段排序
|
||||
this.pageForm.pageOrderName = column.prop;
|
||||
this.pageForm.pageOrderBy = column.order;
|
||||
this.pageData();
|
||||
},
|
||||
pageNumberChange: function (val) {//页码更新操作
|
||||
this.pageForm.pageNumber = val;
|
||||
this.pageData();
|
||||
},
|
||||
pageSizeChange: function (val) {//分页大小更新操作
|
||||
this.pageForm.pageSize = val;
|
||||
this.pageData();
|
||||
},
|
||||
pageData: function () {//加载分页数据
|
||||
var self = this;
|
||||
sublime.showLoadingbar();//显示loading
|
||||
$.post(base + "/platform/cms/article/data/" + self.site.id, self.pageForm, function (data) {
|
||||
sublime.closeLoadingbar();//关闭loading
|
||||
if (data.code == 0) {
|
||||
self.tableData = data.data.list;
|
||||
self.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
formatAt: function (val) {
|
||||
if (val > 0)
|
||||
return moment(val * 1000).format("YYYY-MM-DD HH:mm");
|
||||
return "";
|
||||
},
|
||||
handleSelectionChange: function (val) {
|
||||
this.selectData = val;
|
||||
},
|
||||
doSearch: function () {
|
||||
this.pageData();
|
||||
},
|
||||
treeClick: function (data, node, obj) {
|
||||
this.pageForm.channelId = data.id;
|
||||
this.pageForm.channelName = data.name;
|
||||
this.pageData();
|
||||
},
|
||||
handlePicSuccess: function (response, file, fileList, attrName) {
|
||||
if (response.code == 0) {
|
||||
// 对象属性直接赋值不会触发试图更新,采用 Vue.set 、this.$set或者Object.assign({},this.obj)创建新对象
|
||||
// 或者也可以定义一个 refresh 属性 ,当数据发生改变时,该属性同时变化,也会触发视图更新
|
||||
// this.formData.site_logo =response.data;
|
||||
this.$set(this.formData, attrName, response.data);
|
||||
} else {
|
||||
this.$set(this.formData, attrName, "");
|
||||
}
|
||||
},
|
||||
dropdownCommand: function (command) {//监听下拉框事件
|
||||
var self = this;
|
||||
if ("edit" == command.type) {
|
||||
$.post(base + "/platform/cms/article/edit/" + command.id, {}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.formData = data.data;//加载后台表单数据
|
||||
self.formData.time = [
|
||||
self.formData.publishAt * 1000,
|
||||
self.formData.endAt * 1000
|
||||
];
|
||||
self.dialogVisible = true;//打开编辑窗口
|
||||
self.dialogTitle = "修改文章";
|
||||
self.action = "edit";
|
||||
UM.getEditor("content");
|
||||
setTimeout(function () {
|
||||
UM.getEditor("content").setContent("" + self.formData.content, false);
|
||||
}, 200);
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
if ("view" == command.type) {
|
||||
$.post(base + "/platform/cms/article/edit/" + command.id, {}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.formData = data.data;//加载后台表单数据
|
||||
self.viewDialogVisible = true;//打开编辑窗口
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
if ("enable" == command.type || "disable" == command.type) {
|
||||
$.post(base + "/platform/cms/article/" + command.type + "/" + command.id, {}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
if ("disable" == command.type) {
|
||||
command.row.disabled = true;
|
||||
}
|
||||
if ("enable" == command.type) {
|
||||
command.row.disabled = false;
|
||||
}
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
if ("delete" == command.type) {
|
||||
self.$confirm('此操作将删除文章: ' + command.title, '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: function (a, b) {
|
||||
if ("confirm" == a) {//确认后再执行
|
||||
$.post(base + "/platform/cms/article/delete/" + command.id, {}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.doSearch();
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
created: function () {
|
||||
this.channelLoad();
|
||||
this.pageData();
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,542 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<el-row class="header navbar bg-white shadow">
|
||||
<div class="btn-group tool-button mt5">
|
||||
|
||||
<span>站点:</span>
|
||||
<el-select size="medium" v-model="site.id" placeholder="请选择" @change="siteChange">
|
||||
<el-option
|
||||
v-for="item in sites"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value">
|
||||
</el-option>
|
||||
</el-select>
|
||||
<el-button size="medium" @click="openAdd">
|
||||
<i class="ti-plus"></i>
|
||||
新建栏目
|
||||
</el-button>
|
||||
</div>
|
||||
<div class="pull-right offscreen-right mt5">
|
||||
<el-button size="medium" @click="openSort">
|
||||
排序
|
||||
</el-button>
|
||||
</div>
|
||||
</el-row>
|
||||
<el-row class="el-table-container">
|
||||
<el-table :key="tableKey" :data="tableData" style="width: 100%" size="small"
|
||||
:highlight-current-row="true" row-key="id" lazy
|
||||
:load="loadChild">
|
||||
<el-table-column label="栏目名称" header-align="center" prop="name"
|
||||
width="200" :show-overflow-tooltip="true" align="left">
|
||||
</el-table-column>
|
||||
|
||||
|
||||
<el-table-column label="栏目标识" header-align="center" prop="code"
|
||||
:show-overflow-tooltip="true">
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="URL" header-align="center" prop="url"
|
||||
:show-overflow-tooltip="true">
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="栏目类型" header-align="center" prop="type"
|
||||
:show-overflow-tooltip="true" align="center">
|
||||
<template slot-scope="scope">
|
||||
<i v-if="scope.row.type=='article'">文章</i>
|
||||
<i v-if="scope.row.type=='photo'">相册</i>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
|
||||
<el-table-column label="启用状态" header-align="center" prop="disabled" align="center"
|
||||
:show-overflow-tooltip="true">
|
||||
<template slot-scope="scope">
|
||||
<i v-if="scope.row.disabled"
|
||||
class="fa fa-circle text-danger ml5"></i>
|
||||
<i v-if="!scope.row.disabled"
|
||||
class="fa fa-circle text-success ml5"></i>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="操作" header-align="center" prop="id"
|
||||
:show-overflow-tooltip="true" align="center" width="120">
|
||||
<template slot-scope="scope">
|
||||
<el-dropdown @command="dropdownCommand">
|
||||
<el-button size="mini">
|
||||
<i class="ti-settings"></i>
|
||||
<span class="ti-angle-down"></span>
|
||||
</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item :command="{type:'add',id:scope.row.id,name:scope.row.name}">
|
||||
添加子栏目
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item divided
|
||||
:command="{type:'enable',id:scope.row.id,name:scope.row.name,row:scope.row}">
|
||||
启用
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item
|
||||
:command="{type:'disable',id:scope.row.id,name:scope.row.name,row:scope.row}">
|
||||
禁用
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item divided
|
||||
:command="{type:'edit',id:scope.row.id,name:scope.row.name}">
|
||||
修改
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'delete',id:scope.row.id,name:scope.row.name}"
|
||||
v-if="scope.row.path!='0001'">
|
||||
删除
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-row>
|
||||
|
||||
|
||||
<el-dialog
|
||||
title="新建栏目"
|
||||
:visible.sync="addDialogVisible"
|
||||
width="50%">
|
||||
<el-form :model="formData" ref="addForm" :rules="formRules" size="small" label-width="80px">
|
||||
<el-form-item prop="siteId" label="所属站点">
|
||||
<span>{{site.site_name}}</span>
|
||||
</el-form-item>
|
||||
<el-form-item prop="parentId" label="上级栏目" label-width="80px">
|
||||
<el-cascader v-if="!isAddFromSub"
|
||||
style="width: 100%"
|
||||
:options="menuOptions" :props="props" v-model="parentMenu"
|
||||
tabindex="1"
|
||||
placeholder="不选择则为顶级"
|
||||
></el-cascader>
|
||||
<el-input v-if="isAddFromSub" type="text" v-model="formData.parentName" :disabled="true"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="name" label="栏目名称">
|
||||
<el-input maxlength="100" placeholder="栏目名称"
|
||||
v-model="formData.name"
|
||||
auto-complete="off" tabindex="3" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="code" label="栏目标识">
|
||||
<el-input maxlength="100" placeholder="栏目标识"
|
||||
v-model="formData.code"
|
||||
auto-complete="off" tabindex="4" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="type" label="栏目类型">
|
||||
<el-radio-group v-model="formData.type">
|
||||
<el-radio label="article">文章</el-radio>
|
||||
<el-radio label="photo">相册</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item prop="url" label="URL">
|
||||
<el-input maxlength="100" placeholder="URL"
|
||||
v-model="formData.url"
|
||||
auto-complete="off" tabindex="6" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="target" label="打开方式">
|
||||
<el-radio-group v-model="formData.target">
|
||||
<el-radio label="_blank">新页面</el-radio>
|
||||
<el-radio label="_self">本页面</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item prop="disabled" label="启用状态">
|
||||
<el-switch
|
||||
v-model="formData.disabled"
|
||||
active-color="#ff4949"
|
||||
inactive-color="#13ce66">
|
||||
</el-switch>
|
||||
</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"
|
||||
width="50%">
|
||||
<el-form :model="formData" ref="editForm" :rules="formRules" size="small" label-width="80px">
|
||||
<el-form-item label="所属站点" label-width="80px">
|
||||
{{formData.siteName}}
|
||||
</el-form-item>
|
||||
<el-form-item prop="parentId" label="上级栏目" label-width="80px">
|
||||
<el-input type="text" v-model="formData.parentName" :disabled="true"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="name" label="栏目名称">
|
||||
<el-input maxlength="100" placeholder="栏目名称"
|
||||
v-model="formData.name"
|
||||
auto-complete="off" tabindex="3" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="code" label="栏目标识">
|
||||
<el-input maxlength="100" placeholder="栏目标识"
|
||||
v-model="formData.code"
|
||||
auto-complete="off" tabindex="4" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="type" label="栏目类型">
|
||||
<el-radio-group v-model="formData.type">
|
||||
<el-radio label="article">文章</el-radio>
|
||||
<el-radio label="photo">相册</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item prop="url" label="URL">
|
||||
<el-input maxlength="100" placeholder="URL"
|
||||
v-model="formData.url"
|
||||
auto-complete="off" tabindex="6" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="target" label="打开方式">
|
||||
<el-radio-group v-model="formData.target">
|
||||
<el-radio label="_blank">新页面</el-radio>
|
||||
<el-radio label="_self">本页面</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item prop="disabled" label="启用状态">
|
||||
<el-switch
|
||||
v-model="formData.disabled"
|
||||
active-color="#ff4949"
|
||||
inactive-color="#13ce66">
|
||||
</el-switch>
|
||||
</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="sortDialogVisible"
|
||||
width="50%">
|
||||
<el-tree
|
||||
ref="sortMenuTree"
|
||||
:data="sortMenuData"
|
||||
draggable
|
||||
:allow-drop="sortAllowDrop"
|
||||
node-key="id"
|
||||
:props="defaultProps"
|
||||
>
|
||||
<span class="custom-tree-node" slot-scope="scope">
|
||||
<span>{{ scope.node.label }}</span>
|
||||
</span>
|
||||
</el-tree>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="sortDialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="doSort">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
<script>
|
||||
new Vue({
|
||||
el: "#app",
|
||||
data: function () {
|
||||
var sites = [];
|
||||
<!--#for(o in siteList){#-->
|
||||
sites.push({value: "${o.id!}", label: "${o.site_name!}"});
|
||||
<!--#}#-->
|
||||
var site = {id: "", site_name: ""};
|
||||
<!--#if(!isEmpty(site)){#-->
|
||||
site = {id: "${site.id}", site_name: "${site.site_name}"};
|
||||
<!--#}#-->
|
||||
return {
|
||||
addDialogVisible: false,
|
||||
editDialogVisible: false,
|
||||
sortDialogVisible: false,
|
||||
isAddFromSub: false,
|
||||
sites: sites,
|
||||
site: site,
|
||||
tableData: [],//后台取出的数据
|
||||
tableKey:"",
|
||||
formData: {
|
||||
id: "",
|
||||
parentId: "",
|
||||
parentName: "",
|
||||
type: "article",
|
||||
target: "_blank"
|
||||
},
|
||||
formRules: {
|
||||
name: [
|
||||
{required: true, message: '栏目名称', trigger: 'blur'}
|
||||
],
|
||||
code: [
|
||||
{required: true, message: '栏目标识', trigger: ['blur', 'change']}
|
||||
]
|
||||
},
|
||||
menuOptions: [],
|
||||
parentMenu: [],
|
||||
sortMenuData: [],
|
||||
defaultProps: {
|
||||
children: 'children',
|
||||
label: 'label'
|
||||
},
|
||||
props: {
|
||||
lazy: true,
|
||||
checkStrictly:true,
|
||||
multiple:false,
|
||||
lazyLoad: function (node, resolve) {
|
||||
var url = base + "/platform/cms/channel/tree/" + site.id;
|
||||
$.post(url, {pid: node.value}, function (data) {
|
||||
if (data.code == 0) {
|
||||
resolve(data.data);
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
//验证动态添加行数据
|
||||
validateMenu: function (rule, value, callback) {
|
||||
if (value.name == '') {
|
||||
callback(new Error('权限名称不能为空'));
|
||||
} else if (value.permission == '') {
|
||||
callback(new Error('权限标识不能为空'));
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
},
|
||||
formRadioChange: function (val) {
|
||||
this.formData.children = val;
|
||||
if ("true" == val) {
|
||||
this.formData.buttons = [{
|
||||
name: '',
|
||||
permission: '',
|
||||
key: Date.now()
|
||||
}];
|
||||
} else {
|
||||
this.formData.buttons = [];
|
||||
}
|
||||
},
|
||||
formRemoveMenu: function (menu) {
|
||||
var index = this.formData.buttons.indexOf(menu);
|
||||
if (index !== -1) {
|
||||
this.formData.buttons.splice(index, 1);
|
||||
}
|
||||
},
|
||||
formAddMenu: function () {
|
||||
this.formData.buttons.push({
|
||||
name: '',
|
||||
permission: '',
|
||||
key: Date.now()
|
||||
});
|
||||
},
|
||||
//排序树加载
|
||||
sortMenuLoad: function () {
|
||||
var self = this;
|
||||
$.post(base + "/platform/cms/channel/sort/" + self.site.id, {}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.sortMenuData = data.data;
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
//排序树控制不可跨级拖拽
|
||||
sortAllowDrop: function (moveNode, inNode, type) {
|
||||
if (moveNode.data.parentId == inNode.data.parentId) {
|
||||
return type == 'prev';
|
||||
}
|
||||
},
|
||||
//打开排序功能
|
||||
openSort: function () {
|
||||
this.sortDialogVisible = true;
|
||||
this.sortMenuLoad();
|
||||
},
|
||||
//递归获取所有的ID值
|
||||
getTreeIds: function (ids, data) {
|
||||
var self = this;
|
||||
data.forEach(function (obj) {
|
||||
ids.push(obj.id);
|
||||
if (obj.children && obj.children.length > 0) {
|
||||
self.getTreeIds(ids, obj.children);
|
||||
}
|
||||
});
|
||||
},
|
||||
//提交排序后的数据
|
||||
doSort: function () {
|
||||
var self = this;
|
||||
var ids = [];
|
||||
self.getTreeIds(ids, self.sortMenuData);
|
||||
$.post(base + "/platform/cms/channel/sortDo/" + self.site.id, {ids: ids.toString()}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.sortDialogVisible = false;
|
||||
self.initTreeTable();
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
openAdd: function () {
|
||||
var self = this;
|
||||
self.isAddFromSub = false;
|
||||
self.addDialogVisible = true;
|
||||
self.parentMenu = [];
|
||||
self.menuOptions=[];
|
||||
//表单还原为初始值
|
||||
self.formData = {
|
||||
id: "",
|
||||
parentId: "",
|
||||
parentName: "",
|
||||
type: "article",
|
||||
target: "_blank",
|
||||
};
|
||||
if (this.$refs["addForm"])
|
||||
this.$refs["addForm"].resetFields();
|
||||
},
|
||||
doAdd: function () {
|
||||
var self = this;
|
||||
var url = base + "/platform/cms/channel/addDo";
|
||||
self.$refs["addForm"].validate(function (valid) {
|
||||
if (valid) {//表单验证通过
|
||||
if (!self.isAddFromSub) {//如果不是添加子菜单,则从级联选择框取父节点ID
|
||||
self.formData.parentId = self.parentMenu[self.parentMenu.length - 1] || "";
|
||||
}
|
||||
self.formData.siteId = self.site.id;
|
||||
$.post(url, self.formData, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.addDialogVisible = false;
|
||||
self.initTreeTable();
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
});
|
||||
},
|
||||
doEdit: function () {
|
||||
var self = this;
|
||||
var url = base + "/platform/cms/channel/editDo";
|
||||
self.$refs["editForm"].validate(function (valid) {
|
||||
if (valid) {//表单验证通过
|
||||
$.post(url, self.formData, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.editDialogVisible = false;
|
||||
self.initTreeTable();
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
});
|
||||
},
|
||||
initTreeTable: function () {
|
||||
var self = this;
|
||||
var url = base + "/platform/cms/channel/child/" + self.site.id;
|
||||
$.post(url, {pid: ""}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.tableData = data.data;
|
||||
self.tableKey=+new Date();
|
||||
}
|
||||
}, "json");
|
||||
|
||||
},
|
||||
loadChild: function (tree, treeNode, resolve) {
|
||||
var self = this;
|
||||
var url = base + "/platform/cms/channel/child/" + self.site.id;
|
||||
$.post(url, {pid: tree.id}, function (data) {
|
||||
if (data.code == 0) {
|
||||
resolve(data.data);
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
dropdownCommand: function (command) {//监听下拉框事件
|
||||
var self = this;
|
||||
if ("add" == command.type) {
|
||||
self.openAdd();
|
||||
self.formData.parentId = command.id;
|
||||
self.formData.parentName = command.name;
|
||||
self.isAddFromSub = true;
|
||||
}
|
||||
if ("edit" == command.type) {
|
||||
$.post(base + "/platform/cms/channel/edit/" + command.id, {}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.formData = data.data;//加载后台表单数据
|
||||
self.editDialogVisible = true;//打开编辑窗口
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
if ("enable" == command.type || "disable" == command.type) {
|
||||
$.post(base + "/platform/cms/channel/" + command.type + "/" + command.id, {}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
if ("disable" == command.type) {
|
||||
command.row.disabled = true;
|
||||
}
|
||||
if ("enable" == command.type) {
|
||||
command.row.disabled = false;
|
||||
}
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
if ("delete" == command.type) {
|
||||
self.$confirm('此操作将删除栏目 ' + command.name, '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: function (a, b) {
|
||||
if ("confirm" == a) {//确认后再执行
|
||||
$.post(base + "/platform/cms/channel/delete/" + command.id, {}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.initTreeTable();
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
siteChange: function (val) {
|
||||
window.location.href="${base}/platform/cms/channel/"+val;
|
||||
}
|
||||
},
|
||||
created: function () {
|
||||
this.initTreeTable();
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,338 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<el-row class="header navbar bg-white shadow">
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-button size="medium" @click="openAdd">
|
||||
<i class="ti-plus"></i>
|
||||
新建分类
|
||||
</el-button>
|
||||
</div>
|
||||
<div class="pull-right offscreen-right mt5">
|
||||
<el-button size="medium" @click="delMore" type="danger" :disabled="selectData.length==0">
|
||||
<i class="el-icon-delete"></i>
|
||||
删除
|
||||
</el-button>
|
||||
</div>
|
||||
</el-row>
|
||||
<el-row class="el-table-container">
|
||||
<el-table
|
||||
:data="tableData"
|
||||
@sort-change='pageOrder'
|
||||
size="small"
|
||||
header-align="center"
|
||||
style="width: 100%"
|
||||
@selection-change="handleSelectionChange"
|
||||
:default-sort="{prop: 'opAt', order: 'descending'}"
|
||||
>
|
||||
<el-table-column
|
||||
type="selection"
|
||||
width="35">
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="分类名称" header-align="left" prop="name"
|
||||
:show-overflow-tooltip="true">
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="分类标识" header-align="left" prop="code"
|
||||
:show-overflow-tooltip="true">
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column sortable label="创建时间" header-align="center" align="center" prop="opAt">
|
||||
<template slot-scope="scope">
|
||||
{{formatAt(scope.row.opAt)}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column
|
||||
prop="id"
|
||||
label="操作"
|
||||
width="120">
|
||||
<template slot-scope="scope">
|
||||
<el-dropdown @command="dropdownCommand">
|
||||
<el-button size="mini">
|
||||
<i class="ti-settings"></i>
|
||||
<span class="ti-angle-down"></span>
|
||||
</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item :command="{type:'edit',id:scope.row.id}">
|
||||
修改
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item
|
||||
:command="{type:'delete',id:scope.row.id,name:scope.row.name}">
|
||||
删除
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</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"
|
||||
width="40%">
|
||||
<el-form :model="formData" ref="addForm" :rules="formRules" size="small" label-width="80px">
|
||||
<el-form-item prop="name" label="分类名称">
|
||||
<el-input maxlength="100" placeholder="分类名称"
|
||||
v-model="formData.name"
|
||||
auto-complete="off" tabindex="1" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="code" label="分类标识">
|
||||
<el-input maxlength="100" placeholder="分类标识"
|
||||
v-model="formData.code"
|
||||
auto-complete="off" tabindex="2" type="text"></el-input>
|
||||
</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"
|
||||
width="40%">
|
||||
<el-form :model="formData" ref="editForm" :rules="formRules" size="small" label-width="80px">
|
||||
<el-form-item prop="name" label="分类名称">
|
||||
<el-input maxlength="100" placeholder="分类名称"
|
||||
v-model="formData.name"
|
||||
auto-complete="off" tabindex="1" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="code" label="分类标识">
|
||||
<el-input maxlength="100" placeholder="分类标识"
|
||||
v-model="formData.code"
|
||||
auto-complete="off" tabindex="2" type="text"></el-input>
|
||||
</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>
|
||||
</div>
|
||||
<script>
|
||||
new Vue({
|
||||
el: "#app",
|
||||
data: function () {
|
||||
return {
|
||||
addDialogVisible: false,
|
||||
editDialogVisible: false,
|
||||
selectData: [],
|
||||
pageForm: {
|
||||
searchName: "",
|
||||
searchKeyword: "",
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
pageOrderName: "opAt",
|
||||
pageOrderBy: "descending"
|
||||
},
|
||||
tableData: [],
|
||||
formData: {
|
||||
id: "",
|
||||
},
|
||||
formRules: {
|
||||
name: [
|
||||
{required: true, message: '分类名称', trigger: 'blur'}
|
||||
],
|
||||
code: [
|
||||
{required: true, message: '分类标识', trigger: 'blur'}
|
||||
]
|
||||
},
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
pageOrder: function (column) {//按字段排序
|
||||
this.pageForm.pageOrderName = column.prop;
|
||||
this.pageForm.pageOrderBy = column.order;
|
||||
this.pageData();
|
||||
},
|
||||
pageNumberChange: function (val) {//页码更新操作
|
||||
this.pageForm.pageNumber = val;
|
||||
this.pageData();
|
||||
},
|
||||
pageSizeChange: function (val) {//分页大小更新操作
|
||||
this.pageForm.pageSize = val;
|
||||
this.pageData();
|
||||
},
|
||||
pageData: function () {//加载分页数据
|
||||
var self = this;
|
||||
sublime.showLoadingbar();//显示loading
|
||||
$.post(base + "/platform/cms/link/class/data", self.pageForm, function (data) {
|
||||
sublime.closeLoadingbar();//关闭loading
|
||||
if (data.code == 0) {
|
||||
self.tableData = data.data.list;
|
||||
self.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
formatAt: function (val) {
|
||||
if (val > 0)
|
||||
return moment(val * 1000).format("YYYY-MM-DD HH:mm");
|
||||
return "";
|
||||
},
|
||||
handleSelectionChange: function (val) {
|
||||
this.selectData = val;
|
||||
},
|
||||
openAdd: function () {
|
||||
var self = this;
|
||||
self.addDialogVisible = true;
|
||||
self.formData = {
|
||||
id: ""
|
||||
};//打开新增窗口,表单先清空
|
||||
if (self.$refs["addForm"])
|
||||
self.$refs["addForm"].resetFields();
|
||||
},
|
||||
doAdd: function () {
|
||||
var self = this;
|
||||
var url = base + "/platform/cms/link/class/addDo";
|
||||
self.$refs["addForm"].validate(function (valid) {
|
||||
if (valid) {//表单验证通过
|
||||
$.post(url, self.formData, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.addDialogVisible = false;
|
||||
self.pageData();
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
});
|
||||
},
|
||||
doEdit: function () {
|
||||
var self = this;
|
||||
var url = base + "/platform/cms/link/class/editDo";
|
||||
self.$refs["editForm"].validate(function (valid) {
|
||||
if (valid) {//表单验证通过
|
||||
$.post(url, self.formData, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.editDialogVisible = false;
|
||||
self.pageData();
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
});
|
||||
},
|
||||
delMore: function () {
|
||||
var self = this;
|
||||
if (self.selectData.length == 0) {
|
||||
self.$message({
|
||||
message: "请选择消息",
|
||||
type: 'warning'
|
||||
});
|
||||
return false;
|
||||
}
|
||||
var ids = [];
|
||||
self.selectData.forEach(function (val) {
|
||||
ids.push(val.id);
|
||||
});
|
||||
self.$confirm('您确定要删除选中的 ' + ids.length + ' 条数据? ', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: function (a, b) {
|
||||
if ("confirm" == a) {//确认后再执行
|
||||
$.post(base + "/platform/cms/link/class/delete", {ids: ids.toString()}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.pageData();
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
dropdownCommand: function (command) {//监听下拉框事件
|
||||
var self = this;
|
||||
if ("edit" == command.type) {
|
||||
$.post(base + "/platform/cms/link/class/edit/" + command.id, {}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.formData = data.data;//加载后台表单数据
|
||||
self.editDialogVisible = true;//打开编辑窗口
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
if ("delete" == command.type) {
|
||||
self.$confirm('此操作将删除: ' + command.name, '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: function (a, b) {
|
||||
if ("confirm" == a) {//确认后再执行
|
||||
$.post(base + "/platform/cms/link/class/delete/" + command.id, {}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.pageData();
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
created: function () {
|
||||
this.pageData();
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,467 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.el-upload input[type=file] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.avatar-uploader .el-upload {
|
||||
border: 1px dashed #d9d9d9;
|
||||
border-radius: 6px;
|
||||
cursor: pointer;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.avatar-uploader .el-upload:hover {
|
||||
border-color: #409EFF;
|
||||
}
|
||||
|
||||
.avatar-uploader-icon {
|
||||
font-size: 28px;
|
||||
color: #8c939d;
|
||||
width: 128px;
|
||||
height: 128px;
|
||||
line-height: 128px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.avatar {
|
||||
width: 128px;
|
||||
height: 128px;
|
||||
display: block;
|
||||
}
|
||||
</style>
|
||||
<div id="app" v-cloak>
|
||||
<el-row class="header navbar bg-white shadow">
|
||||
<div class="btn-group tool-button mt5">
|
||||
<span>分类:</span>
|
||||
<el-select size="medium" v-model="pageForm.classId" placeholder="请选择" @change="change">
|
||||
<el-option
|
||||
v-for="item in classs"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value">
|
||||
</el-option>
|
||||
</el-select>
|
||||
<el-button size="medium" @click="openAdd">
|
||||
<i class="ti-plus"></i>
|
||||
新建链接
|
||||
</el-button>
|
||||
</div>
|
||||
<div class="pull-right offscreen-right mt5">
|
||||
<el-button size="medium" @click="delMore" type="danger" :disabled="selectData.length==0">
|
||||
<i class="el-icon-delete"></i>
|
||||
删除
|
||||
</el-button>
|
||||
</div>
|
||||
</el-row>
|
||||
<el-row class="el-table-container">
|
||||
<el-table
|
||||
:data="tableData"
|
||||
@sort-change='pageOrder'
|
||||
size="small"
|
||||
header-align="center"
|
||||
style="width: 100%"
|
||||
@selection-change="handleSelectionChange"
|
||||
:default-sort="{prop: 'opAt', order: 'descending'}"
|
||||
>
|
||||
<el-table-column
|
||||
type="selection"
|
||||
width="35">
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="链接名称" header-align="left" prop="name"
|
||||
:show-overflow-tooltip="true">
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="链接类型" header-align="left" prop="type"
|
||||
:show-overflow-tooltip="true">
|
||||
<template slot-scope="scope">
|
||||
<span v-if="'txt'==scope.row.type">文字</span>
|
||||
<span v-if="'img'==scope.row.type">图片</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="链接地址" header-align="left" prop="url"
|
||||
:show-overflow-tooltip="true">
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="打开方式" header-align="left" prop="target"
|
||||
:show-overflow-tooltip="true">
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column sortable label="创建时间" header-align="center" align="center" prop="opAt">
|
||||
<template slot-scope="scope">
|
||||
{{formatAt(scope.row.opAt)}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column
|
||||
prop="id"
|
||||
label="操作"
|
||||
width="120">
|
||||
<template slot-scope="scope">
|
||||
<el-dropdown @command="dropdownCommand">
|
||||
<el-button size="mini">
|
||||
<i class="ti-settings"></i>
|
||||
<span class="ti-angle-down"></span>
|
||||
</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item :command="{type:'edit',id:scope.row.id}">
|
||||
修改
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item
|
||||
:command="{type:'delete',id:scope.row.id,name:scope.row.name}">
|
||||
删除
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</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"
|
||||
width="40%">
|
||||
<el-form :model="formData" ref="addForm" :rules="formRules" size="small" label-width="80px">
|
||||
<el-form-item prop="classId" label="所属分类">
|
||||
<span>{{pageForm.className}}</span>
|
||||
</el-form-item>
|
||||
<el-form-item prop="name" label="链接名称">
|
||||
<el-input maxlength="100" placeholder="链接名称"
|
||||
v-model="formData.name"
|
||||
auto-complete="off" tabindex="1" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="type" label="链接类型">
|
||||
<el-radio-group v-model="formData.type" @change="typeChange">
|
||||
<el-radio label="txt">文字</el-radio>
|
||||
<el-radio label="img">图片</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="链接图片" v-if="'img'==formData.type">
|
||||
<el-upload
|
||||
class="avatar-uploader"
|
||||
tabindex="5"
|
||||
action="${base}/open/file/upload/image"
|
||||
name="Filedata"
|
||||
:show-file-list="false"
|
||||
:on-success="function(resp,file,fileList){return handleLogoSuccess(resp,file,fileList,'picurl')}">
|
||||
|
||||
<img v-if="formData.picurl" :src="'${AppFileDomain!}'+formData.picurl" class="avatar">
|
||||
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
|
||||
</el-upload>
|
||||
</el-form-item>
|
||||
<el-form-item prop="url" label="链接地址">
|
||||
<el-input maxlength="100" placeholder="链接地址"
|
||||
v-model="formData.url"
|
||||
auto-complete="off" tabindex="2" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="target" label="打开方式">
|
||||
<el-radio-group v-model="formData.target">
|
||||
<el-radio label="_blank">新页面</el-radio>
|
||||
<el-radio label="_self">本页面</el-radio>
|
||||
</el-radio-group>
|
||||
</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"
|
||||
width="40%">
|
||||
<el-form :model="formData" ref="editForm" :rules="formRules" size="small" label-width="80px">
|
||||
<el-form-item prop="name" label="链接名称">
|
||||
<el-input maxlength="100" placeholder="链接名称"
|
||||
v-model="formData.name"
|
||||
auto-complete="off" tabindex="1" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="type" label="链接类型">
|
||||
<el-radio-group v-model="formData.type" @change="typeChange">
|
||||
<el-radio label="txt">文字</el-radio>
|
||||
<el-radio label="img">图片</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="链接图片" v-if="'img'==formData.type">
|
||||
<el-upload
|
||||
class="avatar-uploader"
|
||||
tabindex="5"
|
||||
action="${base}/open/file/upload/image"
|
||||
name="Filedata"
|
||||
:show-file-list="false"
|
||||
:on-success="function(resp,file,fileList){return handleLogoSuccess(resp,file,fileList,'picurl')}">
|
||||
|
||||
<img v-if="formData.picurl" :src="'${AppFileDomain!}'+formData.picurl" class="avatar">
|
||||
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
|
||||
</el-upload>
|
||||
</el-form-item>
|
||||
<el-form-item prop="url" label="链接地址">
|
||||
<el-input maxlength="100" placeholder="链接地址"
|
||||
v-model="formData.url"
|
||||
auto-complete="off" tabindex="2" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="target" label="打开方式">
|
||||
<el-radio-group v-model="formData.target">
|
||||
<el-radio label="_blank">新页面</el-radio>
|
||||
<el-radio label="_self">本页面</el-radio>
|
||||
</el-radio-group>
|
||||
</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>
|
||||
</div>
|
||||
<script>
|
||||
new Vue({
|
||||
el: "#app",
|
||||
data: function () {
|
||||
var classs = [];
|
||||
<!--#for(o in list){#-->
|
||||
classs.push({value: "${o.id!}", label: "${o.name!}"});
|
||||
<!--#}#-->
|
||||
return {
|
||||
classs: classs,
|
||||
addDialogVisible: false,
|
||||
editDialogVisible: false,
|
||||
selectData: [],
|
||||
pageForm: {
|
||||
searchName: "",
|
||||
searchKeyword: "",
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
pageOrderName: "opAt",
|
||||
pageOrderBy: "descending",
|
||||
classId: "${classObj.id!}",
|
||||
className: "${classObj.name!}"
|
||||
},
|
||||
tableData: [],
|
||||
formData: {},
|
||||
formRules: {
|
||||
name: [
|
||||
{required: true, message: '分类名称', trigger: 'blur'}
|
||||
]
|
||||
},
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
pageOrder: function (column) {//按字段排序
|
||||
this.pageForm.pageOrderName = column.prop;
|
||||
this.pageForm.pageOrderBy = column.order;
|
||||
this.pageData();
|
||||
},
|
||||
pageNumberChange: function (val) {//页码更新操作
|
||||
this.pageForm.pageNumber = val;
|
||||
this.pageData();
|
||||
},
|
||||
pageSizeChange: function (val) {//分页大小更新操作
|
||||
this.pageForm.pageSize = val;
|
||||
this.pageData();
|
||||
},
|
||||
pageData: function () {//加载分页数据
|
||||
var self = this;
|
||||
sublime.showLoadingbar();//显示loading
|
||||
$.post(base + "/platform/cms/link/link/data", self.pageForm, function (data) {
|
||||
sublime.closeLoadingbar();//关闭loading
|
||||
if (data.code == 0) {
|
||||
self.tableData = data.data.list;
|
||||
self.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
formatAt: function (val) {
|
||||
if (val > 0)
|
||||
return moment(val * 1000).format("YYYY-MM-DD HH:mm");
|
||||
return "";
|
||||
},
|
||||
handleSelectionChange: function (val) {
|
||||
this.selectData = val;
|
||||
},
|
||||
openAdd: function () {
|
||||
var self = this;
|
||||
self.addDialogVisible = true;
|
||||
self.formData = {
|
||||
id: "",
|
||||
target: "_blank",
|
||||
url: "javascript:void(0);",
|
||||
type: "txt",
|
||||
classId: "${classObj.id!}"
|
||||
};//打开新增窗口,表单先清空
|
||||
if (self.$refs["addForm"])
|
||||
self.$refs["addForm"].resetFields();
|
||||
},
|
||||
doAdd: function () {
|
||||
var self = this;
|
||||
var url = base + "/platform/cms/link/link/addDo";
|
||||
self.$refs["addForm"].validate(function (valid) {
|
||||
if (valid) {//表单验证通过
|
||||
$.post(url, self.formData, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.addDialogVisible = false;
|
||||
self.pageData();
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
});
|
||||
},
|
||||
doEdit: function () {
|
||||
var self = this;
|
||||
var url = base + "/platform/cms/link/link/editDo";
|
||||
self.$refs["editForm"].validate(function (valid) {
|
||||
if (valid) {//表单验证通过
|
||||
$.post(url, self.formData, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.editDialogVisible = false;
|
||||
self.pageData();
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
});
|
||||
},
|
||||
delMore: function () {
|
||||
var self = this;
|
||||
if (self.selectData.length == 0) {
|
||||
self.$message({
|
||||
message: "请选择消息",
|
||||
type: 'warning'
|
||||
});
|
||||
return false;
|
||||
}
|
||||
var ids = [];
|
||||
self.selectData.forEach(function (val) {
|
||||
ids.push(val.id);
|
||||
});
|
||||
self.$confirm('您确定要删除选中的 ' + ids.length + ' 条数据? ', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: function (a, b) {
|
||||
if ("confirm" == a) {//确认后再执行
|
||||
$.post(base + "/platform/cms/link/link/delete", {ids: ids.toString()}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.pageData();
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
dropdownCommand: function (command) {//监听下拉框事件
|
||||
var self = this;
|
||||
if ("edit" == command.type) {
|
||||
$.post(base + "/platform/cms/link/link/edit/" + command.id, {}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.formData = data.data;//加载后台表单数据
|
||||
self.editDialogVisible = true;//打开编辑窗口
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
if ("delete" == command.type) {
|
||||
self.$confirm('此操作将删除: ' + command.name, '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: function (a, b) {
|
||||
if ("confirm" == a) {//确认后再执行
|
||||
$.post(base + "/platform/cms/link/link/delete/" + command.id, {}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.pageData();
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
handleLogoSuccess: function (response, file, fileList, attrName) {
|
||||
if (response.code == 0) {
|
||||
// 对象属性直接赋值不会触发试图更新,采用 Vue.set 、this.$set或者Object.assign({},this.obj)创建新对象
|
||||
// 或者也可以定义一个 refresh 属性 ,当数据发生改变时,该属性同时变化,也会触发视图更新
|
||||
this.$set(this.formData, attrName, response.data);
|
||||
} else {
|
||||
this.$set(this.formData, attrName, "");
|
||||
}
|
||||
},
|
||||
typeChange: function (val) {
|
||||
if ("txt" == val) {//类型变化了要清除数据
|
||||
this.formData.picurl = "";
|
||||
}
|
||||
},
|
||||
change: function (val) {
|
||||
window.location.href = "${base}/platform/cms/link/link/" + val;
|
||||
}
|
||||
},
|
||||
created: function () {
|
||||
this.pageData();
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,583 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.el-upload input[type=file] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.avatar-uploader .el-upload {
|
||||
border: 1px dashed #d9d9d9;
|
||||
border-radius: 6px;
|
||||
cursor: pointer;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.avatar-uploader .el-upload:hover {
|
||||
border-color: #409EFF;
|
||||
}
|
||||
|
||||
.avatar-uploader-icon {
|
||||
font-size: 28px;
|
||||
color: #8c939d;
|
||||
width: 128px;
|
||||
height: 128px;
|
||||
line-height: 128px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.avatar {
|
||||
width: 128px;
|
||||
height: 128px;
|
||||
display: block;
|
||||
}
|
||||
</style>
|
||||
<div id="app" v-cloak>
|
||||
<el-row class="header navbar bg-white shadow">
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-button size="medium" @click="openAdd"><i class="ti-plus"></i> 添加站点</el-button>
|
||||
</div>
|
||||
</el-row>
|
||||
<!-- 数据表格 -->
|
||||
<el-row class="el-table-container">
|
||||
<el-table
|
||||
:data="tableData"
|
||||
@sort-change='pageOrder'
|
||||
size="small"
|
||||
style="width: 100%">
|
||||
<el-table-column
|
||||
sortable
|
||||
prop="id"
|
||||
label="站点编码"
|
||||
width="200">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="site_name"
|
||||
label="站点名称"
|
||||
width="200">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="site_domain"
|
||||
label="域名地址">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="1"
|
||||
label="操作"
|
||||
width="120">
|
||||
<template scope="scope">
|
||||
<el-dropdown @command="dropdownCommand">
|
||||
<el-button size="mini">
|
||||
<i class="ti-settings"></i>
|
||||
<span class="ti-angle-down"></span>
|
||||
</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item :command="{type:'edit',id:scope.row.id}">
|
||||
修改
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'delete',id:scope.row.id,name:scope.row.site_name}">
|
||||
删除
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</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"
|
||||
width="50%">
|
||||
<el-form :model="formData" ref="addForm" :rules="formRules" size="small" label-width="100px">
|
||||
<el-tabs v-model="activeName" type="card">
|
||||
<el-tab-pane label="基本信息" name="base">
|
||||
<el-form-item prop="id" label="站点编码">
|
||||
<el-input maxlength="100" placeholder="站点编码"
|
||||
v-model="formData.id"
|
||||
auto-complete="off" tabindex="1" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="site_name" label="站点名称">
|
||||
<el-input maxlength="100" placeholder="站点名称"
|
||||
v-model="formData.site_name"
|
||||
auto-complete="off" tabindex="2" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="site_domain" label="域名地址">
|
||||
<el-input placeholder="http://"
|
||||
v-model="formData.site_domain"
|
||||
auto-complete="off" tabindex="3" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="site_icp" label="备案号">
|
||||
<el-input maxlength="100" placeholder="备案号"
|
||||
v-model="formData.site_icp"
|
||||
auto-complete="off" tabindex="4" type="text"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="PC版Logo">
|
||||
<el-upload
|
||||
class="avatar-uploader"
|
||||
tabindex="5"
|
||||
action="${base}/open/file/upload/image"
|
||||
name="Filedata"
|
||||
:show-file-list="false"
|
||||
:on-success="function(resp,file,fileList){return handleLogoSuccess(resp,file,fileList,'site_logo')}">
|
||||
|
||||
<img v-if="formData.site_logo" :src="'${AppFileDomain!}'+formData.site_logo" class="avatar">
|
||||
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
|
||||
</el-upload>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="手机版Logo">
|
||||
<el-upload
|
||||
class="avatar-uploader"
|
||||
tabindex="6"
|
||||
action="${base}/open/file/upload/image"
|
||||
name="Filedata"
|
||||
:show-file-list="false"
|
||||
:on-success="function(resp,file,fileList){return handleLogoSuccess(resp,file,fileList,'site_wap_logo')}">
|
||||
|
||||
<img v-if="formData.site_wap_logo" :src="'${AppFileDomain!}'+formData.site_wap_logo" class="avatar">
|
||||
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
|
||||
</el-upload>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item prop="footer_content" label="底部信息">
|
||||
<el-input maxlength="100" placeholder="底部信息"
|
||||
v-model="formData.footer_content"
|
||||
auto-complete="off" tabindex="7" type="textarea"></el-input>
|
||||
</el-form-item>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="联系方式" name="contact">
|
||||
<el-form-item prop="site_qq" label="客服QQ">
|
||||
<el-input maxlength="100" placeholder="客服QQ"
|
||||
v-model="formData.site_qq"
|
||||
auto-complete="off" tabindex="1" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="site_email" label="网站邮箱">
|
||||
<el-input maxlength="100" placeholder="网站邮箱"
|
||||
v-model="formData.site_email"
|
||||
auto-complete="off" tabindex="2" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="site_tel" label="客服电话">
|
||||
<el-input maxlength="100" placeholder="客服电话"
|
||||
v-model="formData.site_tel"
|
||||
auto-complete="off" tabindex="3" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="weibo_name" label="微博名称">
|
||||
<el-input maxlength="100" placeholder="微博名称"
|
||||
v-model="formData.weibo_name"
|
||||
auto-complete="off" tabindex="4" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="weibo_url" label="微博地址">
|
||||
<el-input maxlength="100" placeholder="微博地址"
|
||||
v-model="formData.weibo_url"
|
||||
auto-complete="off" tabindex="5" type="text"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="微博二维码">
|
||||
<el-upload
|
||||
class="avatar-uploader"
|
||||
tabindex="5"
|
||||
action="${base}/open/file/upload/image"
|
||||
name="Filedata"
|
||||
:show-file-list="false"
|
||||
:on-success="function(resp,file,fileList){return handleLogoSuccess(resp,file,fileList,'weibo_qrcode')}">
|
||||
|
||||
<img v-if="formData.weibo_qrcode" :src="'${AppFileDomain!}'+formData.weibo_qrcode" class="avatar">
|
||||
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
|
||||
<div class="el-upload__tip" slot="tip">请上传您的微博二维码</div>
|
||||
</el-upload>
|
||||
</el-form-item>
|
||||
<el-form-item prop="wechat_name" label="微信名称">
|
||||
<el-input maxlength="100" placeholder="微信名称"
|
||||
v-model="formData.wechat_name"
|
||||
auto-complete="off" tabindex="6" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="wechat_id" label="微信帐号">
|
||||
<el-input maxlength="100" placeholder="微信帐号"
|
||||
v-model="formData.wechat_id"
|
||||
auto-complete="off" tabindex="7" type="text"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="微信二维码">
|
||||
<el-upload
|
||||
class="avatar-uploader"
|
||||
tabindex="5"
|
||||
action="${base}/open/file/upload/image"
|
||||
name="Filedata"
|
||||
:show-file-list="false"
|
||||
:on-success="function(resp,file,fileList){return handleLogoSuccess(resp,file,fileList,'wechat_qrcode')}">
|
||||
|
||||
<img v-if="formData.wechat_qrcode" :src="'${AppFileDomain!}'+formData.wechat_qrcode" class="avatar">
|
||||
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
|
||||
<div class="el-upload__tip" slot="tip">请上传您的微信二维码</div>
|
||||
</el-upload>
|
||||
</el-form-item>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="SEO优化" name="seo">
|
||||
<el-form-item prop="seo_keywords" label="网页关键词">
|
||||
<el-input maxlength="100" placeholder="网页关键词"
|
||||
v-model="formData.seo_keywords"
|
||||
auto-complete="off" tabindex="1" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="seo_description" label="网页描述">
|
||||
<el-input maxlength="100" placeholder="网页描述"
|
||||
v-model="formData.seo_description"
|
||||
auto-complete="off" tabindex="2" type="textarea" maxlength="120"></el-input>
|
||||
</el-form-item>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</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"
|
||||
width="50%">
|
||||
<el-form :model="formData" ref="editForm" :rules="formRules" size="small" label-width="100px">
|
||||
<el-tabs v-model="activeName" type="card">
|
||||
<el-tab-pane label="基本信息" name="base">
|
||||
<el-form-item prop="id" label="站点编码">
|
||||
<el-input maxlength="100" placeholder="站点编码"
|
||||
v-model="formData.id"
|
||||
auto-complete="off" tabindex="1" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="site_name" label="站点名称">
|
||||
<el-input maxlength="100" placeholder="站点名称"
|
||||
v-model="formData.site_name"
|
||||
auto-complete="off" tabindex="2" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="site_domain" label="域名地址">
|
||||
<el-input placeholder="http://"
|
||||
v-model="formData.site_domain"
|
||||
auto-complete="off" tabindex="3" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="site_icp" label="备案号">
|
||||
<el-input maxlength="100" placeholder="备案号"
|
||||
v-model="formData.site_icp"
|
||||
auto-complete="off" tabindex="4" type="text"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="LOGO">
|
||||
<el-upload
|
||||
class="avatar-uploader"
|
||||
tabindex="5"
|
||||
action="${base}/open/file/upload/image"
|
||||
name="Filedata"
|
||||
:show-file-list="false"
|
||||
:on-success="function(resp,file,fileList){return handleLogoSuccess(resp,file,fileList,'site_logo')}">
|
||||
|
||||
<img v-if="formData.site_logo" :src="'${AppFileDomain!}'+formData.site_logo" class="avatar">
|
||||
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
|
||||
</el-upload>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="手机版Logo">
|
||||
<el-upload
|
||||
class="avatar-uploader"
|
||||
tabindex="6"
|
||||
action="${base}/open/file/upload/image"
|
||||
name="Filedata"
|
||||
:show-file-list="false"
|
||||
:on-success="function(resp,file,fileList){return handleLogoSuccess(resp,file,fileList,'site_wap_logo')}">
|
||||
|
||||
<img v-if="formData.site_wap_logo" :src="'${AppFileDomain!}'+formData.site_wap_logo" class="avatar">
|
||||
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
|
||||
</el-upload>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item prop="footer_content" label="底部信息">
|
||||
<el-input maxlength="100" placeholder="底部信息"
|
||||
v-model="formData.footer_content"
|
||||
auto-complete="off" tabindex="7" type="textarea"></el-input>
|
||||
</el-form-item>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="联系方式" name="contact">
|
||||
<el-form-item prop="site_qq" label="客服QQ">
|
||||
<el-input maxlength="100" placeholder="客服QQ"
|
||||
v-model="formData.site_qq"
|
||||
auto-complete="off" tabindex="1" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="site_email" label="网站邮箱">
|
||||
<el-input maxlength="100" placeholder="网站邮箱"
|
||||
v-model="formData.site_email"
|
||||
auto-complete="off" tabindex="2" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="site_tel" label="客服电话">
|
||||
<el-input maxlength="100" placeholder="客服电话"
|
||||
v-model="formData.site_tel"
|
||||
auto-complete="off" tabindex="3" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="weibo_name" label="微博名称">
|
||||
<el-input maxlength="100" placeholder="微博名称"
|
||||
v-model="formData.weibo_name"
|
||||
auto-complete="off" tabindex="4" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="weibo_url" label="微博地址">
|
||||
<el-input maxlength="100" placeholder="微博地址"
|
||||
v-model="formData.weibo_url"
|
||||
auto-complete="off" tabindex="5" type="text"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="微博二维码">
|
||||
<el-upload
|
||||
class="avatar-uploader"
|
||||
tabindex="5"
|
||||
action="${base}/open/file/upload/image"
|
||||
name="Filedata"
|
||||
:show-file-list="false"
|
||||
:on-success="function(resp,file,fileList){return handleLogoSuccess(resp,file,fileList,'weibo_qrcode')}">
|
||||
|
||||
<img v-if="formData.weibo_qrcode" :src="'${AppFileDomain!}'+formData.weibo_qrcode" class="avatar">
|
||||
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
|
||||
<div class="el-upload__tip" slot="tip">请上传您的微博二维码</div>
|
||||
</el-upload>
|
||||
</el-form-item>
|
||||
<el-form-item prop="wechat_name" label="微信名称">
|
||||
<el-input maxlength="100" placeholder="微信名称"
|
||||
v-model="formData.wechat_name"
|
||||
auto-complete="off" tabindex="6" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="wechat_id" label="微信帐号">
|
||||
<el-input maxlength="100" placeholder="微信帐号"
|
||||
v-model="formData.wechat_id"
|
||||
auto-complete="off" tabindex="7" type="text"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="微信二维码">
|
||||
<el-upload
|
||||
class="avatar-uploader"
|
||||
tabindex="5"
|
||||
action="${base}/open/file/upload/image"
|
||||
name="Filedata"
|
||||
:show-file-list="false"
|
||||
:on-success="function(resp,file,fileList){return handleLogoSuccess(resp,file,fileList,'wechat_qrcode')}">
|
||||
|
||||
<img v-if="formData.wechat_qrcode" :src="'${AppFileDomain!}'+formData.wechat_qrcode" class="avatar">
|
||||
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
|
||||
<div class="el-upload__tip" slot="tip">请上传您的微信二维码</div>
|
||||
</el-upload>
|
||||
</el-form-item>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="SEO优化" name="seo">
|
||||
<el-form-item prop="seo_keywords" label="网页关键词">
|
||||
<el-input maxlength="100" placeholder="网页关键词"
|
||||
v-model="formData.seo_keywords"
|
||||
auto-complete="off" tabindex="1" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="seo_description" label="网页描述">
|
||||
<el-input maxlength="100" placeholder="网页描述"
|
||||
v-model="formData.seo_description"
|
||||
auto-complete="off" tabindex="2" type="textarea" maxlength="120"></el-input>
|
||||
</el-form-item>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</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>
|
||||
</div>
|
||||
<script>
|
||||
new Vue({
|
||||
el: "#app",
|
||||
data: function () {
|
||||
return {
|
||||
addDialogVisible: false,
|
||||
editDialogVisible: false,
|
||||
tableData: [],
|
||||
pageForm: {
|
||||
siteName: "",
|
||||
siteDomain: "",
|
||||
pageSize: 10,
|
||||
pageNumber: 1,
|
||||
pageOrderName: "",
|
||||
pageOrderBy: "",
|
||||
totalCount: 0
|
||||
},
|
||||
activeName: "base",
|
||||
formData: {
|
||||
id: "",
|
||||
site_name: "",
|
||||
site_domain: "",
|
||||
site_logo: ""
|
||||
},
|
||||
imageUrl: "",
|
||||
formRules: {
|
||||
id: [
|
||||
{required: true, message: '请输入站点编码', trigger: 'blur'},
|
||||
],
|
||||
site_name: [
|
||||
{required: true, message: '请输入站点名', trigger: 'blur'},
|
||||
],
|
||||
site_email: [
|
||||
{type: "email", message: '请输入正确的邮箱地址', trigger: 'blur'},
|
||||
],
|
||||
seo_description: [
|
||||
{max: 120, message: '描述请不要超过 120 个字符', trigger: 'blur'},
|
||||
],
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
openAdd: function () {
|
||||
this.addDialogVisible = true;
|
||||
this.formData = {};//打开新增窗口,表单先清空
|
||||
},
|
||||
doAdd: function () {
|
||||
var self = this;
|
||||
var url = base + "/platform/cms/site/addDo";
|
||||
self.$refs["addForm"].validate(function (valid) {
|
||||
if (valid) {//表单验证通过
|
||||
$.post(url, self.formData, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.addDialogVisible = false;
|
||||
self.activeName = "base";
|
||||
self.pageData();//重新加载分页数据
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
});
|
||||
},
|
||||
doEdit: function () {
|
||||
var self = this;
|
||||
var url = base + "/platform/cms/site/editDo";
|
||||
self.$refs["editForm"].validate(function (valid) {
|
||||
if (valid) {
|
||||
$.post(url, self.formData, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.editDialogVisible = false;
|
||||
self.activeName = "base";
|
||||
self.pageData();//重新加载分页数据
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
});
|
||||
},
|
||||
pageOrder: function (column) {//按字段排序
|
||||
this.pageForm.pageOrderName = column.prop;
|
||||
this.pageForm.pageOrderBy = column.order;
|
||||
this.pageData();
|
||||
},
|
||||
pageNumberChange: function (val) {//页码更新操作
|
||||
this.pageForm.pageNumber = val;
|
||||
this.pageData();
|
||||
},
|
||||
pageSizeChange: function (val) {//分页大小更新操作
|
||||
this.pageForm.pageSize = val;
|
||||
this.pageData();
|
||||
},
|
||||
beforeImageUpload: function (file) {
|
||||
|
||||
},
|
||||
handleLogoSuccess: function (response, file, fileList, attrName) {
|
||||
if (response.code == 0) {
|
||||
// 对象属性直接赋值不会触发试图更新,采用 Vue.set 、this.$set或者Object.assign({},this.obj)创建新对象
|
||||
// 或者也可以定义一个 refresh 属性 ,当数据发生改变时,该属性同时变化,也会触发视图更新
|
||||
// this.formData.site_logo =response.data;
|
||||
this.$set(this.formData, attrName, response.data);
|
||||
} else {
|
||||
this.$set(this.formData, attrName, "");
|
||||
}
|
||||
},
|
||||
pageData:function() {//加载分页数据
|
||||
var self = this;
|
||||
sublime.showLoadingbar();//显示loading
|
||||
$.post(base + "/platform/cms/site/data", self.pageForm, function (data) {
|
||||
sublime.closeLoadingbar();//关闭loading
|
||||
if (data.code == 0) {
|
||||
self.tableData = data.data.list;
|
||||
self.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
dropdownCommand: function (command) {//监听下拉框事件
|
||||
var self = this;
|
||||
if ("edit" == command.type) {
|
||||
$.post(base + "/platform/cms/site/edit/" + command.id, {}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.formData = data.data;//加载后台表单数据
|
||||
self.editDialogVisible = true;//打开编辑窗口
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
if ("delete" == command.type) {
|
||||
self.$confirm('此操作将删除站点 ' + command.name, '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: function (a, b) {
|
||||
if ("confirm" == a) {//确认后再执行
|
||||
$.post(base + "/platform/cms/site/delete/" + command.id, {}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.pageData();
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
created: function () {
|
||||
this.pageData();
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<!--#}#-->
|
||||
@@ -0,0 +1,155 @@
|
||||
<!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>
|
||||
<!-- 引入样式文件 -->
|
||||
<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.min.js"></script>
|
||||
<script src="/assets/platform/plugins/jquery/jquery-1.11.1.min.js"></script>
|
||||
<script src="/assets/platform/plugins/moment/moment.min.js"></script>
|
||||
<script src="/assets/platform/js/signature.min.js"></script>
|
||||
</head>
|
||||
<style>
|
||||
[v-clock] {
|
||||
display: none
|
||||
}
|
||||
</style>
|
||||
<body style="height: 100%;width: 100%">
|
||||
<div v-clock id="app" style="height: 100%;width: 100%">
|
||||
<van-row style="margin-top: 10vh;text-align: center">
|
||||
<h3 style="color: #1989fa">提示:请在下方区域签字!</h3>
|
||||
</van-row>
|
||||
<van-row style="margin-top: 20px">
|
||||
<canvas id="canvas" style="border: rgb(220,220,220) 1px solid"></canvas>
|
||||
</van-row>
|
||||
<van-row style="margin-top: 20px">
|
||||
<van-col span="24" style="text-align: center">
|
||||
<van-row type="flex" justify="space-around">
|
||||
<van-col span="11">
|
||||
<van-button @click="reset" type="default" size="large">清 空</van-button>
|
||||
</van-col>
|
||||
<van-col span="11">
|
||||
<van-button type="info" @click="doSub" size="large" :disabled="subDis">提 交</van-button>
|
||||
</van-col>
|
||||
</van-row>
|
||||
</van-col>
|
||||
</van-row>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
document.body.addEventListener('touchmove', function (e) {
|
||||
e.preventDefault(); //阻止默认的处理方式(阻止下拉滑动的效果)
|
||||
}, {passive: false}); //passive 参数不能省略,用来兼容ios和android
|
||||
|
||||
function getQueryVariable(variable) {
|
||||
var query = window.location.search.substring(1);
|
||||
var vars = query.split("&");
|
||||
for (var i = 0; i < vars.length; i++) {
|
||||
var pair = vars[i].split("=");
|
||||
if (pair[0] == variable) {
|
||||
return pair[1];
|
||||
}
|
||||
}
|
||||
return '';
|
||||
}
|
||||
|
||||
var qmoption = {
|
||||
el: '#canvas',
|
||||
lineWidth: 4,
|
||||
lineColor: '#000',
|
||||
overflow: false,
|
||||
background: '#fff'
|
||||
}
|
||||
var qm
|
||||
|
||||
var
|
||||
vue = new Vue({
|
||||
el: "#app",
|
||||
data: function () {
|
||||
return {
|
||||
prefix: '',
|
||||
id: '',
|
||||
base64: '',
|
||||
subDis: false,
|
||||
isNull: function (val) {
|
||||
if (val === null || val === undefined || val === '') {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
},
|
||||
}
|
||||
},
|
||||
filters: {
|
||||
none2str: function (value) {
|
||||
if (vue.isNull(value)) {
|
||||
return '暂无'
|
||||
}
|
||||
return value
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
reset() {
|
||||
qm.reset()
|
||||
},
|
||||
doSub() {
|
||||
qm.getContentBase64(false, (val) => {
|
||||
this.base64 = val
|
||||
})
|
||||
|
||||
$.post("/signature/doSub", {
|
||||
prefix: this.prefix,
|
||||
id: this.id,
|
||||
base64: this.base64
|
||||
}, (data) => {
|
||||
if (data.code == 0) {
|
||||
this.$notify({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
this.subDis = true
|
||||
} else {
|
||||
this.$notify({
|
||||
message: data.msg,
|
||||
type: 'danger'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
},
|
||||
mounted: () => {
|
||||
canvas = document.getElementById("canvas");
|
||||
if (canvas.width < window.innerWidth) {
|
||||
canvas.width = window.innerWidth;
|
||||
}
|
||||
|
||||
if (canvas.height < window.innerHeight) {
|
||||
canvas.height = window.innerHeight * 0.5;
|
||||
}
|
||||
|
||||
qm = new Signature(qmoption);
|
||||
qm.create();
|
||||
},
|
||||
created: function () {
|
||||
if (this.isNull(getQueryVariable("id")) || this.isNull(getQueryVariable("prefix"))) {
|
||||
this.$notify({
|
||||
message: '缺少参数!',
|
||||
type: 'danger'
|
||||
});
|
||||
this.subDis = true
|
||||
}
|
||||
this.id = getQueryVariable("id")
|
||||
this.prefix = getQueryVariable("prefix")
|
||||
}
|
||||
})
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,554 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
#app {
|
||||
display: flex;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
background-color: #f0f2f5;
|
||||
}
|
||||
|
||||
.box-card {
|
||||
width: calc(100% - 50px);
|
||||
height: calc(100% - 50px);
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.box-card .el-card__body {
|
||||
height: calc(100% - 67px - 20px);
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.box-card-title {
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
.card-body {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
height: 100%;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.card-body-center {
|
||||
width: 60%;
|
||||
min-width: 800px;
|
||||
height: 100%;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.card-body-center-bottom {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.card-body-center-bottom button {
|
||||
margin: 0 10px;
|
||||
}
|
||||
|
||||
.card-body-center > .el-carousel {
|
||||
height: calc(100% - 120px);
|
||||
position: relative;
|
||||
overflow-y: hidden;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.card-body-center > .el-carousel > .el-carousel__container {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.carousel-table-item {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
padding: 10px 0;
|
||||
}
|
||||
|
||||
.carousel-table-item-center {
|
||||
height: 100%;
|
||||
width: 90%;
|
||||
min-width: 800px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.carousel-table-item-center .card-body {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.checkGroup {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
overflow-y: scroll;
|
||||
padding-right: 10px;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.checkGroup .el-radio, .checkGroup .el-checkbox {
|
||||
padding: 12px;
|
||||
margin: 0 !important;
|
||||
margin-top: 15px !important;
|
||||
}
|
||||
|
||||
.checkGroup .el-checkbox__label {
|
||||
width: calc(100% - 16px);
|
||||
}
|
||||
|
||||
.carousel-table-item-relation .el-card__body {
|
||||
position: relative;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.carousel-table-item-form .el-card__body {
|
||||
position: relative;
|
||||
height: 100%;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
</style>
|
||||
<div id="app" v-cloak>
|
||||
<el-card class="box-card" shadow="never">
|
||||
<div slot="header" class="clearfix">
|
||||
<span class="box-card-title">DataKid</span>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="card-body-center">
|
||||
<el-steps :active="active" align-center>
|
||||
<el-step title="选择数据表" icon="el-icon-document-copy"></el-step>
|
||||
<el-step title="选择数据列" icon="el-icon-s-unfold"></el-step>
|
||||
<el-step title="数据列对应" icon="el-icon-s-operation"></el-step>
|
||||
<el-step title="提交数据" icon="el-icon-upload"></el-step>
|
||||
<el-step title="导入结果" icon="el-icon-bell"></el-step>
|
||||
</el-steps>
|
||||
|
||||
<el-carousel indicator-position="none" :autoplay="false" arrow="never" ref="carousel"
|
||||
direction="vertical">
|
||||
<!--表选择-->
|
||||
<el-carousel-item class="carousel-table-item">
|
||||
<el-card class="carousel-table-item-center">
|
||||
<div slot="header" class="clearfix">
|
||||
<el-input style="width: 200px" v-model="tableNameKeyWord" placeholder="请输入关键字查询"
|
||||
clearable></el-input>
|
||||
<el-button type="primary" icon="el-icon-search" @click="tableNameSearch"></el-button>
|
||||
<el-button v-if="formData.tableName" style="float: right; padding: 10px 0" type="text">
|
||||
当前选中:{{formData.tableName}}
|
||||
</el-button>
|
||||
</div>
|
||||
|
||||
<el-radio-group class="checkGroup" v-model="formData.tableName">
|
||||
<el-radio v-for="item in tableOptionsClone" :key="item.table_name"
|
||||
:label="item.table_name" border>
|
||||
{{item.table_name}}{{item.table_comment?' ( '+item.table_comment+' )':''}}<span
|
||||
style="float: right;color: #F56C6C">rows: {{item.table_rows}}</span>
|
||||
</el-radio>
|
||||
</el-radio-group>
|
||||
</el-card>
|
||||
</el-carousel-item>
|
||||
|
||||
<!--列选择-->
|
||||
<el-carousel-item class="carousel-table-item">
|
||||
<el-card class="carousel-table-item-center">
|
||||
<div slot="header" class="clearfix">
|
||||
<el-input style="width: 200px" v-model="columnNameKeyWord" placeholder="请输入关键字查询"
|
||||
clearable></el-input>
|
||||
<el-button type="primary" icon="el-icon-search" @click="columnSearch"></el-button>
|
||||
|
||||
<el-button style="float: right; padding: 10px 0" type="text">
|
||||
{{formData.tableName}}
|
||||
</el-button>
|
||||
</div>
|
||||
<el-checkbox-group class="checkGroup" v-model="formData.columns">
|
||||
<el-checkbox v-for="item in columnOptionsClone" :key="item.column_name"
|
||||
:label="item.column_name" border>
|
||||
{{item.column_name}}{{item.column_comment?' ( '+item.column_comment+' )':''}}<span
|
||||
style="float: right;color: #F56C6C">{{item.column_type}}</span>
|
||||
</el-checkbox>
|
||||
</el-checkbox-group>
|
||||
</el-card>
|
||||
</el-carousel-item>
|
||||
|
||||
<!--列对应-->
|
||||
<el-carousel-item style="padding: 10px" class="carousel-table-item">
|
||||
<el-card style="width: 100%" class="carousel-table-item-relation">
|
||||
<el-table
|
||||
:data="relation" height="100%"
|
||||
style="width: 100%" border size="medium">
|
||||
<el-table-column
|
||||
prop="column_name"
|
||||
label="列名">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="column_comment"
|
||||
label="描述" show-overflow-tooltip="true">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="is_nullable"
|
||||
label="可为空">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="column_type"
|
||||
label="类型">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="column_key"
|
||||
label="key">
|
||||
</el-table-column>
|
||||
<el-table-column min-width="200px">
|
||||
<template slot="header" slot-scope="scope">
|
||||
目标列
|
||||
<el-popover
|
||||
placement="top-start"
|
||||
title="提示"
|
||||
trigger="hover"
|
||||
content="excel对应的表头名称,用于和表数据列对应">
|
||||
<i slot="reference" class="el-icon-question"></i>
|
||||
</el-popover>
|
||||
</template>
|
||||
<template slot-scope="{row}">
|
||||
<el-input
|
||||
v-model="row.relation"
|
||||
size="medium"
|
||||
placeholder="目标列"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-card>
|
||||
</el-carousel-item>
|
||||
|
||||
|
||||
<!--提交-->
|
||||
<el-carousel-item style="padding: 10px" class="carousel-table-item">
|
||||
<el-card style="width: 100%" class="carousel-table-item-form">
|
||||
<el-form label-width="120px" :model="formData" ref="form" :rules="formRules">
|
||||
<el-form-item label=" " label-width="135px" class="view-header">
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item prop="method" label="导入方式">
|
||||
<el-radio-group v-model="formData.method">
|
||||
<el-radio-button :label="1">追加或更新</el-radio-button>
|
||||
<el-radio-button :label="2">仅追加</el-radio-button>
|
||||
<el-radio-button :label="3">仅更新</el-radio-button>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item v-if="[1,3].includes(formData.method)" prop="field" label="关键字段">
|
||||
<el-select v-model="formData.field" placeholder="请选择" style="width:50%">
|
||||
<el-option
|
||||
v-for="item in relation"
|
||||
:key="item.column_name"
|
||||
:label="item.column_name"
|
||||
:value="item.column_name">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item prop="plugins" label="可选插件">
|
||||
<el-checkbox-group v-model="formData.plugins">
|
||||
<el-checkbox v-for="v in plugins" :label="v.name" border>{{v.description}}
|
||||
</el-checkbox>
|
||||
</el-checkbox-group>
|
||||
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="文  件" class="is-required">
|
||||
<el-upload
|
||||
drag
|
||||
name="file"
|
||||
ref="upload"
|
||||
action="****"
|
||||
:on-remove="handleRemove"
|
||||
:on-change="handleChange"
|
||||
:auto-upload="false"
|
||||
:limit="1"
|
||||
:file-list="fileList">
|
||||
<i class="el-icon-upload"></i>
|
||||
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
|
||||
<div class="el-upload__tip" slot="tip" style="color: #F56C6C">
|
||||
只能上传 xls/xlsx 文件
|
||||
</div>
|
||||
</el-upload>
|
||||
</el-form-item>
|
||||
|
||||
</el-form>
|
||||
</el-card>
|
||||
</el-carousel-item>
|
||||
|
||||
<!--结果-->
|
||||
<el-carousel-item style="padding: 10px">
|
||||
<el-card style="width: 100%">
|
||||
<div style="display: flex;justify-content: center;align-items: center;flex-direction:column ">
|
||||
<el-progress type="circle" :percentage="result.success/result.total*100"
|
||||
status="success"></el-progress>
|
||||
<div style="font-size: 12px;color: rgb(100,100,100);margin-top: 20px">总记录数
|
||||
{{result.total}} 条,成功
|
||||
{{result.success}} 条!
|
||||
</div>
|
||||
<div style="margin-top: 5px" v-if="result.cacheKey">
|
||||
<el-link type="primary" style="font-size: 12px;"
|
||||
:href="loc()+'/exportErrors?cacheKey='+result.cacheKey">下载错误记录
|
||||
</el-link>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
</el-carousel-item>
|
||||
</el-carousel>
|
||||
|
||||
|
||||
<div class="card-body-center-bottom">
|
||||
<el-button size="medium" @click="prev" :disabled="active==0||loading">上一步</el-button>
|
||||
<el-button type="primary" size="medium" :loading="loading" @click="active<4?next():carry()">
|
||||
{{active<4?'下一步':'完成'}}
|
||||
</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
</div>
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
data() {
|
||||
return {
|
||||
active: 0,
|
||||
result: {success: 0, total: 0},
|
||||
loading: false,
|
||||
|
||||
/*提交数据*/
|
||||
/*start*/
|
||||
fileList: [],
|
||||
plugins: {},
|
||||
formRules: {
|
||||
method: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
field: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
},
|
||||
/*end*/
|
||||
|
||||
/*列对应*/
|
||||
/*start*/
|
||||
relation: [],
|
||||
/*end*/
|
||||
|
||||
/*tableColumn*/
|
||||
/*start*/
|
||||
columnOptions: [],
|
||||
columnOptionsClone: [],
|
||||
columnNameKeyWord: '',
|
||||
/*end*/
|
||||
|
||||
/*tableName*/
|
||||
/*start*/
|
||||
tableNameKeyWord: '',
|
||||
tableOptions: [],
|
||||
tableOptionsClone: [],
|
||||
cacheTableName: '',
|
||||
/*end*/
|
||||
|
||||
formData: {
|
||||
tableName: '',
|
||||
columns: [],
|
||||
method: 1,
|
||||
plugins: [],
|
||||
}
|
||||
}
|
||||
},
|
||||
components: {},
|
||||
filters: {},
|
||||
methods: {
|
||||
carry() {
|
||||
this.formData = {
|
||||
tableName: '',
|
||||
columns: [],
|
||||
method: 1,
|
||||
plugins: [],
|
||||
}
|
||||
this.relation = []
|
||||
this.fileList = []
|
||||
this.active = 0
|
||||
this.$refs.carousel.next()
|
||||
},
|
||||
async next() {
|
||||
const {active} = this
|
||||
if (active == 0) {
|
||||
if (!this.formData.tableName) {
|
||||
this.$notify({
|
||||
title: '警告',
|
||||
message: '请选择数据表',
|
||||
type: 'warning'
|
||||
});
|
||||
return
|
||||
}
|
||||
if (this.cacheTableName != this.formData.tableName) {
|
||||
this.loadColumn()
|
||||
this.formData.columns = []
|
||||
this.cacheTableName = this.formData.tableName
|
||||
}
|
||||
} else if (active == 1) {
|
||||
if (!this.formData.columns || !this.formData.columns.length) {
|
||||
this.$notify({
|
||||
title: '警告',
|
||||
message: '请选择数据列',
|
||||
type: 'warning'
|
||||
});
|
||||
return
|
||||
}
|
||||
this.genRelation()
|
||||
} else if (active == 2) {
|
||||
if (this.relation.find(v => !v.relation)) {
|
||||
this.$notify({
|
||||
title: '警告',
|
||||
message: '存在未填写的目标列',
|
||||
type: 'warning'
|
||||
});
|
||||
return
|
||||
}
|
||||
} else if (active == 3) {
|
||||
await this.doSubmit()
|
||||
}
|
||||
|
||||
this.$refs.carousel.next()
|
||||
this.active++
|
||||
},
|
||||
prev() {
|
||||
this.$refs.carousel.prev()
|
||||
this.active--
|
||||
},
|
||||
|
||||
async doSubmit() {
|
||||
let Break = false
|
||||
this.$refs["form"].validate((valid) => {
|
||||
if (!valid || !this.fileList.length) {
|
||||
this.$notify({
|
||||
title: '警告',
|
||||
message: '存在未填写的必填项',
|
||||
type: 'warning'
|
||||
});
|
||||
Break = true
|
||||
return
|
||||
}
|
||||
})
|
||||
if (Break) return
|
||||
|
||||
this.loading = true
|
||||
|
||||
let formData = new FormData()
|
||||
for (let key in this.formData) {
|
||||
formData.append(key, this.formData[key])
|
||||
}
|
||||
formData.append("relation", JSON.stringify(this.relation))
|
||||
this.fileList.forEach((val) => {
|
||||
formData.append("file", val.raw, val.raw.name);
|
||||
});
|
||||
|
||||
const {code, data, msg} = await $.ajax({
|
||||
url: loc() + "/importData",
|
||||
type: "post",
|
||||
data: formData,
|
||||
processData: false,
|
||||
contentType: false,
|
||||
});
|
||||
|
||||
this.loading = false
|
||||
|
||||
if (code) {
|
||||
this.$notify.error({
|
||||
title: '错误',
|
||||
message: msg
|
||||
});
|
||||
|
||||
this.result = {success: 0, total: 0}
|
||||
return
|
||||
}
|
||||
|
||||
this.result = data
|
||||
|
||||
},
|
||||
|
||||
/*提交数据*/
|
||||
/*start*/
|
||||
handleRemove(file, fileList) {
|
||||
this.fileList = fileList;
|
||||
},
|
||||
handleChange(file, fileList) {
|
||||
|
||||
const remove = () => {
|
||||
for (let i = 0; i < fileList.length; i++) {
|
||||
if (file == fileList[i]) {
|
||||
fileList.splice(i, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (file.size == 0) {
|
||||
this.$message.warning("您选择的是空文件!");
|
||||
remove()
|
||||
}
|
||||
|
||||
const type = ['xls', 'xlsx'].includes(file.name.split('.').pop().toLowerCase())
|
||||
if (!type) {
|
||||
this.$message.warning('上传文件只能是' + ['xls', 'xlsx'].map(v => v.toLowerCase()).join("/") + '格式!');
|
||||
remove()
|
||||
}
|
||||
|
||||
this.fileList = fileList;
|
||||
},
|
||||
async loadPlugins() {
|
||||
this.plugins = await getEnumOptions("DataImportPluginHandle")
|
||||
},
|
||||
/*end*/
|
||||
|
||||
/*数据列对应*/
|
||||
/*start*/
|
||||
genRelation() {
|
||||
this.relation = this.columnOptions.filter(v => this.formData.columns.includes(v.column_name))
|
||||
},
|
||||
/*end*/
|
||||
|
||||
/*tableName*/
|
||||
/*start*/
|
||||
columnSearch() {
|
||||
if (!this.columnNameKeyWord) {
|
||||
this.columnOptionsClone = clone(this.columnOptions)
|
||||
return
|
||||
}
|
||||
this.columnOptionsClone = this.columnOptions.filter(v => v.column_name.toLowerCase().indexOf(this.columnNameKeyWord.toLowerCase()) != -1 || v.column_comment.toLowerCase().indexOf(this.columnNameKeyWord.toLowerCase()) != -1)
|
||||
},
|
||||
async loadColumn() {
|
||||
const {tableName} = this.formData
|
||||
const {data} = await $.get(loc() + '/columns', {tableName})
|
||||
this.columnOptions = data
|
||||
this.columnOptionsClone = clone(data)
|
||||
},
|
||||
/*end*/
|
||||
|
||||
/*tableName*/
|
||||
/*start*/
|
||||
tableNameSearch() {
|
||||
if (!this.tableNameKeyWord) {
|
||||
this.tableOptionsClone = clone(this.tableOptions)
|
||||
return
|
||||
}
|
||||
this.tableOptionsClone = this.tableOptions.filter(v => v.table_name.toLowerCase().indexOf(this.tableNameKeyWord.toLowerCase()) != -1 || v.table_comment.toLowerCase().indexOf(this.tableNameKeyWord.toLowerCase()) != -1)
|
||||
},
|
||||
async loadTableName() {
|
||||
const {data} = await $.get(loc() + '/tableNames')
|
||||
this.tableOptions = data
|
||||
this.tableOptionsClone = clone(data)
|
||||
}
|
||||
/*end*/
|
||||
},
|
||||
created() {
|
||||
this.loadTableName()
|
||||
this.loadPlugins()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,543 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
#app {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.w-e-text-container {
|
||||
height: 200px !important;
|
||||
}
|
||||
|
||||
input[type="file"] {
|
||||
display: none
|
||||
}
|
||||
|
||||
.el-select-dropdown {
|
||||
z-index: 99999999 !important;
|
||||
}
|
||||
|
||||
.el-loading-mask {
|
||||
z-index: 99999999 !important;
|
||||
}
|
||||
</style>
|
||||
|
||||
<style>
|
||||
.v-tree-layout-left .v-tree {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.v-tree-layout-left .custom-tree-node {
|
||||
width: 90%;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.v-tree-layout-left .v-tree .v-node {
|
||||
width: 100%;
|
||||
display: inline-block;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<tree-layout style="height: calc(100vh - 50px)">
|
||||
<template #tree>
|
||||
|
||||
<div style="padding: 20px;border-right: 2px solid rgb(240,240,240);padding-bottom: 20px">
|
||||
<el-input
|
||||
placeholder="输入关键字进行查找"
|
||||
v-model="filterText">
|
||||
</el-input>
|
||||
</div>
|
||||
|
||||
|
||||
<el-tree ref="tree" :data="treeData" class="v-tree" v-loading="treeLoading" node-key="id"
|
||||
:props="defaultProps"
|
||||
default-expand-all :expand-on-click-node="false"
|
||||
@node-click="handleNodeClick" accordion @node-expand="nodeExpand"
|
||||
highlight-current :filter-node-method="filterNode">
|
||||
<div class="custom-tree-node" slot-scope="{ node, data }">
|
||||
|
||||
<div v-if="node.level==1" style="font-size: 16px;" class="v-node"><i
|
||||
class="el-icon-s-home"></i>
|
||||
{{ data.name }}
|
||||
</div>
|
||||
|
||||
<div v-if="node.level==2"
|
||||
style="font-size: 15px" :title="data.name" class="v-node">
|
||||
<i class="el-icon-star-on" v-if="checkData.name==data.name"></i>
|
||||
<i class="el-icon-star-off" v-else></i>
|
||||
{{ data.name }}
|
||||
</div>
|
||||
|
||||
|
||||
<div v-if="node.level==3"
|
||||
style="font-size: 14px" :title="data.name" class="v-node">
|
||||
<i class="fa fa-dot-circle-o" v-if="checkData.name==data.name"></i>
|
||||
<i class="fa fa-circle-o" v-else></i>
|
||||
{{ data.name }}
|
||||
</div>
|
||||
|
||||
|
||||
<div v-if="node.level>3"
|
||||
style="font-size: 14px" :title="data.name" class="v-node">
|
||||
<i class="fa fa-dot-circle-o" v-if="checkData.name==data.name"></i>
|
||||
<i class="fa fa-circle-o" v-else></i>
|
||||
{{ data.name }}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</el-tree>
|
||||
|
||||
</template>
|
||||
<template>
|
||||
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<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="name"></el-option>
|
||||
<el-option label="单位代码" value="unitcode"></el-option>
|
||||
</el-select>
|
||||
</el-input>
|
||||
</div>
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-button type="primary" icon="el-icon-search" @click="doSearch"></el-button>
|
||||
</div>
|
||||
|
||||
<div class="pull-right offscreen-right mt5">
|
||||
<div class="btn-group tool-button" v-if="checkNode.level==1">
|
||||
<!--#if(@shiro.hasRole('sysadmin')){#-->
|
||||
<el-button icon="el-icon-refresh" :loading="loading" @click="dataUpdate"
|
||||
type="primary">更新组织机构
|
||||
</el-button>
|
||||
<!--#}#-->
|
||||
</div>
|
||||
<!-- <div class="btn-group tool-button">-->
|
||||
<!-- <el-button icon="el-icon-plus" @click="openAdd">新建单位</el-button>-->
|
||||
<!-- </div>-->
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<el-table :data="tableData" style="width: 100%" row-key="id" @sort-change="pageOrder"
|
||||
v-loading="tabLoading" size="medium">
|
||||
<el-table-column align="center" :key="1" 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 align="center" header-align="center" label="单位名称"
|
||||
prop="name"></el-table-column>
|
||||
|
||||
<el-table-column align="center" header-align="center" label="单位代码"
|
||||
prop="unitcode"></el-table-column>
|
||||
|
||||
<el-table-column label="单位等级" header-align="center" prop="unitlevel"
|
||||
:show-overflow-tooltip="true" align="center">
|
||||
<template slot-scope="scope">
|
||||
<el-button v-if="scope.row.unitlevel==1" size="mini" type="success" round
|
||||
style=" vertical-align: middle;">1级
|
||||
</el-button>
|
||||
<el-button v-if="scope.row.unitlevel==2" size="mini" type="warning" round
|
||||
style=" vertical-align: middle;">2级
|
||||
</el-button>
|
||||
<el-button v-if="scope.row.unitlevel==3" size="mini" type="danger" round
|
||||
style=" vertical-align: middle;">3级
|
||||
</el-button>
|
||||
<el-button v-if="scope.row.unitlevel>3" size="mini" type="info" round
|
||||
style=" vertical-align: middle;">{{scope.row.unitlevel}}级
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" header-align="center" label="操作"
|
||||
width="200px">
|
||||
<template slot-scope="{row}">
|
||||
<el-dropdown @command="dropdownCommand">
|
||||
<el-button size="mini">
|
||||
<i class="ti-settings"></i>
|
||||
<span class="ti-angle-down"></span>
|
||||
</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
|
||||
<!-- <el-dropdown-item :command="{type:'view',data:row}">-->
|
||||
<!-- 查看-->
|
||||
<!-- </el-dropdown-item>-->
|
||||
<el-dropdown-item :command="{type:'edit',data:row}">
|
||||
编辑
|
||||
</el-dropdown-item>
|
||||
|
||||
<el-dropdown-item :command="{type:'delete',data:row}">
|
||||
删除
|
||||
</el-dropdown-item>
|
||||
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
</el-table>
|
||||
|
||||
<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"
|
||||
:total="pageForm.totalCount">
|
||||
</el-pagination>
|
||||
</el-row>
|
||||
</el-card>
|
||||
|
||||
</template>
|
||||
|
||||
</template>
|
||||
</tree-layout>
|
||||
</template>
|
||||
<template #edit>
|
||||
|
||||
<el-divider content-position="left"><span style="color: rgb(121, 187, 255)">请填写以下单位信息</span>
|
||||
</el-divider>
|
||||
<el-form :model="formData" ref="form" :rules="formRules" label-position="top"
|
||||
label-width="120px"
|
||||
style="padding: 0 30px">
|
||||
<el-row gutter="30">
|
||||
<el-col :span="24">
|
||||
<el-form-item label="上级单位">
|
||||
<el-input maxlength="100" disabled :value="checkData.name"
|
||||
type="text"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="单位名称" prop="name">
|
||||
<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 label="单位代码" prop="unitcode">
|
||||
<el-input maxlength="100" placeholder="请输入协会编码" v-model="formData.unitcode"
|
||||
type="text"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="单位简称" prop="aliasName">
|
||||
<el-input maxlength="100" placeholder="请输入单位简称" v-model="formData.aliasName"
|
||||
type="text"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="联系电话" prop="telephone">
|
||||
<el-input maxlength="100" placeholder="请输入联系电话" v-model="formData.telephone"
|
||||
type="text"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="单位邮箱" prop="email">
|
||||
<el-input maxlength="100" placeholder="请输入单位邮箱" v-model="formData.email"
|
||||
type="text"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="单位网站" prop="website">
|
||||
<el-input maxlength="100" placeholder="请输入单位网站" v-model="formData.website"
|
||||
type="text"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="单位地址" prop="address">
|
||||
<el-input maxlength="100" placeholder="请输入单位地址" v-model="formData.address"
|
||||
type="text"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="单位介绍" prop="note">
|
||||
<el-input maxlength="500" type="textarea" placeholder="请输入单位介绍"
|
||||
v-model="formData.note"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
|
||||
<div style="display: flex;justify-content:flex-end;margin-top: 30px">
|
||||
<el-button type="primary" :loading="loading" @click="!formData.id?doAdd():doEdit()">提 交
|
||||
</el-button>
|
||||
</div>
|
||||
</el-form>
|
||||
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
<script>
|
||||
var E = window.wangEditor
|
||||
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
data() {
|
||||
return {
|
||||
loading: false,
|
||||
filterText: '',
|
||||
defaultProps: {
|
||||
children: 'child',
|
||||
label: 'name',
|
||||
},
|
||||
exKeys: ['0'],
|
||||
activeName: [],
|
||||
typeOptions: [],
|
||||
treeLoading: true,
|
||||
tabLoading: false,
|
||||
formData: {},
|
||||
detailData: {},
|
||||
treeData: [],
|
||||
tableData: [],
|
||||
pageForm: {
|
||||
searchName: "name",
|
||||
searchKeyword: "",
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
pageOrderName: "",
|
||||
pageOrderBy: ""
|
||||
},
|
||||
formRules: {
|
||||
name: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
code: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
},
|
||||
checkNode: {level: 1},
|
||||
checkData: {},
|
||||
campusOptions: [],
|
||||
loading: false,
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'tree-layout': httpVueLoader('/components/plugins/TreeLayout.vue'),
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
},
|
||||
watch: {
|
||||
filterText(val) {
|
||||
this.$refs.tree.filter(val);
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
//单位数据更新
|
||||
async dataUpdate() {
|
||||
this.$confirm('您确定要更新组织机构吗, 是否继续?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(async () => {
|
||||
this.loading = true;
|
||||
const resp = await $.get(loc() + "/dataUpdate")
|
||||
if (resp.code == 0) {
|
||||
this.loading = false;
|
||||
this.$message({
|
||||
message: '更新成功',
|
||||
type: 'success'
|
||||
});
|
||||
this.pageData();
|
||||
} else {
|
||||
this.loading = false;
|
||||
this.$message.error('更新失败');
|
||||
}
|
||||
}).catch(() => {
|
||||
this.$message({
|
||||
type: 'info',
|
||||
message: '已取消更新'
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
dropdownCommand: function (command) {
|
||||
const {type, data} = command
|
||||
if (type == 'view') {
|
||||
|
||||
} else if (type == 'edit') {
|
||||
this.openEdit(data.id)
|
||||
} else if (type == 'delete') {
|
||||
this.doDelete(data.id)
|
||||
}
|
||||
},
|
||||
filterNode(value, data, node) {
|
||||
if (!value) return true;
|
||||
|
||||
return data.name.indexOf(value) !== -1
|
||||
|
||||
return false
|
||||
},
|
||||
nodeExpand(data, node, e) {
|
||||
|
||||
},
|
||||
async handleNodeClick(data, node) {
|
||||
this.checkData = data
|
||||
this.checkNode = node
|
||||
this.doSearch()
|
||||
},
|
||||
doDelete(id) {
|
||||
this.$confirm('确定要删除该单位吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: (a, b) => {
|
||||
if ("confirm" == a) {//确认后再执行
|
||||
$.post(loc() + "/doDelete", {id}, (data) => {
|
||||
if (data.code == 0) {
|
||||
this.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
this.loadTree(false)
|
||||
this.pageData()
|
||||
} else {
|
||||
this.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
doEdit() {
|
||||
this.$refs["form"].validate(async (valid) => {
|
||||
if (valid) {
|
||||
this.loading = true
|
||||
const resp = await $.post(loc() + "/doEdit", this.formData)
|
||||
requestLaterMsgFun(this, resp, () => {
|
||||
this.loadTree(false)
|
||||
this.pageData();
|
||||
}, null, () => {
|
||||
this.loading = false
|
||||
this.$refs.guava.index()
|
||||
})
|
||||
}
|
||||
});
|
||||
},
|
||||
async openEdit(id) {
|
||||
const resp = await $.get(loc() + "/findOne", {id})
|
||||
requestLaterFun(resp, (data) => {
|
||||
this.formData = data
|
||||
this.$refs.guava.edit()
|
||||
if (this.$refs['form']) {
|
||||
this.$refs['form'].resetFields()
|
||||
}
|
||||
}, (data, msg) => {
|
||||
this.$message({
|
||||
message: msg,
|
||||
type: 'error'
|
||||
});
|
||||
})
|
||||
},
|
||||
doAdd() {
|
||||
this.$refs["form"].validate(async (valid) => {
|
||||
if (valid) {
|
||||
this.loading = true
|
||||
const resp = await $.post(loc() + "/doAdd", this.formData)
|
||||
requestLaterMsgFun(this, resp, () => {
|
||||
this.loadTree(false)
|
||||
this.pageData();
|
||||
}, null, () => {
|
||||
this.loading = false
|
||||
this.$refs.guava.index()
|
||||
})
|
||||
}
|
||||
});
|
||||
},
|
||||
openAdd() {
|
||||
const {id, unitlevel} = this.checkData
|
||||
this.formData = {
|
||||
parentId: id,
|
||||
unitlevel: unitlevel + 1
|
||||
}
|
||||
this.$refs.guava.edit()
|
||||
if (this.$refs['form']) {
|
||||
this.$refs['form'].resetFields()
|
||||
}
|
||||
},
|
||||
doSearch() {
|
||||
this.tabKey = new Date().getTime()
|
||||
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
|
||||
this.tabLoading = true
|
||||
this.pageForm.parentId = this.checkData.id
|
||||
$.post(base + "/platform/sys/unit/pageData", this.pageForm, (data) => {
|
||||
sublime.closeLoadingbar();//关闭loading
|
||||
this.tabLoading = false
|
||||
if (data.code == 0) {
|
||||
this.tableData = data.data.list;
|
||||
this.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
this.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
async loadTree(flush) {
|
||||
this.treeLoading = true
|
||||
const {code, data, msg} = await $.get("/platform/sys/unit/getUnitTreeData")
|
||||
this.treeLoading = false
|
||||
if (code == 0) {
|
||||
this.treeData = data
|
||||
} else {
|
||||
this.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
|
||||
if (flush && code == 0) {
|
||||
this.checkData = data[0]
|
||||
this.pageData();
|
||||
}
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
this.loadTree(true)
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,331 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.el-tabs__content {
|
||||
padding-top: 20px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava" padding="0 5%">
|
||||
<template>
|
||||
|
||||
<el-card shadow="never">
|
||||
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-date-picker
|
||||
style="width: 150px"
|
||||
v-model="pageForm.importDate"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
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: 100px;">
|
||||
<el-option label="姓名" value="username"></el-option>
|
||||
<el-option label="工号" value="loginname"></el-option>
|
||||
</el-select>
|
||||
</el-input>
|
||||
</div>
|
||||
|
||||
<el-row class="btn-group tool-button mt5">
|
||||
<el-select placeholder="所属单位" v-model="pageForm.unitId" style="width: 200px;" clearable="true"
|
||||
filterable="true">
|
||||
<el-option v-for="item in units" :label="item.name" :value="item.id"></el-option>
|
||||
</el-select>
|
||||
</el-row>
|
||||
|
||||
<div class="btn-group tool-button mt5">
|
||||
<dict-select v-model="pageForm.personType" style="width: 200px" clearable placeholder="人员类型"
|
||||
code="UserType"></dict-select>
|
||||
</div>
|
||||
|
||||
<div class="btn-group tool-button mt5">
|
||||
<dict-select v-model="pageForm.userState" style="width: 200px" clearable placeholder="在职状态"
|
||||
code="UserState"></dict-select>
|
||||
</div>
|
||||
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-button type="primary" icon="el-icon-search" @click="doSearch"></el-button>
|
||||
</div>
|
||||
|
||||
<div class="pull-right offscreen-right mt5">
|
||||
<div class="btn-group tool-button" v-show="!selection.length">
|
||||
<el-button icon="el-icon-delete" type="danger" @click="openDeleteUser">删除
|
||||
</el-button>
|
||||
</div>
|
||||
<div class="btn-group tool-button" v-show="selection.length">
|
||||
<el-button icon="el-icon-delete" type="danger" :loading="delLoading" @click="doDeleteUsers">删除
|
||||
</el-button>
|
||||
</div>
|
||||
<div class="btn-group tool-button">
|
||||
<el-dropdown @command="handleCommand">
|
||||
<el-button type="primary" :loading="pullLoading">
|
||||
拉取<i class="el-icon-arrow-down el-icon--right"></i>
|
||||
</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item command="total">全量拉取</el-dropdown-item>
|
||||
<el-dropdown-item command="increment">增量拉取</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt20">
|
||||
<el-table :data="tableData" style="width: 100%" row-key="id" @sort-change="pageOrder"
|
||||
v-loading="tableLoading" ref="table" @selection-change="handleSelectionChange">
|
||||
|
||||
<el-table-column :reserve-selection="true"
|
||||
type="selection"
|
||||
width="30">
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" header-align="center" type="index" :index="indexMethod" label="序号"
|
||||
width="70px"></el-table-column>
|
||||
|
||||
<el-table-column label="工号" prop="loginname" header-align="center"
|
||||
align="center" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="姓名" prop="username" header-align="center"
|
||||
align="center" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="性别" prop="sex" header-align="center"
|
||||
align="center" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="联系电话" prop="mobile" header-align="center"
|
||||
align="center" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="出生日期" prop="birthday" header-align="center"
|
||||
align="center" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="身份证" prop="idcard" header-align="center"
|
||||
align="center" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="人员类型" prop="personType" header-align="center" sortable
|
||||
align="center" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="在职状态" prop="userState" header-align="center" sortable
|
||||
align="center" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="所属单位" prop="unitid" header-align="center"
|
||||
align="center" show-overflow-tooltip sortable>
|
||||
<template scope="{row}">
|
||||
<span v-if="row.unitid"> {{row.unitname}}({{row.unitid}})</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="拉取时间" prop="pullTime" min-width="100px" header-align="center" sortable
|
||||
align="center" show-overflow-tooltip></el-table-column>
|
||||
|
||||
<el-table-column prop="userOnline" align="center" header-align="center" label="操作"
|
||||
min-width="80px">
|
||||
<template scope="scope">
|
||||
<el-dropdown @command="dropdownCommand">
|
||||
<el-button plain size="mini">
|
||||
<i class="ti-settings"></i>
|
||||
<span class="ti-angle-down"></span>
|
||||
</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item :command="{type:'view',data:scope.row}">
|
||||
查看
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'delete',data:scope.row}">
|
||||
删除
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
|
||||
|
||||
|
||||
</template>
|
||||
|
||||
|
||||
<template #view>
|
||||
|
||||
<el-tabs v-model="active">
|
||||
<el-tab-pane label="个人信息" name="info">
|
||||
<member ref="memberInfo" source="user_source" :id="userId" view></member>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
|
||||
</template>
|
||||
</guava>
|
||||
<el-dialog
|
||||
title="选择数据源"
|
||||
:visible.sync="dialogVisible"
|
||||
width="30%">
|
||||
<el-radio-group class="checkGroup" v-model="sourceTime" style="width: 100%">
|
||||
<el-row v-for="item in latelyDeleteTimes" style="margin-bottom: 10px">
|
||||
<el-radio :key="item.pullTime" style="width: 100%"
|
||||
:label="item.pullTime" border>
|
||||
时间:{{item.pullTime}}<span
|
||||
style="float: right;color: #F56C6C">rows: {{item.num}}</span>
|
||||
</el-radio>
|
||||
</el-row>
|
||||
</el-radio-group>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" :loading="deleteLoading" @click="doDeleteUser">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
dialogVisible: false,
|
||||
deleteLoading: false,
|
||||
sourceTime: "",
|
||||
active: 'info',
|
||||
pullLoading: false,
|
||||
pageForm: {
|
||||
searchName: "username",
|
||||
},
|
||||
latelyDeleteTimes: [],
|
||||
userId: "",
|
||||
unions: [],
|
||||
units: [],
|
||||
active: 'info',
|
||||
delLoading: false,
|
||||
selection: [],
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'member': httpVueLoader('/components/member/MemberInfo.vue?v=1.0.3'),
|
||||
'dict-select': httpVueLoader('/components/plugins/DictSelect.vue?v=1.0.0'),
|
||||
'mem-change-records': httpVueLoader('/components/member/MemChangeRecords.vue?v=1.0.2'),
|
||||
},
|
||||
methods: {
|
||||
doDeleteUser() {
|
||||
if (!this.sourceTime) {
|
||||
this.$notify({
|
||||
title: '警告',
|
||||
message: '请选择数据源',
|
||||
type: 'warning'
|
||||
});
|
||||
return
|
||||
}
|
||||
this.$confirm('是否确定删除用户数据?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(async () => {
|
||||
this.deleteLoading = true
|
||||
const resp = await $.post(loc() + '/deleteUser', {sourceTime: this.sourceTime})
|
||||
this.$notify({
|
||||
title: '成功',
|
||||
message: '已删除',
|
||||
type: 'success'
|
||||
});
|
||||
location.reload();
|
||||
|
||||
})
|
||||
|
||||
|
||||
},
|
||||
async getLatelyUpdateTimes() {
|
||||
const resp = await $.get("/platform/data/user/update/latelyUpdateTimes")
|
||||
requestLaterFun(resp, (data) => {
|
||||
this.latelyDeleteTimes = data
|
||||
})
|
||||
},
|
||||
openDeleteUser() {
|
||||
if (!this.latelyDeleteTimes.length) {
|
||||
this.$notify({
|
||||
title: '警告',
|
||||
message: '没有可供更新的数据源',
|
||||
type: 'warning'
|
||||
});
|
||||
return
|
||||
}
|
||||
this.sourceTime = ''
|
||||
this.dialogVisible = true
|
||||
},
|
||||
handleCommand(command) {
|
||||
this.pull(command === 'increment')
|
||||
},
|
||||
async doDeleteUsers() {
|
||||
this.$confirm('确定要删除吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(async () => {
|
||||
this.delLoading = true
|
||||
const resp = await $.post(loc() + "/delete", {ids: JSON.stringify(this.selection.map(v => v.id))})
|
||||
requestLaterMsgFun(this, resp, async () => {
|
||||
this.$refs.table.clearSelection();
|
||||
this.doSearch()
|
||||
}, null, () => {
|
||||
this.delLoading = false
|
||||
})
|
||||
})
|
||||
},
|
||||
handleSelectionChange(val) {
|
||||
this.selection = val;
|
||||
},
|
||||
pull(isIncrement) {
|
||||
this.$confirm('确定要从数据中心拉取数据吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(async () => {
|
||||
this.pullLoading = true
|
||||
const resp = await $.post(loc() + '/pull', {isIncrement})
|
||||
requestLaterMsgFun(this, resp, () => {
|
||||
this.pageData()
|
||||
}, null, () => {
|
||||
this.pullLoading = false
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
doDelete(userId) {
|
||||
this.$confirm('确定要删除吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: async (a, b) => {
|
||||
if ("confirm" == a) {//确认后再执行
|
||||
const resp = await $.post(loc() + "/delete", {ids: JSON.stringify([userId])});
|
||||
|
||||
requestLaterMsgFun(this, resp, async () => {
|
||||
this.pageData()
|
||||
})
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
openView(userId) {
|
||||
this.active = 'info'
|
||||
this.userId = userId
|
||||
this.$refs.guava.view()
|
||||
},
|
||||
dropdownCommand(command) {
|
||||
const {type, data} = command
|
||||
if (type == 'view') {
|
||||
this.openView(data.id)
|
||||
} else if (type == 'delete') {
|
||||
this.doDelete(data.id)
|
||||
}
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
this.pageData();
|
||||
this.units = await getUnits()
|
||||
await this.getLatelyUpdateTimes()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,355 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.query-row {
|
||||
height: 60px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.query-row:not(:last-child) {
|
||||
border-bottom: 1px dashed rgb(230, 230, 230);
|
||||
}
|
||||
|
||||
/*.query-row:not(:last-child,:first-child) {*/
|
||||
/* height: 70px;*/
|
||||
/*}*/
|
||||
|
||||
.query-row-title {
|
||||
width: 100px;
|
||||
}
|
||||
|
||||
.el-table__header-wrapper th {
|
||||
padding: 5px 0 !important;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava" padding="0 5%">
|
||||
<template>
|
||||
<el-card shadow="never" style="margin-bottom: 5px;padding: 0px 10px;padding-bottom: 5px">
|
||||
|
||||
<el-row type="flex" align="middle" class="query-row">
|
||||
<el-col class="query-row-title">基础查询:</el-col>
|
||||
<el-col class="query-row-content">
|
||||
<div class="btn-group tool-button">
|
||||
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword"
|
||||
@keyup.enter.native="doSearch">
|
||||
<el-select v-model="pageForm.searchName" slot="prepend" placeholder="查询类型"
|
||||
style="width: 100px;">
|
||||
<el-option label="姓名" value="u.username"></el-option>
|
||||
<el-option label="工号" value="u.loginname"></el-option>
|
||||
</el-select>
|
||||
</el-input>
|
||||
</div>
|
||||
|
||||
<el-row class="btn-group tool-button">
|
||||
<el-select placeholder="所属单位" v-model="pageForm.unitId" style="width: 200px;"
|
||||
clearable="true"
|
||||
filterable="true">
|
||||
<el-option v-for="item in units" :label="item.name" :value="item.id"></el-option>
|
||||
</el-select>
|
||||
</el-row>
|
||||
|
||||
<div class="btn-group tool-button">
|
||||
<dict-select v-model="pageForm.personType" style="width: 200px" clearable placeholder="人员类型"
|
||||
code="UserType"></dict-select>
|
||||
</div>
|
||||
|
||||
<div class="btn-group tool-button">
|
||||
<dict-select v-model="pageForm.userState" style="width: 200px" clearable placeholder="在职状态"
|
||||
code="UserState"></dict-select>
|
||||
</div>
|
||||
<div class="btn-group tool-button">
|
||||
<el-button type="primary" icon="el-icon-search" @click="doSearch"></el-button>
|
||||
</div>
|
||||
<div class="pull-right offscreen-right">
|
||||
<div class="btn-group tool-button">
|
||||
<el-button :loading="updateBirthdayLoading" @click="updateBirthday"
|
||||
icon="el-icon-refresh"
|
||||
slot="reference" type="primary">
|
||||
根据身份证号设置出生日期
|
||||
</el-button>
|
||||
<el-button slot="reference" icon="el-icon-refresh" type="primary"
|
||||
@click="checkSource" :loading="updateLoading">
|
||||
更新
|
||||
</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row type="flex" align="middle" class="query-row">
|
||||
<el-col class="query-row-title">异动查询:</el-col>
|
||||
<el-col class="query-row-content">
|
||||
<div class="btn-group tool-button">
|
||||
<el-date-picker
|
||||
style="width: 200px"
|
||||
v-model="pageForm.changeDate"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="更新日期">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
<div class="btn-group tool-button">
|
||||
<enum-select v-model="pageForm.changeType" value="code" label="description"
|
||||
style="width: 200px"
|
||||
clearable placeholder="异动类型" enum="UserChangeType"></enum-select>
|
||||
</div>
|
||||
<div class="btn-group tool-button">
|
||||
<el-button type="primary" icon="el-icon-search" @click="doSearch"></el-button>
|
||||
</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never">
|
||||
<el-table :data="tableData" style="width: 100%" row-key="id" @sort-change="pageOrder" :key="tableKey"
|
||||
v-loading="tableLoading"
|
||||
lazy
|
||||
:load="load"
|
||||
:tree-props="{hasChildren: 'hasHis'}"
|
||||
border
|
||||
>
|
||||
<el-table-column align="center" header-align="center" type="index" :index="indexMethod" label="序号"
|
||||
width="80px"></el-table-column>
|
||||
|
||||
<el-table-column label="工号" prop="loginname" header-align="center"
|
||||
align="center" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="姓名" prop="username" header-align="center"
|
||||
align="center" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="性别" prop="sex" header-align="center"
|
||||
align="center" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="联系电话" prop="mobile" header-align="center"
|
||||
align="center" show-overflow-tooltip></el-table-column>
|
||||
<!-- <el-table-column label="出生日期" prop="birthday" header-align="center"-->
|
||||
<!-- align="center" show-overflow-tooltip></el-table-column>-->
|
||||
<!-- <el-table-column label="身份证" prop="idcard" header-align="center"-->
|
||||
<!-- align="center" show-overflow-tooltip></el-table-column>-->
|
||||
<el-table-column label="人员类型" prop="personType" header-align="center" sortable
|
||||
align="center" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="在职状态" prop="userState" header-align="center" sortable
|
||||
align="center" show-overflow-tooltip></el-table-column>
|
||||
|
||||
<el-table-column label="所属单位" prop="unitid" header-align="center"
|
||||
align="center" show-overflow-tooltip sortable>
|
||||
<template scope="{row}">
|
||||
<span v-if="row.unitid"> {{row.unitname}}({{row.unitid}})</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="异动信息" header-align="center">
|
||||
<el-table-column label="更新时间" prop="changeTime" min-width="100px" header-align="center" sortable
|
||||
align="center" show-overflow-tooltip>
|
||||
<!-- <template scope="{row:{changeTime}}">
|
||||
{{changeTime?changeTime:'暂无'}}
|
||||
</template>-->
|
||||
</el-table-column>
|
||||
<el-table-column label="异动类型" prop="changeType" header-align="center"
|
||||
align="center" show-overflow-tooltip sortable>
|
||||
<template scope="{row}">
|
||||
<span style="color: #0e78c5">{{changeType[row.changeType]}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column prop="userOnline" align="center" header-align="center" label="操作"
|
||||
min-width="80px">
|
||||
<template scope="scope">
|
||||
<el-dropdown @command="dropdownCommand">
|
||||
<el-button plain size="mini">
|
||||
<i class="ti-settings"></i>
|
||||
<span class="ti-angle-down"></span>
|
||||
</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item :command="{type:'view',data:scope.row}">
|
||||
查看
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
|
||||
|
||||
</template>
|
||||
|
||||
|
||||
<template #view>
|
||||
|
||||
<el-tabs v-model="active">
|
||||
<el-tab-pane label="个人信息" name="info">
|
||||
<member ref="memberInfo" :source="source" :id="userId" view></member>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
<el-dialog
|
||||
title="选择数据源"
|
||||
:visible.sync="dialogVisible"
|
||||
width="30%">
|
||||
|
||||
|
||||
<el-radio-group class="checkGroup" v-model="sourceTime" style="width: 100%">
|
||||
<el-row v-for="item in latelyUpdateTimes" style="margin-bottom: 10px">
|
||||
<el-radio :key="item.pullTime" style="width: 100%"
|
||||
:label="item.pullTime" border>
|
||||
时间:{{item.pullTime}}<span
|
||||
style="float: right;color: #F56C6C">rows: {{item.num}}</span>
|
||||
</el-radio>
|
||||
</el-row>
|
||||
</el-radio-group>
|
||||
|
||||
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" :loading="updateLoading" @click="doUpdate">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
active: 'info',
|
||||
updateLoading: false,
|
||||
updateBirthdayLoading: false,
|
||||
pageForm: {
|
||||
searchName: "u.username",
|
||||
},
|
||||
|
||||
userId: "",
|
||||
unions: [],
|
||||
units: [],
|
||||
active: 'info',
|
||||
|
||||
latelyUpdateTimes: [],
|
||||
dialogVisible: false,
|
||||
sourceTime: "",
|
||||
changeType: {},
|
||||
source: 'sys_user'
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'member': httpVueLoader('/components/member/MemberInfo.vue?v=1.0.3'),
|
||||
'dict-select': httpVueLoader('/components/plugins/DictSelect.vue?v=1.0.0'),
|
||||
'mem-change-records': httpVueLoader('/components/member/MemChangeRecords.vue?v=1.0.2'),
|
||||
'enum-select': httpVueLoader('/components/plugins/EnumSelect.vue?v=1.0.0'),
|
||||
},
|
||||
methods: {
|
||||
async updateBirthday() {
|
||||
const confirm = await this.$confirm('是否确定根据身份证号更新出生日期?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm === "confirm") {
|
||||
this.updateBirthdayLoading = true
|
||||
const resp = await $.post(loc() + '/updateBirthday')
|
||||
this.updateBirthdayLoading = false
|
||||
}
|
||||
},
|
||||
async load(tree, treeNode, resolve) {
|
||||
const {loginname} = tree
|
||||
const resp = await $.get(loc() + "/historyUsers", {loginname})
|
||||
requestLaterFun(resp, (data) => {
|
||||
resolve(data)
|
||||
}, () => {
|
||||
resolve([])
|
||||
})
|
||||
},
|
||||
checkSource() {
|
||||
// if (!this.latelyUpdateTimes.length) {
|
||||
// this.$notify({
|
||||
// title: '警告',
|
||||
// message: '没有可供更新的数据源',
|
||||
// type: 'warning'
|
||||
// });
|
||||
// return
|
||||
// }
|
||||
// this.sourceTime = ''
|
||||
// this.dialogVisible = true
|
||||
this.doUpdate()
|
||||
},
|
||||
doUpdate() {
|
||||
// if (!this.sourceTime) {
|
||||
// this.$notify({
|
||||
// title: '警告',
|
||||
// message: '请选择数据源',
|
||||
// type: 'warning'
|
||||
// });
|
||||
// return
|
||||
// }
|
||||
|
||||
this.$confirm('是否确定更新用户数据?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(async () => {
|
||||
this.updateLoading = true
|
||||
const resp = await $.post(loc() + '/update', {sourceTime: this.sourceTime})
|
||||
requestLaterMsgFun(this, resp, () => {
|
||||
this.tableKey = new Date().getTime()
|
||||
this.pageData()
|
||||
this.dialogVisible = false
|
||||
}, null, () => {
|
||||
this.updateLoading = false
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
openView({id, flag}) {
|
||||
this.active = 'info'
|
||||
this.userId = id
|
||||
this.source = flag ? 'sys_user' : 'user_history'
|
||||
this.$refs.guava.view()
|
||||
},
|
||||
dropdownCommand(command) {
|
||||
const {type, data} = command
|
||||
if (type == 'view') {
|
||||
this.openView(data)
|
||||
}
|
||||
},
|
||||
|
||||
async getLatelyUpdateTimes() {
|
||||
const resp = await $.get(loc() + "/latelyUpdateTimes")
|
||||
requestLaterFun(resp, (data) => {
|
||||
this.latelyUpdateTimes = data
|
||||
})
|
||||
},
|
||||
|
||||
async getChangeType() {
|
||||
const changeType = {}
|
||||
const changeTypeOptions = await getEnumOptions("UserChangeType")
|
||||
changeTypeOptions.forEach(v => {
|
||||
changeType[v.code] = v.description
|
||||
})
|
||||
return changeType
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
this.pageData();
|
||||
this.units = await getUnits()
|
||||
this.getLatelyUpdateTimes()
|
||||
|
||||
this.changeType = await this.getChangeType()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,153 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<guava >
|
||||
<transition name="el-zoom-in-center">
|
||||
<div class="transition-item">
|
||||
<el-card shadow="never">
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-date-picker
|
||||
@change="khSearch"
|
||||
:picker-options="pickerOptions"
|
||||
v-model="pageForm.annual"
|
||||
type="year"
|
||||
value-format="yyyy"
|
||||
placeholder="选择年度">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-select v-model="pageForm.khid"
|
||||
placeholder="请选择考核">
|
||||
<el-option
|
||||
v-for="item in kh"
|
||||
:key="item.id"
|
||||
:label="item.assessment"
|
||||
: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-card>
|
||||
<el-card shadow="never" class="mt20">
|
||||
<el-table :data="tableData" style="width: 100%" row-key="id"
|
||||
v-loading="tabLoading">
|
||||
<el-table-column align="center" header-align="center" label="序号" width="100px">
|
||||
<template scope="scope">
|
||||
<span>{{scope.$index+(pageForm.pageNumber - 1) * pageForm.pageSize + 1}} </span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="年度" prop="annual" header-align="center" width="300px"
|
||||
align="center">
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="分工会名称" prop="unionname" header-align="center" show-overflow-tooltip
|
||||
align="center" sortable></el-table-column>
|
||||
<el-table-column label="最终考核得分" prop="xgh_score" header-align="center" show-overflow-tooltip
|
||||
align="center" sortable></el-table-column>
|
||||
<!-- <el-table-column label="名次" prop="Ranking" header-align="center" show-overflow-tooltip-->
|
||||
<!-- align="center"></el-table-column>-->
|
||||
</el-table>
|
||||
|
||||
<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"
|
||||
:total="pageForm.totalCount">
|
||||
</el-pagination>
|
||||
</el-row>
|
||||
|
||||
</el-card>
|
||||
|
||||
|
||||
</div>
|
||||
</transition>
|
||||
</guava>
|
||||
|
||||
</div>
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
data() {
|
||||
return {
|
||||
tabLoading: false,
|
||||
tableData: [],
|
||||
kh: [],
|
||||
pageForm: {
|
||||
khid: "",
|
||||
annual: "",
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
},
|
||||
pickerOptions: {
|
||||
disabledDate(time) {
|
||||
return (
|
||||
time.getFullYear() > new Date().getFullYear()
|
||||
);
|
||||
}
|
||||
},
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async getKh() {
|
||||
await $.get("/platform/ghkh/khph/getKh", {"annual": this.pageForm.annual}).then(res => {
|
||||
if (res.data.length != 0) {
|
||||
this.kh = res.data
|
||||
this.pageForm.khid = this.kh[0].id
|
||||
} else {
|
||||
this.kh = []
|
||||
this.pageForm.khid = ""
|
||||
}
|
||||
})
|
||||
},
|
||||
async khSearch() {
|
||||
await this.getKh()
|
||||
},
|
||||
pageData() {
|
||||
sublime.showLoadingbar();
|
||||
$.post(base + "/platform/ghkh/khph/pageData", this.pageForm, (data) => {
|
||||
sublime.closeLoadingbar();
|
||||
this.tabLoading = false
|
||||
if (data.code == 0) {
|
||||
this.tableData = data.data.list;
|
||||
this.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
this.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
this.tabLoading = true
|
||||
},
|
||||
doSearch() {
|
||||
this.pageData();
|
||||
},
|
||||
pageNumberChange(val) {//页码更新操作
|
||||
this.pageForm.pageNumber = val;
|
||||
this.pageData();
|
||||
},
|
||||
pageSizeChange(val) {//分页大小更新操作
|
||||
this.pageForm.pageSize = val;
|
||||
this.pageData();
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.pageForm.annual = new Date().getFullYear() + ""
|
||||
await this.getKh()
|
||||
this.pageData();
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,276 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
#app {
|
||||
overflow-y: unset !important;
|
||||
}
|
||||
|
||||
</style>
|
||||
<div id="app" v-cloak>
|
||||
<guava>
|
||||
|
||||
|
||||
<el-row class="transition-row">
|
||||
<transition name="el-zoom-in-center">
|
||||
<div v-show="v=='index'" class="transition-item">
|
||||
<el-card shadow="never">
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-date-picker
|
||||
@change="khSearch"
|
||||
:picker-options="pickerOptions"
|
||||
v-model="pageForm.annual"
|
||||
type="year"
|
||||
value-format="yyyy"
|
||||
placeholder="选择年度">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-input v-model="pageForm.assessment" placeholder="根据考核名称关键字查询"></el-input>
|
||||
</div>
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-button type="primary" icon="el-icon-search" @click="doSearch"></el-button>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt20">
|
||||
<el-table :data="tableData" style="width: 100%" row-key="id"
|
||||
v-loading="tabLoading">
|
||||
<el-table-column align="center" header-align="center" label="序号" width="100px">
|
||||
<template scope="scope">
|
||||
<span>{{scope.$index+(pageForm.pageNumber - 1) * pageForm.pageSize + 1}} </span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="年度" prop="annual" header-align="center" width="300px" sortable
|
||||
align="center">
|
||||
<template scope="scope">
|
||||
{{scope.row.annual}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="考核名称" prop="assessment" header-align="center" show-overflow-tooltip
|
||||
align="center"></el-table-column>
|
||||
|
||||
|
||||
<el-table-column align="center" header-align="center" label="操作" fixed="right"
|
||||
width="250px">
|
||||
<template scope="scope">
|
||||
<el-button size="mini" @click="openView(scope.row.id)">查看</el-button>
|
||||
<el-button size="mini" type="primary" @click="openEdit(scope.row.id)">编辑</el-button>
|
||||
<el-button size="mini" type="danger" @click="doDelete(scope.row.id)">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<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"
|
||||
:total="pageForm.totalCount">
|
||||
</el-pagination>
|
||||
</el-row>
|
||||
</el-card>
|
||||
|
||||
|
||||
</div>
|
||||
</transition>
|
||||
|
||||
<transition name="el-zoom-in-center">
|
||||
<div v-show="v=='edit'" class="transition-item">
|
||||
<el-row class="header navbar bg-white shadow">
|
||||
<el-button icon="el-icon-back" type="text" @click="v='index'" style="font-size: 18px">返回
|
||||
</el-button>
|
||||
<el-button type="primary" style="float: right;margin-top: 5px" @click="doEdit()">提交</el-button>
|
||||
</el-row>
|
||||
|
||||
<div style="padding: 50px 100px;max-height: calc(100vh - 100px);overflow-y: auto">
|
||||
<kh-zb :data="formData" @change="v=>{this.formData=v}"></kh-zb>
|
||||
</div>
|
||||
</div>
|
||||
</transition>
|
||||
|
||||
|
||||
<transition name="el-zoom-in-center">
|
||||
<div v-show="v=='view'" class="transition-item">
|
||||
<!-- <el-card class="box-card v-box" shadow="never">-->
|
||||
<el-row class="header navbar bg-white shadow">
|
||||
<el-button icon="el-icon-back" type="text" @click="v='index'" style="font-size: 18px">返回
|
||||
</el-button>
|
||||
</el-row>
|
||||
<!-- <div slot="header" class="clearfix">-->
|
||||
|
||||
<!-- </div>-->
|
||||
<div style="padding: 50px 100px;max-height: calc(100vh - 100px);overflow-y: auto">
|
||||
|
||||
<kh-zb :data="viewData" :is_view="true"></kh-zb>
|
||||
</div>
|
||||
<!-- </el-card>-->
|
||||
</div>
|
||||
</transition>
|
||||
|
||||
|
||||
</el-row>
|
||||
</guava>
|
||||
</div>
|
||||
<script>
|
||||
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
data() {
|
||||
|
||||
return {
|
||||
v: 'index',
|
||||
tabLoading: false,
|
||||
loading: true,
|
||||
activeName: '1',
|
||||
tableData: [],
|
||||
formData: {},
|
||||
viewData: {
|
||||
nrs: [{
|
||||
bzs: [{}]
|
||||
}],
|
||||
},
|
||||
pageForm: {
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
},
|
||||
pickerOptions: {
|
||||
disabledDate(time) {
|
||||
return (
|
||||
time.getFullYear() > new Date().getFullYear()
|
||||
);
|
||||
}
|
||||
},
|
||||
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'kh-zb': httpVueLoader('/components/kh/KhZb.vue')
|
||||
},
|
||||
methods: {
|
||||
async getKh() {
|
||||
await $.get("/platform/ghkh/khph/getKh", {"annual": this.pageForm.annual}).then(res => {
|
||||
if (res.data.length != 0) {
|
||||
this.kh = res.data
|
||||
this.pageForm.khid = this.kh[0].id
|
||||
} else {
|
||||
this.kh = []
|
||||
this.pageForm.khid = ""
|
||||
}
|
||||
})
|
||||
},
|
||||
async khSearch() {
|
||||
await this.getKh()
|
||||
},
|
||||
pageData() {
|
||||
sublime.showLoadingbar();
|
||||
this.tabLoading = true
|
||||
$.post(base + "/platform/ghkh/khzb/pageData", this.pageForm, (data) => {
|
||||
sublime.closeLoadingbar();
|
||||
this.tabLoading = false
|
||||
if (data.code == 0) {
|
||||
this.tableData = data.data.list;
|
||||
this.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
this.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
doSearch() {
|
||||
this.pageForm.pageNumber = 1
|
||||
this.pageData();
|
||||
},
|
||||
async openEdit(id) {
|
||||
const {code, data, msg} = await $.get('/platform/ghkh/khzb/edit', {id})
|
||||
if (code == 0) {
|
||||
this.formData = data
|
||||
this.v = 'edit'
|
||||
}
|
||||
},
|
||||
doEdit() {
|
||||
$.post(base + "/platform/ghkh/khzb/doEdit", {kh_zb: JSON.stringify(this.formData)}, (res) => {
|
||||
const {code, data, msg} = res
|
||||
if (code == 0) {
|
||||
this.$message({
|
||||
message: msg,
|
||||
type: 'success'
|
||||
});
|
||||
} else {
|
||||
this.$message({
|
||||
message: msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
this.v = 'index'
|
||||
this.pageData()
|
||||
},
|
||||
)
|
||||
},
|
||||
doDelete(id) {
|
||||
this.$confirm('您确定要删除吗!', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: (a, b) => {
|
||||
if ("confirm" == a) {//确认后再执行
|
||||
$.post(base + "/platform/ghkh/khzb/delete", {id: id}, (data) => {
|
||||
if (data.code == 0) {
|
||||
this.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
this.pageData();
|
||||
} else {
|
||||
this.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
index() {
|
||||
this.v = "index"
|
||||
},
|
||||
async openView(id) {
|
||||
this.v = 'view'
|
||||
this.loading = true;
|
||||
const {code, data, msg} = await $.get('/platform/ghkh/khzb/edit', {id})
|
||||
if (code == 0) {
|
||||
this.viewData = data
|
||||
console.log(this.viewData)
|
||||
}
|
||||
this.loading = false;
|
||||
},
|
||||
pageNumberChange(val) {//页码更新操作
|
||||
this.pageForm.pageNumber = val;
|
||||
this.pageData();
|
||||
},
|
||||
pageSizeChange(val) {//分页大小更新操作
|
||||
this.pageForm.pageSize = val;
|
||||
this.pageData();
|
||||
},
|
||||
|
||||
},
|
||||
|
||||
async created() {
|
||||
this.pageData();
|
||||
}
|
||||
|
||||
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,381 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<el-row class="transition-row">
|
||||
|
||||
<transition name="el-zoom-in-center">
|
||||
<div v-show="v=='index'" class="transition-item">
|
||||
<el-card shadow="never">
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-date-picker
|
||||
@change="khSearch"
|
||||
:picker-options="pickerOptions"
|
||||
v-model="pageForm.annual"
|
||||
type="year"
|
||||
value-format="yyyy"
|
||||
placeholder="选择年度">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-select placeholder="所属工会" v-model="pageForm.unionId" style="width: 100%;"
|
||||
clearable="true"
|
||||
@change="flushUnits" @clear="flushUnits"
|
||||
|
||||
v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('H03')}"
|
||||
|
||||
filterable="true">
|
||||
<el-option v-for="item in unions" :label="item.unionname" :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-card>
|
||||
|
||||
<el-card shadow="never" class="mt20">
|
||||
<el-table :data="tableData" style="width: 100%" row-key="id"
|
||||
v-loading="tabLoading">
|
||||
<el-table-column align="center" header-align="center" label="序号" width="100px">
|
||||
<template scope="scope">
|
||||
<span>{{scope.$index+(pageForm.pageNumber - 1) * pageForm.pageSize + 1}} </span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="年度" prop="annual" header-align="center" width="300px" sortable
|
||||
align="center">
|
||||
<template scope="scope">
|
||||
{{scope.row.annual}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="考核名称" prop="assessment" header-align="center" show-overflow-tooltip
|
||||
align="center"></el-table-column>
|
||||
|
||||
<el-table-column label="院级工会名称" prop="unionname" header-align="center" show-overflow-tooltip
|
||||
align="center">
|
||||
<template scope="{row}">
|
||||
({{row.unioncode}}){{row.unionname}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="标准总分" prop="bzf" header-align="center" show-overflow-tooltip
|
||||
align="center"></el-table-column>
|
||||
<el-table-column label="自评得分" prop="zp_score" header-align="center" show-overflow-tooltip
|
||||
align="center"></el-table-column>
|
||||
<el-table-column label="校工会得分" prop="xgh_score" header-align="center" show-overflow-tooltip
|
||||
align="center"></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="操作" fixed="right" width="250px">
|
||||
<template scope="scope">
|
||||
<el-button size="mini" @click="openView(scope.row)">查看</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<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"
|
||||
:total="pageForm.totalCount">
|
||||
</el-pagination>
|
||||
</el-row>
|
||||
</el-card>
|
||||
|
||||
|
||||
</div>
|
||||
</transition>
|
||||
|
||||
<transition name="el-zoom-in-center">
|
||||
<div v-show="v=='edit'" class="transition-item">
|
||||
<el-row class="header navbar bg-white shadow">
|
||||
|
||||
<el-button icon="el-icon-back" type="text" @click="v='index'" style="font-size: 18px">返回
|
||||
</el-button>
|
||||
|
||||
</el-row>
|
||||
|
||||
<el-form :model="formData" ref="form" label-width="100px"
|
||||
style="height: calc(100vh - 50px);overflow-y: scroll;padding: 10px 15px">
|
||||
<vi-title title="指标信息"></vi-title>
|
||||
<el-row gutter="20">
|
||||
<el-col :span="8">
|
||||
<el-form-item prop="annual" label="年  度">
|
||||
<el-date-picker
|
||||
readonly
|
||||
v-model="formData.annual"
|
||||
type="year"
|
||||
value-format="yyyy"
|
||||
placeholder="选择年度">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item prop="flatname" label="分工会名称">
|
||||
<el-input maxlength="30" value="" readonly v-model="formData.flatname"
|
||||
placeholder="请填写分工会名称"
|
||||
type="text"></el-input>
|
||||
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item prop="assessment" label="考核名称">
|
||||
<el-input maxlength="30" readonly v-model="formData.assessment" placeholder="请填写考核名称"
|
||||
type="text"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<vi-title title="考核内容"></vi-title>
|
||||
|
||||
|
||||
<el-form-item label="" label-width="0" v-for="nr,idx in formData.nrs">
|
||||
|
||||
<el-row type="flex" align="middle" justify="space-between">
|
||||
<el-input v-model="nr.content" readonly maxlength="30" style="width: 50%"
|
||||
placeholder="请填写考核内容">
|
||||
<template slot="prepend"><span>{{ idx + 1 }}</span></template>
|
||||
</el-input>
|
||||
</el-row>
|
||||
|
||||
|
||||
<el-row style="margin-top: 20px">
|
||||
<el-table :data="nr.bzs" style="width: 100%" border show-summary
|
||||
:summary-method="getSummaries">
|
||||
<el-table-column align="center" header-align="center" label="序号" type="index">
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="考核标准" disabled prop="inspection" header-align="center"
|
||||
align="center">
|
||||
<template scope="{row}">
|
||||
<el-input v-model="row.inspection"
|
||||
readonly placeholder="请填写考核标准"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="标准分" prop="score" header-align="center" align="center"
|
||||
width="150px">
|
||||
<template scope="{row}">
|
||||
<el-input v-model.number="row.score" readonly maxlength="4"
|
||||
placeholder="请填写标准分"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="自评得分" prop="zpf" header-align="center" align="center"
|
||||
width="150px">
|
||||
<template scope="{row}">
|
||||
<el-input v-if="row.zpf" v-model.number="row.zpf" maxlength="4"
|
||||
readonly placeholder="请填写自评分"></el-input>
|
||||
|
||||
<el-input v-else value="暂无" maxlength="4"
|
||||
readonly></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="校工会评分" prop="schools" header-align="center" align="center"
|
||||
width="150px">
|
||||
<template scope="{row}">
|
||||
<el-input v-model.number="row.schools" readonly maxlength="4"
|
||||
placeholder="请填写评分"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="加、减原因" prop="addition" header-align="center" align="center"
|
||||
width="250px">
|
||||
<template scope="{row}">
|
||||
<el-input v-model.number="row.addition" readonly maxlength="50"
|
||||
placeholder="请填写加、减原因"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="有关佐证材料" header-align="center" align="center"
|
||||
width="250px">
|
||||
<template scope="{row}">
|
||||
<el-button type="primary" :disabled="!row.isEvidence" plain
|
||||
@click="doView(nr.content,row.inspection,row)">
|
||||
查看佐证材料
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-row>
|
||||
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
</div>
|
||||
</transition>
|
||||
|
||||
</el-row>
|
||||
|
||||
<el-drawer
|
||||
:visible.sync="dialog"
|
||||
direction="rtl" size="40%"
|
||||
custom-class="demo-drawer"
|
||||
ref="drawer">
|
||||
<div class="demo-drawer__content" style="padding: 0 15px">
|
||||
<upload-materials :data="data" :is_view="true"></upload-materials>
|
||||
</div>
|
||||
</el-drawer>
|
||||
|
||||
</div>
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
data() {
|
||||
return {
|
||||
unions: [],
|
||||
units: [],
|
||||
data: {},
|
||||
row: {},
|
||||
dialog: false,
|
||||
loading: false,
|
||||
formData: {},
|
||||
unions: [],
|
||||
v: 'index',
|
||||
tabLoading: false,
|
||||
tableData: [],
|
||||
pageForm: {
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
},
|
||||
pickerOptions: {
|
||||
disabledDate(time) {
|
||||
return (
|
||||
time.getFullYear() > new Date().getFullYear()
|
||||
);
|
||||
}
|
||||
},
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'upload-materials': httpVueLoader('/components/kh/UploadMaterials.vue')
|
||||
},
|
||||
methods: {
|
||||
async getKh() {
|
||||
await $.get("/platform/ghkh/khph/getKh", {"annual": this.pageForm.annual}).then(res => {
|
||||
if (res.data.length != 0) {
|
||||
this.kh = res.data
|
||||
this.pageForm.khid = this.kh[0].id
|
||||
} else {
|
||||
this.kh = []
|
||||
this.pageForm.khid = ""
|
||||
}
|
||||
})
|
||||
},
|
||||
async khSearch() {
|
||||
await this.getKh()
|
||||
},
|
||||
openView(row) {
|
||||
this.v = 'edit';
|
||||
$.post(base + "/platform/ghkh/lssjcx/getData", {zb_id: row.zb_id, union_id: row.union_id}, (res) => {
|
||||
res.data.nrs.forEach(nr => {
|
||||
nr.bzs.forEach(bz => {
|
||||
if (bz.zp) {
|
||||
bz.zpf = bz.zp.zpf
|
||||
}
|
||||
if (bz.sh) {
|
||||
bz.addition = bz.sh.addition
|
||||
bz.schools = bz.sh.schools
|
||||
}
|
||||
})
|
||||
})
|
||||
res.data.union_id = row.union_id
|
||||
res.data.flatname = row.unionname
|
||||
this.formData = res.data
|
||||
|
||||
})
|
||||
},
|
||||
doView(nr, bz, row) {
|
||||
this.dialog = true
|
||||
this.data = {nr, bz, ...row.zp}
|
||||
},
|
||||
getSummaries(param) {
|
||||
const {columns, data} = param;
|
||||
const sums = [];
|
||||
columns.forEach((column, index) => {
|
||||
if (index === 0) {
|
||||
sums[index] = '小计';
|
||||
return;
|
||||
} else if (index === 5) {
|
||||
sums[index] = '';
|
||||
return;
|
||||
}
|
||||
const values = data.map(item => Number(item[column.property]));
|
||||
if (!values.every(value => isNaN(value))) {
|
||||
sums[index] = values.reduce((prev, curr) => {
|
||||
const value = Number(curr);
|
||||
if (!isNaN(value)) {
|
||||
return prev + curr;
|
||||
} else {
|
||||
return prev;
|
||||
}
|
||||
}, 0);
|
||||
|
||||
if (sums[2]) {
|
||||
sums[2] = sums[2]
|
||||
}
|
||||
if (sums[3]) {
|
||||
sums[3] = sums[3]
|
||||
}
|
||||
if (sums[4]) {
|
||||
sums[4] = sums[4]
|
||||
}
|
||||
} else {
|
||||
sums[index] = '';
|
||||
}
|
||||
});
|
||||
return sums;
|
||||
},
|
||||
pageData() {
|
||||
sublime.showLoadingbar();
|
||||
this.tabLoading = true
|
||||
$.post(base + "/platform/ghkh/lssjcx/pageData", this.pageForm, (data) => {
|
||||
sublime.closeLoadingbar();
|
||||
this.tabLoading = false
|
||||
if (data.code == 0) {
|
||||
this.tableData = data.data.list;
|
||||
this.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
this.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
doSearch() {
|
||||
this.pageForm.pageNumber = 1
|
||||
this.pageData();
|
||||
},
|
||||
pageNumberChange(val) {//页码更新操作
|
||||
this.pageForm.pageNumber = val;
|
||||
this.pageData();
|
||||
},
|
||||
pageSizeChange(val) {//分页大小更新操作
|
||||
this.pageForm.pageSize = val;
|
||||
this.pageData();
|
||||
},
|
||||
async flushUnits() {
|
||||
this.$set(this.pageForm, "unitId", "")
|
||||
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('H03')}" === 'true') {
|
||||
this.units = await getUnits(this.pageForm.unionId)
|
||||
} else {
|
||||
this.units = await getUnits("${@shiro.getPrincipalProperty('unit').getUnionid()}")
|
||||
}
|
||||
},
|
||||
|
||||
},
|
||||
async created() {
|
||||
this.pageData();
|
||||
this.unions = await getUnions()
|
||||
this.flushUnits()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,444 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<el-row class="transition-row">
|
||||
<transition name="el-zoom-in-center">
|
||||
<div v-show="v=='index'" class="transition-item">
|
||||
<el-card shadow="never">
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-date-picker
|
||||
@change="khSearch"
|
||||
:picker-options="pickerOptions"
|
||||
v-model="pageForm.annual"
|
||||
type="year"
|
||||
value-format="yyyy"
|
||||
placeholder="选择年度">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-select placeholder="请选择所属工会" v-model="pageForm.unionid" style="width: 200px;"
|
||||
clearable="true" filterable="true">
|
||||
<el-option v-for="item in unions" :label="item.unionname" :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>
|
||||
<div class="pull-right offscreen-right mt5">
|
||||
<el-radio-group v-model="pageForm.isAudit" @change="doSearch">
|
||||
<el-radio-button :label="1">全部</el-radio-button>
|
||||
<el-radio-button :label="2">已审核</el-radio-button>
|
||||
<el-radio-button :label="3">未审核</el-radio-button>
|
||||
</el-radio-group>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
|
||||
<el-card shadow="never" class="mt20">
|
||||
<el-table :data="tableData" style="width: 100%" row-key="id" @sort-change="pageOrder"
|
||||
v-loading="tabLoading">
|
||||
<el-table-column align="center" header-align="center" label="序号" width="100px">
|
||||
<template scope="scope">
|
||||
<span>{{scope.$index+(pageForm.pageNumber - 1) * pageForm.pageSize + 1}} </span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="年度" prop="annual" header-align="center" width="300px" sortable
|
||||
align="center">
|
||||
<template scope="scope">
|
||||
{{scope.row.annual}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="院级工会名称" prop="unionname" header-align="center" show-overflow-tooltip
|
||||
align="center">
|
||||
<template scope="{row}">
|
||||
({{row.unioncode}}){{row.unionname}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="考核名称" prop="assessment" header-align="center" show-overflow-tooltip
|
||||
align="center"></el-table-column>
|
||||
|
||||
|
||||
<el-table-column label="标准分" prop="bzf" sortable header-align="center" show-overflow-tooltip
|
||||
align="center"></el-table-column>
|
||||
|
||||
<el-table-column label="自评得分" sortable prop="zp_score" header-align="center"
|
||||
show-overflow-tooltip
|
||||
align="center"></el-table-column>
|
||||
|
||||
<el-table-column label="校工会得分" sortable prop="xgh_score" header-align="center"
|
||||
show-overflow-tooltip
|
||||
align="center"></el-table-column>
|
||||
|
||||
|
||||
<el-table-column label="状态" prop="name" header-align="center"
|
||||
align="center">
|
||||
<template scope="scope">
|
||||
<span class="text-warning" v-if="scope.row.state==2">待评分</span>
|
||||
<span class="text-success" v-else-if="scope.row.state==3">考核成功</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" header-align="center" label="操作" fixed="right" width="120px">
|
||||
<template scope="scope">
|
||||
<el-button size="mini" :disabled="scope.row.state==3" type="primary"
|
||||
@click="openShGh(scope.row)">评分
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<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"
|
||||
:total="pageForm.totalCount">
|
||||
</el-pagination>
|
||||
</el-row>
|
||||
</el-card>
|
||||
|
||||
|
||||
</div>
|
||||
</transition>
|
||||
|
||||
<transition name="el-zoom-in-center">
|
||||
<div v-show="v=='edit'" class="transition-item">
|
||||
<el-row class="header navbar bg-white shadow">
|
||||
|
||||
<el-button icon="el-icon-back" type="text" @click="v='index'" style="font-size: 18px">返回
|
||||
</el-button>
|
||||
<el-button type="primary" style="float: right;margin-top: 5px" @click="doEdit()">提交</el-button>
|
||||
|
||||
</el-row>
|
||||
|
||||
<el-form :model="formData" ref="form" label-width="100px" :rules="formRules"
|
||||
style="height: calc(100vh - 50px);overflow-y: scroll;padding: 10px 15px">
|
||||
<vi-title title="指标信息"></vi-title>
|
||||
</el-form-item>
|
||||
<el-row gutter="20">
|
||||
<el-col :span="8">
|
||||
<el-form-item prop="annual" label="年  度">
|
||||
<el-date-picker
|
||||
:picker-options="pickerOptions"
|
||||
v-model="formData.annual"
|
||||
type="year"
|
||||
value-format="yyyy"
|
||||
placeholder="选择年度">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item prop="flatname" label="分工会名称">
|
||||
<el-input maxlength="30" value="" readonly v-model="formData.flatname"
|
||||
placeholder="请填写分工会名称"
|
||||
type="text"></el-input>
|
||||
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item prop="assessment" label="考核名称">
|
||||
<el-input maxlength="30" readonly v-model="formData.assessment" placeholder="请填写考核名称"
|
||||
type="text"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<vi-title title="考核内容"></vi-title>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item label="" label-width="0" v-for="nr,idx in formData.nrs">
|
||||
|
||||
<el-row type="flex" align="middle" justify="space-between">
|
||||
<el-input v-model="nr.content" readonly maxlength="30" style="width: 50%"
|
||||
placeholder="请填写考核内容">
|
||||
<template slot="prepend"><span>{{ idx + 1 }}</span></template>
|
||||
</el-input>
|
||||
</el-row>
|
||||
|
||||
|
||||
<el-row style="margin-top: 20px">
|
||||
<el-table :data="nr.bzs" style="width: 100%" border show-summary
|
||||
:summary-method="getSummaries">
|
||||
<el-table-column align="center" header-align="center" label="序号" type="index">
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="考核标准" disabled prop="inspection" header-align="center"
|
||||
width="250px" align="center">
|
||||
<template scope="{row}">
|
||||
<el-input v-model="row.inspection"
|
||||
readonly placeholder="请填写考核标准"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="标准分" prop="score" header-align="center" align="center"
|
||||
width="250px">
|
||||
<template scope="{row}">
|
||||
<el-input v-model.number="row.score" readonly maxlength="4"
|
||||
placeholder="请填写标准分"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="自评得分" prop="zpf" header-align="center" align="center"
|
||||
width="250px">
|
||||
<template scope="{row}">
|
||||
<el-input v-if="row.zpf" v-model.number="row.zpf" maxlength="4"
|
||||
readonly placeholder="请填写自评分"></el-input>
|
||||
|
||||
<el-input v-else value="暂无" maxlength="4"
|
||||
readonly></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="校工会评分" prop="schools" header-align="center" align="center"
|
||||
width="250px">
|
||||
<template scope="{row}">
|
||||
<el-input v-model.number="row.schools" maxlength="4"
|
||||
placeholder="请填写评分"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="加、减原因" prop="addition" header-align="center" align="center"
|
||||
width="250px">
|
||||
<template scope="{row}">
|
||||
<el-input v-model.number="row.addition" maxlength="50"
|
||||
placeholder="请填写加、减原因"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="有关佐证材料" header-align="center" align="center"
|
||||
width="250px">
|
||||
<template scope="{row}">
|
||||
<el-button type="primary" plain @click="doView(nr.content,row.inspection,row)">
|
||||
查看佐证材料
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-row>
|
||||
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
</div>
|
||||
</transition>
|
||||
|
||||
</el-row>
|
||||
|
||||
|
||||
<el-drawer
|
||||
:visible.sync="dialog"
|
||||
direction="rtl" size="40%"
|
||||
custom-class="demo-drawer"
|
||||
ref="drawer">
|
||||
<div class="demo-drawer__content" style="padding: 0 15px">
|
||||
<upload-materials :data="data" :is_view="true"></upload-materials>
|
||||
</div>
|
||||
</el-drawer>
|
||||
|
||||
</div>
|
||||
<script>
|
||||
|
||||
window.vue = new Vue({
|
||||
el: '#app',
|
||||
data() {
|
||||
return {
|
||||
|
||||
unions: [],
|
||||
ghPageForm: {},
|
||||
v: 'index',
|
||||
tabLoading: false,
|
||||
tableData: [],
|
||||
showGh: true,
|
||||
formData: {},
|
||||
dialog: false,
|
||||
loading: false,
|
||||
pageForm: {
|
||||
isAudit: 3,
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
year: new Date().getFullYear() + ""
|
||||
},
|
||||
formRules: {
|
||||
schools: [{required: true, message: '请填写分数', trigger: ['blur', 'change']}],
|
||||
addition: [{required: true, message: '请填写原因', trigger: ['blur', 'change']}],
|
||||
},
|
||||
data: {},
|
||||
row: {},
|
||||
pickerOptions: {
|
||||
disabledDate(time) {
|
||||
return (
|
||||
time.getFullYear() > new Date().getFullYear()
|
||||
);
|
||||
}
|
||||
},
|
||||
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'upload-materials': httpVueLoader('/components/kh/UploadMaterials.vue')
|
||||
},
|
||||
methods: {
|
||||
async getKh() {
|
||||
await $.get("/platform/ghkh/khph/getKh", {"annual": this.pageForm.annual}).then(res => {
|
||||
if (res.data.length != 0) {
|
||||
this.kh = res.data
|
||||
this.pageForm.khid = this.kh[0].id
|
||||
} else {
|
||||
this.kh = []
|
||||
this.pageForm.khid = ""
|
||||
}
|
||||
})
|
||||
},
|
||||
async khSearch() {
|
||||
await this.getKh()
|
||||
},
|
||||
doEdit() {
|
||||
let arr = []
|
||||
this.formData.nrs.forEach(n => {
|
||||
let zp
|
||||
n.bzs.forEach(b => {
|
||||
if (b.zp) {
|
||||
zp = {
|
||||
"zb_id": this.formData.id,
|
||||
"nr_id": n.id,
|
||||
"bz_id": b.id,
|
||||
"flatid": this.formData.union_id,
|
||||
"schools": b.schools,
|
||||
"addition": b.addition
|
||||
}
|
||||
} else {
|
||||
zp = {
|
||||
"zb_id": this.formData.id,
|
||||
"nr_id": n.id,
|
||||
"bz_id": b.id,
|
||||
"flatid": this.formData.union_id
|
||||
}
|
||||
}
|
||||
arr.push(zp)
|
||||
})
|
||||
})
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '数据提交中...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: 'rgba(0, 0, 0, 0.7)'
|
||||
});
|
||||
$.post(base + "/platform/ghkh/xghsh/marking", {pf: JSON.stringify(arr)}, (data) => {
|
||||
if (data.code == 0) {
|
||||
this.v = 'index'
|
||||
this.pageData()
|
||||
this.$message.success(data.msg)
|
||||
} else {
|
||||
this.$message({
|
||||
message: "请给校工会评分",
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
loading.close()
|
||||
})
|
||||
|
||||
},
|
||||
doView(nr, bz, row) {
|
||||
this.dialog = true
|
||||
this.data = {nr, bz, ...row.zp}
|
||||
},
|
||||
getSummaries(param) {
|
||||
const {columns, data} = param;
|
||||
const sums = [];
|
||||
columns.forEach((column, index) => {
|
||||
if (index === 0) {
|
||||
sums[index] = '小计';
|
||||
return;
|
||||
} else if (index === 5) {
|
||||
sums[index] = '';
|
||||
return;
|
||||
}
|
||||
const values = data.map(item => Number(item[column.property]));
|
||||
if (!values.every(value => isNaN(value))) {
|
||||
sums[index] = values.reduce((prev, curr) => {
|
||||
const value = Number(curr);
|
||||
if (!isNaN(value)) {
|
||||
return prev + curr;
|
||||
} else {
|
||||
return prev;
|
||||
}
|
||||
}, 0);
|
||||
sums[index] += ' 分';
|
||||
} else {
|
||||
sums[index] = '';
|
||||
}
|
||||
});
|
||||
return sums;
|
||||
},
|
||||
openShGh(row) {
|
||||
this.v = 'edit';
|
||||
$.post(base + "/platform/ghkh/xghsh/getData", {zb_id: row.zb_id, union_id: row.union_id}, (res) => {
|
||||
res.data.nrs.forEach(nr => {
|
||||
nr.bzs.forEach(bz => {
|
||||
if (bz.zp) {
|
||||
bz.zpf = bz.zp.zpf
|
||||
}
|
||||
})
|
||||
})
|
||||
res.data.union_id = row.union_id
|
||||
res.data.flatname = row.unionname
|
||||
this.formData = res.data
|
||||
})
|
||||
},
|
||||
doSearchGh() {
|
||||
},
|
||||
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();
|
||||
this.tabLoading = true
|
||||
$.post(base + "/platform/ghkh/xghsh/pageData", this.pageForm, (data) => {
|
||||
sublime.closeLoadingbar();
|
||||
this.tabLoading = false
|
||||
if (data.code == 0) {
|
||||
this.tableData = data.data.list;
|
||||
this.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
this.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
this.pageData();
|
||||
this.unions = await getUnions()
|
||||
}
|
||||
|
||||
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,103 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
|
||||
|
||||
</style>
|
||||
<div id="app" v-cloak>
|
||||
|
||||
<el-button type="primary" style="float: right;margin-top: 5px; position: fixed;right: 20px;z-index: 100;" @click="doAdd()">提交
|
||||
</el-button>
|
||||
|
||||
<div style="padding: 50px 100px">
|
||||
<kh-zb :data="formData" @change="v=>{this.formData=v}"></kh-zb>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
data() {
|
||||
return {
|
||||
v: 'index',
|
||||
formData: {},
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'kh-zb': httpVueLoader('/components/kh/KhZb.vue?v=' + moment(new Date()).unix()),
|
||||
},
|
||||
methods: {
|
||||
doAdd() {
|
||||
let flag = true
|
||||
if (!this.formData.annual) {
|
||||
this.$message({
|
||||
message: "年度不能为空",
|
||||
type: 'error'
|
||||
})
|
||||
return
|
||||
}
|
||||
if (!this.formData.assessment) {
|
||||
this.$message({
|
||||
message: "考核名称不能为空",
|
||||
type: 'error'
|
||||
})
|
||||
return
|
||||
}
|
||||
this.formData.nrs.forEach(nr => {
|
||||
nr.bzs.forEach(bz => {
|
||||
if (!nr.content) {
|
||||
this.$message({
|
||||
message: "考核内容不能为空",
|
||||
type: 'error'
|
||||
})
|
||||
flag = false;
|
||||
throw Error()
|
||||
} else if (!bz.inspection) {
|
||||
this.$message({
|
||||
message: "考核标准不能为空",
|
||||
type: 'error'
|
||||
})
|
||||
flag = false;
|
||||
throw Error()
|
||||
} /*else if (!bz.score) {
|
||||
this.$message({
|
||||
message: "分数不能为空",
|
||||
type: 'error'
|
||||
})
|
||||
flag = false;
|
||||
throw Error()
|
||||
}*/
|
||||
})
|
||||
})
|
||||
if (flag) {
|
||||
$.post(base + "/platform/ghkh/Xjkhzb/doAdd", {kh_zb: JSON.stringify(this.formData)}, (res) => {
|
||||
this.formData.nrs.forEach(nr => {
|
||||
nr.bzs.forEach(bz => {
|
||||
nr.content = ""
|
||||
bz.inspection = ""
|
||||
bz.score = ""
|
||||
bz.single_score = ''
|
||||
bz.associatedmodule = ''
|
||||
})
|
||||
this.formData.annual = ""
|
||||
this.formData.assessment = ""
|
||||
})
|
||||
this.$message({
|
||||
message: res.msg,
|
||||
type: 'success'
|
||||
});
|
||||
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,821 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
#app {
|
||||
height: 100%;
|
||||
overflow-y: unset !important;
|
||||
}
|
||||
|
||||
.el-form {
|
||||
height: calc(100vh - 100px) !important;
|
||||
}
|
||||
</style>
|
||||
<div id="app" v-cloak>
|
||||
|
||||
<el-row class="transition-row">
|
||||
<transition name="el-zoom-in-center">
|
||||
<div v-show="v=='index'" class="transition-item">
|
||||
<el-card shadow="never">
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-date-picker
|
||||
@change="khSearch"
|
||||
:picker-options="pickerOptions"
|
||||
v-model="pageForm.annual"
|
||||
type="year"
|
||||
value-format="yyyy"
|
||||
placeholder="选择年度">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-button type="primary" icon="el-icon-search" @click="doSearch"></el-button>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt20">
|
||||
<el-table :data="tableData" style="width: 100%" row-key="id"
|
||||
v-loading="tabLoading">
|
||||
<el-table-column align="center" header-align="center" label="序号" width="100px">
|
||||
<template scope="scope">
|
||||
<span>{{scope.$index+(pageForm.pageNumber - 1) * pageForm.pageSize + 1}} </span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="年度" prop="annual" header-align="center" width="300px" sortable
|
||||
align="center">
|
||||
<template scope="scope">
|
||||
{{scope.row.annual}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="考核名称" prop="assessment" header-align="center" show-overflow-tooltip
|
||||
align="center"></el-table-column>
|
||||
|
||||
<el-table-column label="自评得分" prop="zp_score" header-align="center" sortable align="center">
|
||||
<template scope="scope">
|
||||
{{scope.row.zp_score | none2str}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="校工会评分" prop="xgh_score" header-align="center" sortable align="center">
|
||||
<template scope="scope">
|
||||
{{scope.row.xgh_score | none2str}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="状态" prop="name" header-align="center"
|
||||
align="center">
|
||||
<template scope="scope">
|
||||
<span class="text-info" v-if="!scope.row.state">未自评</span>
|
||||
<span class="text-success" v-if="scope.row.state==1">自评中</span>
|
||||
<span class="text-warning" v-if="scope.row.state==2">待校工会评分</span>
|
||||
<span class="text-success" v-if="scope.row.state==3">考核成功</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" header-align="center" label="操作" fixed="right" width="250px">
|
||||
<template scope="scope">
|
||||
<el-button size="mini" v-if="scope.row.state" @click="openView(scope.row)">查看
|
||||
</el-button>
|
||||
<el-button size="mini" type="primary" @click="openAdd(scope.row)" plain
|
||||
v-if="!scope.row.state">
|
||||
自评
|
||||
</el-button>
|
||||
<el-button size="mini" type="primary" @click="openEdit(scope.row)" plain
|
||||
v-if="scope.row.state==1||scope.row.state==2">
|
||||
修改
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<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"
|
||||
:total="pageForm.totalCount">
|
||||
</el-pagination>
|
||||
</el-row>
|
||||
</el-card>
|
||||
|
||||
|
||||
</div>
|
||||
</transition>
|
||||
|
||||
<transition name="el-zoom-in-center">
|
||||
<div v-show="v=='edit'||v=='add'" class="transition-item">
|
||||
<el-row class="header navbar bg-white shadow">
|
||||
<el-button icon="el-icon-back" type="text" @click="goBack" style="font-size: 16px">返回
|
||||
</el-button>
|
||||
<el-button type="primary"
|
||||
style="float: right;margin-top: 5px;margin-left: 10px;"
|
||||
@click="doSaveOrSubmit('submit')">提交
|
||||
</el-button>
|
||||
<el-button type="primary" plain style="float: right;margin-top: 5px"
|
||||
@click="doSaveOrSubmit('save')">
|
||||
保存
|
||||
</el-button>
|
||||
</el-row>
|
||||
|
||||
|
||||
<el-form :model="formData" ref="form" label-width="100px"
|
||||
style="height: calc(100vh - 50px);overflow-y: scroll;padding: 10px 15px">
|
||||
<vi-title title="指标信息"></vi-title>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="8">
|
||||
<el-form-item prop="annual" label="年  度">
|
||||
<el-date-picker
|
||||
style="width: 100%"
|
||||
@change="khSearch"
|
||||
:picker-options="pickerOptions"
|
||||
v-model="formData.annual"
|
||||
type="year"
|
||||
value-format="yyyy"
|
||||
placeholder="选择年度">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item prop="assessment" label="考核名称">
|
||||
<el-input maxlength="30" readonly v-model="formData.assessment" placeholder="请填写考核名称"
|
||||
type="text"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item prop="flatid" label="分工会名称">
|
||||
<!--#if(@shiro.getPrincipalProperty('union')!=null){#-->
|
||||
<el-input maxlength="30" readonly
|
||||
value="${@shiro.getPrincipalProperty('union').getUnionname()}"
|
||||
placeholder="请填写分工会名称"
|
||||
type="text"></el-input>
|
||||
<!--#}else{#-->
|
||||
<el-input maxlength="30" value="" readonly placeholder="请填写分工会名称"
|
||||
type="text"></el-input>
|
||||
<!--#}#-->
|
||||
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
</el-row>
|
||||
|
||||
|
||||
<vi-title title="考核内容"></vi-title>
|
||||
|
||||
|
||||
<el-form-item label="" label-width="0" v-for="nr,idx in formData.nrs" :key="nr.id">
|
||||
|
||||
<el-row type="flex" align="middle" justify="space-between">
|
||||
<el-input v-model="nr.content" readonly maxlength="30" style="width: 50%">
|
||||
<template slot="prepend"><span>{{ idx + 1 }}</span></template>
|
||||
</el-input>
|
||||
</el-row>
|
||||
|
||||
|
||||
<el-row style="margin-top: 20px">
|
||||
<el-table :data="nr.bzs" style="width: 100%" border show-summary
|
||||
:summary-method="getSummaries">
|
||||
<el-table-column align="center" header-align="center" label="序号" type="index"
|
||||
width="100px">
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="考核标准" disabled prop="inspection" header-align="center"
|
||||
align="center">
|
||||
<template scope="{row}">
|
||||
<el-input v-model="row.inspection"
|
||||
readonly></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="单项分" prop="single_score" header-align="center" align="center"
|
||||
width="250px">
|
||||
<template scope="{row}">
|
||||
<el-input v-model.number="row.single_score" readonly maxlength="4"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="标准分" prop="score" header-align="center" align="center"
|
||||
width="250px">
|
||||
<template scope="{row}">
|
||||
<el-input v-model.number="row.score" readonly maxlength="4"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="自评得分" prop="zp.zpf" header-align="center" align="center"
|
||||
width="250px">
|
||||
<template slot-scope="{row}">
|
||||
<el-input v-model.number="row.zp.zpf" maxlength="4"
|
||||
@input="(val)=>{onInputZpf(val,row)}"
|
||||
placeholder="请填写自评分">
|
||||
<template #append v-if="row.bz_relation_id">
|
||||
<el-button @click="calcScore(row)" icon="el-icon-paperclip"></el-button>
|
||||
</template>
|
||||
</el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<!-- <el-table-column label="能否超过标准分" prop="beyond_highestscore" header-align="center" align="center"-->
|
||||
<!-- width="200px">-->
|
||||
<!-- <template scope="{row}">-->
|
||||
<!-- <span v-if="row.beyond_highestscore" class="text-primary">能</span>-->
|
||||
<!-- <span v-else class="text-danger">否</span>-->
|
||||
<!-- </template>-->
|
||||
<!-- </el-table-column>-->
|
||||
|
||||
<el-table-column label="上传有关佐证材料" header-align="center" align="center"
|
||||
width="250px">
|
||||
<template scope="props">
|
||||
<el-button type="primary" plain :disabled="!props.row.isEvidence"
|
||||
@click="upload(nr.content,props.row.inspection,props.row,props.$index,idx)">
|
||||
上传佐证材料
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-row>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
</div>
|
||||
</transition>
|
||||
|
||||
<transition name="el-zoom-in-center">
|
||||
<div v-show="v=='View'" class="transition-item">
|
||||
<el-row class="header navbar bg-white shadow">
|
||||
<el-button icon="el-icon-back" type="text" @click="v='index'" style="font-size: 16px">返回</el-button>
|
||||
</el-row>
|
||||
|
||||
<el-form :model="formData" ref="form" label-width="100px"
|
||||
style="height: calc(100vh - 50px);overflow-y: scroll;padding: 10px 15px">
|
||||
<vi-title title="指标信息"></vi-title>
|
||||
</el-form-item>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="8">
|
||||
<el-form-item prop="annual" label="年  度">
|
||||
<el-date-picker
|
||||
@change="khSearch"
|
||||
:picker-options="pickerOptions"
|
||||
v-model="formData.annual"
|
||||
type="year"
|
||||
value-format="yyyy"
|
||||
placeholder="选择年度">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item prop="flatid" label="分工会名称">
|
||||
<!--#if(@shiro.getPrincipalProperty('union')!=null){#-->
|
||||
<el-input maxlength="30" readonly
|
||||
value="${@shiro.getPrincipalProperty('union').getUnionname()}"
|
||||
placeholder="请填写分工会名称"
|
||||
type="text"></el-input>
|
||||
<!--#}else{#-->
|
||||
<el-input maxlength="30" value="" readonly placeholder="请填写分工会名称"
|
||||
type="text"></el-input>
|
||||
<!--#}#-->
|
||||
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item prop="assessment" label="考核名称">
|
||||
<el-input maxlength="30" readonly v-model="formData.assessment" placeholder="请填写考核名称"
|
||||
type="text"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<vi-title title="考核内容"></vi-title>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item label="" label-width="0" v-for="nr,idx in formData.nrs" :key="nr.id">
|
||||
|
||||
<el-row type="flex" align="middle" justify="space-between">
|
||||
<el-input v-model="nr.content" readonly maxlength="30" style="width: 50%"
|
||||
placeholder="请填写考核内容">
|
||||
<template slot="prepend"><span>{{ idx + 1 }}</span></template>
|
||||
</el-input>
|
||||
</el-row>
|
||||
|
||||
|
||||
<el-row style="margin-top: 20px">
|
||||
<el-table :data="nr.bzs" style="width: 100%" border show-summary
|
||||
:summary-method="getSummaries">
|
||||
<el-table-column align="center" header-align="center" label="序号" type="index">
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="考核标准" disabled prop="inspection" header-align="center"
|
||||
align="center">
|
||||
<template scope="{row}">
|
||||
<el-input v-model="row.inspection"
|
||||
readonly placeholder="请填写考核标准"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="标准分" prop="score" header-align="center" align="center"
|
||||
width="250px">
|
||||
<template scope="{row}">
|
||||
<el-input v-model.number="row.score" readonly maxlength="4"
|
||||
placeholder="请填写标准分"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="自评得分" prop="zpf" header-align="center" align="center"
|
||||
width="250px">
|
||||
<template scope="{row}">
|
||||
<el-input v-if="row.zpf" v-model.number="row.zpf" maxlength="4"
|
||||
readonly placeholder="请填写自评分"></el-input>
|
||||
<el-input v-else value="暂无" maxlength="4"
|
||||
readonly></el-input>
|
||||
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="有关佐证材料" header-align="center" align="center"
|
||||
width="250px">
|
||||
<template scope="{row}">
|
||||
<el-button type="primary" :disabled="!row.zp||!row.zp.zpf||!row.isEvidence"
|
||||
plain
|
||||
@click="viewUpload(nr.content,row.inspection,row)">
|
||||
查看佐证材料
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-row>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
</div>
|
||||
</transition>
|
||||
</el-row>
|
||||
|
||||
<el-drawer
|
||||
:visible.sync="dialog"
|
||||
:show-close="false"
|
||||
direction="rtl" size="40%"
|
||||
custom-class="demo-drawer" :before-close="()=>{addForm()}"
|
||||
ref="drawer">
|
||||
<div class="demo-drawer__content" style="padding: 0 15px">
|
||||
<upload-materials :data="data"></upload-materials>
|
||||
|
||||
<div class="demo-drawer__footer" style="float: right">
|
||||
<el-popover
|
||||
placement="top"
|
||||
width="160"
|
||||
v-model="visible">
|
||||
<p>您确定要返回吗?返回将不能保存!</p>
|
||||
<div style="text-align: right; margin: 0">
|
||||
<el-button size="mini" type="text" @click="visible = false">取消</el-button>
|
||||
<el-button type="primary" size="mini" @click="cancelForm">确定</el-button>
|
||||
</div>
|
||||
<el-button slot="reference">返 回</el-button>
|
||||
</el-popover>
|
||||
<!-- <el-button @click="cancelForm">取 消</el-button>-->
|
||||
<el-button type="primary" @click="addForm">确 定</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-drawer>
|
||||
|
||||
<el-drawer
|
||||
:visible.sync="dialog_view"
|
||||
direction="rtl" size="40%"
|
||||
custom-class="demo-drawer"
|
||||
ref="drawer">
|
||||
<div class="demo-drawer__content" style="padding: 0 15px">
|
||||
<upload-materials :data="data" :is_view="true"></upload-materials>
|
||||
</div>
|
||||
</el-drawer>
|
||||
|
||||
<calcscore-table :relation_year="relationYear"
|
||||
:show_modal.sync="calcSoreTableModal"
|
||||
@get_table_data="autoFillScore"/>
|
||||
|
||||
|
||||
</div>
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
data() {
|
||||
return {
|
||||
visible: false,
|
||||
fileList: [],
|
||||
v: 'index',
|
||||
tableData: [],
|
||||
formData: {},
|
||||
dialog: false,
|
||||
dialog_view: false,
|
||||
loading: false,
|
||||
pageForm: {
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
},
|
||||
data: {bz: '', clnrs: null, nr: ''},
|
||||
row: {},
|
||||
index: "",
|
||||
idx: "",
|
||||
addFormData: [],
|
||||
pickerOptions: {
|
||||
disabledDate(time) {
|
||||
return (
|
||||
time.getFullYear() > new Date().getFullYear()
|
||||
);
|
||||
}
|
||||
},
|
||||
relationYear: {},
|
||||
calcSoreTableModal: false,
|
||||
current_bz_id: ''
|
||||
}
|
||||
},
|
||||
|
||||
filters: {
|
||||
none2str(val) {
|
||||
return val ? val : '暂无'
|
||||
}
|
||||
},
|
||||
|
||||
components: {
|
||||
'upload-materials': httpVueLoader('/components/kh/UploadMaterials.vue'),
|
||||
'calcscore-table': httpVueLoader('/components/kh/CalcScoreTab.vue?ver=' + Math.random()),
|
||||
},
|
||||
|
||||
methods: {
|
||||
goBack() {
|
||||
this.pageData()
|
||||
this.v = 'index'
|
||||
},
|
||||
//计算得分
|
||||
async calcScore(row) {
|
||||
this.current_bz_id = row.id
|
||||
this.calcSoreTableModal = true
|
||||
this.relationYear = {year: this.formData.annual, bz_relation_id: row.bz_relation_id}
|
||||
},
|
||||
autoFillScore(scoreTable) {
|
||||
this.formData.nrs.some(nr => {
|
||||
nr.bzs.some(v => {
|
||||
if (v.id === this.current_bz_id) {
|
||||
this.$set(v, 'clnr', this.renderScoreTable(v.bz_relation_id, scoreTable))
|
||||
|
||||
if (scoreTable.length * v.single_score > Number(v.score) && !v.beyond_highestscore) {
|
||||
this.$message.warning('自评得分不能超过标准分!')
|
||||
this.$set(v.zp, 'zpf', v.score)
|
||||
return true
|
||||
}
|
||||
|
||||
if (this.relationYear.bz_relation_id === "Performance") {
|
||||
let single_score = 0
|
||||
scoreTable.map(v => {
|
||||
single_score += v.integral
|
||||
})
|
||||
this.$set(v.zp, 'zpf', single_score)
|
||||
} else {
|
||||
this.$set(v.zp, 'zpf', scoreTable.length * v.single_score)
|
||||
}
|
||||
|
||||
|
||||
return true
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
//自定义材料内容
|
||||
renderScoreTable(relation_id, score_data) {
|
||||
if (score_data) {
|
||||
let res = ''
|
||||
switch (relation_id) {
|
||||
case 'proposal':
|
||||
score_data.map((v, i) => {
|
||||
res += (i + 1) + ' .提案人:' + v.username + ',提案名称:' + v.proposalName + ';\n'
|
||||
})
|
||||
return res
|
||||
case 'secteameet':
|
||||
score_data.map((v, i) => {
|
||||
res += (i + 1) + ' .申请人:' + v.username + ',会议名称:' + v.meeting_name + ';\n'
|
||||
})
|
||||
return res
|
||||
case 'ConandDif':
|
||||
score_data.map((v, i) => {
|
||||
res += (i + 1) + ' .被慰问/补助人:' + v.be_username + ',慰问/补助类型:' + v.typename + ';\n'
|
||||
})
|
||||
return res
|
||||
case 'Performance':
|
||||
score_data.map((v, i) => {
|
||||
res += (i + 1) + ' .在:' + v.activityName + '届运动会中,' + v.eventName + '项目获得了地' + v.ranking + '名;\n'
|
||||
})
|
||||
return res
|
||||
default:
|
||||
return ''
|
||||
}
|
||||
}
|
||||
return ''
|
||||
},
|
||||
onInputZpf(v, row) {
|
||||
if (Number(v) > Number(row.score) && !row.beyond_highestscore) {
|
||||
row.zp.zpf = Number(row.score)
|
||||
this.$message.warning('自评得分不能超过标准分!')
|
||||
}
|
||||
},
|
||||
async doSaveOrSubmit(v) {
|
||||
const params = []
|
||||
this.formData.nrs.forEach(n => {
|
||||
n.bzs.forEach(b => {
|
||||
params.push({
|
||||
"zb_id": this.formData.id, "nr_id": n.id,
|
||||
"bz_id": b.id, "clnr": b.zp.clnr, "zpf": b.zp.zpf, "files": b.zp.files,
|
||||
"id": b.zp.id ? b.zp.id : null
|
||||
})
|
||||
})
|
||||
})
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '数据提交中...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: 'rgba(0, 0, 0, 0.7)'
|
||||
});
|
||||
const res = await $.post(base + "/platform/ghkh/zp/doHandler", {
|
||||
zp: JSON.stringify(params),
|
||||
handletype: v
|
||||
})
|
||||
if (res.code === 0) {
|
||||
this.pageData()
|
||||
this.$message.success(res.msg)
|
||||
} else {
|
||||
this.$message.error(res.msg)
|
||||
}
|
||||
loading.close()
|
||||
if (v === 'submit') {
|
||||
this.v = 'index'
|
||||
return
|
||||
}
|
||||
const resa = await $.post(base + '/platform/ghkh/zp/openView', {id: this.formData.id})
|
||||
await this.$nextTick()
|
||||
this.formData = resa.data
|
||||
},
|
||||
async getKh() {
|
||||
await $.get("/platform/ghkh/khph/getKh", {"annual": this.pageForm.annual}).then(res => {
|
||||
if (res.data.length != 0) {
|
||||
this.kh = res.data
|
||||
this.pageForm.khid = this.kh[0].id
|
||||
} else {
|
||||
this.kh = []
|
||||
this.pageForm.khid = ""
|
||||
}
|
||||
})
|
||||
},
|
||||
async khSearch() {
|
||||
await this.getKh()
|
||||
},
|
||||
viewUpload(nr, bz, row) {
|
||||
this.data = {nr, bz, clnr: row.clnr, ...row.zp}
|
||||
this.dialog_view = true
|
||||
},
|
||||
upload(nr, bz, row, index, idx) {
|
||||
this.dialog = true
|
||||
if (row.zp) {
|
||||
this.data = {nr, bz, clnr: row.clnr, ...row.zp}
|
||||
} else {
|
||||
this.data = {nr, bz, clnr: row.clnr, ...row.zp}
|
||||
}
|
||||
this.row = row
|
||||
this.index = index
|
||||
this.idx = idx
|
||||
},
|
||||
addForm() {
|
||||
this.formData.nrs[this.idx].bzs[this.index].zp = this.data
|
||||
this.dialog = false
|
||||
},
|
||||
cancelForm() {
|
||||
this.visible = false
|
||||
this.loading = false;
|
||||
this.dialog = false;
|
||||
},
|
||||
getSummaries(param) {
|
||||
const {columns, data} = param;
|
||||
const sums = [];
|
||||
columns.forEach((column, index) => {
|
||||
if (index === 0) {
|
||||
sums[index] = '小计';
|
||||
return;
|
||||
} else if ([1, 2, 5].includes(index)) {
|
||||
sums[index] = '';
|
||||
return;
|
||||
} else if (index === 4) {
|
||||
const zpfs = data.map(v => v['zp']['zpf'])
|
||||
sums[index] = zpfs.reduce((a, b) => {
|
||||
return a + b;
|
||||
})
|
||||
return;
|
||||
}
|
||||
const values = data.map(item => Number(item[column.property]));
|
||||
if (!values.every(value => isNaN(value))) {
|
||||
sums[index] = values.reduce((prev, curr) => {
|
||||
const value = Number(curr);
|
||||
if (!isNaN(value)) {
|
||||
return prev + curr;
|
||||
} else {
|
||||
return prev;
|
||||
}
|
||||
}, 0);
|
||||
sums[index] += ' 分';
|
||||
} else {
|
||||
sums[index] = null;
|
||||
}
|
||||
});
|
||||
return sums;
|
||||
},
|
||||
pageData() {
|
||||
sublime.showLoadingbar();
|
||||
this.tabLoading = true
|
||||
$.post(base + "/platform/ghkh/zp/pageData", this.pageForm, (data) => {
|
||||
sublime.closeLoadingbar();
|
||||
this.tabLoading = false
|
||||
if (data.code == 0) {
|
||||
this.tableData = data.data.list;
|
||||
this.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
this.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
async openAdd(row) {
|
||||
const data = await $.post(base + "/platform/ghkh/khzb/getZb", {id: row.id})
|
||||
data.nrs.forEach(v => {
|
||||
v.bzs.forEach(x => {
|
||||
if (!x.zp) {
|
||||
x.zp = {zpf: 0}
|
||||
}
|
||||
})
|
||||
})
|
||||
this.formData = data
|
||||
this.v = 'add'
|
||||
},
|
||||
async openEdit(row) {
|
||||
// const data = await $.post(base + "/platform/ghkh/khzb/getZb", {id: row.id})
|
||||
// data.nrs.forEach(v => {
|
||||
// v.bzs.forEach(x => {
|
||||
// if (!x.zp) {
|
||||
// x.zp = {zpf: null}
|
||||
// }
|
||||
// })
|
||||
// })
|
||||
// this.formData = data
|
||||
const resa = await $.post(base + '/platform/ghkh/zp/openView', {id: row.id})
|
||||
this.formData = resa.data
|
||||
this.v = 'edit'
|
||||
},
|
||||
async doAdd() {
|
||||
this.addFormData = []
|
||||
this.formData.nrs.forEach(n => {
|
||||
let zp = {}
|
||||
n.bzs.forEach(b => {
|
||||
if (b.zp) {
|
||||
zp = {
|
||||
"zb_id": this.formData.id, "nr_id": n.id,
|
||||
"bz_id": b.id, "clnr": b.zp.clnr, "zpf": b.zpf, "files": b.zp.files
|
||||
}
|
||||
} else {
|
||||
zp = {"zb_id": this.formData.id, "nr_id": n.id, "bz_id": b.id, "zpf": b.zpf}
|
||||
}
|
||||
this.addFormData.push(zp)
|
||||
})
|
||||
})
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '数据提交中...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: 'rgba(0, 0, 0, 0.7)'
|
||||
});
|
||||
const res = await $.post(base + "/platform/ghkh/zp/doAdd", {zp: JSON.stringify(this.addFormData)})
|
||||
if (res.code === 0) {
|
||||
this.pageData()
|
||||
this.$message.success(res.msg)
|
||||
} else {
|
||||
this.$message.error(res.msg)
|
||||
}
|
||||
loading.close()
|
||||
const resa = await $.post(base + '/platform/ghkh/zp/openView', {id: this.formData.id})
|
||||
await this.$nextTick()
|
||||
this.formData = resa.data
|
||||
},
|
||||
doEdit() {
|
||||
this.formData.nrs.forEach(nr => {
|
||||
nr.bzs.forEach(bz => {
|
||||
if (bz.zp) {
|
||||
bz.zp = {
|
||||
...bz.zp, "zpf": bz.zpf,
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '数据提交中...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: 'rgba(0, 0, 0, 0.7)'
|
||||
});
|
||||
$.post(base + "/platform/ghkh/zp/doEdit", {zb: JSON.stringify(this.formData)}, (data) => {
|
||||
if (data.code == 0) {
|
||||
this.pageData()
|
||||
this.$message.success(data.msg)
|
||||
} else {
|
||||
this.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
loading.close()
|
||||
})
|
||||
},
|
||||
subXgh() {
|
||||
this.formData.nrs.forEach(nr => {
|
||||
nr.bzs.forEach(bz => {
|
||||
if (bz.zp) {
|
||||
bz.zp = {
|
||||
"bz": bz.zp.bz,
|
||||
"files": bz.zp.files,
|
||||
"clnr": bz.zp.clnr,
|
||||
"zb_id": this.formData.id,
|
||||
"nr_id": nr.id,
|
||||
"bz_id": bz.id,
|
||||
"zpf": bz.zpf
|
||||
}
|
||||
/* bz.zp = {
|
||||
...bz.zp, "zpf": bz.zpf,
|
||||
}*/
|
||||
} else {
|
||||
bz.zp = {"zb_id": this.formData.id, "nr_id": nr.id, "bz_id": bz.id, "zpf": bz.zpf}
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '数据提交中...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: 'rgba(0, 0, 0, 0.7)'
|
||||
});
|
||||
$.post(base + "/platform/ghkh/zp/subXgh", {zb: JSON.stringify(this.formData)}, (data) => {
|
||||
if (data.code == 0) {
|
||||
this.v = 'index'
|
||||
this.pageData()
|
||||
this.$message.success(data.msg)
|
||||
} else {
|
||||
this.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
loading.close()
|
||||
})
|
||||
},
|
||||
doSchool() {
|
||||
},
|
||||
openView(row) {
|
||||
this.v = 'View'
|
||||
$.post(base + "/platform/ghkh/zp/openView", {id: row.id}, (res) => {
|
||||
res.data.nrs.forEach(nr => {
|
||||
nr.bzs.forEach(bz => {
|
||||
if (bz.zp) {
|
||||
bz.zpf = bz.zp.zpf
|
||||
bz.clnr = bz.zp.clnr
|
||||
}
|
||||
})
|
||||
})
|
||||
this.formData = res.data;
|
||||
})
|
||||
},
|
||||
doSearch() {
|
||||
this.pageForm.pageNumber = 1
|
||||
this.pageData();
|
||||
},
|
||||
pageNumberChange(val) {//页码更新操作
|
||||
this.pageForm.pageNumber = val;
|
||||
this.pageData();
|
||||
},
|
||||
pageSizeChange(val) {//分页大小更新操作
|
||||
this.pageForm.pageSize = val;
|
||||
this.pageData();
|
||||
},
|
||||
|
||||
|
||||
},
|
||||
async created() {
|
||||
this.pageData();
|
||||
}
|
||||
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,942 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<!--
|
||||
三八妇女活动管理
|
||||
-->
|
||||
<style>
|
||||
.w-e-text-container {
|
||||
min-height: 200px !important;
|
||||
max-height: 700px !important;
|
||||
height: auto !important;
|
||||
}
|
||||
|
||||
.w-e-text {
|
||||
min-height: 200px !important;
|
||||
max-height: 700px !important;
|
||||
height: auto !important;
|
||||
}
|
||||
|
||||
.ViewDialogClass .el-collapse-item__header {
|
||||
font-size: 12px;
|
||||
color: rgb(150, 150, 150);
|
||||
/*font-weight: bold;*/
|
||||
background-color: white;
|
||||
}
|
||||
|
||||
.el-collapse-item__wrap {
|
||||
border: none;
|
||||
}
|
||||
|
||||
.el-collapse-item__header {
|
||||
border: none;
|
||||
}
|
||||
|
||||
.avatar-uploader .el-upload {
|
||||
border: 1px dashed #d9d9d9;
|
||||
border-radius: 6px;
|
||||
cursor: pointer;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.avatar-uploader .el-upload:hover {
|
||||
border-color: #409EFF;
|
||||
}
|
||||
|
||||
.el-upload--picture-card {
|
||||
width: 80px;
|
||||
height: 80px;
|
||||
line-height: 80px;
|
||||
}
|
||||
|
||||
.el-upload-list--picture-card .el-upload-list__item {
|
||||
width: 80px;
|
||||
height: 80px;
|
||||
line-height: 80px;
|
||||
}
|
||||
|
||||
.avatar-uploader-icon {
|
||||
font-size: 28px;
|
||||
color: #8c939d;
|
||||
width: 80px;
|
||||
height: 80px;
|
||||
line-height: 80px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.avatar {
|
||||
width: 80px;
|
||||
height: 80px;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.iphonex_box {
|
||||
width: 366px;
|
||||
height: 720px;
|
||||
background: url("https://www.qmwtp.com/assets/www/ActivityPc2/img/iphoneX.png") no-repeat;
|
||||
background-size: 100% 100%;
|
||||
position: relative;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.box_title {
|
||||
position: absolute;
|
||||
width: 40%;
|
||||
top: 68px;
|
||||
color: white;
|
||||
left: 0;
|
||||
right: 0;
|
||||
margin: 0 auto;
|
||||
display: inline-block;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.new_frame {
|
||||
position: absolute;
|
||||
width: 321px;
|
||||
height: 576px;
|
||||
top: 94px;
|
||||
left: 24px;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
.clearfix:after {
|
||||
content: '';
|
||||
display: block;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.clearfix:after {
|
||||
content: '';
|
||||
display: block;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.clearfix:after {
|
||||
content: '';
|
||||
display: block;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.clearfix:after {
|
||||
visibility: hidden;
|
||||
display: block;
|
||||
font-size: 0;
|
||||
content: " ";
|
||||
clear: both;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
.clearfix:after {
|
||||
content: '';
|
||||
display: block;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.style_every {
|
||||
width: 35px;
|
||||
height: 35px;
|
||||
border-radius: 4px;
|
||||
position: relative;
|
||||
float: left;
|
||||
margin-right: 10px;
|
||||
cursor: pointer;
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
li {
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
.style_every input {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: absolute;
|
||||
opacity: 0;
|
||||
top: 0px;
|
||||
left: 0;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.style_every img {
|
||||
position: absolute;
|
||||
top: 10px;
|
||||
left: 7px;
|
||||
display: none;
|
||||
}
|
||||
|
||||
.ViewDialogClass .el-form-item {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
</style>
|
||||
<div id="app" v-cloak>
|
||||
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<div class="btn-group tool-button ">
|
||||
<el-date-picker
|
||||
placeholder="选择年"
|
||||
type="year"
|
||||
v-model="pageForm.year"
|
||||
value-format="yyyy">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
<div class="btn-group tool-button">
|
||||
<el-input placeholder="请输入内容" v-model="pageForm.hdname">
|
||||
<template slot="prepend">活动主题</template>
|
||||
</el-input>
|
||||
</div>
|
||||
<div class="btn-group tool-button">
|
||||
<el-button @click="doSearch" icon="el-icon-search" type="primary"></el-button>
|
||||
</div>
|
||||
<div class="pull-right offscreen-right">
|
||||
<el-button @click="openAdd" size="medium" type="primary"><i class="ti-plus"></i>
|
||||
创建活动
|
||||
</el-button>
|
||||
</div>
|
||||
</el-card>
|
||||
<el-card class="mt20" shadow="never">
|
||||
<el-table
|
||||
:data="tableData"
|
||||
header-align="center"
|
||||
style="width: 100%">
|
||||
<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
|
||||
align="center"
|
||||
header-align="center"
|
||||
label="主题"
|
||||
prop="hdname"
|
||||
show-overflow-tooltip="true">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
align="center"
|
||||
header-align="center"
|
||||
label="创建人"
|
||||
prop="cjr">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
align="center"
|
||||
header-align="center"
|
||||
label="创建时间"
|
||||
prop="hdcjsj">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
align="center"
|
||||
header-align="center"
|
||||
label="活动时间"
|
||||
prop="time"
|
||||
width="300px">
|
||||
<template slot-scope="scope">
|
||||
{{scope.row.hdkssj}} -- {{scope.row.hdjssj}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
align="center"
|
||||
header-align="center"
|
||||
label="状态"
|
||||
prop="hdflag">
|
||||
<template slot-scope="scope">
|
||||
<i class="fa fa-circle text-danger ml5"
|
||||
v-if="!scope.row.hdflag"></i>
|
||||
<i class="fa fa-circle text-success ml5"
|
||||
v-if="scope.row.hdflag"></i>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
align="center"
|
||||
header-align="center"
|
||||
label="操作"
|
||||
width="400">
|
||||
<template slot-scope="scope">
|
||||
<el-button @click="changeStatus(scope.row.hdid,true)" size="mini"
|
||||
type="success"
|
||||
v-if="scope.row.hdflag==false">开启
|
||||
</el-button>
|
||||
<el-button @click="changeStatus(scope.row.hdid,false)" size="mini"
|
||||
type="info"
|
||||
v-else>关闭
|
||||
</el-button>
|
||||
<el-button @click="sendMsg(scope.row)" size="mini" type="primary">
|
||||
通知
|
||||
</el-button>
|
||||
<el-button @click="openCode(scope.row.hdid)" size="mini" type="primary">
|
||||
二维码
|
||||
</el-button>
|
||||
<el-button @click="openEdit(scope.row.hdid)" size="mini" type="primary"
|
||||
v-if="scope.row.isSysadminH10">编辑
|
||||
</el-button>
|
||||
<el-button @click="doDelete(scope.row.hdid)" size="mini" type="danger"
|
||||
v-if="scope.row.isSysadminH10">删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #edit>
|
||||
<el-row type="flex">
|
||||
<el-col :span="9" style="position: relative;text-align: center">
|
||||
<div class="iphonex_box">
|
||||
<div class="box_title">{{formData.hdname}}</div>
|
||||
<iframe class="new_frame" frameborder="none;" id="myIframe" scrolling="auto"
|
||||
src="/platform/hd/cahdMange/mobileBox">
|
||||
|
||||
</iframe>
|
||||
</div>
|
||||
<el-button @click="refreshBox" icon="el-icon-refresh" round
|
||||
style="margin-top: 10px" type="info">刷新
|
||||
</el-button>
|
||||
</el-col>
|
||||
<el-col :span="14" offset="1">
|
||||
<el-form :model="formData" :rules="formRules"
|
||||
label-position="left"
|
||||
label-width="130px" ref="addForm" size="medium"
|
||||
style="padding-top: 20px;padding-right: 10px">
|
||||
<el-form-item label="活动主题" prop="hdname">
|
||||
<el-input placeholder="请输入活动主题" v-model="formData.hdname"></el-input>
|
||||
</el-form-item>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="活动时间" prop="time">
|
||||
<el-date-picker
|
||||
:default-time="['00:00:00']"
|
||||
end-placeholder="结束时间"
|
||||
start-placeholder="开始时间"
|
||||
style="width: 100%"
|
||||
type="datetimerange"
|
||||
v-model="formData.time"
|
||||
value-format="yyyy-MM-dd HH:mm:ss">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-form-item label="活动类别" prop="hdlb">
|
||||
<el-row style="padding-bottom: 5px" v-for="lb,idx in formData.lbs">
|
||||
<el-col :span="20">
|
||||
<el-input placeholder="请输入名称" v-model="lb.lname"></el-input>
|
||||
</el-col>
|
||||
<el-col :span="2" style="text-align: center">
|
||||
<el-button @click="formData.lbs.splice(idx+1,0,{zplbs:[{}]})"
|
||||
circle icon="el-icon-plus"
|
||||
type="warning"></el-button>
|
||||
</el-col>
|
||||
<el-col :span="2" style="text-align: center">
|
||||
<el-button :disabled="idx==0"
|
||||
@click="formData.lbs.splice(idx,1)"
|
||||
circle icon="el-icon-delete"
|
||||
type="danger"></el-button>
|
||||
</el-col>
|
||||
<el-col style="padding: 5px 0">
|
||||
<el-row style="padding-bottom: 5px"
|
||||
v-for="zplb,idx2 in lb.zplbs">
|
||||
<el-col :span="20">
|
||||
<el-col :span="4"><span class="el-form-item__label"
|
||||
v-if="idx2==0">作品类别</span><span
|
||||
v-else> </span>
|
||||
</el-col>
|
||||
<el-col :span="20">
|
||||
<el-input placeholder="请输入名称"
|
||||
v-model="zplb.zname"></el-input>
|
||||
</el-col>
|
||||
</el-col>
|
||||
<el-col :span="2" style="text-align: center">
|
||||
<el-button @click="lb.zplbs.splice(idx2+1,0,{})" circle
|
||||
icon="el-icon-plus"
|
||||
type="warning"></el-button>
|
||||
</el-col>
|
||||
<el-col :span="2" style="text-align: center">
|
||||
<el-button :disabled="idx2==0"
|
||||
@click="lb.zplbs.splice(idx2,1)"
|
||||
circle icon="el-icon-delete"
|
||||
type="danger"></el-button>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form-item>
|
||||
<el-form-item label="参加人员范围" prop="activityGroupId">
|
||||
<div style="display: flex; justify-content: space-between">
|
||||
<div style="width: 99%">
|
||||
<el-select clearable
|
||||
filterable placeholder="请选择参加人员范围"
|
||||
style="width: 99%"
|
||||
v-model="formData.activityGroupId">
|
||||
<el-option :label="item.groupName"
|
||||
:value="item.groupId"
|
||||
v-for="item in activityGroupList"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
<div>
|
||||
<el-button @click="$refs.drawerUserScope.userScopeDialog = true"
|
||||
type="primary">设置
|
||||
</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="是否推送移动端" prop="isPushHome">
|
||||
<el-radio-group size="medium" v-model="formData.isPushHome">
|
||||
<el-radio-button :label="0">不推送</el-radio-button>
|
||||
<el-radio-button :label="1">推送列表</el-radio-button>
|
||||
<el-radio-button :label="2">推送大图</el-radio-button>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="是否启用积分系统" prop="isIntegral">
|
||||
<el-radio-group size="medium" v-model="formData.isIntegral">
|
||||
<el-radio-button :label="false">不启用</el-radio-button>
|
||||
<el-radio-button :label="true">启用</el-radio-button>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item label="活动介绍" prop="hdjs">
|
||||
<el-collapse>
|
||||
<el-collapse-item>
|
||||
<template slot="title">
|
||||
点击展开 <i class="header-icon el-icon-thumb"
|
||||
style="margin-left: 5px"></i>
|
||||
</template>
|
||||
<div id="hdjsEditor"></div>
|
||||
</el-collapse-item>
|
||||
</el-collapse>
|
||||
</el-form-item>
|
||||
<el-form-item label="参加人员" prop="hdcjry">
|
||||
<el-collapse>
|
||||
<el-collapse-item>
|
||||
<template slot="title">
|
||||
点击展开 <i class="header-icon el-icon-thumb"
|
||||
style="margin-left: 5px"></i>
|
||||
</template>
|
||||
<div id="cjryEditor"></div>
|
||||
</el-collapse-item>
|
||||
</el-collapse>
|
||||
</el-form-item>
|
||||
<el-form-item label="奖励方式" prop="hdjlfs">
|
||||
<el-collapse>
|
||||
<el-collapse-item>
|
||||
<template slot="title">
|
||||
点击展开 <i class="header-icon el-icon-thumb"
|
||||
style="margin-left: 5px"></i>
|
||||
</template>
|
||||
<div id="jlfsEditor"></div>
|
||||
</el-collapse-item>
|
||||
</el-collapse>
|
||||
</el-form-item>
|
||||
<el-form-item label="活动内容" prop="hdnr">
|
||||
<el-collapse>
|
||||
<el-collapse-item>
|
||||
<template slot="title">
|
||||
点击展开 <i class="header-icon el-icon-thumb"
|
||||
style="margin-left: 5px"></i>
|
||||
</template>
|
||||
<div id="hdnrEditor"></div>
|
||||
</el-collapse-item>
|
||||
</el-collapse>
|
||||
</el-form-item>
|
||||
<el-form-item label="联系人" prop="hdlxr">
|
||||
<el-collapse>
|
||||
<el-collapse-item>
|
||||
<template slot="title">
|
||||
点击展开 <i class="header-icon el-icon-thumb"
|
||||
style="margin-left: 5px"></i>
|
||||
</template>
|
||||
<div id="lxrEditor"></div>
|
||||
</el-collapse-item>
|
||||
</el-collapse>
|
||||
</el-form-item>
|
||||
<el-form-item label="其他" prop="hdother">
|
||||
<el-collapse>
|
||||
<el-collapse-item>
|
||||
<template slot="title">
|
||||
点击展开 <i class="header-icon el-icon-thumb"
|
||||
style="margin-left: 5px"></i>
|
||||
</template>
|
||||
<div id="otherEditor"></div>
|
||||
</el-collapse-item>
|
||||
</el-collapse>
|
||||
</el-form-item>
|
||||
<el-form-item label="活动封面">
|
||||
<file-upload :files.sync="formData.files"></file-upload>
|
||||
</el-form-item>
|
||||
<el-form-item label="配色">
|
||||
<ul class="style_box old_stylebox clearfix"
|
||||
style="display: block;padding-left: 0;">
|
||||
<li :style="'background: '+color" @click="colorChange(color)"
|
||||
class="style_every"
|
||||
v-for="color,idx in colorList">
|
||||
<img :style="'display: '+(formData.hdcolor==color?'block':'none')"
|
||||
src="https://www.qmwtp.com/assets/www/ActivityPc2/img/duihao.png">
|
||||
<input checked="checked" name="sex" type="radio" value="1">
|
||||
</li>
|
||||
</ul>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row justify="end" type="flex">
|
||||
<el-button @click="save" type="success" v-show="selected=='add'">保 存</el-button>
|
||||
<el-button @click="doSubmit" type="primary">确 定</el-button>
|
||||
</el-row>
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
<el-dialog :visible.sync="dialogVisible">
|
||||
<img :src="dialogImageUrl" alt="" width="100%">
|
||||
</el-dialog>
|
||||
<drawer-user-scope
|
||||
:group_id.sync="formData.activityGroupId"
|
||||
@group_change="getActivityGroup"
|
||||
ref="drawerUserScope"
|
||||
></drawer-user-scope>
|
||||
|
||||
<send-msg :mobile_url="mobileUrl" :url="url" ref="sendMsg"></send-msg>
|
||||
|
||||
<open-qr-code :url="url" ref="openQRCode"></open-qr-code>
|
||||
|
||||
</div>
|
||||
<a id="download"></a>
|
||||
<script>
|
||||
var editor = {
|
||||
hdjsEditor: null,
|
||||
cjryEditor: null,
|
||||
jlfsEditor: null,
|
||||
hdnrEditor: null,
|
||||
lxrEditor: null,
|
||||
otherEditor: null,
|
||||
}
|
||||
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
var self = this
|
||||
var checkHdlb = function (rule, value, callback) {
|
||||
if (self.formData.lbs.length == 0) {
|
||||
callback(new Error("必填"))
|
||||
}
|
||||
self.formData.lbs.forEach(function (v) {
|
||||
v.zplbs.forEach(function (v2) {
|
||||
if (self.isNull(v2.zname)) {
|
||||
callback(new Error("有类别未填写名称"))
|
||||
}
|
||||
})
|
||||
if (self.isNull(v.lname)) {
|
||||
callback(new Error("有类别未填写名称"))
|
||||
}
|
||||
})
|
||||
callback()
|
||||
};
|
||||
return {
|
||||
hdid: GetQueryString("hdid"),
|
||||
selected: '',
|
||||
colorList: ['#6A005F', '#31cab1', '#e54242', '#ff8939', '#ffb712', '#1dc47b', '#4495f7', '#ff5e8b', '#5d6e7f'],
|
||||
fileList: [],
|
||||
delFiles: [],
|
||||
dialogImageUrl: '',
|
||||
activeNames: '',
|
||||
tableData: [],
|
||||
pageForm: {
|
||||
year: moment().format('YYYY'),
|
||||
hdtype: 2,
|
||||
searchName: "",
|
||||
searchKeyword: "",
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
pageOrderName: "",
|
||||
pageOrderBy: "",
|
||||
hdname: ""
|
||||
},
|
||||
formData: {},
|
||||
codeDialogVisible: false,
|
||||
addDialogVisible: false,
|
||||
editDialogVisible: false,
|
||||
dialogVisible: false,
|
||||
formRules: {
|
||||
hdname: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
hdjs: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
hdcjry: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
hdjlfs: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
hdnr: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
hdlxr: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
// hdother: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
time: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
hdlb: [{required: true, validator: checkHdlb, trigger: ['blur', 'change']}],
|
||||
},
|
||||
isNull: function (val) {
|
||||
if (val === null || val === undefined || val === '') {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
},
|
||||
id: '',
|
||||
activityGroupList: [],
|
||||
url: '',
|
||||
mobileUrl: '',
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'send-msg': httpVueLoader('/components/plugins/SendMsgByGroupId.vue'),
|
||||
'drawer-user-scope': httpVueLoader('/components/plugins/DrawerUserScope.vue'),
|
||||
'open-qr-code': httpVueLoader('/components/plugins/OpenQRCode.vue'),
|
||||
},
|
||||
methods: {
|
||||
async getActivityGroup() {
|
||||
const resp = await $.get('/platform/activity/basic/scope/getActivityUserScopeGroup')
|
||||
this.activityGroupList = resp.data
|
||||
},
|
||||
share: function () {
|
||||
const id = this.id
|
||||
$.get("/platform/hd/wmhdMange/findOne", {hdid: id}, function (data) {
|
||||
if (data.code == 0) {
|
||||
window.open("http://connect.qq.com/widget/shareqq/index.html?url=" + HOST_URL + "/staffActivities?id=" + id + "&title=" + data.data.hdname + "&desc=" + data.data.hdname + "")
|
||||
}
|
||||
}
|
||||
)
|
||||
},
|
||||
openCode(id) {
|
||||
this.$refs.openQRCode.openCode("/childrenActivities?id=" + id)
|
||||
},
|
||||
sendMsg(row) {
|
||||
this.mobileUrl = "/childrenActivities?id=" + row.hdid
|
||||
this.url = "/platform/hd/childhd/sczp"
|
||||
this.$refs.sendMsg.openDialog(row.activitygroupid, "亲子作品征集")
|
||||
},
|
||||
doSubmit: function () {
|
||||
if (this.selected === 'add') {
|
||||
this.doAdd()
|
||||
} else if (this.selected === 'edit') {
|
||||
this.doEdit()
|
||||
}
|
||||
},
|
||||
changeStatus: function (hdid, flag) {
|
||||
$.post(base + "/platform/hd/wmhdMange/changeStatus", {
|
||||
hdid: hdid,
|
||||
flag: flag
|
||||
}, function (data) {
|
||||
if (data.code == 0) {
|
||||
vue.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
vue.pageData();
|
||||
} else {
|
||||
vue.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
})
|
||||
},
|
||||
save: function () {
|
||||
vue.changeFormEditorData()
|
||||
localStorage.setItem("wmhd_savedata2", JSON.stringify(vue.formData))
|
||||
vue.$message({
|
||||
message: '保存成功!',
|
||||
type: 'success'
|
||||
});
|
||||
},
|
||||
changeFormEditorDataTxt() {
|
||||
this.$set(this.formData, 'hdjs', editor.hdjsEditor.txt.html())
|
||||
this.$set(this.formData, 'hdcjry', editor.cjryEditor.txt.html())
|
||||
this.$set(this.formData, 'hdjlfs', editor.jlfsEditor.txt.html())
|
||||
this.$set(this.formData, 'hdnr', editor.hdnrEditor.txt.html())
|
||||
this.$set(this.formData, 'hdlxr', editor.lxrEditor.txt.html())
|
||||
this.$set(this.formData, 'hdother', editor.otherEditor.txt.html())
|
||||
},
|
||||
changeFormEditorData() {
|
||||
this.$set(this.formData, 'hdjs', editor.hdjsEditor.txt.html())
|
||||
this.$set(this.formData, 'hdcjry', editor.cjryEditor.txt.html())
|
||||
this.$set(this.formData, 'hdjlfs', editor.jlfsEditor.txt.html())
|
||||
this.$set(this.formData, 'hdnr', editor.hdnrEditor.txt.html())
|
||||
this.$set(this.formData, 'hdlxr', editor.lxrEditor.txt.html())
|
||||
this.$set(this.formData, 'hdother', editor.otherEditor.txt.html())
|
||||
},
|
||||
refreshBox: function () {
|
||||
vue.changeFormEditorData()
|
||||
var fileList = []
|
||||
vue.fileList.forEach(function (file) {
|
||||
fileList.push(file.url)
|
||||
})
|
||||
vue.$set(vue.formData, 'fileList', fileList)
|
||||
localStorage.setItem("wmhd_boxdata", JSON.stringify(vue.formData))
|
||||
$('#myIframe').attr('src', $('#myIframe').attr('src'));
|
||||
},
|
||||
colorChange: function (color, idx) {
|
||||
this.formData.hdcolor = color
|
||||
},
|
||||
handlePictureCardPreview: function (file) {
|
||||
this.dialogImageUrl = file.url;
|
||||
this.dialogVisible = true;
|
||||
},
|
||||
handleChange: function (file, fileList) {
|
||||
var self = this;
|
||||
if (file.size == 0) {
|
||||
self.$message.warning("您选择的是空文件!");
|
||||
for (var i = 0; i < fileList.length; i++) {
|
||||
if (file == fileList[i]) {
|
||||
fileList.splice(i, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
self.fileList = fileList;
|
||||
},
|
||||
handleRemove: function (file, fileList) {
|
||||
var self = this;
|
||||
self.fileList = fileList;
|
||||
if (file.status == 'ok') {
|
||||
console.log("增加要删除的文件:" + file.name)
|
||||
self.delFiles.push({uid: file.uid, url: file.urlx})
|
||||
}
|
||||
},
|
||||
doDelete: function (id) {
|
||||
var self = this;
|
||||
this.$confirm('确定要删除吗?这将会删除目前所有已提交的作品数据!', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: function (a, b) {
|
||||
if ("confirm" == a) {//确认后再执行
|
||||
$.post(base + "/platform/hd/wmhdMange/delete", {hdid: id}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.pageData();
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
async openEdit(id) {
|
||||
this.formData = {};
|
||||
this.fileList = []
|
||||
this.delFiles = []
|
||||
this.selected = 'edit'
|
||||
if (this.$refs["addForm"])
|
||||
this.$refs["addForm"].resetFields();
|
||||
const data = await $.get("/platform/hd/wmhdMange/findOne", {hdid: id})
|
||||
if (data.code == 0) {
|
||||
data.data.time = [data.data.hdkssj, data.data.hdjssj]
|
||||
this.formData = data.data
|
||||
this.$refs.guava.edit()
|
||||
this.$nextTick(() => {
|
||||
E = window.wangEditor
|
||||
for (key in editor) {
|
||||
$('#' + key).html("")
|
||||
editor[key] = new E('#' + key)
|
||||
editor[key].create()
|
||||
}
|
||||
editor.hdjsEditor.txt.html(vue.formData.hdjs)
|
||||
editor.cjryEditor.txt.html(vue.formData.hdcjry)
|
||||
editor.jlfsEditor.txt.html(vue.formData.hdjlfs)
|
||||
editor.hdnrEditor.txt.html(vue.formData.hdnr)
|
||||
editor.lxrEditor.txt.html(vue.formData.hdlxr)
|
||||
editor.otherEditor.txt.html(vue.formData.hdother)
|
||||
this.refreshBox()
|
||||
})
|
||||
} else {
|
||||
this.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
},
|
||||
async doEdit() {
|
||||
this.changeFormEditorDataTxt()
|
||||
this.$refs["addForm"].validate(async valid => {
|
||||
if (valid) {
|
||||
this.changeFormEditorData()
|
||||
this.formData.hdkssj = this.formData.time[0]
|
||||
this.formData.hdjssj = this.formData.time[1]
|
||||
|
||||
let loading = this.$loading({
|
||||
lock: true,
|
||||
text: '数据正在提交中,请稍后...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: 'rgba(0, 0, 0, 0.7)'
|
||||
})
|
||||
|
||||
const reps = await $.post("/platform/hd/wmhdMange/doEdit", {hdxx: JSON.stringify(this.formData)})
|
||||
loading.close()
|
||||
if (reps.code === 0) {
|
||||
this.$message.success(reps.msg)
|
||||
this.$refs.guava.index()
|
||||
this.pageData()
|
||||
} else {
|
||||
this.$message.warning(reps.msg)
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
doAdd() {
|
||||
this.changeFormEditorDataTxt()
|
||||
this.$refs["addForm"].validate(async valid => {
|
||||
if (valid) {
|
||||
this.changeFormEditorData()
|
||||
this.formData.hdkssj = this.formData.time[0]
|
||||
this.formData.hdjssj = this.formData.time[1]
|
||||
|
||||
var loading = this.$loading({
|
||||
lock: true,
|
||||
text: '数据正在提交中,请稍后...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: 'rgba(0, 0, 0, 0.7)'
|
||||
});
|
||||
const reps = await $.post("/platform/hd/wmhdMange/doAdd", {hdxx: JSON.stringify(this.formData)})
|
||||
loading.close()
|
||||
if (reps.code === 0) {
|
||||
this.$message.success(reps.msg)
|
||||
this.$refs.guava.index()
|
||||
localStorage.removeItem("wmhd_savedata")
|
||||
this.pageData()
|
||||
} else {
|
||||
this.$message.warning(reps.msg)
|
||||
}
|
||||
|
||||
}
|
||||
})
|
||||
},
|
||||
openAdd() {
|
||||
var self = this;
|
||||
this.selected = 'add'
|
||||
|
||||
if (localStorage.getItem("wmhd_savedata2")) {
|
||||
try {
|
||||
this.formData = JSON.parse(localStorage.getItem("wmhd_savedata2"))
|
||||
} catch (e) {
|
||||
localStorage.removeItem('wmhd_savedata2')
|
||||
this.formData = {
|
||||
hdtype: 2,
|
||||
hdcolor: this.colorList[0],
|
||||
username: "${@shiro.getPrincipalProperty('username')}",
|
||||
hdcjsj: moment().format('YYYY-MM-DD'),
|
||||
lbs: [{zplbs: [{}]}],
|
||||
};
|
||||
}
|
||||
} else {
|
||||
this.formData = {
|
||||
isPushHome: 0,
|
||||
isIntegral: false,
|
||||
hdtype: 2,
|
||||
hdcolor: this.colorList[0],
|
||||
username: "${@shiro.getPrincipalProperty('username')}",
|
||||
hdcjsj: moment().format('YYYY-MM-DD'),
|
||||
lbs: [{zplbs: [{}]}],
|
||||
};//打开新增窗口,表单先清空
|
||||
}
|
||||
|
||||
this.fileList = []
|
||||
if (this.$refs["addForm"])
|
||||
this.$refs["addForm"].resetFields();
|
||||
// this.addDialogVisible = true;
|
||||
this.$refs.guava.edit()
|
||||
vue.$nextTick(function () {
|
||||
E = window.wangEditor
|
||||
menu = [
|
||||
'head', // 标题
|
||||
'bold', // 粗体
|
||||
'fontSize', // 字号
|
||||
'fontName', // 字体
|
||||
'italic', // 斜体
|
||||
'underline', // 下划线
|
||||
'strikeThrough', // 删除线
|
||||
'foreColor', // 文字颜色
|
||||
// 'backColor', // 背景颜色
|
||||
'link', // 插入链接
|
||||
'list', // 列表
|
||||
'justify', // 对齐方式
|
||||
'quote', // 引用
|
||||
'emoticon', // 表情
|
||||
// 'image', // 插入图片
|
||||
'table', // 表格
|
||||
// 'code', // 插入代码
|
||||
// 'undo', // 撤销
|
||||
// 'redo' // 重复
|
||||
]
|
||||
for (key in editor) {
|
||||
$('#' + key).html("")
|
||||
editor[key] = new E('#' + key)
|
||||
editor[key].config.menus = menu
|
||||
editor[key].create()
|
||||
}
|
||||
editor.hdjsEditor.txt.html(vue.formData.hdjs)
|
||||
editor.cjryEditor.txt.html(vue.formData.hdcjry)
|
||||
editor.jlfsEditor.txt.html(vue.formData.hdjlfs)
|
||||
editor.hdnrEditor.txt.html(vue.formData.hdnr)
|
||||
editor.lxrEditor.txt.html(vue.formData.hdlxr)
|
||||
editor.otherEditor.txt.html(vue.formData.hdother)
|
||||
|
||||
if (localStorage.getItem("wmhd_savedata2")) {
|
||||
vue.refreshBox()
|
||||
} else {
|
||||
$('#myIframe').attr('src', $('#myIframe').attr('src'));
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
pageData: function () {//加载分页数据
|
||||
var self = this;
|
||||
sublime.showLoadingbar();//显示loading
|
||||
$.post(base + "/platform/hd/wmhdMange/data", self.pageForm, function (data) {
|
||||
sublime.closeLoadingbar();//关闭loading
|
||||
if (data.code == 0) {
|
||||
data.data.list.forEach(v => {
|
||||
if ("${@shiro.hasRole('sysadmin')}" === 'false') {
|
||||
const user = "${@shiro.getPrincipalProperty('id')}"
|
||||
return v.isSysadminH10 = v.hdcjr === user
|
||||
}
|
||||
return v.isSysadminH10 = true
|
||||
})
|
||||
self.tableData = data.data.list;
|
||||
self.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
,
|
||||
},
|
||||
created() {
|
||||
this.pageData();
|
||||
this.getActivityGroup()
|
||||
if (this.hdid) {
|
||||
setTimeout(() => {
|
||||
this.openAdd()
|
||||
}, 500)
|
||||
|
||||
}
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,199 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app">
|
||||
<guava>
|
||||
<el-card shadow="never">
|
||||
|
||||
<div class="btn-group tool-button">
|
||||
<el-date-picker :clearable="false"
|
||||
@change="yearChange"
|
||||
placeholder="年度"
|
||||
type="year"
|
||||
v-model="pageForm.year"
|
||||
value-format="yyyy"></el-date-picker>
|
||||
|
||||
<el-select :clearable="false" v-model="pageForm.hdid">
|
||||
<el-option :key="i.value"
|
||||
:label="i.label"
|
||||
:value="i.value"
|
||||
v-for="i in hdxxlist"></el-option>
|
||||
</el-select>
|
||||
<!-- <el-cascader :options="hdxxlist"
|
||||
@change="(v)=>{ pageForm.hdid = clone(v).pop() }"
|
||||
clearable filterable
|
||||
placeholder="请选择活动主题"
|
||||
v-model="pageForm.hdids"></el-cascader>-->
|
||||
</div>
|
||||
|
||||
<div class="btn-group tool-button">
|
||||
<el-input @keyup.enter.native="doSearch" clearable
|
||||
placeholder="请输入内容" v-model="pageForm.searchKeyword">
|
||||
<el-select clearable placeholder="查询类型" slot="prepend"
|
||||
style="width: 120px;"
|
||||
v-model="pageForm.searchName">
|
||||
<!-- <el-option v-if="hasSuperAdminOrXghRole" label="分工会" value="gh.unionname"></el-option>-->
|
||||
<!-- <el-option label="单位" value="dw.name"></el-option>-->
|
||||
<el-option label="教职工姓名" value="sbr.username"></el-option>
|
||||
<el-option label="工资号" value="sbr.loginname"></el-option>
|
||||
</el-select>
|
||||
</el-input>
|
||||
</div>
|
||||
|
||||
<el-row class="btn-group tool-button">
|
||||
<el-select @change="unionChange" clearable="true" filterable="true"
|
||||
placeholder="所属工会"
|
||||
style="width: 200px;"
|
||||
v-if="hasSuperAdminOrXghRole" v-model="pageForm.union">
|
||||
<el-option :label="item.unionname" :value="item.id"
|
||||
v-for="item in unions"></el-option>
|
||||
</el-select>
|
||||
</el-row>
|
||||
|
||||
<el-row class="btn-group tool-button">
|
||||
<el-select clearable="true" filterable="true" placeholder="所属单位"
|
||||
style="width: 200px;"
|
||||
v-model="pageForm.unit">
|
||||
<el-option :label="item.name" :value="item.id"
|
||||
v-for="item in units"></el-option>
|
||||
</el-select>
|
||||
</el-row>
|
||||
|
||||
<div class="btn-group tool-button">
|
||||
<el-button @click="doSearch" icon="el-icon-search" type="primary"></el-button>
|
||||
</div>
|
||||
|
||||
<div class="pull-right offscreen-right">
|
||||
<el-button @click="exportExcel(1)" size="medium">
|
||||
<i class="el-icon-tickets"></i>
|
||||
导出获奖人员名单
|
||||
</el-button>
|
||||
<el-button @click="exportExcel(2)" size="medium" v-if="hasSuperAdminOrXghRole">
|
||||
<i class="el-icon-tickets"></i>
|
||||
导出分工会获奖信息
|
||||
</el-button>
|
||||
</div>
|
||||
|
||||
</el-card>
|
||||
<el-card class="mt20" shadow="never">
|
||||
<el-table :data="tableData">
|
||||
<el-table-column align="center" header-align="center" label="序号" type="index"
|
||||
width="50">
|
||||
<template scope="scope">
|
||||
<span>{{scope.$index+(pageForm.pageNumber - 1) * pageForm.pageSize + 1}} </span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="姓名" prop="username"
|
||||
sortable></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="工资号"
|
||||
prop="loginname"></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="单位" prop="dwname"
|
||||
show-overflow-tooltip
|
||||
sortable></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="分工会" prop="ghname"
|
||||
show-overflow-tooltip
|
||||
sortable></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="获奖次数" prop="hjcount"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
</el-table>
|
||||
<el-row class="el-pagination-container">
|
||||
<el-pagination
|
||||
:current-page="pageForm.pageNumber"
|
||||
:page-size="pageForm.pageSize"
|
||||
:page-sizes="[10, 20, 30, 50]"
|
||||
:total="pageForm.totalCount"
|
||||
@current-change="pageNumberChange"
|
||||
@size-change="pageSizeChange"
|
||||
layout="total, sizes, prev, pager, next, jumper">
|
||||
</el-pagination>
|
||||
</el-row>
|
||||
</el-card>
|
||||
</guava>
|
||||
|
||||
|
||||
</div>
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
unions: [],
|
||||
units: [],
|
||||
|
||||
hasSuperAdminOrXghRole: "${@shiro.hasAnyRoles('sysadmin,A06',',')}" === 'true' ? true : false,
|
||||
pageForm: {
|
||||
year: new Date().getFullYear() + '',
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
hdid: null,
|
||||
searchName: 'sbr.username'
|
||||
},
|
||||
tableData: [],
|
||||
hdxxlist: []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async unionChange() {
|
||||
this.$set(this.pageForm, "unit", null)
|
||||
this.units = await getUnits(this.pageForm.union)
|
||||
},
|
||||
|
||||
exportExcel: function (num) {
|
||||
var self = this;
|
||||
var hdid = self.pageForm.hdid;
|
||||
if (hdid === '') {
|
||||
this.$message.warning('请先选择活动主题');
|
||||
return;
|
||||
}
|
||||
window.location.href = base + '/platform/hd/childhd/hjxx/exportExcel?num=' + num + '&hdid=' + hdid;
|
||||
},
|
||||
doSearch: function () {
|
||||
this.pageForm.pageNumber = 1;
|
||||
this.pageData();
|
||||
},
|
||||
async initHdxxlist() {
|
||||
const data = await $.post(base + '/platform/hd/childhd/zpxx/initHdxxlist')
|
||||
if (data.code == 0) {
|
||||
this.yearActivityList = data.data
|
||||
let activityList = []
|
||||
data.data.map(v => {
|
||||
activityList = activityList.concat(v.children)
|
||||
})
|
||||
this.hdxxlist = activityList
|
||||
}
|
||||
},
|
||||
yearChange(val) {
|
||||
let activityList = []
|
||||
if (val === null) {
|
||||
this.yearActivityList.map(v => {
|
||||
activityList = activityList.concat(v.children)
|
||||
})
|
||||
} else {
|
||||
let enen = this.yearActivityList.filter(v => v.value == val)
|
||||
enen.map(v => {
|
||||
activityList = activityList.concat(v.children)
|
||||
})
|
||||
}
|
||||
|
||||
this.hdxxlist = activityList
|
||||
if (this.hdxxlist && this.hdxxlist.length > 0) {
|
||||
this.$set(this.pageForm, 'hdid', this.hdxxlist[0].value);
|
||||
} else {
|
||||
this.$set(this.pageForm, 'hdid', null);
|
||||
}
|
||||
this.doSearch()
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
await this.initHdxxlist()
|
||||
await this.yearChange(new Date().getFullYear() + '');
|
||||
this.unions = await getUnions()
|
||||
this.units = await getUnits()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,871 @@
|
||||
<!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>
|
||||
<!-- 引入样式文件 -->
|
||||
<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;
|
||||
}
|
||||
|
||||
.van-nav-bar__content {
|
||||
background-color: #081776;
|
||||
}
|
||||
|
||||
.van-nav-bar__title, .van-icon-arrow-left::before {
|
||||
color: white;
|
||||
}
|
||||
</style>
|
||||
<body>
|
||||
<div v-clock id="app" v-if="showPage">
|
||||
<van-nav-bar title="亲子作品征集" fixed placeholder safe-area-inset-top @click-left="history.back()"
|
||||
:left-arrow="leftArrow"></van-nav-bar>
|
||||
<div>
|
||||
<van-swipe v-if="boxData.files&&boxData.files.length>0" class="my-swipe" :autoplay="3000"
|
||||
indicator-color="white">
|
||||
<van-swipe-item v-for="bgi in boxData.files">
|
||||
<van-image
|
||||
width="100%"
|
||||
height="200px"
|
||||
fit="cover"
|
||||
:src="FILE_DOMAIN+'/fileStreamPreview?id='+bgi.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">
|
||||
<van-form @submit="doSubmit">
|
||||
<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-field
|
||||
required
|
||||
v-model="formData.mobile"
|
||||
name="mobile"
|
||||
label="手机号码" type="tel"
|
||||
placeholder="手机号码"
|
||||
:rules="[{ required: true, message: '请填写手机号码' }]"
|
||||
></van-field>
|
||||
</van-cell-group>
|
||||
<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
|
||||
required
|
||||
v-model="formData.znxm"
|
||||
name="znxm"
|
||||
label="姓  名"
|
||||
placeholder="姓名" maxlength="30"
|
||||
:rules="[{ required: true, message: '请填写子女姓名' }]"
|
||||
></van-field>
|
||||
<van-field
|
||||
required
|
||||
v-model="formData.znnl"
|
||||
name="znnl"
|
||||
label="年  龄" type="digit"
|
||||
placeholder="年龄"
|
||||
:rules="[{ required: true, message: '请填写子女年龄' }]"
|
||||
></van-field>
|
||||
<van-field
|
||||
readonly
|
||||
clickable
|
||||
name="znxb"
|
||||
:value="formData.znxb"
|
||||
label="性  别"
|
||||
placeholder="点击选择"
|
||||
@click="znxbShowPicker = true"
|
||||
required
|
||||
:rules="[{ required: true, message: '请选择子女性别' }]"
|
||||
></van-field>
|
||||
<van-popup v-model="znxbShowPicker" position="bottom">
|
||||
<van-picker
|
||||
show-toolbar
|
||||
:columns="['男','女']"
|
||||
@confirm="function(val){formData.znxb=val;znxbShowPicker=false}"
|
||||
@cancel="zngxShowPicker = false"
|
||||
></van-picker>
|
||||
</van-popup>
|
||||
<van-field
|
||||
readonly
|
||||
clickable
|
||||
name="zngx"
|
||||
:value="formData.zngx"
|
||||
label="子女关系"
|
||||
placeholder="点击选择"
|
||||
@click="zngxShowPicker = true"
|
||||
required
|
||||
:rules="[{ required: true, message: '请选择子女关系' }]"
|
||||
></van-field>
|
||||
<van-popup v-model="zngxShowPicker" position="bottom">
|
||||
<van-picker
|
||||
show-toolbar
|
||||
:columns="zngxArr"
|
||||
@confirm="function(val){formData.zngx=val;zngxShowPicker=false}"
|
||||
@cancel="zngxShowPicker = false"
|
||||
></van-picker>
|
||||
</van-popup>
|
||||
</van-cell-group>
|
||||
</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="formData.hdlb_i" :color="boxData.hdcolor" type="line">
|
||||
<van-tab v-for="(lb,i) in boxData.lbs" :name="i" :title="lb.lname">
|
||||
<div v-if="formData.hdlb_i==i">
|
||||
<van-field style="padding-top: 30px" maxlength="15"
|
||||
:rules="[{ required: true, message: '请填写作品主题' }]"
|
||||
v-model="fd[i].zpzt"
|
||||
required
|
||||
show-word-limit
|
||||
label="作品主题" placeholder="主题"></van-field>
|
||||
<van-field
|
||||
required
|
||||
readonly
|
||||
clickable
|
||||
name="picker"
|
||||
:value="fd[i].zplb_name"
|
||||
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="function(val){fd[i].zplb=val.zid;fd[i].zplb_name=val.zname;showPicker=false}"
|
||||
@cancel="showPicker = false"
|
||||
></van-picker>
|
||||
</van-popup>
|
||||
<van-field type="textarea" show-word-limit maxlength="100" autosize
|
||||
v-model="fd[i].zpms"
|
||||
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 fd[i].imgList"
|
||||
style="border: none;padding-top: 20px;">
|
||||
<van-row style="padding: 0 15px">
|
||||
<van-col :span="6">
|
||||
<van-image
|
||||
v-if="img.id"
|
||||
width="100%"
|
||||
height="25vw"
|
||||
fit="cover"
|
||||
:src="FILE_DOMAIN+'/fileStreamPreview?id='+img.id"
|
||||
></van-image>
|
||||
<van-image
|
||||
v-else
|
||||
width="100%"
|
||||
height="25vw"
|
||||
fit="cover"
|
||||
:src="img.content"
|
||||
></van-image>
|
||||
</van-col>
|
||||
|
||||
</van-row>
|
||||
|
||||
<van-button
|
||||
native-type="button"
|
||||
@click="imgDelete(idx,i,img.filepath)"
|
||||
slot="right"
|
||||
square
|
||||
text="删除"
|
||||
type="danger"
|
||||
class="delete-button"
|
||||
></van-button>
|
||||
</van-swipe-cell>
|
||||
<van-field>
|
||||
<template #input>
|
||||
<van-uploader multiple :preview-image="false" :before-read="beforeReadImg"
|
||||
accept="image/*"
|
||||
:max-count="5"
|
||||
v-model="fd[i].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 fd[i].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.filename ? video.filename : video.file.name }}
|
||||
</div>
|
||||
</template>
|
||||
</van-image>
|
||||
</van-col>
|
||||
|
||||
</van-row>
|
||||
|
||||
<van-button
|
||||
native-type="button"
|
||||
@click="videoDelete(idx,i,video.filepath)"
|
||||
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="fd[i].videoList"></van-uploader>
|
||||
</template>
|
||||
</van-field>
|
||||
</div>
|
||||
</van-tab>
|
||||
</van-tabs>
|
||||
|
||||
<span style="padding-left: 15px;font-size: 12px;color: rgb(160,160,160)">(注意:图片最多5张,视频最大200M。)</span>
|
||||
<div style="margin: 16px;">
|
||||
<van-button :disabled="subDis" round block :color="boxData.hdcolor" type="info"
|
||||
native-type="submit">
|
||||
提交
|
||||
</van-button>
|
||||
</div>
|
||||
</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>
|
||||
const FILE_DOMAIN = "${AppFileDomain!}"
|
||||
|
||||
function getQueryVariable(variable) {
|
||||
var query = window.location.search.substring(1);
|
||||
var vars = query.split("&");
|
||||
for (var i = 0; i < vars.length; i++) {
|
||||
var pair = vars[i].split("=");
|
||||
if (pair[0] == variable) {
|
||||
return pair[1];
|
||||
}
|
||||
}
|
||||
return '';
|
||||
}
|
||||
|
||||
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 {
|
||||
readytodelfile: [],
|
||||
leftArrow: false,
|
||||
zngxArr: ['父亲', '母亲', '第三代'],
|
||||
boxData: {},
|
||||
subDis: false,
|
||||
showPage: false,
|
||||
znxbShowPicker: false,
|
||||
zngxShowPicker: false,
|
||||
showPicker: false,
|
||||
showMsg: false,
|
||||
percent: 0,
|
||||
flag: true,
|
||||
showPlan: true,
|
||||
msg: '',
|
||||
formData: {
|
||||
hdlb_i: 0,
|
||||
},
|
||||
fd: [],
|
||||
active: 0,
|
||||
isNull(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: {
|
||||
imgDelete(idx, i, filepath) {
|
||||
this.fd[i].imgList.splice(idx, 1)
|
||||
this.readytodelfile.push(filepath);
|
||||
},
|
||||
videoDelete(idx, i, filepath) {
|
||||
this.fd[i].videoList.splice(idx, 1)
|
||||
this.readytodelfile.push(filepath);
|
||||
},
|
||||
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]
|
||||
}
|
||||
},
|
||||
async doInput(val) {
|
||||
this.$set(this.formData, 'username', undefined)
|
||||
this.$set(this.formData, 'unionname', undefined)
|
||||
this.$set(this.formData, 'userid', undefined)
|
||||
const data = await $.get("/childrenActivities/queryUserByLoginname", {loginname: val})
|
||||
if (data.code == 0) {
|
||||
if (!this.isNull(data.data)) {
|
||||
this.$set(this.formData, 'userid', data.data.id)
|
||||
this.$set(this.formData, 'username', data.data.username)
|
||||
this.$set(this.formData, 'unionname', data.data.unionname)
|
||||
this.$set(this.formData, 'loginname', data.data.loginname)
|
||||
}
|
||||
}
|
||||
},
|
||||
async doSubmit() {
|
||||
if (vue.isNull(vue.formData.userid)) {
|
||||
vue.$toast.fail("请正确填写您的工资号!")
|
||||
return
|
||||
}
|
||||
const i = vue.formData.hdlb_i
|
||||
|
||||
if (vue.fd[i].videoList.length == 0 && vue.fd[i].imgList.length == 0) {
|
||||
vue.$toast.fail("请您选择要上传的作品!")
|
||||
return
|
||||
}
|
||||
|
||||
const confirm = await vue.$dialog.confirm({
|
||||
title: '提醒',
|
||||
message: '您当前选择的是“' + vue.boxData.lbs[i].lname + '”,是否确认上传?上传后您将不能对已上传的作品进行更改'
|
||||
})
|
||||
if (confirm === "confirm") {
|
||||
setTimeout(() => {
|
||||
this.showMsg = true
|
||||
this.showPlan = true
|
||||
this.percent = 0
|
||||
this.msg = ''
|
||||
|
||||
let formData1 = {}
|
||||
let formData2 = new FormData();
|
||||
if (!this.isNull(this.formData.id)) {
|
||||
this.$set(formData1, "id", getQueryVariable("zpid"))
|
||||
this.$set(formData1, "hdid", getQueryVariable("id"))
|
||||
|
||||
this.$set(formData1, "sbr", this.formData.userid)
|
||||
this.$set(formData1, "mobile", this.formData.mobile)
|
||||
this.$set(formData1, "hdlb", this.boxData.lbs[i].lid)
|
||||
this.$set(formData1, "znxm", this.formData.znxm)
|
||||
this.$set(formData1, "znnl", this.formData.znnl)
|
||||
this.$set(formData1, "znxb", this.formData.znxb)
|
||||
this.$set(formData1, "zngx", this.formData.zngx)
|
||||
|
||||
this.$set(formData1, "zplb", this.fd[i].zplb)
|
||||
this.$set(formData1, "zpzt", this.fd[i].zpzt)
|
||||
this.$set(formData1, "zpms", this.fd[i].zpms)
|
||||
this.$set(formData1, "sbsj", moment().format('YYYY-MM-DD HH:mm:ss'))
|
||||
|
||||
|
||||
} else {
|
||||
formData2.append("hdid", getQueryVariable("id"))
|
||||
|
||||
formData2.append("sbr", this.isNull(this.formData.userid) ? '' : this.formData.userid);
|
||||
formData2.append("mobile", vue.isNull(vue.formData.mobile) ? '' : this.formData.mobile);
|
||||
formData2.append("hdlb", vue.isNull(vue.boxData.lbs[i].lid) ? '' : this.boxData.lbs[i].lid)
|
||||
|
||||
formData2.append("znxm", this.isNull(this.formData.znxm) ? '' : this.formData.znxm);
|
||||
formData2.append("znnl", this.isNull(this.formData.znnl) ? '' : this.formData.znnl);
|
||||
formData2.append("znxb", this.isNull(this.formData.znxb) ? '' : this.formData.znxb);
|
||||
formData2.append("zngx", this.isNull(this.formData.zngx) ? '' : this.formData.zngx);
|
||||
|
||||
formData2.append("zplb", this.isNull(this.fd[i].zplb) ? '' : this.fd[i].zplb);
|
||||
formData2.append("zpzt", this.isNull(this.fd[i].zpzt) ? '' : this.fd[i].zpzt);
|
||||
formData2.append("zpms", this.isNull(this.fd[i].zpms) ? '' : this.fd[i].zpms);
|
||||
formData2.append("sbsj", moment().format('YYYY-MM-DD HH:mm:ss'));
|
||||
|
||||
vue.fd[i].imgList.forEach(function (val) {
|
||||
formData2.append("files", val.file, vue.isNull(val.ms) ? val.file.name : val.ms + getSuffix(val.file.name));
|
||||
});
|
||||
vue.fd[i].videoList.forEach(function (val) {
|
||||
formData2.append("files", val.file, vue.isNull(val.ms) ? val.file.name : val.ms + getSuffix(val.file.name));
|
||||
});
|
||||
}
|
||||
|
||||
if (!this.isNull(this.formData.id)) {
|
||||
formData2.append("data", JSON.stringify(formData1));
|
||||
formData2.append("readytodelfile", JSON.stringify(this.readytodelfile));
|
||||
this.fd[i].imgList.forEach(val => {
|
||||
formData2.append("file", val.file);
|
||||
});
|
||||
this.fd[i].videoList.forEach(val => {
|
||||
formData2.append("file", val.file);
|
||||
});
|
||||
$.ajax({
|
||||
url: "/platform/hd/childhd/sczp/doEdit",
|
||||
type: "post",
|
||||
data: formData2,
|
||||
processData: false,
|
||||
contentType: false,
|
||||
xhr: xhrOnProgress(function (e) {
|
||||
if (e.total == 0) {
|
||||
vue.percent = 0
|
||||
} else {
|
||||
vue.percent = ((e.loaded / e.total) * 100).toFixed(0);//文件上传百分比
|
||||
}
|
||||
|
||||
}),
|
||||
success: function (data) {
|
||||
if (data.code === 0) {
|
||||
|
||||
vue.formData.znxm = ''
|
||||
vue.formData.znnl = ''
|
||||
vue.formData.znxb = ''
|
||||
vue.formData.zngx = ''
|
||||
|
||||
vue.fd[i].zplb = ''
|
||||
vue.fd[i].zplb_name = ''
|
||||
vue.fd[i].zpzt = ''
|
||||
vue.fd[i].zpms = ''
|
||||
vue.fd[i].sbsj = ''
|
||||
vue.fd[i].imgList = []
|
||||
vue.fd[i].videoList = []
|
||||
vue.fd[i].audioList = []
|
||||
Cookies.remove('ca_formData');
|
||||
|
||||
|
||||
vue.msg = '<p class="weui-msg__desc">我们已收到您的作品!<br/>非常感谢您的支持!</p>'
|
||||
vue.flag = true
|
||||
} else {
|
||||
|
||||
vue.msg = '<p class="weui-msg__desc">非常抱歉对您造成的不便!<br/>请联系系统管理员进行修复!</p>'
|
||||
vue.flag = false
|
||||
}
|
||||
vue.showPlan = false
|
||||
window.history.back()
|
||||
},
|
||||
error: function (data) {
|
||||
vue.msg = '<p class="weui-msg__desc">非常抱歉对您造成的不便!<br/>请联系系统管理员进行修复!</p>'
|
||||
vue.flag = false
|
||||
vue.showPlan = false
|
||||
}
|
||||
});
|
||||
|
||||
} else {
|
||||
$.ajax({
|
||||
url: "/childrenActivities/doSubmit",
|
||||
type: "post",
|
||||
data: formData2,
|
||||
processData: false,
|
||||
contentType: false,
|
||||
xhr: xhrOnProgress(function (e) {
|
||||
if (e.total == 0) {
|
||||
vue.percent = 0
|
||||
} else {
|
||||
vue.percent = ((e.loaded / e.total) * 100).toFixed(0);//文件上传百分比
|
||||
}
|
||||
|
||||
}),
|
||||
success: function (data) {
|
||||
if (data.code === 0) {
|
||||
|
||||
vue.formData.znxm = ''
|
||||
vue.formData.znnl = ''
|
||||
vue.formData.znxb = ''
|
||||
vue.formData.zngx = ''
|
||||
|
||||
vue.fd[i].zplb = ''
|
||||
vue.fd[i].zplb_name = ''
|
||||
vue.fd[i].zpzt = ''
|
||||
vue.fd[i].zpms = ''
|
||||
vue.fd[i].sbsj = ''
|
||||
vue.fd[i].imgList = []
|
||||
vue.fd[i].videoList = []
|
||||
vue.fd[i].audioList = []
|
||||
Cookies.remove('ca_formData');
|
||||
|
||||
|
||||
vue.msg = '<p class="weui-msg__desc">我们已收到您的作品!<br/>非常感谢您的支持!</p>'
|
||||
vue.flag = true
|
||||
} else {
|
||||
|
||||
vue.msg = '<p class="weui-msg__desc">非常抱歉对您造成的不便!<br/>请联系系统管理员进行修复!</p>'
|
||||
vue.flag = false
|
||||
}
|
||||
vue.showPlan = false
|
||||
},
|
||||
error: function (data) {
|
||||
vue.msg = '<p class="weui-msg__desc">非常抱歉对您造成的不便!<br/>请联系系统管理员进行修复!</p>'
|
||||
vue.flag = false
|
||||
vue.showPlan = false
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
,
|
||||
500
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
},
|
||||
// 返回布尔值
|
||||
beforeReadImg: function (file) {
|
||||
return true;
|
||||
},
|
||||
// 返回布尔值
|
||||
beforeReadVideo: function (file, detail) {
|
||||
var suffix = getSuffix(file.name)
|
||||
if (suffix == null) {
|
||||
vue.$toast('获取不到后缀名!');
|
||||
return false;
|
||||
}
|
||||
// var type = suffix.toString().substring(suffix.lastIndexOf(".") + 2)
|
||||
// if (vue.videotype.indexOf(type) == -1 && vue.audiotype.indexOf(type) == -1 && vue.doctype.indexOf(type) == -1) {
|
||||
// vue.$toast('不支持的文件类型!');
|
||||
// return false;
|
||||
// }
|
||||
return true;
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
const loginname = "${@shiro.getPrincipalProperty('loginname')}"
|
||||
this.$set(this.formData, "loginname", loginname)
|
||||
this.doInput(loginname)
|
||||
const zpid = GetQueryString("zpid")
|
||||
GetQueryString("client") == "mobile" ? this.leftArrow = true : this.leftArrow = false
|
||||
this.$set(this.formData, "loginname", loginname)
|
||||
this.doInput(loginname)
|
||||
var self = this
|
||||
if (window.innerWidth > 800) {
|
||||
self.$notify({type: 'warning', message: '当前窗口宽度过大!部分区域显示会出现大小偏差'});
|
||||
}
|
||||
|
||||
if (!this.isNull(getQueryVariable("id"))) {
|
||||
$.get("/platform/hd/wmhdMange/findOne", {hdid: getQueryVariable("id")}, function (data) {
|
||||
if (data.code == 0) {
|
||||
document.getElementsByTagName("title")[0].innerText = data.data.hdname;
|
||||
data.data.lbs.forEach(function (lb, idx) {
|
||||
self.fd.push({
|
||||
zpzt: '',
|
||||
zpms: '',
|
||||
zplb: '',
|
||||
imgList: [],
|
||||
videoList: [],
|
||||
})
|
||||
})
|
||||
self.boxData = data.data
|
||||
self.formData.hdlb_i = 0
|
||||
self.showPage = true
|
||||
|
||||
if (!data.data.hdflag) {
|
||||
self.$toast.fail("当前活动未开启!");
|
||||
self.subDis = true
|
||||
} else {
|
||||
if (!(new Date(data.data.hdkssj.replace(/-/g, '/')).getTime() < new Date().getTime() && new Date().getTime() < new Date(data.data.hdjssj.replace(/-/g, '/')).getTime())) {
|
||||
self.$toast.fail("不在活动时间范围内!");
|
||||
self.subDis = true
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
if (!this.isNull(zpid)) {
|
||||
const {data, code, msg} = await $.get("/platform/hd/wmhd/findOneById", {id: zpid})
|
||||
const refs = await $.get("/mobile/cahd/list/findOne", {id: zpid})
|
||||
this.$set(this.formData, "id", refs[0].id)
|
||||
this.$set(this.formData, "hdid", refs[0].id)
|
||||
this.$set(this.formData, "userid", refs[0].sbr)
|
||||
this.$set(this.formData, "mobile", refs[0].mobile)
|
||||
this.$set(this.boxData.lbs[this.formData.hdlb_i], "lid", refs[0].hdlb)
|
||||
this.$set(this.formData, "znxm", refs[0].znxm)
|
||||
this.$set(this.formData, "znnl", refs[0].znnl)
|
||||
this.$set(this.formData, "znxb", refs[0].znxb)
|
||||
this.$set(this.formData, "zngx", refs[0].zngx)
|
||||
this.$set(this.fd[this.formData.hdlb_i], "zplb", refs[0].zplb)
|
||||
this.$set(this.fd[this.formData.hdlb_i], "zpzt", refs[0].zpzt)
|
||||
this.$set(this.fd[this.formData.hdlb_i], "zpms", refs[0].zpms)
|
||||
this.$set(this.fd[this.formData.hdlb_i], "zplb_name", refs[0].zname)
|
||||
data.forEach((v, i) => {
|
||||
v.filename = v.filename
|
||||
v.fjurl = v.filepath
|
||||
v.url = FILE_DOMAIN + v.filepath
|
||||
v.content = FILE_DOMAIN + v.filepath
|
||||
const filetype = v.filename.substring(v.filename.lastIndexOf(".") + 1)
|
||||
const aa = this.audiotype.concat(this.videotype)
|
||||
if (this.imgtype.indexOf(filetype) > -1) {
|
||||
this.fd[this.formData.hdlb_i].imgList.push(v)
|
||||
} else if (aa.indexOf(filetype) > -1) {
|
||||
this.fd[this.formData.hdlb_i].videoList.push(v);
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
function GetQueryString(name) {
|
||||
const reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
|
||||
const r = window.location.search.substr(1).match(reg);
|
||||
if (r != null) return unescape(r[2]);
|
||||
return "";
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,640 @@
|
||||
<!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.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/jquery/1.11.1/jquery.min.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-field
|
||||
required
|
||||
v-model="formData.mobile"
|
||||
name="znnl"
|
||||
label="手机号码" type="tel"
|
||||
placeholder="手机号码"
|
||||
:rules="[{ required: true, message: '请填写手机号码' }]"
|
||||
></van-field>
|
||||
</van-cell-group>
|
||||
<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
|
||||
required
|
||||
v-model="formData.znxm"
|
||||
name="znxm"
|
||||
label="姓  名"
|
||||
placeholder="姓名" maxlength="30"
|
||||
:rules="[{ required: true, message: '请填写子女姓名' }]"
|
||||
></van-field>
|
||||
<van-field
|
||||
required
|
||||
v-model="formData.znnl"
|
||||
name="znnl"
|
||||
label="年  龄" type="digit"
|
||||
placeholder="年龄"
|
||||
:rules="[{ required: true, message: '请填写子女年龄' }]"
|
||||
></van-field>
|
||||
<van-field
|
||||
readonly
|
||||
clickable
|
||||
name="znxb"
|
||||
:value="formData.znxb"
|
||||
label="性  别"
|
||||
placeholder="点击选择"
|
||||
@click="znxbShowPicker = true"
|
||||
required
|
||||
:rules="[{ required: true, message: '请选择子女性别' }]"
|
||||
></van-field>
|
||||
<van-popup v-model="znxbShowPicker" position="bottom">
|
||||
<van-picker
|
||||
show-toolbar
|
||||
:columns="['男','女']"
|
||||
@confirm="function(val){formData.znxb=val;znxbShowPicker=false}"
|
||||
@cancel="zngxShowPicker = false"
|
||||
></van-picker>
|
||||
</van-popup>
|
||||
<van-field
|
||||
readonly
|
||||
clickable
|
||||
name="zngx"
|
||||
:value="formData.zngx"
|
||||
label="子女关系"
|
||||
placeholder="点击选择"
|
||||
@click="zngxShowPicker = true"
|
||||
required
|
||||
:rules="[{ required: true, message: '请选择子女关系' }]"
|
||||
></van-field>
|
||||
<van-popup v-model="zngxShowPicker" position="bottom">
|
||||
<van-picker
|
||||
show-toolbar
|
||||
:columns="zngxArr"
|
||||
@confirm="function(val){formData.zngx=val;zngxShowPicker=false}"
|
||||
@cancel="zngxShowPicker = false"
|
||||
></van-picker>
|
||||
</van-popup>
|
||||
</van-cell-group>
|
||||
</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="formData.hdlb_i" :color="boxData.hdcolor" type="line">
|
||||
<van-tab v-for="lb,i in boxData.lbs" :name="i" :title="lb.lname">
|
||||
<div v-if="formData.hdlb_i==i">
|
||||
<van-field style="padding-top: 30px" maxlength="15"
|
||||
:rules="[{ required: true, message: '请填写作品主题' }]"
|
||||
v-model="fd[i].zpzt"
|
||||
required
|
||||
show-word-limit
|
||||
label="作品主题" placeholder="主题"></van-field>
|
||||
<van-field
|
||||
required
|
||||
readonly
|
||||
clickable
|
||||
name="picker"
|
||||
:value="fd[i].zplb_name"
|
||||
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="function(val){fd[i].zplb=val.zid;fd[i].zplb_name=val.zname;showPicker=false}"
|
||||
@cancel="showPicker = false"
|
||||
></van-picker>
|
||||
</van-popup>
|
||||
<van-field type="textarea" show-word-limit maxlength="100" autosize
|
||||
v-model="fd[i].zpms"
|
||||
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 fd[i].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="fd[i].imgList.splice(idx,1)"
|
||||
slot="right"
|
||||
square
|
||||
text="删除"
|
||||
type="danger"
|
||||
class="delete-button"
|
||||
></van-button>
|
||||
</van-swipe-cell>
|
||||
<van-field>
|
||||
<template #input>
|
||||
<van-uploader multiple :preview-image="false" :before-read="beforeReadImg"
|
||||
accept="image/*"
|
||||
:max-count="5"
|
||||
v-model="fd[i].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 fd[i].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="fd[i].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="fd[i].videoList"></van-uploader>
|
||||
</template>
|
||||
</van-field>
|
||||
</div>
|
||||
</van-tab>
|
||||
</van-tabs>
|
||||
<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>
|
||||
</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 {
|
||||
fd: [],
|
||||
boxData: {},
|
||||
zngxArr: ['父亲', '母亲', '第三代'],
|
||||
znxbShowPicker: false,
|
||||
zngxShowPicker: false,
|
||||
showPicker: false,
|
||||
showMsg: false,
|
||||
percent: 0,
|
||||
flag: true,
|
||||
showPlan: true,
|
||||
msg: '',
|
||||
hdzplx: '1',
|
||||
formData: {
|
||||
hdlb_i: 0,
|
||||
},
|
||||
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;
|
||||
}
|
||||
// var type = suffix.toString().substring(suffix.lastIndexOf(".") + 2)
|
||||
// if (vue.videotype.indexOf(type) == -1 && vue.audiotype.indexOf(type) == -1 && vue.doctype.indexOf(type) == -1) {
|
||||
// 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 != undefined && wmhd_boxdata != null) {
|
||||
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'}]
|
||||
}]
|
||||
}
|
||||
}
|
||||
|
||||
this.boxData.lbs.forEach(function (lb, idx) {
|
||||
self.fd.push({
|
||||
zpzt: '',
|
||||
zpms: '',
|
||||
zplb: '',
|
||||
imgList: [],
|
||||
videoList: [],
|
||||
})
|
||||
})
|
||||
self.formData.hdlb_i = 0
|
||||
}
|
||||
})
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,858 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
|
||||
.tpa {
|
||||
padding: 10px;
|
||||
text-align: center;
|
||||
width: 12%;
|
||||
color: #a0a9b4;
|
||||
background-color: rgb(250, 250, 250);
|
||||
border: 1px solid rgb(220, 220, 220);
|
||||
}
|
||||
|
||||
.tpb {
|
||||
padding: 10px;
|
||||
text-align: center;
|
||||
color: #4f576b;
|
||||
width: 15%;
|
||||
border: 1px solid rgb(220, 220, 220);
|
||||
}
|
||||
|
||||
.filedialog .el-dialog__header i {
|
||||
font-size: 30px;
|
||||
}
|
||||
|
||||
.filedialog .el-dialog__body {
|
||||
padding: 20px 0 0 0;
|
||||
}
|
||||
|
||||
/*video{
|
||||
width: 100%!important;
|
||||
height: 500px!important;
|
||||
outline:none;
|
||||
}*/
|
||||
.video-js {
|
||||
width: 100%;
|
||||
height: 450px;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.vjs-tech, .video-js button {
|
||||
outline: none;
|
||||
}
|
||||
|
||||
#app .el-table th.gutter {
|
||||
display: table-cell !important
|
||||
}
|
||||
|
||||
.filedialog .el-dialog {
|
||||
min-height: 500px;
|
||||
}
|
||||
|
||||
|
||||
.video-js .vjs-big-play-button { /* 中间大的播放按钮 */
|
||||
font-size: 2.5em;
|
||||
line-height: 2.3em;
|
||||
height: 2.5em;
|
||||
width: 2.5em;
|
||||
-webkit-border-radius: 2.5em;
|
||||
-moz-border-radius: 2.5em;
|
||||
border-radius: 2.5em;
|
||||
background-color: rgba(115, 133, 159, .5);
|
||||
border-width: 0.12em;
|
||||
margin-top: -1.25em;
|
||||
margin-left: -1.75em;
|
||||
}
|
||||
|
||||
.video-js.vjs-paused .vjs-big-play-button { /* 视频暂停时显示播放按钮 */
|
||||
display: block;
|
||||
}
|
||||
|
||||
.video-js.vjs-error .vjs-big-play-button { /* 视频加载出错时隐藏播放按钮 */
|
||||
display: none;
|
||||
}
|
||||
|
||||
.vjs-loading-spinner { /* 加载圆圈 */
|
||||
font-size: 2.5em;
|
||||
width: 2em;
|
||||
height: 2em;
|
||||
border-radius: 1em;
|
||||
margin-top: -1em;
|
||||
margin-left: -1.5em;
|
||||
}
|
||||
|
||||
.el-image {
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.el-divider__text {
|
||||
color: #abc5df;
|
||||
}
|
||||
|
||||
.el-divider {
|
||||
background-color: #e5edf6;
|
||||
}
|
||||
|
||||
.view-myvideo-tab {
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
background-color: #C0C4CC;
|
||||
text-align: center;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.video-toggle-i:hover .el-icon-video-camera-solid {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.video-toggle-i:hover .el-icon-video-play {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
|
||||
.view-myvideo-tab .el-icon-video-camera-solid, .view-myvideo-tab .el-icon-video-play, .view-myvideo-tab .el-icon-document {
|
||||
color: #000000;
|
||||
line-height: 80px;
|
||||
font-size: 40px;
|
||||
}
|
||||
|
||||
|
||||
.view-myvideo-tab .el-icon-download {
|
||||
width: 100px;
|
||||
}
|
||||
|
||||
.el-icon-video-play {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.ckdialogclass .el-dialog__body {
|
||||
padding-top: 10px;
|
||||
}
|
||||
|
||||
.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;
|
||||
}
|
||||
|
||||
.ckdialogclass .el-icon-circle-close {
|
||||
color: white;
|
||||
}
|
||||
|
||||
.el-image-viewer__wrapper {
|
||||
z-index: 99999 !important;
|
||||
}
|
||||
|
||||
.el-col > .el-cascader, .el-col > .el-select, .el-col > .el-date-editor {
|
||||
width: 100% !important;
|
||||
}
|
||||
|
||||
|
||||
</style>
|
||||
|
||||
|
||||
<link rel="stylesheet" href="${base!}/assets/platform/plugins/video/css/video-js.min.css">
|
||||
<script src="${base!}/assets/platform/plugins/video/js/video.min.js"></script>
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<el-row>
|
||||
<el-row type="flex" :gutter="20">
|
||||
<el-col :span="6">
|
||||
<!-- <el-cascader placeholder="请选择活动主题"-->
|
||||
<!-- v-model="pageForm.hdids" :options="hdxxlist" @change="hdchange"-->
|
||||
<!-- clearable></el-cascader>-->
|
||||
<el-date-picker v-model="pageForm.year"
|
||||
placeholder="年度"
|
||||
type="year"
|
||||
@change="yearChange"
|
||||
value-format="yyyy"></el-date-picker>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="6">
|
||||
<el-select v-model="pageForm.hdid" @change="hdchange" clearable>
|
||||
<el-option v-for="i in hdxxlist"
|
||||
:key="i.value"
|
||||
:label="i.label"
|
||||
:value="i.value"></el-option>
|
||||
</el-select>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="6">
|
||||
<el-select v-model="pageForm.hdlb" placeholder="请选择活动类型" clearable @change="hdlbchange">
|
||||
<el-option v-for="o in hdlblist" :label="o.lname" :value="o.lid"></el-option>
|
||||
</el-select>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="6">
|
||||
<el-select v-model="pageForm.zplb" placeholder="请选择作品类型" clearable>
|
||||
<el-option v-for="o in hdzplblist" :label="o.zname" :value="o.zid"></el-option>
|
||||
</el-select>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row type="flex" :gutter="20" class="mt20">
|
||||
<el-col :span="6">
|
||||
<el-input placeholder="请输入内容" v-model="pageForm.searchKeyword"
|
||||
@keyup.enter.native="doSearch" clearable>
|
||||
<el-select v-model="pageForm.searchName" slot="prepend" placeholder="查询类型"
|
||||
clearable
|
||||
style="width: 120px">
|
||||
<el-option label="教职工姓名" value="sbr.username"></el-option>
|
||||
<el-option label="工资号" value="sbr.loginname"></el-option>
|
||||
<el-option label="子女姓名" value="xx.znxm"></el-option>
|
||||
</el-select>
|
||||
</el-input>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="6">
|
||||
<el-select v-if="hasSuperAdminOrXghRole" placeholder="所属工会" v-model="pageForm.union"
|
||||
style="width: 200px;"
|
||||
clearable="true"
|
||||
filterable="true" @change="unionChange">
|
||||
<el-option v-for="item in unions" :label="item.unionname" :value="item.id"></el-option>
|
||||
</el-select>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="6">
|
||||
<el-select placeholder="所属单位" v-model="pageForm.unit" style="width: 200px;" clearable="true"
|
||||
filterable="true">
|
||||
<el-option v-for="item in units" :label="item.name" :value="item.id"></el-option>
|
||||
</el-select>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="6">
|
||||
<el-button type="primary" icon="el-icon-search" @click="doSearch"></el-button>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-row>
|
||||
|
||||
</el-card>
|
||||
<el-card shadow="never" class="mt20">
|
||||
<el-table :data="tableData">
|
||||
<el-table-column label="序号" type="index" header-align="center" align="center" width="50">
|
||||
<template scope="scope">
|
||||
<span>{{scope.$index+(pageForm.pageNumber - 1) * pageForm.pageSize + 1}} </span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="hdname" label="活动主题" header-align="center" align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="zpzt" label="作品主题" header-align="center" align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="znxm" label="子女姓名" header-align="center" align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="sbrname" label="教职工姓名" header-align="center" align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="zngx" label="与子女关系" header-align="center" align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="loginname" label="工资号" header-align="center" align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="ghname" label="分工会" header-align="center" align="center" sortable
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="dwname" label="单位" header-align="center" align="center" sortable
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="hdlbname" label="活动类别" header-align="center" align="center" sortable
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<!-- <el-table-column prop="zplbname" label="作品类别" header-align="center" align="center" sortable-->
|
||||
<!-- show-overflow-tooltip></el-table-column>-->
|
||||
<el-table-column prop="sbsj" label="上传时间" header-align="center" align="center" sortable
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="操作" header-align="center" align="center" width="100">
|
||||
<template slot-scope="scope">
|
||||
|
||||
<el-dropdown @command="dropdownCommand">
|
||||
<el-button plain size="mini">
|
||||
<i class="ti-settings"></i>
|
||||
<span class="ti-angle-down"></span>
|
||||
</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item :command="{action:viewInfo,value:scope}">
|
||||
查看
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item
|
||||
:command="{action:dodelete,value:scope.row.id}">
|
||||
删除
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<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-card>
|
||||
</template>
|
||||
|
||||
<!-- <template #view>
|
||||
<table style="width: 100%">
|
||||
<tr style="border: 1px solid rgb(220, 220, 220);">
|
||||
<td colspan="4"
|
||||
style="text-align: center;padding: 10px;background-color: #0e78c5;color: white;font-size: 18px;font-weight:500">
|
||||
作品信息
|
||||
</td>
|
||||
</tr>
|
||||
<tr style="border: 1px solid rgb(220,220,220);">
|
||||
<td class="tpa">姓名</td>
|
||||
<td class="tpb">{{viewData.sbrname}}</td>
|
||||
<td class="tpa">工资号</td>
|
||||
<td class="tpb">{{viewData.loginname}}</td>
|
||||
</tr>
|
||||
<tr style="border: 1px solid rgb(220,220,220);">
|
||||
<td class="tpa">单位</td>
|
||||
<td class="tpb">{{viewData.dwname}}</td>
|
||||
<td class="tpa">工会</td>
|
||||
<td class="tpb">{{viewData.ghname}}</td>
|
||||
</tr>
|
||||
<tr style="border: 1px solid rgb(220,220,220);">
|
||||
<td class="tpa">子女姓名</td>
|
||||
<td class="tpb">{{viewData.znxm}}</td>
|
||||
<td class="tpa">子女年龄</td>
|
||||
<td class="tpb">{{viewData.znnl}}</td>
|
||||
</tr>
|
||||
<tr style="border: 1px solid rgb(220,220,220);">
|
||||
<td class="tpa">子女性别</td>
|
||||
<td class="tpb">{{viewData.znxb}}</td>
|
||||
<td class="tpa">关系</td>
|
||||
<td class="tpb">{{viewData.zngx}}</td>
|
||||
</tr>
|
||||
<tr style="border: 1px solid rgb(220,220,220);">
|
||||
<td class="tpa">活动类别</td>
|
||||
<td class="tpb">
|
||||
<span>{{viewData.hdlbname}}</span>
|
||||
</td>
|
||||
<td class="tpa">作品类别</td>
|
||||
<td class="tpb">
|
||||
<span>{{viewData.zplbname}}</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr style="border: 1px solid rgb(220,220,220);">
|
||||
<td class="tpa">作品主题</td>
|
||||
<td class="tpb" colspan="3">{{viewData.zpzt}}</td>
|
||||
</tr>
|
||||
<tr style="border: 1px solid rgb(220,220,220);">
|
||||
<td class="tpa">作品描述</td>
|
||||
<td class="tpb" colspan="3">{{viewData.zpms}}</td>
|
||||
</tr>
|
||||
<tr style="border: 1px solid rgb(220,220,220);">
|
||||
<td class="tpa">作品信息</td>
|
||||
<td class="tpb" colspan="3">
|
||||
<el-row>
|
||||
<el-divider>照片 <i class="el-icon-picture-outline"></i></el-divider>
|
||||
<div style="text-align: left;" v-if="img2List.length>0">
|
||||
<div v-for="item in img2List"
|
||||
style="display: inline-block;width: 100px;margin-right:10px">
|
||||
<el-image lazy :z-index="999999999"
|
||||
style="width: 100px;height: 100px;"
|
||||
:src="item.url"
|
||||
:preview-src-list="prevImgList">
|
||||
</el-image>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div v-else style="text-align: center;color: #c2bbbb;font-size: 10px;">
|
||||
没有照片。
|
||||
</div>
|
||||
</el-row>
|
||||
|
||||
<el-row>
|
||||
<el-divider>视频 <i class="el-icon-video-camera"></i></el-divider>
|
||||
<div style="text-align: left;" v-if="videoList.length>0">
|
||||
<div v-for="item in videoList">
|
||||
<el-tooltip class="item" effect="dark" placement="right-start">
|
||||
<div slot="content">{{item.fjname}}</div>
|
||||
<div class="view-myvideo-tab">
|
||||
<div class="video-toggle-i"
|
||||
@click="playVideo('${AppFileDomain!}'+item.filepath)">
|
||||
<i class="el-icon-video-camera-solid"></i>
|
||||
<i class="el-icon-video-play"></i>
|
||||
</div>
|
||||
|
||||
<span class="file-down-span"
|
||||
style="bottom: 0;height: 20px;display: inline-block;"
|
||||
@click="dd3s.download(item.filepath,item.filename)">
|
||||
<i class="el-icon-download"></i>
|
||||
</span>
|
||||
|
||||
</div>
|
||||
</el-tooltip>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div v-else style="text-align: center;color: #c2bbbb;font-size: 10px;">
|
||||
没有视频。
|
||||
</div>
|
||||
</el-row>
|
||||
|
||||
<el-row>
|
||||
<el-divider>音频 <i class="el-icon-video-camera"></i></el-divider>
|
||||
<div style="text-align: left;" v-if="audioList.length>0">
|
||||
<div v-for="item in audioList">
|
||||
<audio id="amusic" preload="auto" controls style="width: 100%;outline: none;">
|
||||
<source :src="'${AppFileDomain!}'+item.filepath"/>
|
||||
</audio>
|
||||
</div>
|
||||
</div>
|
||||
<div v-else style="text-align: center;color: #c2bbbb;font-size: 10px;">
|
||||
没有音频。
|
||||
</div>
|
||||
</el-row>
|
||||
|
||||
<el-row>
|
||||
<el-divider>文档 <i class="el-icon-document-copy"></i></el-divider>
|
||||
<div style="text-align: left;" v-if="docList.length>0">
|
||||
<div v-for="item in docList">
|
||||
<el-tooltip class="item" effect="dark" placement="right-start">
|
||||
<div slot="content">{{item.fjname}}</div>
|
||||
<div class="view-myvideo-tab" style="background-color: #f6f6f6">
|
||||
<div class="video-toggle-i" @click="dd3s.preview(item.filepath,item.id)">
|
||||
<i class="el-icon-document"></i>
|
||||
</div>
|
||||
|
||||
<span class="file-down-span"
|
||||
style="bottom: 0;height: 20px;display: inline-block;"
|
||||
@click="dd3s.download(item.filepath,item.filename)">
|
||||
<i class="el-icon-download"></i>
|
||||
</span>
|
||||
</div>
|
||||
</el-tooltip>
|
||||
</div>
|
||||
</div>
|
||||
<div v-else style="text-align: center;color: #c2bbbb;font-size: 10px;">
|
||||
没有文档。
|
||||
</div>
|
||||
</el-row>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</template>-->
|
||||
<template #view>
|
||||
|
||||
<el-form label-suffix=":" label-position="left" style="padding: 40px" label-width="110px">
|
||||
<el-form-item class="item-center"></el-form-item>
|
||||
|
||||
<el-row gutter="40">
|
||||
<vi-title title="基础信息"></vi-title>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="姓名">{{viewData.sbrname}}</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="工资号">{{viewData.loginname}}</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="单位">{{viewData.dwname}}</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="工会">{{viewData.ghname}}</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="子女性别">{{viewData.znxb}}</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="关系">{{viewData.zngx}}</el-form-item>
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
|
||||
<el-row gutter="40">
|
||||
<vi-title title="作品信息"></vi-title>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="活动类别">{{viewData.hdlbname}}</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="作品类别">{{viewData.zplbname}}</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="作品主题">{{viewData.zpzt}}</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="作品描述">{{viewData.zpms}}</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row gutter="40">
|
||||
<vi-title title="照片"></vi-title>
|
||||
<div style="text-align: left;" v-if="img2List.length>0">
|
||||
<div v-for="item in img2List"
|
||||
style="display: inline-block;width: 100px;margin-right:10px">
|
||||
<el-image lazy :z-index="999999999"
|
||||
style="width: 100px;height: 100px;"
|
||||
:src="item.url"
|
||||
:preview-src-list="prevImgList">
|
||||
</el-image>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div v-else style="text-align: center;color: #c2bbbb;font-size: 10px;">
|
||||
没有照片。
|
||||
</div>
|
||||
</el-row>
|
||||
|
||||
<el-row gutter="40">
|
||||
<vi-title title="视频"></vi-title>
|
||||
<div style="text-align: left;" v-if="videoList.length>0">
|
||||
<div v-for="item in videoList">
|
||||
<el-tooltip class="item" effect="dark" placement="right-start">
|
||||
<div slot="content">{{item.fjname}}</div>
|
||||
<div class="view-myvideo-tab">
|
||||
<div class="video-toggle-i"
|
||||
@click="playVideo(item.url)">
|
||||
<i class="el-icon-video-camera-solid"></i>
|
||||
<i class="el-icon-video-play"></i>
|
||||
</div>
|
||||
|
||||
<span class="file-down-span"
|
||||
style="bottom: 0;height: 20px;display: inline-block;"
|
||||
@click="dd3s.download(item.filepath,item.filename)">
|
||||
<i class="el-icon-download"></i>
|
||||
</span>
|
||||
|
||||
</div>
|
||||
</el-tooltip>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div v-else style="text-align: center;color: #c2bbbb;font-size: 10px;">
|
||||
没有视频。
|
||||
</div>
|
||||
</el-row>
|
||||
|
||||
|
||||
<el-row gutter="40">
|
||||
<vi-title title="音频"></vi-title>
|
||||
<div style="text-align: left;" v-if="audioList.length>0">
|
||||
<div v-for="item in audioList">
|
||||
<audio id="amusic" preload="auto" controls style="width: 100%;outline: none;">
|
||||
<!-- <source :src="https://cdn.moefe.org/music/mp3/thing.mp3" />-->
|
||||
<source :src="item.url"/>
|
||||
</audio>
|
||||
</div>
|
||||
</div>
|
||||
<div v-else style="text-align: center;color: #c2bbbb;font-size: 10px;">
|
||||
没有音频。
|
||||
</div>
|
||||
</el-row>
|
||||
|
||||
|
||||
<el-row gutter="40">
|
||||
<vi-title title="文档"></vi-title>
|
||||
<div style="text-align: left;" v-if="docList.length>0">
|
||||
<div v-for="item in docList">
|
||||
<el-tooltip class="item" effect="dark" placement="right-start">
|
||||
<div slot="content">{{item.fjname}}</div>
|
||||
<div class="view-myvideo-tab" style="background-color: #f6f6f6">
|
||||
<div class="video-toggle-i" @click="dd3s.preview(item.filepath,item.id)">
|
||||
<i class="el-icon-document"></i>
|
||||
</div>
|
||||
|
||||
<span class="file-down-span"
|
||||
style="bottom: 0;height: 20px;display: inline-block;"
|
||||
@click="dd3s.download(item.filepath,item.filename)">
|
||||
<i class="el-icon-download"></i>
|
||||
</span>
|
||||
</div>
|
||||
</el-tooltip>
|
||||
</div>
|
||||
</div>
|
||||
<div v-else style="text-align: center;color: #c2bbbb;font-size: 10px;">
|
||||
没有文档。
|
||||
</div>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</template>
|
||||
|
||||
</guava>
|
||||
|
||||
<el-dialog title="查看详情" :visible.sync="viewDialogVisible" style="z-index: 99" width="60%"
|
||||
:close-on-click-modal="false" class="ckdialogclass" top="1%">
|
||||
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog :visible.sync="fileDialogVisible" class="filedialog" @close="filedialogClose"
|
||||
:close-on-click-modal="false">
|
||||
<div id="videoContainer"></div>
|
||||
</el-dialog>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: "#app",
|
||||
data() {
|
||||
return {
|
||||
unions: [],
|
||||
units: [],
|
||||
|
||||
currenttime: moment().format('YYYY-MM-DD HH:MM:SS'),
|
||||
candelete: false,
|
||||
hasSuperAdminRole: "${@shiro.hasRole('sysadmin')}" === 'true' ? true : false,
|
||||
hasSuperAdminOrXghRole: "${@shiro.hasAnyRoles('sysadmin','A06')}" === 'true' ? true : false,
|
||||
tableData: [],
|
||||
pageForm: {
|
||||
hdid: '',
|
||||
hdlb: '',
|
||||
zplb: '',
|
||||
searchName: 'sbr.username',
|
||||
searchKeyword: '',
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
},
|
||||
videoSrc: '',
|
||||
viewDialogVisible: false,
|
||||
fileDialogVisible: false,
|
||||
imgSrc: '',
|
||||
fileList: [],
|
||||
viewData: {},
|
||||
imgtype: ['gif', 'jpg', 'png', 'jpeg'],
|
||||
videotype: ['flv', 'swf', 'mkv', 'avi', 'rm', 'rmvb', 'wmv', 'mp4', 'mov', 'mpg', 'mpeg'],
|
||||
doctype: ['doc', 'docx'],
|
||||
audiotype: ['mp3', 'wma', 'flac', 'wav', 'm4a', 'amr', 'au'],
|
||||
prevImgList: [],
|
||||
img2List: [],
|
||||
videoList: [],
|
||||
docList: [],
|
||||
audioList: [],
|
||||
hdxxlist: [],
|
||||
hdlblist: [],
|
||||
hdzplblist: []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
yearChange(val) {
|
||||
let activityList = []
|
||||
if (val === null) {
|
||||
this.yearActivityList.map(v => {
|
||||
activityList = activityList.concat(v.children)
|
||||
})
|
||||
} else {
|
||||
let enen = this.yearActivityList.filter(v => v.value == val)
|
||||
enen.map(v => {
|
||||
activityList = activityList.concat(v.children)
|
||||
})
|
||||
}
|
||||
|
||||
this.hdxxlist = activityList
|
||||
this.$set(this.pageForm, "hdid", null)
|
||||
this.$set(this.pageForm, "hdlb", null)
|
||||
this.$set(this.pageForm, "zplb", null)
|
||||
},
|
||||
dropdownCommand({action, value}) {
|
||||
if (action) action(value)
|
||||
},
|
||||
|
||||
async unionChange() {
|
||||
this.$set(this.pageForm, "unit", null)
|
||||
this.units = await getUnits(this.pageForm.union)
|
||||
},
|
||||
|
||||
pageData() {
|
||||
sublime.showLoadingbar();
|
||||
$.post('/platform/hd/childhd/zpxx/pageData', this.pageForm).then(res => {
|
||||
sublime.closeLoadingbar();
|
||||
if (res.code == 0) {
|
||||
this.tableData = res.data.list;
|
||||
this.pageForm.totalCount = res.data.totalCount;
|
||||
}
|
||||
});
|
||||
},
|
||||
pageSizeChange: function (val) {
|
||||
this.pageForm.pageSize = val;
|
||||
this.pageData();
|
||||
},
|
||||
pageNumberChange: function (val) {
|
||||
this.pageForm.pageNumber = val;
|
||||
this.pageData();
|
||||
},
|
||||
doSearch: function () {
|
||||
this.pageForm.pageNumber = 1;
|
||||
this.pageData();
|
||||
},
|
||||
viewInfo(scope) {
|
||||
this.img2List = [];
|
||||
this.prevImgList = [];
|
||||
this.videoList = [];
|
||||
this.audioList = [];
|
||||
this.docList = [];
|
||||
this.viewData = scope.row;
|
||||
$.post(base + '/platform/hd/childhd/zpxx/findOneById', {id: scope.row.id}).then(data => {
|
||||
if (data.code == 0) {
|
||||
data.data.forEach(val => {
|
||||
val.fjname = val.filename
|
||||
val.fjurl = val.filepath
|
||||
val.url = FILE_DOMAIN+'/fileStreamPreview?id='+val.id
|
||||
let filetype = val.fjname.substring(val.fjname.lastIndexOf('.') + 1, val.fjname.length).toLowerCase();
|
||||
if (this.videotype.indexOf(filetype) > -1) {
|
||||
this.videoList.push(val);
|
||||
} else if (this.imgtype.indexOf(filetype) > -1) {
|
||||
this.prevImgList.push(FILE_DOMAIN+'/fileStreamPreview?id='+val.id)
|
||||
this.img2List.push(val);
|
||||
} else if (this.doctype.indexOf(filetype) > -1) {
|
||||
this.docList.push(val);
|
||||
} else if (this.audiotype.indexOf(filetype) > -1) {
|
||||
this.audioList.push(val);
|
||||
}
|
||||
});
|
||||
// this.viewDialogVisible = true
|
||||
this.$refs.guava.view()
|
||||
}
|
||||
});
|
||||
},
|
||||
playVideo(fjurl) {
|
||||
this.fileDialogVisible = true;
|
||||
this.videoShow = true;
|
||||
this.$nextTick(function () {
|
||||
let vc = document.getElementById('videoContainer');
|
||||
let newVideo = document.createElement("div");//创建一个标签
|
||||
newVideo.innerHTML = '<video id="my-video" class="video-js vjs-default-skin vjs-big-play-centered" controls preload="auto"></video>';
|
||||
vc.appendChild(newVideo);
|
||||
let option = {autoplay: false, language: 'zh-CN'};
|
||||
let myPlayer = videojs('my-video', option, function onPlayerReady() {
|
||||
let myPlayer = this;
|
||||
myPlayer.src({src: fjurl, type: "video/mp4"});
|
||||
/*videojs.log("播放器已经准备好了!");*/
|
||||
//this.play();
|
||||
});
|
||||
})
|
||||
},
|
||||
filedialogClose() {
|
||||
//关闭的时候需要销毁video 但是随之dom元素也会被删除!!!!
|
||||
this.imgShow = false;
|
||||
this.videoShow = false;
|
||||
videojs('my-video').dispose();
|
||||
},
|
||||
downLoad: function (item) {
|
||||
window.open('/platform/hd/wmhd/download?filepath=' + item.fjurl + '&filename=' + item.fjname + "&username=" + this.ckusername);
|
||||
},
|
||||
YlDoc: function (item) {
|
||||
var self = this;
|
||||
window.open('/platform/hd/wmhd/YlDoc?fjurl=' + item.fjurl);
|
||||
},
|
||||
exportExcel() {
|
||||
let hdid = this.pageForm.hdid;
|
||||
if (hdid === '') {
|
||||
this.$message.warning('请先选择活动主题');
|
||||
return;
|
||||
}
|
||||
let hdarr = this.hdxxlist.filter(o => {
|
||||
return o.hdid == hdid;
|
||||
});
|
||||
let hdname = hdarr[0].hdname;
|
||||
window.open('/platform/hd/childhd/zpxx/exportExcel?hdid=' + hdid + '&hdname=' + hdname);
|
||||
},
|
||||
initHdxxlist() {
|
||||
$.post(base + '/platform/hd/childhd/zpxx/initHdxxlist').then(data => {
|
||||
if (data.code == 0) {
|
||||
this.yearActivityList = data.data
|
||||
let activityList = []
|
||||
data.data.map(v => {
|
||||
activityList = activityList.concat(v.children)
|
||||
})
|
||||
this.hdxxlist = activityList
|
||||
}
|
||||
});
|
||||
},
|
||||
hdchange(v) {
|
||||
this.$set(this.pageForm, 'hdlb', '');
|
||||
this.$set(this.pageForm, 'zplb', '');
|
||||
$.post('/platform/hd/childhd/zpxx/gethdlblist', {id: v}).then(data => {
|
||||
if (data.code == 0) {
|
||||
this.hdlblist = data.data;
|
||||
}
|
||||
});
|
||||
},
|
||||
hdlbchange(id) {
|
||||
this.$set(this.pageForm, 'zplb', '');
|
||||
$.post('/platform/hd/childhd/zpxx/gethdzplblist', {id: id}).then(data => {
|
||||
if (data.code == 0) {
|
||||
this.hdzplblist = data.data;
|
||||
}
|
||||
});
|
||||
},
|
||||
yearChange(val) {
|
||||
let activityList = []
|
||||
if (val === null) {
|
||||
this.yearActivityList.map(v => {
|
||||
activityList = activityList.concat(v.children)
|
||||
})
|
||||
} else {
|
||||
let enen = this.yearActivityList.filter(v => v.value == val)
|
||||
enen.map(v => {
|
||||
activityList = activityList.concat(v.children)
|
||||
})
|
||||
}
|
||||
|
||||
this.hdxxlist = activityList
|
||||
this.$set(this.pageForm, "hdid", null)
|
||||
this.$set(this.pageForm, "hdlb", null)
|
||||
this.$set(this.pageForm, "zplb", null)
|
||||
},
|
||||
dodelete(id) {
|
||||
|
||||
this.$confirm('此操作将永久删除该记录, 确定吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
$.post('/platform/hd/childhd/zpxx/dodelete', {id: id}).then(data => {
|
||||
if (data.code == 0) {
|
||||
this.doSearch();
|
||||
this.$message.success(data.msg);
|
||||
}
|
||||
});
|
||||
}).catch(() => {
|
||||
|
||||
});
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
'pageForm.hdid'(val) {
|
||||
this.$set(this.pageForm, "hdlb", null)
|
||||
this.$set(this.pageForm, "zplb", null)
|
||||
},
|
||||
'pageForm.hdlb'(val) {
|
||||
this.$set(this.pageForm, "zplb", null)
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.initHdxxlist();
|
||||
this.pageData();
|
||||
if (this.hasSuperAdminRole) {
|
||||
this.candelete = true;
|
||||
}
|
||||
|
||||
this.unions = await getUnions()
|
||||
this.units = await getUnits()
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,169 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
|
||||
|
||||
</style>
|
||||
<div id="app" v-cloak>
|
||||
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<div class="btn-group tool-button">
|
||||
<el-select v-model="pageForm.hdid" placeholder="请选择活动主题"
|
||||
filterable clearable style="width: 300px">
|
||||
<el-option
|
||||
v-for="item in activityList"
|
||||
:key="item.hdid"
|
||||
:label="item.hdname"
|
||||
:value="item.hdid">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
<div class="btn-group tool-button ">
|
||||
<el-date-picker
|
||||
v-model="pageForm.year" :clearable="false"
|
||||
type="date" style="width: 180px"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="选择日期">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
<div class="btn-group tool-button">
|
||||
<el-input placeholder="请输入内容" v-model="pageForm.username" style="width: 200px">
|
||||
<template slot="prepend">上传人</template>
|
||||
</el-input>
|
||||
</div>
|
||||
<div class="btn-group tool-button">
|
||||
<el-select v-model="pageForm.unitId" placeholder="请选择所属单位"
|
||||
filterable clearable style="width: 240px">
|
||||
<el-option
|
||||
v-for="item in unitOptions"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
<div class="btn-group tool-button">
|
||||
<el-select v-model="pageForm.unionId" placeholder="请选择所属工会"
|
||||
filterable clearable style="width: 240px">
|
||||
<el-option
|
||||
v-for="item in unionOptions"
|
||||
:key="item.id"
|
||||
:label="item.unionname"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
|
||||
<div class="btn-group tool-button">
|
||||
<el-button icon="el-icon-search" @click="doSearch"
|
||||
style="background-color:#409eff;color: white;"></el-button>
|
||||
</div>
|
||||
|
||||
</el-card>
|
||||
<el-card shadow="never" class="mt20">
|
||||
<el-table :data="tableData" header-align="center" 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 prop="hdname" label="活动主题" header-align="center" show-overflow-tooltip="true" align="center"></el-table-column>
|
||||
<el-table-column prop="username" label="签到次数" header-align="center" align="center"></el-table-column>
|
||||
<el-table-column label="操作" width="300" header-align="center" align="center">
|
||||
<template slot-scope="scope">
|
||||
<el-button type="danger" size="mini" @click="doDelete(scope.row)">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<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-card>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
data: function () {
|
||||
var self = this
|
||||
return {
|
||||
dialogVisible: false,
|
||||
tableData: [],
|
||||
pageForm: {
|
||||
year: moment().format('YYYY-MM-DD'),
|
||||
searchName: "",
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
unitId: '',
|
||||
unionId: '',
|
||||
username: '',
|
||||
},
|
||||
unionOptions: [],
|
||||
unitOptions: [],
|
||||
clickRow: {},
|
||||
activityList: [],
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async doSearch () {
|
||||
this.pageForm.pageNumber = 1;
|
||||
await this.pageData();
|
||||
},
|
||||
pageNumberChange: function (val) {//页码更新操作
|
||||
this.pageForm.pageNumber = val;
|
||||
this.pageData();
|
||||
}
|
||||
,
|
||||
pageSizeChange: function (val) {//分页大小更新操作
|
||||
this.pageForm.pageSize = val;
|
||||
this.pageData();
|
||||
},
|
||||
async pageData () {//加载分页数据
|
||||
var self = this;
|
||||
sublime.showLoadingbar();//显示loading
|
||||
await $.post(base + "/platform/hd/checkinManage/getUploadInfo", self.pageForm, function (data) {
|
||||
sublime.closeLoadingbar();//关闭loading
|
||||
if (data.code === 0) {
|
||||
self.tableData = data.data.list;
|
||||
self.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
async getAllActivity() {
|
||||
const {data} = await $.post('/platform/hd/checkinManage/getAllActivity')
|
||||
this.activityList = data
|
||||
if (this.activityList && this.activityList.length > 0) {
|
||||
this.pageForm.hdid = this.activityList[0].hdid
|
||||
}
|
||||
}
|
||||
},
|
||||
async created () {
|
||||
this.unionOptions = await getUnions(null)
|
||||
this.unitOptions = await getUnits(null)
|
||||
await this.pageData();
|
||||
await this.getAllActivity()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,184 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
|
||||
|
||||
</style>
|
||||
<div id="app" v-cloak>
|
||||
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<div class="btn-group tool-button">
|
||||
<el-select v-model="pageForm.hdid" placeholder="请选择活动主题"
|
||||
filterable style="width: 300px">
|
||||
<el-option
|
||||
v-for="item in activityList"
|
||||
:key="item.hdid"
|
||||
:label="item.hdname"
|
||||
:value="item.hdid">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
<div class="btn-group tool-button ">
|
||||
<el-date-picker
|
||||
v-model="time" style="width: 340px" :clearable="false"
|
||||
type="daterange" value-format="yyyy-MM-dd"
|
||||
range-separator="至" format="yyyy-MM-dd"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
<div class="btn-group tool-button">
|
||||
<el-input placeholder="请输入内容" v-model="pageForm.username" style="width: 200px">
|
||||
<template slot="prepend">上传人</template>
|
||||
</el-input>
|
||||
</div>
|
||||
<div class="btn-group tool-button">
|
||||
<el-select v-model="pageForm.unitId" placeholder="请选择所属单位"
|
||||
filterable clearable style="width: 240px">
|
||||
<el-option
|
||||
v-for="item in unitOptions"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
<div class="btn-group tool-button">
|
||||
<el-select v-model="pageForm.unionId" placeholder="请选择所属工会"
|
||||
filterable clearable style="width: 240px">
|
||||
<el-option
|
||||
v-for="item in unionOptions"
|
||||
:key="item.id"
|
||||
:label="item.unionname"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
|
||||
<div class="btn-group tool-button">
|
||||
<el-button icon="el-icon-search" @click="doSearch"
|
||||
style="background-color:#409eff;color: white;"></el-button>
|
||||
</div>
|
||||
|
||||
<div class="offscreen-right pull-right ml20">
|
||||
<el-button type="primary" @click="doExport">导出名单</el-button>
|
||||
</div>
|
||||
</el-card>
|
||||
<el-card shadow="never" class="mt20">
|
||||
<el-table :data="tableData" header-align="center" 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 prop="username" label="上传人" header-align="center" align="center"></el-table-column>
|
||||
<el-table-column prop="count" sortable label="上传次数" header-align="center" align="center"></el-table-column>
|
||||
<el-table-column prop="unitname" sortable label="所属单位" header-align="center" align="center"></el-table-column>
|
||||
<el-table-column prop="unionname" sortable label="所属工会" header-align="center" align="center"></el-table-column>
|
||||
</el-table>
|
||||
<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-card>
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
</div>
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
data: function () {
|
||||
var self = this
|
||||
return {
|
||||
time: [],
|
||||
tableData: [],
|
||||
pageForm: {
|
||||
searchName: "",
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
unitId: '',
|
||||
unionId: '',
|
||||
username: '',
|
||||
},
|
||||
unionOptions: [],
|
||||
unitOptions: [],
|
||||
activityList: [],
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
|
||||
async doSearch () {
|
||||
this.pageForm.pageNumber = 1;
|
||||
await this.pageData();
|
||||
},
|
||||
pageNumberChange: function (val) {//页码更新操作
|
||||
this.pageForm.pageNumber = val;
|
||||
this.pageData();
|
||||
}
|
||||
,
|
||||
pageSizeChange: function (val) {//分页大小更新操作
|
||||
this.pageForm.pageSize = val;
|
||||
this.pageData();
|
||||
},
|
||||
async pageData () {//加载分页数据
|
||||
var self = this;
|
||||
if(this.time && this.time.length > 0){
|
||||
this.pageForm.start = this.time[0]
|
||||
this.pageForm.end = this.time[1]
|
||||
}
|
||||
sublime.showLoadingbar();//显示loading
|
||||
await $.post(base + "/platform/hd/checkinManage/summary/data", self.pageForm, function (data) {
|
||||
sublime.closeLoadingbar();//关闭loading
|
||||
if (data.code === 0) {
|
||||
self.tableData = data.data.list;
|
||||
self.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
async getAllActivity() {
|
||||
const {data} = await $.post('/platform/hd/checkinManage/getAllActivity')
|
||||
this.activityList = data
|
||||
if (this.activityList && this.activityList.length > 0) {
|
||||
this.pageForm.hdid = this.activityList[0].hdid
|
||||
this.time = [moment(this.activityList[0].hdkssj).format('YYYY-MM-DD'), moment(this.activityList[0].hdjssj).format('YYYY-MM-DD')]
|
||||
}
|
||||
},
|
||||
doExport() {
|
||||
if(this.time && this.time.length > 0) {
|
||||
this.pageForm.start = this.time[0]
|
||||
this.pageForm.end = this.time[1]
|
||||
}
|
||||
window.location.href = '/platform/hd/checkinManage/summary/doExport?id=' + this.pageForm.hdid + '&username=' + this.pageForm.username
|
||||
+ '&start=' + this.pageForm.start + '&end=' + this.pageForm.end + '&unitId=' + this.pageForm.unitId + '&unionId=' + this.pageForm.unionId
|
||||
}
|
||||
},
|
||||
async created () {
|
||||
this.unionOptions = await getUnions(null)
|
||||
this.unitOptions = await getUnits(null)
|
||||
await this.getAllActivity()
|
||||
await this.pageData();
|
||||
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,233 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.el-col > .el-cascader, .el-col > .el-select, .el-col > .el-date-editor {
|
||||
width: 100% !important;
|
||||
}
|
||||
</style>
|
||||
<div id="app" v-cloak>
|
||||
<guava>
|
||||
<el-card shadow="never">
|
||||
<el-row type="flex" :gutter="20">
|
||||
<el-col :span="6">
|
||||
<el-date-picker v-model="pageForm.year"
|
||||
placeholder="年度"
|
||||
type="year"
|
||||
@change="yearChange"
|
||||
value-format="yyyy"></el-date-picker>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-select v-model="pageForm.hdid">
|
||||
<el-option v-for="i in hdxxlist"
|
||||
:key="i.value"
|
||||
:label="i.label"
|
||||
:value="i.value"></el-option>
|
||||
</el-select>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="6" v-if="hasSuperAdminOrXghRole">
|
||||
<el-select placeholder="所属工会" v-model="pageForm.union"
|
||||
style="width: 200px;"
|
||||
clearable="true"
|
||||
filterable="true" @change="unionChange">
|
||||
<el-option v-for="item in unions" :label="item.unionname"
|
||||
:value="item.id"></el-option>
|
||||
</el-select>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-select placeholder="所属单位" v-model="pageForm.unit" style="width: 200px;"
|
||||
clearable="true"
|
||||
filterable="true">
|
||||
<el-option v-for="item in units" :label="item.name"
|
||||
:value="item.id"></el-option>
|
||||
</el-select>
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
|
||||
<el-row type="flex" :gutter="20" class="mt20">
|
||||
<el-col :span="6">
|
||||
<el-input placeholder="请输入内容" v-model="pageForm.searchKeyword"
|
||||
@keyup.enter.native="doSearch"
|
||||
clearable>
|
||||
<el-select v-model="pageForm.searchName" slot="prepend" placeholder="查询类型"
|
||||
style="width: 120px;"
|
||||
clearable>
|
||||
<el-option label="姓名" value="u.username"></el-option>
|
||||
<el-option label="工号" value="u.loginname"></el-option>
|
||||
</el-select>
|
||||
</el-input>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-button type="primary" icon="el-icon-search" @click="doSearch"></el-button>
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
|
||||
|
||||
</el-card>
|
||||
<el-card class="mt20" shadow="never">
|
||||
<vi-title2 title="获奖列表">
|
||||
<template #func>
|
||||
<el-button size="medium" @click="exportExcel(1)" type="primary">
|
||||
<i class="el-icon-tickets"></i>
|
||||
导出获奖人员名单
|
||||
</el-button>
|
||||
<el-button size="medium" @click="exportExcel(2)" v-if="hasSuperAdminOrXghRole"
|
||||
type="primary">
|
||||
<i class="el-icon-tickets"></i>
|
||||
导出分工会获奖信息
|
||||
</el-button>
|
||||
</template>
|
||||
</vi-title2>
|
||||
<el-table :data="tableData">
|
||||
<el-table-column label="序号" type="index" header-align="center" align="center"
|
||||
width="50">
|
||||
<template scope="scope">
|
||||
<span>{{scope.$index+(pageForm.pageNumber - 1) * pageForm.pageSize + 1}} </span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="username" label="姓名" header-align="center" align="center"
|
||||
sortable></el-table-column>
|
||||
<el-table-column prop="loginname" label="工号" header-align="center"
|
||||
align="center"></el-table-column>
|
||||
<el-table-column prop="dwname" label="单位" header-align="center" align="center"
|
||||
show-overflow-tooltip
|
||||
sortable></el-table-column>
|
||||
<el-table-column prop="ghname" label="分工会" header-align="center" align="center"
|
||||
show-overflow-tooltip
|
||||
sortable></el-table-column>
|
||||
<el-table-column prop="hjcount" label="获奖次数" header-align="center" align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
</el-table>
|
||||
<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-card>
|
||||
</guava>
|
||||
|
||||
</div>
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
data: function () {
|
||||
return {
|
||||
unions: [],
|
||||
units: [],
|
||||
|
||||
hasSuperAdminOrXghRole: "${@shiro.hasAnyRoles('sysadmin','A06')}" === 'true' ? true : false,
|
||||
pageForm: {
|
||||
year: new Date().getFullYear() + '',
|
||||
searchName: "u.username",
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
hdid: ''
|
||||
},
|
||||
tableData: [],
|
||||
hdxxlist: []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
/*hdchange(v) {
|
||||
this.$set(this.pageForm, 'hdlb', '');
|
||||
this.$set(this.pageForm, 'zplb', '');
|
||||
$.post('/platform/hd/childhd/zpxx/gethdlblist', {id: v}).then(data => {
|
||||
if (data.code == 0) {
|
||||
this.hdlblist = data.data;
|
||||
}
|
||||
});
|
||||
},*/
|
||||
async unionChange() {
|
||||
this.$set(this.pageForm, "unit", null)
|
||||
this.units = await getUnits(this.pageForm.union)
|
||||
},
|
||||
async pageData() {
|
||||
sublime.showLoadingbar();
|
||||
const data = await $.post(base + "/platform/hd/wmhdhjxx/pageData", this.pageForm)
|
||||
sublime.closeLoadingbar();
|
||||
if (data.code == 0) {
|
||||
this.tableData = data.data.list;
|
||||
this.pageForm.totalCount = data.data.totalCount;
|
||||
}
|
||||
|
||||
},
|
||||
pageSizeChange: function (val) {
|
||||
this.pageForm.pageSize = val;
|
||||
this.pageData();
|
||||
},
|
||||
pageNumberChange: function (val) {
|
||||
this.pageForm.pageNumber = val;
|
||||
this.pageData();
|
||||
},
|
||||
exportExcel: function (num) {
|
||||
var self = this;
|
||||
var hdid = self.pageForm.hdid;
|
||||
if (num === 1) {
|
||||
if (hdid === '') {
|
||||
self.$message.warning('请先选择活动主题');
|
||||
return;
|
||||
}
|
||||
}
|
||||
window.location.href = base + '/platform/hd/wmhdhjxx/exportExcel?num=' + num + '&hdid=' + hdid;
|
||||
},
|
||||
doSearch: function () {
|
||||
this.pageForm.pageNumber = 1;
|
||||
this.pageData();
|
||||
},
|
||||
yearChange(val) {
|
||||
this.$nextTick(() => {
|
||||
this.hdxxlist = []
|
||||
})
|
||||
this.$set(this.pageForm, "hdid", "")
|
||||
let activityList = []
|
||||
console.log(val)
|
||||
if (val === null) {
|
||||
this.yearActivityList.map(v => {
|
||||
activityList = activityList.concat(v.children)
|
||||
})
|
||||
} else {
|
||||
let enen = this.yearActivityList.filter(v => v.value == val)
|
||||
enen.map(v => {
|
||||
activityList = activityList.concat(v.children)
|
||||
})
|
||||
}
|
||||
this.$nextTick(() => {
|
||||
this.hdxxlist = activityList
|
||||
})
|
||||
},
|
||||
async initHdxxlist() {
|
||||
const resp = await $.post(base + '/platform/hd/wmhd/initHdxxlist')
|
||||
if (resp.code === 0) {
|
||||
this.yearActivityList = resp.data
|
||||
let activityList = []
|
||||
resp.data.map(v => {
|
||||
activityList = activityList.concat(v.children)
|
||||
})
|
||||
this.hdxxlist = activityList
|
||||
if (this.hdxxlist) {
|
||||
this.pageForm.hdid = this.hdxxlist[0].value
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
await this.initHdxxlist();
|
||||
await this.pageData();
|
||||
this.unions = await getUnions()
|
||||
this.units = await getUnits()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,999 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" xmlns:v-slot="http://www.w3.org/1999/XSL/Transform">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta content="IE=edge" http-equiv="X-UA-Compatible">
|
||||
<!-- 在 head 标签中添加 meta 标签,并设置 viewport-fit=cover 值 -->
|
||||
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, viewport-fit=cover"
|
||||
name="viewport">
|
||||
<title></title>
|
||||
<!-- 引入样式文件 -->
|
||||
<link rel="stylesheet" href="${base!}/assets/platform/plugins/vant/vant.css">
|
||||
<link href="https://res.wx.qq.com/open/libs/weui/2.2.0/weui.min.css" rel="stylesheet">
|
||||
|
||||
<!-- 引入 Vue 和 Vant 的 JS 文件 -->
|
||||
<script src="${base!}/assets/platform/plugins/vue/vue.min.js"></script>
|
||||
<script src="${base!}/assets/platform/plugins/vant/vant.js"></script>
|
||||
<script src="${base!}/assets/platform/plugins/jquery/jquery-1.11.1.min.js"></script>
|
||||
<script src="/assets/platform/plugins/moment/moment.min.js"></script>
|
||||
<script src="https://cdn.staticfile.org/js-cookie/2.2.1/js.cookie.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;
|
||||
}
|
||||
|
||||
.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;
|
||||
}
|
||||
|
||||
.weui-msg {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.van-nav-bar__content {
|
||||
background-color: #1867b0;
|
||||
}
|
||||
|
||||
.van-nav-bar__title, .van-icon-arrow-left::before {
|
||||
color: white;
|
||||
}
|
||||
</style>
|
||||
<body>
|
||||
<div id="app" v-clock v-if="showPage">
|
||||
<van-nav-bar :left-arrow="leftArrow" @click-left="history.back()" fixed placeholder
|
||||
safe-area-inset-top
|
||||
title="教工作品征集"></van-nav-bar>
|
||||
<div>
|
||||
<van-swipe :autoplay="3000" class="my-swipe" indicator-color="white"
|
||||
v-if="boxData.files&&boxData.files.length>0">
|
||||
<van-swipe-item v-for="bgi in boxData.files">
|
||||
<van-image
|
||||
:src="FILE_DOMAIN+'/fileStreamPreview?id='+bgi.id"
|
||||
fit="cover"
|
||||
height="200px"
|
||||
width="100%"
|
||||
></van-image>
|
||||
</van-swipe-item>
|
||||
</van-swipe>
|
||||
<van-image
|
||||
fit="cover"
|
||||
height="200px"
|
||||
src="***"
|
||||
v-else
|
||||
width="100%"
|
||||
>
|
||||
<template v-slot:error>封面图片</template>
|
||||
</van-image>
|
||||
</div>
|
||||
<div class="page-v" v-if="active==0">
|
||||
<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 class="page-v" v-if="active==1">
|
||||
<div class="detail-v" style="margin-top: 0">
|
||||
<div class="weui-msg" v-if="showMsg">
|
||||
<div class="weui-msg__icon-area">
|
||||
<van-circle
|
||||
:clockwise="false"
|
||||
:rate="percent"
|
||||
:text="percent+' %'"
|
||||
color="#07c160"
|
||||
layer-color="rgb(240,240,240)"
|
||||
stroke-width="50"
|
||||
v-if="showPlan"
|
||||
v-model="percent"
|
||||
></van-circle>
|
||||
<span v-if="showPlan==false">
|
||||
<i class="weui-icon-success weui-icon_msg" v-if="flag"></i>
|
||||
<i class="weui-icon-warn weui-icon_msg" v-if="!flag"></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 :class="flag?'weui-btn weui-btn_primary':'weui-btn weui-btn_warn'"
|
||||
@click="showMsg=false"
|
||||
v-if="!showPlan">{{flag ? '确定' : '返回'}}</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-v" v-else>
|
||||
<van-form>
|
||||
<div style="width: 100%;padding: 16px 0;">
|
||||
<h2 :style="'font-weight: bolder;color: '+boxData.hdcolor"
|
||||
class="van-doc-demo-block__title">
|
||||
基本信息</h2>
|
||||
</div>
|
||||
<van-cell-group>
|
||||
<van-field
|
||||
label="工号"
|
||||
name="工号"
|
||||
placeholder="工号"
|
||||
readonly
|
||||
v-model="formData.loginname"
|
||||
></van-field>
|
||||
<van-field
|
||||
label="姓  名"
|
||||
name="姓名"
|
||||
readonly
|
||||
v-model="formData.username"
|
||||
></van-field>
|
||||
<van-field
|
||||
label="所属单位"
|
||||
name="所属单位"
|
||||
readonly
|
||||
v-model="formData.unitname"
|
||||
></van-field>
|
||||
<van-field
|
||||
:rules="[{ required: true, message: '请填写手机号码' }]"
|
||||
label="手机号码"
|
||||
name="mobile"
|
||||
placeholder="手机号码" required
|
||||
type="tel"
|
||||
v-model="formData.mobile"
|
||||
></van-field>
|
||||
</van-cell-group>
|
||||
</van-cell-group>
|
||||
<div style="width: 100%;padding: 16px 0;">
|
||||
<span :style="'font-weight: bolder;color: '+boxData.hdcolor"
|
||||
class="van-doc-demo-block__title">
|
||||
作品信息</span>
|
||||
<p class="van-doc-demo-block__title" style="margin-top: 5px;color: red">
|
||||
(如同时参加以下多个活动,或有多个主题,请分别提交)</p>
|
||||
</div>
|
||||
<van-tabs :color="boxData.hdcolor" @change="hdlbChange" type="card" v-model="formData.hdlb_i">
|
||||
<van-tab :name="i" :title="lb.lname" v-for="lb,i in boxData.lbs">
|
||||
<div v-if="formData.hdlb_i==i">
|
||||
<!-- <van-field style="padding-top: 30px" maxlength="15"
|
||||
:rules="[{ required: true, message: '请填写作品主题' }]"
|
||||
v-model="fd[i].zpzt"
|
||||
required
|
||||
show-word-limit
|
||||
label="作品主题" placeholder="主题"></van-field>-->
|
||||
<van-field
|
||||
:rules="[{ required: true, message: '请选择类别' }]"
|
||||
:value="fd[i].zplb_name"
|
||||
@click="showPicker = true"
|
||||
clickable
|
||||
label="类别"
|
||||
name="picker"
|
||||
placeholder="点击选择类别"
|
||||
readonly
|
||||
required
|
||||
v-if="lb.zplbs&&lb.zplbs.length>0"
|
||||
></van-field>
|
||||
<van-popup position="bottom" v-model="showPicker">
|
||||
<van-picker
|
||||
:columns="lb.zplbs"
|
||||
@cancel="showPicker = false"
|
||||
@confirm="(val) => {zplbClick(val, fd, i)}"
|
||||
show-toolbar
|
||||
value-key="zname"
|
||||
></van-picker>
|
||||
</van-popup>
|
||||
<van-field
|
||||
:rules="[{ required: true, message: '请填写标题' }]"
|
||||
label="标题"
|
||||
name="zpmc"
|
||||
placeholder="请填写标题"
|
||||
required
|
||||
v-model="fd[i].zpmc"
|
||||
></van-field>
|
||||
|
||||
<van-field
|
||||
:maxlength="chooseLb.maxWordCount ? chooseLb.maxWordCount : 100"
|
||||
:rules="[{ required: true, message: '请填写创作说明' }]" autosize
|
||||
label="创作说明"
|
||||
placeholder="请填写创作说明"
|
||||
required
|
||||
show-word-limit
|
||||
type="textarea"
|
||||
v-model="fd[i].zpms"></van-field>
|
||||
<van-field :rules="[{ required: true, message: '请填写健步走步数' }]"
|
||||
autosize label="健步走步数" maxlength="10"
|
||||
placeholder="健步走步数"
|
||||
show-word-limit
|
||||
type="digit"
|
||||
v-if="lb.lname==='健步走'"
|
||||
v-model="fd[i].step_count"></van-field>
|
||||
|
||||
<template v-if="chooseLb.isUploadPhoto === true">
|
||||
<van-field input-align="right" label="图  片"
|
||||
placeholder="(左滑删除单个文件)"
|
||||
readonly required
|
||||
style="border: none;"></van-field>
|
||||
<van-swipe-cell style="border: none;padding-top: 20px;"
|
||||
v-for="img,idx in fd[i].imgList">
|
||||
<van-row style="padding: 0 15px">
|
||||
<van-col :span="6">
|
||||
<van-image
|
||||
:src="img.content"
|
||||
fit="cover"
|
||||
height="25vw"
|
||||
width="100%"
|
||||
></van-image>
|
||||
</van-col>
|
||||
</van-row>
|
||||
|
||||
<van-button
|
||||
@click="imgDelete(idx,i,img.filepath)"
|
||||
class="delete-button"
|
||||
native-type="button"
|
||||
slot="right"
|
||||
square
|
||||
text="删除"
|
||||
type="danger"
|
||||
></van-button>
|
||||
</van-swipe-cell>
|
||||
<van-field>
|
||||
<template #input>
|
||||
<van-uploader :before-read="beforeReadImg"
|
||||
:max-count="chooseLb.photoNum"
|
||||
:max-size="chooseLb.photoSize * 1048576"
|
||||
:preview-image="false"
|
||||
@oversize="$toast('图片大小不能超过' + chooseLb.photoSize + 'M')"
|
||||
accept="image/*"
|
||||
multiple
|
||||
v-model="fd[i].imgList">
|
||||
</van-uploader>
|
||||
</template>
|
||||
</van-field>
|
||||
<div style="margin-top: 10px;padding-left: 20px;font-size: 12px;color: rgb(160,160,160)">
|
||||
注意:图片最多{{ chooseLb.photoNum }}张,每张不超过{{ chooseLb.photoSize
|
||||
}}M,格式为{{chooseLb.photoType.toString()}}。
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<template v-if="chooseLb.isUploadOther === true">
|
||||
<van-field input-align="right" label="音/视频、文档" label-width="150"
|
||||
readonly required
|
||||
style="border: none;"></van-field>
|
||||
<van-swipe-cell style="border: none;padding-top: 20px;"
|
||||
v-for="(video,idx) in fd[i].videoList">
|
||||
<van-row style="padding: 0 15px">
|
||||
<van-col :span="6">
|
||||
<van-image
|
||||
fit="cover"
|
||||
height="25vw"
|
||||
src="1"
|
||||
width="100%"
|
||||
>
|
||||
<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.filename ? video.filename : video.file.name
|
||||
}}
|
||||
</div>
|
||||
</template>
|
||||
</van-image>
|
||||
</van-col>
|
||||
</van-row>
|
||||
|
||||
<van-button
|
||||
@click="videoDelete(idx,i,video.filepath)"
|
||||
class="delete-button"
|
||||
native-type="button"
|
||||
slot="right"
|
||||
square
|
||||
text="删除"
|
||||
type="danger"
|
||||
></van-button>
|
||||
</van-swipe-cell>
|
||||
<van-field v-if="lb.lname!=='健步走'">
|
||||
<template #input>
|
||||
<van-uploader :before-read="beforeReadVideo"
|
||||
:max-count="chooseLb.otherFileNum"
|
||||
:max-size="chooseLb.otherSize * 1048576"
|
||||
:preview-image="false"
|
||||
@oversize="$toast('文件大小不能超过' + chooseLb.otherSize + 'M')"
|
||||
accept="*"
|
||||
result-type="file"
|
||||
v-model="fd[i].videoList"></van-uploader>
|
||||
</template>
|
||||
</van-field>
|
||||
<div style="margin-top: 10px;padding-left: 20px;font-size: 12px;color: rgb(160,160,160)">
|
||||
注意:文件最多{{ chooseLb.otherFileNum
|
||||
}}个,每个不超过{{ chooseLb.otherSize
|
||||
}}M,格式为{{chooseLb.otherType.toString()}}。
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<template v-if="chooseLb.isUploadZip === true">
|
||||
<van-field input-align="right" label="压缩包" label-width="150"
|
||||
readonly required
|
||||
style="border: none;"></van-field>
|
||||
<van-swipe-cell style="border: none;padding-top: 20px;"
|
||||
v-for="(video,idx) in fd[i].zipList">
|
||||
<van-row style="padding: 0 15px">
|
||||
<van-col :span="6">
|
||||
<van-image
|
||||
fit="cover"
|
||||
height="25vw"
|
||||
src="1"
|
||||
width="100%"
|
||||
>
|
||||
<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.filename ? video.filename : video.file.name }}
|
||||
</div>
|
||||
</template>
|
||||
</van-image>
|
||||
</van-col>
|
||||
</van-row>
|
||||
|
||||
<van-button
|
||||
@click="zipDelete(idx,i,video.filepath)"
|
||||
class="delete-button"
|
||||
native-type="button"
|
||||
slot="right"
|
||||
square
|
||||
text="删除"
|
||||
type="danger"
|
||||
></van-button>
|
||||
</van-swipe-cell>
|
||||
<van-field>
|
||||
<template #input>
|
||||
<van-uploader :before-read="beforeReadZip"
|
||||
:max-count="chooseLb.zipNum"
|
||||
:max-size="chooseLb.zipSize * 1048576"
|
||||
:preview-image="false"
|
||||
@oversize="$toast('文件大小不能超过' + chooseLb.zipSize + 'M')"
|
||||
accept="*"
|
||||
result-type="file"
|
||||
v-model="fd[i].zipList"></van-uploader>
|
||||
</template>
|
||||
</van-field>
|
||||
<div style="margin-top: 10px;padding-left: 20px;font-size: 12px;color: rgb(160,160,160)">
|
||||
注意:文件最多{{ chooseLb.zipNum}}个,
|
||||
每个不超过{{ chooseLb.zipSize}}M,
|
||||
格式为{{chooseLb.zipType.toString()}}。
|
||||
</div>
|
||||
</template>
|
||||
|
||||
</div>
|
||||
</van-tab>
|
||||
</van-tabs>
|
||||
|
||||
<div style="margin: 16px;">
|
||||
<van-button :color="boxData.hdcolor" :disabled="subDis"
|
||||
@click="doSubmit(true)" block
|
||||
round
|
||||
type="info">
|
||||
提交
|
||||
</van-button>
|
||||
</div>
|
||||
</van-form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<van-tabbar
|
||||
:active-color="boxData.hdcolor"
|
||||
@change="activeChange"
|
||||
inactive-color="#000"
|
||||
style="max-width: 600px;position: fixed;left: 0;bottom: 0;right: 0;margin: auto"
|
||||
v-model="active"
|
||||
>
|
||||
<!--<van-tabbar-item icon="label-o">介绍</van-tabbar-item>-->
|
||||
<van-tabbar-item icon="edit" @click="active = 1">参加活动</van-tabbar-item>
|
||||
</van-tabbar>
|
||||
<van-number-keyboard safe-area-inset-bottom/>
|
||||
</div>
|
||||
<script>
|
||||
const FILE_DOMAIN = "${AppFileDomain!}"
|
||||
|
||||
function getQueryVariable(variable) {
|
||||
var query = window.location.search.substring(1);
|
||||
var vars = query.split("&");
|
||||
for (var i = 0; i < vars.length; i++) {
|
||||
var pair = vars[i].split("=");
|
||||
if (pair[0] == variable) {
|
||||
return pair[1];
|
||||
}
|
||||
}
|
||||
return '';
|
||||
}
|
||||
|
||||
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 {
|
||||
readytodelfile: [],
|
||||
leftArrow: false,
|
||||
boxData: {},
|
||||
subDis: false,
|
||||
showPage: false,
|
||||
showPicker: false,
|
||||
showMsg: false,
|
||||
percent: 0,
|
||||
flag: true,
|
||||
showPlan: true,
|
||||
msg: '',
|
||||
formData: {
|
||||
hdlb_i: 0,
|
||||
},
|
||||
fd: [],
|
||||
active: 0,
|
||||
isNull(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', 'xlsx', 'xls', 'txt'],
|
||||
videotype: ['flv', 'swf', 'mkv', 'avi', 'rm', 'rmvb', 'wmv', 'mp4', 'mov', 'mpg', 'mpeg', 'quicktime'],
|
||||
ziptype: ['zip', 'rar'],
|
||||
chooseLb: {},
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
zplbClick(val, fd, i) {
|
||||
this.$set(this, 'chooseLb', val)
|
||||
this.$set(fd[i], 'zplb', val.zid)
|
||||
this.$set(fd[i], 'zplb_name', val.zname)
|
||||
this.$set(this, 'showPicker', false)
|
||||
},
|
||||
hdlbChange(i) {
|
||||
this.setDefaultZplb(i)
|
||||
},
|
||||
setDefaultZplb(i) {
|
||||
const lb = this.boxData.lbs && this.boxData.lbs[i]
|
||||
if (lb && lb.zplbs && lb.zplbs.length > 0) {
|
||||
const val = this.fd[i].zplb ? lb.zplbs.find(o => o.zid === this.fd[i].zplb) : lb.zplbs[0]
|
||||
this.$set(this, 'chooseLb', val || {})
|
||||
if (!this.fd[i].zplb && val) {
|
||||
// 默认选择第一个作品类别,保证对应上传配置可以立即生效。
|
||||
this.$set(this.fd[i], 'zplb', val.zid)
|
||||
this.$set(this.fd[i], 'zplb_name', val.zname)
|
||||
}
|
||||
} else {
|
||||
this.$set(this, 'chooseLb', {})
|
||||
}
|
||||
},
|
||||
activeChange() {
|
||||
if (this.subDis) {
|
||||
this.active = 0
|
||||
this.$toast.fail("不在活动时间范围内!");
|
||||
}
|
||||
},
|
||||
imgDelete(idx, i, filepath) {
|
||||
this.fd[i].imgList.splice(idx, 1)
|
||||
this.readytodelfile.push(filepath);
|
||||
},
|
||||
videoDelete(idx, i, filepath) {
|
||||
this.fd[i].videoList.splice(idx, 1)
|
||||
this.readytodelfile.push(filepath);
|
||||
}
|
||||
,
|
||||
zipDelete(idx, i, filepath) {
|
||||
this.fd[i].zipList.splice(idx, 1)
|
||||
this.readytodelfile.push(filepath);
|
||||
}
|
||||
,
|
||||
onConfirm(value) {
|
||||
this.formData.hdzplx2 = value.zname;
|
||||
this.showPicker = false;
|
||||
}
|
||||
,
|
||||
getPlaceholder(formData, key) {
|
||||
if (this.isNull(formData.userid)) {
|
||||
return "输入工号后自动匹配"
|
||||
} else {
|
||||
if (this.isNull(formData[key])) {
|
||||
return '暂无'
|
||||
}
|
||||
return formData[key]
|
||||
}
|
||||
}
|
||||
,
|
||||
async initUserInfo() {
|
||||
const userId = "${@shiro.getPrincipalProperty('id')}"
|
||||
const loginName = "${@shiro.getPrincipalProperty('loginname')}"
|
||||
const userName = "${@shiro.getPrincipalProperty('username')}"
|
||||
const unitName = "${@shiro.getPrincipalProperty('unit').getName()}"
|
||||
this.$set(this.formData, 'loginname', loginName)
|
||||
this.$set(this.formData, 'username', userName)
|
||||
this.$set(this.formData, 'unitname', unitName)
|
||||
this.$set(this.formData, 'userid', userId)
|
||||
this.$set(this.formData, 'mobile', "${@shiro.getPrincipalProperty('mobile')}")
|
||||
},
|
||||
async doSubmit(flag) {
|
||||
if (this.isNull(this.formData.userid)) {
|
||||
this.$toast.fail("请正确填写您的工号!")
|
||||
return
|
||||
}
|
||||
const i = this.formData.hdlb_i
|
||||
|
||||
if (flag === true) {
|
||||
/*if (this.fd[i].imgList.length === 0) {
|
||||
this.$toast.fail("请您选择要上传的作品!")
|
||||
return
|
||||
}*/
|
||||
if (this.chooseLb.isUploadPhoto === true && this.fd[i].imgList.length === 0) {
|
||||
this.$toast.fail("请您选择要上传的图片!")
|
||||
return
|
||||
}
|
||||
if (this.chooseLb.isUploadOther === true && this.fd[i].videoList.length === 0) {
|
||||
this.$toast.fail("请您选择要上传的音/视频或文档!")
|
||||
return
|
||||
}
|
||||
if (this.chooseLb.isUploadZip === true && this.fd[i].zipList.length === 0) {
|
||||
this.$toast.fail("请您选择要上传的压缩包!")
|
||||
return
|
||||
}
|
||||
if (!this.fd[i].zplb || !this.fd[i].zpmc || !this.fd[i].zpms) {
|
||||
this.$toast.fail("请您填写完整再提交!")
|
||||
return
|
||||
}
|
||||
/* if (this.chooseLb.isUploadPhoto === true || this.chooseLb.isUploadOther === true) {
|
||||
if (this.fd[i].videoList.length == 0 || this.fd[i].imgList.length == 0) {
|
||||
this.$toast.fail("请您选择要上传的作品!")
|
||||
return
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
const msg = '您当前选择的是“' + this.boxData.lbs[i].lname + '”,是否确认提交?活动时间内可编辑或删除已提交作品'
|
||||
const confirm = await this.$dialog.confirm({
|
||||
title: '提醒',
|
||||
message: msg
|
||||
})
|
||||
if (confirm === "confirm") {
|
||||
setTimeout(() => {
|
||||
this.showMsg = true
|
||||
this.showPlan = true
|
||||
this.percent = 0
|
||||
this.$set(this, 'flag', false)
|
||||
this.msg = ''
|
||||
|
||||
let formData1 = {}
|
||||
let formData2 = new FormData();
|
||||
formData1.flag = flag
|
||||
formData2.append("flag", flag)
|
||||
if (this.formData.id) {
|
||||
|
||||
this.$set(formData1, "id", getQueryVariable("zpid"))
|
||||
this.$set(formData1, "hdid", getQueryVariable("id"))
|
||||
this.$set(formData1, "hdsbrid", this.isNull(this.formData.userid) ? '' : this.formData.userid)
|
||||
this.$set(formData1, "mobile", this.isNull(this.formData.mobile) ? '' : this.formData.mobile)
|
||||
this.$set(formData1, "step_count", this.isNull(this.fd[i].step_count) ? '' : this.fd[i].step_count)
|
||||
this.$set(formData1, "zpmc", this.isNull(this.fd[i].zpmc) ? '' : this.fd[i].zpmc)
|
||||
this.$set(formData1, "hdzplx", this.isNull(this.boxData.lbs[i].lid) ? '' : this.boxData.lbs[i].lid)
|
||||
this.$set(formData1, "hdzplx2", this.isNull(this.fd[i].zplb) ? '' : this.fd[i].zplb)
|
||||
this.$set(formData1, "hdsbzpzt", this.isNull(this.fd[i].zpzt) ? '' : this.fd[i].zpzt)
|
||||
this.$set(formData1, "hdsbzpms", this.isNull(this.fd[i].zpms) ? '' : this.fd[i].zpms)
|
||||
//this.$set(formData1, "hdsbsj", moment().format('YYYY-MM-DD HH:mm:ss'))
|
||||
} else {
|
||||
|
||||
formData2.append("hdid", getQueryVariable("id"))
|
||||
formData2.append("hdsbrid", this.isNull(this.formData.userid) ? '' : this.formData.userid);
|
||||
formData2.append("mobile", this.isNull(this.formData.mobile) ? '' : this.formData.mobile);
|
||||
formData2.append("step_count", this.isNull(this.fd[i].step_count) ? '' : this.fd[i].step_count);
|
||||
formData2.append("zpmc", this.isNull(this.fd[i].zpmc) ? '' : this.fd[i].zpmc);
|
||||
formData2.append("hdzplx", this.isNull(this.boxData.lbs[i].lid) ? '' : this.boxData.lbs[i].lid)
|
||||
formData2.append("hdzplx2", this.isNull(this.fd[i].zplb) ? '' : this.fd[i].zplb);
|
||||
formData2.append("hdsbzpzt", this.isNull(this.fd[i].zpzt) ? '' : this.fd[i].zpzt);
|
||||
formData2.append("hdsbzpms", this.isNull(this.fd[i].zpms) ? '' : this.fd[i].zpms);
|
||||
this.fd[i].imgList.forEach(val => {
|
||||
formData2.append("files", val.file, this.isNull(val.ms) ? val.file.name : val.ms + getSuffix(val.file.name));
|
||||
});
|
||||
this.fd[i].videoList.forEach(val => {
|
||||
formData2.append("files", val.file, this.isNull(val.ms) ? val.file.name : val.ms + getSuffix(val.file.name));
|
||||
})
|
||||
this.fd[i].zipList.forEach(val => {
|
||||
formData2.append("files", val.file, this.isNull(val.ms) ? val.file.name : val.ms + getSuffix(val.file.name));
|
||||
})
|
||||
formData2.append("hdsbsj", moment().format('YYYY-MM-DD HH:mm:ss'));
|
||||
}
|
||||
if (!this.isNull(this.formData.id)) {
|
||||
formData2.append("data", JSON.stringify(formData1));
|
||||
formData2.append("flag", flag);
|
||||
formData2.append("readytodelfile", JSON.stringify(this.readytodelfile));
|
||||
this.fd[i].imgList.forEach(val => {
|
||||
formData2.append("file", val.file);
|
||||
});
|
||||
this.fd[i].videoList.forEach(val => {
|
||||
formData2.append("file", val.file);
|
||||
});
|
||||
this.fd[i].zipList.forEach(val => {
|
||||
formData2.append("file", val.file);
|
||||
});
|
||||
$.ajax({
|
||||
url: "/platform/hd/jzghd/sczp/doEdit",
|
||||
type: "post",
|
||||
data: formData2,
|
||||
processData: false,
|
||||
contentType: false,
|
||||
xhr: xhrOnProgress((e) => {
|
||||
if (e.total == 0) {
|
||||
this.percent = 0
|
||||
} else {
|
||||
this.percent = ((e.loaded / e.total) * 100).toFixed(0);//文件上传百分比
|
||||
}
|
||||
|
||||
}), success: function (data) {
|
||||
if (data.code === 0) {
|
||||
vue.fd[i].zplb = ''
|
||||
vue.fd[i].zplb_name = ''
|
||||
vue.fd[i].zpzt = ''
|
||||
vue.fd[i].zpms = ''
|
||||
vue.fd[i].step_count = ''
|
||||
vue.fd[i].zpmc = ''
|
||||
vue.fd[i].sbsj = ''
|
||||
vue.fd[i].imgList = []
|
||||
vue.fd[i].videoList = []
|
||||
vue.fd[i].zipList = []
|
||||
vue.fd[i].audioList = []
|
||||
Cookies.remove('sa_formData');
|
||||
|
||||
|
||||
vue.$set(vue, 'msg', '<p class="weui-msg__desc">我们已收到您的作品!<br/>非常感谢您的支持!</p>')
|
||||
vue.$set(vue, 'flag', true)
|
||||
location.href = '/mobile/wmhd/list'
|
||||
|
||||
|
||||
} else {
|
||||
|
||||
vue.$set(vue, 'msg', '<p class="weui-msg__desc">' + (data.msg || '非常抱歉对您造成的不便!<br/>请联系系统管理员进行修复!') + '</p>')
|
||||
vue.$set(vue, 'flag', false)
|
||||
}
|
||||
vue.$set(vue, 'showPlan', false)
|
||||
},
|
||||
error: function (data) {
|
||||
vue.$set(vue, 'msg', '<p class="weui-msg__desc">非常抱歉对您造成的不便!<br/>请联系系统管理员进行修复!</p>')
|
||||
vue.$set(vue, 'flag', false)
|
||||
vue.$set(vue, 'showPlan', false)
|
||||
}
|
||||
})
|
||||
} else {
|
||||
|
||||
$.ajax({
|
||||
url: "/platform/staffActivities/doSubmit",
|
||||
type: "post",
|
||||
data: formData2,
|
||||
processData: false,
|
||||
contentType: false,
|
||||
xhr: xhrOnProgress((e) => {
|
||||
if (e.total == 0) {
|
||||
this.percent = 0
|
||||
} else {
|
||||
this.percent = ((e.loaded / e.total) * 100).toFixed(0);//文件上传百分比
|
||||
}
|
||||
|
||||
}),
|
||||
success: function (data) {
|
||||
if (data.code === 0) {
|
||||
vue.fd[i].zplb = ''
|
||||
vue.fd[i].zplb_name = ''
|
||||
vue.fd[i].zpzt = ''
|
||||
vue.fd[i].zpms = ''
|
||||
vue.fd[i].step_count = ''
|
||||
vue.fd[i].zpmc = ''
|
||||
vue.fd[i].sbsj = ''
|
||||
vue.fd[i].imgList = []
|
||||
vue.fd[i].videoList = []
|
||||
vue.fd[i].zipList = []
|
||||
vue.fd[i].audioList = []
|
||||
Cookies.remove('sa_formData');
|
||||
|
||||
|
||||
vue.$set(vue, 'msg', '<p class="weui-msg__desc">我们已收到您的作品!<br/>非常感谢您的支持!</p>')
|
||||
vue.$set(vue, 'flag', true)
|
||||
} else {
|
||||
|
||||
vue.$set(vue, 'msg', '<p class="weui-msg__desc">' + (data.msg || '非常抱歉对您造成的不便!<br/>请联系系统管理员进行修复!') + '</p>')
|
||||
vue.$set(vue, 'flag', false)
|
||||
}
|
||||
vue.$set(vue, 'showPlan', false)
|
||||
},
|
||||
error: function (data) {
|
||||
vue.$set(vue, 'msg', '<p class="weui-msg__desc">非常抱歉对您造成的不便!<br/>请联系系统管理员进行修复!</p>')
|
||||
vue.$set(vue, 'flag', false)
|
||||
vue.$set(vue, 'showPlan', false)
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
}, 500)
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
,
|
||||
// 返回布尔值
|
||||
beforeReadImg: function (file) {
|
||||
var suffix = getSuffix(file.name)
|
||||
if (suffix == null) {
|
||||
this.$toast('获取不到后缀名!')
|
||||
return false
|
||||
}
|
||||
const suf = file.name.split('.').pop().toLowerCase()
|
||||
if (this.chooseLb.photoType.indexOf(suf) === -1) {
|
||||
this.$toast('支持的图片类型:' + this.chooseLb.photoType.toString())
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
,
|
||||
// 返回布尔值
|
||||
beforeReadVideo: function (file, detail) {
|
||||
var suffix = getSuffix(file.name)
|
||||
if (suffix == null) {
|
||||
this.$toast('获取不到后缀名!')
|
||||
return false
|
||||
}
|
||||
const suf = file.name.split('.').pop().toLowerCase()
|
||||
if (this.chooseLb.otherType.indexOf(suf) === -1) {
|
||||
this.$toast('支持的文件类型:' + this.chooseLb.otherType.toString())
|
||||
return false
|
||||
}
|
||||
return true
|
||||
},
|
||||
beforeReadZip: function (file, detail) {
|
||||
var suffix = getSuffix(file.name)
|
||||
if (suffix == null) {
|
||||
this.$toast('获取不到后缀名!')
|
||||
return false
|
||||
}
|
||||
const suf = file.name.split('.').pop().toLowerCase()
|
||||
if (this.chooseLb.zipType.indexOf(suf) === -1) {
|
||||
this.$toast('支持的文件类型:' + this.chooseLb.zipType.toString())
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
,
|
||||
},
|
||||
async created() {
|
||||
this.initUserInfo()
|
||||
const zpid = GetQueryString("zpid")
|
||||
GetQueryString("client") === "mobile" ? this.leftArrow = true : this.leftArrow = false
|
||||
|
||||
if (window.innerWidth > 800) {
|
||||
this.$notify({type: 'warning', message: '当前窗口宽度过大!部分区域显示会出现大小偏差'});
|
||||
}
|
||||
|
||||
if (!this.isNull(getQueryVariable("id"))) {
|
||||
const data = await $.get("/platform/hd/wmhdMange/findOne", {hdid: getQueryVariable("id")})
|
||||
if (data.code == 0) {
|
||||
document.getElementsByTagName("title")[0].innerText = data.data.hdname;
|
||||
data.data.lbs.forEach((lb, idx) => {
|
||||
this.fd.push({
|
||||
zpzt: '',
|
||||
zpms: '',
|
||||
zplb: '',
|
||||
imgList: [],
|
||||
videoList: [],
|
||||
zipList: [],
|
||||
})
|
||||
})
|
||||
this.boxData = data.data
|
||||
this.$set(this.formData, 'hdlb_i', 0)
|
||||
this.setDefaultZplb(0)
|
||||
this.showPage = true
|
||||
|
||||
if (!data.data.hdflag) {
|
||||
this.$toast.fail("当前活动未开启!");
|
||||
this.subDis = true
|
||||
} else {
|
||||
if (!(new Date(data.data.hdkssj.replace(/-/g, '/')).getTime() < new Date().getTime() && new Date().getTime() < new Date(data.data.hdjssj.replace(/-/g, '/')).getTime())) {
|
||||
this.$toast.fail("不在活动时间范围内!");
|
||||
this.subDis = true
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if (!this.isNull(zpid)) {
|
||||
const {data, code, msg} = await $.get("/platform/hd/wmhd/findOneById", {id: zpid})
|
||||
const refs = await $.get("/mobile/wmhd/list/findOne", {id: zpid})
|
||||
this.$set(this.formData, "id", refs[0].id)
|
||||
this.$set(this.formData, "userid", refs[0].hdsbrid)
|
||||
this.$set(this.formData, "mobile", refs[0].mobile)
|
||||
this.$set(this.formData, "hdlb_i", refs[0].llocation - 1)
|
||||
this.$set(this.fd[refs[0].llocation - 1], "step_count", this.isNull(refs[0].step_count) ? "" : refs[0].step_count)
|
||||
this.$set(this.fd[refs[0].llocation - 1], "zpmc", this.isNull(refs[0].zpmc) ? "" : refs[0].zpmc)
|
||||
this.$set(this.boxData.lbs[refs[0].llocation - 1], "lid", refs[0].hdzplx)
|
||||
this.$set(this.fd[refs[0].llocation - 1], "zplb", refs[0].hdzplx2)
|
||||
this.$set(this.fd[refs[0].llocation - 1], "zplb_name", refs[0].zname)
|
||||
this.$set(this.fd[refs[0].llocation - 1], "zpzt", refs[0].hdsbzpzt)
|
||||
this.$set(this.fd[refs[0].llocation - 1], "hdsbsj", refs[0].hdsbsj)
|
||||
this.$set(this.fd[refs[0].llocation - 1], "zpms", refs[0].hdsbzpms)
|
||||
const o = this.boxData.lbs[refs[0].llocation - 1].zplbs.find(o => o.zid === refs[0].hdzplx2)
|
||||
this.$set(this, 'chooseLb', o !== undefined ? o : {})
|
||||
data.forEach((v, i) => {
|
||||
v.filename = v.filename
|
||||
v.fjurl = v.filepath
|
||||
v.url = FILE_DOMAIN + "/fileStreamPreview?id=" + v.id
|
||||
v.content = FILE_DOMAIN + "/fileStreamPreview?id=" + v.id
|
||||
const filetype = v.filename.substring(v.filename.lastIndexOf(".") + 1)
|
||||
const aa = this.audiotype.concat(this.videotype)
|
||||
const bb = this.doctype.concat(this.doctype)
|
||||
const zip = this.ziptype.concat(this.ziptype)
|
||||
if (this.imgtype.indexOf(filetype) > -1) {
|
||||
this.fd[refs[0].llocation - 1].imgList.push(v)
|
||||
} else if (aa.indexOf(filetype) > -1) {
|
||||
this.fd[refs[0].llocation - 1].videoList.push(v);
|
||||
} else if (bb.indexOf(filetype) > -1) {
|
||||
this.fd[refs[0].llocation - 1].videoList.push(v);
|
||||
} else if (zip.indexOf(filetype) > -1) {
|
||||
this.fd[refs[0].llocation - 1].zipList.push(v);
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
}
|
||||
|
||||
/* if (Cookies.get("sa_formData") != undefined) {
|
||||
this.formData = JSON.parse(Cookies.get("sa_formData"))
|
||||
Cookies.remove('sa_formData');
|
||||
}*/
|
||||
|
||||
/*setInterval(() => {
|
||||
Cookies.set("sa_formData", JSON.stringify(this.formData))
|
||||
}, 1000)*/
|
||||
|
||||
}
|
||||
})
|
||||
|
||||
function GetQueryString(name) {
|
||||
const reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
|
||||
const r = window.location.search.substr(1).match(reg);
|
||||
if (r != null) return unescape(r[2]);
|
||||
return "";
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,829 @@
|
||||
<!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>
|
||||
<!-- 引入样式文件 -->
|
||||
<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;
|
||||
}
|
||||
|
||||
[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-image
|
||||
width="100%"
|
||||
height="200px"
|
||||
fit="cover"
|
||||
src="/wxpic/hdwmx.jpg"
|
||||
/>
|
||||
</div>
|
||||
<div v-if="active==0" class="page-v">
|
||||
<div class="detail-v">
|
||||
<div class="title-v p15">
|
||||
<h3 class="njuColor">活动介绍</h3>
|
||||
<div class="van-hairline--top"></div>
|
||||
<br/>
|
||||
</div>
|
||||
<div class="p15">
|
||||
<p style="line-height:24pt; margin:0pt; orphans:0; text-align:justify; text-indent:0pt; widows:0">  在全国上下众志成城、抗击疫情的关键时期,我们迎来了第110个“三八”国际劳动妇女节。在此,校工会和校女教职工委员会谨向辛勤耕耘、默默奉献的全校女教职工,特别是奋战在抗击疫情一线的广大女教职工,致以节日的问候、崇高的敬意和良好的祝愿!</p>
|
||||
<p style="line-height:24pt; margin:0pt; orphans:0; text-align:justify; text-indent:0pt; widows:0">  在这个特别的日子来临之际,校工会和校女教职工委员会决定开展“共抗疫情
|
||||
巾帼展风采”线上主题活动,展现在抗疫期间我校广大女教职工助力抗疫、教学科研、守护家园的良好风貌,引领广大女教职工争做新时代奋斗者,激励广大女教职工坚定信心、共克时艰,为夺取疫情防控和实现学校发展目标双胜利贡献巾帼智慧和力量。</p>
|
||||
</div>
|
||||
<div class="title-v p15">
|
||||
<br/>
|
||||
<h3 class="njuColor">参加人员</h3>
|
||||
<div class="van-hairline--top"></div>
|
||||
<br/>
|
||||
</div>
|
||||
<div class="p15">
|
||||
<p style="line-height:24pt; margin:0pt; orphans:0; text-align:justify; text-indent:0pt; widows:0">
|
||||
  我校在职女教职工。</p>
|
||||
</div>
|
||||
<div class="title-v p15">
|
||||
<br/>
|
||||
<h3 class="njuColor">奖励方式</h3>
|
||||
<div class="van-hairline--top"></div>
|
||||
<br/>
|
||||
</div>
|
||||
<div class="p15">
|
||||
<p style="line-height:24pt; margin:0pt; orphans:0; text-align:justify; text-indent:0pt; widows:0">
|
||||
  参加活动的教职工在正式开学后可领取一至两份精美纪念品,欢迎大家积极参与。</p>
|
||||
</div>
|
||||
<div class="title-v p15">
|
||||
<br/>
|
||||
<h3 class="njuColor">活动内容</h3>
|
||||
<div class="van-hairline--top"></div>
|
||||
<br/>
|
||||
</div>
|
||||
<div class="p15">
|
||||
<p style="line-height:24pt; margin:0pt; orphans:0; text-align:justify; text-indent:0pt; widows:0">
|
||||
  可自愿选择参加下列一项或两项活动,点击右下角“报名”进入活动页面提交相关材料。</p>
|
||||
<div>
|
||||
<p style="line-height:24pt; margin:0pt; orphans:0; text-align:justify; text-indent:0pt; widows:0">
|
||||
<span style=" font-weight:bold">(一)巾帼担当篇——女教职工工作风采征集</span></p>
|
||||
<p style="line-height:24pt; margin:0pt; orphans:0; text-align:justify; text-indent:20pt; widows:0">
|
||||
展现我校女教职工在<b>防控疫情</b>、<b>教学科研</b>、<b>服务保障</b>等方面的风采风貌<,以文字、书画、照片、音视频等作品形式记录和呈现。
|
||||
</p>
|
||||
<p style="line-height:24pt; margin:0pt; orphans:0; text-align:justify; text-indent:20pt; widows:0">
|
||||
文字材料文体不限,可选记叙、散文、诗歌等体裁,提交word版本;书画包括书法、国画、油画、水彩、钢笔画、数码绘画等形式,作品完成之后拍照上传;照片为JPEG格式,每张不小于2M;音视频不超过200M。
|
||||
</p>
|
||||
<p style="line-height:24pt; margin:0pt; orphans:0; text-align:justify; text-indent:0pt; widows:0">
|
||||
<span style=" font-weight:bold">(二)巾帼温馨篇——女教职工居家风采征集</span></p>
|
||||
<p style="line-height:24pt; margin:0pt; orphans:0; text-align:justify; text-indent:20pt; widows:0">
|
||||
征集我校女教职工居家抗疫的风采风貌,<b>拍摄温馨生活、体验烹饪乐趣、玩转创意手工、书写一封家书……</b>
|
||||
</p>
|
||||
<p style="line-height:24pt; margin:0pt; orphans:0; text-align:justify; text-indent:20pt; widows:0">
|
||||
“家书”提交word版本;其余三项活动均提交电子照片或视频,照片为JPEG格式,每张不小于2M,视频不超过200M。
|
||||
</p>
|
||||
<p style="line-height:24pt; margin:0pt; orphans:0; text-align:justify; text-indent:20pt; widows:0">
|
||||
(若您的手机不支持文件上传,请用电脑浏览器打开活动地址https://zhgh.nju.edu.cn/wmMobile参与活动,或发送到校工会邮箱gonghui@nju.edu.cn。)
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="title-v p15">
|
||||
<br/>
|
||||
<h3 class="njuColor">活动联系人</h3>
|
||||
<div class="van-hairline--top"></div>
|
||||
<br/>
|
||||
</div>
|
||||
<div class="p15" style="line-height:24pt;">
|
||||
<p style="text-indent: 20pt;">李 菁:<a href="tel:13404167000">13404167000</a></p>
|
||||
<p style="text-indent: 20pt;">陈 颖:<a href="tel:18951625046">18951625046</a></p>
|
||||
<p style="text-indent: 20pt;">叶潇潇:<a href="tel:15951886628">15951886628</a></p>
|
||||
</div>
|
||||
<div class="title-v p15">
|
||||
<br/>
|
||||
<h3 class="njuColor">技术支持</h3>
|
||||
<div class="van-hairline--top"></div>
|
||||
<br/>
|
||||
</div>
|
||||
<div class="p15" style="line-height:24pt;">
|
||||
  上传作品过程中,如遇技术问题,请咨询:<br/>
|
||||
  王 维:<a href="tel:18272022215">18272022215</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="active==1" class="page-v">
|
||||
<div class="detail-v" style="margin-top: 0">
|
||||
<!-- <h3 style="padding: 5px 15px">战胜疫情,南京大学与您在一起</h3>-->
|
||||
<!-- <span style="font-size: 12px;color: rgb(160,160,160)">报名开始时间:2020-01-01 09:01:01</span> <br/>-->
|
||||
<!-- <span style="font-size: 12px;color: rgb(160,160,160)">报名结束时间:2020-01-01 09:01:01</span>-->
|
||||
|
||||
<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: rgb(106, 0, 95)">
|
||||
基本信息</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: rgb(106, 0, 95)">
|
||||
作品信息</span>
|
||||
<p class="van-doc-demo-block__title" style="margin-top: 5px;color: red">
|
||||
(如同时参加以下两个活动,或有多个主题,请分别提交)</p>
|
||||
|
||||
</div>
|
||||
<van-tabs v-model="hdzplx" color="rgb(106, 0, 95)" type="line">
|
||||
<van-tab name="1" title="巾帼担当篇">
|
||||
<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
|
||||
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
|
||||
:columns="zplxArr2"
|
||||
@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。若您的手机不支持文件上传,请用电脑浏览器打开活动地址https://zhgh.nju.edu.cn/wmMobile参与活动。)</span>
|
||||
<div style="margin: 16px;">
|
||||
<van-button round block color="rgb(106, 0, 95)" type="info" native-type="submit">
|
||||
提交
|
||||
</van-button>
|
||||
</div>
|
||||
</van-form>
|
||||
</van-tab>
|
||||
<van-tab name='2' title="巾帼温馨篇">
|
||||
<van-form @submit="doSubmit">
|
||||
<van-field style="padding-top: 30px" maxlength="15"
|
||||
:rules="[{ required: true, message: '请填写作品主题' }]"
|
||||
v-model="formData2.hdsbzpzt"
|
||||
required
|
||||
show-word-limit
|
||||
label="作品主题" placeholder="主题"></van-field>
|
||||
<van-field
|
||||
required
|
||||
readonly
|
||||
clickable
|
||||
name="picker"
|
||||
:value="formData2.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
|
||||
:columns="zplxArr"
|
||||
@confirm="onConfirm"
|
||||
@cancel="showPicker = false"
|
||||
></van-picker>
|
||||
</van-popup>
|
||||
<van-field type="textarea" show-word-limit maxlength="100" autosize
|
||||
v-model="formData2.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 formData2.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="formData2.imgList.splice(idx,1)"
|
||||
slot="right"
|
||||
square
|
||||
text="删除"
|
||||
type="danger"
|
||||
class="delete-button"
|
||||
></van-button>
|
||||
</van-swipe-cell>
|
||||
<van-field>
|
||||
<template #input>
|
||||
<van-uploader multiple :preview-image="false" :before-read="beforeReadImg"
|
||||
accept="image/*"
|
||||
:max-count="5"
|
||||
v-model="formData2.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 formData2.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="formData2.videoList.splice(idx,1)"
|
||||
slot="right"
|
||||
square
|
||||
text="删除"
|
||||
type="danger"
|
||||
class="delete-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="formData2.videoList"></van-uploader>
|
||||
</template>
|
||||
</van-field>
|
||||
<span style="padding-left: 15px;font-size: 12px;color: rgb(160,160,160)">(注意:图片最多5张,视频最大200M。若您的手机不支持文件上传,请用电脑浏览器打开活动地址https://zhgh.nju.edu.cn/wmMobile参与活动。)</span>
|
||||
<div style="margin: 16px;">
|
||||
<van-button round block color="rgb(106, 0, 95)" 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="rgb(106,0,95)"
|
||||
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 {
|
||||
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) {
|
||||
if (vue.hdzplx == 1) {
|
||||
this.formData.hdzplx2 = value;
|
||||
} else {
|
||||
this.formData2.hdzplx2 = value;
|
||||
}
|
||||
|
||||
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) {
|
||||
setTimeout(function () {
|
||||
// $.get("/platform/hd/wm/wmMobile/getSubCount", {userid: vue.formData.userid}, function (data) {
|
||||
// if (data == true) {
|
||||
|
||||
vue.showMsg = true
|
||||
vue.showPlan = true
|
||||
vue.percent = 0
|
||||
vue.msg = ''
|
||||
|
||||
|
||||
var formdata = new FormData();
|
||||
|
||||
if (vue.hdzplx == 1) {
|
||||
formdata.append("hdsbrid", vue.isNull(vue.formData.userid) ? '' : vue.formData.userid);
|
||||
formdata.append("hdsbzpzt", vue.isNull(vue.formData.hdsbzpzt) ? '' : vue.formData.hdsbzpzt);
|
||||
formdata.append("hdzplx", vue.isNull(vue.hdzplx) ? '' : vue.hdzplx);
|
||||
formdata.append("hdzplx2", vue.isNull(vue.zplxObj2[vue.formData.hdzplx2]) ? '' : vue.zplxObj2[vue.formData.hdzplx2]);
|
||||
formdata.append("hdsbzpms", vue.isNull(vue.formData.hdsbzpms) ? '' : vue.formData.hdsbzpms);
|
||||
formdata.append("hdsbsj", moment().format('YYYY-MM-DD HH:mm:ss'));
|
||||
vue.formData.imgList.forEach(function (val) {
|
||||
formdata.append("files", val.file, vue.isNull(val.ms) ? val.file.name : val.ms + getSuffix(val.file.name));
|
||||
});
|
||||
vue.formData.videoList.forEach(function (val) {
|
||||
formdata.append("files", val.file, vue.isNull(val.ms) ? val.file.name : val.ms + getSuffix(val.file.name));
|
||||
});
|
||||
} else if (vue.hdzplx == 2) {
|
||||
formdata.append("hdsbrid", vue.isNull(vue.formData.userid) ? '' : vue.formData.userid);
|
||||
formdata.append("hdsbzpzt", vue.isNull(vue.formData2.hdsbzpzt) ? '' : vue.formData2.hdsbzpzt);
|
||||
formdata.append("hdzplx", vue.isNull(vue.hdzplx) ? '' : vue.hdzplx);
|
||||
formdata.append("hdzplx2", vue.isNull(vue.zplxObj[vue.formData2.hdzplx2]) ? '' : vue.zplxObj[vue.formData2.hdzplx2]);
|
||||
formdata.append("hdsbzpms", vue.isNull(vue.formData2.hdsbzpms) ? '' : vue.formData2.hdsbzpms);
|
||||
formdata.append("hdsbsj", moment().format('YYYY-MM-DD HH:mm:ss'));
|
||||
vue.formData2.imgList.forEach(function (val) {
|
||||
formdata.append("files", val.file, vue.isNull(val.ms) ? val.file.name : val.ms + getSuffix(val.file.name));
|
||||
});
|
||||
vue.formData2.videoList.forEach(function (val) {
|
||||
formdata.append("files", val.file, vue.isNull(val.ms) ? val.file.name : val.ms + getSuffix(val.file.name));
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
$.ajax({
|
||||
url: "/platform/hd/wm/wmMobile/doSubmit",
|
||||
type: "post",
|
||||
data: formdata,
|
||||
processData: false,
|
||||
contentType: false,
|
||||
xhr: xhrOnProgress(function (e) {
|
||||
if (e.total == 0) {
|
||||
vue.percent = 0
|
||||
} else {
|
||||
vue.percent = ((e.loaded / e.total) * 100).toFixed(0);//文件上传百分比
|
||||
}
|
||||
|
||||
}),
|
||||
success: function (data) {
|
||||
if (data.code === 0) {
|
||||
if (vue.hdzplx == 1) {
|
||||
vue.formData.hdsbzpzt = ''
|
||||
vue.formData.hdsbzpms = ''
|
||||
vue.formData.hdzplx2 = ''
|
||||
vue.formData.imgList = []
|
||||
vue.formData.videoList = []
|
||||
vue.formData.audioList = []
|
||||
Cookies.remove('formData');
|
||||
} else if (vue.hdzplx == 2) {
|
||||
vue.formData2.hdsbzpzt = ''
|
||||
vue.formData2.hdsbzpms = ''
|
||||
vue.formData2.hdzplx2 = ''
|
||||
vue.formData2.imgList = []
|
||||
vue.formData2.videoList = []
|
||||
vue.formData2.audioList = []
|
||||
Cookies.remove('formData2');
|
||||
}
|
||||
vue.msg = '<p class="weui-msg__desc">我们已收到您的作品!<br/>非常感谢您的支持!</p>'
|
||||
vue.flag = true
|
||||
} else {
|
||||
|
||||
vue.msg = '<p class="weui-msg__desc">非常抱歉对您造成的不便!<br/>请联系系统管理员进行修复!</p>'
|
||||
vue.flag = false
|
||||
}
|
||||
vue.showPlan = false
|
||||
},
|
||||
error: function (data) {
|
||||
vue.msg = '<p class="weui-msg__desc">非常抱歉对您造成的不便!<br/>请联系系统管理员进行修复!</p>'
|
||||
vue.flag = false
|
||||
vue.showPlan = false
|
||||
}
|
||||
});
|
||||
// } else {
|
||||
// vue.$notify({type: 'danger', message: '您已上传过作品!请勿重复发提交'})
|
||||
// }
|
||||
// })
|
||||
}, 500)
|
||||
}).catch(function (reason) {
|
||||
|
||||
});
|
||||
},
|
||||
// 返回布尔值
|
||||
beforeReadImg: function (file) {
|
||||
return true;
|
||||
},
|
||||
// 返回布尔值
|
||||
beforeReadVideo: function (file, detail) {
|
||||
var suffix = getSuffix(file.name)
|
||||
if (suffix == null) {
|
||||
vue.$toast('获取不到后缀名!');
|
||||
return false;
|
||||
}
|
||||
// var type = suffix.toString().substring(suffix.lastIndexOf(".") + 2)
|
||||
// if (vue.videotype.indexOf(type) == -1 && vue.audiotype.indexOf(type) == -1 && vue.doctype.indexOf(type) == -1) {
|
||||
// vue.$toast('不支持的文件类型!');
|
||||
// return false;
|
||||
// }
|
||||
return true;
|
||||
},
|
||||
},
|
||||
created: function () {
|
||||
var self = this
|
||||
if (window.innerWidth > 800) {
|
||||
self.$notify({type: 'warning', message: '当前窗口宽度过大!部分区域显示会出现大小偏差'});
|
||||
}
|
||||
|
||||
|
||||
if (Cookies.get("formData") != undefined) {
|
||||
parseData = JSON.parse(Cookies.get("formData"))
|
||||
self.formData = {
|
||||
userid: parseData.userid,
|
||||
loginname: parseData.loginname,
|
||||
username: parseData.username,
|
||||
unionname: parseData.unionname,
|
||||
hdsbzpzt: parseData.hdsbzpzt,
|
||||
hdsbzpms: parseData.hdsbzpms,
|
||||
hdzplx: parseData.hdzplx,
|
||||
hdzplx2: parseData.hdzplx2,
|
||||
imgList: [],
|
||||
videoList: [],
|
||||
}
|
||||
Cookies.remove('formData');
|
||||
}
|
||||
if (Cookies.get("formData2") != undefined) {
|
||||
parseData = JSON.parse(Cookies.get("formData2"))
|
||||
self.formData2 = {
|
||||
hdsbzpzt: parseData.hdsbzpzt,
|
||||
hdsbzpms: parseData.hdsbzpms,
|
||||
hdzplx: parseData.hdzplx,
|
||||
hdzplx2: parseData.hdzplx2,
|
||||
imgList: [],
|
||||
videoList: [],
|
||||
}
|
||||
Cookies.remove('formData2');
|
||||
}
|
||||
setInterval(function () {
|
||||
var data = {
|
||||
userid: self.formData.userid,
|
||||
loginname: self.formData.loginname,
|
||||
username: self.formData.username,
|
||||
unionname: self.formData.unionname,
|
||||
hdsbzpzt: self.formData.hdsbzpzt,
|
||||
hdsbzpms: self.formData.hdsbzpms,
|
||||
hdzplx: self.formData.hdzplx,
|
||||
hdzplx2: self.formData.hdzplx2,
|
||||
}
|
||||
var data2 = {
|
||||
hdsbzpzt: self.formData2.hdsbzpzt,
|
||||
hdsbzpms: self.formData2.hdsbzpms,
|
||||
hdzplx: self.formData2.hdzplx,
|
||||
hdzplx2: self.formData2.hdzplx2,
|
||||
}
|
||||
Cookies.set("formData", JSON.stringify(data))
|
||||
Cookies.set("formData2", JSON.stringify(data2))
|
||||
}, 1000)
|
||||
}
|
||||
})
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,556 @@
|
||||
<!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>
|
||||
@@ -0,0 +1,666 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<link href="${base!}/assets/platform/plugins/video/css/video-js.min.css" rel="stylesheet">
|
||||
<script src="${base!}/assets/platform/plugins/video/js/video.min.js"></script>
|
||||
|
||||
<style>
|
||||
.el-col > .el-cascader, .el-col > .el-select, .el-col > .el-date-editor {
|
||||
width: 100% !important;
|
||||
}
|
||||
|
||||
.filedialog .el-dialog__header i {
|
||||
font-size: 30px;
|
||||
}
|
||||
|
||||
.filedialog .el-dialog__body {
|
||||
padding: 20px 0 0 0;
|
||||
}
|
||||
|
||||
|
||||
.video-js {
|
||||
width: 100%;
|
||||
height: 450px;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.vjs-tech, .video-js button {
|
||||
outline: none;
|
||||
}
|
||||
|
||||
#app .el-table th.gutter {
|
||||
display: table-cell !important
|
||||
}
|
||||
|
||||
.filedialog .el-dialog {
|
||||
min-height: 500px;
|
||||
}
|
||||
|
||||
|
||||
.video-js .vjs-big-play-button { /* 中间大的播放按钮 */
|
||||
font-size: 2.5em;
|
||||
line-height: 2.3em;
|
||||
height: 2.5em;
|
||||
width: 2.5em;
|
||||
-webkit-border-radius: 2.5em;
|
||||
-moz-border-radius: 2.5em;
|
||||
border-radius: 2.5em;
|
||||
background-color: rgba(115, 133, 159, .5);
|
||||
border-width: 0.12em;
|
||||
margin-top: -1.25em;
|
||||
margin-left: -1.75em;
|
||||
}
|
||||
|
||||
.video-js.vjs-paused .vjs-big-play-button { /* 视频暂停时显示播放按钮 */
|
||||
display: block;
|
||||
}
|
||||
|
||||
.video-js.vjs-error .vjs-big-play-button { /* 视频加载出错时隐藏播放按钮 */
|
||||
display: none;
|
||||
}
|
||||
|
||||
.vjs-loading-spinner { /* 加载圆圈 */
|
||||
font-size: 2.5em;
|
||||
width: 2em;
|
||||
height: 2em;
|
||||
border-radius: 1em;
|
||||
margin-top: -1em;
|
||||
margin-left: -1.5em;
|
||||
}
|
||||
|
||||
.el-image {
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.el-divider__text {
|
||||
color: #abc5df;
|
||||
}
|
||||
|
||||
.el-divider {
|
||||
background-color: #e5edf6;
|
||||
}
|
||||
|
||||
.view-myvideo-tab {
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
background-color: #C0C4CC;
|
||||
text-align: center;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.video-toggle-i:hover .el-icon-video-camera-solid {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.video-toggle-i:hover .el-icon-video-play {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
|
||||
.view-myvideo-tab .el-icon-video-camera-solid, .view-myvideo-tab .el-icon-video-play, .view-myvideo-tab .el-icon-document {
|
||||
color: #000000;
|
||||
line-height: 80px;
|
||||
font-size: 40px;
|
||||
}
|
||||
|
||||
|
||||
.view-myvideo-tab .el-icon-download {
|
||||
width: 100px;
|
||||
}
|
||||
|
||||
.el-icon-video-play {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.ckdialogclass .el-dialog__body {
|
||||
padding-top: 10px;
|
||||
}
|
||||
|
||||
.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;
|
||||
}
|
||||
|
||||
.ckdialogclass .el-icon-circle-close {
|
||||
color: white;
|
||||
}
|
||||
|
||||
.el-image-viewer__wrapper {
|
||||
z-index: 99999 !important;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
|
||||
<div class="search">
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">年度:</div>
|
||||
<div class="search-item-option">
|
||||
<el-date-picker @change="yearChange" placeholder="年度"
|
||||
style="width: 100%"
|
||||
type="year"
|
||||
v-model="pageForm.year"
|
||||
value-format="yyyy"></el-date-picker>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">活动主题:</div>
|
||||
<div class="search-item-option">
|
||||
<el-select @change="hdchange" clearable placeholder="请选择活动主题"
|
||||
style="width: 100%" v-model="pageForm.hdid">
|
||||
<el-option :key="i.value"
|
||||
:label="i.label"
|
||||
:value="i.value"
|
||||
v-for="i in hdxxlist"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">活动类别:</div>
|
||||
<div class="search-item-option">
|
||||
<el-select @change="hdlbchange" clearable placeholder="请选择活动类别"
|
||||
style="width: 100%" v-model="pageForm.hdlb">
|
||||
<el-option :label="o.lname" :value="o.lid"
|
||||
v-for="o in hdlblist"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">作品类别:</div>
|
||||
<div class="search-item-option">
|
||||
<el-select clearable placeholder="请选择作品类别" style="width: 100%"
|
||||
v-model="pageForm.zplb">
|
||||
<el-option :label="o.zname" :value="o.zid"
|
||||
v-for="o in hdzplblist"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">是否优秀:</div>
|
||||
<div class="search-item-option">
|
||||
<el-radio-group v-model="pageForm.isExcellent">
|
||||
<el-radio-button label="">全部</el-radio-button>
|
||||
<el-radio-button label="1">优秀</el-radio-button>
|
||||
<el-radio-button label="0">普通</el-radio-button>
|
||||
</el-radio-group>
|
||||
</div>
|
||||
</div>
|
||||
<template v-if="searchMore">
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">姓名/工号:</div>
|
||||
<div class="search-item-option">
|
||||
<el-input @keyup.enter.native="doSearch" clearable
|
||||
placeholder="请输入内容"
|
||||
v-model="pageForm.searchKeyword">
|
||||
<el-select clearable placeholder="查询类型"
|
||||
slot="prepend"
|
||||
style="width: 100px;"
|
||||
v-model="pageForm.searchName">
|
||||
<el-option label="姓名" value="u.username"></el-option>
|
||||
<el-option label="工号" value="u.loginname"></el-option>
|
||||
</el-select>
|
||||
</el-input>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">所属工会:</div>
|
||||
<div class="search-item-option">
|
||||
<el-select @change="unionChange" clearable filterable="true"
|
||||
placeholder="所属工会"
|
||||
style="width: 100%" v-model="pageForm.union">
|
||||
<el-option :label="item.unionname" :value="item.id"
|
||||
v-for="item in unions"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">所属单位:</div>
|
||||
<div class="search-item-option">
|
||||
<el-select clearable="true" filterable placeholder="所属单位"
|
||||
style="width: 100%"
|
||||
style="width: 200px;"
|
||||
v-model="pageForm.unit">
|
||||
<el-option :label="item.name" :value="item.id"
|
||||
v-for="item in units"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</template>
|
||||
|
||||
<div class="search-query">
|
||||
<el-button @click="doSearch" icon="el-icon-search" type="primary">搜索
|
||||
</el-button>
|
||||
|
||||
<more v-model="searchMore"></more>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</el-card>
|
||||
<el-card class="mt20" shadow="never">
|
||||
<vi-title2 title="作品列表">
|
||||
<template #func>
|
||||
<el-button @click="exportExcel" size="small" type="primary">
|
||||
<i class="el-icon-tickets"></i>
|
||||
导出Excel
|
||||
</el-button>
|
||||
|
||||
<el-button @click="exportWork" size="small" type="primary">
|
||||
<i class="el-icon-tickets"></i>
|
||||
导出作品
|
||||
</el-button>
|
||||
</template>
|
||||
</vi-title2>
|
||||
<el-table :data="tableData" @sort-change="pageOrder">
|
||||
<el-table-column align="center" header-align="center" label="序号" type="index"
|
||||
width="50">
|
||||
<template scope="scope">
|
||||
<span>{{scope.$index+(pageForm.pageNumber - 1) * pageForm.pageSize + 1}} </span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="姓名" prop="username"
|
||||
sortable></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="工号"
|
||||
prop="loginname"></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="单位" prop="dwname"
|
||||
show-overflow-tooltip
|
||||
sortable></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="分工会" prop="ghname"
|
||||
show-overflow-tooltip
|
||||
sortable></el-table-column><!--
|
||||
<el-table-column align="center" header-align="center" label="活动主题"
|
||||
prop="hdname"></el-table-column>-->
|
||||
<el-table-column align="center" header-align="center" label="活动类别"
|
||||
prop="hdlbname"
|
||||
sortable></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="作品类别"
|
||||
prop="zplbname"
|
||||
sortable></el-table-column>
|
||||
|
||||
<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="是否优秀作品"
|
||||
prop="isExcellent"
|
||||
show-overflow-tooltip>
|
||||
<template slot-scope="{row}">
|
||||
{{row.isExcellent?'优秀':'普通'}}
|
||||
</template>
|
||||
|
||||
</el-table-column><!--
|
||||
<el-table-column align="center" header-align="center" label="点赞次数(次)"
|
||||
prop="dz_num">
|
||||
</el-table-column>--><!--
|
||||
<el-table-column align="center" prop="auditState" header-align="center"
|
||||
label="审核状态" sortable>
|
||||
<template scope="scope">
|
||||
<span :style="'color:'+scope.row.statecolor">{{scope.row.statename}}</span>
|
||||
</template>
|
||||
</el-table-column>-->
|
||||
<el-table-column align="center" header-align="center" label="操作" width="300">
|
||||
<template slot-scope="scope">
|
||||
<el-button @click="viewInfo(scope)" size="mini" type="primary">查看
|
||||
</el-button>
|
||||
<el-button @click="doExcellent(scope.row.id)" size="mini" type="primary"
|
||||
v-if="!scope.row.isExcellent">设为优秀
|
||||
</el-button>
|
||||
<el-button @click="cancelExcellent(scope.row.id)" size="mini"
|
||||
type="danger"
|
||||
v-if="scope.row.isExcellent">
|
||||
取消优秀
|
||||
</el-button>
|
||||
<el-button @click="doDelete(scope.row.id)" size="mini" type="danger">
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<el-row class="el-pagination-container">
|
||||
<el-pagination
|
||||
:current-page="pageForm.pageNumber"
|
||||
:page-size="pageForm.pageSize"
|
||||
:page-sizes="[10, 20, 30, 50]"
|
||||
:total="pageForm.totalCount"
|
||||
@current-change="pageNumberChange"
|
||||
@size-change="pageSizeChange"
|
||||
layout="total, sizes, prev, pager, next, jumper">
|
||||
</el-pagination>
|
||||
</el-row>
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<info @playvideo="playvideo" ref="info"></info>
|
||||
</template>
|
||||
|
||||
</guava>
|
||||
|
||||
|
||||
<el-dialog :close-on-click-modal="false" :visible.sync="fileDialogVisible"
|
||||
@close="filedialogClose"
|
||||
class="filedialog">
|
||||
<div id="videoContainer"></div>
|
||||
</el-dialog>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
window.vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data: function () {
|
||||
return {
|
||||
units: [],
|
||||
unions: [],
|
||||
hasSuperAdminOrXghRole: "${@shiro.hasAnyRoles('sysadmin','A06','H10')}" === 'true' ? true : false,
|
||||
audio: {
|
||||
name: '东西(Cover:林俊呈)',
|
||||
artist: '纳豆',
|
||||
url: 'https://cdn.moefe.org/music/mp3/thing.mp3',
|
||||
cover: 'https://p1.music.126.net/5zs7IvmLv7KahY3BFzUmrg==/109951163635241613.jpg?param=300y300', // prettier-ignore
|
||||
lrc: 'https://cdn.moefe.org/music/lrc/thing.lrc',
|
||||
},
|
||||
tableData: [],
|
||||
pageForm: {
|
||||
year: new Date().getFullYear() + '',
|
||||
searchName: "u.username",
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
hdid: '',
|
||||
hdlb: '',
|
||||
zplb: '',
|
||||
stateId: '',
|
||||
unit: '',
|
||||
union: '',
|
||||
isExcellent: '',
|
||||
},
|
||||
hdxxlist: [],
|
||||
videoSrc: '',
|
||||
viewDialogVisible: false,
|
||||
fileDialogVisible: false,
|
||||
imgSrc: '',
|
||||
fileList: [],
|
||||
viewData: {},
|
||||
imgtype: ['gif', 'jpg', 'png', 'jpeg'],
|
||||
videotype: ['flv', 'swf', 'mkv', 'avi', 'rm', 'rmvb', 'wmv', 'mp4', 'mov', 'mpg', 'mpeg'],
|
||||
doctype: ['doc', 'docx'],
|
||||
audiotype: ['mp3', 'wma', 'flac', 'wav', 'm4a', 'amr', 'au'],
|
||||
prevImgList: [],
|
||||
img2List: [],
|
||||
videoList: [],
|
||||
docList: [],
|
||||
audioList: [],
|
||||
ckusername: '',//当前查看的人的姓名 下载的时候一起传过去,
|
||||
hdlblist: [],
|
||||
hdzplblist: [],
|
||||
yearActivityList: [],
|
||||
auditStateList: [],
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
'pageForm.hdid'(val) {
|
||||
this.$set(this.pageForm, "hdlb", '')
|
||||
this.$set(this.pageForm, "zplb", '')
|
||||
},
|
||||
'pageForm.hdlb'(val) {
|
||||
this.$set(this.pageForm, "zplb", '')
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'info': httpVueLoader('/components/hd/hdwmInfo.vue'),
|
||||
},
|
||||
methods: {
|
||||
async doExcellent(id) {
|
||||
const resp = await $.post("/platform/hd/wmhd/doExcellent", {id: id})
|
||||
if (resp.code === 0) {
|
||||
this.notifySuccess(resp.msg)
|
||||
this.doSearch();
|
||||
} else {
|
||||
this.notifyError(resp.msg)
|
||||
}
|
||||
},
|
||||
async cancelExcellent(id) {
|
||||
const resp = await $.post("/platform/hd/wmhd/cancelExcellent", {id: id})
|
||||
if (resp.code === 0) {
|
||||
this.notifySuccess(resp.msg)
|
||||
this.doSearch();
|
||||
} else {
|
||||
this.notifyError(resp.msg)
|
||||
}
|
||||
},
|
||||
yearChange(val) {
|
||||
let activityList = []
|
||||
if (val === null) {
|
||||
this.yearActivityList.map(v => {
|
||||
activityList = activityList.concat(v.children)
|
||||
})
|
||||
} else {
|
||||
let enen = this.yearActivityList.filter(v => v.value == val)
|
||||
enen.map(v => {
|
||||
activityList = activityList.concat(v.children)
|
||||
})
|
||||
}
|
||||
this.hdxxlist = activityList
|
||||
this.$set(this.pageForm, "hdid", '')
|
||||
this.$set(this.pageForm, "hdlb", '')
|
||||
this.$set(this.pageForm, "zplb", '')
|
||||
},
|
||||
async unionChange() {
|
||||
this.$set(this.pageForm, "unit", '')
|
||||
this.units = await getUnits(this.pageForm.union)
|
||||
},
|
||||
|
||||
hdchange(v) {
|
||||
this.$set(this.pageForm, 'hdlb', '');
|
||||
this.$set(this.pageForm, 'zplb', '');
|
||||
$.post('/platform/hd/childhd/zpxx/gethdlblist', {id: v}).then(data => {
|
||||
if (data.code == 0) {
|
||||
this.hdlblist = data.data;
|
||||
}
|
||||
});
|
||||
},
|
||||
hdlbchange(id) {
|
||||
this.$set(this.pageForm, 'zplb', '');
|
||||
$.post('/platform/hd/childhd/zpxx/gethdzplblist', {id: id}).then(data => {
|
||||
if (data.code == 0) {
|
||||
this.hdzplblist = data.data;
|
||||
}
|
||||
});
|
||||
},
|
||||
async pageData() {
|
||||
var self = this;
|
||||
sublime.showLoadingbar();
|
||||
$.post(base + '/platform/hd/wmhd/pageData', self.pageForm, function (data) {
|
||||
sublime.closeLoadingbar();
|
||||
if (data.code == 0) {
|
||||
self.tableData = data.data.list;
|
||||
self.pageForm.totalCount = data.data.totalCount;
|
||||
}
|
||||
});
|
||||
},
|
||||
pageSizeChange: function (val) {
|
||||
this.pageForm.pageSize = val;
|
||||
this.pageData();
|
||||
},
|
||||
pageNumberChange: function (val) {
|
||||
this.pageForm.pageNumber = val;
|
||||
this.pageData();
|
||||
},
|
||||
async viewInfo(scope) {
|
||||
|
||||
this.$refs.info.getInfo(scope.row.id)
|
||||
this.$refs.guava.view()
|
||||
|
||||
|
||||
},
|
||||
playvideo: function (fjurl) {
|
||||
var self = this;
|
||||
self.fileDialogVisible = true;
|
||||
self.$nextTick(function () {
|
||||
var vc = document.getElementById('videoContainer');
|
||||
var newVideo = document.createElement("div");//创建一个标签
|
||||
newVideo.innerHTML = '<video id="my-video" class="video-js vjs-default-skin vjs-big-play-centered" controls preload="auto"></video>';
|
||||
vc.appendChild(newVideo);
|
||||
var option = {autoplay: false, language: 'zh-CN'};
|
||||
var myPlayer = videojs('my-video', option, function onPlayerReady() {
|
||||
var myPlayer = this;
|
||||
myPlayer.src({src: fjurl, type: "video/mp4"}); /*videojs.log("播放器已经准备好了!");*/
|
||||
//this.play();
|
||||
});
|
||||
})
|
||||
},
|
||||
filedialogClose: function () {
|
||||
//关闭的时候需要销毁video 但是随之dom元素也会被删除!!!!
|
||||
videojs('my-video').dispose();
|
||||
},
|
||||
viewdialogClose: function () {
|
||||
//停止播放音频
|
||||
var audio = document.getElementById('amusic');
|
||||
if (audio != null) {
|
||||
document.getElementById('amusic').pause();
|
||||
}
|
||||
},
|
||||
exportWork() {
|
||||
let {hdid, hdlb, zplb, union, unit, stateId, isExcellent} = this.pageForm;
|
||||
if (hdid === '') {
|
||||
this.$message.warning('请先选择活动主题');
|
||||
return;
|
||||
}
|
||||
let hdarr = this.hdxxlist.filter(o => {
|
||||
return o.value == hdid;
|
||||
});
|
||||
let hdname = hdarr[0].label;
|
||||
window.open('/platform/hd/wmhd/exportWork?hdid=' + hdid +
|
||||
'&hdname=' + hdname +
|
||||
"&hdlb=" + hdlb +
|
||||
"&zplb=" + zplb +
|
||||
"&union=" + union +
|
||||
"&unit=" + unit +
|
||||
"&isExcellent=" + isExcellent +
|
||||
"&stateId=" + stateId);
|
||||
},
|
||||
exportExcel: function () {
|
||||
let {hdid, hdlb, zplb, union, unit, year, searchName, searchKeyword, stateId, isExcellent} = this.pageForm;
|
||||
if (hdid === '') {
|
||||
this.$message.warning('请先选择活动主题');
|
||||
return;
|
||||
}
|
||||
let hdarr = this.hdxxlist.filter(o => {
|
||||
return o.value == hdid;
|
||||
});
|
||||
let hdname = hdarr[0].label;
|
||||
let query = $.param({
|
||||
hdid: hdid,
|
||||
hdname: hdname,
|
||||
hdlb: hdlb,
|
||||
zplb: zplb,
|
||||
union: union,
|
||||
unit: unit,
|
||||
year: year,
|
||||
searchName: searchName,
|
||||
searchKeyword: searchKeyword,
|
||||
isExcellent: isExcellent,
|
||||
stateId: stateId
|
||||
});
|
||||
window.open('/platform/hd/wmhd/exportExcel?' + query);
|
||||
},
|
||||
doSearch: function () {
|
||||
this.pageForm.pageNumber = 1;
|
||||
this.pageData();
|
||||
},
|
||||
downLoad: function (item) {
|
||||
window.open('/platform/hd/wmhd/download?filepath=' + item.fjurl + '&filename=' + item.fjname + "&username=" + this.ckusername);
|
||||
//window.location.href='/platform/hd/wmhd/download?filepath='+item.fjurl+'&filename='+item.fjname+"&username="+this.ckusername;
|
||||
},
|
||||
YlDoc: function (item) {
|
||||
var self = this;
|
||||
window.open('/platform/hd/wmhd/YlDoc?fjurl=' + item.fjurl);
|
||||
},
|
||||
async initHdxxlist() {
|
||||
// await $.post(base + '/platform/hd/wmhd/initHdxxlist').then(data => {
|
||||
// if (data.code == 0) {
|
||||
// this.hdxxlist = data.data;
|
||||
// this.pageForm.hdids = [new Date().getFullYear(), this.hdxxlist.find(v => v.value == new Date().getFullYear() + "").children[0].value]
|
||||
// this.pageForm.hdid = this.hdxxlist.find(v => v.value == new Date().getFullYear() + "").children[0].value
|
||||
// }
|
||||
// });
|
||||
await $.post(base + '/platform/hd/wmhd/initHdxxlist').then(data => {
|
||||
if (data.code == 0) {
|
||||
this.yearActivityList = data.data
|
||||
let activityList = []
|
||||
data.data.map(v => {
|
||||
activityList = activityList.concat(v.children)
|
||||
})
|
||||
this.hdxxlist = activityList
|
||||
}
|
||||
});
|
||||
},
|
||||
async doDelete(id) {
|
||||
const confirm = await this.$confirm('确定要删除吗, 是否继续?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm) {
|
||||
const resp = await $.post(loc() + '/doDelete', {id: id})
|
||||
if (resp.code === 0) {
|
||||
this.notifySuccess(resp.msg)
|
||||
this.doSearch()
|
||||
} else {
|
||||
this.notifyError(resp.msg)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
},
|
||||
async getAuditStateByModule() {
|
||||
const {data} = await $.post(loc() + '/getAuditStateByModule')
|
||||
this.auditStateList = data
|
||||
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
await this.initHdxxlist();
|
||||
if (this.hdxxlist && this.hdxxlist.length > 0) {
|
||||
this.pageForm.hdid = this.hdxxlist[0].value
|
||||
this.hdchange(this.pageForm.hdid)
|
||||
}
|
||||
await this.pageData();
|
||||
|
||||
|
||||
this.unions = await getUnions(null)
|
||||
this.units = await getUnits(null)
|
||||
await this.getAuditStateByModule()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,419 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
|
||||
<el-card shadow="never">
|
||||
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-select v-model="pageForm.hdid" clearable @change="hdchange"
|
||||
placeholder="请选择活动主题">
|
||||
<el-option v-for="o in hdxxlist" :label="o.label"
|
||||
:value="o.value"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-select v-model="pageForm.hdlb" placeholder="请选择活动类型" clearable
|
||||
@change="hdlbchange">
|
||||
<el-option v-for="o in hdlblist" :label="o.lname"
|
||||
:value="o.lid"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-select v-model="pageForm.zplb" placeholder="请选择作品类型" clearable>
|
||||
<el-option v-for="o in hdzplblist" :label="o.zname"
|
||||
:value="o.zid"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-select placeholder="所属工会" v-model="pageForm.unionId" style="width: 100%;"
|
||||
clearable="true"
|
||||
@change="flushUnits" @clear="flushUnits"
|
||||
|
||||
v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('H03')}"
|
||||
|
||||
filterable="true">
|
||||
<el-option v-for="item in unions" :label="item.unionname"
|
||||
:value="item.id"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-select placeholder="所属单位" v-model="pageForm.unitId" style="width: 100%;"
|
||||
clearable="true"
|
||||
filterable="true">
|
||||
<el-option v-for="item in units" :label="item.name"
|
||||
:value="item.id"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
<div class="btn-group tool-button mt5" v-if="pageForm.isAudit===null">
|
||||
<el-select placeholder="审核状态" v-model="pageForm.stateId"
|
||||
style="width: 200px;"
|
||||
clearable
|
||||
filterable>
|
||||
<el-option label="待校工会审核" value="4200"></el-option>
|
||||
<el-option label="校工会退回" value="4250"></el-option>
|
||||
<el-option label="校工会拒绝" value="4300"></el-option>
|
||||
<el-option label="审核通过" value="4400"></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-card>
|
||||
|
||||
|
||||
<el-card class="mt20" shadow="never">
|
||||
<vi-title2 title="作品列表">
|
||||
<template #func>
|
||||
<el-button type="primary" icon="el-icon-position" size="small" @click="openAudit" class="mr10"
|
||||
:disabled="multipleSelection.length==0">
|
||||
批量审核
|
||||
</el-button>
|
||||
<el-radio-group v-model="pageForm.isAudit" @change="doSearch" size="small">
|
||||
<el-radio-button :label="null">全部</el-radio-button>
|
||||
<el-radio-button :label="true">已审核</el-radio-button>
|
||||
<el-radio-button :label="false">未审核</el-radio-button>
|
||||
</el-radio-group>
|
||||
</template>
|
||||
</vi-title2>
|
||||
<el-table :data="tableData" ref="table" @sort-change="pageOrder" row-key="id"
|
||||
@selection-change="handleSelectionChange">
|
||||
<el-table-column
|
||||
reserve-selection
|
||||
:selectable="(row)=>{return row.auditState=='4200'}"
|
||||
type="selection"
|
||||
width="55">
|
||||
</el-table-column>
|
||||
<el-table-column label="序号" type="index" header-align="center" align="center"
|
||||
width="50">
|
||||
<template scope="scope">
|
||||
<span>{{scope.$index+(pageForm.pageNumber - 1) * pageForm.pageSize + 1}} </span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column prop="hdname" label="活动主题" header-align="center" align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="username" label="教职工姓名" header-align="center"
|
||||
align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="loginname" label="工号" header-align="center"
|
||||
align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="dwname" label="单位" header-align="center" align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="ghname" label="分工会" header-align="center" align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="hdlbname" label="活动类别" header-align="center"
|
||||
align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="zplbname" label="作品类别" header-align="center"
|
||||
align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="hdsbsj" label="上传时间" header-align="center" align="center"
|
||||
show-overflow-tooltip>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" prop="auditState" header-align="center"
|
||||
label="审核状态" sortable>
|
||||
<template scope="scope">
|
||||
<span :style="'color:'+scope.row.stateColor">{{scope.row.stateName}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" header-align="center" align="center" width="300">
|
||||
<template slot-scope="scope">
|
||||
<el-button size="mini" type="primary" @click="viewInfo(scope.row)">查看</el-button>
|
||||
|
||||
<el-button v-if="scope.row.auditState==='4200'"
|
||||
type="primary" size="mini"
|
||||
@click="openAudit(scope.row)">审核
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
|
||||
|
||||
</template>
|
||||
|
||||
|
||||
<template #view>
|
||||
<info ref="info" @playvideo="playvideo"></info>
|
||||
</template>
|
||||
|
||||
<template #edit>
|
||||
<template v-if="multipleSelection.length===0">
|
||||
<info ref="info2" handle label="校工会审核" @playvideo="playvideo">
|
||||
|
||||
|
||||
<template #handle>
|
||||
|
||||
<el-form :model="formData" ref="form" :rules="formRules" label-position="right"
|
||||
style="padding: 20px 0"
|
||||
label-width="120px">
|
||||
<el-form-item label="审核信息 " label-width="135px" class="view-header">
|
||||
</el-form-item>
|
||||
|
||||
<el-row gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="auditor" label="审核人员">
|
||||
<el-input v-model="formData.username"
|
||||
disabled></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="auditTime" label="审核时间">
|
||||
<el-input v-model="formData.auditTime" disabled></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-form-item prop="auditOpinion" label="审核意见">
|
||||
<el-input type="textarea" v-model="formData.auditOpinion" rows="4"
|
||||
maxlength="500"
|
||||
placeholder="请填写您的审核意见"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item prop="auditSign" label="签  字" class="is-required">
|
||||
<sign :qz.sync="formData.auditSign"></sign>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<div style="float: right;margin: 20px 0">
|
||||
<el-button @click="doReview(1)">拒绝</el-button>
|
||||
<el-button @click="doReview(2)" type="warning">返回修改</el-button>
|
||||
<el-button type="primary" @click="doReview(3)">通过</el-button>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
</info>
|
||||
</template>
|
||||
<template v-else>
|
||||
<el-form :model="formData" ref="form" :rules="formRules" label-position="right"
|
||||
style="padding: 20px 0"
|
||||
label-width="120px">
|
||||
<el-form-item label="审核信息 " label-width="135px" class="view-header">
|
||||
</el-form-item>
|
||||
|
||||
<el-row gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="auditor" label="审核人员">
|
||||
<el-input v-model="formData.username"
|
||||
disabled></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="auditTime" label="审核时间">
|
||||
<el-input v-model="formData.auditTime" disabled></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row gutter="20">
|
||||
<el-form-item>
|
||||
<el-table :data="multipleSelection" max-height="500px">
|
||||
<el-table-column prop="hdname" label="活动主题" header-align="center" align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="username" label="教职工姓名" header-align="center"
|
||||
align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="loginname" label="工号" header-align="center"
|
||||
align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="dwname" label="单位" header-align="center" align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="ghname" label="分工会" header-align="center" align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="hdlbname" label="活动类别" header-align="center"
|
||||
align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="zplbname" label="作品类别" header-align="center"
|
||||
align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="hdsbsj" label="上传时间" header-align="center" align="center"
|
||||
show-overflow-tooltip>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form-item>
|
||||
</el-row>
|
||||
|
||||
<el-form-item prop="auditOpinion" label="审核意见">
|
||||
<el-input type="textarea" v-model="formData.auditOpinion" rows="4"
|
||||
maxlength="500"
|
||||
placeholder="请填写您的审核意见"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item prop="auditSign" label="签  字" class="is-required">
|
||||
<sign :qz.sync="formData.auditSign"></sign>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<div style="float: right;margin: 20px 0">
|
||||
<el-button @click="doReview(1)">拒绝</el-button>
|
||||
<el-button @click="doReview(2)" type="warning">返回修改</el-button>
|
||||
<el-button type="primary" @click="doReview(3)">通过</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
<el-dialog :visible.sync="fileDialogVisible" class="filedialog" @close="filedialogClose"
|
||||
:close-on-click-modal="false">
|
||||
<div id="videoContainer"></div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: "#app",
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
multipleSelection: [],
|
||||
fileDialogVisible: false,
|
||||
videoShow: false,
|
||||
pageForm: {
|
||||
isAudit: false
|
||||
},
|
||||
unions: [],
|
||||
units: [],
|
||||
hdxxlist: [],
|
||||
hdlblist: [],
|
||||
hdzplblist: [],
|
||||
formRules: {
|
||||
auditOpinion: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
},
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'info': httpVueLoader('/components/hd/hdwmInfo.vue'),
|
||||
},
|
||||
methods: {
|
||||
handleSelectionChange(val) {
|
||||
this.multipleSelection = val;
|
||||
},
|
||||
filedialogClose() {
|
||||
//关闭的时候需要销毁video 但是随之dom元素也会被删除!!!!
|
||||
this.imgShow = false;
|
||||
this.videoShow = false;
|
||||
videojs('my-video').dispose();
|
||||
},
|
||||
playvideo(fjurl) {
|
||||
this.fileDialogVisible = true;
|
||||
this.videoShow = true;
|
||||
this.$nextTick(function () {
|
||||
let vc = document.getElementById('videoContainer');
|
||||
let newVideo = document.createElement("div");//创建一个标签
|
||||
newVideo.innerHTML = '<video id="my-video" class="video-js vjs-default-skin vjs-big-play-centered" controls preload="auto"></video>';
|
||||
vc.appendChild(newVideo);
|
||||
let option = {autoplay: false, language: 'zh-CN'};
|
||||
let myPlayer = videojs('my-video', option, function onPlayerReady() {
|
||||
let myPlayer = this;
|
||||
myPlayer.src({src: fjurl, type: "video/mp4"});
|
||||
/*videojs.log("播放器已经准备好了!");*/
|
||||
//this.play();
|
||||
});
|
||||
})
|
||||
},
|
||||
doReview(flag) {
|
||||
this.$refs["form"].validate(async (valid) => {
|
||||
if (valid) {
|
||||
const confirm = await this.$confirm('确定要' + (flag === 1 ? '拒绝' : flag === 2 ? '退回修改' : '通过审核') + '吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm === "confirm") {
|
||||
this.formData.pass = flag
|
||||
this.formData.ids = JSON.stringify(this.multipleSelection.map(v => v.id))
|
||||
const resp = await $.post(loc() + "/doReview", this.formData)
|
||||
if(resp.code===0){
|
||||
this.$refs.table.clearSelection()
|
||||
this.doSearch()
|
||||
this.$refs.guava.index()
|
||||
this.notifySuccess(resp.msg)
|
||||
}else{
|
||||
this.notifyWarning(resp.msg)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
})
|
||||
},
|
||||
openAudit(row) {
|
||||
this.$refs.guava.edit()
|
||||
if (this.multipleSelection.length === 0) {
|
||||
this.$refs.info2.getInfo(row.id)
|
||||
}
|
||||
const {id} = row
|
||||
this.formData = {
|
||||
id: id ? id : null,
|
||||
username: "${@shiro.getPrincipalProperty('username')}",
|
||||
loginname: "${@shiro.getPrincipalProperty('loginname')}",
|
||||
auditTime: moment().format('YYYY-MM-DD'),
|
||||
auditOpinion: '同意'
|
||||
}
|
||||
if (this.$refs['form']) {
|
||||
this.$refs['form'].resetFields()
|
||||
}
|
||||
},
|
||||
viewInfo(row) {
|
||||
this.$refs.info.getInfo(row.id)
|
||||
this.$refs.guava.view()
|
||||
},
|
||||
hdchange(id) {
|
||||
this.$set(this.pageForm, 'hdlb', '');
|
||||
this.$set(this.pageForm, 'zplb', '');
|
||||
$.post('/platform/hd/childhd/zpxx/gethdlblist', {id: id}).then(data => {
|
||||
if (data.code == 0) {
|
||||
|
||||
this.hdlblist = data.data;
|
||||
}
|
||||
});
|
||||
},
|
||||
hdlbchange(id) {
|
||||
this.$set(this.pageForm, 'zplb', '');
|
||||
$.post('/platform/hd/childhd/zpxx/gethdzplblist', {id: id}).then(data => {
|
||||
if (data.code == 0) {
|
||||
this.hdzplblist = data.data;
|
||||
}
|
||||
});
|
||||
},
|
||||
initHdxxlist() {
|
||||
$.post(base + '/platform/hd/wmhd/initHdxxlist').then(data => {
|
||||
if (data.code == 0) {
|
||||
this.hdxxlist = data.data[0].children;
|
||||
}
|
||||
});
|
||||
},
|
||||
async flushUnits() {
|
||||
this.$set(this.pageForm, "unitId", "")
|
||||
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('H03')}" === 'true') {
|
||||
this.units = await getUnits(this.pageForm.unionId)
|
||||
} else {
|
||||
this.units = await getUnits("${@shiro.getPrincipalProperty('unit').getUnionid()}")
|
||||
}
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
this.unions = await getUnions()
|
||||
this.flushUnits()
|
||||
this.initHdxxlist();
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,446 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
|
||||
<el-card shadow="never">
|
||||
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-select v-model="pageForm.hdid" clearable @change="hdchange"
|
||||
placeholder="请选择活动主题">
|
||||
<el-option v-for="o in hdxxlist" :label="o.label"
|
||||
:value="o.value"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-select v-model="pageForm.hdlb" placeholder="请选择活动类型" clearable
|
||||
@change="hdlbchange">
|
||||
<el-option v-for="o in hdlblist" :label="o.lname"
|
||||
:value="o.lid"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-select v-model="pageForm.zplb" placeholder="请选择作品类型" clearable>
|
||||
<el-option v-for="o in hdzplblist" :label="o.zname"
|
||||
:value="o.zid"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-select placeholder="所属工会" v-model="pageForm.unionId" style="width: 100%;"
|
||||
clearable="true"
|
||||
@change="flushUnits" @clear="flushUnits"
|
||||
|
||||
v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('H03')}"
|
||||
filterable="true">
|
||||
<el-option v-for="item in unions" :label="item.unionname"
|
||||
:value="item.id"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-select placeholder="所属单位" v-model="pageForm.unitId" style="width: 100%;"
|
||||
clearable="true"
|
||||
filterable="true">
|
||||
<el-option v-for="item in units" :label="item.name"
|
||||
:value="item.id"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
|
||||
<div class="btn-group tool-button mt5" v-if="pageForm.isAudit===null">
|
||||
<el-select placeholder="审核状态" v-model="pageForm.stateId"
|
||||
style="width: 200px;"
|
||||
clearable
|
||||
filterable>
|
||||
<el-option label="待分工会审核" value="4000"></el-option>
|
||||
<el-option label="分工会退回" value="4100"></el-option>
|
||||
<el-option label="分工会审核拒绝" value="4150"></el-option>
|
||||
<el-option label="待校工会审核" value="4200"></el-option>
|
||||
<el-option label="校工会退回" value="4250"></el-option>
|
||||
<el-option label="校工会拒绝" value="4300"></el-option>
|
||||
<el-option label="审核通过" value="4400"></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-card>
|
||||
|
||||
|
||||
<el-card class="mt20" shadow="never">
|
||||
<vi-title2 title="作品列表">
|
||||
<template #func>
|
||||
<el-button type="primary" icon="el-icon-position" size="small" @click="openAudit" class="mr10"
|
||||
:disabled="multipleSelection.length==0">
|
||||
批量审核
|
||||
</el-button>
|
||||
<el-radio-group v-model="pageForm.isAudit" @change="doSearch" size="small">
|
||||
<el-radio-button :label="null">全部</el-radio-button>
|
||||
<el-radio-button :label="true">已审核</el-radio-button>
|
||||
<el-radio-button :label="false">未审核</el-radio-button>
|
||||
</el-radio-group>
|
||||
</template>
|
||||
</vi-title2>
|
||||
<el-table :data="tableData" ref="table" @sort-change="pageOrder" row-key="id"
|
||||
@selection-change="handleSelectionChange">
|
||||
<el-table-column
|
||||
reserve-selection
|
||||
:selectable="(row)=>{return row.auditState=='4000'}"
|
||||
type="selection"
|
||||
width="55">
|
||||
</el-table-column>
|
||||
<el-table-column label="序号" type="index" header-align="center" align="center"
|
||||
width="50">
|
||||
<template scope="scope">
|
||||
<span>{{scope.$index+(pageForm.pageNumber - 1) * pageForm.pageSize + 1}} </span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column prop="hdname" label="活动主题" header-align="center" align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="username" label="教职工姓名" header-align="center"
|
||||
align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="loginname" label="工号" header-align="center"
|
||||
align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="dwname" label="单位" header-align="center" align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="ghname" label="分工会" header-align="center" align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="hdlbname" label="活动类别" header-align="center"
|
||||
align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="zplbname" label="作品类别" header-align="center"
|
||||
align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="hdsbsj" label="上传时间" header-align="center" align="center"
|
||||
show-overflow-tooltip>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" prop="auditState" header-align="center"
|
||||
label="审核状态" sortable>
|
||||
<template scope="scope">
|
||||
<span :style="'color:'+scope.row.stateColor">{{scope.row.stateName}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" header-align="center" align="center" width="300">
|
||||
<template slot-scope="scope">
|
||||
<el-button size="mini" type="primary" @click="viewInfo(scope.row)">查看</el-button>
|
||||
|
||||
<el-button
|
||||
v-if="scope.row.auditState==='4000'||scope.row.auditState==='4250'"
|
||||
type="primary" size="mini"
|
||||
@click="openAudit(scope.row)">审核
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
|
||||
|
||||
</template>
|
||||
|
||||
|
||||
<template #view>
|
||||
<info ref="info" @playvideo="playvideo"></info>
|
||||
</template>
|
||||
|
||||
<template #edit>
|
||||
<template v-if="multipleSelection.length===0">
|
||||
<info ref="info2" handle label="分工会审核" @playvideo="playvideo">
|
||||
<template #handle>
|
||||
<el-form :model="formData" ref="form" :rules="formRules" label-position="right"
|
||||
style="padding: 20px 0"
|
||||
label-width="120px">
|
||||
<el-form-item label="审核信息 " label-width="135px" class="view-header">
|
||||
</el-form-item>
|
||||
<template v-if="multipleSelection.length>0">
|
||||
<el-table :data="multipleSelection">
|
||||
<el-table-column prop="hdname" label="活动主题" header-align="center" align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="username" label="教职工姓名" header-align="center"
|
||||
align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="loginname" label="工号" header-align="center"
|
||||
align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="dwname" label="单位" header-align="center" align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="ghname" label="分工会" header-align="center" align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="hdlbname" label="活动类别" header-align="center"
|
||||
align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="zplbname" label="作品类别" header-align="center"
|
||||
align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="hdsbsj" label="上传时间" header-align="center" align="center"
|
||||
show-overflow-tooltip>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</template>
|
||||
<el-row gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="auditor" label="审核人员">
|
||||
<el-input v-model="formData.username"
|
||||
disabled></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="auditTime" label="审核时间">
|
||||
<el-input v-model="formData.auditTime" disabled></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-form-item prop="auditOpinion" label="审核意见">
|
||||
<el-input type="textarea" v-model="formData.auditOpinion" rows="4"
|
||||
maxlength="500"
|
||||
placeholder="请填写您的审核意见"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item prop="auditSign" label="签  字" class="is-required">
|
||||
<sign :qz.sync="formData.auditSign"></sign>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<div style="float: right;margin: 20px 0">
|
||||
<el-button @click="doReview(1)">拒绝</el-button>
|
||||
<el-button @click="doReview(2)" type="warning">返回修改</el-button>
|
||||
<el-button type="primary" @click="doReview(3)">通过</el-button>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
</info>
|
||||
</template>
|
||||
<template v-else>
|
||||
<el-form :model="formData" ref="form" :rules="formRules" label-position="right"
|
||||
style="padding: 20px 0"
|
||||
label-width="120px">
|
||||
<el-form-item label="审核信息 " label-width="135px" class="view-header">
|
||||
</el-form-item>
|
||||
|
||||
<el-row gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="auditor" label="审核人员">
|
||||
<el-input v-model="formData.username"
|
||||
disabled></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="auditTime" label="审核时间">
|
||||
<el-input v-model="formData.auditTime" disabled></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row gutter="20">
|
||||
<el-form-item>
|
||||
<el-table :data="multipleSelection" max-height="500px">
|
||||
<el-table-column prop="hdname" label="活动主题" header-align="center" align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="username" label="教职工姓名" header-align="center"
|
||||
align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="loginname" label="工号" header-align="center"
|
||||
align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="dwname" label="单位" header-align="center" align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="ghname" label="分工会" header-align="center" align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="hdlbname" label="活动类别" header-align="center"
|
||||
align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="zplbname" label="作品类别" header-align="center"
|
||||
align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="hdsbsj" label="上传时间" header-align="center" align="center"
|
||||
show-overflow-tooltip>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form-item>
|
||||
</el-row>
|
||||
|
||||
<el-form-item prop="auditOpinion" label="审核意见">
|
||||
<el-input type="textarea" v-model="formData.auditOpinion" rows="4"
|
||||
maxlength="500"
|
||||
placeholder="请填写您的审核意见"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item prop="auditSign" label="签  字" class="is-required">
|
||||
<sign :qz.sync="formData.auditSign"></sign>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
|
||||
<div style="float: right;margin: 20px 0">
|
||||
<el-button @click="doReview(1)">拒绝</el-button>
|
||||
<el-button @click="doReview(2)" type="warning">返回修改</el-button>
|
||||
<el-button type="primary" @click="doReview(3)">通过</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
<el-dialog :visible.sync="fileDialogVisible" class="filedialog" @close="filedialogClose"
|
||||
:close-on-click-modal="false">
|
||||
<div id="videoContainer"></div>
|
||||
</el-dialog>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: "#app",
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
multipleSelection: [],
|
||||
fileDialogVisible: false,
|
||||
videoShow: false,
|
||||
pageForm: {
|
||||
isAudit: false
|
||||
},
|
||||
unions: [],
|
||||
units: [],
|
||||
hdxxlist: [],
|
||||
hdlblist: [],
|
||||
hdzplblist: [],
|
||||
formRules: {
|
||||
auditOpinion: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
},
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'info': httpVueLoader('/components/hd/hdwmInfo.vue'),
|
||||
},
|
||||
methods: {
|
||||
|
||||
handleSelectionChange(val) {
|
||||
this.multipleSelection = val;
|
||||
},
|
||||
doReview(flag) {
|
||||
this.$refs["form"].validate(async (valid) => {
|
||||
if (valid) {
|
||||
const confirm = await this.$confirm('确定要' + (flag === 1 ? '拒绝' : flag === 2 ? '退回修改' : '通过审核') + '吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm === "confirm") {
|
||||
this.formData.pass = flag
|
||||
this.formData.ids = JSON.stringify(this.multipleSelection.map(v => v.id))
|
||||
const resp = await $.post(loc() + "/doReview", this.formData)
|
||||
if(resp.code===0){
|
||||
this.$refs.table.clearSelection()
|
||||
this.doSearch()
|
||||
this.$refs.guava.index()
|
||||
this.notifySuccess(resp.msg)
|
||||
}else{
|
||||
this.notifyWarning(resp.msg)
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
openAudit(row) {
|
||||
this.$refs.guava.edit()
|
||||
if (this.multipleSelection.length === 0) {
|
||||
this.$refs.info2.getInfo(row.id)
|
||||
}
|
||||
const {id} = row
|
||||
this.formData = {
|
||||
id: id ? id : null,
|
||||
username: "${@shiro.getPrincipalProperty('username')}",
|
||||
loginname: "${@shiro.getPrincipalProperty('loginname')}",
|
||||
auditTime: moment().format('YYYY-MM-DD'),
|
||||
auditOpinion: '同意'
|
||||
}
|
||||
if (this.$refs['form']) {
|
||||
this.$refs['form'].resetFields()
|
||||
}
|
||||
},
|
||||
viewInfo(row) {
|
||||
this.$refs.info.getInfo(row.id)
|
||||
this.$refs.guava.view()
|
||||
},
|
||||
hdchange(id) {
|
||||
this.$set(this.pageForm, 'hdlb', '');
|
||||
this.$set(this.pageForm, 'zplb', '');
|
||||
$.post('/platform/hd/childhd/zpxx/gethdlblist', {id: id}).then(data => {
|
||||
if (data.code == 0) {
|
||||
|
||||
this.hdlblist = data.data;
|
||||
}
|
||||
});
|
||||
},
|
||||
hdlbchange(id) {
|
||||
this.$set(this.pageForm, 'zplb', '');
|
||||
$.post('/platform/hd/childhd/zpxx/gethdzplblist', {id: id}).then(data => {
|
||||
if (data.code == 0) {
|
||||
this.hdzplblist = data.data;
|
||||
}
|
||||
});
|
||||
},
|
||||
initHdxxlist() {
|
||||
$.post(base + '/platform/hd/wmhd/initHdxxlist').then(data => {
|
||||
if (data.code == 0) {
|
||||
this.hdxxlist = data.data[0].children;
|
||||
}
|
||||
});
|
||||
},
|
||||
async flushUnits() {
|
||||
this.$set(this.pageForm, "unitId", "")
|
||||
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('H03')}" === 'true') {
|
||||
this.units = await getUnits(this.pageForm.unionId)
|
||||
} else {
|
||||
this.units = await getUnits("${@shiro.getPrincipalProperty('unit').getUnionid()}")
|
||||
}
|
||||
},
|
||||
filedialogClose() {
|
||||
//关闭的时候需要销毁video 但是随之dom元素也会被删除!!!!
|
||||
this.imgShow = false;
|
||||
this.videoShow = false;
|
||||
videojs('my-video').dispose();
|
||||
},
|
||||
playvideo(fjurl) {
|
||||
this.fileDialogVisible = true;
|
||||
this.videoShow = true;
|
||||
this.$nextTick(function () {
|
||||
let vc = document.getElementById('videoContainer');
|
||||
let newVideo = document.createElement("div");//创建一个标签
|
||||
newVideo.innerHTML = '<video id="my-video" class="video-js vjs-default-skin vjs-big-play-centered" controls preload="auto"></video>';
|
||||
vc.appendChild(newVideo);
|
||||
let option = {autoplay: false, language: 'zh-CN'};
|
||||
let myPlayer = videojs('my-video', option, function onPlayerReady() {
|
||||
let myPlayer = this;
|
||||
myPlayer.src({src: fjurl, type: "video/mp4"});
|
||||
/*videojs.log("播放器已经准备好了!");*/
|
||||
//this.play();
|
||||
});
|
||||
})
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
this.unions = await getUnions()
|
||||
this.flushUnits()
|
||||
this.initHdxxlist();
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,565 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.el-select {
|
||||
width: 100%;
|
||||
}
|
||||
</style>
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
|
||||
<div class="btn-group tool-button">
|
||||
<div class="block">
|
||||
<el-date-picker
|
||||
v-model="pageForm.year"
|
||||
type="year"
|
||||
value-format="yyyy"
|
||||
placeholder="年度">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
</div>
|
||||
<div class="btn-group tool-button">
|
||||
<el-select v-model="pageForm.honorLevel" placeholder="请选择级别" style="width: 100%"
|
||||
@change="doSearch"
|
||||
clearable>
|
||||
<el-option v-for="o in honorLevelList"
|
||||
:key="o.id"
|
||||
:label="o.name"
|
||||
:value="o.id"
|
||||
></el-option>
|
||||
</el-select>
|
||||
|
||||
|
||||
</div>
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-radio-group v-model="pageForm.honorType" @change="doSearch">
|
||||
<el-radio-button v-for="v in honorTypeList" :label="v.id">{{v.name}}</el-radio-button>
|
||||
</el-radio-group>
|
||||
</div>
|
||||
<div class="btn-group tool-button">
|
||||
<el-button type="primary" @click="doSearch" icon="el-icon-search"></el-button>
|
||||
</div>
|
||||
|
||||
<div class="pull-right offscreen-right">
|
||||
<el-button size="medium" type="primary" @click="applyHonor">申请荣誉</el-button>
|
||||
</div>
|
||||
|
||||
</el-card>
|
||||
|
||||
|
||||
<honor-apply-table :loading="tableLoading" :page="pageForm" :data="tableData"
|
||||
ref="hat"
|
||||
@order="pageOrder">
|
||||
|
||||
<template #vi-title>
|
||||
<vi-title title="申请列表"></vi-title>
|
||||
</template>
|
||||
|
||||
<template #column>
|
||||
<el-table-column align="center" header-align="center" label="操作" fixed="right" width="150px">
|
||||
<template scope="{row}">
|
||||
|
||||
<el-dropdown @command="dropdownCommand">
|
||||
<el-button plain size="mini">
|
||||
<i class="ti-settings"></i>
|
||||
<span class="ti-angle-down"></span>
|
||||
</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item :command="{type:'view',data:row}">
|
||||
查看
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'edit',data:row}"
|
||||
:disabled="(row.honorType=='101'&&row.stateId>1500)||(row.honorType=='102'&&row.stateId>1600)">
|
||||
编辑
|
||||
</el-dropdown-item>
|
||||
|
||||
<!--#if(@shiro.hasRole('sysadmin')){#-->
|
||||
<el-dropdown-item :command="{type:'delete',data:row}"
|
||||
:loading="row.delLoading">
|
||||
删除
|
||||
</el-dropdown-item>
|
||||
<!--#}else{#-->
|
||||
<el-dropdown-item :command="{type:'delete',data:row}"
|
||||
:disabled="(row.honorType=='101'&&row.stateId>1500)||(row.honorType=='102'&&row.stateId>1600)"
|
||||
:loading="row.delLoading">
|
||||
删除
|
||||
</el-dropdown-item>
|
||||
<!--#}#-->
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</template>
|
||||
|
||||
|
||||
<template #pagination>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</template>
|
||||
</honor-apply-table>
|
||||
</template>
|
||||
<template #edit>
|
||||
<template #header>
|
||||
<el-row type="flex" justify="space-between">
|
||||
<h3>{{isEdit?'修改数据':'添加数据'}}</h3>
|
||||
</el-row>
|
||||
</template>
|
||||
<el-form :model="formData" label-width="120px" ref="form">
|
||||
<el-row type="flex" :gutter="20">
|
||||
<el-col :span="24">
|
||||
<el-form-item label="荣誉类型" prop="honorType">
|
||||
<el-select v-model="formData.honorType" @change="honorTypeChange" :disabled="isEdit">
|
||||
<el-option v-for="o in honorTypeList"
|
||||
:key="o.id"
|
||||
:label="o.name"
|
||||
:value="o.id"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-collapse v-model="collapse">
|
||||
<el-collapse-item title="" name="basic">
|
||||
<template slot="title">
|
||||
<div class="text-primary" style="width: 100%">
|
||||
基础信息
|
||||
</div>
|
||||
</template>
|
||||
<template v-if="formData.honorType===HonorApi.honor_single_id">
|
||||
<el-row type="flex" :gutter="20">
|
||||
<el-col :span="24" prop="userId">
|
||||
<el-form-item prop="userId" label="获奖人员">
|
||||
<el-select
|
||||
style="width: 100%"
|
||||
v-model="formData.userId"
|
||||
filterable
|
||||
clearable
|
||||
remote
|
||||
reserve-keyword
|
||||
placeholder="请输入姓名或工号查找"
|
||||
:remote-method="userRemoteMethod"
|
||||
:loading="userLoading"
|
||||
@change="userChange"
|
||||
:disabled="isEdit">
|
||||
<el-option
|
||||
v-for="item in userOptions"
|
||||
:key="item.id"
|
||||
:label="item.username+'('+item.loginname+')'"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
|
||||
<el-row type="flex" :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="性别" prop="userSex">
|
||||
<el-radio-group v-model="formData.userSex" :disabled="isEdit">
|
||||
<el-radio-button label="男"></el-radio-button>
|
||||
<el-radio-button label="女"></el-radio-button>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="在职状态" prop="jobStatus">
|
||||
<el-input v-model="formData.jobStatus"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row type="flex" :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="职务" prop="post">
|
||||
<el-input v-model="formData.post"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="职称" prop="title">
|
||||
<el-input v-model="formData.title"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row type="flex" :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="生日" prop="birthday">
|
||||
<el-date-picker
|
||||
style="width: 100%"
|
||||
v-model="formData.birthday"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="选择日期">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="政治面貌" prop="political">
|
||||
<el-input v-model="formData.political"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="民族" prop="nation">
|
||||
<el-select placeholder="民族" style="width: 100%" filterable
|
||||
v-model="formData.nation">
|
||||
<el-option v-for="nation in nationOptions" :key="nation" :value="nation"
|
||||
:label="nation"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row type="flex" :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="所属单位" prop="unitId">
|
||||
<el-select placeholder="所属单位" v-model="formData.unitId" clearable
|
||||
style="width: 100%;"
|
||||
clearable="true"
|
||||
filterable="true"
|
||||
:disabled="isEdit">
|
||||
<el-option v-for="item in units"
|
||||
:label="item.name"
|
||||
:value="item.id"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="所属工会" prop="unionId">
|
||||
<el-select placeholder="所属工会" v-model="formData.unionId" clearable
|
||||
style="width: 100%;"
|
||||
clearable="true"
|
||||
filterable="true"
|
||||
:disabled="isEdit">
|
||||
<el-option v-for="item in unions"
|
||||
:label="item.unionname"
|
||||
:value="item.id"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</template>
|
||||
|
||||
|
||||
<template v-else>
|
||||
<el-row type="flex">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="获奖单位" prop="unitName">
|
||||
<el-select placeholder="获奖单位" v-model="formData.unitName"
|
||||
style="width: 100%;"
|
||||
clearable="true"
|
||||
filterable
|
||||
allow-create
|
||||
:disabled="isEdit">
|
||||
<el-option v-for="item in units"
|
||||
:label="item.name"
|
||||
:value="item.name"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="所属工会" prop="unionId">
|
||||
<el-select placeholder="所属工会" v-model="formData.unionId"
|
||||
style="width: 100%;"
|
||||
clearable="true"
|
||||
filterable="true"
|
||||
:disabled="isEdit">
|
||||
<el-option v-for="item in unions"
|
||||
:label="item.unionname"
|
||||
:value="item.id"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
<el-row type="flex">
|
||||
<el-col :span="8">
|
||||
<el-form-item label="单位负责人" prop="unitLeader">
|
||||
<el-input v-model="formData.unitLeader"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="单位人数" prop="unitPeopleNum">
|
||||
<el-input-number v-model="formData.unitPeopleNum" :min="0"
|
||||
:max="2000" style="width: 100%"></el-input-number>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="女职工人员" prop="unitFemalePeopleNum">
|
||||
<el-input-number
|
||||
v-model.number="formData.unitFemalePeopleNum" :min="0"
|
||||
:max="2000" style="width: 100%"></el-input-number>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</template>
|
||||
<el-row type="flex" :gutter="20">
|
||||
<el-col :span="24">
|
||||
<el-form-item label="曾受何种奖励" prop="award">
|
||||
<el-input v-model="formData.award" type="textarea" rows="4"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row type="flex" :gutter="20">
|
||||
<el-col :span="24">
|
||||
<el-form-item label="主要事迹" prop="Deeds">
|
||||
<el-input v-model="formData.Deeds" type="textarea" rows="4"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-collapse-item>
|
||||
<el-collapse-item title="获奖信息" name="prize">
|
||||
<template slot="title">
|
||||
<div class="text-primary" style="width: 100%">
|
||||
获奖信息
|
||||
</div>
|
||||
</template>
|
||||
<template>
|
||||
<!-- <el-row type="flex" :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="奖项" prop="prize">
|
||||
<el-select v-model="formData.prize">
|
||||
<el-option v-for="o in honorPrizeList"
|
||||
:key="o.id"
|
||||
:label="o.name"
|
||||
:value="o.id"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="奖项说明" prop="prizeDesc">
|
||||
<el-input v-model="formData.prizeDesc" maxlength="100"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row type="flex" :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="级别">
|
||||
<el-select v-model="formData.honorLevel" placeholder="">
|
||||
<el-option v-for="o in honorLevelList"
|
||||
:key="o.id"
|
||||
:label="o.name"
|
||||
:value="o.id"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
-->
|
||||
</el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="附件" prop="files">
|
||||
<file-upload card :files.sync="formData.files"></file-upload>
|
||||
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</template>
|
||||
</el-collapse-item>
|
||||
</el-collapse>
|
||||
|
||||
</el-form>
|
||||
<el-row class="m20 text-right">
|
||||
<el-button type="primary" @click="doSubmit">提交</el-button>
|
||||
</el-row>
|
||||
</template>
|
||||
|
||||
|
||||
<template #view>
|
||||
<honor-info ref="info"></honor-info>
|
||||
</template>
|
||||
|
||||
</guava>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
units: [],
|
||||
unions: [],
|
||||
nationOptions: nation,
|
||||
honorTypeList: [],
|
||||
honorLevelList: [],
|
||||
honorAwardList: [],
|
||||
honorPrizeList: [],
|
||||
collapse: ['basic', 'prize'],
|
||||
userLoading: false,
|
||||
userOptions: [],
|
||||
isEdit: false,
|
||||
pageForm: {
|
||||
year: new Date().getFullYear() + "",
|
||||
honorType: '',
|
||||
honorLevel: ''
|
||||
}
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'file-upload': httpVueLoader('/components/plugins/FileUpload.vue'),
|
||||
'honor-apply-table': httpVueLoader('/components/honor/honorApplyTable.vue'),
|
||||
'honor-info': httpVueLoader('/components/honor/honorInfo.vue'),
|
||||
},
|
||||
methods: {
|
||||
dropdownCommand(command) {
|
||||
const {type, data} = command
|
||||
if (type == 'view') {
|
||||
this.openView(data)
|
||||
} else if (type == 'edit') {
|
||||
this.openEdit(data)
|
||||
} else if (type == 'delete') {
|
||||
this.doDelete(data)
|
||||
}
|
||||
},
|
||||
openView(data) {
|
||||
this.$refs.info.getInfo(data.id)
|
||||
this.$refs.guava.view()
|
||||
},
|
||||
doDelete(row) {
|
||||
this.$confirm('确定要删除吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: async (a, b) => {
|
||||
if ("confirm" == a) {//确认后再执行
|
||||
this.$set(row, "delLoading", true)
|
||||
const resp = await GET(loc() + '/doDelete', {id: row.id})
|
||||
requestLaterMsgFun(vue, resp, async () => {
|
||||
this.pageData()
|
||||
}, () => {
|
||||
}, () => {
|
||||
this.$set(row, "delLoading", false)
|
||||
})
|
||||
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
openEdit(data) {
|
||||
this.isEdit = true
|
||||
this.findData(data)
|
||||
this.$refs.guava.edit()
|
||||
},
|
||||
applyHonor() {
|
||||
this.initData()
|
||||
this.$refs.guava.edit()
|
||||
if (this.$refs['form']) {
|
||||
this.$refs['form'].resetFields()
|
||||
}
|
||||
},
|
||||
async userChange() {
|
||||
const user = await queryUserById(this.formData.userId)
|
||||
this.setFormData(user)
|
||||
},
|
||||
setFormData(user) {
|
||||
this.$set(this.formData, "userSex", user[0].sex)
|
||||
this.$set(this.formData, "userName", user[0].username)
|
||||
this.$set(this.formData, "unitId", user[0].unitid)
|
||||
this.$set(this.formData, "unionId", user[0].unionid)
|
||||
this.$set(this.formData, "birthday", user[0].birthday)
|
||||
this.$set(this.formData, "title", user[0].jobTitle)
|
||||
this.$set(this.formData, "post", user[0].position)
|
||||
this.$set(this.formData, "unionName", user[0].unionname)
|
||||
this.$set(this.formData, "unitName", user[0].unitname)
|
||||
this.$set(this.formData, "jobStatus", user[0].userState)
|
||||
this.$set(this.formData, "political", user[0].political)
|
||||
},
|
||||
async userRemoteMethod(query) {
|
||||
if (query) {
|
||||
this.userLoading = true
|
||||
const arr = await searchUser(query)
|
||||
this.userOptions = arr
|
||||
this.userLoading = false
|
||||
}
|
||||
},
|
||||
async initData() {
|
||||
this.honorTypeList = await HonorApi.getHonorType()
|
||||
if (this.honorTypeList) {
|
||||
this.$set(this.pageForm,"honorType",this.honorTypeList[0].id)
|
||||
this.formData = {
|
||||
honorType: this.honorTypeList[0].id
|
||||
}
|
||||
this.honorPrizeList = await HonorApi.getHonorPrize(this.formData.honorType)
|
||||
}
|
||||
this.honorLevelList = await HonorApi.getHonorLevel()
|
||||
this.honorAwardList = await HonorApi.getHonorAwardType()
|
||||
this.units = await getUnits(null)
|
||||
this.unions = await getUnions(null)
|
||||
if (this.formData.honorType === HonorApi.honor_single_id) {
|
||||
await this.userRemoteMethod("${@shiro.getPrincipalProperty('loginname')}")
|
||||
this.$set(this.formData, "userId", this.userOptions[0].id)
|
||||
await this.userChange()
|
||||
}
|
||||
},
|
||||
async honorTypeChange(val) {
|
||||
this.$set(this.formData, "prize", null)
|
||||
this.honorPrizeList = await HonorApi.getHonorPrize(val)
|
||||
if (this.formData.honorType === HonorApi.honor_single_id) {
|
||||
await this.userRemoteMethod("${@shiro.getPrincipalProperty('loginname')}")
|
||||
this.$set(this.formData, "userId", this.userOptions[0].id)
|
||||
await this.userChange()
|
||||
} else {
|
||||
|
||||
}
|
||||
},
|
||||
async doSubmit() {
|
||||
this.formData.files = JSON.stringify(this.formData.files)
|
||||
const resp = await $.post(loc() + '/doSubmit', this.formData)
|
||||
requestLaterFun(resp, () => {
|
||||
this.$notify.success({title: '成功', message: resp.msg});
|
||||
this.pageData()
|
||||
this.$refs.guava.index()
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
})
|
||||
},
|
||||
async findData(data) {
|
||||
this.formData = {}
|
||||
const data1 = clone(data)
|
||||
this.honorPrizeList = await HonorApi.getHonorPrize(data.honorType)
|
||||
|
||||
this.formData = data1
|
||||
if (this.formData.userId && this.formData.userId !== '') {
|
||||
const user = await queryUserById(this.formData.userId)
|
||||
this.setFormData(user)
|
||||
} else {
|
||||
this.$set(this.formData, 'userName', this.formData.userName)
|
||||
}
|
||||
|
||||
this.$set(this.formData, "prize", data.prize)
|
||||
this.$set(this.formData, "honorLevel", data.honorLevel)
|
||||
this.$set(this.formData, "political", data.political)
|
||||
this.$set(this.formData, "post", data.post)
|
||||
if (data.files && data.files.length > 0) this.$set(this.formData, "files", JSON.parse(data.files))
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
"formData.prize"(newVal) {
|
||||
if (newVal && newVal !== null) {
|
||||
this.$set(this.formData, "honorLevel", this.honorPrizeList.find(v => v.id === newVal).level)
|
||||
}
|
||||
},
|
||||
"formData.unitName"(newVal) {
|
||||
const isExist = this.units.some(v => v.name == newVal)
|
||||
if (isExist) {
|
||||
const unionId = this.units.find(v => v.name == newVal).unionid
|
||||
this.$set(this.formData, "unionId", unionId ? unionId : "")
|
||||
} else {
|
||||
this.$set(this.formData, "unionId", "")
|
||||
}
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
await this.initData()
|
||||
this.pageData()
|
||||
|
||||
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,274 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.el-select {
|
||||
width: 100%;
|
||||
}
|
||||
</style>
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
|
||||
<el-card shadow="never">
|
||||
|
||||
<div class="btn-group tool-button">
|
||||
<div class="block">
|
||||
<el-date-picker
|
||||
style="width: 100px"
|
||||
v-model="pageForm.year"
|
||||
type="year"
|
||||
value-format="yyyy"
|
||||
placeholder="年度">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
</div>
|
||||
<div class="btn-group tool-button">
|
||||
<el-select v-model="pageForm.honorLevel" placeholder="请选择级别" style="width: 200px"
|
||||
@change="doSearch"
|
||||
clearable>
|
||||
<el-option v-for="o in honorLevelList"
|
||||
:key="o.id"
|
||||
:label="o.name"
|
||||
:value="o.id"
|
||||
></el-option>
|
||||
</el-select>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="btn-group tool-button" v-if="pageForm.honorType=='101'">
|
||||
<div>
|
||||
<el-input placeholder="请输入内容" v-model="pageForm.searchKeyword" clearable>
|
||||
<el-select v-model="pageForm.searchName" slot="prepend" placeholder="查询类型"
|
||||
style="width: 100px;">
|
||||
<el-option label="工号" value="us.loginname"></el-option>
|
||||
<el-option label="姓名" value="us.username"></el-option>
|
||||
</el-select>
|
||||
</el-input>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="btn-group tool-button">
|
||||
<el-select placeholder="所属工会" v-model="pageForm.unionId" style="width: 100%;"
|
||||
clearable="true"
|
||||
@change="flushUnits" @clear="flushUnits"
|
||||
|
||||
v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')}"
|
||||
|
||||
filterable="true">
|
||||
<el-option v-for="item in unions" :label="item.unionname" :value="item.id"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
|
||||
<div class="btn-group tool-button">
|
||||
<el-select placeholder="所属单位" v-model="pageForm.unitId" style="width: 100%;"
|
||||
clearable="true"
|
||||
filterable="true">
|
||||
<el-option v-for="item in units" :label="item.name" :value="item.id"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-radio-group v-model="pageForm.honorType" @change="doSearch">
|
||||
<el-radio-button v-for="v in honorTypeList" :label="v.id">{{v.name}}</el-radio-button>
|
||||
</el-radio-group>
|
||||
</div>
|
||||
|
||||
<div class="btn-group tool-button">
|
||||
<el-button type="primary" @click="doSearch" icon="el-icon-search"></el-button>
|
||||
</div>
|
||||
<div class="pull-right offscreen-right mt5">
|
||||
|
||||
<el-radio-group v-model="pageForm.isAudit" @change="doSearch">
|
||||
<el-radio-button :label="null">全部</el-radio-button>
|
||||
<el-radio-button :label="true">已审核</el-radio-button>
|
||||
<el-radio-button :label="false">未审核</el-radio-button>
|
||||
</el-radio-group>
|
||||
</div>
|
||||
|
||||
</el-card>
|
||||
|
||||
<honor-apply-table :loading="tableLoading" :page="pageForm" :data="tableData"
|
||||
ref="hat"
|
||||
@order="pageOrder">
|
||||
|
||||
<template #vi-title>
|
||||
<vi-title title="申请列表"></vi-title>
|
||||
</template>
|
||||
|
||||
|
||||
<template #column>
|
||||
<el-table-column align="center" header-align="center" label="操作" fixed="right" width="150px">
|
||||
<template scope="{row}">
|
||||
|
||||
<el-dropdown @command="dropdownCommand">
|
||||
<el-button plain size="mini">
|
||||
<i class="ti-settings"></i>
|
||||
<span class="ti-angle-down"></span>
|
||||
</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item :command="{type:'view',data:row}">
|
||||
查看
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'edit',data:row}"
|
||||
:disabled="row.stateId>1700">
|
||||
审核
|
||||
</el-dropdown-item>
|
||||
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</template>
|
||||
|
||||
<template #pagination>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</template>
|
||||
|
||||
|
||||
</honor-apply-table>
|
||||
|
||||
|
||||
</template>
|
||||
|
||||
<template #edit>
|
||||
<honor-info ref="info2" :handle="true" label="院级党组织审核" :panes="[4]">
|
||||
<template #handle>
|
||||
<el-form :model="formData" ref="form" :rules="formRules" label-position="right"
|
||||
style="padding: 20px 0"
|
||||
label-width="120px">
|
||||
<el-form-item label="审核信息 " label-width="135px" class="view-header">
|
||||
</el-form-item>
|
||||
|
||||
<el-row gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="username" label="审核人员">
|
||||
<el-input v-model="formData.username"
|
||||
disabled></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="time" label="审核时间">
|
||||
<el-input v-model="formData.auditTime" disabled></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
</el-row>
|
||||
<el-form-item prop="opinion" label="审核意见">
|
||||
<el-input type="textarea" v-model="formData.auditOpinion" rows="4" maxlength="500"
|
||||
placeholder="请填写您的审核意见"></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<div style="float: right;margin: 20px 0">
|
||||
<el-button @click="doReview(false)">拒
|
||||
绝
|
||||
</el-button>
|
||||
<el-button type="primary" @click="doReview(true)">通
|
||||
过
|
||||
</el-button>
|
||||
|
||||
</div>
|
||||
|
||||
</template>
|
||||
</honor-info>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<honor-info ref="info"></honor-info>
|
||||
</template>
|
||||
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
units: [],
|
||||
unions: [],
|
||||
honorLevelList: [],
|
||||
honorTypeList: [],
|
||||
pageForm: {
|
||||
year: new Date().getFullYear() + "",
|
||||
isAudit: false,
|
||||
searchName: 'us.username',
|
||||
honorType: '',
|
||||
honorLevel: ''
|
||||
}
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'honor-apply-table': httpVueLoader('/components/honor/honorApplyTable.vue'),
|
||||
'honor-info': httpVueLoader('/components/honor/honorInfo.vue'),
|
||||
},
|
||||
methods: {
|
||||
dropdownCommand(command) {
|
||||
const {type, data} = command
|
||||
if (type == 'view') {
|
||||
this.openView(data)
|
||||
} else if (type == 'edit') {
|
||||
this.openEdit(data)
|
||||
}
|
||||
},
|
||||
async doReview(flag) {
|
||||
this.$refs["form"].validate(async (valid) => {
|
||||
if (valid) {
|
||||
this.formData.pass = flag
|
||||
|
||||
const resp = await $.post(loc() + "/doReview", this.formData)
|
||||
requestLaterMsgFun(vue, resp, () => {
|
||||
this.pageData()
|
||||
this.$refs.guava.index()
|
||||
}, null, (v) => {
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
openView(data) {
|
||||
this.$refs.info.getInfo(data.id)
|
||||
this.$refs.guava.view()
|
||||
},
|
||||
openEdit(data) {
|
||||
this.formData = {
|
||||
id: data.id,
|
||||
username: "${@shiro.getPrincipalProperty('username')}",
|
||||
auditTime: moment().format('YYYY-MM-DD'),
|
||||
}
|
||||
|
||||
this.$refs.info2.getInfo(data.id)
|
||||
this.$refs.guava.edit()
|
||||
if (this.$refs['form']) {
|
||||
this.$refs['form'].resetFields()
|
||||
}
|
||||
},
|
||||
async flushUnits() {
|
||||
this.$set(this.pageForm, "unitId", "")
|
||||
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')}" === 'true') {
|
||||
this.units = await getUnits(this.pageForm.unionId)
|
||||
} else {
|
||||
this.units = await getUnits("${@shiro.getPrincipalProperty('unit').getUnionid()}")
|
||||
}
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
this.honorLevelList = await HonorApi.getHonorLevel()
|
||||
this.honorTypeList = await HonorApi.getHonorType()
|
||||
if (this.honorTypeList) {
|
||||
this.$set(this.pageForm,"honorType",this.honorTypeList[0].id)
|
||||
}
|
||||
this.unions = await getUnions(null)
|
||||
this.flushUnits()
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,274 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.el-select {
|
||||
width: 100%;
|
||||
}
|
||||
</style>
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
|
||||
<el-card shadow="never">
|
||||
|
||||
<div class="btn-group tool-button">
|
||||
<div class="block">
|
||||
<el-date-picker
|
||||
style="width: 100px"
|
||||
v-model="pageForm.year"
|
||||
type="year"
|
||||
value-format="yyyy"
|
||||
placeholder="年度">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
</div>
|
||||
<div class="btn-group tool-button">
|
||||
<el-select v-model="pageForm.honorLevel" placeholder="请选择级别" style="width: 200px"
|
||||
@change="doSearch"
|
||||
clearable>
|
||||
<el-option v-for="o in honorLevelList"
|
||||
:key="o.id"
|
||||
:label="o.name"
|
||||
:value="o.id"
|
||||
></el-option>
|
||||
</el-select>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="btn-group tool-button" v-if="pageForm.honorType=='101'">
|
||||
<div>
|
||||
<el-input placeholder="请输入内容" v-model="pageForm.searchKeyword" clearable>
|
||||
<el-select v-model="pageForm.searchName" slot="prepend" placeholder="查询类型"
|
||||
style="width: 100px;">
|
||||
<el-option label="工号" value="us.loginname"></el-option>
|
||||
<el-option label="姓名" value="us.username"></el-option>
|
||||
</el-select>
|
||||
</el-input>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="btn-group tool-button">
|
||||
<el-select placeholder="所属工会" v-model="pageForm.unionId" style="width: 100%;"
|
||||
clearable="true"
|
||||
@change="flushUnits" @clear="flushUnits"
|
||||
|
||||
v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')}"
|
||||
|
||||
filterable="true">
|
||||
<el-option v-for="item in unions" :label="item.unionname" :value="item.id"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
|
||||
<div class="btn-group tool-button">
|
||||
<el-select placeholder="所属单位" v-model="pageForm.unitId" style="width: 100%;"
|
||||
clearable="true"
|
||||
filterable="true">
|
||||
<el-option v-for="item in units" :label="item.name" :value="item.id"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-radio-group v-model="pageForm.honorType" @change="doSearch">
|
||||
<el-radio-button v-for="v in honorTypeList" :label="v.id">{{v.name}}</el-radio-button>
|
||||
</el-radio-group>
|
||||
</div>
|
||||
|
||||
<div class="btn-group tool-button">
|
||||
<el-button type="primary" @click="doSearch" icon="el-icon-search"></el-button>
|
||||
</div>
|
||||
<div class="pull-right offscreen-right mt5">
|
||||
|
||||
<el-radio-group v-model="pageForm.isAudit" @change="doSearch">
|
||||
<el-radio-button :label="null">全部</el-radio-button>
|
||||
<el-radio-button :label="true">已审核</el-radio-button>
|
||||
<el-radio-button :label="false">未审核</el-radio-button>
|
||||
</el-radio-group>
|
||||
</div>
|
||||
|
||||
</el-card>
|
||||
|
||||
<honor-apply-table :loading="tableLoading" :page="pageForm" :data="tableData"
|
||||
ref="hat"
|
||||
@order="pageOrder">
|
||||
|
||||
<template #vi-title>
|
||||
<vi-title title="申请列表"></vi-title>
|
||||
</template>
|
||||
|
||||
|
||||
<template #column>
|
||||
<el-table-column align="center" header-align="center" label="操作" fixed="right" width="150px">
|
||||
<template scope="{row}">
|
||||
|
||||
<el-dropdown @command="dropdownCommand">
|
||||
<el-button plain size="mini">
|
||||
<i class="ti-settings"></i>
|
||||
<span class="ti-angle-down"></span>
|
||||
</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item :command="{type:'view',data:row}">
|
||||
查看
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'edit',data:row}"
|
||||
:disabled="row.stateId>1800">
|
||||
审核
|
||||
</el-dropdown-item>
|
||||
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</template>
|
||||
|
||||
<template #pagination>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</template>
|
||||
|
||||
|
||||
</honor-apply-table>
|
||||
|
||||
|
||||
</template>
|
||||
|
||||
<template #edit>
|
||||
<honor-info ref="info2" :handle="true" label="校工会审核" :panes="[5]">
|
||||
<template #handle>
|
||||
<el-form :model="formData" ref="form" :rules="formRules" label-position="right"
|
||||
style="padding: 20px 0"
|
||||
label-width="120px">
|
||||
<el-form-item label="审核信息 " label-width="135px" class="view-header">
|
||||
</el-form-item>
|
||||
|
||||
<el-row gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="username" label="审核人员">
|
||||
<el-input v-model="formData.username"
|
||||
disabled></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="time" label="审核时间">
|
||||
<el-input v-model="formData.auditTime" disabled></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
</el-row>
|
||||
<el-form-item prop="opinion" label="审核意见">
|
||||
<el-input type="textarea" v-model="formData.auditOpinion" rows="4" maxlength="500"
|
||||
placeholder="请填写您的审核意见"></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<div style="float: right;margin: 20px 0">
|
||||
<el-button @click="doReview(false)">拒
|
||||
绝
|
||||
</el-button>
|
||||
<el-button type="primary" @click="doReview(true)">通
|
||||
过
|
||||
</el-button>
|
||||
|
||||
</div>
|
||||
|
||||
</template>
|
||||
</honor-info>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<honor-info ref="info"></honor-info>
|
||||
</template>
|
||||
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
units: [],
|
||||
unions: [],
|
||||
honorLevelList: [],
|
||||
honorTypeList: [],
|
||||
pageForm: {
|
||||
year: new Date().getFullYear() + "",
|
||||
isAudit: false,
|
||||
searchName: 'us.username',
|
||||
honorType: '',
|
||||
honorLevel: ''
|
||||
}
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'honor-apply-table': httpVueLoader('/components/honor/honorApplyTable.vue'),
|
||||
'honor-info': httpVueLoader('/components/honor/honorInfo.vue'),
|
||||
},
|
||||
methods: {
|
||||
dropdownCommand(command) {
|
||||
const {type, data} = command
|
||||
if (type == 'view') {
|
||||
this.openView(data)
|
||||
} else if (type == 'edit') {
|
||||
this.openEdit(data)
|
||||
}
|
||||
},
|
||||
async doReview(flag) {
|
||||
this.$refs["form"].validate(async (valid) => {
|
||||
if (valid) {
|
||||
this.formData.pass = flag
|
||||
|
||||
const resp = await $.post(loc() + "/doReview", this.formData)
|
||||
requestLaterMsgFun(vue, resp, () => {
|
||||
this.pageData()
|
||||
this.$refs.guava.index()
|
||||
}, null, (v) => {
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
openView(data) {
|
||||
this.$refs.info.getInfo(data.id)
|
||||
this.$refs.guava.view()
|
||||
},
|
||||
openEdit(data) {
|
||||
this.formData = {
|
||||
id: data.id,
|
||||
username: "${@shiro.getPrincipalProperty('username')}",
|
||||
auditTime: moment().format('YYYY-MM-DD'),
|
||||
}
|
||||
|
||||
this.$refs.info2.getInfo(data.id)
|
||||
this.$refs.guava.edit()
|
||||
if (this.$refs['form']) {
|
||||
this.$refs['form'].resetFields()
|
||||
}
|
||||
},
|
||||
async flushUnits() {
|
||||
this.$set(this.pageForm, "unitId", "")
|
||||
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')}" === 'true') {
|
||||
this.units = await getUnits(this.pageForm.unionId)
|
||||
} else {
|
||||
this.units = await getUnits("${@shiro.getPrincipalProperty('unit').getUnionid()}")
|
||||
}
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
this.honorLevelList = await HonorApi.getHonorLevel()
|
||||
this.honorTypeList = await HonorApi.getHonorType()
|
||||
if (this.honorTypeList) {
|
||||
this.$set(this.pageForm,"honorType",this.honorTypeList[0].id)
|
||||
}
|
||||
this.unions = await getUnions(null)
|
||||
this.flushUnits()
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,274 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.el-select {
|
||||
width: 100%;
|
||||
}
|
||||
</style>
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
|
||||
<el-card shadow="never">
|
||||
|
||||
<div class="btn-group tool-button" >
|
||||
<div class="block">
|
||||
<el-date-picker
|
||||
style="width: 100px"
|
||||
v-model="pageForm.year"
|
||||
type="year"
|
||||
value-format="yyyy"
|
||||
placeholder="年度">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
</div>
|
||||
<div class="btn-group tool-button">
|
||||
<el-select v-model="pageForm.honorLevel" placeholder="请选择级别" style="width: 100%"
|
||||
@change="doSearch"
|
||||
clearable>
|
||||
<el-option v-for="o in honorLevelList"
|
||||
:key="o.id"
|
||||
:label="o.name"
|
||||
:value="o.id"
|
||||
></el-option>
|
||||
</el-select>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="btn-group tool-button" v-if="pageForm.honorType=='101'">
|
||||
<div>
|
||||
<el-input placeholder="请输入内容" v-model="pageForm.searchKeyword" clearable>
|
||||
<el-select v-model="pageForm.searchName" slot="prepend" placeholder="查询类型"
|
||||
style="width: 100px;">
|
||||
<el-option label="工号" value="us.loginname"></el-option>
|
||||
<el-option label="姓名" value="us.username"></el-option>
|
||||
</el-select>
|
||||
</el-input>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="btn-group tool-button">
|
||||
<el-select placeholder="所属工会" v-model="pageForm.unionId" style="width: 100%;"
|
||||
clearable="true"
|
||||
@change="flushUnits" @clear="flushUnits"
|
||||
|
||||
v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('H03')}"
|
||||
|
||||
filterable="true">
|
||||
<el-option v-for="item in unions" :label="item.unionname" :value="item.id"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
|
||||
<div class="btn-group tool-button">
|
||||
<el-select placeholder="所属单位" v-model="pageForm.unitId" style="width: 100%;"
|
||||
clearable="true"
|
||||
filterable="true">
|
||||
<el-option v-for="item in units" :label="item.name" :value="item.id"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-radio-group v-model="pageForm.honorType" @change="doSearch">
|
||||
<el-radio-button v-for="v in honorTypeList" :label="v.id">{{v.name}}</el-radio-button>
|
||||
</el-radio-group>
|
||||
</div>
|
||||
|
||||
<div class="btn-group tool-button">
|
||||
<el-button type="primary" @click="doSearch" icon="el-icon-search"></el-button>
|
||||
</div>
|
||||
<div class="pull-right offscreen-right mt5">
|
||||
|
||||
<el-radio-group v-model="pageForm.isAudit" @change="doSearch">
|
||||
<el-radio-button :label="null">全部</el-radio-button>
|
||||
<el-radio-button :label="true">已审核</el-radio-button>
|
||||
<el-radio-button :label="false">未审核</el-radio-button>
|
||||
</el-radio-group>
|
||||
</div>
|
||||
|
||||
</el-card>
|
||||
|
||||
<honor-apply-table :loading="tableLoading" :page="pageForm" :data="tableData"
|
||||
ref="hat"
|
||||
@order="pageOrder">
|
||||
|
||||
<template #vi-title>
|
||||
<vi-title title="申请列表"></vi-title>
|
||||
</template>
|
||||
|
||||
|
||||
<template #column>
|
||||
<el-table-column align="center" header-align="center" label="操作" fixed="right" width="150px">
|
||||
<template scope="{row}">
|
||||
|
||||
<el-dropdown @command="dropdownCommand">
|
||||
<el-button plain size="mini">
|
||||
<i class="ti-settings"></i>
|
||||
<span class="ti-angle-down"></span>
|
||||
</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item :command="{type:'view',data:row}">
|
||||
查看
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'edit',data:row}"
|
||||
:disabled="row.stateId>1600">
|
||||
审核
|
||||
</el-dropdown-item>
|
||||
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</template>
|
||||
|
||||
<template #pagination>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</template>
|
||||
|
||||
|
||||
</honor-apply-table>
|
||||
|
||||
|
||||
</template>
|
||||
|
||||
<template #edit>
|
||||
<honor-info ref="info2" :handle="true" label="院级工会审核" :panes="[3]">
|
||||
<template #handle>
|
||||
<el-form :model="formData" ref="form" :rules="formRules" label-position="right"
|
||||
style="padding: 20px 0"
|
||||
label-width="120px">
|
||||
<el-form-item label="审核信息 " label-width="135px" class="view-header">
|
||||
</el-form-item>
|
||||
|
||||
<el-row gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="username" label="审核人员">
|
||||
<el-input v-model="formData.username"
|
||||
disabled></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="time" label="审核时间">
|
||||
<el-input v-model="formData.auditTime" disabled></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
</el-row>
|
||||
<el-form-item prop="opinion" label="审核意见">
|
||||
<el-input type="textarea" v-model="formData.auditOpinion" rows="4" maxlength="500"
|
||||
placeholder="请填写您的审核意见"></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<div style="float: right;margin: 20px 0">
|
||||
<el-button @click="doReview(false)">拒
|
||||
绝
|
||||
</el-button>
|
||||
<el-button type="primary" @click="doReview(true)">通
|
||||
过
|
||||
</el-button>
|
||||
|
||||
</div>
|
||||
|
||||
</template>
|
||||
</honor-info>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<honor-info ref="info"></honor-info>
|
||||
</template>
|
||||
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
units: [],
|
||||
unions: [],
|
||||
honorLevelList: [],
|
||||
honorTypeList: [],
|
||||
pageForm: {
|
||||
year: new Date().getFullYear() + "",
|
||||
isAudit: false,
|
||||
searchName: 'us.username',
|
||||
honorType: '',
|
||||
honorLevel: ''
|
||||
}
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'honor-apply-table': httpVueLoader('/components/honor/honorApplyTable.vue'),
|
||||
'honor-info': httpVueLoader('/components/honor/honorInfo.vue'),
|
||||
},
|
||||
methods: {
|
||||
dropdownCommand(command) {
|
||||
const {type, data} = command
|
||||
if (type == 'view') {
|
||||
this.openView(data)
|
||||
} else if (type == 'edit') {
|
||||
this.openEdit(data)
|
||||
}
|
||||
},
|
||||
async doReview(flag) {
|
||||
this.$refs["form"].validate(async (valid) => {
|
||||
if (valid) {
|
||||
this.formData.pass = flag
|
||||
|
||||
const resp = await $.post(loc() + "/doReview", this.formData)
|
||||
requestLaterMsgFun(vue, resp, () => {
|
||||
this.pageData()
|
||||
this.$refs.guava.index()
|
||||
}, null, (v) => {
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
openView(data) {
|
||||
this.$refs.info.getInfo(data.id)
|
||||
this.$refs.guava.view()
|
||||
},
|
||||
openEdit(data) {
|
||||
this.formData = {
|
||||
id: data.id,
|
||||
username: "${@shiro.getPrincipalProperty('username')}",
|
||||
auditTime: moment().format('YYYY-MM-DD'),
|
||||
}
|
||||
|
||||
this.$refs.info2.getInfo(data.id)
|
||||
this.$refs.guava.edit()
|
||||
if (this.$refs['form']) {
|
||||
this.$refs['form'].resetFields()
|
||||
}
|
||||
},
|
||||
async flushUnits() {
|
||||
this.$set(this.pageForm, "unitId", "")
|
||||
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('H03')}" === 'true') {
|
||||
this.units = await getUnits(this.pageForm.unionId)
|
||||
} else {
|
||||
this.units = await getUnits("${@shiro.getPrincipalProperty('unit').getUnionid()}")
|
||||
}
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
this.honorLevelList = await HonorApi.getHonorLevel()
|
||||
this.honorTypeList = await HonorApi.getHonorType()
|
||||
if (this.honorTypeList) {
|
||||
this.$set(this.pageForm,"honorType",this.honorTypeList[0].id)
|
||||
}
|
||||
this.unions = await getUnions(null)
|
||||
this.flushUnits()
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,242 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.el-select {
|
||||
width: 100%;
|
||||
}
|
||||
</style>
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
|
||||
<el-card shadow="never">
|
||||
|
||||
<div class="btn-group tool-button">
|
||||
<div class="block">
|
||||
<el-date-picker
|
||||
v-model="pageForm.year"
|
||||
type="year"
|
||||
value-format="yyyy"
|
||||
placeholder="年度">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
</div>
|
||||
<div class="btn-group tool-button">
|
||||
<el-select v-model="pageForm.honorLevel" placeholder="请选择级别" style="width: 200px"
|
||||
@change="doSearch"
|
||||
clearable>
|
||||
<el-option v-for="o in honorLevelList"
|
||||
:key="o.id"
|
||||
:label="o.name"
|
||||
:value="o.id"
|
||||
></el-option>
|
||||
</el-select>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="btn-group tool-button" v-if="pageForm.honorType=='101'">
|
||||
<div>
|
||||
<el-input placeholder="请输入内容" v-model="pageForm.searchKeyword" clearable>
|
||||
<el-select v-model="pageForm.searchName" slot="prepend" placeholder="查询类型"
|
||||
style="width: 100px;">
|
||||
<el-option label="工号" value="us.loginname"></el-option>
|
||||
<el-option label="姓名" value="us.username"></el-option>
|
||||
</el-select>
|
||||
</el-input>
|
||||
</div>
|
||||
</div>
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-radio-group v-model="pageForm.honorType" @change="doSearch">
|
||||
<el-radio-button v-for="v in honorTypeList" :label="v.id">{{v.name}}</el-radio-button>
|
||||
</el-radio-group>
|
||||
</div>
|
||||
|
||||
<div class="btn-group tool-button">
|
||||
<el-button type="primary" @click="doSearch" icon="el-icon-search"></el-button>
|
||||
</div>
|
||||
<div class="pull-right offscreen-right mt5">
|
||||
|
||||
<el-radio-group v-model="pageForm.isAudit" @change="doSearch">
|
||||
<el-radio-button :label="null">全部</el-radio-button>
|
||||
<el-radio-button :label="true">已审核</el-radio-button>
|
||||
<el-radio-button :label="false">未审核</el-radio-button>
|
||||
</el-radio-group>
|
||||
</div>
|
||||
|
||||
</el-card>
|
||||
|
||||
<honor-apply-table :loading="tableLoading" :page="pageForm" :data="tableData"
|
||||
ref="hat"
|
||||
@order="pageOrder">
|
||||
|
||||
<template #vi-title>
|
||||
<vi-title title="申请列表"></vi-title>
|
||||
</template>
|
||||
|
||||
|
||||
<template #column>
|
||||
<el-table-column align="center" header-align="center" label="操作" fixed="right" width="150px">
|
||||
<template scope="{row}">
|
||||
|
||||
<el-dropdown @command="dropdownCommand">
|
||||
<el-button plain size="mini">
|
||||
<i class="ti-settings"></i>
|
||||
<span class="ti-angle-down"></span>
|
||||
</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item :command="{type:'view',data:row}">
|
||||
查看
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'edit',data:row}"
|
||||
:disabled="row.stateId>1500">
|
||||
审核
|
||||
</el-dropdown-item>
|
||||
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</template>
|
||||
|
||||
<template #pagination>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</template>
|
||||
|
||||
|
||||
</honor-apply-table>
|
||||
|
||||
|
||||
</template>
|
||||
|
||||
<template #edit>
|
||||
<honor-info ref="info2" :handle="true" label="单位审核" :panes="[2]">
|
||||
<template #handle>
|
||||
<el-form :model="formData" ref="form" :rules="formRules" label-position="right"
|
||||
style="padding: 20px 0"
|
||||
label-width="120px">
|
||||
<el-form-item label="审核信息 " label-width="135px" class="view-header">
|
||||
</el-form-item>
|
||||
|
||||
<el-row gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="username" label="审核人员">
|
||||
<el-input v-model="formData.username"
|
||||
disabled></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="time" label="审核时间">
|
||||
<el-input v-model="formData.auditTime" disabled></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
</el-row>
|
||||
<el-form-item prop="opinion" label="审核意见">
|
||||
<el-input type="textarea" v-model="formData.auditOpinion" rows="4" maxlength="500"
|
||||
placeholder="请填写您的审核意见"></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<div style="float: right;margin: 20px 0">
|
||||
<el-button @click="doReview(false)">拒
|
||||
绝
|
||||
</el-button>
|
||||
<el-button type="primary" @click="doReview(true)">通
|
||||
过
|
||||
</el-button>
|
||||
|
||||
</div>
|
||||
|
||||
</template>
|
||||
</honor-info>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<honor-info ref="info"></honor-info>
|
||||
</template>
|
||||
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
units: [],
|
||||
unions: [],
|
||||
honorLevelList: [],
|
||||
honorTypeList: [],
|
||||
pageForm: {
|
||||
year: new Date().getFullYear() + "",
|
||||
isAudit: false,
|
||||
searchName: 'us.username',
|
||||
honorType: '',
|
||||
honorLevel: ''
|
||||
}
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'honor-apply-table': httpVueLoader('/components/honor/honorApplyTable.vue'),
|
||||
'honor-info': httpVueLoader('/components/honor/honorInfo.vue'),
|
||||
},
|
||||
methods: {
|
||||
dropdownCommand(command) {
|
||||
const {type, data} = command
|
||||
if (type == 'view') {
|
||||
this.openView(data)
|
||||
} else if (type == 'edit') {
|
||||
this.openEdit(data)
|
||||
}
|
||||
},
|
||||
async doReview(flag) {
|
||||
this.$refs["form"].validate(async (valid) => {
|
||||
if (valid) {
|
||||
this.formData.pass = flag
|
||||
|
||||
const resp = await $.post(loc() + "/doReview", this.formData)
|
||||
requestLaterMsgFun(vue, resp, () => {
|
||||
this.pageData()
|
||||
this.$refs.guava.index()
|
||||
}, null, (v) => {
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
openView(data) {
|
||||
this.$refs.info.getInfo(data.id)
|
||||
this.$refs.guava.view()
|
||||
},
|
||||
openEdit(data) {
|
||||
this.formData = {
|
||||
id: data.id,
|
||||
username: "${@shiro.getPrincipalProperty('username')}",
|
||||
auditTime: moment().format('YYYY-MM-DD'),
|
||||
}
|
||||
|
||||
this.$refs.info2.getInfo(data.id)
|
||||
this.$refs.guava.edit()
|
||||
if (this.$refs['form']) {
|
||||
this.$refs['form'].resetFields()
|
||||
}
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
this.honorLevelList = await HonorApi.getHonorLevel()
|
||||
this.honorTypeList = await HonorApi.getHonorType()
|
||||
if (this.honorTypeList) {
|
||||
this.$set(this.pageForm,"honorType",this.honorTypeList[0].id)
|
||||
}
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,295 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<style>
|
||||
.v-tree-layout-left .v-tree {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.v-tree-layout-left .custom-tree-node {
|
||||
width: 90%;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.v-tree-layout-left .v-tree .v-node {
|
||||
width: 100%;
|
||||
display: inline-block;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.v-tree-layout-left .v-tree {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.v-tree-layout-left .custom-tree-node {
|
||||
width: 90%;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.v-tree-layout-left .v-tree .v-node {
|
||||
width: 100%;
|
||||
display: inline-block;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<tree-layout>
|
||||
<template #tree>
|
||||
<div style="border-right: 2px solid rgb(240,240,240);padding: 20px;">
|
||||
<el-input
|
||||
placeholder="输入关键字进行查找"
|
||||
v-model="filterText">
|
||||
</el-input>
|
||||
</div>
|
||||
<el-tree ref="tree"
|
||||
:data="treeData"
|
||||
node-key="id"
|
||||
:props="defaultProps"
|
||||
:default-expanded-keys="defaultExpandedKeys"
|
||||
:expand-on-click-node="false"
|
||||
accordion
|
||||
highlight-current
|
||||
@node-click="nodeClick"
|
||||
:filter-node-method="filterNode">
|
||||
<div class="custom-tree-node" slot-scope="{ node, data }">
|
||||
<div v-if="node.level==1" style="font-size: 16px;" class="v-node"><i
|
||||
class="el-icon-s-home"></i>
|
||||
{{ data.name }}
|
||||
</div>
|
||||
<div v-if="node.level==2"
|
||||
style="font-size: 15px" :title="data.name" class="v-node">
|
||||
<i class="el-icon-star-on" v-if="chooseNode.name==data.name"></i>
|
||||
<i class="el-icon-star-off" v-else></i>
|
||||
{{ data.name }}
|
||||
</div>
|
||||
|
||||
|
||||
<div v-if="node.level>=3"
|
||||
style="font-size: 14px" :title="data.name" class="v-node">
|
||||
<i class="fa fa-dot-circle-o" v-if="chooseNode.name==data.name"></i>
|
||||
<i class="fa fa-circle-o" v-else></i>
|
||||
{{ data.name }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</el-tree>
|
||||
</template>
|
||||
<template>
|
||||
<el-card class="text-right" shadow="never">
|
||||
<el-button size="medium" type="primary"
|
||||
@click="openAddBasicType">
|
||||
新建基础类型
|
||||
<i class="el-icon-plus"></i>
|
||||
</el-button>
|
||||
</el-card>
|
||||
<el-card shadow="never" class="mt20">
|
||||
<el-table :data="tableData" ref="table" :height="tableHeight">
|
||||
<el-table-column label="序号" type="index" sortable></el-table-column>
|
||||
<el-table-column prop="name" align="center" label="名称"></el-table-column>
|
||||
<el-table-column prop="code" align="center" label="代码"></el-table-column>
|
||||
<el-table-column prop="level" align="center" label="等级"
|
||||
sortable
|
||||
v-if="honor_type_id.includes(chooseNode.id)">
|
||||
<template slot-scope="{row}">
|
||||
{{row.level?honorLevelList.find(v=>v.id === row.level).name:''}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="操作" width="100px">
|
||||
<template scope="{row}">
|
||||
<el-dropdown @command="({func, data})=>{func(data)}">
|
||||
<el-button plain size="mini">
|
||||
<i class="ti-settings"></i>
|
||||
<span class="ti-angle-down"></span>
|
||||
</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item :command="{func:openEditType,data:row}">
|
||||
编辑
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item v-if="!HonorApi.disabledIds.includes(row.id)"
|
||||
:command="{func:doDelete,data:row}">
|
||||
删除
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-card>
|
||||
</template>
|
||||
</tree-layout>
|
||||
|
||||
<el-dialog :visible.sync="basicTypeDialogVisible" width="40%" :close-on-click-modal="false">
|
||||
<el-form :model="formData" ref="basicForm" :rules="rules" label-width="100px">
|
||||
<el-row gutter="30">
|
||||
<el-form-item label="上级名称" prop="parentName" label-width="110px" v-if="submitType==='add'">
|
||||
<el-input maxlength="100" disabled v-model="formData.parentName"
|
||||
type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="名称" prop="name" label-width="110px">
|
||||
<el-input maxlength="100" placeholder="请输入基础类型名称" v-model="formData.name"
|
||||
type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="代码" prop="code" label-width="110px">
|
||||
<el-input maxlength="100" placeholder="请输入基础类型名称" v-model="formData.code"
|
||||
type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="荣誉等级" prop="level" label-width="110px"
|
||||
v-if="honor_type_id.includes(chooseNode.id)">
|
||||
<el-radio-group v-model="formData.level">
|
||||
<el-radio-button v-for="o in honorLevelList" :key="o.id"
|
||||
:label="o.id">{{o.name}}
|
||||
</el-radio-button>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<div class="el-dialog__footer">
|
||||
<el-button type="primary" @click="doSubmit">提交
|
||||
</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
</div>
|
||||
<script>
|
||||
const honor_type_id = ['6b9e26a9467f49ae88fbd3951377e0f8', '8a8b455b964a41f2bbf18a4896cbd83e']
|
||||
const honor_level_id = '3c1058afc91b4e69be46c585b1a48191'
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
honor_type_id: ['6b9e26a9467f49ae88fbd3951377e0f8', '8a8b455b964a41f2bbf18a4896cbd83e'],
|
||||
honor_level_id: "3c1058afc91b4e69be46c585b1a48191",
|
||||
defaultExpandedKeys: ['1'],
|
||||
basicTypeDialogVisible: false,
|
||||
filterText: '',
|
||||
treeData: [],
|
||||
defaultProps: {
|
||||
children: 'child',
|
||||
label: 'name',
|
||||
},
|
||||
chooseNode: {},
|
||||
formData: {},
|
||||
rules: {
|
||||
name: [{required: true, message: '必填', trigger: ['change', 'blur']}],
|
||||
code: [{required: true, message: '必填', trigger: ['change', 'blur']}]
|
||||
},
|
||||
submitType: 'add',
|
||||
tableData: [],
|
||||
honorLevelList: [],
|
||||
tableHeight: null
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
filterText(val) {
|
||||
this.$refs.tree.filter(val);
|
||||
},
|
||||
},
|
||||
components: {
|
||||
'tree-layout': httpVueLoader('/components/plugins/TreeLayout.vue')
|
||||
},
|
||||
methods: {
|
||||
filterNode(value, data, node) {
|
||||
if (!value) return true;
|
||||
return data.name.indexOf(value) !== -1
|
||||
},
|
||||
openEditType(row) {
|
||||
this.formData = {
|
||||
id: row.id,
|
||||
name: row.name,
|
||||
code: row.code,
|
||||
level: row.level
|
||||
}
|
||||
this.basicTypeDialogVisible = true
|
||||
this.submitType = 'edit'
|
||||
},
|
||||
doDelete({id}) {
|
||||
this.$confirm('确定要删除该机构吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: async (a) => {
|
||||
if ("confirm" === a) {
|
||||
const resp = await $.post(loc() + "/doDelete", {id: id})
|
||||
requestLaterFun(resp, () => {
|
||||
this.$notify.success({title: '成功', message: resp.msg});
|
||||
this.getTree(false)
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
})
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
async getTree(changeNode = false) {
|
||||
const res = await $.get('/platform/honor/basic/settings/getTree')
|
||||
if (res.code === 0) {
|
||||
this.treeData = res.data
|
||||
if (changeNode) {
|
||||
this.chooseNode = res.data[0]
|
||||
}
|
||||
await this.getData()
|
||||
} else {
|
||||
this.$notify.error({message: res.msg, title: '失败'})
|
||||
}
|
||||
},
|
||||
openAddBasicType() {
|
||||
this.basicTypeDialogVisible = true
|
||||
this.formData = {
|
||||
parentId: this.chooseNode.id,
|
||||
parentName: this.chooseNode.name,
|
||||
name: '',
|
||||
code: '',
|
||||
level: honor_type_id.includes(this.chooseNode.id) ? this.honorLevelList[0].id : null
|
||||
}
|
||||
this.submitType = 'add'
|
||||
},
|
||||
doSubmit() {
|
||||
this.$refs["basicForm"].validate(async (valid) => {
|
||||
if (valid) {
|
||||
const res_data = await $.post('/platform/honor/basic/settings/doSubmit', this.formData)
|
||||
if (res_data.code === 0) {
|
||||
this.basicTypeDialogVisible = false
|
||||
await this.getTree(false)
|
||||
} else {
|
||||
this.$notify.error({message: res_data.msg, title: '失败'})
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
nodeClick(data) {
|
||||
this.chooseNode = data
|
||||
this.getData()
|
||||
},
|
||||
async getData() {
|
||||
const res_data = await $.get('/platform/honor/basic/settings/getData', {parentId: this.chooseNode.id})
|
||||
this.tableData = res_data.data
|
||||
},
|
||||
async getHonorLevelData() {
|
||||
const res_data = await $.get('/platform/honor/basic/settings/getData', {parentId: honor_level_id})
|
||||
this.honorLevelList = res_data.data
|
||||
}
|
||||
},
|
||||
async mounted() {
|
||||
await this.getTree(true)
|
||||
await this.getHonorLevelData()
|
||||
this.$nextTick(() => {
|
||||
this.tableHeight = window.innerHeight - this.$refs.table.$el.children[2].getBoundingClientRect().top
|
||||
window.onresize = () => {
|
||||
this.tableHeight = window.innerHeight - this.$refs.table.$el.children[2].getBoundingClientRect().top
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,194 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<el-card style="height: 100%">
|
||||
<template #header>
|
||||
<h3>数据导入</h3>
|
||||
<el-row type="flex" justify="end" class="">
|
||||
<el-select v-model="lx" class="mr10"
|
||||
placeholder="请选择导入类型">
|
||||
<el-option
|
||||
v-for="item in lxOptions"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value">
|
||||
</el-option>
|
||||
</el-select>
|
||||
<el-button @click="doRead" icon="el-icon-upload2" type="primary">导入</el-button>
|
||||
<el-button @click="doTemplate" icon="el-icon-download" type="primary">下载模板</el-button>
|
||||
</el-row>
|
||||
</template>
|
||||
|
||||
<el-upload
|
||||
name="file"
|
||||
ref="upload"
|
||||
:limit="1"
|
||||
action="/platform/honor/batchHonor/readExcel"
|
||||
:on-success="onSuccess"
|
||||
:on-remove="onRemove"
|
||||
:on-progress="onProgress"
|
||||
:before-upload="beforeUpload"
|
||||
drag
|
||||
:file-list="fileList" style="width: 100%;text-align: center">
|
||||
<i class="el-icon-upload"></i>
|
||||
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
|
||||
</el-upload>
|
||||
|
||||
<el-table :data="tableData" :height="tableHeight" ref="table">
|
||||
<el-table-column type="index" width="50" label="序号" fixed></el-table-column>
|
||||
<template v-if="lx==1">
|
||||
<el-table-column property="userName" label="姓名" width="100px"
|
||||
align="center"></el-table-column>
|
||||
<el-table-column property="userSex" label="性别" width="100px"
|
||||
align="center"></el-table-column>
|
||||
<el-table-column property="birthday" label="生日" width="100px" align="center" show-overflow-tooltip
|
||||
></el-table-column>
|
||||
<el-table-column property="workDate" label="工作时间" width="100px" align="center" show-overflow-tooltip
|
||||
></el-table-column>
|
||||
<el-table-column property="jobStatus" label="在职状态" width="100px" align="center"
|
||||
></el-table-column>
|
||||
<el-table-column property="prize" label="奖项" align="center" width="100px"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column property="prizeDesc" label="奖项说明" align="center" width="100px"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column property="grantUnit" align="center" label="授予单位" width="200px"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column property="grantDate" align="center" label="授予时间" width="100px"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column property="archiveStatus" align="center" label="存档情况" width="200px"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column property="awardMaterialsExcel" align="center" label="获奖材料"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
</template>
|
||||
|
||||
<div v-if="lx==2">
|
||||
<el-table-column property="unitName" label="单位" width="200px" align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column property="prize" label="奖项" align="center" width="100px"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column property="prizeDesc" label="奖项说明" align="center" width="100px"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column property="grantUnit" align="center" label="授予单位" width="200px"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column property="grantDate" align="center" label="授予时间" width="100px"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column property="gameName" label="参加比赛名称" width="200px" align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column property="archiveStatus" align="center" label="存档情况" width="200px"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column property="awardMaterialsExcel" align="center" label="获奖材料"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column property="unitLeader" label="单位负责人" align="center" width="100px"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column property="unitPeopleNum" label="单位人数" align="center" width="100px"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column property="unitFemalePeopleNum" label="单位女职工人数" align="center" width="100px"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
</div>
|
||||
</el-table>
|
||||
</el-card>
|
||||
</guava>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
lx: 1,
|
||||
lxOptions: [{
|
||||
value: 1,
|
||||
label: '个人荣誉'
|
||||
}, {
|
||||
value: 2,
|
||||
label: '集体荣誉',
|
||||
}],
|
||||
fileList: [],
|
||||
tableData: [],
|
||||
file: {},
|
||||
tableHeight: null,
|
||||
loading: null
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async doTemplate() {
|
||||
if (this.lx == "") {
|
||||
this.$notify.warning({title: '警告', message: "请选择下载模板类型"});
|
||||
return
|
||||
}
|
||||
window.open(loc() + "/doTemplate?lx=" + this.lx)
|
||||
},
|
||||
async doRead() {
|
||||
if (![1, 2].includes(this.lx)) {
|
||||
this.$notify.warning({title: '警告', message: "请选择导入类型"});
|
||||
return
|
||||
}
|
||||
if (this.tableData == [] || this.tableData.length === 0) {
|
||||
this.$notify.warning({title: '警告', message: "请上传数据"});
|
||||
return
|
||||
}
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '正在提交...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: COVER_LAYER_COLOR
|
||||
});
|
||||
const resp = await $.post(loc() + "/doRead", {data: JSON.stringify(this.tableData), lx: this.lx})
|
||||
requestLaterFun(resp, () => {
|
||||
this.tableData = []
|
||||
this.fileList = []
|
||||
this.lx = 1
|
||||
this.$notify.success({title: '成功', message: resp.msg});
|
||||
}, () => {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
}, () => {
|
||||
loading.close()
|
||||
})
|
||||
},
|
||||
beforeUpload() {
|
||||
|
||||
},
|
||||
onRemove() {
|
||||
this.tableData = []
|
||||
},
|
||||
onProgress(event) {
|
||||
this.loading = this.$loading({
|
||||
lock: true,
|
||||
text: '正在提交...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: COVER_LAYER_COLOR
|
||||
});
|
||||
},
|
||||
onSuccess(resp, file, fileList) {
|
||||
if (resp.code == 0) {
|
||||
this.tableData = resp.data
|
||||
} else {
|
||||
this.$notify.error({title: '失败', message: resp.msg});
|
||||
this.fileList = []
|
||||
}
|
||||
this.loading.close()
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
|
||||
},
|
||||
created() {
|
||||
this.$nextTick(() => {
|
||||
setTimeout(() => {
|
||||
this.tableHeight = window.innerHeight - this.$refs.table.$el.children[2].getBoundingClientRect().top
|
||||
window.onresize = () => {
|
||||
this.tableHeight = window.innerHeight - this.$refs.table.$el.children[2].getBoundingClientRect().top
|
||||
}
|
||||
}, 100)
|
||||
})
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,227 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<guava>
|
||||
<el-card shadow="never">
|
||||
<el-date-picker
|
||||
v-model="startYear"
|
||||
value-format="yyyy"
|
||||
type="year"
|
||||
placeholder="开始年份">
|
||||
</el-date-picker>
|
||||
<span>至</span>
|
||||
<el-date-picker
|
||||
v-model="endYear"
|
||||
value-format="yyyy"
|
||||
type="year"
|
||||
placeholder="结束年份">
|
||||
</el-date-picker>
|
||||
<el-button icon="el-icon-search" type="primary" @click="doFilter"></el-button>
|
||||
</el-card>
|
||||
|
||||
<el-card class="mt10" shadow="never">
|
||||
<template #header>
|
||||
<el-row type="flex">
|
||||
<el-col :span="12">
|
||||
<vi-title title="年度获奖趋势"></vi-title>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</template>
|
||||
<div id="honor_type_box"></div>
|
||||
</el-card>
|
||||
|
||||
<el-row :gutter="20" class="mt10" type="flex">
|
||||
<el-col :span="12">
|
||||
<el-card shadow="never">
|
||||
<template #header>
|
||||
<vi-title title="个人荣誉奖项"></vi-title>
|
||||
</template>
|
||||
<div id="single_honor_type_box"></div>
|
||||
</el-card>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-card shadow="never">
|
||||
<template #header>
|
||||
<vi-title title="个人荣誉奖项级别"></vi-title>
|
||||
</template>
|
||||
<div id="single_honor_level_box"></div>
|
||||
</el-card>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</guava>
|
||||
</div>
|
||||
<script>
|
||||
let linePlot = null
|
||||
let singleHonorTypePlot = null
|
||||
let singleLevelTypePlot = null
|
||||
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
startYear: null,
|
||||
endYear: null,
|
||||
honorTypeList: [],
|
||||
singleHonorList: [],
|
||||
singleLevelList: []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async getHonorTypeByYear() {
|
||||
const resp_data = await $.get('/platform/honor/board/getHonorTypeByYear')
|
||||
requestLaterFun(resp_data, () => {
|
||||
this.honorTypeList = resp_data.data
|
||||
// this.renderHonorTypeByYear(resp_data.data)
|
||||
}, () => {
|
||||
|
||||
})
|
||||
},
|
||||
renderHonorTypeByYear(data) {
|
||||
console.log(data)
|
||||
|
||||
// data = [{
|
||||
// name: "集体荣誉",
|
||||
// num: 4,
|
||||
// year: 2022
|
||||
// },{
|
||||
// name: "个人荣誉",
|
||||
// num:10,
|
||||
// year: 2022
|
||||
// }]
|
||||
|
||||
if (linePlot) {
|
||||
linePlot.changeData(data)
|
||||
} else {
|
||||
linePlot = new G2Plot.Line('honor_type_box', {
|
||||
data,
|
||||
xField: 'year',
|
||||
yField: 'num',
|
||||
seriesField: 'name',
|
||||
legend: {
|
||||
position: 'top',
|
||||
},
|
||||
smooth: true,
|
||||
});
|
||||
linePlot.render()
|
||||
}
|
||||
},
|
||||
|
||||
async getSingleHonorByYear() {
|
||||
const resp_data = await $.get('/platform/honor/board/getSingleHonorByYear')
|
||||
requestLaterFun(resp_data, () => {
|
||||
this.singleHonorList = resp_data.data
|
||||
// this.renderSingleHonorByYear(resp_data.data)
|
||||
}, () => {
|
||||
|
||||
})
|
||||
},
|
||||
renderSingleHonorByYear(data) {
|
||||
if (singleHonorTypePlot) {
|
||||
singleHonorTypePlot.changeData(data)
|
||||
} else {
|
||||
singleHonorTypePlot = new G2Plot.Pie('single_honor_type_box', {
|
||||
appendPadding: 10,
|
||||
data,
|
||||
angleField: 'num',
|
||||
colorField: 'name',
|
||||
radius: 0.9,
|
||||
label: {
|
||||
type: 'inner',
|
||||
offset: '-30%',
|
||||
content: ({percent}) => (percent * 100).toFixed(0) + "%",
|
||||
style: {
|
||||
fontSize: 14,
|
||||
textAlign: 'center',
|
||||
},
|
||||
},
|
||||
interactions: [{type: 'element-active'}],
|
||||
})
|
||||
singleHonorTypePlot.render()
|
||||
}
|
||||
},
|
||||
|
||||
async getSingleLevelByYear() {
|
||||
const resp_data = await $.get('/platform/honor/board/getSingleLevelByYear')
|
||||
requestLaterFun(resp_data, () => {
|
||||
this.singleLevelList = resp_data.data
|
||||
// this.renderSingleLevelByYear(resp_data.data)
|
||||
}, () => {
|
||||
|
||||
})
|
||||
},
|
||||
renderSingleLevelByYear(data) {
|
||||
if (singleLevelTypePlot) {
|
||||
singleLevelTypePlot.changeData(data)
|
||||
} else {
|
||||
singleLevelTypePlot = new G2Plot.Column('single_honor_level_box', {
|
||||
data,
|
||||
xField: 'name',
|
||||
yField: 'num',
|
||||
position: 'middle',
|
||||
columnStyle: {
|
||||
radius: [20, 20, 0, 0],
|
||||
},
|
||||
})
|
||||
singleLevelTypePlot.render()
|
||||
}
|
||||
},
|
||||
|
||||
doFilter() {
|
||||
if (this.startYear == null) {
|
||||
this.notifyWarning('请输入开始年份')
|
||||
return
|
||||
}
|
||||
if (this.endYear == null) {
|
||||
this.notifyWarning('请输入结束年份')
|
||||
return
|
||||
}
|
||||
if (parseInt(this.startYear) > parseInt(moment().format('YYYY'))) {
|
||||
this.notifyWarning('开始年份不能大于当前年份')
|
||||
return
|
||||
}
|
||||
if (parseInt(this.endYear) > parseInt(moment().format('YYYY'))) {
|
||||
this.notifyWarning('结束年份不能大于当前年份')
|
||||
return
|
||||
}
|
||||
if (parseInt(this.startYear) > parseInt(this.endYear)) {
|
||||
this.notifyWarning('开始年份不能大于结束年份')
|
||||
return
|
||||
}
|
||||
|
||||
const startYear = parseInt(this.startYear)
|
||||
const endYear = parseInt(this.endYear)
|
||||
|
||||
const htl = this.honorTypeList.filter(v => {
|
||||
return startYear <= v.year && v.year <= endYear
|
||||
})
|
||||
console.log(htl)
|
||||
this.renderHonorTypeByYear(htl)
|
||||
|
||||
const shl = this.singleHonorList.filter(v => {
|
||||
return startYear <= v.year && v.year <= endYear
|
||||
})
|
||||
this.renderSingleHonorByYear(shl)
|
||||
|
||||
const sll = this.singleLevelList.filter(v => {
|
||||
return startYear <= v.year && v.year <= endYear
|
||||
})
|
||||
this.renderSingleLevelByYear(sll)
|
||||
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.startYear = (parseInt(moment().format('YYYY')) - 10).toString()
|
||||
this.endYear = moment().format('YYYY')
|
||||
await this.getHonorTypeByYear()
|
||||
await this.getSingleHonorByYear()
|
||||
await this.getSingleLevelByYear()
|
||||
this.doFilter()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,75 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava>
|
||||
<el-card>
|
||||
<div class="btn-group tool-button">
|
||||
<div class="block">
|
||||
<el-date-picker
|
||||
style="width: 100px"
|
||||
v-model="pageForm.year"
|
||||
type="year"
|
||||
value-format="yyyy"
|
||||
placeholder="年度"
|
||||
@change="pageData">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
</div>
|
||||
<div class="btn-group tool-button">
|
||||
<el-select placeholder="所属工会" v-model="pageForm.unionId" style="width: 100%;"
|
||||
clearable="true"
|
||||
filterable="true" @change="pageData">
|
||||
<el-option v-for="item in unions" :label="item.unionname" :value="item.id"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt20">
|
||||
<el-table :data="tableData">
|
||||
<el-table-column type="index" label="序号"></el-table-column>
|
||||
<el-table-column property="unionname" label="工会" sortable align="center"></el-table-column>
|
||||
<el-table-column property="nationalLevelNum" label="国家级" sortable align="center"></el-table-column>
|
||||
<el-table-column property="provincialNum" label="省部级" sortable align="center"></el-table-column>
|
||||
<el-table-column property="schoolLevelNum" label="校内级" sortable align="center"></el-table-column>
|
||||
</el-table>
|
||||
</el-card>
|
||||
</guava>
|
||||
</div>
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
unions: [],
|
||||
tableData: []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
honorLevelData() {
|
||||
sublime.showLoadingbar();
|
||||
this.tableLoading = true
|
||||
$.post("/platform/honor/Summary/honorLevelData", this.pageForm, (data) => {
|
||||
sublime.closeLoadingbar();
|
||||
this.tableLoading = false
|
||||
if (data.code == 0) {
|
||||
this.tableData = data.data;
|
||||
} else {
|
||||
this.$message.error(data.msg);
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
this.unions = await getUnions()
|
||||
this.honorLevelData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user