edit.vue 13KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412
  1. <template>
  2. <div class="subPage">
  3. <form class="mainForm">
  4. <h1 style="font-size:22px;">{{isEdit === 0 ? '新建' : '编辑'}}{{type === 'drink' ? '饮品优惠券' : '课程优惠券'}}</h1>
  5. <ul>
  6. <li class="flex-h">
  7. <span>选择案场:</span>
  8. <div class="flex-item">
  9. <div style="width:50%">
  10. <el-select v-model="postData.CaseId" placeholder="请选择">
  11. <el-option
  12. v-for="item in cases"
  13. :key="item.CaseId"
  14. :label="item.CaseName"
  15. :value="item.CaseId">
  16. </el-option>
  17. </el-select>
  18. </div>
  19. </div>
  20. </li>
  21. <li class="flex-h">
  22. <span>券图片:</span>
  23. <div class="flex-item">
  24. <div>
  25. <el-upload
  26. class="avatar-uploader"
  27. :action='$api.file.image.url'
  28. :show-file-list="false"
  29. :on-success="handleAvatarSuccess">
  30. <img v-if="postData.Img" :src="postData.Img" class="avatar">
  31. <i v-else class="el-icon-plus avatar-uploader-icon"></i>
  32. </el-upload>
  33. </div>
  34. </div>
  35. </li>
  36. <li class="flex-h">
  37. <span>券名称:</span>
  38. <div class="flex-item">
  39. <div style="width:200px;">
  40. <el-input
  41. placeholder="请输入"
  42. v-model="postData.Name"
  43. clearable>
  44. </el-input>
  45. </div>
  46. </div>
  47. </li>
  48. <li class="flex-h">
  49. <span>券类型:</span>
  50. <div class="flex-item">
  51. <div style="width:50%">
  52. <el-select v-model="postData.Type" placeholder="请选择">
  53. <el-option
  54. v-for="item in TypeList"
  55. :key="item.id"
  56. :label="item.name"
  57. :value="item.id">
  58. </el-option>
  59. </el-select>
  60. </div>
  61. </div>
  62. </li>
  63. <li class="flex-h">
  64. <span>券价格:</span>
  65. <div class="flex-item">
  66. <div style="width:200px;">
  67. <el-input
  68. placeholder="请输入"
  69. v-model="postData.Price"
  70. clearable>
  71. </el-input>
  72. </div>
  73. </div>
  74. </li>
  75. <li class="flex-h">
  76. <span>总张数:</span>
  77. <div class="flex-item">
  78. <div style="width:200px;">
  79. <el-input
  80. placeholder="请输入"
  81. v-model="postData.TotalNum"
  82. clearable>
  83. </el-input>
  84. </div>
  85. </div>
  86. </li>
  87. <li class="flex-h">
  88. <span>发送类型:</span>
  89. <div class="flex-item">
  90. <div>
  91. <el-radio v-model="postData.SendType" label="1">渠道</el-radio>
  92. <el-radio v-if="type === 'course'" v-model="postData.SendType" label="3">案场</el-radio>
  93. <el-radio v-model="postData.SendType" label="2">系统</el-radio>
  94. </div>
  95. </div>
  96. </li>
  97. <li class="flex-h">
  98. <span>选择渠道:</span>
  99. <div class="flex-item">
  100. <div style="width:50%">
  101. <el-select v-model="postData.ChannelId" placeholder="请选择">
  102. <el-option
  103. v-for="item in ChannelList"
  104. :key="item.id"
  105. :label="item.name"
  106. :value="item.id">
  107. </el-option>
  108. </el-select>
  109. </div>
  110. </div>
  111. </li>
  112. <li class="flex-h">
  113. <span>目标商品:</span>
  114. <div class="flex-item">
  115. <div>
  116. <el-radio v-model="postData.Assign" label="1">全部商品</el-radio>
  117. <el-radio v-model="postData.Assign" label="2">指定商品</el-radio>
  118. </div>
  119. </div>
  120. </li>
  121. <li class="flex-h" v-if="postData.Assign === '2'">
  122. <div class="flex-item">
  123. <div style="border: 1px solid #eee;">
  124. <el-table
  125. :data="currentList"
  126. stripe
  127. style="width: 100%">
  128. <el-table-column
  129. prop="Name"
  130. label="商品">
  131. </el-table-column>
  132. <el-table-column
  133. prop="Type"
  134. label="分类">
  135. </el-table-column>
  136. <el-table-column label="操作">
  137. <template slot-scope="scope">
  138. <el-button
  139. size="mini"
  140. type="warning"
  141. @click="deleteGoodsItem(scope.$index, scope.row)">删除</el-button>
  142. </template>
  143. </el-table-column>
  144. </el-table>
  145. <div style="text-align:center;padding:10px 0;">
  146. <el-button type="success" size="mini" @click="addGoods">添加商品</el-button>
  147. </div>
  148. </div>
  149. </div>
  150. </li>
  151. <li class="flex-h" v-if="type === 'drink'">
  152. <span>券有效时间:</span>
  153. <div class="flex-item">
  154. <div>
  155. <div class="addLine flex-h" style="align-item:center;margin-bottom:20px;">
  156. <el-radio v-model="postData.TimeType" label="1">固定时间</el-radio>
  157. <el-date-picker
  158. v-model="postData.StartDate"
  159. type="date"
  160. placeholder="选择起始日期">
  161. </el-date-picker>
  162. <span style="line-height:40px;">至</span>
  163. <el-date-picker
  164. v-model="postData.EndDate"
  165. type="date"
  166. placeholder="选择截止日期">
  167. </el-date-picker>
  168. </div>
  169. <div class="addLine flex-h" style="align-item:center;">
  170. <el-radio v-model="postData.TimeType" label="2">领取后</el-radio>
  171. <span style="width:100px;">
  172. <el-input
  173. placeholder="请输入"
  174. v-model="postData.Days"
  175. clearable>
  176. </el-input>
  177. </span>
  178. <span style="line-height:40px;">天</span>
  179. </div>
  180. </div>
  181. </div>
  182. </li>
  183. <li class="flex-h" v-if="type === 'course'">
  184. <span>券有效时间:</span>
  185. <div class="flex-item">
  186. <div>
  187. <el-date-picker
  188. v-model="postData.StartDate"
  189. type="date"
  190. placeholder="选择起始日期">
  191. </el-date-picker>
  192. <span style="line-height:40px;">至</span>
  193. <el-date-picker
  194. v-model="postData.EndDate"
  195. type="date"
  196. placeholder="选择截止日期">
  197. </el-date-picker>
  198. </div>
  199. </div>
  200. </li>
  201. <li class="flex-h">
  202. <span>视频:</span>
  203. <div class="flex-item">
  204. <div></div>
  205. </div>
  206. </li>
  207. <li class="flex-h">
  208. <span>分享描述:</span>
  209. <div class="flex-item">
  210. <div>
  211. <el-input
  212. type="textarea"
  213. :rows="2"
  214. placeholder="请输入"
  215. v-model="postData.ShareDesc">
  216. </el-input>
  217. </div>
  218. </div>
  219. </li>
  220. <li class="flex-h">
  221. <span>规则描述:</span>
  222. <div class="flex-item">
  223. <div>
  224. <el-input
  225. type="textarea"
  226. :rows="2"
  227. placeholder="请输入"
  228. v-model="postData.RuleDesc">
  229. </el-input>
  230. </div>
  231. </div>
  232. </li>
  233. <li class="flex-h">
  234. <span>使用说明:</span>
  235. <div class="flex-item">
  236. <div>
  237. <el-input
  238. type="textarea"
  239. :rows="2"
  240. placeholder="请输入"
  241. v-model="postData.UsedDesc">
  242. </el-input>
  243. </div>
  244. </div>
  245. </li>
  246. <li style="text-align:center">
  247. <el-button type="primary" size="mini" @click="submit">保存</el-button>
  248. <el-button type="danger" size="mini" @click="cancel">取消</el-button>
  249. </li>
  250. </ul>
  251. </form>
  252. <el-dialog
  253. title="选择指定商品"
  254. :visible.sync="centerDialogVisible"
  255. width="650px"
  256. center>
  257. <div>
  258. <div v-if="type === 'drink'">
  259. <el-table
  260. ref="multipleTable"
  261. :data="drinkList"
  262. tooltip-effect="dark"
  263. style="width: 100%"
  264. @selection-change="handleSelectionChange">
  265. <el-table-column
  266. type="selection">
  267. </el-table-column>
  268. <el-table-column
  269. prop="Name"
  270. label="商品名称">
  271. </el-table-column>
  272. <el-table-column
  273. prop="Type"
  274. label="类别">
  275. </el-table-column>
  276. <el-table-column
  277. prop="Price"
  278. label="价格">
  279. </el-table-column>
  280. </el-table>
  281. <el-pagination
  282. @current-change="handleCurrentChange"
  283. :current-page.sync="postData.page"
  284. :page-size="postData.pagesize"
  285. layout="prev, pager, next, jumper"
  286. :total="total">
  287. </el-pagination>
  288. </div>
  289. <div v-if="type === 'course'">
  290. <el-table
  291. ref="multipleTable"
  292. :data="courseList"
  293. tooltip-effect="dark"
  294. style="width: 100%"
  295. @selection-change="handleSelectionChange">
  296. <el-table-column
  297. type="selection">
  298. </el-table-column>
  299. <el-table-column
  300. prop="Name"
  301. label="商品名称">
  302. </el-table-column>
  303. <el-table-column
  304. prop="StartDate"
  305. label="开始时间">
  306. </el-table-column>
  307. <el-table-column
  308. prop="EndDate"
  309. label="结束时间">
  310. </el-table-column>
  311. <el-table-column
  312. prop="Type"
  313. label="类别">
  314. </el-table-column>
  315. <el-table-column
  316. prop="Price"
  317. label="价格">
  318. </el-table-column>
  319. </el-table>
  320. <el-pagination
  321. @current-change="handleCurrentChange"
  322. :current-page.sync="postData.page"
  323. :page-size="postData.pagesize"
  324. layout="prev, pager, next, jumper"
  325. :total="total">
  326. </el-pagination>
  327. </div>
  328. </div>
  329. <span slot="footer" class="dialog-footer">
  330. <el-button @click="centerDialogVisible = false">取 消</el-button>
  331. <el-button type="primary" @click="centerDialogVisible = false">确 定</el-button>
  332. </span>
  333. </el-dialog>
  334. </div>
  335. </template>
  336. <script>
  337. import { mapState } from 'vuex'
  338. export default {
  339. name: '',
  340. data () {
  341. return {
  342. total: 0,
  343. drinkList: [], // 饮品列表
  344. courseList: [], // 课程列表
  345. centerDialogVisible: false,
  346. type: this.$route.query.type,
  347. isEdit: this.$route.query.id === undefined ? 0 : 1,
  348. ChannelList: [], // 渠道列表
  349. TypeList: [], // 类型列表
  350. currentList: [{
  351. Name: 'ccc',
  352. Type: 'xxx'
  353. }], // 指定商品数据
  354. postData: {
  355. page: 1,
  356. pagesize: 10,
  357. },
  358. }
  359. },
  360. mounted () {
  361. this.$nextTick(function () { })
  362. },
  363. computed: {
  364. ...mapState({
  365. cases: x => x.app.cases.list,
  366. defaultCaseId: x => x.app.cases.default
  367. }),
  368. CaseId: {
  369. get () {
  370. return this.postData.caseid || this.defaultCaseId
  371. },
  372. set (val) {
  373. this.postData.caseid = val
  374. }
  375. }
  376. },
  377. methods: {
  378. handleSelectionChange (val) {
  379. // this.multipleSelection = val;
  380. },
  381. addGoods () { // 添加指定商品
  382. this.centerDialogVisible = true
  383. },
  384. submit () { // 保存
  385. // 1
  386. },
  387. cancel () { // 取消
  388. this.$router.push({ name: 'couponList' })
  389. },
  390. deleteGoodsItem () { // 删除指定商品item
  391. // 1
  392. },
  393. handleAvatarSuccess (res, file) {
  394. this.postData.Img = res.result.url
  395. },
  396. handleCurrentChange (val) { // 跳转到分页
  397. // this.getList()
  398. },
  399. }
  400. }
  401. </script>
  402. <!-- Add "scoped" attribute to limit CSS to this component only -->
  403. <style lang="scss" scoped>
  404. .addLine {
  405. > * {
  406. margin-right: 10px;
  407. }
  408. }
  409. </style>