order.blade.php 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351
  1. @extends('layouts.base')
  2. @section('content')
  3. <style>
  4. .panel{
  5. margin-bottom:10px!important;
  6. padding-left: 20px;
  7. border-radius: 10px;
  8. }
  9. .panel .active a {
  10. background-color: #29ba9c!important;
  11. border-radius: 18px!important;
  12. color:#fff;
  13. }
  14. .panel a{
  15. border:none!important;
  16. background-color:#fff!important;
  17. }
  18. .content{
  19. background: #eff3f6;
  20. padding: 10px!important;
  21. }
  22. .con{
  23. padding-bottom:20px;
  24. border-radius: 8px;
  25. position:relative;
  26. min-height:100vh;
  27. background-color:#fff;
  28. }
  29. .con .setting .block{
  30. padding:10px;
  31. background-color:#fff;
  32. border-radius: 8px;
  33. margin-bottom:10px;
  34. }
  35. .con .setting .block .title{
  36. font-size:18px;
  37. margin-bottom:15px;
  38. display:flex;
  39. align-items:center;
  40. }
  41. .confirm-btn{
  42. width: calc(100% - 266px);
  43. position:fixed;
  44. bottom:0;
  45. right:0;
  46. margin-right:10px;
  47. line-height:63px;
  48. background-color: #ffffff;
  49. box-shadow: 0px 8px 23px 1px
  50. rgba(51, 51, 51, 0.3);
  51. background-color:#fff;
  52. text-align:center;
  53. }
  54. b{
  55. font-size:14px;
  56. }
  57. .add-goods{
  58. width: 120px;
  59. height: 120px;
  60. border: dashed 1px #dde2ee;
  61. display:flex;
  62. flex-direction:column;
  63. justify-content:center;
  64. align-items:center;
  65. }
  66. </style>
  67. <div id='re_content' >
  68. @include('layouts.newTabs')
  69. <div class="con">
  70. <div class="setting">
  71. <el-form ref="form" :model="form" label-width="15%">
  72. <div class="block">
  73. <div class="title"> <span style="width: 4px;height: 18px;background-color: #29ba9c;margin-right:15px;display:inline-block;"></span><b>基础设置</b></div>
  74. <el-form-item label="按商品拆单">
  75. <template>
  76. <el-switch
  77. v-model="form.order_apart"
  78. active-value="1"
  79. inactive-value="0"
  80. >
  81. </el-switch>
  82. </template>
  83. <div style="font-size:12px;color:#ccc;">开启有用户购买平台自营商品,每一个商品拆成一个订单,订单原有逻辑不变</div>
  84. </el-form-item>
  85. <el-form-item label="首单商品">
  86. <div style="display:flex;">
  87. <div class="good" v-for="(item,index,key) in thumbList" style="width:120px;display:flex;margin-right:20px;flex-direction: column">
  88. <div class="img" style="position:relative;">
  89. <a style="color:#333;"><div style="width: 20px;height: 20px;background-color: #dde2ee;display:flex;align-items:center;justify-content:center; #999999;position:absolute;right:-10px;top:-10px;border-radius:50%;" @click="delGoods(item)">X</div></a>
  90. <img :src="item.thumb_url" style="width:120px;height:120px;">
  91. </div>
  92. <div style="display: -webkit-box;-webkit-box-orient: vertical;-webkit-line-clamp: 2;overflow: hidden;font-size:12px;">[[item.title]][ID:[[item.id]]]</div>
  93. </div>
  94. <div class="add-goods" @click="openGoods()" >
  95. <a style="font-size:32px;color: #999999;"><i class="el-icon-plus" ></i></a>
  96. <div style="color: #999999;">选择商品</div>
  97. </div>
  98. </div>
  99. </el-form-item>
  100. <el-form-item label="催发货">
  101. <template>
  102. <el-switch
  103. v-model="form.expediting_delivery"
  104. active-value="1"
  105. inactive-value="0"
  106. >
  107. </el-switch>
  108. </template>
  109. <div style="font-size:12px;color:#ccc;">开启后平台自营/供应商/门店待发货的订单有催发货的功能。</div>
  110. </el-form-item>
  111. <el-form-item label="调用微信地址">
  112. <template>
  113. <el-switch
  114. v-model="form.use_wechat_address"
  115. active-value="1"
  116. inactive-value="0"
  117. >
  118. </el-switch>
  119. </template>
  120. <div style="font-size:12px;">开启后用户在预下单页可以调用微信地址,只支持小程序</div>
  121. <div style="font-size:12px;">注:调用微信地址的订单不产生与地址相关的分红,如区域分红。</div>
  122. <div style="font-size:12px;">注:需要通过地址验证的订单,微信地址与商城地址库记录的存在差异则会提示错误,如聚合供应链和供应链插件</div>
  123. </el-form-item>
  124. <el-form-item label="确认收货弹窗">
  125. <div style="font-size:12px;color:#ccc;">注:设置后平台自营/供应链点击确认收货弹窗显示下面设置内容,默认显示确认收货</div>
  126. </el-form-item>
  127. <div class="block">
  128. <el-form-item label="自定义文案">
  129. <tinymceee v-model="form.receipt_goods_notice" style="width:70%" v-if="info"></tinymceee>
  130. </el-form-item>
  131. </div>
  132. <el-form-item label="运费说明" prop="is_freight_explain">
  133. <el-switch v-model="form.is_freight_explain" :active-value="1" :inactive-value="0"></el-switch>
  134. </el-form-item>
  135. <el-form-item label="运费说明" prop="">
  136. <el-input v-model="form.freight_explain_content" type="textarea" rows="8"
  137. style="width:70%">
  138. </el-input>
  139. </el-form-item>
  140. <el-form-item label="多包裹前端显示">
  141. <el-radio-group v-model="form.package_show">
  142. <el-radio :label="1">按包裹显示</el-radio>
  143. <el-radio :label="2">按商品显示</el-radio>
  144. </el-radio-group>
  145. </el-form-item>
  146. <el-form-item label="下单跳转表单填写" prop="is_diy_form_jump">
  147. <el-switch v-model="form.is_diy_form_jump" :active-value="1" :inactive-value="0"></el-switch>
  148. </el-form-item>
  149. </div>
  150. </el-form>
  151. </div>
  152. <el-dialog :visible.sync="goodsShow" width="60%" center title="选择商品">
  153. <div>
  154. <div style="text-align: center">
  155. <el-input v-model="search_form.keyword" style="width:80%"></el-input>
  156. <el-button type="primary" @click="searchGoods()" style="margin-left:20px;">搜索</el-button>
  157. </div>
  158. <el-table :data="goods_list" style="width: 100%;height:500px;overflow:auto">
  159. <el-table-column label="ID" prop="id" align="center" ></el-table-column>
  160. <el-table-column label="商品信息" align="center">
  161. <template slot-scope="scope">
  162. <div v-if="scope.row" style="display:flex;align-items: center;justify-content:center;">
  163. <img v-if="scope.row.thumb_url" :src="scope.row.thumb_url" style="width:50px;height:50px"></img>
  164. <div style="margin-left:10px">[[scope.row.title]]</div>
  165. </div>
  166. </template>
  167. </el-table-column>
  168. <el-table-column prop="refund_time" label="操作" align="center" >
  169. <template slot-scope="scope">
  170. <el-button @click="sureGoods(scope.row)">
  171. 选择
  172. </el-button>
  173. </template>
  174. </el-table-column>
  175. </el-table>
  176. </div>
  177. <el-row>
  178. <el-col :span="24" align="right" migra style="padding:15px 5% 15px 0" v-loading="loading">
  179. <el-pagination background layout="prev, pager, next" @current-change="currentChange" :total="page_total"
  180. :page-size="page_size" :current-page="current_page"></el-pagination>
  181. </el-col>
  182. </el-row>
  183. </el-dialog>
  184. <div class="confirm-btn">
  185. <el-button type="primary" @click="submit">提交</el-button>
  186. </div>
  187. </el-form>
  188. </div>
  189. </div>
  190. <script src="{{resource_get('static/yunshop/tinymce4.7.5/tinymce.min.js')}}"></script>
  191. @include('public.admin.tinymceee')
  192. @include('public.admin.uploadMultimediaImg')
  193. <script>
  194. var vm = new Vue({
  195. el: "#re_content",
  196. delimiters: ['[[', ']]'],
  197. data() {
  198. return {
  199. loading:false,
  200. selectGoods:[],
  201. activeName: 'first',
  202. goods_list:[],
  203. goodsShow:false,
  204. arr:[],
  205. page_total:0,
  206. page_size:0,
  207. current_page:0,
  208. search_form:{
  209. keyword:'',
  210. },
  211. real_search_form:"",
  212. old_edit_form_coupon:'',
  213. active:0,
  214. thumbList:[],
  215. titleList:[],
  216. form:{
  217. order_apart:'0',
  218. goods:[],
  219. expediting_delivery:'0',
  220. use_wechat_address: '0',
  221. receiving_popup: '',
  222. receipt_goods_notice: "",
  223. freight_explain_content:'',
  224. package_show:1,
  225. is_diy_form_jump:0,
  226. },
  227. info: false
  228. }
  229. },
  230. mounted(){
  231. this.getData()
  232. },
  233. methods: {
  234. openGoods() {
  235. this.goodsShow = true;
  236. },
  237. delGoods(item){
  238. this.thumbList.forEach((list,index)=>{
  239. if(list.id==item.id){
  240. this.thumbList.splice(index,1)
  241. this.form.goods.splice(index,1)
  242. }
  243. })
  244. },
  245. currentChange(val) {
  246. this.loading = true;
  247. this.$http.post('{!! yzWebFullUrl('goods.goods.getSearchGoodsJson') !!}',{page:val,keyword:this.search_form.keyword}).then(function (response){
  248. let datas = response.data.data.goods;
  249. this.page_total = datas.total;
  250. this.goods_list = datas.data;
  251. this.page_size = datas.per_page;
  252. this.current_page = datas.current_page;
  253. this.loading = false;
  254. },function (response) {
  255. console.log(response);
  256. this.loading = false;
  257. }
  258. );
  259. },
  260. searchGoods() {
  261. let that = this;
  262. this.$http.post('{!! yzWebFullUrl('goods.goods.getSearchGoodsJson') !!}',{keyword:this.search_form.keyword}).then(response => {
  263. if (response.data.result) {
  264. let data = response.data.data.goods;
  265. this.page_total = data.total;
  266. this.goods_list = data.data;
  267. this.page_size = data.per_page;
  268. this.current_page = data.current_page;
  269. } else {
  270. this.$message({message: response.data.msg,type: 'error'});
  271. }
  272. },response => {
  273. this.$message({message: response.data.msg,type: 'error'});
  274. });
  275. },
  276. sureGoods(item) {
  277. var status=0;
  278. if(this.form.goods.length>0){
  279. this.form.goods.some((list,index,key)=>{
  280. if(list==item.id){
  281. status=1
  282. this.$message({message: '该商品已被选中',type: 'error'});
  283. return true
  284. }
  285. })
  286. }
  287. if(status==1){
  288. return false
  289. }
  290. this.thumbList.push(item)
  291. this.form.goods.push(item.id)
  292. },
  293. getData(){
  294. this.$http.post('{!! yzWebFullUrl('setting.shop.order') !!}').then(response => {
  295. if (response.data.result) {
  296. if(response.data.data.set){
  297. for(let i in response.data.data.set){
  298. this.form[i]=response.data.data.set[i]
  299. }
  300. if(!this.form.goods){
  301. this.form.goods=[]
  302. }
  303. if(response.data.data.goods){
  304. this.selectGoods=response.data.data.goods
  305. this.selectGoods.forEach((item,index,key)=>{
  306. this.thumbList.push(item)
  307. })
  308. }
  309. this.info = true
  310. }
  311. }else {
  312. this.$message({message: response.data.msg,type: 'error'});
  313. }
  314. },function (response) {
  315. this.$message({message: response.data.msg,type: 'error'});
  316. })
  317. },
  318. submit() {
  319. if(this.form.goods.length>0){
  320. this.form.goods.sort(function (x,y) {
  321. return x-y;
  322. });
  323. }
  324. let loading = this.$loading({target:document.querySelector(".content"),background: 'rgba(0, 0, 0, 0)'});
  325. this.$http.post('{!! yzWebFullUrl('setting.shop.order') !!}',{'order':this.form}).then(function (response){
  326. if (response.data.result) {
  327. this.$message({message: response.data.msg,type: 'success'});
  328. }else {
  329. this.$message({message: response.data.msg,type: 'error'});
  330. }
  331. loading.close();
  332. location.reload();
  333. },function (response) {
  334. this.$message({message: response.data.msg,type: 'error'});
  335. })
  336. },
  337. },
  338. });
  339. </script>
  340. @endsection