From 2766b1b072cf38532b93baac7f7d7fbefb8df8ab Mon Sep 17 00:00:00 2001 From: guosheng <gs@bronet.cn> Date: Wed, 20 Nov 2019 15:02:34 +0800 Subject: [PATCH] 添加购物车 --- .idea/workspace.xml | 35 ++++++++++++++++++++--------------- application/api/controller/User.php | 128 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ public/api.html | 309 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 456 insertions(+), 16 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index ae67438..f5a2f51 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -2,8 +2,8 @@ <project version="4"> <component name="ChangeListManager"> <list default="true" id="e93f11c2-a7d9-4d35-8b1c-8dd18e7f5fef" name="Default" comment=""> - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" /> <change type="MODIFICATION" beforePath="$PROJECT_DIR$/application/api/controller/User.php" afterPath="$PROJECT_DIR$/application/api/controller/User.php" /> + <change type="MODIFICATION" beforePath="$PROJECT_DIR$/public/api.html" afterPath="$PROJECT_DIR$/public/api.html" /> </list> <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" /> <option name="TRACKING_ENABLED" value="true" /> @@ -17,8 +17,8 @@ <file leaf-file-name="User.php" pinned="false" current-in-tab="true"> <entry file="file://$PROJECT_DIR$/application/api/controller/User.php"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="561"> - <caret line="413" column="13" lean-forward="false" selection-start-line="413" selection-start-column="13" selection-end-line="413" selection-end-column="13" /> + <state relative-caret-position="115"> + <caret line="746" column="7" lean-forward="true" selection-start-line="746" selection-start-column="7" selection-end-line="746" selection-end-column="7" /> <folding> <element signature="e#38#68#0#PHP" expanded="true" /> <element signature="e#337#456#0#PHP" expanded="false" /> @@ -35,6 +35,7 @@ <element signature="e#9728#10430#0#PHP" expanded="false" /> <element signature="e#10435#11635#0#PHP" expanded="false" /> <element signature="e#11641#12325#0#PHP" expanded="false" /> + <element signature="e#12330#14120#0#PHP" expanded="false" /> <element signature="e#14126#14996#0#PHP" expanded="false" /> <element signature="e#15001#16814#0#PHP" expanded="false" /> <element signature="e#16820#17197#0#PHP" expanded="false" /> @@ -47,6 +48,8 @@ <element signature="e#19854#20045#0#PHP" expanded="false" /> <element signature="e#20051#20409#0#PHP" expanded="false" /> <element signature="e#20414#20604#0#PHP" expanded="false" /> + <element signature="e#20610#21753#0#PHP" expanded="false" /> + <element signature="e#21758#23735#0#PHP" expanded="false" /> </folding> </state> </provider> @@ -126,10 +129,10 @@ </component> <component name="PhpWorkspaceProjectConfiguration" backward_compatibility_performed="true" /> <component name="ProjectFrameBounds" extendedState="1"> - <option name="x" value="20" /> - <option name="y" value="76" /> - <option name="width" value="1883" /> - <option name="height" value="946" /> + <option name="x" value="127" /> + <option name="y" value="31" /> + <option name="width" value="1614" /> + <option name="height" value="977" /> </component> <component name="ProjectView"> <navigator currentView="ProjectPane" proportions="" version="1"> @@ -220,7 +223,7 @@ <workItem from="1574141466352" duration="745000" /> <workItem from="1574143209694" duration="3660000" /> <workItem from="1574146994475" duration="23222000" /> - <workItem from="1574209189943" duration="15167000" /> + <workItem from="1574209189943" duration="21191000" /> </task> <task id="LOCAL-00001" summary="调试"> <created>1574145133364</created> @@ -233,7 +236,7 @@ <servers /> </component> <component name="TimeTrackingManager"> - <option name="totallyTimeSpent" value="86742000" /> + <option name="totallyTimeSpent" value="92766000" /> </component> <component name="TodoView"> <todo-panel id="selected-file"> @@ -245,17 +248,16 @@ </todo-panel> </component> <component name="ToolWindowManager"> - <frame x="20" y="76" width="1883" height="946" extended-state="1" /> - <editor active="true" /> + <frame x="127" y="31" width="1614" height="977" extended-state="1" /> <layout> - <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.15743281" sideWeight="0.5" order="1" side_tool="false" content_ui="combo" /> + <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.15743281" sideWeight="0.5" order="1" side_tool="false" content_ui="combo" /> <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32912987" sideWeight="0.5" order="9" side_tool="false" content_ui="tabs" /> <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="true" content_ui="tabs" /> <window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" /> <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" /> <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" /> <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" /> - <window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.38442522" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" /> + <window_info id="Terminal" active="true" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.3809524" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" /> <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="true" content_ui="tabs" /> <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" /> <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" /> @@ -677,8 +679,8 @@ </entry> <entry file="file://$PROJECT_DIR$/application/api/controller/User.php"> <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="561"> - <caret line="413" column="13" lean-forward="false" selection-start-line="413" selection-start-column="13" selection-end-line="413" selection-end-column="13" /> + <state relative-caret-position="115"> + <caret line="746" column="7" lean-forward="true" selection-start-line="746" selection-start-column="7" selection-end-line="746" selection-end-column="7" /> <folding> <element signature="e#38#68#0#PHP" expanded="true" /> <element signature="e#337#456#0#PHP" expanded="false" /> @@ -695,6 +697,7 @@ <element signature="e#9728#10430#0#PHP" expanded="false" /> <element signature="e#10435#11635#0#PHP" expanded="false" /> <element signature="e#11641#12325#0#PHP" expanded="false" /> + <element signature="e#12330#14120#0#PHP" expanded="false" /> <element signature="e#14126#14996#0#PHP" expanded="false" /> <element signature="e#15001#16814#0#PHP" expanded="false" /> <element signature="e#16820#17197#0#PHP" expanded="false" /> @@ -707,6 +710,8 @@ <element signature="e#19854#20045#0#PHP" expanded="false" /> <element signature="e#20051#20409#0#PHP" expanded="false" /> <element signature="e#20414#20604#0#PHP" expanded="false" /> + <element signature="e#20610#21753#0#PHP" expanded="false" /> + <element signature="e#21758#23735#0#PHP" expanded="false" /> </folding> </state> </provider> diff --git a/application/api/controller/User.php b/application/api/controller/User.php index 2f67906..7c19cac 100644 --- a/application/api/controller/User.php +++ b/application/api/controller/User.php @@ -641,4 +641,132 @@ class User extends Api $this->success('SUCCESS',$data); } + /** + * @ApiTitle (购物车列表) + * @ApiSummary (购物车列表) + * @ApiMethod (POST) + * @ApiRoute (/api/user/car) + * @ApiHeaders (name=token, type=string, required=true, description="请求的Token") + * + * @ApiReturn({ + "code": 1, + "msg": "成功", + "time": "1571492001", + "data": { + "id"://购物车ID + "user_id"://用户ID + "pic_id"://图片的ID + "video_id"://视频的ID + "pic":[ + "id"://图片ID + "title"://图片标题 + "thumbnail"://缩略图 + "url"://高清百度云盘地址 + "price"://普通价格 + "vip_price"://vip价格 + ], + "video":[ + "id"://视频ID + "title"://视频标题 + "thumbnail"://视频封面图片 + "video"://视频地址 + "two_url"://2K视频云盘地址 + "four_url"://4k视频云盘地址 + "eight_url"://8k视频云盘地址 + "price"://2k视频原价格 + "four_price"://4k视频原价格 + "eight_price"://8k视频原价格 + "vip_price"://2k会员价格 + "four_vipprice"://4k会员价格 + "eight_vipprice"://8k会员价格 + ] + } + }) + */ + public function car() + { + $user_id = $this->uid; + + //查询该用户是否为会员 + $res = Db::name('user') + ->where('id',$user_id) + ->field('id,is_vip') + ->find(); + //判断 + if($res['is_vip'] == 0){ + //不是的情况 + $data = Db::name('car') + ->where('user_id',$user_id) + ->field('id,user_id,pic_id,video_id') + ->order('id desc') + ->select(); + foreach ($data as &$v){ + $v['pic'] = Db::name('pic')->field('id,title,thumbnail,url,price')->whereIn('id',explode(',',$v['pic_id']))->select(); + $v['video'] = Db::name('video')->field('id,title,thumbnail,video,two_url,four_url,eight_url,price,four_price,eight_price')->whereIn('id',explode(',',$v['video_id']))->select(); + } + $this->success('SUCCESS',$data); + }else{ + //是的情况 + $data = Db::name('car') + ->where('user_id',$user_id) + ->field('id,user_id,pic_id,video_id') + ->order('id desc') + ->select(); + foreach ($data as &$v){ + $v['pic'] = Db::name('pic')->field('id,title,thumbnail,url,price')->whereIn('id',explode(',',$v['pic_id']))->select(); + foreach ($v['pic'] as &$val){ + $val['vip_price'] = $val['price']*0.75; + } + $v['video'] = Db::name('video')->field('id,title,thumbnail,video,two_url,four_url,eight_url,price,four_price,eight_price')->whereIn('id',explode(',',$v['video_id']))->select(); + foreach ($v['video'] as &$v_video){ + $v_video['vip_price'] = $v_video['price']*0.75; + $v_video['four_vipprice'] = $v_video['four_price']*0.75; + $v_video['eight_vipprice'] = $v_video['eight_price']*0.75; + } + } + $this->success('SUCCESS',$data); + + } + } + + /** + * @ApiTitle (加入购物车) + * @ApiSummary (加入购物车) + * @ApiMethod (POST) + * @ApiRoute (/api/user/addcar) + * @ApiHeaders (name=token, type=string, required=true, description="请求的Token") + * + * @ApiParams (name="pic_id", type="inter", required=false, description="图片ID") + * @ApiParams (name="video_id", type="inter", required=false, description="视频ID") + * + * @ApiReturn({ + "code": 1, + "msg": "成功", + "time": "1571492001", + }) + */ + public function addcar() + { + $user_id = $this->uid; + $pic_id = $this->request->param('pic_id'); + $video_id = $this->request->param('video_id'); + + $data = Db::name('car') + ->where('user_id',$user_id) + ->find(); + $param['pic_id'] = array_push(explode(',',$data['pic_id']),$pic_id); + $param['video_id'] = array_push(explode(',',$data['video_id']),$video_id); + $param['createtime'] = time(); + $param['updatetime'] = time(); + $data = Db::name('car') + ->where('user_id',$user_id) + ->update($param); + if($data){ + $this->success('SUCCESS'); + }else{ + $this->error(['code'=>2,'msg'=>'sql执行失败']); + } + + } + } diff --git a/public/api.html b/public/api.html index 8d8536c..8db8ba1 100644 --- a/public/api.html +++ b/public/api.html @@ -170,6 +170,8 @@ <a href="javascript:;" data-id="17" class="list-group-item">创建充值订单</a> <a href="javascript:;" data-id="18" class="list-group-item">会员介绍</a> <a href="javascript:;" data-id="19" class="list-group-item">会员须知</a> + <a href="javascript:;" data-id="20" class="list-group-item">购物车列表</a> + <a href="javascript:;" data-id="21" class="list-group-item">加入购物车</a> </div> </div> </div> @@ -2803,13 +2805,318 @@ </div> </div> </div> + <div class="panel panel-default"> + <div class="panel-heading" id="heading-20"> + <h4 class="panel-title"> + <span class="label label-primary">POST</span> + <a data-toggle="collapse" data-parent="#accordion20" href="#collapseOne20"> 购物车列表 <span class="text-muted">/api/user/car</span></a> + </h4> + </div> + <div id="collapseOne20" class="panel-collapse collapse"> + <div class="panel-body"> + + <!-- Nav tabs --> + <ul class="nav nav-tabs" id="doctab20"> + <li class="active"><a href="#info20" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox20" data-toggle="tab">在线测试</a></li> + <li><a href="#sample20" data-toggle="tab">返回示例</a></li> + </ul> + + <!-- Tab panes --> + <div class="tab-content"> + + <div class="tab-pane active" id="info20"> + <div class="well"> + 购物车列表 </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>token</td> + <td>string</td> + <td>是</td> + <td>请求的Token</td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>正文</strong></div> + <div class="panel-body"> + 无 </div> + </div> + </div><!-- #info --> + + <div class="tab-pane" id="sandbox20"> + <div class="row"> + <div class="col-md-12"> + <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + <div class="headers"> + <div class="form-group"> + <label class="control-label" for="token">token</label> + <input type="string" class="form-control input-sm" id="token" required placeholder="请求的Token - Ex: " name="token"> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/car" method="POST" name="form20" id="form20"> + <div class="form-group"> + 无 + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="20">提交</button> + <button type="reset" class="btn btn-info" rel="20">重置</button> + </div> + </form> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>响应输出</strong></div> + <div class="panel-body"> + <div class="row"> + <div class="col-md-12" style="overflow-x:auto"> + <pre id="response_headers20"></pre> + <pre id="response20"></pre> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>返回参数</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + </div> + </div> + </div><!-- #sandbox --> + + <div class="tab-pane" id="sample20"> + <div class="row"> + <div class="col-md-12"> + <pre id="sample_response20">{ + "code": 1, + "msg": "成功", + "time": "1571492001", + "data": { + "id"://购物车ID + "user_id"://用户ID + "pic_id"://图片的ID + "video_id"://视频的ID + "pic":[ + "id"://图片ID + "title"://图片标题 + "thumbnail"://缩略图 + "url"://高清百度云盘地址 + "price"://普通价格 + "vip_price"://vip价格 + ], + "video":[ + "id"://视频ID + "title"://视频标题 + "thumbnail"://视频封面图片 + "video"://视频地址 + "two_url"://2K视频云盘地址 + "four_url"://4k视频云盘地址 + "eight_url"://8k视频云盘地址 + "price"://2k视频原价格 + "four_price"://4k视频原价格 + "eight_price"://8k视频原价格 + "vip_price"://2k会员价格 + "four_vipprice"://4k会员价格 + "eight_vipprice"://8k会员价格 + ] + } + }</pre> + </div> + </div> + </div><!-- #sample --> + + </div><!-- .tab-content --> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading" id="heading-21"> + <h4 class="panel-title"> + <span class="label label-primary">POST</span> + <a data-toggle="collapse" data-parent="#accordion21" href="#collapseOne21"> 加入购物车 <span class="text-muted">/api/user/addcar</span></a> + </h4> + </div> + <div id="collapseOne21" class="panel-collapse collapse"> + <div class="panel-body"> + + <!-- Nav tabs --> + <ul class="nav nav-tabs" id="doctab21"> + <li class="active"><a href="#info21" data-toggle="tab">基础信息</a></li> + <li><a href="#sandbox21" data-toggle="tab">在线测试</a></li> + <li><a href="#sample21" data-toggle="tab">返回示例</a></li> + </ul> + + <!-- Tab panes --> + <div class="tab-content"> + + <div class="tab-pane active" id="info21"> + <div class="well"> + 加入购物车 </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>token</td> + <td>string</td> + <td>是</td> + <td>请求的Token</td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <table class="table table-hover"> + <thead> + <tr> + <th>名称</th> + <th>类型</th> + <th>必选</th> + <th>描述</th> + </tr> + </thead> + <tbody> + <tr> + <td>pic_id</td> + <td>inter</td> + <td>否</td> + <td>图片ID</td> + </tr> + <tr> + <td>video_id</td> + <td>inter</td> + <td>否</td> + <td>视频ID</td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>正文</strong></div> + <div class="panel-body"> + 无 </div> + </div> + </div><!-- #info --> + + <div class="tab-pane" id="sandbox21"> + <div class="row"> + <div class="col-md-12"> + <div class="panel panel-default"> + <div class="panel-heading"><strong>Headers</strong></div> + <div class="panel-body"> + <div class="headers"> + <div class="form-group"> + <label class="control-label" for="token">token</label> + <input type="string" class="form-control input-sm" id="token" required placeholder="请求的Token - Ex: " name="token"> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>参数</strong></div> + <div class="panel-body"> + <form enctype="application/x-www-form-urlencoded" role="form" action="/api/user/addcar" method="POST" name="form21" id="form21"> + <div class="form-group"> + <label class="control-label" for="pic_id">pic_id</label> + <input type="inter" class="form-control input-sm" id="pic_id" placeholder="图片ID" name="pic_id"> + </div> + <div class="form-group"> + <label class="control-label" for="video_id">video_id</label> + <input type="inter" class="form-control input-sm" id="video_id" placeholder="视频ID" name="video_id"> + </div> + <div class="form-group"> + <button type="submit" class="btn btn-success send" rel="21">提交</button> + <button type="reset" class="btn btn-info" rel="21">重置</button> + </div> + </form> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>响应输出</strong></div> + <div class="panel-body"> + <div class="row"> + <div class="col-md-12" style="overflow-x:auto"> + <pre id="response_headers21"></pre> + <pre id="response21"></pre> + </div> + </div> + </div> + </div> + <div class="panel panel-default"> + <div class="panel-heading"><strong>返回参数</strong></div> + <div class="panel-body"> + 无 + </div> + </div> + </div> + </div> + </div><!-- #sandbox --> + + <div class="tab-pane" id="sample21"> + <div class="row"> + <div class="col-md-12"> + <pre id="sample_response21">{ + "code": 1, + "msg": "成功", + "time": "1571492001", + }</pre> + </div> + </div> + </div><!-- #sample --> + + </div><!-- .tab-content --> + </div> + </div> + </div> </div> <hr> <div class="row mt0 footer"> <div class="col-md-6" align="left"> - Generated on 2019-11-20 13:17:47 </div> + Generated on 2019-11-20 15:02:18 </div> <div class="col-md-6" align="right"> <a href="https://www.fastadmin.net" target="_blank">FastAdmin</a> </div> -- libgit2 0.24.0