aiccs/src/views/system/holidayList.vue

459 lines
12 KiB
Vue
Raw Normal View History

2025-12-27 16:40:23 +08:00
<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>