index.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: 阿源
  5. * Date: 2020/11/26
  6. * Time: 11:06
  7. */
  8. ?>
  9. <div id="app" v-cloak>
  10. <!-- body-style="background-color: #f3f3f3;" shadow="never" style="border:0" -->
  11. <el-card shadow="never" style="border:0;background-color: #f3f3f3;padding:0">
  12. <div class="card_header">
  13. 海报列表
  14. <div style="float: right; margin: -5px 0">
  15. <el-button type="primary" @click="$navigate({r: 'share-redpack/default/edit'})" size="small">创建活动</el-button>
  16. <!-- <el-button type="primary" style="width:162px;height:40px" @click="$navigate({r: 'mall/poster/edit'})">添加海报</el-button>-->
  17. </div>
  18. </div>
  19. <div class="card_body">
  20. <el-form size="small" :inline="true" flex="dir:left cross:center" style="margin-bottom: 12px;">
  21. <div class="item-box" flex="dir:left cross:center" style="margin-right: 20px; margin-left: 20px;">
  22. <div class="label">海报名称:</div>
  23. <el-input style="width: 150px" v-model="keywords.name" placeholder="海报名称"></el-input>
  24. </div>
  25. <div class="item-box" flex="dir:left cross:center" style="margin-right: 20px">
  26. <div class="label">编号:</div>
  27. <el-input style="width: 150px" v-model="keywords.id" placeholder="编号"></el-input>
  28. </div>
  29. <div class="item-box" flex="dir:left cross:center">
  30. <el-button type="primary" style="padding: 10px 20px !important;" @click="search">搜索
  31. </el-button>
  32. <el-button type="danger" size="small" style="padding: 10px 20px !important;" @click="resetSearch" v-if="show_clear_search_btn">清除条件</el-button>
  33. </div>
  34. </el-form>
  35. <div>
  36. <el-table :data="tableData" v-loading="listLoading" style="width: 100%">
  37. <el-table-column prop="id" label="ID" width="80" align="center"></el-table-column>
  38. <el-table-column prop="name" label="海报名称" align="center"></el-table-column>
  39. <el-table-column prop="share_url" label="预览" width="150" align="center">
  40. <template slot-scope="scope">
  41. <el-popover placement="right" trigger="hover">
  42. <div class="from_img2">
  43. <img style="width: 300px;" :src="scope.row.share_url" alt="">
  44. </div>
  45. <div class="preview_img" slot="reference">
  46. <img style="width: 100%;" :src="scope.row.share_url" alt="">
  47. </div>
  48. </el-popover>
  49. </template>
  50. </el-table-column>
  51. <el-table-column prop="key_word" label="关键词" align="center"></el-table-column>
  52. <el-table-column prop="look_num" label="浏览次数" align="center"></el-table-column>
  53. <el-table-column prop="scan_code_num" label="扫码次数" align="center"></el-table-column>
  54. <el-table-column prop="created_at" label="创建时间" align="center"></el-table-column>
  55. <el-table-column prop="status" label="状态" align="center">
  56. <template slot-scope="scope">
  57. <el-switch v-model="scope.row.status" :active-value='1' :inactive-value='0' @change="handle('change_status', scope.row, $event)"></el-switch>
  58. </template>
  59. </el-table-column>
  60. <el-table-column prop="address" label="操作" fixed="right" align="center">
  61. <template slot-scope="scope">
  62. <div class="operation flex flex-x-center">
  63. <p style="margin-right:24px" @click="handle('edit',scope.row)">编辑</p>
  64. <p @click="handle('destroy',scope.row)">删除</p>
  65. </div>
  66. </template>
  67. </el-table-column>
  68. </el-table>
  69. </div>
  70. <!-- 分页 -->
  71. <div style="text-align: right;margin: 20px 0;">
  72. <el-pagination @current-change="pagination" background layout="prev, pager, next" :page-count="pageCount"></el-pagination>
  73. </div>
  74. </div>
  75. </el-card>
  76. </div>
  77. <script>
  78. new Vue({
  79. el: '#app',
  80. data() {
  81. return {
  82. listLoading: false,
  83. tableData: [],
  84. value: '',
  85. page: 1,
  86. cycle: '',
  87. total_count: 0,
  88. pageCount: 0,
  89. keywords: {
  90. id: '',
  91. name: '',
  92. },
  93. }
  94. },
  95. created() {
  96. this.getList();
  97. },
  98. computed: {
  99. show_clear_search_btn: function() {
  100. return !isEmpty(this.keywords.id)
  101. || !isEmpty(this.keywords.name)
  102. }
  103. },
  104. methods: {
  105. resetSearch(){
  106. this.keywords = {
  107. id:null,
  108. name:null,
  109. };
  110. this.page = 1;
  111. this.getList();
  112. },
  113. changeDate() {
  114. this.page = 1;
  115. var params = {
  116. cycle: this.cycle
  117. }
  118. this.getList(params);
  119. },
  120. search() {// 清空查询条件
  121. this.page = 1;
  122. this.getList(this.keywords);
  123. },
  124. // search() {
  125. // this.page = 1;
  126. // var params = {
  127. // keyword: this.keywords
  128. // }
  129. // this.getList(params);
  130. // },
  131. pagination(currentPage) {
  132. let self = this;
  133. self.page = currentPage;
  134. self.getList();
  135. },
  136. // 获取海报列表
  137. getList(search = {}) {
  138. let self = this;
  139. self.listLoading = true;
  140. let basic_data = {
  141. page: self.page,
  142. };
  143. data = Object.assign(basic_data,search);
  144. request({
  145. params: {
  146. r: 'share-redpack/default/index',
  147. },
  148. method: 'post',
  149. data: data
  150. }).then(e => {
  151. self.listLoading = false;
  152. if (e.data.code == 0) {
  153. this.tableData = e.data.data.list;
  154. this.tableData.forEach(item => {
  155. var dates = new Date(item.created_at * 1000);
  156. var y = dates.getFullYear(),
  157. m = dates.getMonth() + 1,
  158. d = dates.getDate(),
  159. h = dates.getHours(),
  160. mm = dates.getMinutes(),
  161. s = dates.getSeconds();
  162. item.created_at = y + '-' + this.add0(m) + '-' + this.add0(d) + ' ' + this.add0(h) + ':' + this.add0(mm) + ':' + this.add0(s)
  163. });
  164. self.pageCount = e.data.data.page_count;
  165. } else {
  166. self.$message.error(e.data.msg);
  167. }
  168. }).catch(e => {
  169. self.$message.error(e.data.msg);
  170. self.listLoading = false;
  171. });
  172. },
  173. handle(type, data = null, extra = null) {
  174. console.log(type);
  175. switch (type) {
  176. case 'edit':
  177. id = data ? parseInt(data.id) : '';
  178. params = {
  179. r: 'share-redpack/default/edit'
  180. };
  181. if (id) params = Object.assign(params, {
  182. id: id
  183. });
  184. navigateTo(params);
  185. break;
  186. case 'destroy':
  187. param = {
  188. id: data.id,
  189. type
  190. };
  191. this.$confirm('删除该条数据后不可以恢复, 是否继续?', '警告', {
  192. type: 'warning'
  193. }).then(() => {
  194. this.send(param, 'share-redpack/default/operate');
  195. })
  196. break;
  197. case 'change_status':
  198. param = {
  199. id: data.id,
  200. status: extra,
  201. type
  202. };
  203. this.send(param, 'share-redpack/default/operate');
  204. break;
  205. }
  206. },
  207. send(params, url) {
  208. console.log(url)
  209. let self = this;
  210. request({
  211. params: {
  212. r: url,
  213. },
  214. method: 'post',
  215. data: params
  216. }).then(e => {
  217. if (e.data.code == 0) {
  218. self.$message.success(e.data.msg);
  219. self.getList();
  220. } else {
  221. self.$message.error(e.data.msg);
  222. self.getList();
  223. }
  224. }).catch(e => {
  225. console.log(e);
  226. });
  227. },
  228. add0(val) {
  229. return val < 10 ? '0' + val : val;
  230. },
  231. }
  232. })
  233. </script>
  234. <style scoped>
  235. img {
  236. display: block;
  237. }
  238. .card_header {
  239. margin-bottom: 10px;
  240. background: #ffffff;
  241. padding: 24px;
  242. border-radius: 5px;
  243. }
  244. .card_body {
  245. border-radius: 5px;
  246. background: #ffffff;
  247. padding: 24px;
  248. }
  249. .select_height {
  250. height: 30px;
  251. line-height: 30px;
  252. }
  253. .preview_img {
  254. width: 30px;
  255. height: 54px;
  256. overflow: hidden;
  257. text-align: center;
  258. margin:auto;
  259. }
  260. .preview_img2 {
  261. width: 149px;
  262. height: 232px;
  263. overflow: hidden;
  264. }
  265. .operation {
  266. cursor: pointer;
  267. }
  268. /* 公共样式 */
  269. .flex {
  270. display: -webkit-box;
  271. display: -webkit-flex;
  272. /* #ifndef APP-NVUE */
  273. display: flex;
  274. /* #endif */
  275. }
  276. .flex-x-center {
  277. display: -webkit-box;
  278. display: -webkit-flex;
  279. /* #ifndef APP-NVUE */
  280. display: flex;
  281. /* #endif */
  282. -webkit-box-pack: center;
  283. -webkit-justify-content: center;
  284. -ms-flex-pack: center;
  285. justify-content: center;
  286. }
  287. .flex-x-between {
  288. display: -webkit-box;
  289. display: -webkit-flex;
  290. /* #ifndef APP-NVUE */
  291. display: flex;
  292. /* #endif */
  293. -webkit-box-pack: space-between;
  294. -webkit-justify-content: space-between;
  295. -ms-flex-pack: space-between;
  296. justify-content: space-between;
  297. }
  298. .flex-y-center {
  299. display: -webkit-box;
  300. display: -webkit-flex;
  301. /* #ifndef APP-NVUE */
  302. display: flex;
  303. /* #endif */
  304. -webkit-box-align: center;
  305. -webkit-align-items: center;
  306. -ms-flex-align: center;
  307. -ms-grid-row-align: center;
  308. align-items: center;
  309. }
  310. /* 溢出隐藏 */
  311. .over1 {
  312. text-overflow: -o-ellipsis-lastline;
  313. overflow: hidden;
  314. text-overflow: ellipsis;
  315. display: -webkit-box;
  316. -webkit-line-clamp: 1;
  317. -webkit-box-orient: vertical;
  318. }
  319. .over2 {
  320. text-overflow: -o-ellipsis-lastline;
  321. overflow: hidden;
  322. text-overflow: ellipsis;
  323. display: -webkit-box;
  324. -webkit-line-clamp: 2;
  325. -webkit-box-orient: vertical;
  326. }
  327. .el-card__body{
  328. padding: 0;
  329. }
  330. </style>