index.blade.php 55 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991
  1. @extends('layouts.base')
  2. @section('title', "订单列表")
  3. @section('content')
  4. <link rel="stylesheet" href="{{resource_get('plugins/store-cashier/src/common/static/index.css')}}">
  5. <style>
  6. .edit-i{display:none;}
  7. .el-table_1_column_2:hover .edit-i{font-weight:900;padding:0;margin:0;display:inline-block;}
  8. .el-tabs__item,.is-top{font-size:16px}
  9. .el-tabs__active-bar { height: 3px;}
  10. .list-title{display:flex;width:100%;background:#f9f9f9;padding:15px 10px;font-weight:900;border:1px solid #e9e9e9;}
  11. .list-title .list-title-1{display:flex;align-items:center;justify-content: center;}
  12. .list-info{display:flex ;padding: 10px;justify-content: left;background:#f9f9f9;}
  13. .list-con{display:flex;width:100%;font-size:12px;font-weight:500;align-items: stretch;border-bottom: 1px solid rgb(233, 233, 233);}
  14. .list-con-goods{display:flex;align-items:center;justify-content: center;box-sizing:border-box;padding-left:10px;border-top:1px solid #e9e9e9;min-height:90px}
  15. .list-con-goods-text{min-height:70px;overflow:hidden;flex:1;display: flex;flex-direction: column;justify-content: space-between;}
  16. .list-con-goods-price{border-right:1px solid #e9e9e9;border-left:1px solid #e9e9e9;min-width:150px;min-height:90px;text-align: left;padding:20px;display: flex;flex-direction: column;}
  17. .list-con-goods-title{font-size:14px;line-height:20px;text-overflow: -o-ellipsis-lastline;overflow: hidden;text-overflow: ellipsis;display: -webkit-box;-webkit-line-clamp: 2;line-clamp: 2;-webkit-box-orient: vertical;}
  18. .list-con-goods-option{font-size:12px;color:#999}
  19. .list-con-member-info{display:flex;padding:0 2px;flex-direction: column;flex:1;min-width: 120px;line-height:28px;justify-content: center;text-align:left;font-size:14px;border-top:1px solid #e9e9e9;border-right:1px solid #e9e9e9;}
  20. .list-member{padding: 10px;font-size: 12px;font-weight: 500;}
  21. .list-num{flex:3;display:flex;align-items:center;border-right:1px solid #e9e9e9;justify-content: center;}
  22. .list-gen{display:flex;align-items:center;justify-content: center;line-height:28px;}
  23. .list-gen-txt{flex:1;border-right:1px solid #e9e9e9;border-bottom:1px solid #e9e9e9;align-items:center;justify-content: center;display:flex;}
  24. .list-opt{flex:1;display:flex;align-items:center;border-left:1px solid #e9e9e9;justify-content: center;}
  25. /* 导航 */
  26. .el-radio-button .el-radio-button__inner,.el-radio-button:first-child .el-radio-button__inner {border-radius: 4px 4px 4px 4px;border-left: 0px;}
  27. .el-radio-button__inner{border:0;}
  28. .el-radio-button:last-child .el-radio-button__inner {border-radius: 4px 4px 4px 4px;}
  29. </style>
  30. <div class="all">
  31. <div id="app" v-cloak>
  32. <div class="vue-crumbs">
  33. 门店-拼团订单
  34. </div>
  35. <div class="vue-head">
  36. <el-radio-group v-model="search_form.status" @change="search(1)">
  37. <el-radio-button label="">全部订单</el-radio-button>
  38. <el-radio-button label="wait_pay">待支付订单</el-radio-button>
  39. <el-radio-button label="wait_send">待发货订单</el-radio-button>
  40. <el-radio-button label="wait_receive">待收货订单</el-radio-button>
  41. <el-radio-button label="completed">已完成订单</el-radio-button>
  42. <el-radio-button label="return">退换货订单</el-radio-button>
  43. <el-radio-button label="refunded">已退款订单</el-radio-button>
  44. <el-radio-button label="cancelled">已关闭订单</el-radio-button>
  45. </el-radio-group>
  46. </div>
  47. <div class="vue-head">
  48. <div class="vue-main-title" style="margin-bottom:20px">
  49. <div class="vue-main-title-left"></div>
  50. <div class="vue-main-title-content">订单筛选</div>
  51. <div class="vue-main-title-button">
  52. </div>
  53. </div>
  54. <div class="vue-search">
  55. <el-form :inline="true" :model="search_form" class="demo-form-inline">
  56. <el-form-item label="">
  57. <el-input v-model="search_form.order_sn" placeholder="订单编号"></el-input>
  58. </el-form-item>
  59. <el-form-item label="">
  60. <el-input v-model="search_form.pay_sn" placeholder="支付单号"></el-input>
  61. </el-form-item>
  62. <el-form-item label="">
  63. <el-input v-model="search_form.express" placeholder="快递单号"></el-input>
  64. </el-form-item>
  65. <el-form-item label="">
  66. <el-input v-model="search_form.member_info" placeholder="购买者昵称/姓名/手机号"></el-input>
  67. </el-form-item>
  68. <el-form-item label="">
  69. <el-input v-model="search_form.address_name" placeholder="收货人姓名"></el-input>
  70. </el-form-item>
  71. <el-form-item label="">
  72. <el-input v-model="search_form.address_mobile" placeholder="收货人手机号"></el-input>
  73. </el-form-item>
  74. <el-form-item label="">
  75. <el-input v-model="search_form.goods_id" placeholder="商品ID"></el-input>
  76. </el-form-item>
  77. <el-form-item label="">
  78. <el-input v-model="search_form.goods_title" placeholder="商品名称"></el-input>
  79. </el-form-item>
  80. <el-form-item label="">
  81. <el-input v-model="search_form.fight_groups_title" placeholder="活动名称"></el-input>
  82. </el-form-item>
  83. <el-form-item label="">
  84. <el-select v-model="search_form.team_status" clearable placeholder="团队状态" style="width:150px">
  85. <el-option label="团长未支付" value="0"></el-option>
  86. <el-option label="拼团中" value="1"></el-option>
  87. <el-option label="已成团" value="2"></el-option>
  88. <el-option label="失败" value="3"></el-option>
  89. </el-select>
  90. </el-form-item>
  91. <el-form-item label="">
  92. <el-select v-model="search_form.pay_type" clearable placeholder="支付方式" style="width:150px">
  93. <el-option label="余额" value="3"></el-option>
  94. <el-option label="微信支付" value="1"></el-option>
  95. <el-option label="支付宝" value="2"></el-option>
  96. </el-select>
  97. </el-form-item>
  98. <el-form-item label="">
  99. <el-select v-model="search_form.time_field" clearable placeholder="操作时间" style="width:150px">
  100. <el-option label="下单时间" value="create_time"></el-option>
  101. <el-option label="支付时间" value="pay_time"></el-option>
  102. <el-option label="发货时间" value="send_time"></el-option>
  103. <el-option label="完成时间" value="finish_time"></el-option>
  104. </el-select>
  105. </el-form-item>
  106. <el-form-item label="">
  107. <el-date-picker
  108. v-model="times"
  109. type="datetimerange"
  110. value-format="yyyy-MM-dd HH:mm:ss"
  111. range-separator="至"
  112. start-placeholder="开始日期"
  113. end-placeholder="结束日期"
  114. style="margin-left:5px;"
  115. align="right">
  116. </el-date-picker>
  117. </el-form-item>
  118. <el-form-item label="">
  119. <el-button type="primary" @click="search(1)">搜索</el-button>
  120. <el-button @click="export1()">导出</el-button>
  121. </el-form-item>
  122. </el-form>
  123. </div>
  124. </div>
  125. <div class="vue-main">
  126. <div class="vue-main-form">
  127. <div class="vue-main-title" style="margin-bottom:20px">
  128. <div class="vue-main-title-left"></div>
  129. <div class="vue-main-title-content" style="flex:0 0 160px">门店商品订单列表</div>
  130. <div class="" style="text-align:left;font-size:14px;color:#999">
  131. <span>订单数:[[total]]</span>&nbsp;&nbsp;&nbsp;
  132. <span>订单金额:[[all_price]]</span>&nbsp;&nbsp;&nbsp;
  133. </div>
  134. <div class="vue-main-title-button">
  135. </div>
  136. </div>
  137. <div v-for="(item,index) in list" style="border:1px solid #e9e9e9;border-radius:10px;margin-bottom:10px">
  138. <div class="list-info">
  139. <div class="vue-ellipsis" style="color:#999;max-width:150px">
  140. <strong>订单ID:</strong>[[item.id]]&nbsp;&nbsp;&nbsp;
  141. </div>
  142. <div v-if="item.order_sn" class="vue-ellipsis" style="color:#999;max-width:240px">
  143. <strong>订单编号:</strong>[[item.order_sn]]&nbsp;&nbsp;&nbsp;
  144. </div>
  145. <div v-if="item.pay_sn" class="vue-ellipsis" style="color:#999;max-width:240px">
  146. <strong>支付单号:</strong>[[item.pay_sn]]&nbsp;&nbsp;&nbsp;
  147. </div>
  148. <div class="vue-ellipsis" style="color:#999;max-width:230px">
  149. <strong>下单时间:</strong>[[item.create_time]]&nbsp;&nbsp;&nbsp;
  150. </div>
  151. <div class="tag-group" lass="vue-ellipsis">
  152. <el-tag effect="dark" style="background-color: #9c27b0;border:none">&nbsp;
  153. <b>活动名称 :</b> [[ item.group_title ]]&nbsp;
  154. </el-tag>
  155. <el-tag effect="dark" style="background-color: #9c27b0;border:none">
  156. <b>[[ item.member_num ]]人团</b>&nbsp;&nbsp;
  157. </el-tag>
  158. <el-tag effect="dark" style="background-color: #9c27b0;border:none">&nbsp;
  159. <b>团长 :</b> [[ item.leader_name ]]&nbsp;&nbsp;
  160. </el-tag>
  161. <el-tag v-if="item.team_status == 1" effect="dark" style="background-color: #9c27b0;border:none">
  162. <b> 拼团中</b></el-tag>
  163. <el-tag v-if="item.team_status == 2" effect="dark" style="background-color: #9c27b0;border:none">
  164. <b>已成团</b></el-tag>
  165. <el-tag v-if="item.team_status == 3" effect="dark" style="background-color: #9c27b0;border:none">
  166. <b> 成团失败</b></el-tag>
  167. </div>
  168. <div v-if="item.clerk" class="vue-ellipsis" style="color:#999;max-width:230px">
  169. <strong>[[item.clerk]]</strong>&nbsp;&nbsp;&nbsp;
  170. </div>
  171. <div v-if="item.refund" class="vue-ellipsis" style="color:#f00;max-width:230px">
  172. <strong>[[item.refund_status]]</strong>&nbsp;&nbsp;&nbsp;
  173. </div>
  174. <div style="flex:1;text-align:right;min-width:150px;">
  175. <a @click="closeOrder(item.id)" style="color:#29BA9C;font-size:13px;font-weight:600" v-if="item.status==0">关闭订单</a>
  176. {{--<a @click="closeOrder1(item.id)" style="color:#29BA9C;font-size:13px;font-weight:600" v-if="item.status==1 || item.status==2">退款并关闭订单</a>--}}
  177. </div>
  178. </div>
  179. <div class="list-con">
  180. <div style="flex:3;min-width:400px">
  181. <div v-for="(item1,index1) in item.has_many_order_goods" class="list-con-goods">
  182. <div class="list-con-goods-img" style="width:80px">
  183. <el-image :src="item1.thumb" style="width:70px;height:70px"></el-image>
  184. </div>
  185. <div class="list-con-goods-text" :style="{justifyContent:(item1.goods_option_title?'':'center')}">
  186. <div class="list-con-goods-title" style="color:#29BA9C;cursor: pointer;" @click="gotoGoods(item1.goods_id)">[[item1.title]]</div>
  187. <div class="list-con-goods-option" v-if="item1.goods_option_title">规格:[[item1.goods_option_title]]</div>
  188. </div>
  189. <div class="list-con-goods-price">
  190. <div>原价:[[item1.goods_price]]</div>
  191. <div>应付:[[item1.price]]</div>
  192. <div>数量:[[item1.total]]</div>
  193. </div>
  194. </div>
  195. </div>
  196. <div class="list-con-member-info vue-ellipsis">
  197. <div style="min-width:70%;margin:0 auto">
  198. <div style="line-height:32px;color:#29BA9C;cursor: pointer;" class="vue-ellipsis">
  199. <strong>[[item.belongs_to_member.nickname]] </strong>
  200. </div>
  201. <div>[[item.belongs_to_member.realname]]</div>
  202. <div>[[item.belongs_to_member.mobile]]</div>
  203. </div>
  204. </div>
  205. <div class="list-con-member-info vue-ellipsis" style="text-align:center;min-width: 90px;">
  206. <div><strong class="label label-info">[[item.has_one_pay_type.name]]</strong></div>
  207. <div v-if ="item.is_virtual == 0">
  208. <strong>[[item.has_one_dispatch_type.name]]
  209. </strong>
  210. </div>
  211. </div>
  212. <div class="list-con-member-info vue-ellipsis" style="min-width: 120px;">
  213. <div style="min-width:70%;margin:0 auto">
  214. <div>商品小计:¥[[item.goods_total]]</div>
  215. <div>运费:¥[[item.shipping]]</div>
  216. <div v-if="item.change_price!='0.00'">卖家改价:¥[[item.change_price]]</div>
  217. <div v-if="item.change_dispatch_price!='0.00'">卖家改运费:¥[[item.change_dispatch_price]]</div>
  218. <div>应付款:¥[[item.price]]</div>
  219. </div>
  220. </div>
  221. <div class="list-con-member-info vue-ellipsis" style="text-align:center">
  222. <div style="min-width:70%;margin:0 auto">
  223. <div style="color:#29BA9C">[[item.status_name]]</div>
  224. <div v-if="item.status==0">
  225. <a style="color:#29BA9C" @click="changePrice(item.id,item)">修改价格</a>
  226. </div>
  227. <div>
  228. <a @click="gotoDetail(item)" style="color:#29BA9C">查看详情</a>
  229. </div>
  230. </div>
  231. </div>
  232. <div class="list-con-member-info vue-ellipsis" style="text-align:center;min-width: 80px;border-right:0">
  233. <!-- 未付款 -->
  234. <div v-if="item.status==0">
  235. <el-button @click="confirmPay(item.id)" size="mini" type="primary" style="margin-bottom:5px;width:80%;margin:0 auto">确认付款</el-button>
  236. </div>
  237. <!-- 待发货 -->
  238. <div v-if="item.status==1 && item.dispatch_type_id==1">
  239. <el-button @click="confirmSend(item.id,item)" size="mini" type="primary" style="width:80%;margin:0 auto;margin-bottom:5px;">确认发货</el-button><br>
  240. <el-button @click="cancelSend(item.id)" plain size="mini" type="danger" style="width:80%;margin:0 auto;margin-bottom:5px;">取消发货</el-button>
  241. </div>
  242. <div v-if="item.status==2 && item.dispatch_type_id==1">
  243. <el-button @click="confirmReceive(item.id)" size="mini" type="primary" style="width:80%;margin:0 auto;margin-bottom:5px;">确认收货</el-button><br>
  244. </div>
  245. <div v-if="item.status==1 && item.dispatch_type_id==3">
  246. <el-button @click="confirmSend(item.id,item)" size="mini" type="primary" style="width:80%;margin:0 auto;margin-bottom:5px;">确认发货</el-button>
  247. </div>
  248. <div v-if="item.status==2 && (item.dispatch_type_id==2 ||item.dispatch_type_id==3)">
  249. <el-button @click="confirmReceive(item.id)" size="mini" type="primary" style="width:80%;margin:0 auto;margin-bottom:5px;">确认核销</el-button>
  250. </div>
  251. <!-- <el-button plain size="mini" type="danger" style="margin-bottom:5px;width:80%;margin:0 suto">取消发货</el-button>
  252. <el-button size="mini" type="primary" style="margin-bottom:5px;width:80%;margin:0 suto">确认发货</el-button> -->
  253. </div>
  254. </div>
  255. <div class="list-member" v-if="item.address">
  256. [[item.address.realname]]&nbsp;&nbsp;&nbsp;[[item.address.mobile]]&nbsp;&nbsp;&nbsp;[[item.address.address]]
  257. </div>
  258. </div>
  259. </div>
  260. </div>
  261. <!-- 退款 -->
  262. <el-dialog :visible.sync="close_order_show" width="750px" title="关闭订单">
  263. <div style="height:300px;overflow:auto" id="close-order">
  264. <div style="color:#000;font-weight:500">关闭订单原因</div>
  265. <el-input v-model="close_order_con" :rows="10" type="textarea"></el-input>
  266. </div>
  267. <span slot="footer" class="dialog-footer">
  268. <el-button @click="close_order_show = false">取 消</el-button>
  269. <el-button type="primary" @click="sureCloseOrder">确 定 </el-button>
  270. </span>
  271. </el-dialog>
  272. <!-- 手动退款 -->
  273. {{--<el-dialog :visible.sync="close_order1_show" width="750px" title="退款并关闭订单">--}}
  274. {{--<div style="height:300px;overflow:auto">--}}
  275. {{--<div style="color:#000;font-weight:500">退款原因</div>--}}
  276. {{--<el-input v-model="close_order1_con" :rows="10" type="textarea"></el-input>--}}
  277. {{--</div>--}}
  278. {{--<span slot="footer" class="dialog-footer">--}}
  279. {{--<el-button @click="close_order1_show = false">取 消</el-button>--}}
  280. {{--<el-button type="primary" @click="sureCloseOrder1">退 款 </el-button>--}}
  281. {{--</span>--}}
  282. {{--</el-dialog>--}}
  283. <!-- 取消发货 -->
  284. <el-dialog :visible.sync="cancel_send_show" width="750px" title="取消发货">
  285. <div style="height:300px;overflow:auto" id="cancel-send">
  286. <div style="color:#000;font-weight:500">取消发货原因</div>
  287. <el-input v-model="cancel_send_con" :rows="10" type="textarea"></el-input>
  288. </div>
  289. <span slot="footer" class="dialog-footer">
  290. <el-button @click="cancel_send_show = false">取 消</el-button>
  291. <el-button type="primary" @click="sureCancelSend">取消发货 </el-button>
  292. </span>
  293. </el-dialog>
  294. <!-- 确认发货 -->
  295. <el-dialog :visible.sync="confirm_send_show" width="750px" title="确认发货">
  296. <div style="height:400px;overflow:auto" id="confirm-send">
  297. <el-form ref="send" :model="send" :rules="send_rules" label-width="15%">
  298. <el-form-item label="收件人信息" prop="aggregation">
  299. <div>收 件 人: [[address_info.realname]] / [[address_info.mobile]]</div>
  300. <div>收货地址: [[address_info.address]]</div>
  301. </el-form-item>
  302. <el-form-item label="配送方式" prop="">
  303. <el-radio v-model="send.dispatch_type_id" :label="1">快递</el-radio>
  304. </el-form-item>
  305. <el-form-item label="快递公司">
  306. <el-select v-model="send.express_code" clearable filterable placeholder="快递公司" style="width:70%;">
  307. <el-option label="其他快递" value=""></el-option>
  308. <el-option v-for="(item,index) in expressCompanies" :key="index" :label="item.name" :value="item.value"></el-option>
  309. </el-select>
  310. </el-form-item>
  311. <el-form-item label="快递单号" prop="">
  312. <el-input v-model="send.express_sn" style="width:70%;"></el-input>
  313. </el-form-item>
  314. </el-form>
  315. </div>
  316. <span slot="footer" class="dialog-footer">
  317. <el-button @click="confirm_send_show = false">取 消</el-button>
  318. <el-button type="primary" @click="sureconfirmSend">确认发货 </el-button>
  319. </span>
  320. </el-dialog>
  321. <!-- 修改价格 -->
  322. <el-dialog :visible.sync="change_price_show" width="65%" title="修改价格">
  323. <div style="height:500px;overflow:auto" id="change-price">
  324. <el-table :data="order_goods_model" style="width: 100%">
  325. <el-table-column label="商品名称" prop="has_one_goods.title"></el-table-column>
  326. <el-table-column label="单价" align="center" prop="goods_price" width="120">
  327. <template slot-scope="scope">
  328. <div>
  329. [[parseFloat(scope.row.price)/parseFloat(scope.row.total)]]
  330. </div>
  331. </template>
  332. </el-table-column>
  333. <el-table-column label="数量" align="center" prop="total" width="100"></el-table-column>
  334. <el-table-column label="小计" align="center" prop="price" width="150">
  335. <template slot-scope="scope">
  336. <div>
  337. [[scope.row.price]]
  338. <el-tag v-if="scope.row.change_price&&scope.row.change_price!=0&&scope.row.change_price!='0.00'" type="danger">改价</el-tag>
  339. </div>
  340. </template>
  341. </el-table-column>
  342. <el-table-column label="加价或减价" align="center" prop="display_order">
  343. <template slot-scope="scope">
  344. <div>
  345. <el-input @input="inputPrice(scope.$index,scope.row.new_price)" v-model="scope.row.new_price" size="small" style="width:95%"></el-input>
  346. </div>
  347. </template>
  348. </el-table-column>
  349. <el-table-column label="运费" align="center" prop="dispatch_price">
  350. <template slot-scope="scope" v-if="scope.$index==0">
  351. <div>
  352. <el-input @input="inputPrice('dispatch_pricec',dispatch_price)" v-model="dispatch_price" size="small" style="width:95%"></el-input>
  353. </div>
  354. </template>
  355. </el-table-column>
  356. <el-table-column label="" align="center" prop="display_order">
  357. <template slot-scope="scope" v-if="scope.$index==0">
  358. <div>
  359. <el-link :underline="false" @click="clearDispatch">直接免运费</el-link>
  360. </div>
  361. </template>
  362. </el-table-column>
  363. </el-table>
  364. <div class="tip" style="color:#f00;margin:10px 0;">提示:改价后价格不能小于0元</div>
  365. <div style="background:#eff3f6;border-radius:8px;padding:20px 10px;color:#000;font-weight:500;line-height:36px;">
  366. <div style="font-size:16px;font-weight:600;color:#000">购买者信息</div>
  367. <div>
  368. <div style="display:inline-block;width:150px;text-align:right;margin-right:30px">姓名</div>
  369. <div style="display:inline-block;">[[order_model.address?order_model.address.realname:""]]</div>
  370. </div>
  371. <div>
  372. <div style="display:inline-block;width:150px;text-align:right;margin-right:30px">联系方式</div>
  373. <div style="display:inline-block;">[[order_model.address?order_model.address.mobile:""]]</div>
  374. </div>
  375. <div>
  376. <div style="display:inline-block;width:150px;text-align:right;margin-right:30px">联系地址</div>
  377. <div style="display:inline-block;">[[order_model.address?order_model.address.address:""]]</div>
  378. </div>
  379. </div>
  380. </div>
  381. <span slot="footer" class="dialog-footer" style="display:flex;justify-content: flex-end;">
  382. <div style="display:inline-block;color:#000;margin-right:20px;font-weight:500;">
  383. <div style="display:flex;text-align:center;line-height:28px;align-items: center;">
  384. <div style="margin-right:15px">
  385. 原价<br>
  386. ¥[[parseFloat(order_model.price)-(parseFloat(order_model.dispatch_price))]]
  387. </div>
  388. <div style="margin-right:15px">+</div>
  389. <div style="margin-right:15px">
  390. 运费<br>
  391. ¥[[parseFloat(dispatch_price)]]
  392. </div>
  393. <div style="margin-right:15px">+</div>
  394. <div style="margin-right:15px">
  395. 价格修改<br>
  396. ¥[[(parseFloat(change_all_money))]]
  397. </div>
  398. <div style="margin-right:15px">=</div>
  399. <div style="margin-right:15px">
  400. 买家实付<br>
  401. <strong style="color:#f00">¥[[(parseFloat(all_money))]]</strong>
  402. </div>
  403. </div>
  404. </div>
  405. <div style="line-height:56px">
  406. <el-button @click="change_price_show = false">取 消</el-button>
  407. <el-button type="primary" @click="sureChangePrice">确认改价</el-button>
  408. </div>
  409. </span>
  410. </el-dialog>
  411. <!-- 分页 -->
  412. <div class="vue-page" v-if="total>0">
  413. <el-row>
  414. <el-col align="right">
  415. <el-pagination layout="prev, pager, next,jumper" @current-change="search" :total="total"
  416. :page-size="per_page" :current-page="current_page" background
  417. ></el-pagination>
  418. </el-col>
  419. </el-row>
  420. </div>
  421. </div>
  422. </div>
  423. <script>
  424. var app = new Vue({
  425. el: "#app",
  426. delimiters: ['[[', ']]'],
  427. name: 'test',
  428. data() {
  429. return {
  430. activeName:'2',
  431. list:[],
  432. count:{},
  433. has_many_level:[],
  434. change_sort:'',
  435. times:[],
  436. data:"",
  437. expressCompanies:[],//快递公司
  438. search_form:{
  439. status:"",
  440. street_id:"",
  441. store_id:"",
  442. },
  443. order_type:'',
  444. close_order_show:false,//关闭订单弹窗
  445. close_order_con:"",//关闭订单原因
  446. close_order_id:"",
  447. close_order1_show:false,//手动关闭订单弹窗
  448. close_order1_con:"",//手动关闭订单原因
  449. close_order1_id:"",
  450. cancel_send_show:false,// 取消发货弹窗
  451. cancel_send_con:"",//取消发货原因
  452. cancel_send_id:'',
  453. confirm_send_show:false,// 确认发货弹窗
  454. confirm_send_id:"",
  455. change_price_show:false,//修改价格弹窗
  456. change_price_id:"",
  457. change_all_money:0.00,//价格修改
  458. all_money:0.00,//买家实付
  459. order_model:{},
  460. dispatch_price:0,//运费
  461. order_goods_model:[],
  462. address_info:{},
  463. send:{
  464. dispatch_type_id:1,
  465. express_code:"",
  466. express_sn:"",
  467. },
  468. send_rules:{
  469. },
  470. street:0,
  471. province_list:[],
  472. city_list : [],
  473. district_list : [],
  474. street_list : [],
  475. areaLoading:false,
  476. all_price:0,
  477. rules: {},
  478. current_page:1,
  479. total:1,
  480. per_page:1,
  481. }
  482. },
  483. created() {
  484. },
  485. mounted() {
  486. this.search_form.store_id = this.getParam("id");
  487. this.getData(1);
  488. // this.getCategoryData();
  489. this.initProvince();
  490. },
  491. methods: {
  492. getParam(name) {
  493. var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
  494. var r = window.location.search.substr(1).match(reg);
  495. if (r != null) return unescape(r[2]);
  496. return null;
  497. },
  498. getData(page) {
  499. console.log(this.times);
  500. let json = {
  501. page:page,
  502. status:this.search_form.status,
  503. order_sn:this.search_form.order_sn,
  504. pay_sn:this.search_form.pay_sn,
  505. member_id:this.search_form.member_id,
  506. member_info:this.search_form.member_info,
  507. address_name:this.search_form.address_name,
  508. address_mobile:this.search_form.address_mobile,
  509. express:this.search_form.express,
  510. goods_id:this.search_form.goods_id,
  511. goods_title:this.search_form.goods_title,
  512. pay_type:this.search_form.pay_type,
  513. time_field:this.search_form.time_field,
  514. };
  515. if(this.times && this.times.length>0) {
  516. json.start_time = this.times[0];
  517. json.end_time = this.times[1];
  518. }
  519. console.log(json)
  520. let loading = this.$loading({target:document.querySelector(".content"),background: 'rgba(0, 0, 0, 0)'});
  521. this.$http.post('{!! yzWebFullUrl('plugin.fight-groups.admin.controllers.order-store.get-data') !!}',json).then(function(response) {
  522. if (response.data.result) {
  523. this.expressCompanies = response.data.data.has_one_dispatch_type;
  524. this.list = response.data.data.data;
  525. this.current_page=response.data.data.current_page;
  526. console.log( this.current_page);
  527. this.total=response.data.data.total;
  528. this.all_price=response.data.data.all_price;
  529. this.per_page=response.data.data.per_page;
  530. loading.close();
  531. } else {
  532. this.$message({
  533. message: response.data.msg,
  534. type: 'error'
  535. });
  536. }
  537. loading.close();
  538. }, function(response) {
  539. this.$message({
  540. message: response.data.msg,
  541. type: 'error'
  542. });
  543. loading.close();
  544. });
  545. },
  546. getCategoryData() {
  547. let loading = this.$loading({target:document.querySelector(".content"),background: 'rgba(0, 0, 0, 0)'});
  548. this.$http.post('{!! yzWebFullUrl('') !!}',{}).then(function(response) {
  549. if (response.data.result) {
  550. // this.category_list = response.data.data.category;
  551. this.street = response.data.data.street;
  552. loading.close();
  553. } else {
  554. this.$message({
  555. message: response.data.msg,
  556. type: 'error'
  557. });
  558. }
  559. loading.close();
  560. }, function(response) {
  561. this.$message({
  562. message: response.data.msg,
  563. type: 'error'
  564. });
  565. loading.close();
  566. });
  567. },
  568. initProvince(val) {
  569. console.log(val);
  570. this.areaLoading = true;
  571. this.$http.get("{!! yzWebUrl('area.list.init', ['area_ids'=>'']) !!}"+val).then(response => {
  572. this.province_list = response.data.data;
  573. this.areaLoading = false;
  574. }, response => {
  575. this.areaLoading = false;
  576. });
  577. },
  578. changeProvince(val) {
  579. this.city_list = [];
  580. this.district_list = [];
  581. this.street_list = [];
  582. // this.search_form.province_id = "";
  583. this.search_form.city_id = "";
  584. this.search_form.district_id = "";
  585. this.search_form.street_id = "";
  586. this.areaLoading = true;
  587. let url = "<?php echo yzWebUrl('area.list', ['parent_id'=> '']); ?>" + val;
  588. this.$http.get(url).then(response => {
  589. if (response.data.data.length) {
  590. this.city_list = response.data.data;
  591. } else {
  592. this.city_list = null;
  593. }
  594. this.areaLoading = false;
  595. }, response => {
  596. this.areaLoading = false;
  597. });
  598. },
  599. // 市改变
  600. changeCity(val) {
  601. this.district_list = [];
  602. this.street_list = [];
  603. this.search_form.district_id = "";
  604. this.search_form.street_id = "";
  605. this.areaLoading = true;
  606. let url = "<?php echo yzWebUrl('area.list', ['parent_id'=> '']); ?>" + val;
  607. this.$http.get(url).then(response => {
  608. if (response.data.data.length) {
  609. this.district_list = response.data.data;
  610. } else {
  611. this.district_list = null;
  612. }
  613. this.areaLoading = false;
  614. }, response => {
  615. this.areaLoading = false;
  616. });
  617. },
  618. // 区改变
  619. changeDistrict(val) {
  620. console.log(val)
  621. this.street_list = [];
  622. this.search_form.street_id = "";
  623. this.areaLoading = true;
  624. let url = "<?php echo yzWebUrl('area.list', ['parent_id'=> '']); ?>" + val;
  625. this.$http.get(url).then(response => {
  626. if (response.data.data.length) {
  627. this.street_list = response.data.data;
  628. } else {
  629. this.street_list = null;
  630. }
  631. this.areaLoading = false;
  632. }, response => {
  633. this.areaLoading = false;
  634. });
  635. },
  636. gotoDetail(item) {
  637. let link = `{!! yzWebFullUrl('plugin.fight-groups.admin.controllers.order-store.detail') !!}`+`&id=`+item.id;
  638. window.location.href = link;
  639. },
  640. search(val) {
  641. this.getData(val);
  642. },
  643. // 添加新品牌
  644. addModal() {
  645. let link = `{!! yzWebFullUrl('plugin.store-cashier.admin.store.add') !!}`;
  646. console.log(link);
  647. window.location.href = link;
  648. },
  649. // 确认付款
  650. confirmPay(id) {
  651. this.$confirm('确认此订单已付款吗?', '提示', {confirmButtonText: '确定',cancelButtonText: '取消',type: 'warning'}).then(() => {
  652. let loading = this.$loading({target:document.querySelector(".content"),background: 'rgba(0, 0, 0, 0)'});
  653. this.$http.post('{!! yzWebFullUrl('plugin.store-cashier.admin.operation.pay') !!}',{order_id:id}).then(function (response) {
  654. if (response.data.result) {
  655. this.$message({type: 'success',message: '操作成功'});
  656. }
  657. else{
  658. this.$message({type: 'error',message: response.data.msg});
  659. }
  660. loading.close();
  661. this.search(this.current_page)
  662. },function (response) {
  663. this.$message({type: 'error',message: response.data.msg});
  664. loading.close();
  665. }
  666. );
  667. }).catch(() => {
  668. this.$message({type: 'info',message: '已取消操作'});
  669. });
  670. },
  671. // 关闭订单
  672. closeOrder(id) {
  673. this.close_order_show = true;
  674. this.close_order_con = "";
  675. this.close_order_id = id;
  676. },
  677. // 确认关闭订单
  678. sureCloseOrder() {
  679. let json = {
  680. route:'order.operation.close',
  681. order_id:this.close_order_id,
  682. reson:this.close_order_con,
  683. }
  684. console.log(json);
  685. let loading = this.$loading({target:document.querySelector("#close-order"),background: 'rgba(0, 0, 0, 0)'});
  686. this.$http.post('{!! yzWebFullUrl('plugin.store-cashier.admin.operation.close') !!}',json).then(function (response) {
  687. if (response.data.result) {
  688. this.$message({type: 'success',message: '关闭订单成功!'});
  689. }
  690. else{
  691. this.$message({type: 'error',message: response.data.msg});
  692. }
  693. loading.close();
  694. this.close_order_show = false;
  695. this.search(this.current_page);
  696. },function (response) {
  697. this.$message({type: 'error',message: response.data.msg});
  698. loading.close();
  699. this.close_order_show = false;
  700. })
  701. },
  702. // 手动退款并关闭订单
  703. closeOrder1(id) {
  704. this.close_order1_show = true;
  705. this.close_order1_con = "";
  706. this.close_order1_id = id;
  707. },
  708. // 手动确认关闭订单
  709. sureCloseOrder1() {
  710. let json = {
  711. route:'order.operation.manualRefund',
  712. order_id:this.close_order1_id,
  713. reson:this.close_order1_con,
  714. }
  715. console.log(json);
  716. let loading = this.$loading({target:document.querySelector("#close-order"),background: 'rgba(0, 0, 0, 0)'});
  717. this.$http.post('{!! yzWebFullUrl('plugin.store-cashier.admin.operation.manualRefund') !!}',json).then(function (response) {
  718. if (response.data.result) {
  719. this.$message({type: 'success',message: '关闭订单成功!'});
  720. }
  721. else{
  722. this.$message({type: 'error',message: response.data.msg});
  723. }
  724. loading.close();
  725. this.close_order_show = false;
  726. this.search(this.current_page);
  727. },function (response) {
  728. this.$message({type: 'error',message: response.data.msg});
  729. loading.close();
  730. this.close_order_show = false;
  731. })
  732. },
  733. // 取消发货
  734. cancelSend(id) {
  735. this.cancel_send_show = true;
  736. this.cancel_send_con = "";
  737. this.cancel_send_id = id;
  738. console.log(id)
  739. },
  740. // 确认取消发货
  741. sureCancelSend() {
  742. let json = {
  743. // route:'order.operation.manualRefund',
  744. order_id:this.cancel_send_id,
  745. cancelreson:this.cancel_send_con,
  746. }
  747. console.log(json);
  748. let loading = this.$loading({target:document.querySelector("#cancel-send"),background: 'rgba(0, 0, 0, 0)'});
  749. this.$http.post('{!! yzWebFullUrl('plugin.store-cashier.admin.operation.cancel-send') !!}',json).then(function (response) {
  750. if (response.data.result) {
  751. this.$message({type: 'success',message: '关闭订单成功!'});
  752. }
  753. else{
  754. this.$message({type: 'error',message: response.data.msg});
  755. }
  756. loading.close();
  757. this.close_order_show = false;
  758. this.search(this.current_page);
  759. },function (response) {
  760. this.$message({type: 'error',message: response.data.msg});
  761. loading.close();
  762. this.close_order_show = false;
  763. })
  764. },
  765. // 确认收货
  766. confirmReceive(id) {
  767. this.$confirm('确认订单收货吗?', '提示', {confirmButtonText: '确定',cancelButtonText: '取消',type: 'warning'}).then(() => {
  768. let loading = this.$loading({target:document.querySelector(".content"),background: 'rgba(0, 0, 0, 0)'});
  769. this.$http.post('{!! yzWebFullUrl('plugin.store-cashier.admin.operation.receive') !!}',{order_id:id}).then(function (response) {
  770. if (response.data.result) {
  771. this.$message({type: 'success',message: '操作成功'});
  772. }
  773. else{
  774. this.$message({type: 'error',message: response.data.msg});
  775. }
  776. loading.close();
  777. this.search(this.current_page)
  778. },function (response) {
  779. this.$message({type: 'error',message: response.data.msg});
  780. loading.close();
  781. }
  782. );
  783. }).catch(() => {
  784. this.$message({type: 'info',message: '已取消操作'});
  785. });
  786. },
  787. // 确认发货
  788. confirmSend(id,item) {
  789. this.confirm_send_show = true;
  790. this.confirm_send_con = "";
  791. this.send = {
  792. dispatch_type_id :1,
  793. express_code:"",
  794. express_sn:""
  795. }
  796. this.confirm_send_id = id;
  797. this.address_info = item.address;
  798. },
  799. // 确认确认发货
  800. sureconfirmSend() {
  801. let json = {
  802. dispatch_type_id:this.send.dispatch_type_id,
  803. express_code:this.send.express_code,
  804. express_sn:this.send.express_sn,
  805. order_id:this.confirm_send_id,
  806. }
  807. console.log(json);
  808. // if(this.send.express_sn == "") {
  809. // this.$message.error("快递单号不能为空!");
  810. // return;
  811. // }
  812. let loading = this.$loading({target:document.querySelector("#cancel-send"),background: 'rgba(0, 0, 0, 0)'});
  813. this.$http.post('{!! yzWebFullUrl('plugin.store-cashier.admin.operation.send') !!}',json).then(function (response) {
  814. if (response.data.result) {
  815. this.$message({type: 'success',message: '确认发货成功!'});
  816. }
  817. else{
  818. this.$message({type: 'error',message: response.data.msg});
  819. }
  820. loading.close();
  821. this.confirm_send_show = false;
  822. this.search(this.current_page);
  823. },function (response) {
  824. this.$message({type: 'error',message: response.data.msg});
  825. loading.close();
  826. this.confirm_send_show = false;
  827. })
  828. },
  829. // 修改价格
  830. changePrice(id,item) {
  831. this.change_price_show = true;
  832. this.change_price_id = id;
  833. let loading = this.$loading({target:document.querySelector(".content"),background: 'rgba(0, 0, 0, 0)'});
  834. this.$http.post('{!! yzWebFullUrl('plugin.store-cashier.admin.change-order-price.index') !!}',{order_id:item.order_id}).then(function (response) {
  835. if (response.data.result) {
  836. // this.$message({type: 'success',message: '操作成功'});
  837. this.order_goods_model = response.data.data.order_goods_model;
  838. this.order_goods_model.forEach((item,index) => {
  839. this.order_goods_model[index].new_price = 0.00
  840. })
  841. this.order_model = response.data.data.order_model;
  842. this.dispatch_price = this.order_model.dispatch_price;
  843. this.getNewPrice();
  844. }
  845. else{
  846. this.$message({type: 'error',message: response.data.msg});
  847. }
  848. loading.close();
  849. },function (response) {
  850. this.$message({type: 'error',message: response.data.msg});
  851. loading.close();
  852. }
  853. );
  854. },
  855. // 输入改价
  856. inputPrice(index,price) {
  857. // 强制刷新
  858. if(index != 'dispatch_price') {
  859. this.order_goods_model.push({});
  860. this.order_goods_model.splice(this.order_goods_model.length-1,1)
  861. }
  862. if (this.judgeSign(price) == -1) {
  863. this.$message.error("请输入数字");
  864. if(index == 'dispatch_price') {
  865. this.dispatch_price = 0.00;
  866. }
  867. else {
  868. this.order_goods_model[index].new_price = 0.00
  869. }
  870. return false;
  871. }
  872. this.getNewPrice();
  873. },
  874. getNewPrice() {
  875. let new_price = 0;
  876. this.order_goods_model.forEach((item,index) => {
  877. new_price += parseFloat(item.new_price);
  878. })
  879. console.log(new_price)
  880. this.change_all_money = new_price;
  881. this.all_money = (parseFloat(this.order_model.price)-(parseFloat(this.order_model.dispatch_price))) + parseFloat(new_price) + parseFloat(this.dispatch_price);
  882. // this.
  883. },
  884. // 直接免运费
  885. clearDispatch() {
  886. this.dispatch_price = 0.00;
  887. this.getNewPrice();
  888. },
  889. // 确认改价
  890. sureChangePrice() {
  891. let json = {
  892. order_id:this.change_price_id,
  893. dispatch_price:this.dispatch_price,
  894. order_goods:[],
  895. }
  896. this.order_goods_model.forEach((item,index) => {
  897. json.order_goods.push({order_goods_id:item.id,change_price:item.new_price});
  898. })
  899. console.log(json);
  900. let loading = this.$loading({target:document.querySelector("#change-price"),background: 'rgba(0, 0, 0, 0)'});
  901. this.$http.post('{!! yzWebFullUrl('plugin.store-cashier.admin.change-order-price.store') !!}',json).then(function (response) {
  902. if (response.data.result) {
  903. this.$message({type: 'success',message: '修改价格成功!'});
  904. }
  905. else{
  906. this.$message({type: 'error',message: response.data.msg});
  907. }
  908. loading.close();
  909. this.change_price_show = false;
  910. this.search(this.current_page);
  911. },function (response) {
  912. this.$message({type: 'error',message: response.data.msg});
  913. loading.close();
  914. this.change_price_show = false;
  915. })
  916. },
  917. // 判断是否是数字
  918. judgeSign(num) {
  919. var reg = new RegExp("^-?[0-9]*.?[0-9]*$");
  920. if ( reg.test(num) ) {
  921. var absVal = Math.abs(num);
  922. return num==absVal?'是正数':'是负数';
  923. }
  924. else {
  925. return -1;
  926. }
  927. },
  928. export1(){
  929. var url = "{!! yzWebFullUrl('plugin.fight-groups.admin.controllers.order-store.export') !!}"
  930. search = this.obj2str(this.search_form)
  931. url += '&' +search;
  932. window.location.href = url;
  933. },
  934. obj2str(obj) {
  935. var obj_keys = Object.keys(obj);
  936. var obj_values = Object.values(obj);
  937. var str_arr = [];
  938. for(var i = 0; i < obj_keys.length; i++) {
  939. str_arr.push(obj_keys[i] + '=' + obj_values[i]);
  940. }
  941. return str_arr.join('&');
  942. },
  943. gotoGoods(id) {
  944. window.location.href = `{!! yzWebFullUrl('plugin.store-cashier.store.admin.goods.edit') !!}`+`&id=`+id;
  945. },
  946. gotoMember(id) {
  947. window.location.href = `{!! yzWebFullUrl('member.member.detail') !!}`+`&id=`+id;
  948. },
  949. // 字符转义
  950. escapeHTML(a) {
  951. a = "" + a;
  952. return a.replace(/&amp;/g, "&").replace(/&lt;/g, "<").replace(/&gt;/g, ">").replace(/&quot;/g, "\"").replace(/&apos;/g, "'");;
  953. },
  954. },
  955. })
  956. </script>
  957. @endsection