DataSetting.vue 30 KB

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