企微助手 ,仓库名 短剧

radarList.vue 7.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  1. <template>
  2. <div>
  3. <!-- table -->
  4. <div class="infinite-list-wrapper" v-loading.body="loading">
  5. <div class="tHead">
  6. <div v-for="item in desCol"
  7. :style="{width:item.min_width?item.min_width:'11%'}">{{item.label?item.label:'-'}}</div>
  8. </div>
  9. <div class="tBody"
  10. v-if="tableData&&tableData.length>0"
  11. v-infinite-scroll="load"
  12. :infinite-scroll-distance="20"
  13. :infinite-scroll-immediate="false"
  14. infinite-scroll-disabled="disabled">
  15. <draggable class="syllable_ul" element="ul"
  16. @sort="draggableSort"
  17. :list="tableData"
  18. :emptyInsertThreshold="0"
  19. :options="{group:'name',
  20. animation:200,
  21. ghostClass:'ghostClass',
  22. dragClass:'dragClass'}">
  23. <div class="body_item" v-for="(row,index) in tableData"
  24. :class="index == tableData.length-1 ? 'borderBottomline' : ''">
  25. <div class="body_cell" v-for="item in desCol"
  26. :style="{width:item.min_width?item.min_width:'11%'}">
  27. <div v-if="item.prop=='type'">
  28. <span v-if="row.type==1">链接</span>
  29. <span v-else-if="row.type==2">PDF</span>
  30. <span v-else-if="row.type==3">图片</span>
  31. <span v-else-if="row.type==4">视频</span>
  32. <span v-else="row.type==1">-</span>
  33. </div>
  34. <div v-else-if="item.prop=='tag_list'" class="flex-align-jus-center">
  35. <template v-if="row.tag_list&&row.tag_list.length==0 || !row.tag_list">-</template>
  36. <div class="customerServiceTagBox biaoqian" v-else>
  37. <div class="customerServiceTag" v-for="(item,index) in row.tag_list" :key="index+'biaoqian'">{{item}}</div>
  38. </div>
  39. </div>
  40. <div v-else-if="item.prop=='oprate'">
  41. <div class="flex" style="padding: 0 10px">
  42. <div class="c-00B38A pointer" @click="editRadar(row.radar_id)">编辑</div>
  43. <el-popconfirm @confirm="deleRadar(row.radar_id)" :title="`确定删除【${row.name}】渠道活码?`">
  44. <div slot="reference" class="c-00B38A pointer lMar8">删除</div>
  45. </el-popconfirm>
  46. <div class="c-00B38A pointer lMar8" @click="goDataAanlyse(row.radar_id)">分析数据</div>
  47. </div>
  48. </div>
  49. <div v-else>{{row[item.prop] ||row[item.prop]==0 ? row[item.prop] : '-'}}</div>
  50. </div>
  51. </div>
  52. </draggable>
  53. <p class="text-center f14 tMar8 c-d3" v-if="moreloading">加载中...</p>
  54. <p class="text-center f14 tMar8 c-d3" v-if="noMore">没有更多了</p>
  55. </div>
  56. <div class="noData" v-else>暂无数据</div>
  57. </div>
  58. </div>
  59. </template>
  60. <script>
  61. import draggable from "vuedraggable"
  62. export default {
  63. name: "radarList",
  64. components:{
  65. draggable
  66. },
  67. props:['propsData'],
  68. computed: {
  69. noMore () {
  70. return this.currPage_len < this.page_size
  71. },
  72. disabled () {
  73. return this.moreloading || this.noMore
  74. }
  75. },
  76. data(){
  77. return{
  78. loading: false,
  79. moreloading: false,
  80. page: 1,
  81. page_size: 20,
  82. height: '',
  83. tableData:[],
  84. copy_tableData:[],
  85. currPage_len:0,
  86. desCol:[
  87. { prop: "name", label: "名称" },
  88. { prop: "type", label: "类型" },
  89. { prop: "group_name", label: "分组" },
  90. { prop: "tag_list", label: "客户标签" },
  91. { prop: "uv_count", label: "总访问人数",},
  92. { prop: "send_count", label: "总发送次数",},
  93. { prop: "create_time", label: "添加时间", min_width:'17%'},
  94. { prop: "oprate", label: "操作", min_width:'17%'}
  95. ],
  96. }
  97. },
  98. watch:{
  99. 'propsData.initFlag'(){
  100. this.page=1
  101. this.tableData=[]
  102. this.copy_tableData=[]
  103. this.init()
  104. }
  105. },
  106. created() {
  107. this.height = document.documentElement.clientHeight - 300 > 400 ? document.documentElement.clientHeight - 300 : 400
  108. this.init(1)
  109. },
  110. methods:{
  111. load(){
  112. this.page += 1
  113. this.init()
  114. },
  115. goDataAanlyse(id){
  116. this.$router.push('/radar_dataAnalyse/'+id)
  117. },
  118. editRadar(id){
  119. this.$router.push({path:'/createRadar',query: {id:id}})
  120. },
  121. deleRadar(id){
  122. this.loading = true
  123. this.$axios.post(this.URL.BASEURL + this.URL.radar_radarDele, {
  124. radar_id:id
  125. }).then((res) => {
  126. var res = res.data
  127. this.loading = false
  128. this.$message({
  129. message: res.err,
  130. type: "warning"
  131. })
  132. if (res && res.errno == 0) {
  133. this.init(1)
  134. }
  135. }).catch((err) => {
  136. this.loading = false
  137. });
  138. },
  139. draggableSort({to,from,item,clone,oldIndex,newIndex}){
  140. if(!this.copy_tableData[oldIndex].radar_id){
  141. this.$message({
  142. message: '被拖动的雷达id错误',
  143. type: "warning"
  144. })
  145. return
  146. }
  147. this.$axios.post(this.URL.BASEURL + this.URL.radar_radarSort, {
  148. operate_radar_id:this.copy_tableData[oldIndex].radar_id,
  149. behind_radar_id:newIndex-1>=0?this.tableData[newIndex-1].radar_id:'',
  150. front_radar_id:newIndex+1<this.tableData.length?this.tableData[newIndex+1].radar_id:'',
  151. }).then((res) => {
  152. var res = res.data
  153. if (res && res.errno == 0) {
  154. } else if (res.errno != 4002) {
  155. this.$message({
  156. message: res.err,
  157. type: "warning"
  158. })
  159. }
  160. })
  161. },
  162. init () {
  163. this.loading = true
  164. if(this.currPage_len>=this.page_size){
  165. this.moreloading = true
  166. }
  167. this.$axios.get(this.URL.BASEURL + this.URL.radar_radarList, {
  168. params:{
  169. group_id:this.propsData.group_id,
  170. name:this.propsData.radar_val,
  171. page: this.page,
  172. page_size: this.page_size,
  173. }
  174. }).then((res) => {
  175. var res = res.data
  176. this.loading = false
  177. if (res && res.errno == 0) {
  178. this.tableData = [...this.tableData,...res.rst.data]
  179. this.copy_tableData = JSON.parse(JSON.stringify(this.tableData))
  180. this.currPage_len=res.rst.data.length
  181. this.moreloading = false
  182. } else if (res.errno != 4002) {
  183. this.$message({
  184. message: res.err,
  185. type: "warning"
  186. })
  187. }
  188. }).catch((err) => {
  189. this.loading = false
  190. });
  191. },
  192. }
  193. }
  194. </script>
  195. <style lang="scss" scoped>
  196. .span_title{
  197. font-weight: 600;
  198. color: #000;
  199. margin: 10px 0 ;
  200. }
  201. .ghostClass{
  202. font-weight: 600;
  203. }
  204. .tHead{
  205. border:1px solid #ddd;
  206. border-bottom: none;
  207. div{
  208. background-color: #f6f6f6 ;
  209. font-size:14px;
  210. display:inline-block;
  211. font-weight:600;
  212. color:#777;
  213. text-align: center;
  214. height:48px;
  215. line-height:48px
  216. };
  217. }
  218. .tBody{
  219. height: calc(100vh - 60px - 62px - 20px - 10px - 50px);
  220. overflow-y: auto;
  221. .body_item{
  222. display: flex;
  223. align-items: center;
  224. cursor: move;
  225. padding:20px 0;
  226. border:1px solid #ddd;
  227. border-bottom:none;
  228. .body_cell{
  229. font-size:14px;
  230. color:#333;
  231. text-align: center;
  232. }
  233. }
  234. }
  235. .borderBottomline{
  236. border-bottom:1px solid #ddd!important;
  237. }
  238. .c-00B38A {
  239. color: #00B38A!important;
  240. }
  241. .noData{
  242. text-align:center;
  243. margin:20px auto;
  244. }
  245. </style>