setting.vue 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528
  1. <template>
  2. <div class="bs-setting-wrap">
  3. <el-form
  4. ref="form"
  5. :model="config"
  6. label-width="90px"
  7. label-position="left"
  8. class="setting-body bs-el-form"
  9. >
  10. <SettingTitle>标题</SettingTitle>
  11. <div class="lc-field-body">
  12. <el-form-item
  13. label="标题"
  14. label-width="100px"
  15. >
  16. <el-input
  17. v-model="config.title"
  18. placeholder="请输入标题"
  19. clearable
  20. />
  21. </el-form-item>
  22. </div>
  23. <SettingTitle>位置</SettingTitle>
  24. <div class="lc-field-body">
  25. <PosWhSetting :config="config" />
  26. </div>
  27. <SettingTitle v-if="config.border">
  28. 边框
  29. </SettingTitle>
  30. <div class="lc-field-body">
  31. <BorderSetting
  32. v-if="config.border"
  33. label-width="100px"
  34. :config="config.border"
  35. :big-title="config.title"
  36. />
  37. </div>
  38. <SettingTitle>旋转</SettingTitle>
  39. <div class="lc-field-body">
  40. <RotateSetting
  41. :config="config"
  42. />
  43. </div>
  44. <SettingTitle>图表</SettingTitle>
  45. <div class="lc-field-body">
  46. <el-form-item
  47. label="图形背景色"
  48. label-width="100px"
  49. >
  50. <el-radio-group
  51. v-model="lineColorType"
  52. style="margin-bottom: 8px;"
  53. >
  54. <el-radio :label="'theme'">
  55. 颜色字段
  56. </el-radio>
  57. <el-radio :label="'customize'">
  58. 自定义
  59. </el-radio>
  60. </el-radio-group>
  61. <el-select
  62. v-if="lineColorType === 'theme'"
  63. v-model="config.customize.normal.lineColor"
  64. popper-class="bs-el-select"
  65. class="bs-el-select"
  66. placeholder="请选择颜色字段"
  67. >
  68. <el-option
  69. v-for="item in colorFields"
  70. :key="item.value"
  71. :label="item.label"
  72. :value="item.value"
  73. />
  74. </el-select>
  75. <ColorPicker
  76. v-if="lineColorType === 'customize'"
  77. v-model="config.customize.normal.lineColor"
  78. :predefine-colors="predefineThemeColors"
  79. />
  80. </el-form-item>
  81. <el-form-item
  82. label="图形弯曲度"
  83. label-width="100px"
  84. >
  85. <el-input-number
  86. v-model="config.customize.normal.lineCurveness"
  87. :min="0"
  88. :max="1"
  89. :step="0.1"
  90. class="bs-el-input-number"
  91. />
  92. </el-form-item>
  93. <el-form-item
  94. label="矩形边框色"
  95. label-width="100px"
  96. >
  97. <ColorPicker
  98. v-model="config.customize.normal.itemBorderColor"
  99. :predefine-colors="predefineThemeColors"
  100. />
  101. </el-form-item>
  102. <el-form-item
  103. label="矩形边框宽度"
  104. label-width="100px"
  105. >
  106. <el-input-number
  107. v-model="config.customize.normal.itemBorderWidth"
  108. class="bs-el-input-number"
  109. />
  110. </el-form-item>
  111. <el-form-item
  112. label="矩形边框样式"
  113. label-width="100px"
  114. >
  115. <el-select
  116. v-model="config.customize.normal.itemBorderType"
  117. popper-class="bs-el-select"
  118. class="bs-el-select"
  119. placeholder="请选择位置"
  120. >
  121. <el-option
  122. v-for="item in borderTypeList"
  123. :key="item.value"
  124. :label="item.label"
  125. :value="item.value"
  126. />
  127. </el-select>
  128. </el-form-item>
  129. <el-form-item
  130. label="标签位置"
  131. label-width="100px"
  132. >
  133. <el-select
  134. v-model="config.customize.normal.labelPosition"
  135. popper-class="bs-el-select"
  136. class="bs-el-select"
  137. placeholder="请选择位置"
  138. >
  139. <el-option
  140. v-for="item in labelPositionList"
  141. :key="item.value"
  142. :label="item.label"
  143. :value="item.value"
  144. />
  145. </el-select>
  146. </el-form-item>
  147. <el-form-item
  148. label="标签颜色"
  149. label-width="100px"
  150. >
  151. <ColorPicker
  152. v-model="config.customize.normal.labelColor"
  153. :predefine-colors="predefineThemeColors"
  154. />
  155. </el-form-item>
  156. <el-form-item
  157. label="标签字体大小"
  158. label-width="100px"
  159. >
  160. <el-input-number
  161. v-model="config.customize.normal.labelSize"
  162. class="bs-el-input-number"
  163. />
  164. </el-form-item>
  165. <el-form-item
  166. label="标签字体粗细"
  167. label-width="100px"
  168. >
  169. <el-select
  170. v-model="config.customize.normal.labelFontWeight"
  171. popper-class="bs-el-select"
  172. class="bs-el-select"
  173. placeholder="请选择位置"
  174. >
  175. <el-option
  176. v-for="item in fontWeightList"
  177. :key="item.value"
  178. :label="item.label"
  179. :value="item.value"
  180. />
  181. </el-select>
  182. </el-form-item>
  183. </div>
  184. <SettingTitle>
  185. 高亮设置
  186. </SettingTitle>
  187. <div class="lc-field-body">
  188. <el-form-item
  189. label="图形背景色"
  190. label-width="100px"
  191. >
  192. <el-radio-group v-model="lineColorType">
  193. <el-radio :label="'theme'">
  194. 颜色字段
  195. </el-radio>
  196. <el-radio :label="'customize'">
  197. 自定义
  198. </el-radio>
  199. </el-radio-group>
  200. <el-select
  201. v-if="lineColorType === 'theme'"
  202. v-model="config.customize.emphasis.lineColor"
  203. popper-class="bs-el-select"
  204. class="bs-el-select"
  205. placeholder="请选择颜色字段"
  206. >
  207. <el-option
  208. v-for="item in colorFields"
  209. :key="item.value"
  210. :label="item.label"
  211. :value="item.value"
  212. />
  213. </el-select>
  214. <ColorPicker
  215. v-if="lineColorType === 'customize'"
  216. v-model="config.customize.emphasis.lineColor"
  217. :predefine-colors="predefineThemeColors"
  218. />
  219. </el-form-item>
  220. <el-form-item
  221. label="矩形边框色"
  222. label-width="100px"
  223. >
  224. <ColorPicker
  225. v-model="config.customize.emphasis.itemBorderColor"
  226. :predefine-colors="predefineThemeColors"
  227. />
  228. </el-form-item>
  229. <el-form-item
  230. label="矩形边框宽度"
  231. label-width="100px"
  232. >
  233. <el-input-number
  234. v-model="config.customize.emphasis.itemBorderWidth"
  235. class="bs-el-input-number"
  236. />
  237. </el-form-item>
  238. <el-form-item
  239. label="矩形边框样式"
  240. label-width="100px"
  241. >
  242. <el-select
  243. v-model="config.customize.emphasis.itemBorderType"
  244. popper-class="bs-el-select"
  245. class="bs-el-select"
  246. placeholder="请选择位置"
  247. >
  248. <el-option
  249. v-for="item in borderTypeList"
  250. :key="item.value"
  251. :label="item.label"
  252. :value="item.value"
  253. />
  254. </el-select>
  255. </el-form-item>
  256. <el-form-item
  257. label="标签颜色"
  258. label-width="100px"
  259. >
  260. <ColorPicker
  261. v-model="config.customize.emphasis.labelColor"
  262. :predefine-colors="predefineThemeColors"
  263. />
  264. </el-form-item>
  265. <el-form-item
  266. label="标签字体大小"
  267. label-width="100px"
  268. >
  269. <el-input-number
  270. v-model="config.customize.emphasis.labelSize"
  271. class="bs-el-input-number"
  272. />
  273. </el-form-item>
  274. <el-form-item
  275. label="标签字体粗细"
  276. label-width="100px"
  277. >
  278. <el-select
  279. v-model="config.customize.emphasis.labelFontWeight"
  280. popper-class="bs-el-select"
  281. class="bs-el-select"
  282. placeholder="请选择位置"
  283. >
  284. <el-option
  285. v-for="item in fontWeightList"
  286. :key="item.value"
  287. :label="item.label"
  288. :value="item.value"
  289. />
  290. </el-select>
  291. </el-form-item>
  292. </div>
  293. <SettingTitle>
  294. 边距
  295. </SettingTitle>
  296. <div class="lc-field-body">
  297. <el-form-item label="上边距">
  298. <el-input-number
  299. v-model="config.customize.top"
  300. class="bs-el-input-number"
  301. />
  302. </el-form-item>
  303. <el-form-item label="下边距">
  304. <el-input-number
  305. v-model="config.customize.bottom"
  306. class="bs-el-input-number"
  307. />
  308. </el-form-item>
  309. <el-form-item label="左边距">
  310. <el-input-number
  311. v-model="config.customize.left"
  312. class="bs-el-input-number"
  313. />
  314. </el-form-item>
  315. <el-form-item label="右边距">
  316. <el-input-number
  317. v-model="config.customize.right"
  318. class="bs-el-input-number"
  319. />
  320. </el-form-item>
  321. </div>
  322. </el-form>
  323. </div>
  324. </template>
  325. <script>
  326. import SettingTitle from 'data-room-ui/SettingTitle/index.vue'
  327. import { chartSettingMixins } from 'data-room-ui/js/mixins/chartSettingMixins'
  328. import ColorSelect from 'data-room-ui/ColorMultipleSelect/index.vue'
  329. import ColorPicker from 'data-room-ui/ColorPicker/index.vue'
  330. import BorderSetting from 'data-room-ui/BigScreenDesign/RightSetting/BorderSetting.vue'
  331. import PosWhSetting from 'data-room-ui/BigScreenDesign/RightSetting/PosWhSetting.vue'
  332. import RotateSetting from 'data-room-ui/BigScreenDesign/RightSetting/RotateSetting.vue'
  333. import { predefineColors } from 'data-room-ui/js/utils/colorList'
  334. export default {
  335. name: 'BarSetting',
  336. components: {
  337. ColorPicker,
  338. SettingTitle,
  339. PosWhSetting,
  340. BorderSetting,
  341. RotateSetting
  342. },
  343. mixins: [chartSettingMixins],
  344. props: {},
  345. data () {
  346. return {
  347. lineColorType: 'theme',
  348. fontWeightList: [
  349. {
  350. label: '正常',
  351. value: 'normal'
  352. },
  353. {
  354. label: '粗体',
  355. value: 'bold'
  356. },
  357. {
  358. label: '加粗',
  359. value: 'bolder'
  360. },
  361. {
  362. label: '细体',
  363. value: 'lighter'
  364. }
  365. ],
  366. colorFields: [
  367. {
  368. label: '起始字段',
  369. value: 'source'
  370. },
  371. {
  372. label: '目标字段',
  373. value: 'target'
  374. },
  375. {
  376. label: '渐变色',
  377. value: 'gradient'
  378. }
  379. ],
  380. borderTypeList: [
  381. {
  382. label: '实线',
  383. value: 'solid'
  384. },
  385. {
  386. label: '虚线',
  387. value: 'dashed'
  388. },
  389. {
  390. label: '点线',
  391. value: 'dotted'
  392. }
  393. ],
  394. labelPositionList: [
  395. {
  396. label: '顶部',
  397. value: 'top'
  398. },
  399. {
  400. label: '底部',
  401. value: 'bottom'
  402. },
  403. {
  404. label: '靠左',
  405. value: 'left'
  406. },
  407. {
  408. label: '靠右',
  409. value: 'right'
  410. },
  411. {
  412. label: '内部',
  413. value: 'inside'
  414. },
  415. {
  416. label: '内部靠左',
  417. value: 'insideLeft'
  418. },
  419. {
  420. label: '内部靠右',
  421. value: 'insideRight'
  422. },
  423. {
  424. label: '内部顶部',
  425. value: 'insideTop '
  426. },
  427. {
  428. label: '内部底部',
  429. value: 'insideBottom'
  430. },
  431. {
  432. label: '内部左上',
  433. value: 'insideTopLeft'
  434. },
  435. {
  436. label: '内部右上',
  437. value: 'insideTopRight'
  438. },
  439. {
  440. label: '内部左下',
  441. value: 'insideBottomLeft'
  442. },
  443. {
  444. label: '内部右下',
  445. value: 'insideBottomRight'
  446. }
  447. ],
  448. colors: [],
  449. mapList: [],
  450. predefineThemeColors: predefineColors,
  451. mapTree: [],
  452. currentMap: {},
  453. axisPositionList: [
  454. {
  455. label: '左',
  456. value: 'start'
  457. },
  458. {
  459. label: '中',
  460. value: 'center'
  461. },
  462. {
  463. label: '右',
  464. value: 'end'
  465. }]
  466. }
  467. },
  468. computed: {
  469. config: {
  470. get () {
  471. return this.$store.state.bigScreen.activeItemConfig
  472. },
  473. set (val) {
  474. this.$store.state.bigScreen.activeItemConfig = val
  475. }
  476. }
  477. },
  478. watch: {},
  479. mounted () {
  480. this.colors = this.config.customize.rangeColor
  481. },
  482. methods: {
  483. delColor () {
  484. if (this.colors.length <= 2) return
  485. this.colors.pop()
  486. this.config.customize.rangeColor.pop()
  487. },
  488. addColor () {
  489. this.colors.push('#fff')
  490. },
  491. updateColorScheme (colors) {
  492. this.colors = [...colors]
  493. this.config.customize.rangeColor = [...colors]
  494. }
  495. }
  496. }
  497. </script>
  498. <style lang="scss" scoped>
  499. @import '../../assets/style/settingWrap.scss';
  500. @import '../../assets/style/bsTheme.scss';
  501. // 筛选条件的按钮样式
  502. .add-filter-box {
  503. position: relative;
  504. .add-filter {
  505. margin-left: 90px;
  506. margin-bottom: 10px;
  507. }
  508. .add-filter-btn {
  509. position: absolute;
  510. top: 0;
  511. }
  512. }
  513. .lc-field-body {
  514. padding: 12px 16px;
  515. }
  516. ::v-deep .bs-el-slider-dark {
  517. .el-slider__runway {
  518. background-color: var(--bs-el-background-1) !important;
  519. }
  520. }
  521. </style>