dataAssociateChart.vue 7.4 KB

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