表字段 user
评论表
商品表
订单表
wxml页面
<!--index.wxml-->
<view class="swiper-tab">
<view class="swiper-tab-list {{currentTab==0 ? 'on' : ''}}" data-current="0" bindtap="swichNav">全部</view>
<view class="swiper-tab-list {{currentTab==1 ? 'on' : ''}}" data-current="1" bindtap="swichNav">待付款</view>
<view class="swiper-tab-list {{currentTab==2 ? 'on' : ''}}" data-current="2" bindtap="swichNav">代收货</view>
<view class="swiper-tab-list {{currentTab==3 ? 'on' : ''}}" data-current="3" bindtap="swichNav">代退款</view>
<view class="swiper-tab-list {{currentTab==4 ? 'on' : ''}}" data-current="4" bindtap="swichNav">代评价</view>
</view>
<swiper current="{{currentTab}}" class="swiper-box" duration="300" style="height:{{winHeight - 31}}px" bindchange="bindChange">
<!-- 我是哈哈 -->
<swiper-item>
<l-card type="cover" wx:for="{{list}}" wx:key="item"
image="{{item.image}}"
>
<view class="content">
{{item.price}}{{item.name}}
<navigator url="/pages/place/place?id={{item.id}}"><button>{{item.state}}</button></navigator>
</view>
</l-card>
</swiper-item>
<!-- 我是呵呵 -->
<swiper-item>
<view>我是呵呵</view>
</swiper-item>
<!-- 我是嘿嘿 -->
<swiper-item>
<view>我是嘿嘿</view>
</swiper-item>
<swiper-item>
<view>待退款</view>
</swiper-item>
<swiper-item>
<l-card type="cover" wx:for="{{text}}" wx:key="key"
image="{{item.image}}"
title="{{item.name}}">
<view class="content">
{{item.price}}
<navigator url="/pages/evaluate/evaluate?id={{item.id}}"><button>评价</button></navigator>
</view>
</l-card>
</swiper-item>
</swiper>
swiper-item 微信小程序开发之选项卡(窗口顶部TabBar)页面切换_dzp_coder-CSDN博客_微信小程序选项卡页面切换
js事件
wx.request({
url: 'http://www.test.com/api/commodity_index',
method:"POST",
success :res=>{
console.log(res.data.data)
this.setData({
list:res.data.data
})
}
})
wx.request({
url: 'http://www.test.com/api/commodity_state',
success :res=>{
console.log(res.data.data.data)
this.setData({
text:res.data.data.data
})
}
})
public function commodityIndex()
{
$data=CommodityList::select();
if($data){
return json(['code'=>200,'msg'=>'查询成功','data'=>$data]);
}else{
return json(['code'=>400,'msg'=>'查询失败','data'=>'']);
}
}
//查询未评价订单
public function commodityState()
{
$data=CommodityList::where('state','未评价')->paginate('2');
if($data){
return json(['code'=>200,'msg'=>'查询成功','data'=>$data]);
}else{
return json(['code'=>400,'msg'=>'查询成功','data'=>'']);
}
}
未付款页面 place
<l-countdown time-type="second" time-type='{{list.int}}' />
<view>订单号:{{list.order_number}}</view>
<view>状态:{{list.state}}</view>
<view>创建时间:{{list.time}}</view>
<button open-type="contact">联系卖家</button>
let id=options.id;
console.log(id)
wx.request({
url: 'http://www.test.com/api/commodity_find?id='+id,
success :res=>{
let now_time = Math.round(new Date().getTime() / 1000).toString();
let expire_time = res.data.data.time;
console.log(res.data.data)
this.setData({
list:res.data.data
})
if(expire_time > 0){
this.setData({
btn_disable:true
})
}
}
})
php代码
public function commodityFind(Request $request)
{
$id=$request->get('id');
$data=CommodityList::find($id);
if (empty($id)){
return json(['code'=>2000,'data'=>'','msg'=>'用户不存在']);
}
$order_number=strtotime(date('Y-m-d')).md5(md5("date().$request->uid"));
$result=Order::create([
'order_number'=>$order_number,
'time'=>date('Y-m-d H:i:s'),
]);
$info=Order::find($id);
//倒计时计算
if (time()-intval($info["create_time"])>(30*60)){
$res["int"]=0;
}elseif (time()-intval($info["create_time"])<(30*60)&&time()-intval($info["create_time"])>0){
$res["int"]=(30*60)-(time()-intval($info["create_time"]));
}else{
$res["int"]=0;
}
if ($result){
return json(['code'=>200,'data'=>$info,'msg'=>'ok']);
}
return json(['code'=>2005,'data'=>'','msg'=>'转账失败']);
}
评价页面
<l-card type="cover"
image="{{text.image}}"
title="{{text.name}}">
<view class="content">
{{text.price}}
</view>
</l-card>
<view>评论功能</view>
<l-image-picker count="9" bind:linchange="onChangeTap" />
<form bindsubmit="formAdd" >
<!-- <l-input label="评论" placeholder="请输入评论人" name="name" bind:lininput="name" /> -->
<l-input label="评论内容" placeholder="请输入评论" name="text" bind:lininput="text" />
<button type="default" form-type="submit">添加</button>
</form>
<l-card type="avatar" l-class="card" wx:for="{{ahao}}" image="https://gimg2.baidu.com/image_search/src=http%3A%2F%2Finews.gtimg.com%2Fnewsapp_bt%2F0%2F13926601261%2F641&refer=http%3A%2F%2Finews.gtimg.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1632831780&t=d525af5d97621d669d549ea46b445e7e"
title="李牛子" describe="两分钟前">
<!-- 此处为content -->
<view class="avter-content">
{{item.text}}
卖家评论:
<form bindsubmit="formAdd" >
<!-- <l-input label="评论" placeholder="请输入评论人" name="name" bind:lininput="name" /> -->
<l-input label="评论内容" placeholder="请输入评论" name="text" bind:lininput="text" />
<button type="default" form-type="submit">发布</button>
</form>
</view>
<view class="avter-share-container">
</view>
<l-tag shape="circle"
bg-color="#f3f3f3"
font-color="#3963BC"
slot="more"
size="large">
+ 关注
</l-tag>
</l-card>
json样式
"l-card":"/miniprogram_npm/lin-ui/card",
"l-tag":"/miniprogram_npm/lin-ui/tag",
"l-input":"/miniprogram_npm/lin-ui/input",
"l-image-picker":"/miniprogram_npm/lin-ui/image-picker"
// pages/mysfind/mysfind.js
Page({
/**
* 页面的初始数据
*/
data: {
comment:[],
text:[],
ahao:[]
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
let id=options.id;
wx.request({
url: 'http://www.test.com/api/find?id='+id,
success :res=>{
console.log(res)
this.setData({
text:res.data.data
})
}
})
wx.request({
url: 'http://www.test.com/api/county_select',
method:"POST",
success :res=>{
console.log(res)
this.setData({
ahao:res.data.data
})
}
})
},
formAdd:function(e){
console.log(e.detail.value.name)
let name=e.detail.value.name
let text=e.detail.value.text
wx.request({
url: 'http://www.test.com/api/content_audit',
method:"POST",
data:{
name:name,
text:text
},
success:res=>{
let msg= res.data.msg
if(msg=="添加成功"){
this.setData({
show:1,
error:'1'
})
}
}
})
},
//文件上传之后的方法
onChangeTap(event) {
//获取最新上传的所有图片临时路径
let tempFilePaths = event.detail.current;
//定义一个空数组,进行存放上传图片url
var urlArr = [];
for (let index = 0; index < tempFilePaths.length; index++) {
wx.uploadFile({
url: 'http://www.test.com/api/image_audit', //仅为示例,非真实的接口地址
filePath: tempFilePaths[index],
name: 'file',
success: res => {
const data = JSON.parse(res.data);
//do something
urlArr.push(data.url)
this.setData({
urls: urlArr
})
}
})
}
},
})
public function find(Request $request)
{
$id=$request->get('id');
$data=CommodityList::find($id);
if($data){
return json(['code'=>'200','msg'=>'查询成功','data'=>$data]);
}else{
return json(['code'=>'400','msg'=>'查询失败','data'=>'']);
}
}
public function CountyInsert(Request $request)
{
$info=$request->post('');
$data=Comment::create($info);
if($data){
return json(['code'=>'200','msg'=>'添加成功','data'=>$data]);
}else{
return json(['code'=>'400','msg'=>'添加失败','data'=>'']);
}
}
public function countySelect()
{
$data=Comment::select();
if($data){
return json(['code'=>'200','msg'=>'查询成功','data'=>$data]);
}else{
return json(['code'=>'400','msg'=>'查询失败','data'=>'']);
}
}
内容验证
<?php
namespace app\api\controller;
use app\api\model\Comment;
use app\Request;
use app\api\server\Oss as OssServer;
class Audit
{
/**
* @param Request $request
* 内容审核
*/
public function contentAudit(Request $request)
{
$content = $request->post('text');
$token = $this->getAccessToken('mr5GSx453SUGD64OId9zojDE', 'tcAQfPdjo4v1VwoHLBEwtMBVzrebG3GS');
$url = 'https://aip.baidubce.com/rest/2.0/solution/v1/text_censor/v2/user_defined?access_token=' . $token;
$bodys = array(
'text' => $content
);
$res = $this->curlPost($url, $bodys);
//结果转成数组
$res = json_decode($res, true);
//根据自己的业务逻辑进行处理
print_r($res);
$data=Comment::create($res);
if($data){
return json(['code'=>'200','msg'=>'添加成功','data'=>$data]);
}else{
return json(['code'=>'400','msg'=>'添加失败','data'=>'']);
}
}
/**
* 图片审核
*/
public function imageAudit()
{
$filePath = $_FILES['file']['tmp_name'];
$token = $this->getAccessToken('mr5GSx453SUGD64OId9zojDE', 'tcAQfPdjo4v1VwoHLBEwtMBVzrebG3GS');
$url = 'https://aip.baidubce.com/rest/2.0/solution/v1/img_censor/v2/user_defined?access_token=' . $token;
$img = file_get_contents($filePath);
$text="123455";
$img = base64_encode($img);
$bodys = array(
'image' => $img,
'text'=>$text
);
$res = $this->curlPost($url, $bodys);
//结果转成数组
$res = json_encode($res, true);
//根据自己的业务逻辑进行处理
print_r($res);
$fileName = (new OssServer())->uploadFile($filePath);
return json(['error_code'=>0,'data'=>$fileName,'msg'=>'操作成功']);
}
/**
* CURL的Post请求方法
* @param string $url
* @param string $param
* @return bool|string
*/
function curlPost($url = '', $param = '')
{
if (empty($url) || empty($param)) {
return false;
}
$postUrl = $url;
$curlPost = $param;
// 初始化curl
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $postUrl);
curl_setopt($curl, CURLOPT_HEADER, 0);
// 要求结果为字符串且输出到屏幕上
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
// post提交方式
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $curlPost);
// 运行curl
$data = curl_exec($curl);
curl_close($curl);
return $data;
}
/**
* 获取百度开放平台的票据
* 参考链接:https://ai.baidu.com/ai-doc/REFERENCE/Ck3dwjhhu
*/
public function getAccessToken($ApiKey = '', $SecretKey = '', $grantType = 'client_credentials')
{
$url = 'https://aip.baidubce.com/oauth/2.0/token';
$post_data['grant_type'] = $grantType;
$post_data['client_id'] = $ApiKey;
$post_data['client_secret'] = $SecretKey;
$o = "";
foreach ($post_data as $k => $v) {
$o .= "$k=" . urlencode($v) . "&";
}
$post_data = substr($o, 0, -1);
$res = $this->curlPost($url, $post_data);
//进行把返回结果转成数组
$res = json_decode($res, true);
if (isset($res['error'])) {
exit('API Key或者Secret Key不正确');
}
$accessToken = $res['access_token'];
return $accessToken;
}
}