Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
S
safe-campus-bbs
Project overview
Project overview
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
万成波
safe-campus-bbs
Commits
819be043
Commit
819be043
authored
Sep 02, 2025
by
yuwenwen
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
后台积分兑换,动态管理以及移动端代码初始提交
parent
5810f480
Changes
30
Show whitespace changes
Inline
Side-by-side
Showing
30 changed files
with
1014 additions
and
53 deletions
+1014
-53
safe-campus-bbs-ui/src/api/moments/index.js
safe-campus-bbs-ui/src/api/moments/index.js
+27
-0
safe-campus-bbs-ui/src/api/pointsExchange/index.js
safe-campus-bbs-ui/src/api/pointsExchange/index.js
+36
-0
safe-campus-bbs-ui/src/api/pointsManage/index.js
safe-campus-bbs-ui/src/api/pointsManage/index.js
+0
-8
safe-campus-bbs-ui/src/api/userLevel/index.js
safe-campus-bbs-ui/src/api/userLevel/index.js
+5
-5
safe-campus-bbs-ui/src/utils/request.js
safe-campus-bbs-ui/src/utils/request.js
+1
-1
safe-campus-bbs-ui/src/views/moments/index.vue
safe-campus-bbs-ui/src/views/moments/index.vue
+141
-0
safe-campus-bbs-ui/src/views/pointsExchange/index.vue
safe-campus-bbs-ui/src/views/pointsExchange/index.vue
+148
-0
safe-campus-bbs-ui/src/views/pointsManage/DetailDialog.vue
safe-campus-bbs-ui/src/views/pointsManage/DetailDialog.vue
+50
-0
safe-campus-bbs-ui/src/views/pointsManage/ExchangeDialog.vue
safe-campus-bbs-ui/src/views/pointsManage/ExchangeDialog.vue
+118
-0
safe-campus-bbs-ui/src/views/pointsManage/index.vue
safe-campus-bbs-ui/src/views/pointsManage/index.vue
+78
-39
safe-campus-bbs-uniapp/App.vue
safe-campus-bbs-uniapp/App.vue
+17
-0
safe-campus-bbs-uniapp/config/index.config.js
safe-campus-bbs-uniapp/config/index.config.js
+17
-0
safe-campus-bbs-uniapp/index.html
safe-campus-bbs-uniapp/index.html
+20
-0
safe-campus-bbs-uniapp/main.js
safe-campus-bbs-uniapp/main.js
+22
-0
safe-campus-bbs-uniapp/manifest.json
safe-campus-bbs-uniapp/manifest.json
+72
-0
safe-campus-bbs-uniapp/pages.json
safe-campus-bbs-uniapp/pages.json
+59
-0
safe-campus-bbs-uniapp/pages/index/index.vue
safe-campus-bbs-uniapp/pages/index/index.vue
+25
-0
safe-campus-bbs-uniapp/pages/mine/mine.vue
safe-campus-bbs-uniapp/pages/mine/mine.vue
+22
-0
safe-campus-bbs-uniapp/pages/topics/topics.vue
safe-campus-bbs-uniapp/pages/topics/topics.vue
+22
-0
safe-campus-bbs-uniapp/static/images/tabbar/home-active.png
safe-campus-bbs-uniapp/static/images/tabbar/home-active.png
+0
-0
safe-campus-bbs-uniapp/static/images/tabbar/home.png
safe-campus-bbs-uniapp/static/images/tabbar/home.png
+0
-0
safe-campus-bbs-uniapp/static/images/tabbar/mine-active.png
safe-campus-bbs-uniapp/static/images/tabbar/mine-active.png
+0
-0
safe-campus-bbs-uniapp/static/images/tabbar/mine.png
safe-campus-bbs-uniapp/static/images/tabbar/mine.png
+0
-0
safe-campus-bbs-uniapp/static/images/tabbar/topic-active.png
safe-campus-bbs-uniapp/static/images/tabbar/topic-active.png
+0
-0
safe-campus-bbs-uniapp/static/images/tabbar/topic.png
safe-campus-bbs-uniapp/static/images/tabbar/topic.png
+0
-0
safe-campus-bbs-uniapp/static/logo.png
safe-campus-bbs-uniapp/static/logo.png
+0
-0
safe-campus-bbs-uniapp/static/styles/common.scss
safe-campus-bbs-uniapp/static/styles/common.scss
+44
-0
safe-campus-bbs-uniapp/static/styles/index.scss
safe-campus-bbs-uniapp/static/styles/index.scss
+1
-0
safe-campus-bbs-uniapp/uni.promisify.adaptor.js
safe-campus-bbs-uniapp/uni.promisify.adaptor.js
+13
-0
safe-campus-bbs-uniapp/uni.scss
safe-campus-bbs-uniapp/uni.scss
+76
-0
No files found.
safe-campus-bbs-ui/src/api/moments/index.js
0 → 100644
View file @
819be043
import
request
from
'
@/utils/request
'
// 动态列表
export
function
listData
(
params
)
{
return
request
({
url
:
'
/bbs/moment/list
'
,
method
:
'
get
'
,
params
})
}
// 动态详情
export
function
detailData
(
id
)
{
return
request
({
url
:
`/bbs/moment/
${
id
}
`
,
method
:
'
get
'
})
}
// 删除动态
export
function
delData
(
id
)
{
return
request
({
url
:
`/bbs/moment/
${
id
}
`
,
method
:
'
delete
'
})
}
\ No newline at end of file
safe-campus-bbs-ui/src/api/pointsExchange/index.js
0 → 100644
View file @
819be043
import
request
from
'
@/utils/request
'
// 积分兑换商品
export
function
pointsExchange
(
params
)
{
return
request
({
url
:
'
/bbs/points/exchange/select/goods
'
,
method
:
'
get
'
,
params
})
}
// 兑换人选择
export
function
exchangeUser
(
params
)
{
return
request
({
url
:
'
/bbs/points/exchange/select/users
'
,
method
:
'
get
'
,
params
})
}
// 兑换列表
export
function
listData
(
params
)
{
return
request
({
url
:
'
/bbs/points/exchange/list
'
,
method
:
'
get
'
,
params
})
}
// 兑换商品
export
function
exchange
(
data
){
return
request
({
url
:
'
/bbs/points/exchange/exchange
'
,
method
:
'
post
'
,
data
})
}
\ No newline at end of file
safe-campus-bbs-ui/src/api/pointsManage/index.js
View file @
819be043
...
...
@@ -45,11 +45,3 @@ export function editData(data) {
})
}
// 删除积分管理
export
function
delData
(
id
)
{
return
request
({
url
:
`/bbs/points/goods/
${
id
}
`
,
method
:
'
delete
'
})
}
\ No newline at end of file
safe-campus-bbs-ui/src/api/userLevel/index.js
View file @
819be043
...
...
@@ -3,7 +3,7 @@ import request from '@/utils/request'
// 用户等级列表
export
function
listData
(
params
)
{
return
request
({
url
:
'
/bbs/
moment
/grade/list
'
,
url
:
'
/bbs/
points
/grade/list
'
,
method
:
'
get
'
,
params
})
...
...
@@ -12,7 +12,7 @@ export function listData(params) {
// 用户等级详情
export
function
detailData
(
id
)
{
return
request
({
url
:
`/bbs/
moment
/grade/
${
id
}
`
,
url
:
`/bbs/
points
/grade/
${
id
}
`
,
method
:
'
get
'
})
}
...
...
@@ -20,7 +20,7 @@ export function detailData(id) {
// 新增用户等级
export
function
addData
(
data
)
{
return
request
({
url
:
'
/bbs/
moment
/grade
'
,
url
:
'
/bbs/
points
/grade
'
,
method
:
'
post
'
,
data
})
...
...
@@ -29,7 +29,7 @@ export function addData(data) {
// 修改用户等级
export
function
editData
(
data
)
{
return
request
({
url
:
'
/bbs/
moment
/grade
'
,
url
:
'
/bbs/
points
/grade
'
,
method
:
'
put
'
,
data
})
...
...
@@ -39,7 +39,7 @@ export function editData(data) {
// 删除用户等级
export
function
delData
(
id
)
{
return
request
({
url
:
`/bbs/
moment
/grade/
${
id
}
`
,
url
:
`/bbs/
points
/grade/
${
id
}
`
,
method
:
'
delete
'
})
}
\ No newline at end of file
safe-campus-bbs-ui/src/utils/request.js
View file @
819be043
...
...
@@ -17,7 +17,7 @@ const service = axios.create({
// axios中请求配置有baseURL选项,表示请求URL公共部分
baseURL
:
process
.
env
.
VUE_APP_BASE_API
,
// 超时
timeout
:
1
0000
timeout
:
3
0000
})
// request拦截器
...
...
safe-campus-bbs-ui/src/views/moments/index.vue
0 → 100644
View file @
819be043
<
template
>
<div
class=
"app-container"
>
<div
class=
"page-container"
>
<el-form
:model=
"queryParams"
:inline=
"true"
label-width=
"80px"
>
<el-form-item
label=
"动态内容"
>
<el-input
placeholder=
"请输入"
v-model=
"queryParams.content"
style=
"width: 220px;"
></el-input>
</el-form-item>
<el-form-item
label=
"创建时间"
>
<el-date-picker
placeholder=
"请选择"
value-format=
"YYYY-MM-DD"
v-model=
"queryParams.createTime"
></el-date-picker>
</el-form-item>
<el-form-item>
<el-button
type=
"primary"
@
click=
"handleQuery"
>
查询
</el-button>
<el-button
@
click=
"handleReset"
>
重置
</el-button>
</el-form-item>
</el-form>
<el-row
class=
"mb10"
>
</el-row>
<el-table
:data=
"tableList"
>
<el-table-column
label=
"序号"
width=
"55"
type=
"index"
align=
"center"
></el-table-column>
<el-table-column
label=
"动态内容"
prop=
"nikeName"
align=
"center"
></el-table-column>
<el-table-column
label=
"话题"
align=
"center"
prop=
"goodsName"
></el-table-column>
<el-table-column
label=
"帐号"
prop=
"goodsExchangePoints"
align=
"center"
></el-table-column>
<el-table-column
label=
"姓名"
prop=
"createTime"
align=
"center"
></el-table-column>
<el-table-column
label=
"表情数"
prop=
"userGradeName"
align=
"center"
></el-table-column>
<el-table-column
label=
"评论数"
prop=
"userRemainingPoints"
align=
"center"
></el-table-column>
<el-table-column
label=
"创建时间"
prop=
"userRemainingPoints"
align=
"center"
></el-table-column>
<el-table-column
label=
"操作"
align=
"center"
>
<template
#default
="
{ row }">
<el-button
type=
"text"
@
click=
"handleUpdate(row)"
>
详情
</el-button>
<el-button
type=
"text"
@
click=
"handleDelete(row)"
>
删除
</el-button>
</
template
>
</el-table-column>
</el-table>
<pagination
v-show=
"total > 0"
:total=
"total"
:page.sync=
"queryParams.pageNum"
:limit.sync=
"queryParams.pageSize"
@
pagination=
"getList"
/>
</div>
</div>
</template>
<
script
>
import
{
listData
}
from
'
@/api/moments
'
;
export
default
{
name
:
'
Moments
'
,
data
()
{
return
{
queryParams
:
{
pageNum
:
1
,
pageSize
:
10
},
tableList
:
[],
total
:
0
,
dateRange
:
[],
optionList
:
[]
}
},
created
()
{
},
mounted
()
{
this
.
getList
()
},
methods
:
{
// 列表数据
getList
()
{
listData
(
this
.
queryParams
).
then
(
res
=>
{
console
.
log
(
res
)
this
.
tableList
=
res
.
rows
;
this
.
total
=
res
.
total
})
},
// 兑换商品列表
getOptions
()
{
pointsExchange
().
then
(
res
=>
{
console
.
log
(
res
)
this
.
optionList
=
res
.
data
})
},
// 新增
handleAdd
()
{
this
.
$refs
.
exchangeDialogRef
.
openModal
()
},
// 删除
handleDelete
(
row
)
{
this
.
$modal
.
confirm
(
'
确认要删除商品名称为:
'
+
row
.
name
+
'
的数据吗?
'
).
then
(
function
()
{
return
delData
(
row
.
id
);
}).
then
(()
=>
{
this
.
$modal
.
msgSuccess
(
"
删除成功
"
);
this
.
getList
()
})
},
// 导出积分明细
handleExport
()
{
this
.
download
(
'
/bbs/points/exchange/export
'
,
{
...
this
.
queryParams
},
`积分明细_
${
new
Date
().
getTime
()}
.xlsx`
)
},
// 时间段选择
dateChange
(
val
)
{
if
(
val
)
{
this
.
queryParams
.
startTime
=
val
[
0
]
this
.
queryParams
.
endTime
=
val
[
1
]
}
},
// 查询
handleQuery
()
{
this
.
queryParams
.
pageNum
=
1
;
this
.
getList
()
},
// 重置
handleReset
()
{
this
.
queryParams
=
{
pageNum
:
1
,
pageSize
:
10
}
this
.
getList
()
}
}
}
</
script
>
<
style
lang=
"scss"
scoped
>
.app-container
{
background-color
:
rgba
(
241
,
242
,
247
,
1
);
height
:
calc
(
100vh
-
50px
);
.page-container
{
background-color
:
white
;
height
:
100%
;
border-radius
:
6px
;
padding
:
20px
30px
;
box-sizing
:
border-box
;
overflow
:
auto
;
}
}
</
style
>
\ No newline at end of file
safe-campus-bbs-ui/src/views/pointsExchange/index.vue
0 → 100644
View file @
819be043
<
template
>
<div
class=
"app-container"
>
<div
class=
"page-container"
>
<el-form
:model=
"queryParams"
:inline=
"true"
label-width=
"80px"
>
<el-form-item
label=
"兑换时间"
>
<el-date-picker
v-model=
"dateRange"
type=
"daterange"
start-placeholder=
"开始日期"
end-placeholder=
"结束日期"
style=
"width: 220px;"
value-format=
"YYYY-MM-DD"
@
change=
"dateChange"
></el-date-picker>
</el-form-item>
<el-form-item
label=
"兑换人"
>
<el-input
placeholder=
"请输入"
v-model=
"queryParams.userName"
style=
"width: 220px;"
></el-input>
</el-form-item>
<el-form-item
label=
"兑换商品"
>
<el-select
v-model=
"queryParams.goodsCode"
placeholder=
"请选择"
style=
"width: 220px;"
>
<el-option
v-for=
"(item, index) in optionList"
:label=
"item.name"
:value=
"item.code"
:key=
"index"
></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button
type=
"primary"
@
click=
"handleQuery"
>
查询
</el-button>
<el-button
@
click=
"handleReset"
>
重置
</el-button>
</el-form-item>
</el-form>
<el-row
class=
"mb10"
>
<el-col
:span=
"2"
>
<el-button
type=
"primary"
@
click=
"handleAdd"
>
积分兑换
</el-button>
</el-col>
<el-col
:span=
"2"
>
<el-button
type=
"primary"
plain
@
click=
"handleExport"
>
导出积分明细
</el-button>
</el-col>
</el-row>
<el-table
:data=
"tableList"
>
<el-table-column
label=
"序号"
width=
"55"
type=
"index"
align=
"center"
></el-table-column>
<el-table-column
label=
"兑换人"
prop=
"nikeName"
align=
"center"
></el-table-column>
<el-table-column
label=
"兑换商品"
align=
"center"
prop=
"goodsName"
></el-table-column>
<el-table-column
label=
"兑换积分"
prop=
"goodsExchangePoints"
align=
"center"
></el-table-column>
<el-table-column
label=
"兑换时间"
prop=
"createTime"
align=
"center"
></el-table-column>
<el-table-column
label=
"会员等级"
prop=
"userGradeName"
align=
"center"
></el-table-column>
<el-table-column
label=
"剩余积分"
prop=
"userRemainingPoints"
align=
"center"
></el-table-column>
<el-table-column
label=
"操作人"
prop=
"createBy"
align=
"center"
></el-table-column>
</el-table>
<pagination
v-show=
"total > 0"
:total=
"total"
:page.sync=
"queryParams.pageNum"
:limit.sync=
"queryParams.pageSize"
@
pagination=
"getList"
/>
</div>
<!-- 积分兑换 -->
<exchange-dialog
ref=
"exchangeDialogRef"
@
handleOk=
"handleReset"
></exchange-dialog>
</div>
</
template
>
<
script
>
import
{
listData
,
pointsExchange
}
from
'
@/api/pointsExchange
'
;
import
ExchangeDialog
from
'
../pointsManage/ExchangeDialog.vue
'
;
export
default
{
name
:
'
PointsExchange
'
,
data
()
{
return
{
queryParams
:
{
pageNum
:
1
,
pageSize
:
10
},
tableList
:
[],
total
:
0
,
dateRange
:
[],
optionList
:
[]
}
},
components
:
{
ExchangeDialog
},
created
()
{
},
mounted
()
{
this
.
getList
()
},
methods
:
{
// 列表数据
getList
()
{
listData
(
this
.
queryParams
).
then
(
res
=>
{
console
.
log
(
res
)
this
.
tableList
=
res
.
rows
;
this
.
total
=
res
.
total
})
},
// 兑换商品列表
getOptions
()
{
pointsExchange
().
then
(
res
=>
{
console
.
log
(
res
)
this
.
optionList
=
res
.
data
})
},
// 新增
handleAdd
()
{
this
.
$refs
.
exchangeDialogRef
.
openModal
()
},
// 删除
handleDelete
(
row
)
{
this
.
$modal
.
confirm
(
'
确认要删除商品名称为:
'
+
row
.
name
+
'
的数据吗?
'
).
then
(
function
()
{
return
delData
(
row
.
id
);
}).
then
(()
=>
{
this
.
$modal
.
msgSuccess
(
"
删除成功
"
);
this
.
getList
()
})
},
// 导出积分明细
handleExport
()
{
this
.
download
(
'
/bbs/points/exchange/export
'
,
{
...
this
.
queryParams
},
`积分明细_
${
new
Date
().
getTime
()}
.xlsx`
)
},
// 时间段选择
dateChange
(
val
){
if
(
val
){
this
.
queryParams
.
startTime
=
val
[
0
]
this
.
queryParams
.
endTime
=
val
[
1
]
}
},
// 查询
handleQuery
()
{
this
.
queryParams
.
pageNum
=
1
;
this
.
getList
()
},
// 重置
handleReset
()
{
this
.
queryParams
=
{
pageNum
:
1
,
pageSize
:
10
}
this
.
getList
()
}
}
}
</
script
>
<
style
lang=
"scss"
scoped
>
.app-container
{
background-color
:
rgba
(
241
,
242
,
247
,
1
);
height
:
calc
(
100vh
-
50px
);
.page-container
{
background-color
:
white
;
height
:
100%
;
border-radius
:
6px
;
padding
:
20px
30px
;
box-sizing
:
border-box
;
overflow
:
auto
;
}
}
</
style
>
\ No newline at end of file
safe-campus-bbs-ui/src/views/pointsManage/DetailDialog.vue
0 → 100644
View file @
819be043
<
template
>
<el-dialog
:visible.sync=
"visible"
title=
"兑换明细"
width=
"70%"
>
<el-table
:data=
"tableList"
v-loading=
"loading"
>
<el-table-column
type=
"index"
label=
"序号"
width=
"55"
align=
"center"
></el-table-column>
<el-table-column
label=
"明细名称"
prop=
"detailName"
align=
"center"
width=
"150"
></el-table-column>
<el-table-column
label=
"明细描述"
prop=
"description"
align=
"center"
></el-table-column>
<el-table-column
label=
"操作之前积分"
prop=
"beforePoints"
align=
"center"
width=
"130"
></el-table-column>
<el-table-column
label=
"操作之后积分"
prop=
"afterPoints"
align=
"center"
width=
"130"
></el-table-column>
<el-table-column
label=
"时间"
prop=
"createTime"
align=
"center"
width=
"150"
></el-table-column>
</el-table>
<pagination
v-show=
"total > 0"
:total=
"total"
:page.sync=
"queryParams.pageNum"
:limit.sync=
"queryParams.pageSize"
@
pagination=
"getDetailList"
/>
<template
#footer
>
<el-button
@
click=
"visible = false"
>
取消
</el-button>
</
template
>
</el-dialog>
</template>
<
script
>
import
{
detailData
}
from
'
@/api/pointsManage
'
export
default
{
data
()
{
return
{
visible
:
false
,
tableList
:
[],
total
:
0
,
queryParams
:
{
pageNum
:
1
,
pageSize
:
10
},
loading
:
false
}
},
methods
:
{
openModal
(
row
)
{
this
.
visible
=
true
;
this
.
queryParams
.
userName
=
row
.
userName
this
.
getDetailList
()
},
getDetailList
()
{
this
.
loading
=
true
;
detailData
(
this
.
queryParams
).
then
(
res
=>
{
this
.
tableList
=
res
.
rows
;
this
.
total
=
res
.
total
}).
finally
(()
=>
{
this
.
loading
=
false
;
})
}
}
}
</
script
>
\ No newline at end of file
safe-campus-bbs-ui/src/views/pointsManage/ExchangeDialog.vue
0 → 100644
View file @
819be043
<
template
>
<el-dialog
:visible.sync=
"visible"
v-if=
"visible"
title=
"积分兑换"
width=
"36%"
class=
"dialog"
@
close=
"handleClose"
>
<el-form
:model=
"form"
ref=
"formRef"
label-position=
"top"
:rules=
"rules"
>
<el-form-item
label=
"兑换人"
>
<el-select
placeholder=
"请选择"
style=
"width: 100%;"
v-model=
"form.userName"
@
change=
"handleUserChange"
>
<el-option
v-for=
"(item, index) in userList"
:key=
"index"
:value=
"item.userName"
:label=
"item.nikeName"
></el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"会员等级"
>
<el-input
v-model=
"form.gradeName"
:disabled=
"true"
placeholder=
"请输入"
></el-input>
</el-form-item>
<el-form-item
label=
"当前积分"
>
<el-input
v-model=
"form.currentPoints"
:disabled=
"true"
placeholder=
"请输入"
></el-input>
</el-form-item>
<el-form-item
label=
"兑换商品"
prop=
"goodsCode"
>
<el-select
placeholder=
"请选择"
style=
"width: 100%;"
v-model=
"form.goodsCode"
>
<el-option
v-for=
"(item, index) in optionList"
:label=
"item.name"
:value=
"item.code"
:key=
"index"
></el-option>
</el-select>
</el-form-item>
</el-form>
<template
#footer
>
<el-button
@
click=
"handleClose"
>
取消
</el-button>
<el-button
type=
"primary"
@
click=
"handleConfirm"
>
确定
</el-button>
</
template
>
</el-dialog>
</template>
<
script
>
import
{
pointsExchange
,
exchangeUser
,
exchange
}
from
'
@/api/pointsExchange
'
export
default
{
data
()
{
return
{
visible
:
false
,
form
:
{},
userList
:
[],
optionList
:
[],
rules
:
{
goodsCode
:
[{
required
:
true
,
message
:
'
请选择兑换商品
'
,
trigger
:
'
change
'
}]
},
disabled
:
false
}
},
methods
:
{
// 打开兑换窗口
openModal
(
row
)
{
this
.
visible
=
true
;
this
.
getUsers
(
row
)
this
.
getOptions
()
this
.
disabled
=
row
?
true
:
false
this
.
$nextTick
(()
=>
{
this
.
form
=
{
...
this
.
form
,
...
row
}
})
},
// 兑换人
getUsers
(
row
)
{
exchangeUser
().
then
(
res
=>
{
console
.
log
(
res
)
this
.
userList
=
res
.
data
;
if
(
row
&&
row
.
userName
)
{
res
.
data
.
forEach
((
item
)
=>
{
if
(
item
.
userName
==
row
.
userName
)
{
this
.
form
.
nikeName
=
item
.
nikeName
;
this
.
form
.
gradeName
=
item
.
gradeName
}
})
}
})
},
handleUserChange
(
val
)
{
this
.
userList
.
forEach
((
item
)
=>
{
if
(
item
.
userName
==
val
)
{
this
.
form
.
nikeName
=
item
.
nikeName
;
this
.
form
.
gradeName
=
item
.
gradeName
this
.
form
.
currentPoints
=
item
.
currentPoints
}
})
},
// 兑换商品列表
getOptions
()
{
pointsExchange
().
then
(
res
=>
{
console
.
log
(
res
)
this
.
optionList
=
res
.
data
})
},
handleConfirm
()
{
let
{
nikeName
,
userName
,
userGradeName
,
goodsCode
}
=
this
.
form
let
data
=
{
nikeName
,
userName
,
userGradeName
,
goodsCode
}
this
.
$refs
.
formRef
.
validate
((
valid
)
=>
{
if
(
valid
)
{
exchange
(
data
).
then
(
res
=>
{
if
(
res
.
code
==
200
)
{
this
.
$modal
.
msgSuccess
(
"
兑换成功
"
);
this
.
handleClose
()
this
.
$emit
(
'
handleOk
'
);
}
else
{
this
.
$modal
.
msgSuccess
(
res
.
msg
||
"
兑换失败
"
);
}
})
}
})
},
handleClose
()
{
this
.
form
=
{}
this
.
visible
=
false
}
}
}
</
script
>
<
style
lang=
"scss"
>
.dialog
{
.el-dialog__body
{
padding
:
0
20px
!
important
;
}
}
</
style
>
\ No newline at end of file
safe-campus-bbs-ui/src/views/pointsManage/index.vue
View file @
819be043
...
...
@@ -2,14 +2,8 @@
<div
class=
"app-container"
>
<div
class=
"page-container"
>
<el-form
:model=
"queryParams"
:inline=
"true"
label-width=
"80px"
>
<el-form-item
label=
"商品名称"
>
<el-input
v-model=
"queryParams.name"
placeholder=
"请输入"
style=
"width: 220px;"
></el-input>
</el-form-item>
<el-form-item
label=
"商品状态"
>
<el-select
v-model=
"queryParams.showStatus"
placeholder=
"请选择"
style=
"width: 220px;"
>
<el-option
label=
"已上架"
value=
"1"
></el-option>
<el-option
label=
"已下架"
value=
"0"
></el-option>
</el-select>
<el-form-item
label=
"姓名"
>
<el-input
v-model=
"queryParams.nikeName"
placeholder=
"请输入"
style=
"width: 220px;"
></el-input>
</el-form-item>
<el-form-item>
<el-button
type=
"primary"
@
click=
"handleQuery"
>
查询
</el-button>
...
...
@@ -18,48 +12,39 @@
</el-form>
<el-row
class=
"mb10"
>
<el-col
:span=
"2"
>
<el-button
type=
"primary"
@
click=
"handleAdd"
>
新增商品
</el-button>
<el-button
type=
"primary"
@
click=
"handleAdd"
>
积分规则设置
</el-button>
</el-col>
</el-row>
<el-table
:data=
"tableList"
>
<el-table-column
label=
"序号"
width=
"55"
type=
"index"
align=
"center"
></el-table-column>
<!--
<el-table-column
label=
"商品ID"
prop=
"name"
align=
"center"
></el-table-column>
-->
<el-table-column
label=
"商品名称"
prop=
"name"
align=
"center"
></el-table-column>
<el-table-column
label=
"商品图片"
align=
"center"
>
<template
#default
="
{ row }">
<el-image
:src=
"row.imgsUrl"
style=
"width: 40px;height: 40px;"
></el-image>
</
template
>
</el-table-column>
<el-table-column
label=
"商品状态"
prop=
"showStatus"
align=
"center"
>
<
template
#default
="{
row
}"
>
<span
v-if=
"row.showStatus == 0"
style=
"color:#FF645F ;"
>
已下架
</span>
<span
v-if=
"row.showStatus == 1"
style=
"color:#007BFF ;"
>
已上架
</span>
</
template
>
</el-table-column>
<el-table-column
label=
"兑换所需积分"
prop=
"exchangePoints"
align=
"center"
></el-table-column>
<el-table-column
label=
"商品参考价"
prop=
"salesPrice"
align=
"center"
></el-table-column>
<el-table-column
label=
"商品总数量"
prop=
"stockNum"
align=
"center"
></el-table-column>
<el-table-column
label=
"已兑换数量"
prop=
"salesNum"
align=
"center"
></el-table-column>
<el-table-column
label=
"姓名"
prop=
"nikeName"
align=
"center"
></el-table-column>
<el-table-column
label=
"帐号"
prop=
"userName"
align=
"center"
></el-table-column>
<el-table-column
label=
"部门"
prop=
"deptName"
align=
"center"
></el-table-column>
<el-table-column
label=
"总积分"
prop=
"accumulatedPoints"
align=
"center"
></el-table-column>
<el-table-column
label=
"可用积分"
prop=
"currentPoints"
align=
"center"
></el-table-column>
<el-table-column
label=
"操作"
align=
"center"
>
<template
#default
="
{ row }">
<el-button
type=
"text"
@
click=
"handleUpdate(row)"
>
修改
</el-button>
<el-button
type=
"text"
@
click=
"handleDelete(row)"
>
删除
</el-button>
<el-button
type=
"text"
@
click=
"handleAddPoints(row)"
>
增加
</el-button>
<el-button
type=
"text"
@
click=
"handleDecreasePoints(row)"
>
扣减
</el-button>
<el-button
type=
"text"
@
click=
"handleExchange(row)"
>
兑换
</el-button>
<el-button
type=
"text"
@
click=
"handleDetail(row)"
>
查看明细
</el-button>
</
template
>
</el-table-column>
</el-table>
<pagination
v-show=
"total > 0"
:total=
"total"
:page.sync=
"queryParams.pageNum"
:limit.sync=
"queryParams.pageSize"
@
pagination=
"getList"
/>
</div>
<!-- 积分兑换 -->
<exchange-dialog
ref=
"exchangeDialogRef"
@
handleOk=
"handleReset"
></exchange-dialog>
<!-- 积分明细 -->
<detail-dialog
ref=
"detailDialogRef"
></detail-dialog>
</div>
</template>
<
script
>
import
{
listData
,
delData
}
from
'
@/api/pointsManage
'
;
import
{
listData
,
delData
,
addData
,
editData
}
from
'
@/api/pointsManage
'
;
import
ExchangeDialog
from
'
./ExchangeDialog.vue
'
;
import
DetailDialog
from
'
./DetailDialog.vue
'
;
export
default
{
name
:
'
PointsMall
'
,
data
()
{
...
...
@@ -72,7 +57,10 @@ export default {
total
:
0
}
},
components
:
{
ExchangeDialog
,
DetailDialog
},
created
()
{
},
...
...
@@ -88,15 +76,66 @@ export default {
this
.
total
=
res
.
total
})
},
//
新增
//
积分规则设置
handleAdd
()
{
this
.
$refs
.
formDialogRef
.
openModal
()
},
// 修改
handleUpdate
(
row
)
{
this
.
$refs
.
formDialogRef
.
openModal
(
row
)
// 增加积分
handleAddPoints
(
row
)
{
this
.
$prompt
(
'
增加积分
'
,
'
提示
'
,
{
confirmButtonText
:
'
确定
'
,
cancelButtonText
:
'
取消
'
,
inputPattern
:
/^
[
1-9
]\d
*$/
,
inputErrorMessage
:
'
增加积分需大于0
'
}).
then
(({
value
})
=>
{
let
data
=
{
userName
:
row
.
userName
,
incrOrDecrPoints
:
value
}
addData
(
data
).
then
(
res
=>
{
if
(
res
.
code
==
200
)
{
this
.
$modal
.
msgSuccess
(
"
增加积分成功
"
);
this
.
getList
()
}
else
{
this
.
$modal
.
msgError
(
res
.
msg
||
"
增加积分失败
"
);
}
})
}).
catch
(()
=>
{
});
},
// 扣减积分
handleDecreasePoints
(
row
)
{
this
.
$prompt
(
'
扣减积分
'
,
'
提示
'
,
{
confirmButtonText
:
'
确定
'
,
cancelButtonText
:
'
取消
'
,
inputPattern
:
/^
[
1-9
]\d
*$/
,
inputErrorMessage
:
'
扣减积分需大于0
'
}).
then
(({
value
})
=>
{
let
data
=
{
userName
:
row
.
userName
,
incrOrDecrPoints
:
value
}
editData
(
data
).
then
(
res
=>
{
if
(
res
.
code
==
200
)
{
this
.
$modal
.
msgSuccess
(
"
扣减积分成功
"
);
this
.
getList
()
}
else
{
this
.
$modal
.
msgError
(
res
.
msg
||
"
扣减积分失败
"
);
}
})
}).
catch
(()
=>
{
});
},
// 兑换
handleExchange
(
row
)
{
this
.
$refs
.
exchangeDialogRef
.
openModal
(
row
)
},
// 积分明细
handleDetail
(
row
)
{
this
.
$refs
.
detailDialogRef
.
openModal
(
row
)
},
// 删除
handleDelete
(
row
)
{
this
.
$modal
.
confirm
(
'
确认要删除商品名称为:
'
+
row
.
name
+
'
的数据吗?
'
).
then
(
function
()
{
...
...
safe-campus-bbs-uniapp/App.vue
0 → 100644
View file @
819be043
<
script
>
export
default
{
onLaunch
:
function
()
{
console
.
log
(
'
App Launch
'
)
},
onShow
:
function
()
{
console
.
log
(
'
App Show
'
)
},
onHide
:
function
()
{
console
.
log
(
'
App Hide
'
)
}
}
</
script
>
<
style
>
/*每个页面公共css */
</
style
>
safe-campus-bbs-uniapp/config/index.config.js
0 → 100644
View file @
819be043
const
CONFIG
=
{
//开发环境配置
development
:
{
debug
:
true
,
platformName
:
'
一站式轻享
'
,
requestUrl
:
'
http://localhost:8080
'
,
},
//生产环境配置
production
:
{
debug
:
false
,
platformName
:
'
一站式轻享
'
,
requestUrl
:
'
http://dorm.tangguo.ren
'
}
}
export
default
CONFIG
[
process
.
env
.
NODE_ENV
];
safe-campus-bbs-uniapp/index.html
0 → 100644
View file @
819be043
<!DOCTYPE html>
<html
lang=
"zh-CN"
>
<head>
<meta
charset=
"UTF-8"
/>
<script>
var
coverSupport
=
'
CSS
'
in
window
&&
typeof
CSS
.
supports
===
'
function
'
&&
(
CSS
.
supports
(
'
top: env(a)
'
)
||
CSS
.
supports
(
'
top: constant(a)
'
))
document
.
write
(
'
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0
'
+
(
coverSupport
?
'
, viewport-fit=cover
'
:
''
)
+
'
" />
'
)
</script>
<title></title>
<!--preload-links-->
<!--app-context-->
</head>
<body>
<div
id=
"app"
>
<!--app-html-->
</div>
<script
type=
"module"
src=
"/main.js"
></script>
</body>
</html>
safe-campus-bbs-uniapp/main.js
0 → 100644
View file @
819be043
import
App
from
'
./App
'
// #ifndef VUE3
import
Vue
from
'
vue
'
import
'
./uni.promisify.adaptor
'
Vue
.
config
.
productionTip
=
false
App
.
mpType
=
'
app
'
const
app
=
new
Vue
({
...
App
})
app
.
$mount
()
// #endif
// #ifdef VUE3
import
{
createSSRApp
}
from
'
vue
'
export
function
createApp
()
{
const
app
=
createSSRApp
(
App
)
return
{
app
}
}
// #endif
\ No newline at end of file
safe-campus-bbs-uniapp/manifest.json
0 → 100644
View file @
819be043
{
"name"
:
"一站式轻享"
,
"appid"
:
"__UNI__E3457E1"
,
"description"
:
""
,
"versionName"
:
"1.0.0"
,
"versionCode"
:
"100"
,
"transformPx"
:
false
,
/*
5
+App特有相关
*/
"app-plus"
:
{
"usingComponents"
:
true
,
"nvueStyleCompiler"
:
"uni-app"
,
"compilerVersion"
:
3
,
"splashscreen"
:
{
"alwaysShowBeforeRender"
:
true
,
"waiting"
:
true
,
"autoclose"
:
true
,
"delay"
:
0
},
/*
模块配置
*/
"modules"
:
{},
/*
应用发布信息
*/
"distribute"
:
{
/*
android打包配置
*/
"android"
:
{
"permissions"
:
[
"<uses-permission android:name=
\"
android.permission.CHANGE_NETWORK_STATE
\"
/>"
,
"<uses-permission android:name=
\"
android.permission.MOUNT_UNMOUNT_FILESYSTEMS
\"
/>"
,
"<uses-permission android:name=
\"
android.permission.VIBRATE
\"
/>"
,
"<uses-permission android:name=
\"
android.permission.READ_LOGS
\"
/>"
,
"<uses-permission android:name=
\"
android.permission.ACCESS_WIFI_STATE
\"
/>"
,
"<uses-feature android:name=
\"
android.hardware.camera.autofocus
\"
/>"
,
"<uses-permission android:name=
\"
android.permission.ACCESS_NETWORK_STATE
\"
/>"
,
"<uses-permission android:name=
\"
android.permission.CAMERA
\"
/>"
,
"<uses-permission android:name=
\"
android.permission.GET_ACCOUNTS
\"
/>"
,
"<uses-permission android:name=
\"
android.permission.READ_PHONE_STATE
\"
/>"
,
"<uses-permission android:name=
\"
android.permission.CHANGE_WIFI_STATE
\"
/>"
,
"<uses-permission android:name=
\"
android.permission.WAKE_LOCK
\"
/>"
,
"<uses-permission android:name=
\"
android.permission.FLASHLIGHT
\"
/>"
,
"<uses-feature android:name=
\"
android.hardware.camera
\"
/>"
,
"<uses-permission android:name=
\"
android.permission.WRITE_SETTINGS
\"
/>"
]
},
/*
ios打包配置
*/
"ios"
:
{},
/*
SDK配置
*/
"sdkConfigs"
:
{}
}
},
/*
快应用特有相关
*/
"quickapp"
:
{},
/*
小程序特有相关
*/
"mp-weixin"
:
{
"appid"
:
""
,
"setting"
:
{
"urlCheck"
:
false
},
"usingComponents"
:
true
},
"mp-alipay"
:
{
"usingComponents"
:
true
},
"mp-baidu"
:
{
"usingComponents"
:
true
},
"mp-toutiao"
:
{
"usingComponents"
:
true
},
"uniStatistics"
:
{
"enable"
:
false
},
"vueVersion"
:
"3"
}
safe-campus-bbs-uniapp/pages.json
0 → 100644
View file @
819be043
{
"pages"
:
[
//pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
{
"path"
:
"pages/index/index"
,
"style"
:
{
"navigationBarTitleText"
:
"轻享"
}
},
{
"path"
:
"pages/topics/topics"
,
"style"
:
{
"navigationBarTitleText"
:
"话题"
}
},
{
"path"
:
"pages/mine/mine"
,
"style"
:
{
"navigationBarTitleText"
:
"我的"
}
}
],
"globalStyle"
:
{
"navigationBarTextStyle"
:
"black"
,
"navigationBarTitleText"
:
"一站式轻享"
,
"navigationBarBackgroundColor"
:
"#F8F8F8"
,
"backgroundColor"
:
"#F8F8F8"
,
"navigationStyle"
:
"custom"
},
"uniIdRouter"
:
{},
"tabBar"
:
{
"color"
:
"#999999"
,
"selectedColor"
:
"#007BFF"
,
"borderStyle"
:
"white"
,
"backgroundColor"
:
"#ffffff"
,
"height"
:
"60px"
,
"fontSize"
:
"14px"
,
"iconWidth"
:
"24px"
,
"spacing"
:
"3px"
,
"position"
:
"bottom"
,
"list"
:
[{
"pagePath"
:
"pages/index/index"
,
"iconPath"
:
"static/images/tabbar/home.png"
,
"selectedIconPath"
:
"static/images/tabbar/home-active.png"
,
"text"
:
"首页"
},
{
"pagePath"
:
"pages/topics/topics"
,
"iconPath"
:
"/static/images/tabbar/topic.png"
,
"selectedIconPath"
:
"/static/images/tabbar/topic-active.png"
,
"text"
:
"消息"
},
{
"pagePath"
:
"pages/mine/mine"
,
"iconPath"
:
"static/images/tabbar/mine.png"
,
"selectedIconPath"
:
"static/images/tabbar/mine-active.png"
,
"text"
:
"我的"
}]
}
}
safe-campus-bbs-uniapp/pages/index/index.vue
0 → 100644
View file @
819be043
<
template
>
<view
class=
"page-container"
>
</view>
</
template
>
<
script
>
export
default
{
data
()
{
return
{
}
},
onLoad
()
{
},
methods
:
{
}
}
</
script
>
<
style
lang=
"scss"
scoped
>
@import
'@/static/styles/index.scss'
</
style
>
safe-campus-bbs-uniapp/pages/mine/mine.vue
0 → 100644
View file @
819be043
<
template
>
<view>
</view>
</
template
>
<
script
>
export
default
{
data
()
{
return
{
}
},
methods
:
{
}
}
</
script
>
<
style
>
</
style
>
safe-campus-bbs-uniapp/pages/topics/topics.vue
0 → 100644
View file @
819be043
<
template
>
<view>
</view>
</
template
>
<
script
>
export
default
{
data
()
{
return
{
}
},
methods
:
{
}
}
</
script
>
<
style
>
</
style
>
safe-campus-bbs-uniapp/static/images/tabbar/home-active.png
0 → 100644
View file @
819be043
701 Bytes
safe-campus-bbs-uniapp/static/images/tabbar/home.png
0 → 100644
View file @
819be043
705 Bytes
safe-campus-bbs-uniapp/static/images/tabbar/mine-active.png
0 → 100644
View file @
819be043
987 Bytes
safe-campus-bbs-uniapp/static/images/tabbar/mine.png
0 → 100644
View file @
819be043
1013 Bytes
safe-campus-bbs-uniapp/static/images/tabbar/topic-active.png
0 → 100644
View file @
819be043
1.4 KB
safe-campus-bbs-uniapp/static/images/tabbar/topic.png
0 → 100644
View file @
819be043
1.47 KB
safe-campus-bbs-uniapp/static/logo.png
0 → 100644
View file @
819be043
3.93 KB
safe-campus-bbs-uniapp/static/styles/common.scss
0 → 100644
View file @
819be043
$color-main-blue
:
#007BFF
;
$common-width
:
94vw
;
@mixin
scroll-view-container
(
$height
)
{
height
:
$height
;
}
// 页面通用样式
.page-container
{
background-color
:
rgba
(
244
,
244
,
244
,
1
);
height
:
100vh
;
color
:
rgba
(
16
,
16
,
16
,
1
);
font-size
:
28rpx
;
font-family
:
Arial
;
}
// 话题容器样式
.topic-box-common
{
height
:
52rpx
;
padding
:
0
16rpx
;
background-color
:
rgba
(
0
,
123
,
255
,
0
.1
);
color
:
$color-main-blue
;
}
.search-box-common
{
height
:
76rpx
;
width
:
$common-width
;
background-color
:
white
;
margin
:
20rpx
auto
;
border-radius
:
12rpx
;
display
:
flex
;
align-items
:
center
;
padding
:
0
30rpx
;
box-sizing
:
border-box
;
.search-icon
{
width
:
36rpx
;
height
:
36rpx
;
margin-right
:
20rpx
;
}
}
safe-campus-bbs-uniapp/static/styles/index.scss
0 → 100644
View file @
819be043
@import
'common.scss'
;
\ No newline at end of file
safe-campus-bbs-uniapp/uni.promisify.adaptor.js
0 → 100644
View file @
819be043
uni
.
addInterceptor
({
returnValue
(
res
)
{
if
(
!
(
!!
res
&&
(
typeof
res
===
"
object
"
||
typeof
res
===
"
function
"
)
&&
typeof
res
.
then
===
"
function
"
))
{
return
res
;
}
return
new
Promise
((
resolve
,
reject
)
=>
{
res
.
then
((
res
)
=>
{
if
(
!
res
)
return
resolve
(
res
)
return
res
[
0
]
?
reject
(
res
[
0
])
:
resolve
(
res
[
1
])
});
});
},
});
\ No newline at end of file
safe-campus-bbs-uniapp/uni.scss
0 → 100644
View file @
819be043
/**
* 这里是uni-app内置的常用样式变量
*
* uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
* 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
*
*/
/**
* 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
*
* 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
*/
/* 颜色变量 */
/* 行为相关颜色 */
$uni-color-primary
:
#007aff
;
$uni-color-success
:
#4cd964
;
$uni-color-warning
:
#f0ad4e
;
$uni-color-error
:
#dd524d
;
/* 文字基本颜色 */
$uni-text-color
:
#333
;
//基本色
$uni-text-color-inverse
:
#fff
;
//反色
$uni-text-color-grey
:
#999
;
//辅助灰色,如加载更多的提示信息
$uni-text-color-placeholder
:
#808080
;
$uni-text-color-disable
:
#c0c0c0
;
/* 背景颜色 */
$uni-bg-color
:
#ffffff
;
$uni-bg-color-grey
:
#f8f8f8
;
$uni-bg-color-hover
:
#f1f1f1
;
//点击状态颜色
$uni-bg-color-mask
:
rgba
(
0
,
0
,
0
,
0
.4
);
//遮罩颜色
/* 边框颜色 */
$uni-border-color
:
#c8c7cc
;
/* 尺寸变量 */
/* 文字尺寸 */
$uni-font-size-sm
:
12px
;
$uni-font-size-base
:
14px
;
$uni-font-size-lg
:
16px
;
/* 图片尺寸 */
$uni-img-size-sm
:
20px
;
$uni-img-size-base
:
26px
;
$uni-img-size-lg
:
40px
;
/* Border Radius */
$uni-border-radius-sm
:
2px
;
$uni-border-radius-base
:
3px
;
$uni-border-radius-lg
:
6px
;
$uni-border-radius-circle
:
50%
;
/* 水平间距 */
$uni-spacing-row-sm
:
5px
;
$uni-spacing-row-base
:
10px
;
$uni-spacing-row-lg
:
15px
;
/* 垂直间距 */
$uni-spacing-col-sm
:
4px
;
$uni-spacing-col-base
:
8px
;
$uni-spacing-col-lg
:
12px
;
/* 透明度 */
$uni-opacity-disabled
:
0
.3
;
// 组件禁用态的透明度
/* 文章场景相关 */
$uni-color-title
:
#2C405A
;
// 文章标题颜色
$uni-font-size-title
:
20px
;
$uni-color-subtitle
:
#555555
;
// 二级标题颜色
$uni-font-size-subtitle
:
26px
;
$uni-color-paragraph
:
#3F536E
;
// 文章段落颜色
$uni-font-size-paragraph
:
15px
;
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment