DataSetting.vue 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899
  1. <template>
  2. <div
  3. class="bs-setting-wrap"
  4. @click.stop
  5. >
  6. <el-form
  7. ref="form"
  8. :model="config"
  9. :rules="rules"
  10. label-width="100px"
  11. label-position="left"
  12. class="setting-body bs-el-form"
  13. >
  14. <div class="data-setting-box">
  15. <div
  16. v-if="config.option.displayOption.dataSourceType.enable"
  17. class="data-setting-data-box"
  18. >
  19. <div class="lc-field-head">
  20. <div class="lc-field-title">
  21. 数据来源
  22. </div>
  23. </div>
  24. <div class="lc-field-body">
  25. <el-form-item
  26. label="数据集"
  27. >
  28. <data-set-select
  29. :dataset-name="datasetName"
  30. :ds-id="config.dataSource.businessKey"
  31. @getDsId="dsId => { getDataSetDetailsById(dsId, 'treeTable');}"
  32. >
  33. <template #dataSetSelect="{value}">
  34. <slot
  35. name="dataSetSelect"
  36. :value="value"
  37. />
  38. </template>
  39. </data-set-select>
  40. </el-form-item>
  41. </div>
  42. </div>
  43. <div
  44. v-if="['customComponent','marquee'].includes(config.type)"
  45. class="data-setting-data-box"
  46. >
  47. <div class="lc-field-head">
  48. <div class="lc-field-title">
  49. 数据处理
  50. </div>
  51. </div>
  52. <div class="lc-field-body">
  53. <el-form-item
  54. label="数据处理脚本"
  55. >
  56. <el-input
  57. v-model="config.dataHandler"
  58. type="textarea"
  59. :rows="5"
  60. placeholder="请输入数据处理脚本"
  61. />
  62. </el-form-item>
  63. </div>
  64. </div>
  65. <div
  66. v-if="!['tree','multipleNumberChart','carousel'].includes(config.type) && config.option.displayOption.dataSourceType.enable "
  67. class="data-setting-data-box"
  68. >
  69. <div class="lc-field-head">
  70. <div class="lc-field-title">
  71. 数据配置
  72. </div>
  73. </div>
  74. <!-- 基础组件数据配置 -->
  75. <template v-if="!['customComponent', 'remoteComponent'].includes(config.type)">
  76. <!--维度多选-->
  77. <el-form-item
  78. v-if="config.option.displayOption.dimensionField.enable"
  79. :label="config.option.displayOption.dimensionField.label"
  80. :prop="config.option.displayOption.dimensionField.multiple? 'dataSource.dimensionFieldList' : 'dataSource.dimensionField'"
  81. class="data-form-item"
  82. >
  83. <el-drag-select
  84. v-if="config.option.displayOption.dimensionField.enable && config.option.displayOption.dimensionField.multiple"
  85. v-model="config.dataSource.dimensionFieldList"
  86. class="bs-el-select"
  87. popper-class="bs-el-select"
  88. clearable
  89. :multiple="config.option.displayOption.dimensionField.multiple"
  90. @change="dimensionFieldListChange"
  91. >
  92. <el-option
  93. v-for="(field, index) in dataSourceDataList"
  94. :key="index"
  95. :label="field.comment"
  96. :value="field.name"
  97. >
  98. <div class="source-key-option">
  99. <div>
  100. {{ field.comment !== "" ? field.comment : field.name }}
  101. </div>
  102. <div class="option-txt">
  103. {{ field.name }}
  104. </div>
  105. </div>
  106. </el-option>
  107. </el-drag-select>
  108. <!--维度单选-->
  109. <el-select
  110. v-else
  111. v-model="config.dataSource.dimensionField"
  112. class="bs-el-select"
  113. popper-class="bs-el-select"
  114. clearable
  115. >
  116. <el-option
  117. v-for="(field, index) in dataSourceDataList"
  118. :key="index"
  119. :label="field.comment"
  120. :value="field.name"
  121. >
  122. <div class="source-key-option">
  123. <div>
  124. {{ field.comment !== "" ? field.comment : field.name }}
  125. </div>
  126. <div class="option-txt">
  127. {{ field.name }}
  128. </div>
  129. </div>
  130. </el-option>
  131. </el-select>
  132. </el-form-item>
  133. <!--指标-->
  134. <el-form-item
  135. v-if="config.option.displayOption.metricField.enable"
  136. :label="config.option.displayOption.metricField.label"
  137. prop="dataSource.metricField"
  138. class="data-form-item"
  139. >
  140. <el-select
  141. v-model="config.dataSource.metricField"
  142. class="bs-el-select"
  143. popper-class="bs-el-select"
  144. clearable
  145. >
  146. <el-option
  147. v-for="(field, index) in dataSourceDataList"
  148. :key="index"
  149. :label="field.comment"
  150. :value="field.name"
  151. >
  152. <div class="source-key-option">
  153. <div>
  154. {{ field.comment !== "" ? field.comment : field.name }}
  155. </div>
  156. <div class="option-txt">
  157. {{ field.name }}
  158. </div>
  159. </div>
  160. </el-option>
  161. </el-select>
  162. </el-form-item>
  163. </template>
  164. <!-- g2plot和远程组件数据配置 -->
  165. <template v-else>
  166. <template
  167. v-for="(setting, index) in config.setting.filter(set => set.tabName === 'data')"
  168. >
  169. <el-form-item
  170. :key="index"
  171. :label="setting.label"
  172. class="data-form-item"
  173. >
  174. <el-select
  175. v-if="setting.type === 'select'"
  176. class="bs-el-select select"
  177. popper-class="bs-el-select"
  178. :value="setting.value"
  179. clearable
  180. :multiple="setting.multiple"
  181. :placeholder="`请选择${setting.label}`"
  182. @change="changeCustomProps(...arguments, setting)"
  183. >
  184. <el-option
  185. v-for="(field, fieldIndex) in dataSourceDataList"
  186. :key="fieldIndex"
  187. :label="field.comment"
  188. :value="field.name"
  189. >
  190. <div class="source-key-option">
  191. <div>
  192. {{ field.comment !== "" ? field.comment : field.name }}
  193. </div>
  194. <div class="option-txt">
  195. {{ field.name }}
  196. </div>
  197. </div>
  198. </el-option>
  199. </el-select>
  200. <el-input
  201. v-else
  202. :value="setting.value"
  203. :placeholder="`请输入${setting.label}`"
  204. @change="changeCustomProps(...arguments, setting)"
  205. />
  206. </el-form-item>
  207. </template>
  208. </template>
  209. </div>
  210. <div
  211. v-if="config.option.displayOption.headerField && config.option.displayOption.headerField.enable"
  212. name="轮播表配置"
  213. >
  214. <template slot="title">
  215. <div class="lc-field-head">
  216. <div class="lc-field-title">
  217. 轮播表配置
  218. </div>
  219. </div>
  220. </template>
  221. <div class="lc-field-body">
  222. <el-table
  223. ref="headerTable"
  224. :border="true"
  225. :data="config.customize.columnConfig"
  226. class="params-config"
  227. >
  228. <el-table-column
  229. prop="code"
  230. label="参数名称"
  231. align="center"
  232. >
  233. <template slot-scope="scope">
  234. <el-input
  235. v-model="scope.row.code"
  236. placeholder="请输入名称"
  237. readonly
  238. />
  239. </template>
  240. </el-table-column>
  241. <el-table-column
  242. prop="name"
  243. label="列名称"
  244. align="center"
  245. >
  246. <template slot-scope="scope">
  247. <el-input
  248. v-model="scope.row.name"
  249. placeholder="请输入字段名称"
  250. />
  251. </template>
  252. </el-table-column>
  253. <el-table-column
  254. prop="width"
  255. label="列宽"
  256. align="center"
  257. >
  258. <template slot-scope="scope">
  259. <el-input
  260. v-model="scope.row.width"
  261. placeholder="请输入列宽"
  262. clearable
  263. />
  264. </template>
  265. </el-table-column>
  266. <el-table-column
  267. prop="align"
  268. label="对齐方式"
  269. align="center"
  270. >
  271. <template slot-scope="scope">
  272. <el-select
  273. v-model="scope.row.align"
  274. class="bs-el-select"
  275. popper-class="bs-el-select"
  276. clearable
  277. placeholder="请选择对齐方式"
  278. >
  279. <el-option
  280. value="left"
  281. label="左对齐"
  282. />
  283. <el-option
  284. value="center"
  285. label="居中"
  286. />
  287. <el-option
  288. value="right"
  289. label="右对齐"
  290. />
  291. </el-select>
  292. </template>
  293. </el-table-column>
  294. </el-table>
  295. </div>
  296. </div>
  297. <div
  298. v-if="config.option.displayOption.mapField && config.option.displayOption.mapField.enable"
  299. name="地图数据配置"
  300. >
  301. <template slot="title">
  302. <div class="lc-field-head">
  303. <div class="lc-field-title">
  304. 地图数据配置
  305. </div>
  306. </div>
  307. </template>
  308. <div class="lc-field-body">
  309. <el-form-item
  310. label="展示字段"
  311. class="data-form-item"
  312. >
  313. <el-select
  314. v-model="config.customize.value"
  315. class="bs-el-select"
  316. popper-class="bs-el-select"
  317. clearable
  318. >
  319. <el-option
  320. v-for="(field, index) in dataSourceDataList"
  321. :key="index"
  322. :label="field.comment"
  323. :value="field.name"
  324. >
  325. <div class="source-key-option">
  326. <div>
  327. {{ field.comment !== "" ? field.comment : field.name }}
  328. </div>
  329. <div class="option-txt">
  330. {{ field.name }}
  331. </div>
  332. </div>
  333. </el-option>
  334. </el-select>
  335. </el-form-item>
  336. <el-form-item
  337. label="地名字段"
  338. class="data-form-item"
  339. >
  340. <el-select
  341. v-model="config.customize.name"
  342. class="bs-el-select"
  343. popper-class="bs-el-select"
  344. clearable
  345. >
  346. <el-option
  347. v-for="(field, index) in dataSourceDataList"
  348. :key="index"
  349. :label="field.comment"
  350. :value="field.name"
  351. >
  352. <div class="source-key-option">
  353. <div>
  354. {{ field.comment !== "" ? field.comment : field.name }}
  355. </div>
  356. <div class="option-txt">
  357. {{ field.name }}
  358. </div>
  359. </div>
  360. </el-option>
  361. </el-select>
  362. </el-form-item>
  363. <el-form-item
  364. label="x坐标"
  365. class="data-form-item"
  366. >
  367. <el-select
  368. v-model="config.customize.xaxis"
  369. class="bs-el-select"
  370. popper-class="bs-el-select"
  371. clearable
  372. >
  373. <el-option
  374. v-for="(field, index) in dataSourceDataList"
  375. :key="index"
  376. :label="field.comment"
  377. :value="field.name"
  378. >
  379. <div class="source-key-option">
  380. <div>
  381. {{ field.comment !== "" ? field.comment : field.name }}
  382. </div>
  383. <div class="option-txt">
  384. {{ field.name }}
  385. </div>
  386. </div>
  387. </el-option>
  388. </el-select>
  389. </el-form-item>
  390. <el-form-item
  391. label="y坐标"
  392. class="data-form-item"
  393. >
  394. <el-select
  395. v-model="config.customize.yaxis"
  396. class="bs-el-select"
  397. popper-class="bs-el-select"
  398. clearable
  399. >
  400. <el-option
  401. v-for="(field, index) in dataSourceDataList"
  402. :key="index"
  403. :label="field.comment"
  404. :value="field.name"
  405. >
  406. <div class="source-key-option">
  407. <div>
  408. {{ field.comment !== "" ? field.comment : field.name }}
  409. </div>
  410. <div class="option-txt">
  411. {{ field.name }}
  412. </div>
  413. </div>
  414. </el-option>
  415. </el-select>
  416. </el-form-item>
  417. </div>
  418. </div>
  419. <div
  420. v-if="config.option.displayOption.params.enable"
  421. class="data-setting-data-box"
  422. >
  423. <div class="lc-field-head">
  424. <div class="lc-field-title">
  425. 参数配置
  426. </div>
  427. </div>
  428. <div class="lc-field-body">
  429. <el-table
  430. ref="singleTable"
  431. :border="true"
  432. :data="params"
  433. class="params-config"
  434. >
  435. <el-table-column
  436. prop="name"
  437. label="参数名称"
  438. align="center"
  439. >
  440. <template slot-scope="scope">
  441. <div>
  442. <el-form-item>
  443. <el-input
  444. v-model="scope.row.name"
  445. placeholder="请输入名称"
  446. readonly
  447. />
  448. <el-tooltip
  449. :content="
  450. `${
  451. scope.row.type ? '参数类型:' + scope.row.type : ''
  452. }
  453. ${
  454. scope.row.remark ? '备注:' + scope.row.remark : ''
  455. }`
  456. "
  457. placement="top"
  458. >
  459. <span
  460. class="el-icon-question"
  461. style="color:#9e9e9e"
  462. />
  463. </el-tooltip>
  464. </el-form-item>
  465. </div>
  466. </template>
  467. </el-table-column>
  468. <el-table-column
  469. prop="value"
  470. label="参数值"
  471. align="center"
  472. >
  473. <template slot-scope="scope">
  474. <el-form-item
  475. :prop="scope.row.require === 1 ? 'params' : null"
  476. >
  477. <el-date-picker
  478. v-if="scope.row.type === 'Date'"
  479. v-model="scope.row.value"
  480. type="datetime"
  481. value-format="yyyy-MM-dd HH:mm:ss"
  482. placeholder="选择日期时间"
  483. />
  484. <el-input
  485. v-else
  486. v-model="scope.row.value"
  487. clearable
  488. placeholder="请输入参数值"
  489. />
  490. </el-form-item>
  491. </template>
  492. </el-table-column>
  493. </el-table>
  494. </div>
  495. </div>
  496. <div
  497. v-if="config.option.displayOption.serverPagination.enable"
  498. class="data-setting-data-box"
  499. name="分页配置"
  500. >
  501. <div class="lc-field-head">
  502. <div class="lc-field-title">
  503. 分页配置
  504. </div>
  505. </div>
  506. <div class="form">
  507. <el-form-item
  508. v-if="config.option.displayOption.serverPagination.enable"
  509. label="服务端分页"
  510. prop="dataSource.serverPagination"
  511. >
  512. <el-radio-group
  513. v-model="config.dataSource.serverPagination"
  514. class="bs-el-radio-group"
  515. size="mini"
  516. @change="serverPaginationChange"
  517. >
  518. <el-radio-button :label="true">
  519. 开启
  520. </el-radio-button>
  521. <el-radio-button :label="false">
  522. 关闭
  523. </el-radio-button>
  524. </el-radio-group>
  525. </el-form-item>
  526. <el-form-item
  527. v-if="
  528. config.dataSource.serverPagination &&
  529. config.option.displayOption.pageSize.enable
  530. "
  531. label="分页长度"
  532. prop="dataSource.pageSize"
  533. >
  534. <el-select
  535. v-model="config.dataSource.pageSize"
  536. class="bs-el-select"
  537. popper-class="bs-el-select"
  538. filterable
  539. allow-create
  540. default-first-option
  541. >
  542. <el-option
  543. v-for="size in pageSizeList"
  544. :key="size"
  545. :label="size"
  546. :value="size"
  547. />
  548. </el-select>
  549. </el-form-item>
  550. </div>
  551. </div>
  552. <ComponentBinding
  553. v-if="['button'].includes(config.type)"
  554. :config="config"
  555. :source-field-list="sourceFieldList"
  556. />
  557. <ComponentRelation
  558. v-if="!['carousel','gauge','liquid'].includes(config.type)"
  559. :config="config"
  560. :source-field-list="sourceFieldList"
  561. />
  562. </div>
  563. </el-form>
  564. </div>
  565. </template>
  566. <script>
  567. import ElDragSelect from './ElDragSelect.vue'
  568. // import { isEmpty, cloneDeep } from 'lodash'
  569. import isEmpty from 'lodash/isEmpty'
  570. import cloneDeep from 'lodash/cloneDeep'
  571. import ComponentRelation from 'data-room-ui/BigScreenDesign/RightSetting/ComponentRelation/index.vue'
  572. import ComponentBinding from 'data-room-ui/BigScreenDesign/RightSetting/ComponentBinding/index.vue'
  573. import dataSetSelect from 'data-room-ui/DataSetSetting/index.vue'
  574. import { mapState } from 'vuex'
  575. import { getDataSetDetails } from 'data-room-ui/js/api/bigScreenApi'
  576. export default {
  577. name: 'DataSetting',
  578. components: {
  579. ComponentRelation,
  580. ComponentBinding,
  581. dataSetSelect,
  582. ElDragSelect
  583. },
  584. data () {
  585. return {
  586. fieldsList: [],
  587. params: [], // 参数配置
  588. datasetName: '',
  589. headerList: [],
  590. pageSizeList: [10, 20, 50, 100],
  591. rules: {
  592. // 'dataSource.businessKey': [
  593. // { required: true, message: '请选择数据集', trigger: 'change' }
  594. // ],
  595. // 'dataSource.dimensionField': [
  596. // { required: true, message: '请选择维度', trigger: 'change' }
  597. // ],
  598. // 'dataSource.dimensionFieldList': [
  599. // { required: true, message: '请选择维度', trigger: 'change' }
  600. // ],
  601. // 'dataSource.metricField': [
  602. // { required: true, message: '请选择指标', trigger: 'change' }
  603. // ],
  604. params: [
  605. {
  606. validator: (rule, value, callback) => {
  607. if (!value) {
  608. this.params.map(sort => {
  609. if (!sort.value) {
  610. callback(new Error('请输入参数值'))
  611. } else {
  612. callback()
  613. }
  614. })
  615. } else {
  616. callback()
  617. }
  618. }
  619. }
  620. ]
  621. }
  622. }
  623. },
  624. computed: {
  625. ...mapState({
  626. pageInfo: state => state.bigScreen.pageInfo,
  627. config: state => state.bigScreen.activeItemConfig
  628. // 缓存数据集
  629. // cacheDataSets: state => state.bigScreen.pageInfo.pageConfig.cacheDataSets
  630. }),
  631. dataSourceDataList () {
  632. return this.fieldsList?.map(item => ({
  633. ...item,
  634. comment: item?.fieldDesc || item?.fieldName,
  635. name: item?.fieldName
  636. }))
  637. },
  638. appCode: {
  639. get () {
  640. return this.$store.state.bigScreen.pageInfo.appCode
  641. }
  642. },
  643. seriesFieldProp () {
  644. if (this.config.option.displayOption.seriesField.required) {
  645. return 'dataSource.seriesField'
  646. } else {
  647. return ''
  648. }
  649. },
  650. pageCode () {
  651. return this.$route.query.code
  652. },
  653. // 映射字段
  654. sourceFieldList () {
  655. const list = this?.config?.customize?.bindComponents || this.fieldsList
  656. return (
  657. list?.map(field => {
  658. return {
  659. label: field.comment || field.fieldDesc,
  660. value: field.name || field.fieldName
  661. }
  662. }) || []
  663. )
  664. }
  665. },
  666. watch: {
  667. // 切换数据集时将其他配置清空
  668. 'config.dataSource.businessKey' (val) {
  669. this.clearCustomVerify()
  670. this.clearVerify()
  671. },
  672. // 切换数据集类型时将其他配置清空
  673. 'config.dataSource.dataSetType' () {
  674. this.config.dataSource.businessKey = ''
  675. this.clearCustomVerify()
  676. this.clearVerify()
  677. },
  678. // 参数改变时
  679. params: {
  680. handler (val) {
  681. if (!isEmpty(val)) {
  682. const params = cloneDeep(val)
  683. const paramsMap = params.reduce((obj, param) => {
  684. obj[param.name] = param.value
  685. return obj
  686. }, {})
  687. this.config.dataSource.params = paramsMap
  688. }
  689. },
  690. deep: true
  691. }
  692. },
  693. mounted () {
  694. if (this.config.dataSource && this.config.dataSource.businessKey) {
  695. this.getDataSetDetailsById(this.config.dataSource.businessKey, 'initial')
  696. }
  697. },
  698. methods: {
  699. // 切换前后端分页
  700. serverPaginationChange (val) {
  701. this.config.customize.webPagination = !val
  702. },
  703. // 清空自定义组件配置,与手动配置的组件区分开
  704. clearCustomVerify () {
  705. this.config.setting = this.config.setting?.map(set => {
  706. this.datasetName = ''
  707. if (set.tabName === 'data') {
  708. set.value = ''
  709. }
  710. return set
  711. })
  712. },
  713. // 清空手动配置的组件配置
  714. clearVerify () {
  715. this.config.dataSource.metricField = ''
  716. this.config.dataSource.dimensionField = ''
  717. this.config.dataSource.dimensionFieldList = []
  718. this.config.dataSource.seriesField = ''
  719. this.config.dataSource.params = {}
  720. },
  721. // 根据数据集来获取数据集详情
  722. getDataSetDetailsById (id, type) {
  723. if (id) {
  724. this.config.dataSource.businessKey = id
  725. getDataSetDetails(id).then(res => {
  726. this.fieldsList = res.fields
  727. // 初始化时以组件本来的参数设置为主
  728. if (type === 'initial') {
  729. for (const key in this.config.dataSource.params) {
  730. const param = res?.params?.find(field => field.name === key)
  731. this.params.push({
  732. name: key,
  733. value: this.config.dataSource.params[key],
  734. type: param?.type,
  735. remark: param?.remark
  736. })
  737. }
  738. } else {
  739. this.params = res.params
  740. }
  741. this.datasetName = res.name
  742. // 选择数据集的时候,如果数据集类型是dataModel,则不显示参数配置
  743. this.config.option.displayOption.params.enable = res.type !== 'dataModel'
  744. // 根据数据集初始化组件的入参:inparams
  745. if (res.type !== 'dataModel') {
  746. this.config.inParams =
  747. this.params?.map(param => {
  748. return {
  749. name: param.remark, // 参数名
  750. code: param.name // 参数值
  751. }
  752. }) || []
  753. } else {
  754. this.config.inParams =
  755. this.fieldsList?.map(field => {
  756. return {
  757. name: field.fieldDesc, // 参数名
  758. code: field.fieldName // 参数值
  759. }
  760. }) || []
  761. }
  762. // 根据数据集的参数初始化表单项
  763. this.config.paramsList = this.params
  764. if (type === 'treeTable') {
  765. const enumeration = {
  766. dataSetType: '1', // 数据集类型
  767. dataSetKey: '', // 数据集
  768. itemKeyName: '', // 选项显示字段
  769. itemValueName: '', // 选项value字段
  770. params: []
  771. }
  772. this.config.fields =
  773. this.params?.map(param => {
  774. return {
  775. name: param.name,
  776. label: param.remark || param.name,
  777. component: 'input',
  778. display: res.type !== 'dataModel',
  779. enumeration: {
  780. ...enumeration
  781. },
  782. queryRule: 'like'
  783. }
  784. }) || []
  785. }
  786. })
  787. }
  788. },
  789. // 改变维度
  790. dimensionFieldListChange (list) {
  791. const colFieldList = []
  792. if (list.length > 0) {
  793. list.forEach(item => {
  794. colFieldList.push(
  795. this.dataSourceDataList.find(field => field.name === item)
  796. )
  797. })
  798. }
  799. this.headerList = []
  800. colFieldList.forEach(item => {
  801. this.headerList.push({ name: item.comment, code: item.name, width: '150', align: 'left' })
  802. })
  803. this.config.customize.columnConfig = cloneDeep(this.headerList)
  804. this.$store.commit('bigScreen/changeActiveItemConfig', this.config)
  805. },
  806. changeCustomProps (value, setting) {
  807. this.config.setting = this.config.setting.map(item => {
  808. if (item.field === setting.field) {
  809. item.value = value
  810. }
  811. return item
  812. })
  813. }
  814. // 改变缓存数据集key
  815. // changeCacheBusinessKey (id) {
  816. // // 根据id在缓存中获取fields
  817. // this.fieldsList = this.cacheDataSets?.find(cache => cache.dataSetId === id)?.fields
  818. // this.params = this.cacheDataSets?.find(cache => cache.dataSetId === id)?.params
  819. // }
  820. }
  821. }
  822. </script>
  823. <style lang="scss" scoped>
  824. @import "../../assets/style/settingWrap.scss";
  825. .add-filter-box {
  826. position: relative;
  827. .add-filter {
  828. margin-left: 100px;
  829. }
  830. .add-filter-btn {
  831. position: absolute;
  832. top: 0;
  833. }
  834. }
  835. .form {
  836. padding: 12px;
  837. }
  838. ::v-deep .el-tag__close.el-icon-close::before {
  839. color: #fff;
  840. }
  841. ::v-deep .el-tag__close.el-icon-close {
  842. top: -1px;
  843. &:hover {
  844. background-color:var(--bs-el-color-primary);
  845. }
  846. }
  847. .opt-wrap{
  848. margin-top: 10px;
  849. }
  850. .link-set-item {
  851. position: relative;
  852. border: 1px solid #f5f7fa;
  853. padding: 30px 16px 10px;
  854. box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
  855. margin: 10px;
  856. .del-icon {
  857. cursor: pointer;
  858. position: absolute;
  859. right: 10px;
  860. top: 5px;
  861. font-size: 20px;
  862. color: #f00;
  863. }
  864. .opt-wrap {
  865. display: flex;
  866. justify-content: center;
  867. }
  868. }
  869. // 修改设置面板样式
  870. .data-setting-box{
  871. .data-setting-data-box{
  872. .lc-field-head{
  873. height: 30px;
  874. .lc-field-title{
  875. position: relative;
  876. padding-left: 12px;
  877. line-height: 30px;
  878. height: 30px;
  879. &:after{
  880. position: absolute;
  881. left: 0;
  882. top: 50%;
  883. transform: translateY(-50%);
  884. content: '';
  885. width: 4px;
  886. height: 14px;
  887. background-color: var(--bs-el-color-primary);
  888. }
  889. }
  890. }
  891. }
  892. }
  893. </style>