dataAssociateChart.vue 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. <template>
  2. <div class="associate-chart">
  3. <div v-if="list.length===0&&finished" style="text-align:center;display:block" class="empty-list">
  4. <tableNoData text="该指标暂无关联图"/>
  5. </div>
  6. <template v-else>
  7. <p style="position:relative;top:-20px;font-size:16px">共 {{chartTotal}} 张图表</p>
  8. <div
  9. class="chart-public-list"
  10. v-infinite-scroll="load"
  11. infinite-scroll-immediate="false"
  12. :infinite-scroll-disabled="finished"
  13. >
  14. <el-col
  15. :span="6"
  16. style="margin-bottom: 20px; padding-right: 20px"
  17. v-for="chart in list"
  18. :key="chart.ChartInfoId"
  19. >
  20. <el-card class="public-chart-item">
  21. <div slot="header" class="item-top">
  22. <span class="text_oneLine">{{ chart.ChartName }}</span>
  23. </div>
  24. <img
  25. :src="chart.ChartImage"
  26. alt=""
  27. class="chart-img"
  28. @click="detailShowHandle(chart)"
  29. />
  30. <div class="item-bottom">
  31. <span>创建时间: {{ chart.CreateTime.slice(0,10) }}</span>
  32. <span
  33. class="join_txt"
  34. @click="addMychartHandle(chart)"
  35. >
  36. <img
  37. :src="$icons.chart_join_ico"
  38. alt=""
  39. style="width: 13px; height: 12px; vertical-align: middle"
  40. />
  41. 加入我的图库
  42. </span>
  43. </div>
  44. </el-card>
  45. </el-col>
  46. </div>
  47. </template>
  48. <!-- 加入我的图库弹窗 -->
  49. <addMyClassifyDia
  50. :isAddMyDialog="isAddMyChart"
  51. :add_id="add_chart_id"
  52. :add_ids="add_ids"
  53. @cancel="isAddMyChart = false"
  54. @addSuccess="addMySuccess"
  55. />
  56. <!-- 图表详情弹窗 -->
  57. <chart-detail
  58. ref="chartDetailRef"
  59. :isOpenDetail="isOpenDetail"
  60. :select_classify="select_classify"
  61. :chart_code="chart_code"
  62. :allChart="chartArrParams"
  63. :classifyUserId="0"
  64. @close="chartCallBack"
  65. @remove="removeCallBack"
  66. />
  67. </div>
  68. </template>
  69. <script>
  70. import { dataBaseInterface } from '@/api/api.js';
  71. import addMyClassifyDia from '../components/addMyClassifyDia';
  72. import chartDetail from '@/views/mychart_manage/components/chartDetailDia.vue';
  73. export default {
  74. components:{
  75. addMyClassifyDia,
  76. chartDetail
  77. },
  78. props:{
  79. edbInfoId:{
  80. type:Number
  81. }
  82. },
  83. watch: {
  84. 'edbInfoId':{
  85. handler(n){
  86. if(n){
  87. this.page=1
  88. this.list=[]
  89. this.finished=false
  90. this.chartTotal=0
  91. this.getChartList()
  92. }
  93. },
  94. immediate:true
  95. }
  96. },
  97. data() {
  98. return {
  99. list:[],
  100. page:1,
  101. pageSize:20,
  102. chartTotal:0,
  103. finished:false,
  104. // 加入我的
  105. isAddMyChart: false, //加入图库弹窗
  106. add_chart_id: 0, //要加入的图表
  107. add_ids:[],//加入时已有的分类
  108. // 显示详情弹窗
  109. chart_code:'',
  110. isOpenDetail:false,
  111. chartArrParams:[],
  112. select_classify:''
  113. }
  114. },
  115. methods: {
  116. async getChartList(){
  117. const res=await dataBaseInterface.edbRelationChartList({
  118. PageSize: this.pageSize,
  119. CurrentIndex: this.page,
  120. EdbInfoId:this.edbInfoId
  121. })
  122. if(res.Ret!==200) return
  123. this.list=res.Data?this.page==1?res.Data.List:[...this.list,...res.Data.List]:[]
  124. this.chartTotal=res.Data?res.Data.Paging.Totals : 0
  125. this.finished=res.Data?res.Data.Paging.IsEnd:true
  126. },
  127. load(){
  128. if(this.finished) return
  129. this.page++
  130. this.getChartList()
  131. },
  132. /* 加入我的图库 */
  133. addMychartHandle(item) {
  134. this.add_chart_id = item.ChartInfoId;
  135. //已有的分类ids
  136. this.add_ids = item.MyChartClassifyId ? item.MyChartClassifyId.split(',').map(item => Number(item)) : [];
  137. this.isAddMyChart = true;
  138. },
  139. /* 加入我的图库成功 */
  140. addMySuccess(params) {
  141. this.isAddMyChart = false;
  142. this.list.forEach(item => {
  143. if (item.ChartInfoId === this.add_chart_id) {
  144. item.IsAdd = true;
  145. item.MyChartId = params.MyChartInfoId;
  146. item.MyChartClassifyId = params.MyChartClassifyId
  147. }
  148. });
  149. if(this.isOpenDetail) this.$refs.chartDetailRef.getChartDetail();
  150. },
  151. //显示详情
  152. detailShowHandle({ UniqueCode }){
  153. this.chart_code = UniqueCode;
  154. // 获取当前列表中所有图 获取code
  155. this.chartArrParams = this.list.map(item => item.UniqueCode) ||[];
  156. this.isOpenDetail = true;
  157. },
  158. chartCallBack(){
  159. this.page=1
  160. this.list=[]
  161. this.getChartList()
  162. this.isOpenDetail = false;
  163. },
  164. removeCallBack(code){
  165. this.chartArrParams.splice(this.chartArrParams.findIndex(item => item === code), 1)
  166. }
  167. },
  168. }
  169. </script>
  170. <style lang="scss" scoped>
  171. .empty-list{
  172. min-height: calc(100vh - 300px);
  173. background-color: #fff;
  174. margin-top: -30px;
  175. padding-top: 100px;
  176. }
  177. .chart-public-list{
  178. display: flex;
  179. flex-wrap: wrap;
  180. max-height: calc(100vh - 143px);
  181. overflow: hidden;
  182. overflow-y: auto;
  183. }
  184. .public-chart-item {
  185. .item-top {
  186. display: flex;
  187. justify-content: space-between;
  188. align-items: center;
  189. font-size: 16px;
  190. font-weight: 600;
  191. }
  192. .chart-img {
  193. width: 100%;
  194. height: 230px;
  195. object-fit: fill !important;
  196. cursor: pointer;
  197. }
  198. .item-bottom {
  199. margin-top: 10px;
  200. display: flex;
  201. justify-content: space-between;
  202. font-size: 12px;
  203. color: #666;
  204. .collected {
  205. color: #f00;
  206. cursor: pointer;
  207. }
  208. .join_txt {
  209. color: #409eff;
  210. cursor: pointer;
  211. }
  212. }
  213. }
  214. </style>