274 lines
13 KiB
HTML
274 lines
13 KiB
HTML
<!--#
|
|
layout("/layouts/platform.html"){
|
|
#-->
|
|
<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
|
|
style="width: 100%"
|
|
@change="doSearch"
|
|
v-model="pageForm.time"
|
|
placeholder="请选择月份"
|
|
type="month"
|
|
value-format="yyyy-MM">
|
|
</el-date-picker>
|
|
</div>
|
|
</div>
|
|
<div class="search-item">
|
|
<div class="search-item-label">姓名工号:</div>
|
|
<div class="search-item-option">
|
|
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword"
|
|
style="width: 100%"
|
|
@keyup.enter.native="doSearch">
|
|
<el-select v-model="pageForm.searchName" slot="prepend"
|
|
placeholder="查询类型"
|
|
style="width: 80px;">
|
|
<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-input @keyup.enter.native="doSearch" clearable clearable
|
|
placeholder="请输入场地名称"
|
|
style="width: 100%"
|
|
v-model="pageForm.siteName">
|
|
</el-input>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="search-item">
|
|
<div class="search-item-label">场地类型:</div>
|
|
<div class="search-item-option">
|
|
<el-select v-model="pageForm.siteType" placeholder="场地类型"
|
|
clearable filterable style="width: 100%">
|
|
<el-option v-for="item in activityTypeList" :label="item.text" :value="item.value"></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 shadow="never" class="mt10">
|
|
<table-tool :app="this" label="预约列表">
|
|
<template #func>
|
|
<el-button @click="location.href='/platform/activity/site/apply'" size="medium" type="primary">我要预约</el-button>
|
|
</template>
|
|
</table-tool>
|
|
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder"
|
|
align="center"
|
|
header-align="center">
|
|
<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 tableColumns"
|
|
>
|
|
|
|
<template scope="{row}" v-if="column.prop==='state_name'">
|
|
<!--<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-button @click="() => {dropdownCommand({type:'view',data:scope.row})}" size="mini">查看</el-button>
|
|
<el-button type="danger" @click="() => {dropdownCommand({type:'delete',data:scope.row})}" size="mini">删除</el-button>-->
|
|
<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>
|
|
<!--# 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')}'
|
|
&& (scope.row.reserve_person_union_process == null || scope.row.reserve_person_union_process == '')"
|
|
:command="{type:'cancel',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>
|
|
<reserve-info ref="reserve"></reserve-info>
|
|
</template>
|
|
</guava>
|
|
</div>
|
|
|
|
<script>
|
|
<!--# include("/platform/activity/includeJs/activityUtil.js"){} #-->
|
|
const activityUtil = new typeUtil()
|
|
var vue = new Vue({
|
|
el: '#app',
|
|
mixins: [initTableMixins],
|
|
data() {
|
|
return {
|
|
activityTypeList: [],
|
|
siteList: [],
|
|
tableData: [],
|
|
userid:'',
|
|
pageForm: {
|
|
searchName: "u.username",
|
|
searchKeyword: "",
|
|
pageNumber: 1,
|
|
pageSize: 10,
|
|
totalCount: 0,
|
|
pageOrderName: "",
|
|
pageOrderBy: "",
|
|
time: ''
|
|
},
|
|
tableColumns: [
|
|
{label: '场地名称', prop: 'site_name', sortable: true},
|
|
{label: '预约人姓名', prop: 'reserve_person_username', sortable: true},
|
|
{label: '预约人部门', prop: 'reserve_person_unitname', sortable: true},
|
|
{label: '开始时间', prop: 'reserve_start_time', sortable: true},
|
|
{label: '结束时间', prop: 'reserve_end_time', sortable: true},
|
|
{label: '联系电话', prop: 'reserve_person_phone'},
|
|
{label: '预约事由', prop: 'reserve_cause'},
|
|
{label: '预约状态', prop: 'state_name'},
|
|
],
|
|
}
|
|
},
|
|
components: {
|
|
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
|
'reserve-info': httpVueLoader('/components/activity/site/ReserveInfo.vue'),
|
|
},
|
|
methods: {
|
|
dropdownCommand(command) {
|
|
const {type, data} = command
|
|
if (type === 'view') {
|
|
this.userid = data.reserve_person_id;
|
|
this.openView(data)
|
|
} else if (type === 'delete') {
|
|
this.doClean(data.id)
|
|
} else if (type === 'cancel') {
|
|
this.doRevoke(data.id)
|
|
}
|
|
},
|
|
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.$notify.success({title: '提示', message: '操作成功!'});
|
|
} else {
|
|
this.$notify.warning({title: '警告', message: '操作失败!'});
|
|
}
|
|
}).catch(() => {
|
|
});
|
|
},
|
|
async doClean(id){
|
|
this.$confirm("您确定要删除此预约吗?", '提示', {
|
|
confirmButtonText: '确定',
|
|
cancelButtonText: '取消',
|
|
type: 'warning',
|
|
callback: (a, b) => {
|
|
if ("confirm" === a) {
|
|
$.post("/platform/activity/site/apply/doClean", {id}, (data) => {
|
|
if (data.code === 0) {
|
|
this.$message.success(data.msg)
|
|
this.pageData();
|
|
} else {
|
|
this.$message.warning(data.msg)
|
|
}
|
|
}, "json");
|
|
}
|
|
}
|
|
});
|
|
},
|
|
async doRevoke(id) {
|
|
this.$confirm("您确定要撤销此预约吗?", '提示', {
|
|
confirmButtonText: '确定',
|
|
cancelButtonText: '取消',
|
|
type: 'warning',
|
|
callback: (a, b) => {
|
|
if ("confirm" === a) {
|
|
$.post("/platform/activity/site/apply/revoke", {id}, (data) => {
|
|
if (data.code === 0) {
|
|
this.$message.success(data.msg)
|
|
this.pageData();
|
|
} else {
|
|
this.$message.warning(data.msg)
|
|
}
|
|
}, "json");
|
|
}
|
|
}
|
|
});
|
|
},
|
|
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 doSearch() {
|
|
this.pageForm.pageNumber = 1
|
|
this.pageData()
|
|
this.siteList = await this.findAllOpenSite()
|
|
},
|
|
async findAllOpenSite() {
|
|
const {data} = await $.get("/platform/activity/site/apply/getAllSite")
|
|
return data
|
|
},
|
|
},
|
|
async created() {
|
|
this.activityTypeList = await activityUtil.getAllType()
|
|
this.siteList = await this.findAllOpenSite()
|
|
this.pageData();
|
|
}
|
|
})
|
|
</script>
|
|
<!--#
|
|
}
|
|
#-->
|