index.vue 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292
  1. <template>
  2. <div class="adManage">
  3. <moduleView :propConfig="config" ref="view" v-loading="load" @pagination="pagination" @onRefresh="getList" @resert="queryList" @search="queryList" @detail="detail" />
  4. </div>
  5. </template>
  6. <script setup>
  7. import { computed,getCurrentInstance,ref } from "vue";
  8. const { proxy } = getCurrentInstance();
  9. import goodsImg from "./components/goodsImg.vue";
  10. import equipList from "./components/equipList.vue";
  11. import {list,upDownShelves,detailHandle} from '@/api/base/adManage'
  12. const config = ref({
  13. attr:{
  14. calculateH:true
  15. },
  16. search:{
  17. attr:{
  18. size:'mini',
  19. rules:{
  20. name:[{
  21. required: true, message: '请输入名称', trigger: 'blur'
  22. }]
  23. }
  24. },
  25. columns:[
  26. [{
  27. span:8,
  28. // label:'设备名称',
  29. labelWidth:1,
  30. prop:'text',
  31. component:'by-input',
  32. compConfig:{
  33. attr:{
  34. placeholder:'请输入广告ID、广告名称、负责人、联系方式',
  35. prefixIcon:'vxe-icon-search'
  36. }
  37. }
  38. },
  39. {
  40. span:8,
  41. labelWidth:70,
  42. label:'时间',
  43. prop:'time',
  44. component:'by-date',
  45. compConfig:{
  46. attr:{
  47. startPlaceholder:'开始时间',
  48. endPlaceholder:'结束时间',
  49. // format:'yyyy-MM-dd',
  50. type:'datetimerange'
  51. }
  52. }
  53. }]
  54. ]
  55. },
  56. tool:{
  57. tools:{
  58. search:true,
  59. refresh:true
  60. }
  61. },
  62. table:{
  63. attr:{
  64. size:'mini',
  65. seq:true,
  66. align:'center',
  67. // checkbox:true
  68. },
  69. columns:[
  70. // {
  71. // title:'广告ID',
  72. // field:'planId',
  73. // },
  74. {
  75. title:'广告名称',
  76. isDetail:true,
  77. field:'planName',
  78. },
  79. {
  80. title:'商品图片',
  81. field:'goodsImg',
  82. component:shallowRef(goodsImg)
  83. },
  84. {
  85. title:'广告负责人',
  86. field:'principalName'
  87. },
  88. {
  89. title:'联系方式',
  90. field:'principalTelephone'
  91. },
  92. {
  93. title:'上架状态',
  94. field:'onState',
  95. component:'textChange',
  96. compConfig:{
  97. attr:{
  98. data:[{
  99. label:'上架',
  100. value:'上架',
  101. backgroundColor:'#f0f9eb',
  102. color:'#67c23a'
  103. },{
  104. label:'下架',
  105. value:'下架',
  106. backgroundColor:'#fef0f0',
  107. color:'#f56c6c'
  108. }]
  109. }
  110. }
  111. },
  112. {
  113. title:'时间',
  114. field:'planCreateTime'
  115. },
  116. {
  117. title:'操作',
  118. action:true,
  119. plugins:[{
  120. name:'上架',
  121. event:{
  122. show:row => {
  123. return row.onState == '下架'
  124. },
  125. click:item => {
  126. upDownShelvesHandle(item.planId)
  127. }
  128. }
  129. },{
  130. name:'下架',
  131. event:{
  132. show:row => {
  133. return row.onState == '上架'
  134. },
  135. click:item => {
  136. upDownShelvesHandle(item.planId)
  137. }
  138. }
  139. }]
  140. }]
  141. },
  142. modal:{
  143. tool:{
  144. tools:{
  145. return:true
  146. }
  147. },
  148. form:{
  149. attr:{
  150. width:'1000px',
  151. showType:'desc',
  152. labelWidth:'130px',
  153. itemCount:3
  154. },
  155. columns:[
  156. [{
  157. label:'广告ID',
  158. prop:'planId'
  159. }],
  160. [{
  161. label:'广告计划',
  162. prop:'planName'
  163. }],
  164. [{
  165. label:'广告负责人',
  166. prop:'principalName'
  167. }],
  168. [{
  169. label:'联系方式',
  170. prop:'principalTelephone'
  171. }],
  172. // [{
  173. // label:'上下架状态',
  174. // prop:'onState'
  175. // }],
  176. [{
  177. label:'商品图片',
  178. colspan:2,
  179. prop:'goodsLogo',
  180. showComp:true,
  181. component:shallowRef(goodsImg)
  182. }],
  183. [{
  184. label:'推广设备',
  185. prop:'planItems',
  186. colspan:3,
  187. showComp:true,
  188. component:shallowRef(equipList)
  189. }]
  190. ]
  191. }
  192. }
  193. })
  194. const load = ref(false)
  195. const isSearch = ref(false)
  196. const timeNum = ref(0);
  197. const upDownShelvesHandle = id => {
  198. load.value = true
  199. upDownShelves(id).then(res => {
  200. proxy.$message({
  201. message:'操作成功',
  202. type:'success'
  203. })
  204. load.value = false
  205. getList()
  206. }).catch(()=>{
  207. load.value = false;
  208. })
  209. }
  210. const detail = row => {
  211. config.value.modal.tool.tools.save = true;
  212. delete config.value.modal.tool.tools.add;
  213. proxy.$refs.view.initFormTool();
  214. getDetailData(row.planId)
  215. }
  216. //详细
  217. const getDetailData = id => {
  218. load.value = true
  219. detailHandle(id).then(res => {
  220. load.value = false;
  221. proxy.$refs.view.setFormValue(res.data)
  222. }).catch(() => {
  223. load.value = false;
  224. })
  225. }
  226. const pagination = () => {
  227. if(isSearch.value){
  228. queryList();
  229. }else{
  230. getList()
  231. }
  232. }
  233. //列表请求(包含分页和搜素条件)
  234. const queryList = () => {
  235. isSearch.value = true;
  236. let data = proxy.$refs.view.getQuery();
  237. requestList(data);
  238. }
  239. const getList = () => {
  240. if(!proxy.$refs.view){
  241. if(timeNum.value > 5){
  242. return
  243. }
  244. setTimeout(()=>{
  245. getList()
  246. },500)
  247. timeNum.value ++;
  248. return
  249. }
  250. timeNum.value = 0;
  251. isSearch.value = false;
  252. let data = proxy.$refs.view.getPage();
  253. requestList(data);
  254. }
  255. const requestList = data => {
  256. load.value = true;
  257. data.pageNum = data.pageNo;
  258. delete data.pageNo;
  259. if(data.time && data.time.length > 0) {
  260. data.startTime = data.time[0]
  261. data.endTime = data.time[1]
  262. }
  263. delete data.time;
  264. list(data).then(res => {
  265. load.value = false;
  266. proxy.$refs.view.setTableValue(res.data.list);
  267. let page = {
  268. pageNo: res.data.pageNum, //当前页
  269. pageSize: data.pageSize, //每页条数
  270. total: res.data.total //总条数
  271. };
  272. proxy.$refs.view.setPage(page)
  273. }).catch(()=>{
  274. load.value = false;
  275. })
  276. }
  277. nextTick(()=>{
  278. getList()
  279. })
  280. </script>
  281. <style lang="scss" scoped>
  282. .adManage{
  283. width: 100%;
  284. height: 100%;
  285. }
  286. </style>