create.blade.php 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474
  1. @extends('layouts.base')
  2. @section('title', "活动创建")
  3. @section('content')
  4. <style>
  5. .rightlist #app .rightlist-head{line-height:50px;padding:15px 0;}
  6. .rightlist #app{margin-left:30px;}
  7. .rightlist #app .el-breadcrumb{padding:30px 0;font-size:16px;}
  8. .el-form-item__label{padding-right:30px;}
  9. .tip{font-size:12px;color:#999;font-weight:500}
  10. .rightlist-head-con{padding-right:20px;font-size:16px;color:#888;}
  11. /* .rightlist-head-con{float:left;padding-right:20px;font-size:16px;color:#888;} */
  12. .el-tag{font-weight:700;font-size:15px;margin-bottom:30px;}
  13. .el-icon-edit{font-size:16px;padding:0 15px;color:#409EFF;cursor: pointer;}
  14. /* 滑块选择小白点 */
  15. .el-switch.is-checked .el-switch__core::after {left: 100%;margin-left: -17px;}
  16. .el-switch__core::after {content: "";position: absolute;top: 1px;left: 1px;border-radius: 100%;transition: all .3s;width: 16px;height: 16px;background-color: #fff;}
  17. .tip1{font-size:12px;color:red;font-weight:500}
  18. [v-cloak]{
  19. display:none;
  20. }
  21. </style>
  22. <div class="rightlist">
  23. <div id="app" v-cloak>
  24. <el-breadcrumb separator-class="el-icon-arrow-right">
  25. <el-breadcrumb-item><a href="{{ yzWebFullUrl('plugin.fight-groups.admin.controllers.fight-groups.index') }}">活动列表</a></el-breadcrumb-item>
  26. <el-breadcrumb-item>添加修改</el-breadcrumb-item>
  27. </el-breadcrumb>
  28. <template>
  29. <el-form ref="form" :model="form" :rules="rules" label-width="15%">
  30. <div v-show="step==1">
  31. <el-form-item label="活动商品" prop="has_one_goods.title">
  32. <el-input v-model="form.has_one_goods.title" style="width:70%" disabled></el-input>
  33. <el-button @click="add" type="primary">选择商品</el-button>
  34. <div v-if="form.has_one_goods.title">
  35. <img :src="form.has_one_goods.title.thumb" style="width:70px;height:70px;">
  36. <div style="display:inline-block;line-height:18px;font-size:13px;padding-left:10px;font-weight:600">
  37. <div>[[form.has_one_goods.title]]</div>
  38. <div>库存:[[form.has_one_goods.sku]]</div>
  39. <div>价格:¥[[form.has_one_goods.price]]</div>
  40. </div>
  41. </div>
  42. </el-form-item>
  43. <el-form-item label="活动标题" prop="title">
  44. <el-input v-model="form.title" style="width:70%" ></el-input>
  45. </el-form-item>
  46. <el-form-item label="开始时间" prop="assessed_at">
  47. <el-row>
  48. <el-col :span="8">
  49. <el-date-picker v-model="form.start_time" type="datetime" format="yyyy-MM-dd hh:mm:ss"
  50. value-format="timestamp" placeholder="选择开始时间" style="width:90%"></el-date-picker>
  51. </el-col>
  52. <el-col :span="10">
  53. <div style="display:inline-block;padding-right:30px;font-size: 14px;color: #333;font-weight:400">结束时间</div>
  54. <el-date-picker v-model="form.end_time" type="datetime" format="yyyy-MM-dd hh:mm:ss"
  55. value-format="timestamp" placeholder="选择结束时间" style="width:70%"></el-date-picker>
  56. </el-col>
  57. <el-col :span="24">
  58. <div class="tip1">说明:结束时间可不填,若不填商品详情页也不展示结束时间;不填则活动不会自动结束,需手动结束。</div>
  59. </el-col>
  60. </el-row>
  61. </el-form-item>
  62. <el-form-item label="商家说明" prop="note">
  63. <el-input v-model="form.note" type="textarea" rows="5" style="width:70%" ></el-input>
  64. </el-form-item>
  65. <el-form-item label="拼团层级" prop="worth">
  66. <!-- 表格start -->
  67. <div style="padding:10px;background:#e9e9e9;width:70%;">
  68. <el-table :data="form.has_many_level" style="width: 100%" v-loading="table_loading">
  69. <el-table-column prop="level_num" label="层级" width="80" align="center"></el-table-column>
  70. <el-table-column prop="member_num" label="拼团人数" min-width="100">
  71. <template slot-scope="scope">
  72. <el-input v-model="scope.row.member_num">
  73. <template slot="append">人</template>
  74. </el-input>
  75. </template>
  76. </el-table-column>
  77. <el-table-column prop="" label="拼团时间(团长开团后,有多少小时可以召集团员参团购买。)" min-width="180" align="center">
  78. <template slot-scope="scope">
  79. <el-input v-model="scope.row.expire_in">
  80. <template slot="append">小时</template>
  81. </el-input>
  82. </template>
  83. </el-table-column>
  84. <el-table-column label="操作" min-width="80" align="center">
  85. <template slot-scope="scope">
  86. <el-button type="danger" @click="delTier(scope.$index)">删除</el-button>
  87. </template>
  88. </el-table-column>
  89. </el-table>
  90. </div>
  91. <div>
  92. <el-button size="mini" type="primary" icon="el-icon-plus" @click="addTier">新增一个拼团层级 </el-button>
  93. <div class="tip" style="display:inline-block">最多可设置3个阶梯</div>
  94. </div>
  95. <!-- 表格end -->
  96. </el-form-item>
  97. <el-form-item label="展示设置" prop="menu_show">
  98. <el-checkbox v-model.number="form.menu_show" :true-label="1" :false-label="0">隐藏开关</el-checkbox>
  99. <div style="display:inline-block;font-weight:500;font-size:14px;margin-left:30px;" v-show="form.menu_show">
  100. <span>
  101. 当可参的团数达到
  102. <input v-model="form.show_setting_number" style="height:25px;" />
  103. 时,不显示开团按钮
  104. </span>
  105. </div>
  106. <div class="tip">勾选此选项则手机端商品详情页底部仅展示“去参团”,不展示“一键开团”</div>
  107. </el-form-item>
  108. <el-form-item label="团长福利" prop="is_integral">
  109. <el-checkbox v-model.number="form.is_integral" :true-label="1" :false-label="0">团长送积分</el-checkbox>
  110. <div style="display:inline-block;font-weight:500;font-size:14px;margin-left:30px;" v-show="form.is_integral">
  111. <span>
  112. <input v-model="form.integral_num" style="height:25px;" />
  113. </span>
  114. </div>
  115. </el-form-item>
  116. <el-form-item label="老拉新" prop="is_lead">
  117. <el-checkbox v-model.number="form.is_lead" :true-label="1" :false-label="0">开启老拉新</el-checkbox>
  118. <div class="tip1">参与过该活动一次的视为老用户,老用户只允许开团不允许参团。此场景适合设置特价商品,用于鼓励老用户开团,协助店铺拉新。</div>
  119. </el-form-item>
  120. <el-form-item label="拼团设置" prop="setting" v-if="!form.is_lead">
  121. <el-input v-model="form.setting" style="width:70%" ></el-input>
  122. <div class="tip">每人最多参与几次不同的团</div>
  123. </el-form-item>
  124. <el-form-item label="弹幕设置" prop="barrage">
  125. <el-radio v-model.munber="form.barrage" :label="1" >开启</el-radio>
  126. <el-radio v-model.munber="form.barrage" :label="0" >关闭</el-radio>
  127. </el-form-item>
  128. <h5 style="border-bottom:1px solid #e9e9e9;">
  129. 活动分享
  130. </h5>
  131. <el-form-item label="标题" prop="share_title">
  132. <el-input v-model="form.share_title" style="width:70%" ></el-input>
  133. <div style="font-size:14px;font-weight:600;">
  134. 点击添加数据
  135. <a href="#" style="margin:0 15px;">拼团活动名称</a>
  136. <a href="#" style="margin:0 15px;">拼团活动名称</a>
  137. <a href="#" style="margin:0 15px;">拼团活动名称</a>
  138. </div>
  139. </el-form-item>
  140. <el-form-item label="商家说明" prop="share_content">
  141. <el-input v-model="form.share_content" type="textarea" rows="5" style="width:70%" ></el-input>
  142. <div style="font-size:14px;font-weight:600;">
  143. 点击添加数据
  144. <a href="#" style="margin:0 15px;">拼团活动名称</a>
  145. <a href="#" style="margin:0 15px;">拼团活动名称</a>
  146. <a href="#" style="margin:0 15px;">拼团活动名称</a>
  147. </div>
  148. </el-form-item>
  149. <h5 style="border-bottom:1px solid #e9e9e9;">
  150. 活动详情分享
  151. </h5>
  152. <el-form-item label="标题" prop="desc_title">
  153. <el-input v-model="form.desc_title" style="width:70%" ></el-input>
  154. <div style="font-size:14px;font-weight:600;">
  155. 点击添加数据
  156. <a href="#" style="margin:0 15px;">拼团活动名称</a>
  157. <a href="#" style="margin:0 15px;">拼团活动名称</a>
  158. <a href="#" style="margin:0 15px;">拼团活动名称</a>
  159. </div>
  160. </el-form-item>
  161. <el-form-item label="商家说明" prop="desc_content">
  162. <el-input v-model="form.desc_content" type="textarea" rows="5" style="width:70%" ></el-input>
  163. <div style="font-size:14px;font-weight:600;">
  164. 点击添加数据
  165. <a href="#" style="margin:0 15px;">拼团活动名称</a>
  166. <a href="#" style="margin:0 15px;">拼团活动名称</a>
  167. <a href="#" style="margin:0 15px;">拼团活动名称</a>
  168. </div>
  169. </el-form-item>
  170. <el-form-item>
  171. <a href="#">
  172. <el-button type="success" @click="next">
  173. 下一步
  174. </el-button>
  175. </a>
  176. <el-button @click="goBack()">
  177. 返回列表
  178. </el-button>
  179. </el-form-item>
  180. </div>
  181. <!-- 第二页start -->
  182. <div v-show="step==2">
  183. <div class="list-title" style="display:flex;width:100%;background:#f9f9f9;padding:15px 10px;font-weight:900;border:1px solid #e9e9e9;">
  184. <div style="flex:1;display:flex;align-items:center;justify-content: center;">原价(元)</div>
  185. <div style="flex:1;display:flex;align-items:center;justify-content: center;">拼团价格</div>
  186. <div style="flex:1;display:flex;align-items:center;justify-content: center;">活动库存</div>
  187. <div style="flex:1;display:flex;align-items:center;justify-content: center;">限购件数</div>
  188. </div>
  189. <div style="display:flex;flex;align-items:center;justify-content: center;padding:10px 0;border-bottom:1px solid #e9e9e9;">
  190. <div style="flex:1;display:flex;flex;align-items:center;justify-content: center;">
  191. [[form.has_one_goods.price]]
  192. </div>
  193. <div style="flex:1;display:flex;align-items:center;justify-content: center; flex-wrap: wrap;">
  194. <el-input v-for="(item,index) in form.has_many_level" :key="index" v-model="form.has_many_level[index].group_price" style="flex:0 0 90%;padding:5px 0">
  195. <template slot="prepend">[[item.member_num]]人团:</template>
  196. <template slot="append">元</template>
  197. </el-input>
  198. </div>
  199. <div style="flex:1;display:flex;align-items:center;justify-content: center;">
  200. <el-input style="flex:0 0 90%;" v-model="form.stock"></el-input>
  201. </div>
  202. <div style="flex:1;display:flex;align-items:center;justify-content: center;">
  203. <el-input style="flex:0 0 90%;" v-model="form.buy_limit"></el-input>
  204. </div>
  205. </div>
  206. <div style="text-align:center;margin-top:22px;">
  207. <a href="#">
  208. <el-button type="primary">
  209. 上一步
  210. </el-button>
  211. </a>
  212. <el-button @click="submitForm('form')">
  213. 保存
  214. </el-button>
  215. </div>
  216. </div>
  217. <!-- 第二页end -->
  218. </el-form>
  219. </template>
  220. <!-- 新增活动弹出框 -->
  221. <el-dialog title="选择商品" :visible.sync="new_url" width="60%" v-loading="dialog_loading">
  222. <div>
  223. <el-form :inline="true" :model="search_goods" ref="search_goods" style="padding:20px 0 0 0;">
  224. <el-form-item label="" prop="">
  225. <el-select v-model="search_form.category" placeholder="请选择分类" clearable>
  226. <el-option v-for="item in category_list" :key="item.id" :label="item.name" :value="item.id"></el-option>
  227. </el-select>
  228. </el-form-item>
  229. <el-form-item label="" prop="">
  230. <el-input v-model="search_goods.goods_name" placeholder="请输入标题"></el-input>
  231. </el-form-item>
  232. <a href="#">
  233. <el-button type="success" icon="el-icon-search" @click="searchGoods()">搜索</el-button>
  234. </a>
  235. </el-form>
  236. <template>
  237. <!-- 表格start -->
  238. <el-table :data="goods_list" style="width: 100%;height:600px;overflow-y:auto" v-loading="table_loading">
  239. <el-table-column prop="id" label="" width="110" align="center">
  240. <template slot-scope="scope">
  241. <img :src="scope.row.thumb" alt="" style="width:50px;height:50px;">
  242. </template>
  243. </el-table-column>
  244. <el-table-column prop="title" label="商品" min-width="120"></el-table-column>
  245. <el-table-column prop="" label="价格" min-width="80" align="center">
  246. <template slot-scope="scope">
  247. <div style="color:red">¥[[scope.row.price]]</div>
  248. </template>
  249. </el-table-column>
  250. <el-table-column prop="stock" label="库存" min-width="80" align="center"></el-table-column>
  251. <el-table-column label="操作" min-width="80" align="center">
  252. <template slot-scope="scope">
  253. <el-button type="primary" @click="choose(scope.row,scope.$index)">选取</el-button>
  254. </template>
  255. </el-table-column>
  256. </el-table>
  257. <!-- 表格end -->
  258. </template>
  259. <!-- 分页 -->
  260. <el-row>
  261. <el-col :span="24" align="right" style="padding:15px 5% 15px 0">
  262. <el-pagination layout="prev, pager, next" @current-change="currentChangeGoods" :current-page="goods_current_page" :total="goods_total" :page-size="goods_per_size" background v-loading="loading"></el-pagination>
  263. </el-col>
  264. </el-row>
  265. </div>
  266. <span slot="footer" class="dialog-footer">
  267. <el-button @click="new_url = false">取 消</el-button>
  268. <!-- <el-button type="primary" @click="img_text_url = false">确 定</el-button> -->
  269. </span>
  270. </el-dialog>
  271. </div>
  272. <script>
  273. var app = new Vue({
  274. el:"#app",
  275. delimiters: ['[[', ']]'],
  276. data() {
  277. let data = {!! $data?:'{}' !!};
  278. console.log(data);
  279. return{
  280. tab:"all",
  281. new_url:false,//新增活动弹出框
  282. step:1,//下一步
  283. search_form:{},
  284. search_goods:{},
  285. category_list:[],
  286. goods_list:[],
  287. list:[],
  288. form:{
  289. has_one_goods:{},
  290. has_many_level:[],
  291. },
  292. //商品分页
  293. goods_total:0,
  294. goods_per_size:0,
  295. goods_current_page:0,
  296. loading:false,
  297. dialog_loading:false,
  298. table_loading:false,
  299. rules:{
  300. title:{required: true, message: '请输入活动标题',}
  301. },
  302. }
  303. },
  304. methods: {
  305. add() {
  306. var that = this;
  307. that.new_url = true;
  308. if(that.category_list.length==0){
  309. that.getCategory();
  310. }
  311. if(that.goods_list.length==0){
  312. this.search_goods = {};
  313. let json = this.search_goods;
  314. that.getGoodsInfo(json);
  315. }
  316. },
  317. //获得分类
  318. getCategory(){
  319. var that = this;
  320. that.$http.get("{!! yzWebFullUrl('plugin.fight-groups.admin.controllers.fight-groups.get-category') !!}",{}).then(response => {
  321. console.log(response);
  322. if(response.data.result==1){
  323. that.category_list = response.data.data;
  324. }
  325. else{
  326. that.$message.error(response.data);
  327. }
  328. }),function(res){
  329. console.log(res);
  330. };
  331. },
  332. //获得商品列表
  333. getGoodsInfo(json){
  334. var that = this;
  335. that.table_loading = true;
  336. that.$http.post("{!! yzWebFullUrl('plugin.fight-groups.admin.controllers.fight-groups.search-goods') !!}",json).then(response => {
  337. console.log(response);
  338. if(response.data.result==1){
  339. that.goods_total = response.data.data.total;
  340. that.goods_per_size = response.data.data.per_page;
  341. that.goods_current_page = response.data.data.current_page;
  342. that.goods_list = response.data.data.data;
  343. }
  344. else{
  345. that.$message.error(response.data);
  346. }
  347. console.log(that.goods_list);
  348. that.table_loading = false;
  349. }),function(res){
  350. console.log(res);
  351. that.table_loading = false;
  352. };
  353. },
  354. //搜索商品
  355. searchGoods() {
  356. console.log(this.search_goods);
  357. this.getGoodsInfo(this.search_goods)
  358. },
  359. // 商品分页
  360. currentChangeGoods() {
  361. },
  362. // 选择商品
  363. choose(row,index) {
  364. this.new_url = false,
  365. this.form.has_one_goods.title = this.goods_list[index].title;
  366. this.form.has_one_goods.id = this.goods_list[index].id;
  367. this.form.has_one_goods.thumb = this.goods_list[index].thumb;
  368. this.form.has_one_goods.price = this.goods_list[index].price;
  369. this.form.has_one_goods.sku = this.goods_list[index].sku;
  370. console.log(this.form)
  371. },
  372. // 下一步
  373. next() {
  374. console.log(this.form);
  375. if(!this.form.title) {
  376. this.$message.error("活动标题不能为空!")
  377. return false;
  378. }
  379. if(!this.form.has_one_goods.title) {
  380. this.$message.error("请选择活动商品!")
  381. return false;
  382. }
  383. if(this.form.has_many_level.length == 0) {
  384. this.$message.error("层级不能为空!")
  385. return false;
  386. }
  387. if(!this.form.start_time || !this.form.end_time) {
  388. this.$message.error("时间不能为空!")
  389. return false;
  390. }
  391. if(this.form.start_time >= this.form.end_time) {
  392. this.$message.error("开始时间不能大于或者等于结束时间!")
  393. return false;
  394. }
  395. this.form.has_many_level.some(item => {
  396. if(!item.member_num || !item.expire_in){
  397. this.$message.error("层级信息不完成!");
  398. return true;
  399. }
  400. else if(item.member_num == 1){
  401. this.$message.error("拼团人数不能为1");
  402. return true;
  403. }
  404. else {
  405. this.step = 2;
  406. }
  407. });
  408. },
  409. goBack() {
  410. history.go(-1);
  411. },
  412. // 新增层级
  413. addTier() {
  414. if(this.form.has_many_level.length>=3){
  415. this.$message.error("最多可设置3个阶梯");
  416. return;
  417. }
  418. this.form.has_many_level.push({
  419. level_num : this.form.has_many_level.length+1,
  420. member_num : "",
  421. expire_in : "",
  422. group_price : "",
  423. })
  424. },
  425. delTier(index) {
  426. this.form.has_many_level.splice(index,1);
  427. // 层级重新排序
  428. this.form.has_many_level.forEach((item,index1) => {
  429. item.level_num = index1+1;
  430. })
  431. },
  432. submitForm(){
  433. var that = this;
  434. that.all_loading = true;
  435. console.log(this.data);
  436. that.$http.post("{!! yzWebFullUrl('plugin.wechat.admin.reply.controller.default-reply.add') !!}",{keywords_id:that.data.id}).then(response => {
  437. console.log(response);
  438. if(response.data.result==1){
  439. that.keyword_list = response.data.data;
  440. that.$message.success("保存成功!");
  441. window.location.href='{!! yzWebFullUrl('plugin.wechat.admin.reply.controller.default-reply.index') !!}';
  442. }
  443. else{
  444. that.$message.error(response.data);
  445. }
  446. that.all_loading = false;
  447. }),function(res){
  448. console.log(res);
  449. that.all_loading = false;
  450. };
  451. },
  452. },
  453. })
  454. </script>
  455. @endsection