editChart.vue 44 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437
  1. <template>
  2. <div class="editchart-container" id="box">
  3. <span
  4. class="slide-icon slide-right"
  5. @click="isSlideLeft = !isSlideLeft"
  6. v-show="isSlideLeft"
  7. >
  8. <i class="el-icon-d-arrow-right"></i>
  9. </span>
  10. <div class="left-cont" v-show="!isSlideLeft" id="left">
  11. <div class="left-top">
  12. <el-button
  13. type="primary"
  14. @click="saveHandle"
  15. :disabled="chartInfo.ChartType === 5 && tableData.length !== 2"
  16. ><!-- 保存 -->{{$t('Dialog.confirm_save_btn')}}</el-button>
  17. <el-button v-permission="permissionBtn.chartLibPermission.chartLib_otherSave"
  18. type="primary" @click="saveChartOtherHandle"><!-- 另存为 -->{{$t('Table.save_as')}}</el-button>
  19. <el-button type="primary" plain @click="$router.replace({
  20. path: '/chartsetting',
  21. query: {
  22. code: chartInfo.UniqueCode,
  23. id: chartInfo.ChartInfoId
  24. }
  25. })"><!-- 取消 -->{{$t('Dialog.cancel_btn')}}</el-button>
  26. </div>
  27. <div class="left-min">
  28. <el-form
  29. ref="diaForm"
  30. label-position="top"
  31. label-width="80px"
  32. :model="chartInfo"
  33. :rules="chartRules"
  34. >
  35. <el-form-item :label="$t('EtaChartAddPage.label_chart_type')" prop="ChartType">
  36. <el-select
  37. v-model="chartInfo.ChartType"
  38. placeholder="请选择生成样式"
  39. style="width: 90%"
  40. @change="needWatch=true;"
  41. >
  42. <el-option
  43. v-for="item in styleArr"
  44. :key="item.key"
  45. :label="item.label"
  46. :value="item.key"
  47. >
  48. </el-option>
  49. </el-select>
  50. </el-form-item>
  51. <el-form-item :label="$t('EtaChartAddPage.label_chart_theme')" prop="Theme">
  52. <el-select
  53. v-model="chartInfo.ChartThemeId"
  54. placeholder="请选择图表主题"
  55. style="width: 90%"
  56. @change="changeThemeHandle"
  57. >
  58. <el-option
  59. v-for="item in chartThemeArr"
  60. :key="item.ChartThemeId"
  61. :label="item.ChartThemeName"
  62. :value="item.ChartThemeId"
  63. >
  64. </el-option>
  65. </el-select>
  66. </el-form-item>
  67. <el-form-item label="">
  68. <div class="search-cont" v-if="chartInfo.ChartType!==10">
  69. <div>
  70. <label><!-- 选择指标 -->{{$t('Edb.choose_edb')}}:</label>
  71. <el-radio-group v-model="edbFromType">
  72. <el-radio :label="0" style="margin-right: 15px"><!-- ETA指标 -->{{$t('Edb.eta_name')}}</el-radio>
  73. <el-radio :label="1"><!-- ETA预测指标 -->{{$t('Edb.eta_predictor_name')}}</el-radio>
  74. </el-radio-group>
  75. </div>
  76. <el-select
  77. v-model="search_txt"
  78. v-loadMore="searchLoad"
  79. ref="searchRef"
  80. :filterable="!search_txt"
  81. remote
  82. clearable
  83. :placeholder="$t('Edb.InputHolderAll.input_name_orid')"
  84. style="width:90%;margin-top: 10px;display: block;"
  85. :remote-method="searchHandle"
  86. @click.native="inputFocusHandle"
  87. @change="selectTarget($event && searchOptions.find(_ => _.EdbInfoId === $event))"
  88. >
  89. <i slot="prefix" class="el-input__icon el-icon-search"></i>
  90. <el-option
  91. v-for="item in searchOptions"
  92. :key="item.EdbInfoId"
  93. :label="chart_lang==='en'?(item.EdbNameEn||item.EdbName):item.EdbName"
  94. :value="item.EdbInfoId"
  95. :disabled="!item.HaveOperaAuth"
  96. >
  97. <edbDetailPopover :info="item">
  98. <div slot="reference">
  99. <img
  100. :src="$icons.lock_ico2"
  101. width="18"
  102. height="18"
  103. style="vertical-align:middle"
  104. v-if="!item.HaveOperaAuth"
  105. />
  106. {{chart_lang==='en'?(item.EdbNameEn||item.EdbName):item.EdbName }}
  107. </div>
  108. </edbDetailPopover>
  109. </el-option>
  110. </el-select>
  111. </div>
  112. </el-form-item>
  113. <el-form-item :label="$t('Chart.Detail.chart_name')" prop="ChartName">
  114. <el-input
  115. v-model="chartInfo.ChartName"
  116. style="width: 90%"
  117. :placeholder="$t('Dialog.require_vaild')"
  118. clearable
  119. />
  120. </el-form-item>
  121. <el-form-item :label="$t('Chart.Detail.chart_classify')" prop="classify">
  122. <el-cascader
  123. v-model="chartInfo.classify"
  124. :options="classifyOptions"
  125. :props="levelProps"
  126. style="width: 90%"
  127. :placeholder="$t('Chart.InputHolderAll.input_classify')"
  128. />
  129. </el-form-item>
  130. <el-form-item :label="$t('Chart.Detail.chart_unit')" prop="Unit" v-if="[7,11].includes(chartInfo.ChartType)">
  131. <el-select
  132. v-model="chartInfo.Unit"
  133. filterable
  134. allow-create
  135. default-first-option
  136. clearable
  137. @change="changeUnit"
  138. :placeholder="$t('Chart.InputHolderAll.input_common',{label:$t('Chart.Detail.chart_unit')})">
  139. <el-option
  140. v-for="item in UnitOptions"
  141. :key="item.label"
  142. :label="item.label"
  143. :value="item.value">
  144. </el-option>
  145. </el-select>
  146. </el-form-item>
  147. </el-form>
  148. <div class="xaxis-range-cont" v-if="chartInfo.ChartType===2 && tableData && tableData.length>0">
  149. <!-- 仅用于季节性图配置 -->
  150. <div style="margin-bottom: 12px;" class="xaxis-range-tip">
  151. {{$t('EtaChartAddPage.label_xserie_range')}}<!-- 横坐标显示范围 -->
  152. <el-tooltip>
  153. <div slot="content" v-html="$t('EtaChartAddPage.xserie_range_tip')">
  154. </div>
  155. <img src="~@/assets/img/icons/question_mark_black.png" style="height: 16px;cursor: pointer;margin-left: 6px;" />
  156. </el-tooltip>
  157. </div>
  158. <el-date-picker
  159. style="width: 45%;"
  160. v-model="SeasonExtraConfig.XStartDate"
  161. value-format="MM-dd"
  162. popper-class="x-range-picker-date"
  163. format="MM-dd"
  164. :placeholder="$t('Common.ph_time_start')"
  165. @change="xAxisChange"
  166. :clearable="false"
  167. ></el-date-picker>
  168. <el-date-picker
  169. style="width: 45%;"
  170. v-model="SeasonExtraConfig.XEndDate"
  171. value-format="MM-dd"
  172. popper-class="x-range-picker-date"
  173. format="MM-dd"
  174. :placeholder="$t('Common.ph_time_end')"
  175. @change="xAxisChange"
  176. :clearable="false"
  177. ></el-date-picker>
  178. <el-checkbox
  179. :label="$t('EtaChartAddPage.label_cross_year')"
  180. v-model="isSpanYear"
  181. :disabled="isSpanYearDisable"
  182. style="margin-top: 12px;"
  183. @change="changeIsSpanYear"
  184. ></el-checkbox>
  185. <br />
  186. <div class="legend-set-text" @click="openLegendEditDia">
  187. <span>{{$t('EtaChartAddPage.label_legend_set')}}<!-- 图例名称设置 --></span>
  188. <img src="~@/assets/img/icons/edit-blue.png" />
  189. </div>
  190. </div>
  191. <div class="targetset-cont">
  192. <!-- 仅用于散点图配置提出 -->
  193. <div class="scatter-setting" v-if="chartInfo.ChartType === 5 && tableData.length">
  194. <div style="display: flex;margin-right: 15px;">
  195. <span style="margin-right: 3px"><!-- 散点颜色: -->{{$t('Chart.Detail.scatter_color')}}:</span>
  196. <el-color-picker
  197. v-model="tableData[0].ChartColor"
  198. size="mini"
  199. show-alpha
  200. :predefine="predefineColors"
  201. ></el-color-picker>
  202. </div>
  203. <el-checkbox v-model="tableData[0].IsOrder"><!-- 逆序 -->{{$t('Chart.Detail.re_order')}}</el-checkbox>
  204. </div>
  205. <el-collapse v-model="activeNames" class="target-list" v-if="tableData.length&&![7,10,11].includes(chartInfo.ChartType)">
  206. <el-collapse-item v-for="(item,index) in tableData" :key="item.EdbInfoId" :disabled="[2,5].includes(chartInfo.ChartType)">
  207. <template slot="title">
  208. <span class="text_oneLine">{{currentLang==='en'?(item.EdbNameEn||item.EdbName):item.EdbName}}</span>
  209. <i class="el-icon-delete del-icon" @click.stop="delTarget(item)"></i>
  210. </template>
  211. <ul class="setting-cont">
  212. <!-- 堆叠图 或组合图中的堆叠类型 非第一项隐藏配置 -->
  213. <template v-if="showYOptionsHandle(item,index)">
  214. <li>
  215. <el-checkbox v-model="item.IsOrder"><!-- 逆序 -->{{$t('Chart.Detail.re_order')}}</el-checkbox>
  216. </li>
  217. <li>
  218. <el-radio-group v-model="item.IsAxis" size="mini" @input="isChangeEdbAxis=true">
  219. <el-radio-button :label="1"><!-- 左轴 -->{{$t('Chart.Detail.l_axis')}}</el-radio-button>
  220. <el-radio-button :label="0"><!-- 右轴 -->{{$t('Chart.Detail.r_axis')}}</el-radio-button>
  221. <!-- 指标有右轴时才可以选右2轴 不然没有右2这个概念的意义 -->
  222. <el-radio-button
  223. v-if="[1,6].includes(chartInfo.ChartType)"
  224. :label="2"
  225. :disabled="(tableData.findIndex(_ => _.IsAxis===0) === -1)
  226. || (tableData.findIndex(_ => _.IsAxis===0) === index
  227. && tableData.filter(_ => _.IsAxis===0).length === 1)"
  228. ><!-- 右2轴 -->{{$t('Chart.Detail.rtwo_axis')}}</el-radio-button>
  229. </el-radio-group>
  230. </li>
  231. </template>
  232. <li style="min-width: 250px">
  233. <el-radio
  234. v-model="item.EdbInfoType"
  235. :label="1"
  236. @change="getPreviewSplineInfo"
  237. ><!-- 标准指标 -->{{$t('Chart.Detail.stand_lead')}}</el-radio
  238. >
  239. <div style="margin-top: 15px">
  240. <el-radio
  241. v-model="item.EdbInfoType"
  242. :label="0"
  243. style="margin-right: 10px"
  244. @change="getPreviewSplineInfo"
  245. ><!-- 领先指标 -->{{$t('Chart.Detail.leading_lead')}}</el-radio
  246. >
  247. <template v-if="item.EdbInfoType === 0">
  248. <!-- 领先 -->{{$t('EtaChartAddPage.label_lead')}}
  249. <el-input
  250. style="width: 60px"
  251. size="mini"
  252. type="number"
  253. min="0"
  254. v-model="item.LeadValue"
  255. @change="getPreviewSplineInfo"
  256. @keyup.native="filterCode(item)"
  257. ></el-input>
  258. <el-select
  259. v-model="item.LeadUnit"
  260. placeholder=""
  261. style="width: 60px"
  262. size="mini"
  263. @change="getPreviewSplineInfo"
  264. >
  265. <el-option
  266. v-for="item in fre_options"
  267. :key="item"
  268. :label="item"
  269. :value="item"
  270. >
  271. </el-option>
  272. </el-select>
  273. </template>
  274. </div>
  275. </li>
  276. <li>
  277. <div style="display: flex">
  278. <span style="margin-right: 3px"><!-- 线条颜色 -->{{$t('Chart.Detail.line_color')}}:</span>
  279. <el-color-picker
  280. v-model="item.ChartColor"
  281. size="mini"
  282. show-alpha
  283. :predefine="predefineColors"
  284. ></el-color-picker>
  285. </div>
  286. <div style="display: flex;margin-top: 12px" v-if="item.EdbInfoCategoryType === 1">
  287. <span style="margin-right: 3px"><!-- 预测值颜色 -->{{$t('Chart.Detail.predict_color')}}:</span>
  288. <el-color-picker
  289. v-model="item.PredictChartColor"
  290. size="mini"
  291. show-alpha
  292. :predefine="predefineColors"
  293. ></el-color-picker>
  294. </div>
  295. <div
  296. style="margin-top: 12px"
  297. v-if="chartInfo.ChartType === 1
  298. || (chartInfo.ChartType === 6 &&item.ChartStyle==='spline')"
  299. >
  300. <!-- 线条粗细 -->{{$t('Chart.Detail.line_size')}}:
  301. <el-input
  302. style="width: 60px"
  303. size="mini"
  304. type="number"
  305. :min="1"
  306. v-model="item.ChartWidth"
  307. />
  308. </div>
  309. </li>
  310. <li v-if="chartInfo.ChartType === 6">
  311. <div style="display: flex">
  312. <span style="margin-right: 3px"><!-- 生成样式 -->{{$t('Chart.label_create_sty')}}:</span>
  313. <el-select
  314. v-model="item.ChartStyle"
  315. placeholder="请选择生成样式"
  316. style="width: 50%"
  317. class="edb-item-style"
  318. >
  319. <el-option
  320. v-for="item in chartItemStyleArr"
  321. :key="item.key"
  322. :label="item.label"
  323. :value="item.value"
  324. >
  325. </el-option>
  326. </el-select>
  327. </div>
  328. </li>
  329. </ul>
  330. </el-collapse-item>
  331. </el-collapse>
  332. <!-- 奇怪柱状图配置 -->
  333. <bar-option
  334. v-if="[7,11].includes(chartInfo.ChartType)"
  335. ref="BarOptRef"
  336. :chartInfo="chartInfo"
  337. :edblist="tableData"
  338. :datedata="chartInfo.ChartType===7?barDateList:radarChartData.YDataList"
  339. :initData="chartInfo.ChartType===7?initBarOptions:(chartInfo.ExtraConfig&&JSON.parse(chartInfo.ExtraConfig))"
  340. @getData="barOptionPreviewMap"
  341. />
  342. <!-- 截面散点图 -->
  343. <sectional-scatter-option
  344. v-if="chartInfo.ChartType===10"
  345. ref="SectionScatterOptRef"
  346. :chartInfo="chartInfo"
  347. :initData="chartInfo.ExtraConfig?JSON.parse(chartInfo.ExtraConfig):null"
  348. :edbInfoData="tableData"
  349. :IsNameDefault="IsNameDefault"
  350. @getData="getSectionScatterData"
  351. @modifySeriesName="IsNameDefault = false"
  352. />
  353. <!-- 标识区 标记线 图表说明 -->
  354. <markersSection
  355. ref="markerSectionRef"
  356. :chartType="chartInfo.ChartType"
  357. :chartInfo="chartInfo"
  358. @update="setChartMarkerInfo"
  359. />
  360. </div>
  361. </div>
  362. <span
  363. class="move-btn resize"
  364. v-drag
  365. id="resize"
  366. ></span>
  367. <span class="slide-icon slide-left" @click="isSlideLeft = !isSlideLeft">
  368. <i class="el-icon-d-arrow-left"></i>
  369. </span>
  370. </div>
  371. <div class="right-cont" id="right" :style="isSlideLeft ? 'width:100%' : `width:80%`">
  372. <div class="chart-min-cont" v-if="tableData.length">
  373. <div class="cont-top">
  374. <div class="top-left">
  375. <!-- 默认曲线图 -->
  376. <template v-if="sameOptionType.includes(chartInfo.ChartType)">
  377. <el-button
  378. type="primary"
  379. v-for="item in yearSelector"
  380. :key="item.value"
  381. size="medium"
  382. :plain="item.value !== year_select"
  383. class="year-btn"
  384. @click.native="changeYear(item)"
  385. >{{ item.name }}</el-button
  386. >
  387. <el-button type="text" class="btn-sty" @click="openDateDia">{{
  388. dateTip
  389. }}</el-button>
  390. </template>
  391. <!-- 季节性图选择年份区间 -->
  392. <!-- <date-picker
  393. v-else-if="chartInfo.ChartType === 2"
  394. v-model="season_year"
  395. type="month"
  396. value-type="format"
  397. range
  398. placeholder="年份日期选择"
  399. @change="seasonYearChange"
  400. /> -->
  401. <div v-else-if="chartInfo.ChartType === 2" style="padding: 10px 20px;border: 1px solid #eee;border-radius: 8px;cursor: pointer;"
  402. @click="openDateDia">
  403. {{ season_year && season_year.length>0 ? season_year[0]+'~'+season_year[1]:"年份日期选择" }}
  404. </div>
  405. </div>
  406. </div>
  407. <div class="cont-bottom">
  408. <div class="chart-show-cont" v-if="!chartInfo.WarnMsg&&options.series">
  409. <div class="chartWrapper" id="chartWrapper">
  410. <h2
  411. class="chart-title"
  412. v-show="chartInfo.ChartName"
  413. :style="`
  414. textAlign:${JSON.parse(chartInfo.ChartThemeStyle).titleOptions.align};
  415. fontSize:${JSON.parse(chartInfo.ChartThemeStyle).titleOptions.style.fontSize}px;
  416. color:${JSON.parse(chartInfo.ChartThemeStyle).titleOptions.style.color}
  417. `"
  418. >
  419. {{ chartInfo.ChartName }}
  420. </h2>
  421. <Chart :options="options" :chartInfo="chartInfo" ref="chartRef" />
  422. <!-- <div class="range-cont left" v-if="leftIndex != -1">
  423. <el-input
  424. style="width: 60px; display: block"
  425. size="mini"
  426. type="number"
  427. placeholder="上限"
  428. v-model="tableData[leftIndex].MaxData"
  429. />
  430. <el-input
  431. class="min-data-input"
  432. size="mini"
  433. type="number"
  434. placeholder="下限"
  435. v-model="tableData[leftIndex].MinData"
  436. />
  437. </div>
  438. <div class="range-cont right" v-if="rightIndex != -1">
  439. <el-input
  440. style="width: 60px; display: block"
  441. size="mini"
  442. type="number"
  443. placeholder="上限"
  444. v-model="tableData[rightIndex].MaxData"
  445. />
  446. <el-input
  447. class="min-data-input"
  448. size="mini"
  449. type="number"
  450. placeholder="下限"
  451. v-model="tableData[rightIndex].MinData"
  452. />
  453. </div>
  454. <div class="range-cont rightTwo" v-if="rightTwoIndex != -1">
  455. <el-input
  456. style="width: 60px; display: block"
  457. size="mini"
  458. type="number"
  459. placeholder="上限"
  460. v-model="tableData[rightTwoIndex].MaxData"
  461. />
  462. <el-input
  463. class="min-data-input"
  464. size="mini"
  465. type="number"
  466. placeholder="下限"
  467. v-model="tableData[rightTwoIndex].MinData"
  468. />
  469. </div> -->
  470. <!-- 需求:曲线图、堆积柱状图、组合图加入新指标时上下限自动调整 -->
  471. <template v-if="![7,10,11].includes(chartInfo.ChartType)">
  472. <div class="range-cont left" v-if="leftIndex !== -1">
  473. <el-input
  474. style="width: 60px; display: block"
  475. size="mini"
  476. type="number"
  477. placeholder="上限"
  478. v-model="chartLimit.max"
  479. @change="changeLimit"
  480. />
  481. <el-input
  482. class="min-data-input"
  483. size="mini"
  484. type="number"
  485. placeholder="下限"
  486. v-model="chartLimit.min"
  487. @change="changeLimit"
  488. />
  489. </div>
  490. <div class="range-cont right" v-if="rightIndex !== -1">
  491. <el-input
  492. style="width: 60px; display: block"
  493. size="mini"
  494. type="number"
  495. placeholder="上限"
  496. v-model="chartLimit.rightMax"
  497. @change="changeLimit"
  498. />
  499. <el-input
  500. class="min-data-input"
  501. size="mini"
  502. type="number"
  503. placeholder="下限"
  504. v-model="chartLimit.rightMin"
  505. @change="changeLimit"
  506. />
  507. </div>
  508. <!-- 右2上下限设置 -->
  509. <div class="range-cont rightTwo" v-if="rightTwoIndex !== -1">
  510. <el-input
  511. style="width: 60px; display: block"
  512. size="mini"
  513. type="number"
  514. placeholder="上限"
  515. v-model="chartLimit.rightTwoMax"
  516. @change="changeLimit"
  517. />
  518. <el-input
  519. class="min-data-input"
  520. size="mini"
  521. type="number"
  522. placeholder="下限"
  523. v-model="chartLimit.rightTwoMin"
  524. @change="changeLimit"
  525. />
  526. </div>
  527. </template>
  528. <!-- 后续新图专用上下限 和其他数据依赖不公用 柱形图 截面散点-->
  529. <template v-if="[7,10,11].includes(chartInfo.ChartType)">
  530. <div class="range-cont left">
  531. <el-input
  532. style="width: 60px; display: block"
  533. size="mini"
  534. type="number"
  535. placeholder="上限"
  536. v-model="chartLimit.max"
  537. @change="changeLimit"
  538. />
  539. <el-input
  540. class="min-data-input"
  541. size="mini"
  542. type="number"
  543. placeholder="下限"
  544. v-model="chartLimit.min"
  545. @change="changeLimit"
  546. />
  547. </div>
  548. <!-- x轴上下限 -->
  549. <div class="range-cont bottom" v-if="chartLimit.x_min||chartLimit.x_max">
  550. <el-input
  551. class="left"
  552. size="mini"
  553. type="number"
  554. placeholder="下限"
  555. v-model="chartLimit.x_min"
  556. @change="changeLimit"
  557. />
  558. <el-input
  559. class="left"
  560. size="mini"
  561. type="number"
  562. placeholder="上限"
  563. v-model="chartLimit.x_max"
  564. @change="changeLimit"
  565. />
  566. </div>
  567. </template>
  568. </div>
  569. <div class="chart-bottom-insruction-info">
  570. <div class="chart-source">
  571. <span
  572. v-if="chartInfo.SourcesFrom"
  573. :style="`
  574. color: ${JSON.parse(chartInfo.SourcesFrom).isShow ? JSON.parse(chartInfo.SourcesFrom).color : '#999'};
  575. fontSize: ${ JSON.parse(chartInfo.SourcesFrom).fontSize }px;
  576. `"
  577. ><!-- 来源 -->{{$t('Chart.Detail.source')}}:{{ JSON.parse(chartInfo.SourcesFrom).text}}</span>
  578. <el-switch
  579. v-if="chartInfo.SourcesFrom"
  580. v-model="chartInfo.SourcesFromVisable"
  581. :active-value="true"
  582. :inactive-value="false"
  583. style="margin:0 15px;"
  584. @change="changeSourceVisable"
  585. />
  586. <span class="editsty" @click="isShowSourceDialog=true"><!-- 编辑 -->{{$t('Chart.chart_edit_btn')}}</span>
  587. </div>
  588. <!-- 公历农历切换 只用于季节性图 -->
  589. <el-radio-group
  590. v-model="calendar_type"
  591. class="calendar-cont"
  592. v-if="chartInfo.ChartType === 2"
  593. @change="getPreviewSplineInfo"
  594. >
  595. <el-radio-button label="公历">{{$t('Chart.calendar_gre')}}</el-radio-button>
  596. <el-radio-button label="农历">{{$t('Chart.calendar_lunar')}}</el-radio-button>
  597. </el-radio-group>
  598. <!-- 图表说明 -->
  599. <div
  600. class="chart-instruction"
  601. v-if="chartInfo.Instructions&&JSON.parse(chartInfo.Instructions).isShow"
  602. v-text="JSON.parse(chartInfo.Instructions).text"
  603. :style="`
  604. color: ${JSON.parse(chartInfo.Instructions).color};
  605. fontSize: ${ JSON.parse(chartInfo.Instructions).fontSize }px
  606. `"
  607. ></div>
  608. </div>
  609. <span class="chart-author"><!-- 作者 -->{{$t('Chart.Detail.author')}}:{{ chartInfo.SysUserRealName }}</span>
  610. </div>
  611. <!-- 异常显示 -->
  612. <p class="error-tip" style="min-height: 400px" v-if="chartInfo.WarnMsg">{{chartInfo.WarnMsg}}</p>
  613. <!-- 关联指标 -->
  614. <chartRelationEdbList
  615. :chartInfo="chartInfo"
  616. :tableData="tableData"
  617. :updateData="updateData"
  618. @changeTableData="changeTableData"
  619. @delTarget="delTarget"
  620. @copyCode="copyCode"
  621. @viewTarget="viewTarget"
  622. />
  623. </div>
  624. </div>
  625. <div class="nodata" v-else>
  626. <tableNoData :text="$t('Common.no_info_msg')"/>
  627. </div>
  628. </div>
  629. <!-- 日期端选择弹窗 -->
  630. <DateChooseDia
  631. :isDateDia="isDateDia"
  632. :dateForm="dateForm"
  633. :earliestDate="earliestDate"
  634. @cancel="isDateDia = false"
  635. @dateBack="dataChangeBack"
  636. />
  637. <!-- 季节性 图例设置 -->
  638. <LegendEditDia
  639. :isEditLegend="legendEditDiaShow"
  640. :legendList="SeasonExtraConfig.ChartLegend"
  641. @cancel="legendEditDiaShow = false"
  642. @saveLegend="saveLegend"
  643. />
  644. <!-- 图表另存 -->
  645. <SaveChartOther
  646. :show.sync="isShowSaveOther"
  647. :data="chartInfo"
  648. />
  649. <!-- 数据来源编辑弹窗 -->
  650. <chartSourceEditDia
  651. :isShow.sync="isShowSourceDialog"
  652. :chartInfo="chartInfo"
  653. @update="value => {chartInfo.SourcesFrom=JSON.stringify({...value,isShow:chartInfo.SourcesFromVisable})}"
  654. />
  655. </div>
  656. </template>
  657. <script>
  658. import { dataBaseInterface } from '@/api/api.js';
  659. import { chartSetMixin } from './mixins/chartPublic';
  660. import {unitSelectList} from '@/utils/defaultOptions.js'
  661. import addOrEditMixn from './mixins/addOreditMixin';
  662. import Chart from './components/chart';
  663. import DateChooseDia from './components/DateChooseDia';
  664. import SaveChartOther from './components/SaveChartOther';
  665. import barOption from './components/barOptionSection.vue';
  666. import sectionalScatterOption from './components/sectionalScatterOption.vue';
  667. import LegendEditDia from './components/LegendEditDia.vue';
  668. import markersSection from './components/markersSection.vue';
  669. import chartSourceEditDia from './components/chartSourceEditDialog.vue';
  670. import chartRelationEdbList from './components/chartReleationEdbTable.vue';
  671. export default {
  672. components: { Chart,DateChooseDia,SaveChartOther,barOption,sectionalScatterOption,LegendEditDia,markersSection,chartSourceEditDia,chartRelationEdbList },
  673. directives: {
  674. drag(el, bindings) {
  675. el.onmousedown = function (e) {
  676. var init = e.clientX;
  677. // console.log(init);
  678. var box = $('#box')[0];
  679. // console.log(box.clientWidth)
  680. let total_wid = box.offsetWidth;
  681. var left = $('#left')[0];
  682. var right = $('#right')[0];
  683. var initWidth = left.offsetWidth;
  684. document.onmousemove = function (e) {
  685. var end = e.clientX;
  686. var newWidth = end - init + initWidth;
  687. left.style.width = newWidth + 'px';
  688. right.style.width = newWidth > 300 ? total_wid - newWidth + 'px' : total_wid - 320 + 'px';
  689. };
  690. document.onmouseup = function () {
  691. document.onmousemove = document.onmouseup = null;
  692. e.releaseCapture && e.releaseCapture();
  693. };
  694. e.setCapture && e.setCapture();
  695. return false;
  696. };
  697. },
  698. },
  699. watch: {
  700. tableData: {
  701. handler(newval, oldval) {
  702. if(newval) {
  703. if([7,10,11].includes(this.chartInfo.ChartType)) {
  704. // 奇怪柱形图
  705. this.chartInfo.ChartType === 7 && this.barDateList.length && this.$refs.BarOptRef && this.$refs.BarOptRef.getBarData();
  706. //雷达图
  707. this.chartInfo.ChartType === 11 && this.$refs.BarOptRef && this.$refs.BarOptRef.getBarData();
  708. }else {
  709. //只有当新增指标or切换左右轴时,才更新上下限
  710. if(this.updateLimit){
  711. this.EdbAxisChange()
  712. }
  713. this.setAddChartDefault();
  714. newval.length && !this.chartInfo.WarnMsg && this.setChartOptionHandle(newval);
  715. }
  716. // 设置起始日期和最新日期
  717. this.setExtremumDate()
  718. }
  719. },
  720. deep: true,
  721. },
  722. },
  723. mixins: [chartSetMixin,addOrEditMixn],
  724. computed:{
  725. UnitOptions(){
  726. return unitSelectList()
  727. }
  728. },
  729. data() {
  730. return {
  731. isSlideLeft: false,
  732. search_txt: '',
  733. activeNames: '',
  734. /* right */
  735. calendar_type: '公历',//默认公历
  736. season_year:'',//季节图时间段
  737. initBarOptions: null,//编辑时回显的barOptions数据
  738. needWatch: false,
  739. IsNameDefault:true,
  740. /* UnitOptions:unitArr */
  741. };
  742. },
  743. methods: {
  744. /* 获取图表详情 */
  745. getChartInfo() {
  746. dataBaseInterface
  747. .getChartByCode({
  748. UniqueCode: this.$route.query.code,
  749. })
  750. .then((res) => {
  751. if (res.Ret !== 200) return;
  752. const { ChartInfo,EdbInfoList,BarChartInfo} = res.Data;
  753. const {SeriesList=[]} = ChartInfo.ExtraConfig?JSON.parse(ChartInfo.ExtraConfig):{}
  754. const {IsNameDefault=true} = SeriesList.length?SeriesList[0]:[]
  755. this.IsNameDefault = IsNameDefault
  756. this.chartInfo = {
  757. ...ChartInfo,
  758. ChartName: this.currentLang==='en'?ChartInfo.ChartNameEn:ChartInfo.ChartName,
  759. classify: [ChartInfo.ChartClassify[0].ParentId,...ChartInfo.ChartClassify.map(item => item.ChartClassifyId)],
  760. Unit: ChartInfo.ChartType===7
  761. ? (this.currentLang==='en'?BarChartInfo.UnitEn:BarChartInfo.Unit)
  762. : (this.currentLang==='en'?ChartInfo.UnitEn:ChartInfo.Unit),
  763. SourcesFromVisable: ChartInfo.SourcesFrom ? JSON.parse(ChartInfo.SourcesFrom).isShow : true
  764. };
  765. //处理下历史默认来源
  766. this.setDefaultSourceFrom();
  767. this.$refs.markerSectionRef.initData(ChartInfo);
  768. this.tableData = EdbInfoList;
  769. this.updateData = this.tableData.map(item=>{
  770. return this.formatUpdateData(item)
  771. })
  772. this.calendar_type = this.chartInfo.Calendar; //日历类型
  773. this.setDefaultPreviewOption() // 设置配置项
  774. this.$nextTick(()=>{
  775. this.setDefaultDateSelect(); //设置默认的日期选中
  776. })
  777. if(this.chartInfo.ChartType === 7) {
  778. //特殊柱形图数据
  779. this.initBarData(res.Data)
  780. this.initBarOptions = BarChartInfo;
  781. }
  782. //截面散点图
  783. this.chartInfo.ChartType === 10 && this.initSectionScatterData(res.Data);
  784. //雷达图
  785. this.chartInfo.ChartType === 11 && this.initRadarData(res.Data);
  786. this.getThemeList();
  787. //初始化上下限
  788. this.setLimitData(this.tableData)
  789. });
  790. },
  791. /* 设置默认时间选中项 */
  792. setDefaultDateSelect() {
  793. this.year_select = this.chartInfo.DateType;
  794. this.select_date = [this.chartInfo.StartDate, this.chartInfo.EndDate];
  795. this.count_year = this.chartInfo.StartYear;
  796. // this.calendar_type = this.chartInfo.Calendar; //日历类型
  797. if(this.chartInfo.ChartType==2){
  798. if(this.year_select==20){
  799. let latestYear = parseInt(this.tableData[0].LatestDate.substring(0,4))
  800. this.season_year=[`${latestYear-this.count_year+1}-01-01`,`${latestYear}-12-31`]
  801. }else if(this.year_select==6){
  802. this.season_year = [this.chartInfo.SeasonStartDate,this.tableData[0].LatestDate];
  803. }else{
  804. this.season_year = [this.chartInfo.SeasonStartDate,this.chartInfo.SeasonEndDate]
  805. }
  806. }
  807. this.dateTip =
  808. this.chartInfo.DateType === 5
  809. ? `${this.chartInfo.StartDate}~${this.chartInfo.EndDate}`
  810. : this.chartInfo.DateType === 6
  811. ? /* `${this.chartInfo.StartDate}~至今` */ this.$t('Chart.data_tip_since',{date:this.chartInfo.StartDate})
  812. : this.chartInfo.DateType === 20
  813. ?/* `最近${this.chartInfo.StartYear}年` */ this.$t('Chart.date_tip_count',{year:this.chartInfo.StartYear})
  814. :/* '请选择时间段' */this.$t('Chart.choose_time');
  815. },
  816. // 设置配置项
  817. setDefaultPreviewOption(){
  818. if(this.chartInfo.ChartType==2){
  819. this.count_year = this.chartInfo.StartYear
  820. // if(!(this.chartInfo.SeasonEndDate && this.chartInfo.SeasonStartDate)){
  821. // // 获取最近日期的年
  822. // let latestYear = parseInt(this.latestDate.substring(0,4))
  823. // this.season_year=[`${latestYear-this.count_year+1}-01-01`,`${latestYear}-12-31`]
  824. // }
  825. if(this.chartInfo.SeasonExtraConfig){
  826. this.SeasonExtraConfig = JSON.parse(this.chartInfo.SeasonExtraConfig)
  827. // console.log(this.SeasonExtraConfig);
  828. this.isSpanYear=!!this.SeasonExtraConfig.JumpYear
  829. this.isSpanYearDisable=
  830. !!(new Date(`2023-${this.SeasonExtraConfig.XStartDate}`) > new Date(`2023-${this.SeasonExtraConfig.XEndDate}`) ||
  831. new Date(`2023-${this.SeasonExtraConfig.XStartDate}`) == new Date(`2023-${this.SeasonExtraConfig.XEndDate}`))
  832. }
  833. // 图例名称 需要在DataList中取,SeasonExtraConfig里面的可能是旧的
  834. this.SeasonExtraConfig.ChartLegend=[]
  835. const chartDataHandle = this.calendar_type === "农历"?
  836. this.tableData[0].DataList.filter((item, index) => index > 0):
  837. this.tableData[0].DataList
  838. chartDataHandle.map(item =>{
  839. this.SeasonExtraConfig.ChartLegend.push({Name:item.Years,Value:item.ChartLegend})
  840. })
  841. }
  842. },
  843. /* 保存 */
  844. saveHandle() {
  845. if(!this.tableData.length)
  846. return this.$message.warning(/* '暂未选择指标' */this.$t('ToolBox.CommodityPriceChart.tips_msg05'));
  847. this.$refs.diaForm.validate((valid) => {
  848. if(valid) {
  849. // 季节图只允许添加一个指标
  850. if(this.chartInfo.ChartType === 2 && this.tableData.length > 1)
  851. return this.$message.warning(/* '您选择的图表样式为季节性图表,只支持单指标画图' */this.$t('Chart.OptMsg.season_one_msg'));
  852. if(this.chartInfo.ChartType === 7 && !this.$refs.BarOptRef.dateList.length)
  853. return this.$message.warning(/*'请添加日期'*/this.$t('ToolBox.CommodityPriceChart.tips_msg06'));
  854. if(this.chartInfo.ChartType === 10 && !this.$refs.SectionScatterOptRef.seriesArr[0].edbs)
  855. return this.$message.warning(/* '请添加系列指标' */this.$t('Chart.OptMsg.season_add_hint'));
  856. if(this.chartInfo.ChartType === 2){
  857. if(!(this.SeasonExtraConfig.XStartDate && this.SeasonExtraConfig.XEndDate)){
  858. return this.$message.warning(/* '横坐标显示范围不能为空' */this.$t('Chart.OptMsg.season_area_hint'));
  859. }
  860. }
  861. let db_arr = this.tableData.map(item => ({
  862. ChartColor: item.ChartColor,
  863. PredictChartColor: item.PredictChartColor,
  864. ChartStyle: item.ChartStyle,
  865. ChartWidth: Number(item.ChartWidth),
  866. EdbInfoId: item.EdbInfoId,
  867. EdbAliasName: item.EdbAliasName,
  868. EdbInfoType: item.EdbInfoType,
  869. IsAxis: item.IsAxis,
  870. IsOrder: item.IsOrder,
  871. LeadUnit: item.EdbInfoType ? '' : item.LeadUnit,
  872. LeadValue: item.EdbInfoType ? 0 : Number(item.LeadValue),
  873. MaxData: Number(item.MaxData),
  874. MinData: Number(item.MinData)
  875. })
  876. )
  877. let hasLimitChange = Boolean(this.chartInfo.MinMaxSave)
  878. //需检测上下限是否修改
  879. if(![7,10,11].includes(this.chartInfo.ChartType)&&!this.chartInfo.MinMaxSave){
  880. const limitSame= this.getLimitInfo()
  881. hasLimitChange = !limitSame
  882. }
  883. if(![10,11].includes(this.chartInfo.ChartType)){
  884. //每个数据转换需要检测是否合法
  885. for(let i=0;i<db_arr.length;i++){
  886. const {IsConvert,ConvertType,ConvertValue} = this.updateData[i]
  887. //计算方式是否合法
  888. if(IsConvert&&!this.checkConver(ConvertType,ConvertValue)){
  889. //提示语:第${i+1}个指标数据转换不合法,请检查数值
  890. return this.$message.warning(this.$t('EtaChartAddPage.data_transformation_list_hint',{num:i+1}))
  891. }
  892. //如果类型为对数,检测数据是否包含负数
  893. if(IsConvert&&ConvertType===3){
  894. if(!this.checkEdbData(this.tableData[i].DataList)){
  895. //提示语:第${i+1}个指标数据含有负数或0,无法进行对数运算,请检查
  896. return this.$message.warning(this.$t('EtaChartAddPage.data_transformation_list_hint2',{num:i+1}))
  897. }
  898. }
  899. }
  900. db_arr = db_arr.map((item,index)=>{
  901. const {IsConvert,ConvertType,ConvertValue,ConvertUnit,ConvertEnUnit} = this.updateData[index]
  902. return {
  903. ...item,
  904. IsConvert:Number(IsConvert),
  905. ConvertType:IsConvert?ConvertType:1,
  906. ConvertValue:IsConvert?Number(ConvertValue):100,
  907. ConvertUnit:IsConvert?ConvertUnit:'',
  908. ConvertEnUnit:IsConvert?ConvertEnUnit:''
  909. }
  910. })
  911. }
  912. const { ChartType,ChartName,ChartThemeId,SourcesFrom,Instructions,MarkersLines,MarkersAreas,ChartThemeStyle } = this.chartInfo;
  913. let public_param = {
  914. ChartClassifyId: this.chartInfo.classify.length ? this.chartInfo.classify[this.chartInfo.classify.length - 1] : 0,
  915. ChartInfoId: this.chartInfo.ChartInfoId,
  916. ChartEdbInfoList: db_arr,
  917. ChartName,
  918. ChartType,
  919. ChartThemeId,
  920. SourcesFrom,
  921. Instructions,
  922. MarkersLines,
  923. MarkersAreas,
  924. ChartThemeStyle
  925. }
  926. //提交参数
  927. const typePrams = this.getSaveParamsByChartType(public_param);
  928. let params = this.sameOptionType.includes(this.chartInfo.ChartType)
  929. ? {
  930. ...public_param,
  931. DateType: this.year_select,
  932. StartYear: this.count_year || 0,
  933. StartDate:
  934. [5,6].includes(this.year_select)
  935. ? this.select_date[0]
  936. : '',
  937. EndDate: this.year_select === 5 ? this.select_date[1] : '',
  938. }
  939. : typePrams
  940. let svg = this.$refs.chartRef.chart.getSVG({
  941. chart: {
  942. width: 340,
  943. height: 230,
  944. }
  945. });
  946. if(![7,10,11].includes(this.chartInfo.ChartType)){
  947. const {
  948. min,max,rightMin,rightMax,rightTwoMin,rightTwoMax
  949. } = this.chartLimit
  950. params = {
  951. ...params,
  952. LeftMin:min+'',
  953. LeftMax:max+'',
  954. RightMin:rightMin+'',
  955. RightMax:rightMax+'',
  956. Right2Min:rightTwoMin+'',
  957. Right2Max:rightTwoMax+'',
  958. MinMaxSave:Number(hasLimitChange)
  959. }
  960. }
  961. dataBaseInterface.chartEdit(params).then(res => {
  962. if(res.Ret !== 200) return;
  963. this.$message.success('编辑成功');
  964. if(this.$route.query.from === 'mychart') {
  965. window.close();
  966. }else {
  967. this.$router.replace({
  968. path: '/chartsetting',
  969. query: {
  970. code: res.Data.UniqueCode,
  971. id: res.Data.ChartInfoId
  972. }
  973. })
  974. }
  975. })
  976. }
  977. })
  978. },
  979. },
  980. mounted() {
  981. this.getMenu();
  982. this.getChartBaseSetting()
  983. this.getChartInfo();
  984. this.reloadRightWid();
  985. window.addEventListener('resize', this.reloadRightWid);
  986. },
  987. destroyed() {
  988. window.removeEventListener('resize', this.reloadRightWid);
  989. }
  990. };
  991. </script>
  992. <style lang="scss">
  993. .editchart-container {
  994. $font-small: 12px; $font-normal: 14px;
  995. display: flex;
  996. *{ box-sizing: border-box; }
  997. .el-form--label-top .el-form-item__label {
  998. padding: 0;
  999. }
  1000. .el-form-item {
  1001. margin-bottom: 8px;
  1002. }
  1003. .el-input-number .el-input__inner {
  1004. padding: 0 34px 0 4px;
  1005. }
  1006. .target-other-name .el-input__inner {
  1007. padding: 0 30px 0 5px !important;
  1008. height: 40px !important;
  1009. line-height: 40px !important;
  1010. }
  1011. .el-color-picker--mini .el-color-picker__trigger {
  1012. width: 60px;
  1013. height: 25px;
  1014. padding: 0;
  1015. }
  1016. .el-color-picker--mini .el-color-picker__mask {
  1017. width: 60px;
  1018. height: 25px;
  1019. }
  1020. .slide-icon {
  1021. padding: 20px 0;
  1022. /* display: block; */
  1023. box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.3);
  1024. border-radius: 5px;
  1025. cursor: pointer;
  1026. position: absolute;
  1027. top: 50%;
  1028. transform: translateY(-50%);
  1029. z-index: 99;
  1030. &:hover {
  1031. background-color: rgba(0, 0, 0, 0.05);
  1032. }
  1033. &.slide-left {
  1034. right: 0;
  1035. }
  1036. &.slide-right {
  1037. left: 0;
  1038. }
  1039. }
  1040. .left-cont {
  1041. width: 400px;
  1042. min-width: 300px;
  1043. background: #fff;
  1044. margin-right: 20px;
  1045. border: 1px solid #ececec;
  1046. border-radius: 4px;
  1047. box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.05);
  1048. height: calc(100vh - 113px);
  1049. overflow: hidden;
  1050. position: relative;
  1051. box-sizing: border-box;
  1052. .left-top {
  1053. padding: 15px 20px;
  1054. border: 1px solid #ececec;
  1055. box-shadow: 0px 3px 6px rgba(167, 167, 167, 0.09);
  1056. }
  1057. .left-min {
  1058. padding: 30px 20px;
  1059. max-height: calc(100vh - 194px);
  1060. overflow-y: auto;
  1061. .search-cont {
  1062. color: #606266;
  1063. }
  1064. .xaxis-range-cont{
  1065. color: #606266;
  1066. margin-top: 20px;
  1067. .xaxis-range-tip{
  1068. display: flex;
  1069. align-items: center;
  1070. justify-content: flex-start;
  1071. .hint-message{
  1072. font-size: 15px;
  1073. line-height: 22px;
  1074. }
  1075. }
  1076. .legend-set-text{
  1077. font-size: 15px;
  1078. color: #1B7BDE;
  1079. display: inline-flex;
  1080. align-items: center;
  1081. justify-content: flex-start;
  1082. margin-top: 20px;
  1083. cursor: pointer;
  1084. img{
  1085. height: 16px;
  1086. margin-left: 5px;
  1087. }
  1088. }
  1089. }
  1090. .targetset-cont {
  1091. padding: 30px 0 20px;
  1092. .el-input__inner {
  1093. height: 27px;
  1094. line-height: 27px;
  1095. padding: 0 4px;
  1096. }
  1097. .el-collapse-item.is-disabled .el-collapse-item__header {
  1098. color: #333;
  1099. }
  1100. .target-list {
  1101. border: 1px solid #DCDFE6;
  1102. .del-icon {
  1103. position: absolute;
  1104. right: 10px;
  1105. font-size: 16px;
  1106. color: #f00;
  1107. cursor: pointer;
  1108. }
  1109. .setting-cont {
  1110. padding: 20px 20px 0;
  1111. li {
  1112. padding-bottom: 20px;
  1113. margin-bottom: 20px;
  1114. border-bottom: 1px solid #DCDFE6;
  1115. &:last-child {
  1116. padding-bottom: 0;
  1117. margin-bottom: 0;
  1118. border-bottom: none;
  1119. }
  1120. }
  1121. }
  1122. }
  1123. .el-collapse-item__header {
  1124. background-color: #F0F2F5;
  1125. margin-bottom: 0;
  1126. border-bottom: 1px solid #DCDFE6;
  1127. padding: 0 30px;
  1128. .el-collapse-item__arrow {
  1129. position: absolute;
  1130. left: 8px;
  1131. }
  1132. }
  1133. .scatter-setting {
  1134. display: flex;
  1135. margin-bottom: 20px;
  1136. }
  1137. }
  1138. }
  1139. .move-btn {
  1140. height: 100%;
  1141. width: 4px;
  1142. position: absolute;
  1143. right: 0px;
  1144. top: 0;
  1145. &:hover {
  1146. cursor: col-resize;
  1147. }
  1148. }
  1149. }
  1150. .right-cont {
  1151. width: 80%;
  1152. .mx-datepicker {
  1153. width: 220px !important;
  1154. }
  1155. /* =================== */
  1156. .chart-min-cont {
  1157. background: #fff;
  1158. border: 1px solid #ececec;
  1159. height: calc(100vh - 118px);
  1160. overflow: auto;
  1161. /* overflow: hidden; */
  1162. border-radius: 4px;
  1163. box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.05);
  1164. .cont-top {
  1165. padding: 12px 30px;
  1166. border-bottom: 1px solid #ececec;
  1167. display: flex;
  1168. justify-content: space-between;
  1169. align-items: center;
  1170. box-shadow: 0px 3px 6px rgba(167, 167, 167, 0.09);
  1171. .top-left {
  1172. .year-btn {
  1173. margin-right: 5px;
  1174. margin-bottom: 5px;
  1175. }
  1176. .btn-sty {
  1177. border: 1px solid #409eff;
  1178. }
  1179. .date-setting{
  1180. border: 1px solid #DCDFE6;
  1181. border-radius: 4px;
  1182. cursor: pointer;
  1183. color: #333333;
  1184. line-height: 16px;
  1185. }
  1186. }
  1187. .top-right {
  1188. font-size: 16px;
  1189. .join_txt {
  1190. color: #409eff;
  1191. cursor: pointer;
  1192. &:hover {
  1193. text-decoration: underline;
  1194. }
  1195. }
  1196. .collected {
  1197. color: #f00;
  1198. cursor: pointer;
  1199. &:hover {
  1200. text-decoration: underline;
  1201. }
  1202. }
  1203. .span-item {
  1204. color: #409eff;
  1205. cursor: pointer;
  1206. &:hover {
  1207. text-decoration: underline;
  1208. }
  1209. .el-icon-collection,
  1210. .el-icon-document-copy {
  1211. color: #409eff;
  1212. }
  1213. }
  1214. }
  1215. }
  1216. .cont-bottom {
  1217. padding: 20px 30px;
  1218. .error-tip{ color: #D03F28; font-size: 16px; margin-bottom: 25px; }
  1219. /* height: calc(100vh - 250px);
  1220. overflow: auto; */
  1221. .el-input__inner {
  1222. height: 27px;
  1223. line-height: 27px;
  1224. padding: 0 4px;
  1225. }
  1226. .el-input-number .el-input__inner {
  1227. padding: 0 34px 0 4px;
  1228. }
  1229. .highcharts-range-selector-group {
  1230. display: none;
  1231. .highcharts-input-group {
  1232. display: none;
  1233. }
  1234. }
  1235. .highcharts-axis-title {
  1236. display: block;
  1237. }
  1238. .calendar-cont {
  1239. display: block;
  1240. margin: 10px auto 0;
  1241. text-align: center;
  1242. }
  1243. /* =================== */
  1244. .chart-show-cont {
  1245. padding: 0 150px 60px 120px;
  1246. position: relative;
  1247. .chart-title {
  1248. font-size: 16px;
  1249. font-weight: normal;
  1250. text-align: center;
  1251. margin-bottom: 10px;
  1252. }
  1253. .chart-author {
  1254. font-size: 14px;
  1255. color: #333;
  1256. position: absolute;
  1257. bottom: 20px;
  1258. right: 50px;
  1259. }
  1260. .chartWrapper {
  1261. position: relative;
  1262. .range-cont {
  1263. position: absolute;
  1264. top: 15%;
  1265. .min-data-input {
  1266. width: 60px;
  1267. display: block;
  1268. }
  1269. &.left {
  1270. left: -80px;
  1271. }
  1272. &.right {
  1273. right: -65px;
  1274. }
  1275. &.rightTwo {
  1276. right: -130px;
  1277. }
  1278. &.bottom {
  1279. width: 100%;
  1280. display: flex;
  1281. justify-content: space-between;
  1282. top: auto;
  1283. right: 0;
  1284. bottom: -2%;
  1285. .left {
  1286. width: 60px;
  1287. display: block;
  1288. flex-shrink: 0;
  1289. }
  1290. }
  1291. }
  1292. }
  1293. }
  1294. .options-cont {
  1295. display: flex;
  1296. flex-wrap: wrap;
  1297. justify-content: space-between;
  1298. }
  1299. }
  1300. }
  1301. .nodata {
  1302. height: calc(100vh - 120px);
  1303. background-color: #fff;
  1304. text-align: center;
  1305. font-size: 16px;
  1306. color: #666;
  1307. padding: 100px 0;
  1308. }
  1309. @media screen and (min-width: 1711px){
  1310. .min-data-input {
  1311. margin-top: 310px;
  1312. }
  1313. .btn-sty {
  1314. padding: 10px;
  1315. }
  1316. .year-btn,.btn-sty {
  1317. font-size: $font-normal;
  1318. }
  1319. .date-setting{
  1320. width: 210px;
  1321. height: 40px;
  1322. padding: 12px;
  1323. font-size: $font-normal;
  1324. }
  1325. }
  1326. @media screen and (max-width: 1710px){
  1327. .min-data-input {
  1328. margin-top: 230px;
  1329. }
  1330. .year-btn {
  1331. font-size: $font-small;
  1332. margin-left: 5px;
  1333. margin-right: 5px;
  1334. margin-bottom: 5px;
  1335. padding: 6px 12px;
  1336. }
  1337. .btn-sty {
  1338. font-size: $font-small;
  1339. margin-left: 5px;
  1340. padding: 6px;
  1341. border: 1px solid #409eff;
  1342. }
  1343. .date-setting{
  1344. width: 180px;
  1345. height: 36px;
  1346. padding: 10px;
  1347. font-size: $font-small;
  1348. }
  1349. }
  1350. }
  1351. .expand-wrap{
  1352. display: flex;
  1353. justify-content: center;
  1354. align-items: center;
  1355. gap:30px;
  1356. .el-checkbox{
  1357. margin-right: 15px;
  1358. }
  1359. .el-input{
  1360. width:100px;
  1361. height:27px;
  1362. line-height: 27px;
  1363. .el-input__icon{
  1364. line-height: 27px;
  1365. }
  1366. }
  1367. }
  1368. }
  1369. </style>
  1370. <style lang="scss">
  1371. .edb-item-style .el-input__icon {
  1372. line-height: 27px;
  1373. }
  1374. /*他不要下拉选择框 QAQ */
  1375. .x-range-picker-date {
  1376. display: none;
  1377. }
  1378. </style>