459 lines
12 KiB
Vue
459 lines
12 KiB
Vue
|
|
<template>
|
|||
|
|
<div class="main-content cancelList m20">
|
|||
|
|
<!--头部-查询-->
|
|||
|
|
<div class="content-header">
|
|||
|
|
<searchHeader title="查询" />
|
|||
|
|
<div class="body search-body">
|
|||
|
|
<el-row class="mb10">
|
|||
|
|
<el-col :span="7">
|
|||
|
|
<label class="label-name_1">节假日名称:</label>
|
|||
|
|
<div class="search-input-box_1">
|
|||
|
|
<el-input
|
|||
|
|
v-model="searchForm.customParamMap.holidayName"
|
|||
|
|
size="small"
|
|||
|
|
clearable
|
|||
|
|
type="text"
|
|||
|
|
class="search-input"
|
|||
|
|
placeholder="请输入节假日名称"
|
|||
|
|
@keyup.enter.native="search"
|
|||
|
|
/>
|
|||
|
|
</div>
|
|||
|
|
</el-col>
|
|||
|
|
<el-col :span="11" :offset="1">
|
|||
|
|
<div class="btn-box">
|
|||
|
|
<el-button type="primary" size="mini" @click="search">查询</el-button>
|
|||
|
|
<el-button size="mini" @click="resetSearchForm">重置</el-button>
|
|||
|
|
</div>
|
|||
|
|
</el-col>
|
|||
|
|
</el-row>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
|
|||
|
|
<!--body-查询结果-->
|
|||
|
|
<div class="content-body">
|
|||
|
|
<div class="body">
|
|||
|
|
<el-row>
|
|||
|
|
<el-col :offset="1" :span="6">
|
|||
|
|
<el-button type="primary" size="mini" @click="addDialog = true">新增</el-button>
|
|||
|
|
|
|||
|
|
<!-- ps: 预留导入名单功能, 未实现 -->
|
|||
|
|
<!-- <el-button type="primary" size="mini" @click="fileImportDialog = true">导入名单</el-button> -->
|
|||
|
|
</el-col>
|
|||
|
|
</el-row>
|
|||
|
|
<el-table
|
|||
|
|
ref="multipleTable"
|
|||
|
|
v-loading="loading"
|
|||
|
|
:data="tableData"
|
|||
|
|
tooltip-effect="dark"
|
|||
|
|
class="table-style"
|
|||
|
|
:fit="true"
|
|||
|
|
:row-class-name="tableRowClassName"
|
|||
|
|
:header-cell-style="{background:'#8cc3fb',color:'#fff'}"
|
|||
|
|
@sort-change="sortChange"
|
|||
|
|
>
|
|||
|
|
<el-table-column prop="index" label="序号" min-width="50" align="center" />
|
|||
|
|
<el-table-column prop="holidayName" label="节假日名称" min-width="150" align="left" />
|
|||
|
|
<el-table-column prop="holidayDate" :show-overflow-tooltip="true" label="日期" min-width="200" align="left" />
|
|||
|
|
<el-table-column prop="type" label="标记类型" min-width="200" align="left">
|
|||
|
|
<template slot-scope="scope">
|
|||
|
|
<span v-if="scope.row.type === '1'">节假日</span>
|
|||
|
|
<span v-else-if="scope.row.type ==='2'">工作日</span>
|
|||
|
|
</template>
|
|||
|
|
</el-table-column>
|
|||
|
|
<el-table-column label="操作" min-width="100" align="left">
|
|||
|
|
<template slot-scope="scope">
|
|||
|
|
<el-button type="primary" size="mini" @click="del(scope.row)">删除</el-button>
|
|||
|
|
</template>
|
|||
|
|
</el-table-column>
|
|||
|
|
</el-table>
|
|||
|
|
<div class="page-box">
|
|||
|
|
<el-row>
|
|||
|
|
<el-col :span="23">
|
|||
|
|
<el-pagination
|
|||
|
|
:disabled="loading"
|
|||
|
|
:page-size="pageParam.pageSize"
|
|||
|
|
:total="pageParam.total"
|
|||
|
|
:page-sizes="[10, 20, 30, 40,50,100,200]"
|
|||
|
|
layout="slot,total, sizes, prev, pager, next, jumper"
|
|||
|
|
@size-change="pageSizeChange"
|
|||
|
|
@current-change="pageIndexChange"
|
|||
|
|
>
|
|||
|
|
<span>
|
|||
|
|
第 {{ pageParam.curPage }} 页 /
|
|||
|
|
共 {{
|
|||
|
|
(pageParam.total !== 0 ? parseInt((pageParam.total + pageParam.pageSize - 1) / pageParam.pageSize) : 1)
|
|||
|
|
}} 页
|
|||
|
|
</span>
|
|||
|
|
</el-pagination>
|
|||
|
|
</el-col>
|
|||
|
|
</el-row>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
</div>
|
|||
|
|
|
|||
|
|
<el-dialog
|
|||
|
|
title="新增"
|
|||
|
|
:visible.sync="addDialog"
|
|||
|
|
width="30%"
|
|||
|
|
:close-on-press-escape="false"
|
|||
|
|
:close-on-click-modal="false"
|
|||
|
|
center
|
|||
|
|
>
|
|||
|
|
<el-form :model="ruleForm" :rules="rules" ref="ruleForm">
|
|||
|
|
<el-form-item label="节假日名称" prop="holidayName">
|
|||
|
|
<el-col :span="11">
|
|||
|
|
<el-input v-model="ruleForm.holidayName"></el-input>
|
|||
|
|
</el-col>
|
|||
|
|
</el-form-item>
|
|||
|
|
<el-form-item label="日期" required>
|
|||
|
|
<el-col :span="11">
|
|||
|
|
<el-form-item prop="holidayDate">
|
|||
|
|
<el-date-picker type="date" placeholder="选择日期" value-format="yyyy-MM-dd" v-model="ruleForm.holidayDate" style="width: 100%;"></el-date-picker>
|
|||
|
|
</el-form-item>
|
|||
|
|
</el-col>
|
|||
|
|
</el-form-item>
|
|||
|
|
<el-form-item label="类型" prop="type">
|
|||
|
|
<el-radio-group v-model="ruleForm.type">
|
|||
|
|
<el-radio label="1">节假日</el-radio>
|
|||
|
|
<el-radio label="2">工作日</el-radio>
|
|||
|
|
</el-radio-group>
|
|||
|
|
</el-form-item>
|
|||
|
|
<el-form-item>
|
|||
|
|
<el-button type="primary" :loading="loading" @click="submitForm">确 认</el-button>
|
|||
|
|
<el-button :loading="loading" @click="addDialog = false">取 消</el-button>
|
|||
|
|
</el-form-item>
|
|||
|
|
</el-form>
|
|||
|
|
</el-dialog>
|
|||
|
|
|
|||
|
|
<!-- ps: 预留导入名单功能, 未实现 -->
|
|||
|
|
<!-- <el-dialog
|
|||
|
|
title="导入名单"
|
|||
|
|
:visible.sync="fileImportDialog"
|
|||
|
|
width="30%"
|
|||
|
|
:close-on-press-escape="false"
|
|||
|
|
:close-on-click-modal="false"
|
|||
|
|
>
|
|||
|
|
<div>
|
|||
|
|
<el-input
|
|||
|
|
v-model="batchFileName"
|
|||
|
|
placeholder="点击选择模版文件"
|
|||
|
|
style="display:inline-block;width:calc(100% - 120px)"
|
|||
|
|
:readonly="true"
|
|||
|
|
@click.native="$refs.batchFile.click()"
|
|||
|
|
/>
|
|||
|
|
<el-button style="width:100px;margin-left:10px" type="primary" @click="$refs.batchFile.click()">浏览</el-button>
|
|||
|
|
<input :ref="'batchFile'" type="file" style="display:none" accept=".xls,.xlsx" @change="fileChange">
|
|||
|
|
</div>
|
|||
|
|
|
|||
|
|
<FakeProgress v-if="showFakeProgress" ref="FakeProgress" style="margin-top: 10px;" />
|
|||
|
|
<span slot="footer" class="dialog-footer">
|
|||
|
|
<el-row>
|
|||
|
|
<el-col :span="8" align="left">
|
|||
|
|
<el-button type="primary" @click="downloadFile">下载模版</el-button>
|
|||
|
|
</el-col>
|
|||
|
|
<el-col :span="16">
|
|||
|
|
<el-button :loading="loading" @click="fileImportDialog = false">取 消</el-button>
|
|||
|
|
<el-button type="primary" :loading="loading" @click="fileImport">确 认</el-button>
|
|||
|
|
</el-col>
|
|||
|
|
</el-row>
|
|||
|
|
</span>
|
|||
|
|
</el-dialog>-->
|
|||
|
|
|
|||
|
|
</div>
|
|||
|
|
</template>
|
|||
|
|
|
|||
|
|
<script>
|
|||
|
|
import searchHeader from '@/components/searchHeader'
|
|||
|
|
import FakeProgress from '@/components/FakeProgress'
|
|||
|
|
import { list, save, del } from '@/api/holiday'
|
|||
|
|
|
|||
|
|
export default {
|
|||
|
|
components: {
|
|||
|
|
searchHeader,
|
|||
|
|
FakeProgress
|
|||
|
|
},
|
|||
|
|
data() {
|
|||
|
|
return {
|
|||
|
|
batchFileName: '',
|
|||
|
|
addDialog: false,
|
|||
|
|
fileImportDialog: false,
|
|||
|
|
showFakeProgress: false,
|
|||
|
|
searchForm: {
|
|||
|
|
paramMap: {},
|
|||
|
|
likeParamMap: {},
|
|||
|
|
customParamMap: {
|
|||
|
|
holidayName: ''
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
ruleForm: {
|
|||
|
|
holidayName: '',
|
|||
|
|
holidayDate: '',
|
|||
|
|
type: '',
|
|||
|
|
year: ''
|
|||
|
|
},
|
|||
|
|
rules: {
|
|||
|
|
holidayName: [
|
|||
|
|
{ required: true, message: '请输入节假日名称', trigger: 'blur' }
|
|||
|
|
],
|
|||
|
|
holidayDate: [
|
|||
|
|
{ required: true, message: '请选择日期', trigger: 'change' }
|
|||
|
|
],
|
|||
|
|
type: [
|
|||
|
|
{ required: true, message: '请选择类型', trigger: 'change' }
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
loading: false,
|
|||
|
|
tableData: [],
|
|||
|
|
pageParam: {
|
|||
|
|
orderField: 'holiday_date',
|
|||
|
|
curPage: 1,
|
|||
|
|
total: 0,
|
|||
|
|
pageSize: 10
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
watch: {
|
|||
|
|
},
|
|||
|
|
mounted() {
|
|||
|
|
this.search()
|
|||
|
|
},
|
|||
|
|
methods: {
|
|||
|
|
submitForm() {
|
|||
|
|
this.$refs['ruleForm'].validate((valid) => {
|
|||
|
|
if (valid) {
|
|||
|
|
this.loading = true
|
|||
|
|
this.ruleForm.year = this.ruleForm.holidayDate.substring(0, 4)
|
|||
|
|
save(this.ruleForm).then(() => {
|
|||
|
|
this.loading = false
|
|||
|
|
this.addDialog = false
|
|||
|
|
this.$message({
|
|||
|
|
message: '新增成功!',
|
|||
|
|
type: 'success'
|
|||
|
|
})
|
|||
|
|
this.search()
|
|||
|
|
}).catch(() => {
|
|||
|
|
this.loading = false
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
})
|
|||
|
|
},
|
|||
|
|
del(row) {
|
|||
|
|
del(row.id).then(() => {
|
|||
|
|
this.$message({
|
|||
|
|
message: '删除成功!',
|
|||
|
|
type: 'success'
|
|||
|
|
})
|
|||
|
|
this.search()
|
|||
|
|
})
|
|||
|
|
},
|
|||
|
|
tableRowClassName({ row, rowIndex }) {
|
|||
|
|
if (rowIndex % 2 === 1) {
|
|||
|
|
return 'warning-row'
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
// 下载模版
|
|||
|
|
downloadFile() {
|
|||
|
|
// const name = 'py_company_list.xls'
|
|||
|
|
const name = ''
|
|||
|
|
window.open(`/aiccs/${name}`)
|
|||
|
|
},
|
|||
|
|
fileChange() {
|
|||
|
|
this.batchFileName = this.$refs.batchFile.files[0].name
|
|||
|
|
},
|
|||
|
|
async fileImport() {
|
|||
|
|
const file = this.$refs.batchFile.files
|
|||
|
|
const form = new FormData()
|
|||
|
|
form.append('file', file[0])
|
|||
|
|
this.loading = true
|
|||
|
|
this.showFakeProgress = true
|
|||
|
|
// return importBlacklist(form).then(async({ code, data, msg }) => {
|
|||
|
|
// this.loading = false
|
|||
|
|
// this.showFakeProgress = false
|
|||
|
|
// this.fileImportDialog = false
|
|||
|
|
// this.$message({
|
|||
|
|
// message: '导入成功!',
|
|||
|
|
// type: 'success'
|
|||
|
|
// })
|
|||
|
|
// this.loadPage()
|
|||
|
|
// }).catch(() => {
|
|||
|
|
// this.loading = false
|
|||
|
|
// this.showFakeProgress = false
|
|||
|
|
// })
|
|||
|
|
},
|
|||
|
|
sortChange({ column, prop, order }) {
|
|||
|
|
this.searchForm.orderField = prop
|
|||
|
|
this.searchForm.orderingRule = order === 'ascending' ? 'asc' : 'desc'
|
|||
|
|
this.search()
|
|||
|
|
},
|
|||
|
|
resetSearchForm() {
|
|||
|
|
this.searchForm = {
|
|||
|
|
orderField: '',
|
|||
|
|
orderingRule: '',
|
|||
|
|
paramMap: {},
|
|||
|
|
likeParamMap: {},
|
|||
|
|
customParamMap: {
|
|||
|
|
holidayName: ''
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
// 搜索
|
|||
|
|
search() {
|
|||
|
|
this.pageParam.paramMap = {
|
|||
|
|
paramMap: {},
|
|||
|
|
likeParamMap: {},
|
|||
|
|
customParamMap: {}
|
|||
|
|
}
|
|||
|
|
for (const key in this.searchForm) {
|
|||
|
|
if (typeof this.searchForm[key] === 'string') {
|
|||
|
|
this.pageParam.paramMap[key] = this.searchForm[key]
|
|||
|
|
} else {
|
|||
|
|
for (const _key in this.searchForm[key]) {
|
|||
|
|
if (this.searchForm[key][_key]) {
|
|||
|
|
if (!this.pageParam.paramMap[key]) {
|
|||
|
|
this.pageParam.paramMap[key] = {}
|
|||
|
|
}
|
|||
|
|
this.pageParam.paramMap[key][_key] = this.searchForm[key][_key]
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
this.pageParam.curPage = 1
|
|||
|
|
this.loadPage()
|
|||
|
|
},
|
|||
|
|
// 当前分页改变
|
|||
|
|
pageIndexChange(curPage) {
|
|||
|
|
this.pageParam.curPage = curPage
|
|||
|
|
this.loadPage()
|
|||
|
|
},
|
|||
|
|
// 分页大小改变
|
|||
|
|
pageSizeChange(pageSize) {
|
|||
|
|
this.pageParam.pageSize = pageSize
|
|||
|
|
this.loadPage()
|
|||
|
|
},
|
|||
|
|
// 加载分页
|
|||
|
|
loadPage() {
|
|||
|
|
if (this.loading) return
|
|||
|
|
this.loading = true
|
|||
|
|
const data = JSON.parse(JSON.stringify({
|
|||
|
|
...this.pageParam,
|
|||
|
|
...this.pageParam.paramMap
|
|||
|
|
}))
|
|||
|
|
list(data).then(res => {
|
|||
|
|
this.loading = false
|
|||
|
|
const list = []
|
|||
|
|
let i = 1
|
|||
|
|
const pageStart = (this.pageParam.curPage - 1) * this.pageParam.pageSize
|
|||
|
|
res.data.records.forEach(each => {
|
|||
|
|
each.index = pageStart + i++
|
|||
|
|
list.push(each)
|
|||
|
|
})
|
|||
|
|
this.tableData = list
|
|||
|
|
this.pageParam.total = res.data.total
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
</script>
|
|||
|
|
|
|||
|
|
<style lang="scss" scoped>
|
|||
|
|
.search-body {
|
|||
|
|
.el-col {
|
|||
|
|
display: flex;
|
|||
|
|
align-items: baseline;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.main-content.cancelList {
|
|||
|
|
background: #fff;
|
|||
|
|
padding: 10px;
|
|||
|
|
|
|||
|
|
.content-header {
|
|||
|
|
background: white;
|
|||
|
|
|
|||
|
|
.label-name_1 {
|
|||
|
|
text-align: right;
|
|||
|
|
display: inline-block; //转成行内快,才可定义宽度
|
|||
|
|
width: 220px;
|
|||
|
|
font-size: $table-content-font-size;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.body {
|
|||
|
|
padding: 20px 0;
|
|||
|
|
border-top: none;
|
|||
|
|
margin-bottom: 40PX;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.content-body {
|
|||
|
|
background: white;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.header {
|
|||
|
|
.title {
|
|||
|
|
font-weight: 600;
|
|||
|
|
font-size: 1.2rem;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.page-box {
|
|||
|
|
margin: 10PX;
|
|||
|
|
|
|||
|
|
.el-pagination {
|
|||
|
|
text-align: right;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.dialog-box {
|
|||
|
|
padding-right: 20px;
|
|||
|
|
text-align: right;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.last_row {
|
|||
|
|
border-bottom: 1px solid $color-border;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.custom {
|
|||
|
|
width: 100%;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.span-content {
|
|||
|
|
display: block;
|
|||
|
|
text-indent: 1em;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.mb10 {
|
|||
|
|
margin-bottom: 10px;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.content-body {
|
|||
|
|
background: #fff;
|
|||
|
|
|
|||
|
|
/deep/ .el-table .warning-row {
|
|||
|
|
background: #eaf4fe !important;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.flex-content {
|
|||
|
|
/deep/ .el-form-item__content {
|
|||
|
|
display: flex;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.content-body {
|
|||
|
|
background: #fff;
|
|||
|
|
|
|||
|
|
/deep/ .el-table .warning-row {
|
|||
|
|
background: #eaf4fe !important;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/deep/ .el-table .sort-caret.descending {
|
|||
|
|
border-top-color: #fff !important;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/deep/ .el-table .sort-caret.ascending {
|
|||
|
|
border-bottom-color: #fff !important;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
</style>
|