edit.blade.php 46 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838
  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. /* css */
  22. .goods-info{display:inline-block;line-height:18px;font-size:13px;padding-left:10px;font-weight:600}
  23. .end-time{display:inline-block;padding-right:30px;font-size: 14px;color: #333;font-weight:400}
  24. .level-box{padding:10px;background:#e9e9e9;width:70%;}
  25. .setting-display{display:inline-block;font-weight:500;font-size:14px;margin-left:30px;}
  26. .title-t{border-bottom:1px solid #e9e9e9;}
  27. .add-tip{font-size:14px;font-weight:600;}
  28. .add-tip span{margin:0 15px;cursor:pointer;color:#409EFF}
  29. .list-title{display:flex;width:100%;background:#f9f9f9;padding:15px 10px;font-weight:900;border:1px solid #e9e9e9;}
  30. .list-title-head{flex:1;display:flex;align-items:center;justify-content: center;}
  31. .list-con{display:flex;flex;align-items:center;justify-content: center;padding:10px 0;border-bottom:1px solid #e9e9e9;}
  32. .list-con-price{flex:1;display:flex;flex;align-items:center;justify-content: center;}
  33. .input1 .el-input-group__append, .el-input-group__prepend {padding: 0 5px;}
  34. .input1 .el-input-group__append {padding: 5;}
  35. </style>
  36. <div class="rightlist">
  37. <div id="app" v-cloak v-loading="loading">
  38. <el-breadcrumb separator-class="el-icon-arrow-right">
  39. <el-breadcrumb-item><a href="{{ yzWebFullUrl('plugin.fight-groups.admin.controllers.fight-groups.index') }}">活动列表</a></el-breadcrumb-item>
  40. <el-breadcrumb-item>添加修改</el-breadcrumb-item>
  41. </el-breadcrumb>
  42. <template>
  43. <el-form ref="form" :model="form" :rules="rules" label-width="15%">
  44. <div v-show="step==1">
  45. <div style="margin-left:15%;">
  46. <div class="tip1">注意:活动创建后,请勿对该商品进行修改规格、下架、删除等操作,否则影响下单购买,活动结束可正常编辑该商品!</div>
  47. </div>
  48. <el-form-item label="活动商品" prop="">
  49. <el-input v-model="has_one_goods.title?'【ID:'+has_one_goods.id+'】'+has_one_goods.title:has_one_goods.title" style="width:70%" disabled></el-input>
  50. <el-button @click="add" type="primary" :disabled="is_edit">选择商品</el-button>
  51. <div v-if="has_one_goods.title">
  52. <img :src="has_one_goods.thumb" style="width:70px;height:70px;">
  53. <div class="goods-info">
  54. <div>[[has_one_goods.title]]</div>
  55. <div>库存:[[has_one_goods.stock]]([[has_one_goods.sku]])</div>
  56. <div>价格:¥[[has_one_goods.price]]</div>
  57. </div>
  58. </div>
  59. </el-form-item>
  60. <el-form-item label="活动标题" prop="title">
  61. <el-input v-model="form.title" style="width:70%" ></el-input>
  62. </el-form-item>
  63. <el-form-item label="开始时间" prop="assessed_at">
  64. <el-row>
  65. <el-col :span="8">
  66. <el-date-picker v-model="form.start_time" type="datetime" format="yyyy-MM-dd HH:mm:ss"
  67. value-format="timestamp" placeholder="选择开始时间" style="width:90%" :disabled="is_edit"></el-date-picker>
  68. </el-col>
  69. <el-col :span="10">
  70. <div class="end-time">结束时间</div>
  71. <el-date-picker v-model="form.end_time" type="datetime" format="yyyy-MM-dd HH:mm:ss"
  72. value-format="timestamp" placeholder="选择结束时间" style="width:70%" :disabled="is_edit"></el-date-picker>
  73. </el-col>
  74. <el-col :span="24">
  75. <div class="tip1">说明:结束时间可不填,若不填商品详情页也不展示结束时间;不填则活动不会自动结束,需手动结束。</div>
  76. </el-col>
  77. </el-row>
  78. </el-form-item>
  79. <el-form-item label="拼团层级" prop="worth">
  80. <!-- 表格start -->
  81. <div class="level-box">
  82. <el-table :data="form.has_many_level" style="width: 100%">
  83. <el-table-column prop="level_num" label="层级" width="80" align="center"></el-table-column>
  84. <el-table-column prop="member_num" label="拼团人数" min-width="100">
  85. <template slot-scope="scope">
  86. <el-input v-model="scope.row.member_num" :disabled="is_edit">
  87. <template slot="append">人</template>
  88. </el-input>
  89. </template>
  90. </el-table-column>
  91. <el-table-column prop="" label="拼团时间(团长开团后,有多少小时可以召集团员参团购买。)" min-width="180" align="center">
  92. <template slot-scope="scope">
  93. <el-input v-model="scope.row.expire_in">
  94. <template slot="append">小时</template>
  95. </el-input>
  96. </template>
  97. </el-table-column>
  98. <el-table-column label="操作" min-width="80" align="center">
  99. <template slot-scope="scope">
  100. <el-button type="danger" @click="delTier(scope.$index)" :disabled="is_edit">删除</el-button>
  101. </template>
  102. </el-table-column>
  103. </el-table>
  104. </div>
  105. <div>
  106. <el-button size="mini" type="primary" icon="el-icon-plus" @click="addTier" :disabled="is_edit">新增一个拼团层级 </el-button>
  107. <div class="tip" style="display:inline-block">最多可设置3个阶梯</div>
  108. </div>
  109. <!-- 表格end -->
  110. </el-form-item>
  111. <el-form-item label="展示设置" prop="menu_show">
  112. <el-checkbox v-model.number="form.menu_show" :true-label="1" :false-label="0">隐藏开关</el-checkbox>
  113. <div class="setting-display" v-show="form.menu_show">
  114. <span>
  115. 当可参的团数达到
  116. <input v-model="form.hide_num" style="height:25px;" />
  117. 时,不显示开团按钮
  118. </span>
  119. </div>
  120. <div class="tip">勾选此选项则手机端商品详情页底部仅展示“去参团”,不展示“一键开团”</div>
  121. </el-form-item>
  122. <el-form-item label="团长福利" prop="is_integral">
  123. <el-checkbox v-model.number="form.is_coupon" :true-label="1" :false-label="0" style="width:100px;margin-right: 30px">团长送优惠券</el-checkbox>
  124. <br>
  125. <div v-if="form.is_coupon">
  126. <div v-for="(item,index) in form.coupon" :key="index" style="display:flex;margin-bottom:5px">
  127. <el-input v-model="item.name" disabled style="width:300px" size="mini">
  128. <template slot="prepend">优惠券名称</template>
  129. </el-input>
  130. <el-input v-model="item.coupon_num" style="width:300px" size="mini">
  131. <template slot="prepend">赠送</template>
  132. <template slot="append">张</template>
  133. </el-input>
  134. <el-button @click="delCoupon(index)" icon="el-icon-close" type="danger" size="mini"></el-button>
  135. </div>
  136. </div>
  137. <el-button size="mini" v-if="form.is_coupon" @click="openCoupon">选择优惠券</el-button>
  138. </el-form-item>
  139. <el-form-item label="老拉新" prop="is_lead">
  140. <el-checkbox v-model.number="form.is_lead" :true-label="1" :false-label="0">开启老拉新</el-checkbox>
  141. <div class="tip1">参与过该活动一次的视为老用户,老用户只允许开团不允许参团。此场景适合设置特价商品,用于鼓励老用户开团,协助店铺拉新。</div>
  142. </el-form-item>
  143. <el-form-item label="拼团设置" prop="setting" v-if="!form.is_lead">
  144. <el-input v-model="form.setting" style="width:70%" ></el-input>
  145. <div class="tip">每人最多参与几次不同的团</div>
  146. </el-form-item>
  147. <h5 class="title-t">
  148. 活动分享
  149. </h5>
  150. <el-form-item label="标题" prop="share_title">
  151. <el-input v-model="form.share_title" style="width:70%" ref="share_title"></el-input>
  152. <div class="add-tip">
  153. 点击添加数据
  154. <span v-for="(item,index) in keywords.share_title" :key="index" @click="addContent('share_title',index,1)">[[item]]</span>
  155. </div>
  156. </el-form-item>
  157. <el-form-item label="商家说明" prop="share_content">
  158. <el-input v-model="form.share_content" type="textarea" rows="5" style="width:70%" ref="share_content"></el-input>
  159. <div class="add-tip">
  160. 点击添加数据
  161. <span v-for="(item,index) in keywords.share_content" :key="index" @click="addContent('share_content',index,2)">[[item]]</span>
  162. </div>
  163. </el-form-item>
  164. <h5 class="title-t">
  165. 活动详情分享
  166. </h5>
  167. <el-form-item label="标题" prop="desc_title">
  168. <el-input v-model="form.desc_title" style="width:70%" ref="desc_title"></el-input>
  169. <div class="add-tip">
  170. 点击添加数据
  171. <span v-for="(item,index) in keywords.desc_title" :key="index" @click="addContent('desc_title',index,3)">[[item]]</span>
  172. </div>
  173. </el-form-item>
  174. <el-form-item label="商家说明" prop="desc_content">
  175. <el-input v-model="form.desc_content" type="textarea" rows="5" ref="desc_content" style="width:70%" ></el-input>
  176. <div class="add-tip">
  177. 点击添加数据
  178. <span v-for="(item,index) in keywords.desc_content" :key="index" @click="addContent('desc_content',index,4)">[[item]]</span>
  179. </div>
  180. </el-form-item>
  181. <el-form-item>
  182. <a href="#">
  183. <el-button type="primary" @click="next">
  184. 下一步
  185. </el-button>
  186. </a>
  187. <el-button @click="goBack()">
  188. 返回列表
  189. </el-button>
  190. </el-form-item>
  191. </div>
  192. <!-- 第二页start -->
  193. <div v-show="step==2">
  194. <div class="list-title">
  195. <div class="list-title-head">规格</div>
  196. <div class="list-title-head">原价(元)</div>
  197. <div class="list-title-head">拼团价格</div>
  198. <div class="list-title-head">活动库存</div>
  199. <div class="list-title-head">
  200. 限购件数
  201. <span style="color:#999;font-weight:400;">(0为不限购)</span>
  202. </div>
  203. </div>
  204. <div class="list-con" v-for="(item,index) in form.has_many_options">
  205. <div class="list-con-price">
  206. [[item.option_title]]
  207. </div>
  208. <div class="list-con-price">
  209. [[item.option_price]]
  210. </div>
  211. <div class="list-title-head" style="flex-wrap: wrap;" class="input1">
  212. <!-- <el-input style="flex:0 0 90%;" v-model="form.stock"></el-input> -->
  213. <div v-for="(item1,index1) in item.has_many_option_level" :key="index1" >
  214. <div class="el-input el-input-group el-input-group--append el-input-group--prepend" style="flex: 0 0 90%; padding: 5px 0px;">
  215. <div class="el-input-group__prepend">[[item1.member_num]]人团:</div>
  216. <input type="text" autocomplete="off" class="el-input__inner" v-model="item1.group_price" :disabled="is_edit">
  217. <div class="el-input-group__append">元</div>
  218. </div>
  219. </div>
  220. </div>
  221. <div class="list-title-head">
  222. <el-input style="flex:0 0 90%;" v-model="item.stock"></el-input>
  223. </div>
  224. <div class="list-title-head">
  225. <input type="text" autocomplete="off" class="el-input__inner" v-model="item.buy_limit">
  226. <!-- <el-input style="flex:0 0 90%;" v-model="item.buy_limit"></el-input> -->
  227. </div>
  228. </div>
  229. <div style="text-align:center;margin-top:22px;">
  230. <el-button type="primary" @click="last">
  231. 上一步
  232. </el-button>
  233. <el-button @click="submitForm('form')">
  234. 保存
  235. </el-button>
  236. </div>
  237. </div>
  238. <!-- 第二页end -->
  239. </el-form>
  240. </template>
  241. <!-- 新增活动弹出框 -->
  242. <el-dialog title="选择商品" :visible.sync="new_url" width="60%">
  243. <div>
  244. <el-form :inline="true" :model="search_goods" ref="search_goods" style="padding:20px 0 0 0;">
  245. <el-form-item label="" prop="">
  246. <el-select v-model="search_goods.category" placeholder="请选择分类" clearable>
  247. <el-option v-for="item in category_list" :key="item.id" :label="item.name" :value="item.id"></el-option>
  248. </el-select>
  249. </el-form-item>
  250. <el-form-item label="" prop="">
  251. <el-input v-model="search_goods.goods_name" placeholder="请输入标题"></el-input>
  252. </el-form-item>
  253. <a href="#">
  254. <el-button type="success" icon="el-icon-search" @click="searchGoods()">搜索</el-button>
  255. </a>
  256. </el-form>
  257. <template>
  258. <!-- 表格start -->
  259. <el-table :data="goods_list" style="width: 100%;overflow-y:auto" max-height="600" v-loading="table_loading">
  260. <el-table-column prop="id" label="ID" align="center"></el-table-column>
  261. <el-table-column prop="id" label="" width="110" align="center">
  262. <template slot-scope="scope">
  263. <img :src="scope.row.thumb" alt="" style="width:50px;height:50px;">
  264. </template>
  265. </el-table-column>
  266. <el-table-column prop="title" label="商品" min-width="120"></el-table-column>
  267. <el-table-column prop="" label="价格" min-width="80" align="center">
  268. <template slot-scope="scope">
  269. <div style="color:red">¥[[scope.row.price]]</div>
  270. </template>
  271. </el-table-column>
  272. <el-table-column prop="stock" label="库存" min-width="80" align="center"></el-table-column>
  273. <el-table-column label="操作" min-width="80" align="center">
  274. <template slot-scope="scope">
  275. <el-button :type="scope.row.has_many_activity_goods_count>=1?'info':'primary'" @click="choose(scope.row,scope.$index)" :disabled="scope.row.has_many_activity_goods_count>=1">选取</el-button>
  276. </template>
  277. </el-table-column>
  278. </el-table>
  279. <!-- 表格end -->
  280. </template>
  281. <!-- 分页 -->
  282. <el-row>
  283. <el-col :span="24" align="right" style="padding:15px 5% 15px 0">
  284. <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>
  285. </el-col>
  286. </el-row>
  287. </div>
  288. <span slot="footer" class="dialog-footer">
  289. <el-button @click="new_url = false">取 消</el-button>
  290. <!-- <el-button type="primary" @click="img_text_url = false">确 定</el-button> -->
  291. </span>
  292. </el-dialog>
  293. <!-- 选择优惠券弹窗 -->
  294. <el-dialog title="选择优惠券" :visible.sync="coupon_show" width="60%">
  295. <div>
  296. <el-input v-model="coupon_keyword" placeholder="请输入优惠券名称" style="width:70%"></el-input>
  297. <el-button type="success" icon="el-icon-search" @click="searchCoupon()">搜索</el-button>
  298. <template>
  299. <!-- 表格start -->
  300. <el-table :data="coupon_list" style="width: 100%;overflow-y:auto;height:450px" v-loading="table_loading">
  301. <el-table-column prop="id" label="ID" align="center"></el-table-column>
  302. <el-table-column prop="name" label="优惠券名称" align="center" min-width="120"></el-table-column>
  303. <el-table-column label="操作" min-width="80" align="center">
  304. <template slot-scope="scope">
  305. <el-button @click="chooseCoupon(scope.row,scope.$index)">选择</el-button>
  306. </template>
  307. </el-table-column>
  308. </el-table>
  309. <!-- 表格end -->
  310. </template>
  311. <!-- 分页 -->
  312. <el-row>
  313. <el-col :span="24" align="right" style="padding:15px 5% 15px 0">
  314. <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>
  315. </el-col>
  316. </el-row>
  317. </div>
  318. <span slot="footer" class="dialog-footer">
  319. <el-button @click="coupon_show = false">取 消</el-button>
  320. <!-- <el-button type="primary" @click="img_text_url = false">确 定</el-button> -->
  321. </span>
  322. </el-dialog>
  323. <!-- 选择门店弹窗 -->
  324. <el-dialog :visible.sync="store_show" width="60%" center title="选择门店">
  325. <div>
  326. <div>
  327. <el-input v-model="store_keyword" style="width:70%"></el-input>
  328. <el-button type="primary" @click="searchStore()">搜索</el-button>
  329. </div>
  330. <el-table :data="store_list" style="width: 100%;height:500px;overflow:auto" v-loading="loading">
  331. <el-table-column label="ID" prop="id" align="center" width="100px"></el-table-column>
  332. <el-table-column label="门店名称">
  333. <template slot-scope="scope">
  334. <div v-if="scope.row" style="display:flex;align-items: center">
  335. <div style="margin-left:10px">[[scope.row.store_name]]</div>
  336. </div>
  337. </template>
  338. </el-table-column>
  339. <el-table-column prop="refund_time" label="操作" align="center" width="320">
  340. <template slot-scope="scope">
  341. <el-button @click="chooseStore(scope.row)">
  342. 选择
  343. </el-button>
  344. </template>
  345. </el-table-column>
  346. </el-table>
  347. </div>
  348. <span slot="footer" class="dialog-footer">
  349. <el-button @click="store_show = false">取 消</el-button>
  350. </span>
  351. </el-dialog>
  352. </div>
  353. <script>
  354. const store_url = '{!! yzWebFullUrl('plugin.fight-groups.admin.controllers.fight-groups.store') !!}';
  355. var app = new Vue({
  356. el:"#app",
  357. delimiters: ['[[', ']]'],
  358. data() {
  359. let data = {!! $data?:'{}' !!};
  360. let keywords = data.keywords;
  361. let love_name = data.love_name?data.love_name:'';
  362. let loves = data.loves?data.loves:false;
  363. let is_open_integral = data.is_open_integral?data.is_open_integral:false;
  364. let store_obj = data.has_one_store_cashier?data.has_one_store_cashier:{};
  365. let form = {
  366. goods_id:"",
  367. goods_name:"",
  368. is_lead:0,
  369. barrage:0,
  370. hide_num:"1",
  371. setting:"",
  372. share_title:'原价¥<<商品最高价>>,现价¥<<商品最低价>>起,参加<<拼团活动名称>>即可享受',
  373. share_content : "活动商品数量有限,先到先得。",
  374. desc_title : "我已经参加了<<团长名称>>发起的拼团。",
  375. desc_content : "凑足<<拼团人数>>人即可享受拼团优惠,我已经参加,你也来吧。",
  376. has_many_level:[],
  377. has_many_options:[],//规格
  378. is_love:0,
  379. love:'',
  380. is_balance:0,
  381. balance:'',
  382. is_coupon:0,
  383. coupon:[],//优惠券
  384. business_type:1,
  385. store_id:0,
  386. ...data,
  387. }
  388. let has_one_goods = {};
  389. let is_edit = false;
  390. if(form.id){
  391. if(form.start_time){
  392. form.start_time = form.start_time*1000;
  393. }
  394. if(form.end_time){
  395. form.end_time = form.end_time*1000;
  396. }
  397. has_one_goods = {
  398. ...form.has_one_goods
  399. }
  400. if(form.status == 1 || form.status == 0){
  401. is_edit = true;
  402. }
  403. }
  404. return{
  405. tab:"all",
  406. new_url:false,//新增活动弹出框
  407. step:1,//下一步
  408. has_option:0,//是否开启规格
  409. search_form:{},
  410. search_goods:{},
  411. category_list:[],
  412. goods_list:[],
  413. list:[],
  414. keywords:keywords,
  415. form:form,
  416. data:data,
  417. // has_many_options:has_many_options,//规格
  418. has_one_goods:has_one_goods,//回显商品信息
  419. is_edit:is_edit,//是否允许编辑
  420. //商品分页
  421. goods_total:0,
  422. goods_per_size:0,
  423. goods_current_page:0,
  424. // 优惠券
  425. coupon_show:false,
  426. coupon_keyword:"",
  427. coupon_list:[],
  428. // choose_coupon_list:[],
  429. // 爱心值
  430. love_name:love_name,
  431. loves:loves,
  432. is_open_integral:is_open_integral,
  433. //门店
  434. store_show:false,
  435. store_list:[],
  436. store_keyword:'',
  437. store_obj:store_obj,
  438. loading:false,
  439. table_loading:false,
  440. rules:{
  441. title:{required: true, message: '请输入活动标题',}
  442. },
  443. }
  444. },
  445. created () {
  446. if(this.has_one_goods&&this.has_one_goods.title){
  447. this.has_one_goods.title = this.escapeHTML(this.has_one_goods.title);
  448. }
  449. if(!this.form.coupon || this.form.coupon == 'Array') {
  450. this.form.coupon = [];
  451. }
  452. },
  453. methods: {
  454. add() {
  455. var that = this;
  456. that.new_url = true;
  457. if(that.category_list.length==0){
  458. that.getCategory();
  459. }
  460. if(that.goods_list.length==0){
  461. this.search_goods = {};
  462. let json = this.search_goods;
  463. that.getGoodsInfo(json);
  464. }
  465. },
  466. //获得分类
  467. getCategory(){
  468. var that = this;
  469. that.$http.get("{!! yzWebFullUrl('plugin.fight-groups.admin.controllers.fight-groups-store.get-category') !!}",{}).then(response => {
  470. console.log(response);
  471. if(response.data.result==1){
  472. that.category_list = response.data.data;
  473. that.category_list.unshift({id:0,name:'全部分类'})
  474. }
  475. else{
  476. that.$message.error(response.data);
  477. }
  478. }),function(res){
  479. console.log(res);
  480. };
  481. },
  482. //获得商品列表
  483. getGoodsInfo(json){
  484. var that = this;
  485. that.table_loading = true;
  486. console.log(json);
  487. that.$http.post("{!! yzWebFullUrl('plugin.fight-groups.admin.controllers.fight-groups-store.search-goods') !!}",json).then(response => {
  488. console.log(response);
  489. if(response.data.result==1){
  490. that.goods_total = response.data.data.total;
  491. that.goods_per_size = response.data.data.per_page;
  492. that.goods_current_page = response.data.data.current_page;
  493. that.goods_list = response.data.data.data;
  494. this.goods_list.forEach((item,index) => {
  495. item.title = this.escapeHTML(item.title)
  496. });
  497. }
  498. else{
  499. that.$message.error(response.data);
  500. }
  501. console.log(that.goods_list);
  502. that.table_loading = false;
  503. }),function(res){
  504. console.log(res);
  505. that.table_loading = false;
  506. };
  507. },
  508. //搜索商品
  509. searchGoods() {
  510. console.log(this.search_goods);
  511. this.getGoodsInfo(this.search_goods)
  512. },
  513. // 商品分页
  514. currentChangeGoods(page) {
  515. let json = {category:this.search_goods.category,goods_name:this.search_goods.goods_name,page:page}
  516. this.getGoodsInfo(json)
  517. },
  518. // 选择商品
  519. choose(row,index) {
  520. this.new_url = false,
  521. this.has_one_goods.title = this.goods_list[index].title;
  522. this.has_one_goods.id = this.goods_list[index].id;
  523. this.has_one_goods.thumb = this.goods_list[index].thumb;
  524. this.has_one_goods.price = this.goods_list[index].price;
  525. this.has_one_goods.stock = this.goods_list[index].stock;
  526. this.has_one_goods.sku = this.goods_list[index].sku;
  527. this.has_option = this.goods_list[index].has_option;//是否开启规格
  528. if(this.has_option){
  529. this.form.has_many_options = this.goods_list[index].has_many_options;//规格
  530. }
  531. else {
  532. this.form.has_many_options = [];
  533. }
  534. // 规格价格数据处理
  535. // if(this.form.has_many_options.length>0) {
  536. if(this.has_option) {
  537. this.form.has_many_options.forEach((item,index) => {
  538. this.form.has_many_options[index].option_price = item.product_price;
  539. this.form.has_many_options[index].option_id = item.id;
  540. this.form.has_many_options[index].option_title = item.title;
  541. this.form.has_many_options[index].has_many_option_level = []
  542. this.form.has_many_options[index].buy_limit = "0"
  543. this.form.has_many_options[index].stock = item.stock;
  544. })
  545. }
  546. else {
  547. this.form.has_many_options.push({option_title:'单规格',option_price:this.goods_list[index].price,stock:this.goods_list[index].stock,buy_limit:"0",has_many_option_level:[]})
  548. }
  549. console.log(this.form.has_many_options);
  550. this.form.goods_id = this.has_one_goods.id;
  551. this.form.goods_name = this.has_one_goods.title;
  552. },
  553. // 添加关键词
  554. addContent(name,index,x) {
  555. console.log(this.$refs[name]);
  556. let ref = this.$refs[name];
  557. let words = "";
  558. if(x==1){
  559. words ="<<" + this.keywords.share_title[index] + ">>";
  560. }
  561. if(x==2){
  562. words ="<<" + this.keywords.share_content[index] + ">>";
  563. }
  564. if(x==3){
  565. words ="<<" + this.keywords.desc_title[index] + ">>";
  566. }
  567. if(x==4){
  568. words ="<<" + this.keywords.desc_content[index] + ">>";
  569. }
  570. console.log(words)
  571. this.insertInputTxt(name,words,x)
  572. },
  573. insertInputTxt(ref,words,x) {
  574. let name = "";
  575. if(x==1||x==3){
  576. name = this.$refs[ref].$refs.input;
  577. }
  578. if(x==2||x==4){
  579. name = this.$refs[ref].$refs.textarea;
  580. }
  581. var startPos = name.selectionStart;
  582. console.log(startPos);
  583. var endPos = name.selectionEnd;
  584. if (startPos === undefined || endPos === undefined) return
  585. var txt = name.value;
  586. var result = txt.substring(0, startPos) + words + txt.substring(endPos)
  587. name.value = result;
  588. name.focus();
  589. name.selectionStart = startPos + words.length;
  590. name.selectionEnd = startPos + words.length;
  591. console.log(name.value)
  592. this.form[ref] = name.value;
  593. },
  594. // 下一步
  595. next() {
  596. console.log(this.form);
  597. if(!this.form.title) {
  598. this.$message.error("活动标题不能为空!")
  599. return false;
  600. }
  601. if(!this.has_one_goods.title) {
  602. this.$message.error("请选择活动商品!")
  603. return false;
  604. }
  605. if(this.form.has_many_level.length == 0) {
  606. this.$message.error("层级不能为空!")
  607. return false;
  608. }
  609. if(!this.form.start_time) {
  610. this.$message.error("开始时间不能为空!")
  611. return false;
  612. }
  613. if(this.form.end_time && this.form.start_time >= this.form.end_time) {
  614. this.$message.error("开始时间不能大于或者等于结束时间!")
  615. return false;
  616. }
  617. if(this.form.menu_show==1){
  618. if(this.form.hide_num<1) {
  619. this.$message.error("展示设置->可参的团数不能少于1")
  620. return false;
  621. }
  622. }
  623. this.form.has_many_level.some(item => {
  624. if(!item.member_num || !item.expire_in){
  625. this.$message.error("层级信息不完成!");
  626. return true;
  627. }
  628. else if(item.member_num == 1){
  629. this.$message.error("拼团人数不能为1");
  630. return true;
  631. }
  632. else {
  633. this.step = 2;
  634. }
  635. console.log(this.step)
  636. });
  637. // 添加层级价格
  638. if(!this.form.id){
  639. if(this.has_option){
  640. for(let i=0;i<this.form.has_many_options.length;i++) {
  641. this.form.has_many_options[i].has_many_option_level = [];
  642. }
  643. for(let i=0;i<this.form.has_many_options.length;i++) {
  644. for(let j=0;j<this.form.has_many_level.length;j++) {
  645. this.form.has_many_options[i].has_many_option_level.push({group_price:"",member_num:this.form.has_many_level[j].member_num})
  646. }
  647. }
  648. console.log(this.form);
  649. }
  650. else {
  651. this.form.has_many_options[0].has_many_option_level = [];
  652. for(let j=0;j<this.form.has_many_level.length;j++) {
  653. this.form.has_many_options[0].has_many_option_level.push({group_price:"0",member_num:this.form.has_many_level[j].member_num})
  654. }
  655. }
  656. }
  657. },
  658. last() {
  659. this.step = 1;
  660. },
  661. goBack() {
  662. history.go(-1);
  663. },
  664. // 新增层级
  665. addTier() {
  666. if(this.form.has_many_level.length>=3){
  667. this.$message.error("最多可设置3个阶梯");
  668. return;
  669. }
  670. this.form.has_many_level.push({
  671. level_num : this.form.has_many_level.length+1,
  672. member_num : "",
  673. expire_in : "",
  674. })
  675. },
  676. delTier(index) {
  677. this.form.has_many_level.splice(index,1);
  678. // 层级重新排序
  679. this.form.has_many_level.forEach((item,index1) => {
  680. item.level_num = index1+1;
  681. })
  682. },
  683. // 打开选择优惠券
  684. openCoupon() {
  685. this.coupon_show = true;
  686. },
  687. // 搜索优惠券
  688. searchCoupon() {
  689. var that = this;
  690. that.table_loading = true;
  691. that.$http.post("{!! yzWebFullUrl('plugin.fight-groups.admin.controllers.fight-groups-store.coupon') !!}",{keyword:that.coupon_keyword}).then(response => {
  692. console.log(response);
  693. if(response.data.result==1){
  694. that.coupon_list = response.data.data;
  695. }
  696. else{
  697. that.$message.error(response.data);
  698. }
  699. console.log(that.goods_list);
  700. that.table_loading = false;
  701. }),function(res){
  702. console.log(res);
  703. that.table_loading = false;
  704. };
  705. },
  706. chooseCoupon(item,index) {
  707. let is_true = true;
  708. this.form.coupon.some((item1,index1) => {
  709. if(item1.id == item.id) {
  710. is_true = false;
  711. this.$message.error("请勿重复选择优惠券!");
  712. return true;
  713. }
  714. })
  715. if(is_true) {
  716. this.form.coupon.push({id:item.id,name:item.name,coupon_num:'1'});
  717. }
  718. },
  719. // 删除优惠券
  720. delCoupon(index) {
  721. this.form.coupon.splice(index,1);
  722. },
  723. addStore(){
  724. this.store_show = true;
  725. },
  726. searchStore() {
  727. let that = this;
  728. this.loading = true;
  729. this.$http.post(store_url,{keyword:this.store_keyword}).then(response => {
  730. if (response.data.result) {
  731. console.log(response.data.data)
  732. this.store_list = response.data.data;
  733. } else {
  734. that.$message.error(response.data);
  735. }
  736. this.loading = false;
  737. },response => {
  738. this.loading = false;
  739. });
  740. },
  741. chooseStore(item) {
  742. this.store_obj = item;
  743. console.log(this.store_obj )
  744. // this.store_ids.push(item.id)
  745. // this.store_names.push(item.store_name)
  746. // console.log(this.store_names)
  747. },
  748. closeStore(index) {
  749. console.log(index)
  750. this.store_ids.splice(index,1)
  751. this.store_names.splice(index,1)
  752. },
  753. submitForm(){
  754. var that = this;
  755. that.loading = true;
  756. if(this.form.start_time) {
  757. this.form.start_time = this.form.start_time/1000;
  758. }
  759. if(this.form.end_time) {
  760. this.form.end_time = this.form.end_time/1000;
  761. }
  762. delete(this.form.goods_name)
  763. delete(this.form.loves)
  764. delete(this.form.love_name)
  765. let josn = that.form;
  766. josn.store_id = that.store_obj.id;
  767. that.$http.post("{!! yzWebFullUrl('plugin.fight-groups.admin.controllers.fight-groups-store.save') !!}",{form_data:josn}).then(response => {
  768. console.log(response);
  769. if(response.data.result==1){
  770. that.$message.success("保存成功!");
  771. window.location.href='{!! yzWebFullUrl('plugin.fight-groups.admin.controllers.fight-groups-store.index') !!}';
  772. }
  773. else{
  774. //that.$message.error(response.data.msg);
  775. if(this.form.start_time) {
  776. this.form.start_time = this.form.start_time*1000;
  777. }
  778. if(this.form.end_time) {
  779. this.form.end_time = this.form.end_time*1000;
  780. }
  781. }
  782. that.loading = false;
  783. }),function(res){
  784. that.loading = false;
  785. if(this.form.start_time) {
  786. this.form.start_time = this.form.start_time*1000;
  787. }
  788. if(this.form.end_time) {
  789. this.form.end_time = this.form.end_time*1000;
  790. }
  791. console.log(res);
  792. };
  793. },
  794. // 字符转义
  795. escapeHTML(a) {
  796. a = "" + a;
  797. return a.replace(/&amp;/g, "&").replace(/&lt;/g, "<").replace(/&gt;/g, ">").replace(/&quot;/g, "\"").replace(/&apos;/g, "'");;
  798. },
  799. },
  800. })
  801. </script>
  802. @endsection