web-retail-admin/src/views/information/specialBusiness/waterInjection/index.vue

673 lines
17 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!--
* @Descripttion:
* @version:
* @Author: 王三华
* @Date: 2024-04-10 11:33:36
-->
<!-- 系统配置 - 权限配置 -->
<template>
<div class="page">
<topBar v-if="topList.length > 0" :top-list="topList" :moren="moren" />
<div class="thetopbox">
<el-form ref="form" :model="queryParams" label-width="auto">
<el-row :gutter="20">
<el-col :span="4">
<el-form-item :label="'会员编号'">
<el-input v-model="queryParams.memberCode" clearable />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="结算日期" prop="creationTime">
<el-date-picker
v-model="modifiedTime"
value-format="yyyy-MM-dd"
type="daterange"
range-separator="-"
:start-placeholder="'开始日期'"
:end-placeholder="'结束日期'"
@change="changeTime"
/>
</el-form-item>
</el-col>
<el-col :span="4">
<div class="searchbox">
<el-button class="my_search" @click="research">
{{ '搜索' }}</el-button>
<el-button class="my_reset" @click="reChongzhi">
{{ '重置' }}</el-button>
</div>
</el-col>
</el-row>
</el-form>
</div>
<div class="main">
<div class="maintop">
<div class="mainbtn">
<el-button
v-hasButtons="['waterAdd']"
size="small"
class="addBtn"
@click="addRules"
>{{ '添加' }}</el-button>
<el-button
v-hasButtons="['waterDown']"
size="small"
style="background-color: #009b58; color: #fff; margin-left: 15px"
class="thebtn2"
@click="importTemplate"
>
{{ '下载模板' }}</el-button>
<el-button
v-hasButtons="['waterImport']"
size="small"
class="thebtn2"
style="background-color: #ff6723; color: #fff"
@click="handleImport"
>
{{ '导入' }}</el-button>
</div>
</div>
<div class="maintable">
<el-table
v-loading="loading"
:data="tableData"
height="730px"
style="width: 100%"
:header-cell-style="{ background: '#EEEEEE' }"
:row-class-name="tableRowClassName"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55" />
<el-table-column align="center" prop="memberCode" label="会员编号" />
<el-table-column
align="center"
prop="teamBoxNum"
label="团队总盒数"
/>
<el-table-column align="center" prop="smallBoxNum" label="小区盒数" />
<!-- <el-table-column
align="center"
prop="totalTeamPv"
label="团队总业绩($)"
/>
<el-table-column
align="center"
prop="smallAreaPv"
label="小区业绩($)"
/> -->
<el-table-column align="center" prop="settleDate" label="结算日期" />
<el-table-column align="center" :label="'操作'" width="150">
<template slot-scope="scope">
<el-button
v-hasButtons="['waterUp']"
class="colors"
type="text"
size="small"
style="color: #ffad41"
@click.native.prevent="updateShow(scope.row)"
>
{{ '修改' }}
</el-button>
<el-button
v-hasButtons="['waterDel']"
class="colors"
type="text"
size="small"
style="color: #c73030"
@click.native.prevent="delRole(scope.row)"
>
{{ '删除' }}
</el-button>
</template>
</el-table-column>
</el-table>
</div>
</div>
<el-dialog
:title="title"
:visible.sync="ruleShow"
width="40%"
center
:close-on-click-modal="false"
:before-close="handleClose"
>
<el-form ref="forms" :rules="rules" :model="table" label-width="auto">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="会员编号" prop="memberCode">
<el-input
v-model="table.memberCode"
clearable
:placeholder="'请输入'"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="团队总盒数" prop="teamBoxNum">
<el-input-number
v-model="table.teamBoxNum"
clearable
:precision="2"
placeholder="请输入"
:controls="false"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="小区盒数" prop="smallBoxNum">
<el-input-number
v-model="table.smallBoxNum"
clearable
:precision="2"
placeholder="请输入"
:controls="false"
/>
</el-form-item>
</el-col>
<!-- <el-col :span="12">
<el-form-item label="团队总业绩($)" prop="totalTeamPv">
<el-input
v-model="table.totalTeamPv"
type="number"
clearable
:placeholder="'请输入'"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="小区业绩($)" prop="smallAreaPv">
<el-input
v-model="table.smallAreaPv"
type="number"
clearable
:placeholder="'请输入'"
/>
</el-form-item>
</el-col> -->
<el-col :span="12">
<el-form-item label="结算日期" prop="settleDate">
<el-date-picker
v-model="table.settleDate"
value-format="yyyy-MM-dd"
type="date"
:placeholder="'请选择'"
/>
</el-form-item>
</el-col>
</el-row>
<div style="padding-top: 30px; display: flex; justify-content: center">
<el-button
type="text"
size="small"
class="button-style"
@click="handleClose"
>
{{ '取消' }}</el-button>
<el-button
type="text"
size="small"
class="button-style"
style="margin-left: 40px; background-color: #c8161d"
@click="ruleSubmit"
>
{{ '确认' }}
</el-button>
</div>
</el-form>
</el-dialog>
<pagination
v-show="total > 0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="research"
/>
<el-dialog
:title="upload.title"
:close-on-click-modal="false"
:visible.sync="upload.open"
width="600px"
append-to-body
>
<el-upload
ref="upload"
:limit="1"
accept=".xlsx, .xls"
:headers="upload.headers"
:action="upload.url"
:disabled="upload.isUploading"
:on-progress="handleFileUploadProgress"
:on-success="handleFileSuccess"
:on-exceed="handleExceed"
:auto-upload="false"
drag
>
<i class="el-icon-upload" />
<div class="el-upload__text">
{{ '将文件拖到此处,或' }}
<em>{{ '点击上传' }}</em>
</div>
<div slot="tip" class="el-upload__tip" style="color: red">
{{ '提示仅允许导入“xls”或“xlsx”格式文件' }}
</div>
</el-upload>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitFileForm">{{
'确认'
}}</el-button>
<el-button @click="upload.open = false">{{
'取消'
}}</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import topBar from '@/components/topBar'
import * as api from '@/api/specialBusiness.js'
import { Message } from 'element-ui'
import { getToken } from '@/utils/auth'
export default {
name: 'Qxpz',
components: {
topBar
},
data() {
return {
title: '添加',
modifiedTime: [],
modifiedTime1: [],
forms: '',
rules: {
memberCode: [
{ required: true, message: '请输入', trigger: 'blur' }
],
settleDate: [
{ required: true, message: '请选择', trigger: 'change' }
]
},
table: {},
ruleShow: false,
moren: 'waterInjection',
topList: [
{
name: '等级修改',
path: 'waterInjection'
}
],
upload: {
// 是否显示弹出层(物流导入)
open: false,
// 弹出层标题(物流导入)
title: '',
// 是否禁用上传
isUploading: false,
// 是否更新已经存在的物流数据
updateSupport: 0,
// 设置上传的请求头部
headers: { Authorization: 'Bearer ' + getToken() },
// 上传的地址
url: process.env.VUE_APP_BASE_API + '/bonus/manage/special/importData'
},
queryParams: {
pageNum: 1,
pageSize: 50
},
loadingInstance: null,
tableData: [],
loading: false,
total: 0
}
},
created() {
this.research()
},
methods: {
submitFileForm() {
this.$refs.upload.submit()
},
// 上传文件数量超出后的动作
handleExceed() {
this.upload.isUploading = false
this.msgInfo('仅可上传一个文件哦')
},
// 文件上传中处理
handleFileUploadProgress(event, file, fileList) {
console.log(event, 'event')
this.upload.isUploading = true
},
// 文件上传成功处理
handleFileSuccess(response, file, fileList) {
console.log(response, 'response')
this.loadingInstance = this.$loading({
lock: true,
text: '正在处理,请稍候...',
background: 'rgba(0, 0, 0, 0.7)'
})
var fileName = response.fileName
if (fileName != undefined && fileName != '') {
}
if (response.code == 200) {
this.$alert('', '上传成功', {
dangerouslyUseHTMLString: true,
callback: () => {
// 关闭遮罩层
this.loadingInstance.close()
}
})
} else {
if (response && response.data && Array.isArray(response.data)) {
const msgList = response.data
.map((item) => item.memberCode + ' ' + item.msg)
.join('<br>')
this.$alert(msgList, this.$t('错误提示'), {
dangerouslyUseHTMLString: true,
callback: () => {
// 关闭遮罩层
this.loadingInstance.close()
}
})
} else {
const msgs = response.msg
this.$alert(msgs, this.$t('错误提示'), {
dangerouslyUseHTMLString: true,
callback: () => {
// 关闭遮罩层
this.loadingInstance.close()
}
})
}
}
this.upload.open = false
this.upload.isUploading = false
this.$refs.upload.clearFiles()
},
handleImport() {
this.upload.title = '批量导入'
this.upload.open = true
},
importTemplate() {
this.download(
'/bonus/manage/special/download',
{},
`${this.$t('新零售注水业绩')}${new Date().getTime()}.xlsx`
)
},
addRules() {
this.types = 1
this.ruleShow = true
this.title = '添加'
},
updateShow(item) {
this.types = 2
this.title = '修改'
api.getOnespecialList(item.pkId).then((res) => {
if (res.code === 200) {
this.ruleShow = true
this.table = res.data
}
})
},
delRole(item) {
this.$confirm('确认删除?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
api.specialDel(item.pkId).then((res) => {
if (res.code === 200) {
Message({
message: res.msg,
type: 'success'
})
this.research()
}
})
})
},
ruleSubmit() {
this.$refs['forms'].validate((valid) => {
if (!valid) {
return false
} else {
if (this.types == 1) {
api.specialSave(this.table).then((res) => {
if (res.code == 200) {
Message({
message: res.msg,
type: 'success'
})
this.ruleShow = false
this.$refs['forms'].clearValidate()
this.$refs['forms'].resetFields()
this.research()
}
})
}
if (this.types == 2) {
api.specialUpdate(this.table).then((res) => {
if (res.code == 200) {
Message({
message: res.msg,
type: 'success'
})
this.ruleShow = false
this.$refs['forms'].clearValidate()
this.$refs['forms'].resetFields()
this.research()
}
})
}
}
})
},
handleClose() {
this.ruleShow = false
this.table = {}
},
changeTime(val) {
this.queryParams.startDate = val ? val[0] : ''
this.queryParams.endtDate = val ? val[1] : ''
},
changeTime1(val) {
this.queryParams.beginEndDate = val ? val[0] : ''
this.queryParams.endEndDate = val ? val[1] : ''
},
research() {
this.loading = true
api.specialList(this.queryParams).then((res) => {
this.loading = false
this.tableData = res.rows
this.total = res.total
})
},
reChongzhi() {
this.queryParams = {
pageNum: 1,
pageSize: 50
}
this.modifiedTime = []
this.modifiedTime1 = []
this.research()
},
handleSelectionChange(val) {
this.multipleSelection = val
},
tableRowClassName({ row, rowIndex }) {
if (rowIndex % 2 == 1) {
return 'warning-row'
} else if (rowIndex % 2 == 0) {
return 'success-row'
}
return ''
}
}
}
</script>
<style lang="scss" scoped>
::v-deep .el-upload--picture-card {
min-width: 80px !important;
min-height: 80px !important;
border: 1px solid #ccc;
border-radius: 4px;
}
::v-deep .el-select {
width: 100%;
}
::v-deep .el-range-editor.el-input__inner {
width: 100%;
}
::v-deep .colors {
padding: 5px !important;
}
::v-deep .banner .el-form-item__error {
left: 100px;
margin-top: 10px;
}
.avatar-uploader {
width: 68px !important;
height: 68px !important;
}
::v-deep .input-s .el-input {
//width:637px;
}
.button-style {
width: 209px;
height: 48px;
background: #cccccc;
border-radius: 5px 5px 5px 5px;
opacity: 1;
line-height: 48px;
padding: 0 !important;
color: #fff;
font-size: 18px;
}
::v-deep .el-dialog__title {
font-weight: bold;
}
::v-deep .el-dialog__header {
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
}
.button-s {
padding: 0 2px !important;
}
::v-deep .el-button {
padding: 10px 20px;
}
::v-deep .el-date-editor .el-range__close-icon {
margin-top: -10px;
}
::v-deep .el-date-editor .el-range-separator {
margin-top: -10px;
}
::v-deep .el-date-editor .el-range__icon {
margin-top: -10px;
}
::v-deep .el-input__inner {
//height:28px;
//line-height: 28px;
}
::v-deep .el-form-item {
margin-bottom: 15px;
}
::v-deep .el-form-item__label {
color: #333;
font-weight: inherit;
}
::v-deep .el-row {
//margin-top: 20px;
}
::v-deep .el-date-editor {
width: 100% !important;
}
::v-deep .el-table .warning-row {
background: #f9f9f9;
}
::v-deep .el-table .success-row {
background: #ffffff;
}
::v-deep .el-table thead {
color: #000000;
}
.openClose {
margin-top: 10px;
margin-right: 10px;
color: #666666;
text-align: center;
}
.page {
padding: 20px;
background: #f9f9f9;
font-size: 14px;
.thetopbox {
background: #ffffff;
border-radius: 8px;
padding-bottom: 10px;
.searchbox {
display: flex;
align-items: center;
.searchtitle {
margin-right: 10px;
}
.searchbtn {
background: #08143f;
color: #ffffff;
}
}
}
.main {
//margin-top: 20px;
background: #f9f9f9;
//border-radius: 8px;
//box-shadow: 0px 2px 20px 0px rgba(238, 238, 238, 0.5);
.maintop {
display: flex;
padding: 0px 0;
justify-content: space-between;
align-items: center;
.mainbtn {
.thebtn1 {
color: #ffffff;
background: #3181e5;
width: 68px;
//height: 32px;
}
}
}
}
}
</style>