5 changed files with 391 additions and 1 deletions
@ -1,6 +1,6 @@ |
|||||
NODE_ENV=production |
NODE_ENV=production |
||||
# VUE_APP_API_SERVER = http://120.27.18.76/api |
# VUE_APP_API_SERVER = http://120.27.18.76/api |
||||
VUE_APP_API_SERVER = http://192.166.3.82/api |
VUE_APP_API_SERVER = http://112.230.202.146:10081/api |
||||
VUE_APP_BIPASS_API_SERVER = https://epmet-preview.elinkservice.cn/linkdata/linkdata-gateway/route |
VUE_APP_BIPASS_API_SERVER = https://epmet-preview.elinkservice.cn/linkdata/linkdata-gateway/route |
||||
VUE_APP_NODE_ENV=preview |
VUE_APP_NODE_ENV=preview |
||||
VUE_APP_PUBLIC_PATH=epmet-work-pc |
VUE_APP_PUBLIC_PATH=epmet-work-pc |
@ -0,0 +1,97 @@ |
|||||
|
<template> |
||||
|
<el-card class="contain"> |
||||
|
<div style="margin-bottom: 12px; text-align: right;"> |
||||
|
<el-button type="primary" @click="handleAdd">保存并生效</el-button> |
||||
|
</div> |
||||
|
<el-table :data="tableData" style="width: 100%"> |
||||
|
<el-table-column prop="name" label="等级名称"></el-table-column> |
||||
|
<el-table-column prop="icon" label="等级勋章" width="180"></el-table-column> |
||||
|
<el-table-column prop="points" label="所需积分" width="180"></el-table-column> |
||||
|
<el-table-column prop="date" label="操作" width="180"> |
||||
|
<template slot-scope="scope"> |
||||
|
<el-button @click="handleClickEdit(scope.row)" type="text" size="small">编辑</el-button> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
</el-table> |
||||
|
<el-dialog title="新增活动规则" :visible.sync="dialogVisible" width="30%"> |
||||
|
<div> |
||||
|
<el-form :model="form" label-width="100px"> |
||||
|
<el-form-item label="等级名称"> |
||||
|
<el-input v-model="form.name"></el-input> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="所需积分"> |
||||
|
<el-input-number v-model="form.points"></el-input-number> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="等级勋章"> |
||||
|
<el-upload |
||||
|
class="upload-demo" |
||||
|
action="/points/sys/oss/upload" |
||||
|
list-type="picture-card" |
||||
|
:limit="1" |
||||
|
:on-success="onSuccess" |
||||
|
:file-list="fileList"> |
||||
|
<i class="el-icon-plus"></i> |
||||
|
<div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div> |
||||
|
</el-upload> |
||||
|
<!-- <el-input v-model="form.icon"></el-input> --> |
||||
|
</el-form-item> |
||||
|
</el-form> |
||||
|
</div> |
||||
|
|
||||
|
<template #footer> |
||||
|
<el-button type="primary" @click="handleSave">确定</el-button> |
||||
|
<el-button @click="dialogVisible = false">取消</el-button> |
||||
|
</template> |
||||
|
</el-dialog> |
||||
|
</el-card> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
export default { |
||||
|
data() { |
||||
|
return { |
||||
|
dialogVisible: false, |
||||
|
tableData: [], |
||||
|
fileList: [], |
||||
|
form: {} |
||||
|
} |
||||
|
}, |
||||
|
mounted() { |
||||
|
this.getTableData() |
||||
|
}, |
||||
|
methods: { |
||||
|
getTableData() { |
||||
|
this.$http.get('/points/points/level/list').then(res => { |
||||
|
this.tableData = res.data.data |
||||
|
}) |
||||
|
}, |
||||
|
handleClick(row) { |
||||
|
console.log(row); |
||||
|
}, |
||||
|
handleAdd() { |
||||
|
this.dialogVisible = true |
||||
|
}, |
||||
|
handleClickEdit(row) { |
||||
|
this.form = row |
||||
|
this.dialogVisible = true |
||||
|
}, |
||||
|
handleSave() { |
||||
|
this.$http.post('/points/points/level', this.form).then(res => { |
||||
|
this.$message.success('保存成功') |
||||
|
this.dialogVisible = false |
||||
|
this.getTableData() |
||||
|
}) |
||||
|
}, |
||||
|
onSuccess(e) { |
||||
|
console.log(e) |
||||
|
} |
||||
|
}, |
||||
|
} |
||||
|
</script> |
||||
|
|
||||
|
<style lang="scss" scoped> |
||||
|
.contain { |
||||
|
width: 100%; |
||||
|
margin: 24px 6px; |
||||
|
} |
||||
|
</style> |
@ -0,0 +1,194 @@ |
|||||
|
<template> |
||||
|
<div class="contain"> |
||||
|
<el-card> |
||||
|
<h2>用户数据</h2> |
||||
|
<el-form inline :model="formData"> |
||||
|
<el-form-item label="手机号"> |
||||
|
<el-input v-model="formData.mobile" placeholder="手机号" clearable></el-input> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="首次获取文明币时间"> |
||||
|
<el-date-picker |
||||
|
v-model="formData.daterange" |
||||
|
type="daterange" |
||||
|
unlink-panels |
||||
|
range-separator="至" |
||||
|
start-placeholder="开始日期" |
||||
|
end-placeholder="结束日期" |
||||
|
:picker-options="pickerOptions"> |
||||
|
</el-date-picker> |
||||
|
</el-form-item> |
||||
|
<el-form-item> |
||||
|
<el-button type="primary" @click="getTableData">查询</el-button> |
||||
|
</el-form-item> |
||||
|
</el-form> |
||||
|
<el-table :data="tableData" style="width: 100%"> |
||||
|
<el-table-column type="selection" width="55"></el-table-column> |
||||
|
<el-table-column prop="nickname" label="用户名"></el-table-column> |
||||
|
<el-table-column prop="mobile" label="手机号"></el-table-column> |
||||
|
<el-table-column prop="total" label="总积分"></el-table-column> |
||||
|
<el-table-column prop="used" label="使用总积分"></el-table-column> |
||||
|
<el-table-column prop="availability" label="可用文明币"></el-table-column> |
||||
|
<el-table-column prop="blocked" label="冻结文明币"></el-table-column> |
||||
|
<el-table-column prop="firstDate" label="首次获取时间"></el-table-column> |
||||
|
<el-table-column prop="levelName" label="等级"></el-table-column> |
||||
|
<el-table-column prop="actNum" label="活动次数"></el-table-column> |
||||
|
</el-table> |
||||
|
</el-card> |
||||
|
<el-card> |
||||
|
<h2>积分排行榜</h2> |
||||
|
<el-row :gutter="24"> |
||||
|
<el-col :span="12"> |
||||
|
<h3>获取积分榜</h3> |
||||
|
<div class="scroll-ranking"> |
||||
|
<dv-scroll-ranking-board v-if="totalConfig.data.length > 0" :config="totalConfig" style="width:500px;height:300px" /> |
||||
|
</div> |
||||
|
</el-col> |
||||
|
<el-col :span="12"> |
||||
|
<h3>使用积分榜</h3> |
||||
|
<div class="scroll-ranking"> |
||||
|
<dv-scroll-ranking-board v-if="usedConfig.data.length > 0" :config="usedConfig" style="width:500px;height:300px" /> |
||||
|
</div> |
||||
|
</el-col> |
||||
|
</el-row> |
||||
|
</el-card> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import moment from 'moment' |
||||
|
export default { |
||||
|
data() { |
||||
|
return { |
||||
|
formData: { |
||||
|
mobile: '', |
||||
|
daterange: '' |
||||
|
}, |
||||
|
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]); |
||||
|
} |
||||
|
}] |
||||
|
}, |
||||
|
tableData: [], |
||||
|
totalConfig: { |
||||
|
data: [] |
||||
|
}, |
||||
|
usedConfig: { |
||||
|
data: [] |
||||
|
}, |
||||
|
} |
||||
|
}, |
||||
|
mounted() { |
||||
|
this.getTableData() |
||||
|
this.getTotalTop() |
||||
|
this.getUsedTop() |
||||
|
}, |
||||
|
methods: { |
||||
|
getTableData() { |
||||
|
let startTime, endTime |
||||
|
if(this.formData.daterange) { |
||||
|
startTime = moment(this.formData.daterange[0]).format('YYYY-MM-DD') |
||||
|
endTime = moment(this.formData.daterange[1]).format('YYYY-MM-DD') |
||||
|
} |
||||
|
if (!this.formData.daterange) { |
||||
|
this.formData.daterange = '' |
||||
|
} |
||||
|
this.$http.get('/points/points/user/page', { |
||||
|
params: { |
||||
|
page: 1, |
||||
|
limit: 10, |
||||
|
mobile: this.formData.mobile, |
||||
|
startTime, |
||||
|
endTime |
||||
|
} |
||||
|
}).then(res => { |
||||
|
this.tableData = res.data.data.list |
||||
|
}) |
||||
|
}, |
||||
|
getTotalTop(){ |
||||
|
this.$http.get('/points/points/user/total-top').then(res => { |
||||
|
this.totalConfig.data = res.data.data.map(item => { |
||||
|
return { |
||||
|
name: item.nickname, |
||||
|
value: item.total |
||||
|
} |
||||
|
}) |
||||
|
console.log(this.totalConfig.data) |
||||
|
}) |
||||
|
}, |
||||
|
getUsedTop(){ |
||||
|
this.$http.get('/points/points/user/used-top').then(res => { |
||||
|
this.usedConfig.data = res.data.data.map(item => { |
||||
|
return { |
||||
|
name: item.nickname, |
||||
|
value: item.used |
||||
|
} |
||||
|
}) |
||||
|
}) |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
</script> |
||||
|
|
||||
|
<style lang="scss" scoped> |
||||
|
.contain { |
||||
|
width: 100%; |
||||
|
margin: 24px 6px; |
||||
|
h2 { |
||||
|
font-weight: 700; |
||||
|
font-style: normal; |
||||
|
font-size: 16px; |
||||
|
display: flex; |
||||
|
justify-content: space-between; |
||||
|
} |
||||
|
h3 { |
||||
|
font-weight: 600; |
||||
|
font-style: normal; |
||||
|
font-size: 14px; |
||||
|
text-align: center; |
||||
|
} |
||||
|
} |
||||
|
.scroll-ranking { |
||||
|
// background-color: #282c34; |
||||
|
position: relative; |
||||
|
overflow: hidden; |
||||
|
display: flex; |
||||
|
justify-content: center; |
||||
|
align-items: center; |
||||
|
border-radius: 8px; |
||||
|
} |
||||
|
</style> |
||||
|
<style> |
||||
|
.info-name,.ranking-value { |
||||
|
color: #282c34 !important; |
||||
|
font-size: 18px; |
||||
|
} |
||||
|
.rank { |
||||
|
/* color: #000 !important; */ |
||||
|
} |
||||
|
.inside-column { |
||||
|
background-color: #fff !important; |
||||
|
background: linear-gradient(90deg, rgba(35, 228, 171, 1) 0%, rgba(9, 174, 233, 1) 100%); |
||||
|
} |
||||
|
</style> |
@ -0,0 +1,97 @@ |
|||||
|
<template> |
||||
|
<el-card class="contain"> |
||||
|
<!-- <div style="margin-bottom: 12px; text-align: right;"> |
||||
|
<el-button type="primary" @click="handleAdd">新增规则</el-button> |
||||
|
</div> --> |
||||
|
<el-table :data="tableData" style="width: 100%"> |
||||
|
<el-table-column prop="name" label="获得文明币行为"></el-table-column> |
||||
|
<el-table-column prop="points" label="获得文明币数量规则" width="180"></el-table-column> |
||||
|
<el-table-column prop="validityMonth" label="文明币有效期" width="180"></el-table-column> |
||||
|
<el-table-column prop="status" label="状态" width="180"> |
||||
|
<template slot-scope="{ row }"> |
||||
|
<el-switch v-model="row.status" active-value="1" inactive-value="0" active-color="#13ce66" inactive-color="#ff4949" active-text="启用" inactive-text="禁用"> |
||||
|
</el-switch> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
<el-table-column prop="updateDate" label="规则更新时间"></el-table-column> |
||||
|
<el-table-column prop="updater" label="操作人"></el-table-column> |
||||
|
<el-table-column prop="date" label="操作" width="180"> |
||||
|
<template slot-scope="scope"> |
||||
|
<el-button @click="handleClickEdit(scope.row)" type="text" size="small">编辑</el-button> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
</el-table> |
||||
|
<el-dialog title="新增活动规则" :visible.sync="dialogVisible" width="30%"> |
||||
|
<div> |
||||
|
<el-form :model="form" label-width="200px"> |
||||
|
<el-form-item label="获得文明币行为"> |
||||
|
<el-input v-model="form.name"></el-input> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="获得文明币数量规则"> |
||||
|
<el-input v-model="form.points"></el-input> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="文明币有效期"> |
||||
|
<el-input v-model="form.validityMonth"></el-input> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="状态"> |
||||
|
<el-switch v-model="form.status" active-value="1" inactive-value="0" active-color="#13ce66" inactive-color="#ff4949"> |
||||
|
</el-switch> |
||||
|
</el-form-item> |
||||
|
</el-form> |
||||
|
</div> |
||||
|
|
||||
|
<template #footer> |
||||
|
<el-button type="primary" @click="handleSave">确定</el-button> |
||||
|
<el-button @click="dialogVisible = false">取消</el-button> |
||||
|
</template> |
||||
|
</el-dialog> |
||||
|
</el-card> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
export default { |
||||
|
data() { |
||||
|
return { |
||||
|
dialogVisible: false, |
||||
|
tableData: [], |
||||
|
form: {} |
||||
|
} |
||||
|
}, |
||||
|
mounted() { |
||||
|
this.getTableData() |
||||
|
}, |
||||
|
methods: { |
||||
|
getTableData() { |
||||
|
this.$http.get('/points/points/rule/list').then(res => { |
||||
|
this.tableData = res.data.data |
||||
|
}) |
||||
|
}, |
||||
|
handleClick(row) { |
||||
|
console.log(row); |
||||
|
}, |
||||
|
handleAdd() { |
||||
|
this.dialogVisible = true |
||||
|
}, |
||||
|
handleClickEdit(row) { |
||||
|
this.$http.get(`/points/points/rule/${row.id}`).then(res => { |
||||
|
this.form = res.data.data |
||||
|
this.dialogVisible = true |
||||
|
}) |
||||
|
}, |
||||
|
handleSave() { |
||||
|
this.$http.put('/points/points/rule', this.form).then(res => { |
||||
|
this.$message.success('保存成功') |
||||
|
this.dialogVisible = false |
||||
|
this.getTableData() |
||||
|
}) |
||||
|
} |
||||
|
}, |
||||
|
} |
||||
|
</script> |
||||
|
|
||||
|
<style lang="scss" scoped> |
||||
|
.contain { |
||||
|
width: 100%; |
||||
|
margin: 24px 6px; |
||||
|
} |
||||
|
</style> |
Loading…
Reference in new issue