先在mysql中创建一张用户表
CREATE TABLE `am8_user` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
`email` varchar(100) DEFAULT NULL,
`status` int(10) DEFAULT NULL COMMENT '-1:''删除'',0:''禁用'',1:''正常'',2:''待审核''',
`score` float(5,2) DEFAULT NULL,
`create_time` datetime DEFAULT NULL,
`update_time` datetime DEFAULT NULL,
`login_times` int(11) DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8
编写用户模型类
<?php
namespace app\mp_toutiao\model;
use think\Model;
class User extends Model {
public function getStatusTextAttr($value,$data)
{
$status = [-1=>'删除',0=>'禁用',1=>'正常',2=>'待审核'];
return $status[$data['status']];
}
}
编写控制器
<?php
namespace app\mp_toutiao\controller;
use app\mp_toutiao\model\User;
class Index {
public function getUserListForButton()
{
$list = User::filter(function($user) {
$user->status_text = '';
})->field('id,name,status')->select();
return mySuccessResponse($list);
}
public function getUserDetailForButton()
{
$list = User::where([
'id' => request()->param('id')
])->find();
return mySuccessResponse($list);
}
public function updateUserForButton()
{
User::update(['status' => request()->param('status')]
, ['id' => request()->param('id')]);
return mySuccessResponse();
}
public function deleteUserForButton()
{
User::destroy(request()->param('id'));
return mySuccessResponse();
}
}
其中getUserListForButton是获取用户列表方法,每个用户只获取id,name,status,status_text这4项。getUserDetailForButton是根据id获取该id所属用户的信息的方法。updateUserForButton是修改用户状态的方法。模型修改数据就save和update静态方法2种,这里用update方法。还有一个批量修改的方法saveAll。deleteUserForButton是根据id删除所属id的用户的方法。模型删除数据方法有2个,一个是delete,一个是静态方法destroy,这里用destroy。
在common.php文件中新增一个公用方法,封装一个成功时返回的固定数据格式的方法
function mySuccessResponse($data = [])
{
return json([
'code' => 1,
'sub_code' => 0,
'msg' => '',
'data' => $data
]);
}
uniapp项目中,在同一目录下新建button.vue和detail.vue2个文件
在button.vue中编写代码如下
<template>
<view>
<view class="user_item" v-for="(item, index) in list" :key="index">
<view class="content">{{ item.id }},{{item.name}},{{item.status_text}}</view>
<navigator :url="getDetailUrl(item.id)" hover-class="navigator-hover">
<button size="mini">详情</button>
</navigator>
<button size="mini" @click="delUser(item.id)">删除</button>
</view>
</view>
</template>
<script>
export default {
data() {
return {
list:[],
}
},
onShow()
{
this.initUserList();
},
methods: {
initUserList()
{
uni.request({
url:getApp().globalData.server_url+"index/getUserListForButton",
method:"GET",
success:(result) => {
console.log(result);
if (result.data.code === getApp().globalData.my_success_code) {
this.list = result.data.data;
} else {
if (result.data.code === getApp().globalData.my_fail_code) {
uni.showModal({
title: '错误',
content: result.data.msg, // 显示后端返回的错误信息
showCancel: false // 不显示取消按钮
});
}
}
}
,
fail:function(error){
console.log(error);
}
});
},
getDetailUrl(id)
{
return "detail?id=" + id;
},
delUser(id)
{
uni.request({
url:getApp().globalData.server_url+"index/deleteUserForButton",
method:"POST",
data:{
id:id,
},
success:(result) => {
console.log(result);
if (result.data.code === getApp().globalData.my_success_code) {
// this.list = result.data.data;
this.initUserList();
} else {
if (result.data.code === getApp().globalData.my_fail_code) {
uni.showModal({
title: '错误',
content: result.data.msg, // 显示后端返回的错误信息
showCancel: false // 不显示取消按钮
});
}
}
}
,
fail:function(error){
console.log(error);
}
});
}
},
}
</script>
<style>
.user_item{
display: flex;
}
.user_item .content{
width:300rpx;
}
</style>
在detail.vue中编写代码如下
<template>
<view>
<radio-group @change="radioChange">
<label class="radio_item">
<radio value="-1" :checked="init_index === -1" />
<view>删除</view>
</label>
<label class="radio_item">
<radio value="0" :checked="init_index === 0" />
<view>禁用</view>
</label>
<label class="radio_item">
<radio value="1" :checked="init_index === 1" />
<view>正常</view>
</label>
<label class="radio_item">
<radio value="2" :checked="init_index === 2" />
<view>待审核</view>
</label>
</radio-group>
<button size="mini" @click="submit">提交</button>
</view>
</template>
<script>
export default {
data() {
return {
init_index:9,
current_index:0,
detail_id:0,
}
},
onLoad(option)
{
console.log(option.id);
this.detail_id = option.id;
uni.request({
url:getApp().globalData.server_url+"index/getUserDetailForButton",
method:"GET",
data:{
id:option.id
},
success:(result) => {
console.log(result);
if (result.data.code === getApp().globalData.my_success_code) {
this.init_index = result.data.data.status;
} else {
if (result.data.code === getApp().globalData.my_fail_code) {
uni.showModal({
title: '错误',
content: result.data.msg, // 显示后端返回的错误信息
showCancel: false // 不显示取消按钮
});
}
}
}
,
fail:function(error){
console.log(error);
}
});
},
methods: {
radioChange: function(evt) {
// console.log(evt);
this.current_index = evt.detail.value;
},
submit(){
uni.request({
url:getApp().globalData.server_url+"index/updateUserForButton",
method:"POST",
data:{
id:this.detail_id,
status:this.current_index
},
success:(result) => {
console.log(result);
if (result.data.code === getApp().globalData.my_success_code) {
// this.list = result.data.data;
} else {
if (result.data.code === getApp().globalData.my_fail_code) {
uni.showModal({
title: '错误',
content: result.data.msg, // 显示后端返回的错误信息
showCancel: false // 不显示取消按钮
});
}
}
}
,
fail:function(error){
console.log(error);
}
});
}
}
}
</script>
<style>
.radio_item{
display: flex;
}
</style>
运行在H5中效果如下
运行在抖音小程序效果