index.blade.php 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322
  1. @extends('layouts.base')
  2. @section('title', '满额优惠设置')
  3. @section('content')
  4. <link rel="stylesheet" type="text/css" href="{{static_url('yunshop/goods/vue-goods1.css')}}"/>
  5. <div class="all">
  6. <div id="app" v-cloak>
  7. <div class="vue-nav" style="margin-bottom:15px">
  8. <el-tabs v-model="active_name" @tab-click="handleClick">
  9. <el-tab-pane label="满额优惠设置" name="1"></el-tab-pane>
  10. <el-tab-pane label="包邮分类设置" name="2"></el-tab-pane>
  11. <el-tab-pane label="满件优惠设置" name="3"></el-tab-pane>
  12. </el-tabs>
  13. </div>
  14. <div class="vue-main">
  15. <div class="vue-main-title">
  16. <div class="vue-main-title-left"></div>
  17. <div class="vue-main-title-content">满额优惠设置</div>
  18. </div>
  19. <div class="vue-main-form">
  20. <el-form ref="form" :rules="rules" :model="form" label-width="17%">
  21. <el-form-item label="开启满额优惠">
  22. <el-radio v-model.bool="form.open" :label=true>开启</el-radio>
  23. <el-radio v-model.bool="form.open" :label=false>关闭</el-radio>
  24. </el-form-item>
  25. <template v-for="(enoughReduce,index) in form.enoughReduce">
  26. <el-form-item label="满额减">
  27. <el-form-item>
  28. <el-row :gutter="3">
  29. <el-col :span="6">
  30. <el-form-item v-bind:prop="'enoughReduce.enough-'+index">
  31. <el-input placeholder="金额"
  32. v-model.number="enoughReduce.enough" size="medium">
  33. <template slot="prepend">满</template>
  34. <template slot="append">元</template>
  35. </el-input>
  36. </el-form-item>
  37. </el-col>
  38. <el-col :span="6">
  39. <el-form-item v-bind:prop="'enoughReduce.reduce-'+index">
  40. <el-input placeholder="金额"
  41. v-model.number="enoughReduce.reduce" size="medium">
  42. <template slot="prepend">减</template>
  43. <template slot="append">元</template>
  44. </el-input>
  45. </el-form-item>
  46. </el-col>
  47. <el-col :span="3">
  48. <el-button plain size="mini" @click="remove(index)">x</el-button>
  49. </el-col>
  50. </el-row>
  51. </el-form-item>
  52. </el-form-item>
  53. </template>
  54. <el-form-item label="">
  55. <el-row>
  56. <el-button @click="add">增加满减规则</el-button>
  57. </el-row>
  58. </el-form-item>
  59. <el-form-item label="订单满额包邮">
  60. <el-radio v-model.bool="form.freeFreight.open" :label=true>开启</el-radio>
  61. <el-radio v-model.bool="form.freeFreight.open" :label=false>关闭</el-radio>
  62. <div>订单总金额超过多少可以包邮,与商品单品满额包邮互不影响</div>
  63. <el-form-item prop="freeFreight.enough">
  64. <el-input placeholder="金额"
  65. v-model.number="form.freeFreight.enough" size="medium"
  66. style="width: 27%">
  67. <template slot="prepend">满</template>
  68. <template slot="append">元包邮</template>
  69. </el-input>
  70. </el-form-item>
  71. </el-form-item>
  72. <el-form-item label="订单满额包邮计算金额">
  73. <el-radio v-model.bool="form.freeFreight.amount_type" :label=0>订单折扣后价格</el-radio>
  74. <el-radio v-model.bool="form.freeFreight.amount_type" :label=1>订单抵扣后价格</el-radio>
  75. <p style="color: RGB(169, 169, 169);">折扣后价格(包含商品满减,会员折扣等);抵扣后价格(积分抵扣,余额抵扣等)。使用订单抵扣后价格, 如果开启积分抵扣运费等抵扣运费方式,满额包邮无效</p>
  76. </el-form-item>
  77. <el-form-item label="不参与地区">
  78. <el-row>
  79. <el-tag
  80. v-for="city in form.freeFreight.cities"
  81. :key="city">
  82. [[city]]
  83. </el-tag>
  84. </el-row>
  85. <el-button @click="centerDialogVisible = true">编辑不参加包邮地区</el-button>
  86. <el-dialog
  87. title="请选择地区"
  88. :visible.sync="centerDialogVisible"
  89. center>
  90. <el-tree
  91. v-loading="loading"
  92. :props="props"
  93. node-key="id"
  94. :default-checked-keys="form.freeFreight.city_ids"
  95. :default-expanded-keys="form.freeFreight.province_ids"
  96. show-checkbox
  97. lazy
  98. accordion
  99. @check-change="checkAreas"
  100. ref="addressTree"
  101. :data="treeData"
  102. :load="loadNode">
  103. </el-tree>
  104. <span slot="footer" class="dialog-footer">
  105. <el-button @click="centerDialogVisible = false">取 消</el-button>
  106. <el-button type="primary" @click="saveAreas">确 定</el-button>
  107. </span>
  108. </el-dialog>
  109. </el-form-item>
  110. <el-form-item label="订单包邮商品推荐">
  111. <el-radio-group v-model="form.freeFreight.postage_included_category_open" style="padding: 10px;">
  112. <el-radio :label="1">开启</el-radio>
  113. <el-radio :label="0">关闭</el-radio>
  114. </el-radio-group>
  115. <p style="color: RGB(169, 169, 169);">开启后, 如果未达到包邮条件, 则在预下单页显示满额包邮商品推荐 (开启后需到包邮分类页面进行分类设置)</p>
  116. </el-form-item>
  117. </el-form>
  118. </div>
  119. </div>
  120. <div class="vue-page">
  121. <div class="vue-center">
  122. <el-button type="primary" @click.native.prevent="onSubmit" v-loading="formLoading">提交</el-button>
  123. <el-button @click="goBack()">返回</el-button>
  124. </div>
  125. </div>
  126. </div>
  127. </div>
  128. <div id="test-vue">
  129. </div>
  130. <script>
  131. var app = new Vue({
  132. el: '#app',
  133. delimiters: ['[[', ']]'],
  134. data() {
  135. // 默认数据
  136. let temp = JSON.parse('{!! $setting !!}');
  137. if (!temp || temp.length === 0) {
  138. temp = {
  139. enoughReduce: [],
  140. freeFreight: {
  141. 'open': false,
  142. 'amount_type': 0,
  143. 'enough': 0,
  144. 'cities': [],
  145. 'city_ids': [],
  146. 'province_ids': [],
  147. postage_included_category_open: 0
  148. },
  149. }
  150. }
  151. //验证规则
  152. let amountRules = {
  153. type: 'number',
  154. min: 0,
  155. max: 999999999,
  156. message: '请输入正确金额',
  157. transform(value) {
  158. console.log(value);
  159. return Number(value)
  160. }
  161. };
  162. let rules = {
  163. 'freeFreight.enough': [amountRules],
  164. };
  165. // for(enoughReduceIndex in temp.enoughReduce){
  166. // rules['enoughReduce.reduce-'+enoughReduceIndex] = [amountRules];
  167. // rules['enoughReduce.enough-'+enoughReduceIndex] = [amountRules];
  168. // }
  169. // console.log(rules);
  170. return {
  171. form: temp,
  172. props: {
  173. label: 'areaname',
  174. children: 'children',
  175. isLeaf: 'isLeaf'
  176. },
  177. loading: false,
  178. formLoading: false,
  179. centerDialogVisible: false,
  180. treeData: [],
  181. rules: rules,
  182. active_name: '1'
  183. }
  184. },
  185. mounted: function () {
  186. console.log(this.form)
  187. },
  188. methods: {
  189. add() {
  190. this.form.enoughReduce.push(
  191. {
  192. 'enough': '',
  193. 'reduce': ''
  194. }
  195. )
  196. },
  197. remove(itemIndex) {
  198. // let i = this.form.enoughReduce.indexOf(item)
  199. // console.log(this.form.enoughReduce,i,item);
  200. this.form.enoughReduce.splice(itemIndex, 1)
  201. },
  202. onSubmit() {
  203. if (this.formLoading) {
  204. return;
  205. }
  206. this.formLoading = true;
  207. this.$refs.form.validate((valid) => {
  208. console.log(valid)
  209. });
  210. this.$http.post("{!! yzWebUrl('enoughReduce.store') !!}", {'setting': this.form}).then(response => {
  211. //console.log(response.data);
  212. // return;
  213. if (response.data.result) {
  214. this.$message({
  215. message: response.data.msg,
  216. type: 'success'
  217. });
  218. } else {
  219. this.$message({
  220. message: response.data.msg,
  221. type: 'error'
  222. });
  223. }
  224. this.formLoading = false;
  225. }, response => {
  226. console.log(response);
  227. });
  228. },
  229. handleClose(area) {
  230. this.form.areas.splice(this.form.areas.indexOf(area), 1);
  231. },
  232. loadNode(node, resolve) {
  233. this.loading = true;
  234. if (!node.data.id) {
  235. //省份
  236. node.data.id = 0;
  237. this.$http.get("{!! yzWebUrl('area.list', ['parent_id'=> 0]) !!}").then(response => {
  238. response.data.data.forEach(function (province) {
  239. province.isLeaf = false;
  240. });
  241. resolve(response.data.data);
  242. this.loading = false;
  243. }, response => {
  244. console.log(response);
  245. });
  246. } else {
  247. //城市
  248. this.$http.get("{!! yzWebUrl('area.list', ['parent_id'=> '']) !!}" + node.data.id).then(response => {
  249. //城市没有子节点
  250. response.data.data.forEach(function (city) {
  251. city.isLeaf = true;
  252. })
  253. resolve(response.data.data);
  254. // 载入数据后,刷新已选中
  255. this.loading = false;
  256. }, response => {
  257. console.log(response);
  258. });
  259. }
  260. },
  261. checkAreas(node, checked, children) {
  262. if (node.isLeaf) {
  263. return;
  264. }
  265. if (checked) {
  266. this.form.freeFreight.province_ids.push(node.id)
  267. }
  268. console.log(node, checked, children, this.form, 123);
  269. },
  270. saveAreas() {
  271. let cities = [];
  272. let city_ids = [];
  273. let province_ids = [];
  274. this.$refs.addressTree.getCheckedNodes().forEach(function (node) {
  275. console.log(node, 'node');
  276. if (node.level == 1) {
  277. province_ids.push(node.id);
  278. } else if (node.level == 2) {
  279. city_ids.push(node.id);
  280. cities.push(node.areaname)
  281. }
  282. });
  283. this.form.freeFreight.city_ids = city_ids;
  284. this.form.freeFreight.cities = cities;
  285. this.form.freeFreight.province_ids = province_ids;
  286. this.centerDialogVisible = false
  287. console.log(this.form, 'this.form');
  288. },
  289. handleClick(val) {
  290. if (val.name == 1) {
  291. window.location.href = `{!! yzWebFullUrl('enoughReduce.index.index') !!}`;
  292. } else if (val.name == 2) {
  293. window.location.href = `{!! yzWebFullUrl('enoughReduce.postage-included-category.index') !!}`;
  294. } else if (val.name == 3) {
  295. window.location.href = `{!! yzWebFullUrl('enoughReduce.full-piece.index') !!}`;
  296. }
  297. }
  298. }
  299. });
  300. </script>
  301. @endsection