DataSetting.vue 29 KB

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