carousel.vue 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334
  1. <template>
  2. <div>
  3. <use-table ref="tbl"></use-table>
  4. <div class="container padding_b_0">
  5. <!-- <div class="dflex_wrap">
  6. <div class="dflex_vertical_c margin_r_40 margin_b_20">
  7. <div class="search_name">跳转地址:</div>
  8. <el-input v-model="req.url" placeholder="请输入" @input="loadData" class="search_input"></el-input>
  9. </div>
  10. <div class="dflex_vertical_c margin_r_40 margin_b_20" v-if="advancedSearch">
  11. <div class="search_name">跳转类型:</div>
  12. <el-select v-model="req.type" class="search_input" @change="loadData">
  13. <el-option v-for="(item, idx) in typeOptions" :key="idx" :label="item.label"
  14. :value="item.value"></el-option>
  15. </el-select>
  16. </div>
  17. <div class="dflex_vertical_c margin_r_40 margin_b_20" v-if="advancedSearch">
  18. <div class="search_name">状态:</div>
  19. <el-select v-model="req.state" class="search_input" @change="loadData">
  20. <el-option v-for="(item, idx) in stateOptions" :key="idx" :label="item.label"
  21. :value="item.value"></el-option>
  22. </el-select>
  23. </div>
  24. <el-button size="mini" class="search_btn margin_b_20 margin_r_40" @click="loadData">搜索</el-button>
  25. <div class="search_advanced margin_b_20" @click="advancedSearch = !advancedSearch"
  26. v-if="!advancedSearch">高级筛选</div>
  27. <div class="search_common margin_b_20" @click="advancedSearch = !advancedSearch" v-if="advancedSearch">
  28. 常用筛选</div>
  29. </div> -->
  30. </div>
  31. <div class="container use-table">
  32. <div class="dflex_sb margin_b_15 ">
  33. <div>
  34. <el-button class="batch_btn padding0" @click="removes">删除</el-button>
  35. </div>
  36. <el-button class="add_btn pos_r padding0" icon="iconfont iconxinzeng" @click="toAdd">新增</el-button>
  37. </div>
  38. <el-table :height="tblHeight" :data="tableDatas" @selection-change="selectionChange" highlight-current-row>
  39. <el-table-column type="selection"></el-table-column>
  40. <el-table-column label="排序" width="200" align="center">
  41. <template slot-scope="scope">
  42. <el-input-number size="small" :min="1" v-model="scope.row.sort" @change="sortChange(scope.row)"
  43. @blur="sortChange(scope.row)"></el-input-number>
  44. </template>
  45. </el-table-column>
  46. <el-table-column property="img" label="图片" align="center">
  47. <template slot-scope="scope">
  48. <el-image style="width: 120px;height: 40px;" :src="scope.row.img || require('static/img/noimage.png')" :preview-src-list="scope.row.imgs"
  49. fit="contain"></el-image>
  50. </template>
  51. </el-table-column>
  52. <el-table-column label="跳转类型" align="center">
  53. <template slot-scope="scope">
  54. <template v-if="scope.row.type==0">不跳转</template>
  55. <template v-if="scope.row.type==1">跳转页面</template>
  56. <template v-if="scope.row.type==2">跳转网页</template>
  57. </template>
  58. </el-table-column>
  59. <el-table-column property="url" label="跳转地址" width="250" align="center"></el-table-column>
  60. <el-table-column property="state" label="状态" align="center">
  61. <template slot-scope="scope">
  62. <el-tooltip :content="scope.row.state == '1' ? '点击禁用' : '点击启用'" placement="top"
  63. :hide-after="1000" :enterable="false" effect="light">
  64. <el-switch v-model="scope.row.state" active-color="#ff6a6c" inactive-color="#bbb"
  65. active-value="1" inactive-value="0" @change="stateChange(scope.row)"></el-switch>
  66. </el-tooltip>
  67. </template>
  68. </el-table-column>
  69. <el-table-column property="remark" label="备注" align="center"></el-table-column>
  70. <el-table-column label="操作" align="center" fixed="right">
  71. <template slot-scope="scope">
  72. <el-tooltip content="编辑" placement="top" :hide-after="1000" :enterable="false" effect="light">
  73. <el-button type="text" icon="iconfont iconbianji" class="bbb"
  74. @click="toEdit(scope.row.id)"></el-button>
  75. </el-tooltip>
  76. <el-tooltip content="删除" placement="top" :hide-after="1000" :enterable="false" effect="light">
  77. <el-button type="text" icon="iconfont iconshanchu" class="bbb"
  78. @click="remove(scope.row.id)"></el-button>
  79. </el-tooltip>
  80. </template>
  81. </el-table-column>
  82. </el-table>
  83. <el-pagination :current-page="req.page" :page-sizes="[10, 20, 30, 50, 100]" :page-size="req.rows"
  84. layout="total, sizes, prev, pager, next, jumper" :total="tableTotal" @size-change="sizeChange"
  85. @current-change="currentChange"></el-pagination>
  86. </div>
  87. </div>
  88. </template>
  89. <script>
  90. const __name = 'usemall-app-carousel';
  91. import {
  92. delLunbo
  93. } from '@/util/loginJie.js'
  94. export default {
  95. data() {
  96. return {
  97. advancedSearch: false,
  98. typeOptions: [{
  99. value: '',
  100. label: '全部'
  101. },
  102. {
  103. value: '网页',
  104. label: '网页'
  105. },
  106. {
  107. value: '页面',
  108. label: '页面'
  109. }
  110. ],
  111. stateOptions: [{
  112. value: '',
  113. label: '全部'
  114. },
  115. {
  116. value: '启用',
  117. label: '启用'
  118. },
  119. {
  120. value: '禁用',
  121. label: '禁用'
  122. }
  123. ],
  124. req: {
  125. page: 1,
  126. rows: 10,
  127. orderby: 'sort asc',
  128. url: '',
  129. type: '',
  130. state: ''
  131. },
  132. tblHeight: 0,
  133. tableDatas: [],
  134. tableTotal: 0,
  135. selectDatas: [],
  136. now_date:'',//更新时间
  137. };
  138. },
  139. methods: {
  140. loadData() {
  141. this.$axios.get("/carousel/open/list",
  142. {
  143. params:{
  144. 'curPage':this.req.page,
  145. 'pageSize':this.req.rows,
  146. 'order':'asc',
  147. 'orderField':'sort'
  148. },
  149. headers:{
  150. }
  151. }).then(response => {
  152. let res = response
  153. if (res.success) {
  154. res.data.list.forEach((row, idx) => {
  155. row.imgs = [row.img];
  156. });
  157. this.tableDatas = res.data.list;
  158. this.tableTotal = res.data.totalCount;
  159. } else {
  160. if(res.message=="无效的token"){
  161. uni.redirectTo({
  162. url: config.login.url
  163. })
  164. }
  165. }
  166. }).catch(res =>{
  167. });
  168. },
  169. toAdd() {
  170. uni.navigateTo({
  171. url: `/pages/shop/home/carousel_add_edit?tab=添加轮播图`,
  172. events: {
  173. refreshData: () => {
  174. this.loadData();
  175. }
  176. }
  177. });
  178. },
  179. toEdit(id) {
  180. uni.navigateTo({
  181. url: `/pages/shop/home/carousel_add_edit?id=${id}&tab=编辑轮播图`,
  182. events: {
  183. refreshData: () => {
  184. this.loadData();
  185. }
  186. }
  187. });
  188. },
  189. remove(id) {
  190. var data=[id]
  191. var headers={
  192. 'Content-Type': 'application/json; charset=utf-8',
  193. "Mall-Token": uni.getStorageSync('token')
  194. }
  195. this.$confirm('此操作将永久删除该数据!', '提示', {
  196. confirmButtonText: '确定',
  197. cancelButtonText: '取消',
  198. type: 'warning'
  199. }).then(() => {
  200. delLunbo(data,headers).then((res) => {
  201. if (res.success) {
  202. this.loadData();
  203. }
  204. })
  205. });
  206. },
  207. selectionChange(datas) {
  208. this.selectDatas = datas;
  209. },
  210. removes() {
  211. if (this.selectDatas.length <= 0) {
  212. this.$message('请勾选需要删除的数据!');
  213. return;
  214. }
  215. let data = this.selectDatas.map(x => x.id);
  216. var headers={
  217. 'Content-Type': 'application/json; charset=utf-8',
  218. "Mall-Token": uni.getStorageSync('token')
  219. }
  220. this.$confirm('此操作将永久删除勾选数据!', '提示', {
  221. confirmButtonText: '确定',
  222. cancelButtonText: '取消',
  223. type: 'warning'
  224. }).then(() => {
  225. delLunbo(data,headers).then((res) => {
  226. if (res.success) {
  227. this.loadData();
  228. }
  229. })
  230. });
  231. },
  232. stateChange(row) {
  233. this.$axios.put("/carousel/admin/update",
  234. {
  235. 'createBy':row.createBy,//创建人
  236. 'createTime':row.createTime,//创建时间
  237. 'updateBy':uni.getStorageSync("nickName"),//更新人
  238. 'updateTime':this.now_date,//更新时间
  239. 'img':row.img,//图片地址
  240. 'remark':row.remark,//备注
  241. 'sort':row.sort,//排序
  242. 'state':row.state,//状态0禁用1启用
  243. 'type':row.type,//跳转类型0不跳转 1跳转页面 2跳转网页
  244. 'url':row.url,//跳转地址type不为0时不能为空
  245. 'id':row.id
  246. },
  247. {
  248. headers:{
  249. 'Mall-Token': uni.getStorageSync("token")
  250. }
  251. }).then(response => {
  252. let res = response
  253. if (res.success) {
  254. this.loadData()
  255. } else {
  256. alert(res.message)
  257. }
  258. })
  259. },
  260. sortChange(row) {
  261. if (row.sort == '') {
  262. return;
  263. }
  264. this.$axios.put("/carousel/admin/update",
  265. {
  266. 'createBy':row.createBy,//创建人
  267. 'createTime':row.createTime,//创建时间
  268. 'updateBy':uni.getStorageSync("nickName"),//更新人
  269. 'updateTime':this.now_date,//更新时间
  270. 'img':row.img,//图片地址
  271. 'remark':row.remark,//备注
  272. 'sort':row.sort,//排序
  273. 'state':row.state,//状态0禁用1启用
  274. 'type':row.type,//跳转类型0不跳转 1跳转页面 2跳转网页
  275. 'url':row.url,//跳转地址type不为0时不能为空
  276. 'id':row.id
  277. },
  278. {
  279. headers:{
  280. 'Mall-Token': uni.getStorageSync("token")
  281. }
  282. }).then(response => {
  283. let res = response
  284. if (res.success) {
  285. this.loadData()
  286. } else {
  287. alert(res.message)
  288. }
  289. })
  290. },
  291. sizeChange(size) {
  292. this.req.rows = size;
  293. this.loadData();
  294. },
  295. currentChange(current) {
  296. this.req.page = current;
  297. this.loadData();
  298. },
  299. //获取当前时间
  300. getNowDate() {
  301. var _this = this;
  302. // this.timer = setInterval(function() {
  303. var aData = new Date();
  304. var month = aData.getMonth() < 9 ? "0" + (aData.getMonth() + 1) : aData.getMonth() + 1;
  305. var date = aData.getDate() <= 9 ? "0" + aData.getDate() : aData.getDate();
  306. var date2 = aData.getDate() <= 9 ? "0" + (aData.getDate()-1) : (aData.getDate()-1);
  307. var Hour = aData.getHours() <= 9 ? "0" + (aData.getHours()) : aData.getHours();
  308. var Miunte = aData.getMinutes() <= 9 ? "0" + (aData.getMinutes()) : aData.getMinutes();
  309. var Seconds = aData.getSeconds() <= 9 ? "0" + (aData.getSeconds()) : aData.getSeconds();
  310. // console.log(aData.getTime())
  311. _this.now_date = aData.getFullYear() + "-" + month + "-" + date + ' '+ Hour +":"+ Miunte +":"+ Seconds;
  312. // console.log(aData.getFullYear() + "-" + month + "-" + date2)昨天
  313. // }, 86400000);
  314. },
  315. },
  316. created() {
  317. this.loadData();
  318. },
  319. updated() {
  320. if (!this.tblHeight) {
  321. this.tblHeight = this.$refs.tbl.tblHeight;
  322. }
  323. }
  324. };
  325. </script>
  326. <style></style>