index.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323
  1. <?php
  2. use common\helpers\ComponentHelper;
  3. ComponentHelper::loadComponentView('com-image');
  4. ?>
  5. <style>
  6. .table-body {
  7. padding: 20px;
  8. background-color: #fff;
  9. }
  10. .input-item {
  11. display: inline-block;
  12. width: 250px;
  13. margin: 0 0 20px;
  14. }
  15. .input-item .el-input__inner {
  16. border-right: 0;
  17. }
  18. .input-item .el-input__inner:hover {
  19. border: 1px solid #dcdfe6;
  20. border-right: 0;
  21. outline: 0;
  22. }
  23. .input-item .el-input__inner:focus {
  24. border: 1px solid #dcdfe6;
  25. border-right: 0;
  26. outline: 0;
  27. }
  28. .input-item .el-input-group__append {
  29. background-color: #fff;
  30. border-left: 0;
  31. width: 10%;
  32. padding: 0;
  33. }
  34. .input-item .el-input-group__append .el-button {
  35. padding: 0;
  36. }
  37. .input-item .el-input-group__append .el-button {
  38. margin: 0;
  39. }
  40. .table-body .el-button {
  41. padding: 0 !important;
  42. border: 0;
  43. margin: 0 5px;
  44. }
  45. .form-body {
  46. background-color: #fff;
  47. margin-bottom: 20px;
  48. }
  49. .el-tabs__header {
  50. background-color: #fff;
  51. }
  52. .el-tabs__item {
  53. width: 100px;
  54. text-align: center;
  55. }
  56. .el-table th>.cell {
  57. color: #333;
  58. font-weight: bold;
  59. font-size: 14px;
  60. }
  61. .el-table__footer-wrapper,
  62. .el-table__header-wrapper {
  63. border-bottom: 1.4px solid #D6D6D6;
  64. }
  65. .over2 {
  66. text-overflow: -o-ellipsis-lastline;
  67. overflow: hidden;
  68. text-overflow: ellipsis;
  69. display: -webkit-box;
  70. -webkit-line-clamp: 2;
  71. -webkit-box-orient: vertical;
  72. }
  73. </style>
  74. <div id="app" v-cloak>
  75. <el-card shadow="never" body-style="background-color: #f3f3f3;padding: 10px 0 0;">
  76. <div slot="header">
  77. <div>
  78. <span>活动课程</span>
  79. <div style="float: right">
  80. <el-button type="primary" size="small" style="padding: 9px 15px !important;"
  81. @click="$navigate({r: 'course/activity/edit'})">创建活动
  82. </el-button>
  83. </div>
  84. </div>
  85. </div>
  86. <div class="table-body">
  87. <!-- <div class="input-item">
  88. <el-input @keyup.enter.native="search" size="small" placeholder="请输入活动名称" v-model="keyword" clearable
  89. @clear="search">
  90. <el-button slot="append" icon="el-icon-search" @click="search"></el-button>
  91. </el-input>
  92. </div> -->
  93. <el-table v-loading="listLoading" :data="list" stripe style="width: 100%">
  94. <el-table-column label="ID" prop="id" min-width="80" align="center">
  95. <template slot-scope="scope">
  96. <div size="small">{{scope.row.id}}</div>
  97. </template>
  98. </el-table-column>
  99. <el-table-column label="活动名称" prop="name" min-width="180">
  100. <template slot-scope="scope">
  101. <div size="small">{{scope.row.name}}</div>
  102. </template>
  103. </el-table-column>
  104. <el-table-column label="活动商品" prop="good_id" min-width="120" align="center">
  105. <template slot-scope="scope">
  106. <div style="display: flex;align-items:center;" :title="scope.row.goods_name">
  107. <div size="small" class="flex-col" v-if="scope.row.cover_pic">
  108. <com-image width='40px' height='40px' :src="scope.row.cover_pic"></com-image>
  109. </div>
  110. <div style="padding-left: 10px;">
  111. <div class="over2">{{scope.row.goods_name}}</div>
  112. <div><span v-if="scope.row.original_price">¥</span>{{scope.row.original_price || '--'}}
  113. </div>
  114. </div>
  115. </div>
  116. </template>
  117. </el-table-column>
  118. <el-table-column label="课程数量" prop="course_number" min-width="180" align="center">
  119. <template slot-scope="scope">
  120. <div size="small">{{scope.row.course_number}}</div>
  121. </template>
  122. </el-table-column>
  123. <el-table-column label="规则" min-width="180" align="center">
  124. <template slot-scope="scope">
  125. <div size="small">{{scope.row.course_number}}选{{scope.row.select_number}}</div>
  126. </template>
  127. </el-table-column>
  128. <el-table-column align="center" label="是否启用" min-width="200">
  129. <template slot-scope="scope">
  130. <el-tooltip class="item" effect="dark" content="点击更改状态" placement="top">
  131. <el-switch
  132. @change="((val)=>{switchFun(val,scope.row.id)})"
  133. v-model="scope.row.status"
  134. :active-value="1"
  135. :inactive-value="0"
  136. active-text="启用"
  137. inactive-text="不启用"
  138. >
  139. </el-switch>
  140. </el-tooltip>
  141. </template>
  142. </el-table-column>
  143. <el-table-column label="创建时间" prop="created_at" min-width="110" align="center">
  144. <template slot-scope="scope">
  145. <div size="small">{{scope.row.created_at|dateTimeFormat('Y-m-d H:i:s')}}</div>
  146. </template>
  147. </el-table-column>
  148. <el-table-column label="操作" min-width="250" align="center">
  149. <template slot-scope="scope">
  150. <el-button circle size="mini" type="text" @click="copyLink(scope.row.id)" class="copy_btn">复制链接
  151. </el-button>
  152. <el-button circle size="mini" type="text" @click="edit(scope.row.id)">编辑
  153. </el-button>
  154. <el-button circle size="mini" type="text" @click="activityDelete(scope.row, scope.$index)">删除
  155. </el-button>
  156. </template>
  157. </el-table-column>
  158. </el-table>
  159. <div style="text-align: right;margin: 20px 0;">
  160. <el-pagination @current-change="pagination" background layout="prev, pager, next"
  161. :page-count="pageCount"></el-pagination>
  162. </div>
  163. </div>
  164. </el-card>
  165. </div>
  166. <script src="/resources/unpkg/clipboard@1.0.0/dist/clipboard.min.js"></script>
  167. <script>
  168. const app = new Vue({
  169. el: '#app',
  170. data() {
  171. return {
  172. status: 0,
  173. list: [],
  174. keyword: '',
  175. listLoading: false,
  176. page: 1,
  177. pageCount: 0,
  178. lableLoading: false,
  179. btnLoading: false,
  180. };
  181. },
  182. methods: {
  183. search() {
  184. this.page = 1;
  185. this.getList();
  186. },
  187. pagination(currentPage) {
  188. let self = this;
  189. self.page = currentPage;
  190. self.getList();
  191. },
  192. // 0.1 获取课程列表
  193. getList() {
  194. let self = this;
  195. self.listLoading = true;
  196. request({
  197. params: {
  198. r: 'course/activity/index',
  199. page: self.page,
  200. keyword: this.keyword
  201. },
  202. method: 'get',
  203. }).then(e => {
  204. self.listLoading = false;
  205. self.list = e.data.data.list;
  206. self.pageCount = e.data.data.page_count;
  207. }).catch(e => {
  208. console.log(e);
  209. });
  210. },
  211. // 新建或编辑
  212. edit(id) {
  213. navigateTo({
  214. r: 'course/activity/edit',
  215. id: id,
  216. });
  217. },
  218. activityDelete(row, index) {
  219. var self = this;
  220. self.$confirm('是否删除活动?', '提示', {
  221. confirmButtonText: '确定',
  222. cancelButtonText: '取消',
  223. type: 'warning'
  224. }).then(() => {
  225. request({
  226. params: {
  227. r: 'course/activity/delete'
  228. },
  229. method: 'post',
  230. data: {
  231. id: row.id
  232. }
  233. }).then(e => {
  234. if (0 == e.data.code) {
  235. self.$message.success(e.data.msg);
  236. self.list.splice(index, 1);
  237. } else {
  238. self.$message.error(e.data.msg);
  239. }
  240. }).catch(e => {
  241. self.$message.error('网络错误');
  242. });
  243. });
  244. },
  245. //复制链接
  246. copyLink(activity_id) {
  247. var id = activity_id;
  248. //复制链接
  249. var url = localStorage.getItem('h5_domain');
  250. var clipboard = new ClipboardJS('.copy_btn', {
  251. text: function() {
  252. return url + 'plugins/course/activity/activity?activity_id=' + id + '&sign=' + localStorage.getItem('mall_sign');
  253. }
  254. });
  255. var self = this;
  256. clipboard.on('success', function(e) {
  257. self.$message.success('复制成功');
  258. e.clearSelection();
  259. clipboard.destroy()
  260. });
  261. clipboard.on('error', function(e) {
  262. self.$message.error('复制失败,请手动复制');
  263. });
  264. },
  265. switchFun(event,id){
  266. console.log(event);
  267. this.listLoading = true;
  268. request({
  269. params: {
  270. r: 'course/activity/edit-status',
  271. },
  272. method: 'post',
  273. data:{
  274. id:id,
  275. status:event,
  276. }
  277. }).then(e => {
  278. this.listLoading = false;
  279. if (e.data.code == 0) {
  280. this.$message.success('更改状态成功');
  281. this.search();
  282. } else {
  283. this.$message.error(e.data.msg);
  284. }
  285. }).catch(e => {
  286. this.$message.error(e.data.msg);
  287. this.listLoading = false;
  288. });
  289. },
  290. },
  291. mounted: function() {
  292. this.getList();
  293. }
  294. });
  295. </script>