DataSetting.vue 29 KB

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