领取中心

This commit is contained in:
sdaduanbilei-d1581 2025-12-08 15:06:04 +08:00
parent eeaf770a06
commit 798d53c611
6 changed files with 269 additions and 43 deletions

20
src/api/claim/index.js Normal file
View File

@ -0,0 +1,20 @@
import fetch from '../fetch.js'
export default {
save(params) {
return fetch('/claim/add', params,'post','json')
},
update(params) {
return fetch('/claim/update', params,'post','json')
},
list(params) {
return fetch('/claim/list', params,'post','json')
},
setImg(params) {
return fetch('/claim/uploadImg',params,'post','json')
},
}

View File

@ -25,7 +25,7 @@ export default {
},
inviteList(params){
return fetch('/personal/inviteCode/inviteRecords',params,'post','json')
return fetch('/personal/inviteCode/records',params,'post','json')
}
}

View File

@ -13,6 +13,7 @@ import contractPay from '@/api/contract/pay.js'
import notice from '@/api/notice/index.js'
import flower from '@/api/flower/index.js'
import badge from '@/api/badge/index.js'
import claim from '@/api/claim/index.js'
export default {
user,
sys,
@ -29,4 +30,5 @@ export default {
notice,
flower,
badge,
claim
}

View File

@ -0,0 +1,147 @@
<template>
<div>
<a-button type="text" @click="show = true">{{
type === 'add' ? '新增' : '编辑'
}}</a-button>
<a-modal v-model:visible="show" @before-ok="submit">
<a-form :model="form" auto-label-width ref="form">
<a-form-item label="名称" field="name" required>
<a-input
placeholder="请输入徽章名称"
v-model="form.name"
></a-input>
</a-form-item>
<a-form-item label="描述" field="content" required>
<a-textarea
placeholder="请输入描述"
:auto-size = {minRows:7}
v-model="form.content"
></a-textarea>
</a-form-item>
<a-form-item label="标签" field="tag" required>
<a-input
placeholder="请输入标签"
v-model="form.tag"
></a-input>
</a-form-item>
<a-form-item label="库存" field="amount" required>
<a-input-number
placeholder="请输入库存"
v-model="form.amount"
></a-input-number>
</a-form-item>
<a-form-item label="视频号链接" field="videoUrl" required>
<a-input
placeholder="请输入视频号链接"
v-model="form.videoUrl"
></a-input>
</a-form-item>
<a-form-item label="阳光值" field="points" required>
<a-input-number
placeholder="请输入兑换所需阳光值"
v-model="form.points"
></a-input-number>
</a-form-item>
<a-form-item label="上传图片" field="ossId" required>
<div class="">
<a-image
class="mb-10"
v-if="form.ossId"
:src="form.ossUrl"
width="160"
height="160"
></a-image>
<upload @ok="upload" />
<div class="font-14 primary mt-10">
图片大小为 400* 400
</div>
</div>
</a-form-item>
</a-form>
</a-modal>
</div>
</template>
<script>
import upload from '@/components/upload/index.vue'
export default {
components: {
upload
},
props: {
type: {
type: String,
default: 'add'
},
info: {
type: Object,
default: null
}
},
watch: {
info: {
handler(val) {
this.form = { ...val }
},
immediate: true
}
},
data() {
return {
show: false,
form: {
amount: 0,
content: '',
name: '',
ossId: '',
points: 0,
tag: '',
videoUrl: '',
ossUrl: ''
}
}
},
methods: {
upload(file) {
this.form.ossId = file.id
this.form.ossUrl = file.url
},
submit(done) {
this.$refs.form.validate(err => {
if (err === undefined) {
if (this.form.id) {
this.$api.claim.update(this.form).then(res => {
if (res.code === 200) {
this.$emit('ok')
this.$message.success(res.msg)
done()
} else {
this.$message.error(res.msg)
done(false)
}
})
} else {
const data = this.form
data.ossIds = [ this.form.ossId ]
this.$api.claim.save(data).then(res => {
if (res.code === 200) {
this.$emit('ok')
this.$message.success(res.msg)
done()
} else {
this.$message.error(res.msg)
done(false)
}
})
}
} else {
done(false)
}
})
}
}
}
</script>
<style lang="scss" scoped></style>

View File

@ -0,0 +1,99 @@
<template>
<div>
<navbar title="植物兑换中心" />
<a-card>
<div class="flex flex-center flex-justify-start">
<edit @ok="fetchList"/>
</div>
<a-table
class="mt-20"
:columns="columns"
:data="list"
:pagination="page"
@pageChange="change"
>
<template #name="{ record }">
<div class="flex flex-center flex-justify-start">
<a-image
v-if="record.imgList.length > 0"
width="60"
height="60"
:src="record.imgList[0].url"
:alt="record.id"
/>
<div class="ml-10">{{ record.name }}</div>
</div>
</template>
<template #menu="{ record }">
<div class="flex flex-center">
<edit type="edit" :info="record" @ok="fetchList" />
<a-button type="text" @click="changeHot(record)">{{
record.isHot === 0 ? '设置热门' : '取消热门'
}}</a-button>
</div>
</template>
</a-table>
</a-card>
</div>
</template>
<script>
import navbar from '@/components/navbar/index.vue'
import edit from '../claim/components/edit.vue'
import upload from '../../../components/upload/index.vue'
export default {
components: {
upload,
edit,
navbar
},
data() {
return {
page: {
current: 0,
pageSize: 10
},
list:[],
columns :[
{
title:'名称',
slotName: 'name',
},
{
title:'别名',
dataIndex: 'aliases',
},
{
title:'latinName',
dataIndex:'latinName'
},
{
title:'科/属',
dataIndex: 'genus',
},
{
title:"操作",
slotName:'menu'
}
]
}
},
mounted() {
this.fetchList()
},
methods: {
fetchList() {
const data = { keyword: '',name:'', ...this.page }
this.$api.claim.list(data).then(res => {
if (res.code === 200) {
console.log(res)
}
})
}
}
}
</script>
<style lang="scss" scoped></style>

View File

@ -1,42 +0,0 @@
<template>
<div>
<navbar title="邀请记录"/>
<a-card>
</a-card>
</div>
</template>
<script>
import navbar from '@/components/navbar/index.vue'
export default {
components: {
navbar,
},
data() {
return {
page: {
current:0,
pageSize:10,
}
}
},
mounted() {
this.fetchList();
},
methods: {
fetchList() {
const data = {keyword:'', ...this.page}
this.$api.flower.inviteList(data).then(res => {
if (res.code === 200){
console.log(res)
}
})
}
},
}
</script>
<style lang="scss" scoped>
</style>