edbDetail.vue 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. <template>
  2. <div class="edb-detail-wrap" v-show="edbData.DataList">
  3. <chartInfo
  4. :edbData="edbData"
  5. :lang="lang"
  6. @refreshData="refreshData"
  7. ref="chartInfo"
  8. />
  9. <div class="info" style="display: flex;justify-content: space-between;">
  10. <span>数据来源:{{edbData.EdbInfo.SourceName}}</span>
  11. <span>添加人:{{edbData.EdbInfo.SysUserRealName}}</span>
  12. </div>
  13. <ul
  14. class="value-ul"
  15. v-show="showData&&dataList.length"
  16. >
  17. <li class="value-item">
  18. <!-- <span>日期(频度:{{EdbData.Frequency}})</span> -->
  19. <span>频度</span>
  20. <span>日期</span>
  21. <span style="min-width:200px;text-align:center;">值</span>
  22. </li>
  23. <li
  24. class="value-item"
  25. v-for="item in dataList.slice(0,3)"
  26. :key="item.EdbDataId"
  27. >
  28. <span>{{EdbData.Frequency}}</span>
  29. <span class="value-label">
  30. <span>
  31. <i class="new-tag" v-if="EdbData.LatestDate===item.DataTime"></i>
  32. {{ item.DataTime }}
  33. </span>
  34. </span>
  35. <span
  36. :class="['value-label',{'predict-act': item.isPredic}]"
  37. style="min-width: 200px; text-align: center"
  38. >
  39. <span :class="['value-style',{'predict-act': item.isPredic}]">{{item.Value}}</span>
  40. </span
  41. >
  42. </li>
  43. <li class="nodata value-item" v-if="!dataList.length">暂无数据</li>
  44. </ul>
  45. </div>
  46. </template>
  47. <script>
  48. import * as preDictEdbInterface from '@/api/modules/predictEdbApi.js';
  49. import { dataBaseInterface } from '@/api/api.js';
  50. import chartInfo from './chartInfo.vue'
  51. export default {
  52. props:{
  53. id: Number,
  54. lang: String
  55. },
  56. components:{chartInfo},
  57. watch:{
  58. id:{
  59. handler(n){
  60. if(n){
  61. this.$nextTick(()=>{
  62. this.getDetail()
  63. })
  64. }
  65. },
  66. immediate:true
  67. },
  68. lang(newval){
  69. this.$emit('updateTit',{
  70. edb_name: this.edbData.EdbInfo.EdbName,
  71. edb_nameEn: this.edbData.EdbInfo.EdbNameEn,
  72. userid: this.edbData.EdbInfo.SysUserId
  73. })
  74. }
  75. },
  76. data() {
  77. return {
  78. edbData:{
  79. DataList:null,
  80. EdbInfo:{}
  81. },
  82. showData:false,
  83. dataList: [],
  84. EdbData:{}
  85. }
  86. },
  87. methods: {
  88. getDetail(type=''){
  89. preDictEdbInterface.edbChartInfo({
  90. EdbInfoId: this.id,
  91. DateType: this.$refs.chartInfo.year_select,
  92. StartDate: this.$refs.chartInfo.select_date[0]||'',
  93. EndDate: this.$refs.chartInfo.select_date[1]||'',
  94. ChartType:this.$refs.chartInfo.chartInfo.ChartType,
  95. SeasonStartDate:this.$refs.chartInfo.season_year[0]||'',
  96. SeasonEndDate:this.$refs.chartInfo.season_year[1]||'',
  97. Calendar:this.$refs.chartInfo.calendar_type
  98. }).then(res=>{
  99. if(res.Ret!=200) return
  100. this.edbData.DataList=res.Data.DataList||[]
  101. this.edbData.EdbInfo={
  102. ...res.Data.EdbInfo,
  103. ChartColor:'',
  104. ChartStyle:'',
  105. ChartType:0,
  106. ChartWidth:0,
  107. MaxData:type==='saveLimit' ? this.$refs.chartInfo.tableData[0].MaxData : res.Data.EdbInfo.MaxValue,
  108. MinData:type==='saveLimit' ? this.$refs.chartInfo.tableData[0].MinData : res.Data.EdbInfo.MinValue,
  109. EdbInfoCategoryType:1,
  110. EdbInfoType:1,
  111. EdbName:res.Data.EdbInfo.EdbName,
  112. IsAxis:1
  113. }
  114. this.$emit('updateTit',{
  115. edb_name: res.Data.EdbInfo.EdbName,
  116. edb_nameEn: res.Data.EdbInfo.EdbNameEn,
  117. userid: res.Data.EdbInfo.SysUserId
  118. })
  119. this.$emit('setOpera',res.Data.Button)
  120. this.$emit('setCurrentClassify',res.Data.EdbInfo.ClassifyId)
  121. //更新图片
  122. if(type==='updateImg' || !res.Data.EdbInfo.ChartImage) {
  123. console.log(type);
  124. console.log(res.Data.EdbInfo.ChartImage);
  125. this.$nextTick(() => {
  126. this.setChartImage()
  127. })
  128. }
  129. this.getData()
  130. })
  131. },
  132. refreshData(type=''){
  133. this.getDetail(type)
  134. },
  135. changeEnOptions() {
  136. this.$emit('openEnNameDia',this.edbData.EdbInfo)
  137. },
  138. /* 关联图片 */
  139. setChartImage() {
  140. let svg = this.$refs.chartInfo.$refs.chartRef.chart.getSVG({
  141. chart:{
  142. width: 340,
  143. height: 230,
  144. }
  145. });
  146. let form = new FormData();
  147. form.append('Img', svg);
  148. this.setImageHandle(form);
  149. },
  150. async setImageHandle(form) {
  151. let { Data } = await dataBaseInterface.uploadImgSvg(form);
  152. await preDictEdbInterface.setImg({
  153. EdbInfoId: this.id,
  154. ImageUrl: Data.ResourceUrl,
  155. });
  156. },
  157. getData(){
  158. preDictEdbInterface.edbDataInfo({
  159. EdbInfoId: this.id,
  160. CurrentIndex: 1
  161. }).then(res => {
  162. this.showData = true;
  163. if(res.Ret!==200) return
  164. const {Item} = res.Data
  165. Item.PredictDataList && Item.PredictDataList.forEach(_ => {
  166. _.isPredic = true;
  167. })
  168. this.EdbData = Item
  169. this.dataList = [...Item.PredictDataList,...Item.DataList]
  170. })
  171. },
  172. },
  173. }
  174. </script>
  175. <style lang="scss" scoped>
  176. .value-ul {
  177. margin-top: 10px;
  178. border-bottom: 1px solid #dcdfe6;
  179. .value-item {
  180. padding: 14px 0;
  181. border: 1px solid #dcdfe6;
  182. border-bottom: none;
  183. display: flex;
  184. justify-content: space-around;
  185. span{
  186. flex: 1;
  187. text-align: center;
  188. }
  189. .value-label {
  190. position: relative;
  191. color: #666;
  192. .value-style{
  193. background-color: #ECF2FE;
  194. color: #0052D9;
  195. padding:5px;
  196. border-radius: 4px;
  197. &.predict-act {
  198. color: orange;
  199. }
  200. }
  201. }
  202. .predict-act {
  203. color: orange;
  204. }
  205. .new-tag {
  206. width: 6px;
  207. height: 6px;
  208. display: inline-block;
  209. position: absolute;
  210. left: -12px;
  211. top: 50%;
  212. transform: translateY(-50%);
  213. border-radius: 50%;
  214. background: #f00;
  215. }
  216. }
  217. .nodata {
  218. text-align: center;
  219. padding: 40px 0;
  220. color: #999;
  221. }
  222. }
  223. </style>