statisticFeatureList.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816
  1. <template>
  2. <div class="fittingEquation-chart-container" v-if="showData">
  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="data-sheet-main" id="box">
  11. <div class="main-left left" id="left" v-show="!isSlideLeft">
  12. <div class="datasheet_top">
  13. <el-button v-permission="permissionBtn.statisticPermission.statisticFeature_addChart"
  14. type="primary" @click="goAddChart">添加图表</el-button>
  15. </div>
  16. <div class="search-cont">
  17. <el-checkbox v-model="isShowMe" @change="() => { getTreeData();getPublicList() }">只看我的</el-checkbox>
  18. <el-select
  19. v-model="search_txt"
  20. v-loadMore="searchLoad"
  21. :filterable="!search_txt"
  22. remote
  23. clearable
  24. placeholder="请输入图表名称"
  25. style="width: 100%; margin-top: 20px"
  26. :remote-method="searchHandle"
  27. @click.native="inputFocusHandle"
  28. >
  29. <i slot="prefix" class="el-input__icon el-icon-search"></i>
  30. <el-option
  31. v-for="item in searchOptions"
  32. :key="item.ChartInfoId"
  33. :label="item.ChartName"
  34. :value="item.ChartInfoId"
  35. >
  36. </el-option>
  37. </el-select>
  38. </div>
  39. <div class="tree-cont">
  40. <el-tree
  41. ref="treeRef"
  42. class="target_tree"
  43. :data="treeData"
  44. node-key="UniqueCode"
  45. :props="defaultProp"
  46. :allow-drag="canDragHandle"
  47. :allow-drop="canDropHandle"
  48. :current-node-key="select_node"
  49. :default-expanded-keys="defaultShowNodes"
  50. draggable
  51. :expand-on-click-node="false"
  52. check-strictly
  53. empty-text="暂无分类"
  54. @node-expand="handleNodeExpand"
  55. @node-collapse="handleNodeCollapse"
  56. @current-change="nodeChange"
  57. @node-drop="dropOverHandle"
  58. @node-drag-end="dropMouseLeave"
  59. @node-drag-leave="dropMouseLeave"
  60. @node-drag-enter="dropMouseOver"
  61. >
  62. <span class="custom-tree-node" slot-scope="{ node, data }">
  63. <el-input
  64. ref="editVal"
  65. style="width: 90px"
  66. placeholder="请输入值"
  67. class="label-input"
  68. v-model="new_label"
  69. v-if="data.isEdit"
  70. @blur="changeValue(data)"
  71. />
  72. <span
  73. @dblclick.stop="editNodeLabel(data)"
  74. v-else
  75. class="text_oneLine node_label"
  76. :style="`width:${
  77. (select_node === data.UniqueCode && node.Nodewidth) || ''
  78. }`"
  79. >
  80. <span>{{ data.ChartClassifyName }}</span>
  81. </span>
  82. <span
  83. style="display: flex; align-items: center"
  84. v-if="select_node === data.UniqueCode"
  85. >
  86. <img
  87. src="~@/assets/img/data_m/move_ico.png"
  88. alt=""
  89. style="width: 14px; height: 14px; margin-right: 8px"
  90. />
  91. <img
  92. src="~@/assets/img/set_m/edit.png"
  93. alt=""
  94. style="width: 15px; height: 14px; margin-right: 8px"
  95. @click.stop="editNode(node, data)"
  96. v-if="!data.ChartInfoId"
  97. />
  98. <img
  99. slot="reference"
  100. src="~@/assets/img/set_m/del.png"
  101. alt=""
  102. style="width: 14px; height: 14px"
  103. @click.stop="removeNode(node, data)"
  104. v-if="!data.ChartInfoId"
  105. />
  106. </span>
  107. </span>
  108. </el-tree>
  109. <div
  110. class="noDepart"
  111. @click="addLevelOneHandle"
  112. >
  113. <img
  114. src="~@/assets/img/set_m/add_ico.png"
  115. alt=""
  116. style="width: 16px; height: 16px; margin-right: 10px"
  117. />
  118. <span>添加图表分类</span>
  119. </div>
  120. </div>
  121. <span
  122. class="move-btn resize"
  123. v-drag
  124. id="resize"
  125. @mousemove="dynamicNode && resetNodeStyle(dynamicNode)"
  126. ></span>
  127. <span class="slide-icon slide-left" @click="isSlideLeft = !isSlideLeft">
  128. <i class="el-icon-d-arrow-left"></i>
  129. </span>
  130. </div>
  131. <div class="main-right" id="right" :style="isSlideLeft ? 'width:100%' : 'width:80%'">
  132. <!-- 图表详情 -->
  133. <div class="chart-detail-wrapper" v-if="chartInfo.ChartInfoId">
  134. <el-row class="bottom-min">
  135. <el-col
  136. :span="21"
  137. style="padding: 20px 0;"
  138. >
  139. <div class="chartEn-mark" v-show="chartInfo.IsEnChart" style="top: 0;left: 0;">En</div>
  140. <div class="chart-show-cont" v-if="!chartInfo.WarnMsg">
  141. <div class="chartWrapper" id="chartWrapper">
  142. <h2 class="chart-title">{{ chartInfo.ChartName }}</h2>
  143. <Chart
  144. :options="options"
  145. minHeight="440px"
  146. height="500px"
  147. ref="chartRef"
  148. />
  149. </div>
  150. <span class="chart-author">作者:{{ chartInfo.SysUserRealName}}</span>
  151. </div>
  152. <!-- 异常显示 -->
  153. <p class="error-tip" style="min-height: 400px;" v-if="chartInfo.WarnMsg">{{chartInfo.WarnMsg}}</p>
  154. </el-col>
  155. <el-col :span="3" style="position: absolute;height: 100%;right: 0;">
  156. <!-- 操作 -->
  157. <chartHandlesWrap
  158. :chartInfo="chartInfo"
  159. :linkUrl="linkUrl"
  160. @copyChartConfirm="copyChartConfirm"
  161. @addMychartHandle="addMychartHandle"
  162. @refreshHandle="refreshHandle"
  163. @saveChartOtherHandle="saveChartOtherHandle"
  164. @editChartHandle="editChartHandle"
  165. @openEnNameDia="openEnNameDia"
  166. @delChartHandle="delChartHandle"
  167. />
  168. </el-col>
  169. </el-row>
  170. </div>
  171. <!-- 列表 -->
  172. <chartListWrap
  173. v-else
  174. :total="chart_total"
  175. :list="chartList"
  176. @loadMoreHandle="loadMoreHandle"
  177. @detailShowHandle="detailShowHandle"
  178. @addMychartHandle="addMychartHandle"
  179. ref="chartListWrap"
  180. />
  181. </div>
  182. </div>
  183. <!-- 分类弹窗 -->
  184. <classify-dia
  185. :isOpenDialog.sync="classifyDia"
  186. :title="dialog_title"
  187. :form="classifyForm"
  188. @successCallback="getTreeData"
  189. />
  190. <!-- 加入我的图库弹窗 -->
  191. <addMyClassifyDia
  192. :isAddMyDialog="isAddMyChart"
  193. :add_id="add_chart_id"
  194. :add_ids="add_ids"
  195. @cancel="isAddMyChart = false"
  196. @addSuccess="addMySuccess"
  197. />
  198. <!-- 图表另存 -->
  199. <SaveChartOther
  200. :show.sync="isShowSaveOther"
  201. fromType="chartsetting"
  202. source="statistic_feature"
  203. :data="chartInfo"
  204. @ensure="getTreeData"
  205. />
  206. <!-- 输入英文指标弹窗 -->
  207. <set-en-name-dia
  208. :isOpenDialog="setEnName"
  209. :formData="formItemArray"
  210. @cancel="setEnName=false"
  211. @updateEnName="updateEnName"
  212. />
  213. </div>
  214. </template>
  215. <script>
  216. import { statisticFeatureInterface } from '@/api/modules/chartRelevanceApi';
  217. import leftMixin from './mixins/classifyMixin';
  218. import Chart from '@/views/dataEntry_manage/components/chart';
  219. import classifyDia from '@/views/datasheet_manage/components/sheetClassifyDia.vue';
  220. import addMyClassifyDia from '@/views/dataEntry_manage/components/addMyClassifyDia';
  221. import SaveChartOther from '@/views/dataEntry_manage/components/SaveChartOther';
  222. import setEnNameDia from '@/views/dataEntry_manage/components/setEnNameDia.vue'
  223. import { chartSetMixin } from '@/views/dataEntry_manage/mixins/chartPublic';
  224. import { copyOtherOptions } from '@/utils/defaultOptions';
  225. export default {
  226. components: {
  227. classifyDia,
  228. Chart,
  229. addMyClassifyDia,
  230. SaveChartOther,
  231. setEnNameDia
  232. },
  233. mixins:[ leftMixin,chartSetMixin ],
  234. computed: {
  235. /* 分享地址 */
  236. linkUrl() {
  237. const LINK_CHART_URL = this.$setting.ChartViewUrl+'/chartshow';
  238. return `${LINK_CHART_URL}?code=${this.chartInfo.UniqueCode}&fromType=share?&lang=${this.currentLang}`
  239. }
  240. },
  241. data () {
  242. return {
  243. showData: false,
  244. refreshLoading: false,
  245. isShowMe: false,
  246. search_txt: '',
  247. searchOptions:[],
  248. isSlideLeft: false,//左侧分类收起
  249. select_node: '',//节点唯一标识code
  250. select_classify: '',
  251. new_label:'',//双击修改的value
  252. treeData: [], //分类数据
  253. defaultShowNodes: [], //展开节点
  254. defaultProp: {
  255. label: 'ChartClassifyName',
  256. children: 'Children',
  257. }, //树结构配置项
  258. dynamicNode: null,
  259. /* 分类弹窗 */
  260. dialog_title:'',
  261. classifyDia: false, //
  262. classifyForm: {},
  263. select_id: '',//选中的图表id
  264. chartInfo: {},
  265. chart_title:'',//图表标题 双击标题修改时来存储最新值
  266. isAddMyChart: false, //加入图库弹窗
  267. add_chart_id: 0, //要加入的图表
  268. add_ids:[],//加入时已有的分类
  269. /* 图表列表 */
  270. publicHaveMove: true,//是否还有列表数据
  271. chartList: [],
  272. chart_total: 0,
  273. chart_page: 1,
  274. chart_pages_size: 16,
  275. search_page: 1,
  276. search_have_more: false,
  277. current_search:'',
  278. };
  279. },
  280. methods: {
  281. /* 添加图表 */
  282. goAddChart() {
  283. if(!this.treeData.length) return this.$message.warning('请先添加分类');
  284. this.$router.push({ path: '/statisticFeatureChartEditor' });
  285. },
  286. /* 获取分类 */
  287. getTreeData(params=null) {
  288. statisticFeatureInterface.classifyList({IsShowMe:this.isShowMe}).then(res => {
  289. const { Ret,Data } = res;
  290. if(Ret !== 200) return
  291. this.showData = true;
  292. this.treeData = Data.AllNodes || [];
  293. this.$nextTick(() => {
  294. /* 新增完成后 处理树展开和选中 */
  295. params && this.selectCurrentNode(params);
  296. });
  297. })
  298. },
  299. /* 搜索 */
  300. searchHandle(query) {
  301. this.search_page = 1;
  302. this.current_search = query;
  303. this.searchApi(this.current_search)
  304. },
  305. searchApi(query,page=1) {
  306. /* 查找列表 */
  307. statisticFeatureInterface
  308. .searchChart({
  309. Keyword: query,
  310. IsShowMe:this.isShowMe,
  311. CurrentIndex: page
  312. })
  313. .then((res) => {
  314. if (res.Ret !== 200) return
  315. const { List,Paging } = res.Data;
  316. this.search_have_more = page < Paging.Pages;
  317. this.searchOptions = page === 1 ? List : [...this.searchOptions,...List];
  318. });
  319. },
  320. /* 聚焦获取当前检索 */
  321. inputFocusHandle(e) {
  322. this.search_page = 1;
  323. this.current_search = e.target.value;
  324. if(this.current_search) {
  325. this.searchApi(this.current_search)
  326. }else {
  327. this.searchOptions = [];
  328. }
  329. },
  330. searchLoad() {
  331. if(!this.search_have_more) return;
  332. this.searchApi(this.current_search,++this.search_page);
  333. },
  334. /* 选中分类变化时 */
  335. nodeChange({ UniqueCode,ChartInfoId,ChartClassifyId },node) {
  336. this.search_txt = '';
  337. this.select_node = UniqueCode;
  338. this.select_classify = !ChartInfoId ? ChartClassifyId : 0;
  339. this.select_id = ChartInfoId || 0;
  340. this.resetNodeStyle(node);
  341. this.dynamicNode = node;
  342. },
  343. /* 添加一级目录 */
  344. addLevelOneHandle() {
  345. this.dialog_title = '添加';
  346. this.classifyForm = {
  347. classify_name: '',
  348. }
  349. this.classifyDia = true;
  350. },
  351. /* 编辑节点 */
  352. editNode(node, { ChartClassifyName,ChartClassifyId }) {
  353. this.dialog_title = '编辑';
  354. /* 编辑目录 */
  355. this.classifyForm = {
  356. classify_name: ChartClassifyName,
  357. classify_id: ChartClassifyId,
  358. };
  359. this.classifyDia = true;
  360. },
  361. /* 删除节点校验 */
  362. async removeNode(node, { ChartClassifyId,ChartInfoId }) {
  363. const { Data } = await statisticFeatureInterface.classifyDelCheck({ ChartClassifyId })
  364. const { DeleteStatus } = Data;
  365. DeleteStatus === 1
  366. ? this.$confirm('该分类下关联表图表不可删除', '删除失败', {
  367. confirmButtonText: '知道了',
  368. showCancelButton: false,
  369. type: 'error',
  370. }) : DeleteStatus === 0
  371. ? this.$confirm('确定删除当前分类吗?', '提示', {
  372. confirmButtonText: '确定',
  373. cancelButtonText: '取消',
  374. type: 'warning',
  375. }).then(() => {
  376. this.delApi(ChartClassifyId,ChartInfoId)
  377. }): null;
  378. },
  379. /* 删除方法 */
  380. delApi(ChartClassifyId,ChartInfoId,type='') {
  381. statisticFeatureInterface
  382. .classifyDel({
  383. ChartClassifyId,
  384. ChartInfoId
  385. })
  386. .then((res) => {
  387. if (res.Ret !== 200) return
  388. this.$message.success(res.Msg);
  389. if (!res.Data.ChartInfoId) this.select_id = '';
  390. //删除自动显示下一张
  391. type=='del_chart' && res.Data.ChartInfoId
  392. ? this.getTreeData({
  393. code: res.Data.UniqueCode,
  394. id: res.Data.ChartInfoId
  395. })
  396. : this.getTreeData();
  397. });
  398. },
  399. /* 分类成功回调 */
  400. classifyCallback(type) {
  401. this.getTreeData();
  402. if (type === 'add') {
  403. //新增分类完成之后,展开父节点显示刚新增的分类,若已展开节点则不做处理
  404. let code = this.add_parent_id;
  405. let flag = this.defaultShowNodes.some(item => item === code);
  406. // console.log(flag)
  407. !flag && this.defaultShowNodes.push(code);
  408. this.add_parent_id = '';
  409. }
  410. },
  411. /* 获取图表列表 */
  412. getPublicList() {
  413. statisticFeatureInterface.getChartList({
  414. CurrentIndex: this.chart_page,
  415. PageSize: this.chart_pages_size,
  416. ChartClassifyId: this.select_classify || 0,
  417. IsShowMe: this.isShowMe
  418. }).then(res => {
  419. if(res.Ret !== 200) return
  420. this.publicHaveMove = res.Data
  421. ? this.chart_page < res.Data.Paging.Pages
  422. : false;
  423. this.chartList = res.Data
  424. ? this.chart_page === 1
  425. ? res.Data.List
  426. : [...this.chartList, ...res.Data.List]
  427. : [];
  428. this.chart_total = res.Data ? res.Data.Paging.Totals : 0;
  429. })
  430. },
  431. getChartInfo() {
  432. this.getDetailHandle();
  433. },
  434. /* 获取图表详情 */
  435. getDetailHandle() {
  436. statisticFeatureInterface.chartDetail({
  437. ChartInfoId: this.select_id
  438. }).then(res => {
  439. if(res.Ret !== 200) return
  440. const { ChartInfo,DataResp } = res.Data;
  441. this.chartInfo = ChartInfo;
  442. if(ChartInfo.Source===9) {
  443. this.statisticFrequencyData = DataResp;
  444. this.setStatisticFrequency();
  445. }else {
  446. this.setDefaultChart([DataResp])
  447. }
  448. !ChartInfo.ChartImage && this.$nextTick(() => {
  449. //关联图表和图片
  450. this.setChartImage();
  451. })
  452. })
  453. },
  454. /* 删除图表 */
  455. delChartHandle() {
  456. const { ChartClassifyId,ChartInfoId } = this.chartInfo;
  457. this.$confirm('删除后该图表将不能再引用,确认删除吗?', '提示', {
  458. confirmButtonText: '确定',
  459. cancelButtonText: '取消',
  460. type: 'warning',
  461. })
  462. .then(() => {
  463. this.delApi(ChartClassifyId,ChartInfoId,'del_chart');
  464. })
  465. .catch(() => {});
  466. },
  467. /* 刷新图表 */
  468. refreshHandle() {
  469. this.refreshLoading = this.$loading({
  470. lock: true,
  471. target: '.main-right',
  472. text: '刷新图表中...',
  473. spinner: 'el-icon-loading',
  474. background: 'rgba(255, 255, 255, 0.8)',
  475. });
  476. statisticFeatureInterface
  477. .refreshChart({
  478. ChartInfoId: this.chartInfo.ChartInfoId,
  479. })
  480. .then((res) => {
  481. this.refreshLoading.close();
  482. if (res.Ret === 200) {
  483. this.getDetailHandle();
  484. this.$message.success(res.Msg);
  485. }
  486. });
  487. },
  488. /* 编辑图表 */
  489. editChartHandle() {
  490. this.$router.push({
  491. path: '/statisticFeatureChartEditor',
  492. query: {
  493. code: this.chartInfo.UniqueCode,
  494. id: this.chartInfo.ChartInfoId
  495. }
  496. })
  497. },
  498. copyChartHandle:_.debounce(function(type){
  499. let chartsName = this.currentLang=='ch'?this.chartInfo.ChartName:this.chartInfo.ChartNameEn
  500. let { heightNum, widthNum , newTitle , dynamic_copyOptions} = this.dynamicWidthAndHeight(type,this.chartInfo.ChartType,chartsName,1)
  501. const chartType = 'seasonLegend';
  502. // 英文转SVG设置变动
  503. if(this.currentLang == 'en'){
  504. // 如果竖轴坐标单位为'英文单位',表示客户没填,转成svg时置为空
  505. this.$refs.chartRef.chart.options.yAxis.forEach(it => {
  506. if(it.title.text == '英文单位') it.title.text=''
  507. });
  508. }
  509. let svg = this.$refs.chartRef.chart.getSVG({
  510. chart:{
  511. width:widthNum,
  512. height:heightNum,
  513. backgroundColor:"rgba(255, 255, 255, 0)",
  514. },
  515. title: {
  516. text: newTitle,
  517. margin: 10,
  518. style: {
  519. fontSize: '18px'
  520. }
  521. },
  522. legend:{
  523. ...copyOtherOptions[chartType],
  524. ...dynamic_copyOptions[chartType]
  525. }
  526. });
  527. this.copyBlobItem(widthNum,heightNum,svg,type);
  528. },500),
  529. },
  530. mounted() {
  531. if(this.$route.query.code) {
  532. this.getTreeData({code: this.$route.query.code,id: Number(this.$route.query.id)})
  533. } else {
  534. this.getTreeData();
  535. this.getPublicList();
  536. }
  537. window.addEventListener('resize', this.reloadRightWid);
  538. },
  539. destroyed() {
  540. window.removeEventListener('resize', this.reloadRightWid);
  541. }
  542. }
  543. </script>
  544. <style lang='scss' scoped>
  545. *{ box-sizing: border-box;}
  546. $mini-font: 12px; $normal-font: 14px;
  547. .fittingEquation-chart-container {
  548. .slide-icon {
  549. padding: 20px 0;
  550. /* display: block; */
  551. box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.3);
  552. border-radius: 5px;
  553. cursor: pointer;
  554. position: absolute;
  555. top: 50%;
  556. transform: translateY(-50%);
  557. z-index: 99;
  558. &:hover {
  559. background-color: rgba(0, 0, 0, 0.05);
  560. }
  561. &.slide-left {
  562. right: 0;
  563. }
  564. &.slide-right {
  565. left: 0;
  566. }
  567. }
  568. .data-sheet-main {
  569. display: flex;
  570. .main-left {
  571. width: 400px;
  572. min-width: 300px;
  573. background: #fff;
  574. margin-right: 20px;
  575. border: 1px solid #ececec;
  576. border-radius: 4px;
  577. box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.05);
  578. height: calc(100vh - 120px);
  579. overflow: hidden;
  580. position: relative;
  581. box-sizing: border-box;
  582. .datasheet_top {
  583. padding: 20px;
  584. background: #fff;
  585. border: 1px solid #ececec;
  586. box-shadow: 0 3px 6px rgba(0, 0, 0, 0.05);
  587. margin-bottom: 20px;
  588. }
  589. .search-cont {
  590. padding: 0 20px;
  591. }
  592. .tree-cont {
  593. padding: 30px 20px;
  594. max-height: calc(100vh - 280px);
  595. overflow: auto;
  596. }
  597. .target_tree {
  598. color: #333;
  599. .custom-tree-node {
  600. display: flex !important;
  601. justify-content: space-between;
  602. align-items: center;
  603. display: block;
  604. flex: 1;
  605. .node_label {
  606. margin-right: 2px;
  607. }
  608. .el-icon-view {
  609. color: #409EFF;
  610. font-size: 18px;
  611. margin-left: 5px;
  612. }
  613. }
  614. }
  615. .noDepart {
  616. margin: 60px 0;
  617. display: flex;
  618. align-items: center;
  619. justify-content: center;
  620. color: #409eff;
  621. font-size: 16px;
  622. cursor: pointer;
  623. }
  624. .move-btn {
  625. height: 100%;
  626. width: 4px;
  627. /* opacity: 0; */
  628. position: absolute;
  629. right: 0px;
  630. top: 0;
  631. &:hover {
  632. cursor: col-resize;
  633. /* background-color: orange */
  634. }
  635. }
  636. }
  637. .main-right {
  638. width: 80%;
  639. .chart-detail-wrapper {
  640. height: calc(100vh - 120px);
  641. border: 1px solid #ececec;
  642. border-radius: 4px;
  643. box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.05);
  644. overflow: auto;
  645. background: #fff;
  646. padding: 30px;
  647. .bottom-min {
  648. border: 1px solid #DCDFE6;
  649. margin-bottom: 20px;
  650. .chart-show-cont {
  651. padding: 0 160px 0 120px;
  652. position: relative;
  653. min-height: 400px;
  654. .chart-title {
  655. font-size: 16px;
  656. font-weight: normal;
  657. text-align: center;
  658. margin-bottom: 10px;
  659. }
  660. .chart-author {
  661. font-size: 14px;
  662. color: #333;
  663. position: absolute;
  664. bottom: 0;
  665. right: 50px;
  666. }
  667. .chartWrapper {
  668. position: relative;
  669. .range-cont {
  670. position: absolute;
  671. top: 13%;
  672. .min-data-input {
  673. width: 60px;
  674. display: block;
  675. }
  676. &.left {
  677. left: -80px;
  678. }
  679. &.right {
  680. right: -65px;
  681. }
  682. &.rightTwo {
  683. right: -130px;
  684. }
  685. }
  686. }
  687. }
  688. }
  689. }
  690. }
  691. @media screen and (min-width: 1711px){
  692. .min-data-input {
  693. margin-top: 360px;
  694. }
  695. }
  696. @media screen and (max-width: 1710px){
  697. .min-data-input {
  698. margin-top: 290px;
  699. }
  700. }
  701. }
  702. }
  703. </style>
  704. <style lang="scss">
  705. .fittingEquation-chart-container {
  706. .label-input .el-input__inner {
  707. height: 25px;
  708. line-height: 25px;
  709. padding: 0 10px;
  710. }
  711. .range-cont .el-input__inner {
  712. padding: 0 3px;
  713. }
  714. .el-tree__drop-indicator{
  715. height:3px;
  716. background-color:#409EFF;
  717. }
  718. .el-tree-node__content {
  719. margin-bottom: 14px !important;
  720. }
  721. .el-tree-node__children {
  722. .el-tree-node {
  723. /* margin-bottom: 8px !important; */
  724. margin-bottom: 0px !important;
  725. padding-left: 18px;
  726. }
  727. .el-tree-node__content {
  728. margin-bottom: 5px !important;
  729. padding-left: 0 !important;
  730. }
  731. }
  732. .expanded.el-icon-caret-right:before {
  733. content: url('../../assets/img/set_m/down.png') !important;
  734. }
  735. .el-icon-caret-right:before {
  736. content: url('../../assets/img/set_m/slide.png') !important;
  737. }
  738. .el-tree-node__expand-icon.is-leaf.el-icon-caret-right:before {
  739. content: '' !important;
  740. }
  741. .el-tree-node__expand-icon.expanded {
  742. -webkit-transform: rotate(0deg);
  743. transform: rotate(0deg);
  744. }
  745. .el-tree-node.is-current > .el-tree-node__content {
  746. background-color: #f0f4ff !important;
  747. }
  748. .el-tree-node__content {
  749. padding-right: 10px !important;
  750. }
  751. }
  752. </style>