setting.vue 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567
  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">边框</SettingTitle>
  28. <div class="lc-field-body">
  29. <BorderSetting
  30. v-if="config.border"
  31. label-width="100px"
  32. :config="config.border"
  33. :bigTitle='config.title'
  34. />
  35. </div>
  36. <SettingTitle>旋转</SettingTitle>
  37. <div class="lc-field-body">
  38. <RotateSetting
  39. :config="config"
  40. />
  41. </div>
  42. <SettingTitle>基础</SettingTitle>
  43. <div class="lc-field-body">
  44. <el-form-item
  45. label="是否显示地名"
  46. label-width="100px"
  47. >
  48. <el-switch
  49. v-model="config.customize.mapName"
  50. class="bs-el-switch"
  51. active-color="#007aff"
  52. />
  53. </el-form-item>
  54. <el-form-item
  55. v-if="config.customize.mapName"
  56. label="地名字体颜色"
  57. label-width="100px"
  58. >
  59. <ColorPicker
  60. v-model="config.customize.mapNameColor"
  61. :predefine-colors="predefineThemeColors"
  62. />
  63. </el-form-item>
  64. <el-form-item
  65. v-if="config.customize.mapName"
  66. label="地名字体大小"
  67. label-width="100px"
  68. >
  69. <el-input-number
  70. v-model="config.customize.mapNameSize"
  71. class="bs-el-input-number"
  72. placeholder="请输入字体大小"
  73. :min="0"
  74. />
  75. </el-form-item>
  76. <el-form-item
  77. v-if="config.customize.mapName"
  78. label="地名字体权重"
  79. label-width="100px"
  80. >
  81. <el-input-number
  82. v-model="config.customize.mapNameWeight"
  83. class="bs-el-input-number"
  84. placeholder="请输入字体权重"
  85. :min="100"
  86. :step="100"
  87. />
  88. </el-form-item>
  89. <el-form-item
  90. label="地图级别"
  91. label-width="100px"
  92. >
  93. <el-select
  94. v-model="config.customize.level"
  95. popper-class="bs-el-select"
  96. class="bs-el-select"
  97. @change="changeLevel()"
  98. >
  99. <el-option
  100. v-for="level in levelList"
  101. :key="level.value"
  102. :label="level.label"
  103. :value="level.value"
  104. />
  105. </el-select>
  106. </el-form-item>
  107. <el-form-item
  108. label="地图"
  109. label-width="100px"
  110. >
  111. <el-cascader
  112. ref="cascade"
  113. v-model="config.customize.mapId"
  114. popper-class="bs-el-cascader"
  115. :options="mapTree"
  116. :props="{ value: 'id', label: 'name', children: 'children', emitPath: false }"
  117. @change="mapSelect">
  118. <template slot-scope="{ node, data }">
  119. <span style="float: left">{{ data.name }}</span>
  120. <span v-if="data.disabled" style="float: right; color: #8492a6; font-size: 13px"> 未配置 </span>
  121. </template>
  122. </el-cascader>
  123. </el-form-item>
  124. <el-form-item
  125. label="是否开启下钻"
  126. label-width="100px"
  127. >
  128. <el-switch
  129. v-model="config.customize.down"
  130. class="bs-el-switch"
  131. active-color="#007aff"
  132. />
  133. </el-form-item>
  134. <el-form-item
  135. v-if="config.customize.down"
  136. label="允许下钻层级"
  137. label-width="100px"
  138. >
  139. <el-select
  140. v-model="config.customize.downLevel"
  141. popper-class="bs-el-select"
  142. class="bs-el-select">
  143. <el-option
  144. v-for="level in downLevelList"
  145. :key="level.value"
  146. :label="level.label"
  147. :value="level.value"
  148. />
  149. </el-select>
  150. </el-form-item>
  151. <el-form-item
  152. label="比例"
  153. label-width="100px"
  154. >
  155. <el-slider
  156. v-model="config.customize.zoom"
  157. class="bs-el-slider-dark"
  158. :step="0.1"
  159. :min="0.1"
  160. :max="5"
  161. ></el-slider>
  162. </el-form-item>
  163. <el-form-item
  164. label="中心点横向偏移"
  165. label-width="100px"
  166. >
  167. <el-slider
  168. class="bs-el-slider-dark"
  169. v-model="config.customize.center1"
  170. :step="1"
  171. :min="1"
  172. :max="100"
  173. ></el-slider>
  174. </el-form-item>
  175. <el-form-item
  176. label="中心点纵向偏移"
  177. label-width="100px"
  178. >
  179. <el-slider
  180. class="bs-el-slider-dark"
  181. v-model="config.customize.center2"
  182. :step="1"
  183. :min="1"
  184. :max="100"
  185. ></el-slider>
  186. </el-form-item>
  187. <el-form-item
  188. v-if="config.customize.down"
  189. label="头部字体颜色"
  190. label-width="100px"
  191. >
  192. <ColorPicker
  193. v-model="config.customize.fontGraphicColor"
  194. :predefine-colors="predefineThemeColors"
  195. />
  196. </el-form-item>
  197. <el-form-item
  198. v-if="config.customize.down"
  199. label="头部字体大小"
  200. label-width="100px"
  201. >
  202. <el-input-number
  203. v-model="config.customize.fontSize"
  204. placeholder="请输入字体大小"
  205. controls-position="right"
  206. :step="1"
  207. />
  208. </el-form-item>
  209. <el-form-item
  210. label="地图背景色"
  211. label-width="100px"
  212. >
  213. <ColorPicker
  214. v-model="config.customize.backgroundColor"
  215. :predefine-colors="predefineThemeColors"
  216. />
  217. </el-form-item>
  218. <el-form-item
  219. label="地图分割线颜色"
  220. label-width="100px"
  221. >
  222. <ColorPicker
  223. v-model="config.customize.mapLineColor"
  224. :predefine-colors="predefineThemeColors"
  225. />
  226. </el-form-item>
  227. <el-form-item
  228. label="地图高亮颜色"
  229. label-width="100px"
  230. >
  231. <ColorPicker
  232. v-model="config.customize.emphasisColor"
  233. :predefine-colors="predefineThemeColors"
  234. />
  235. </el-form-item>
  236. <el-form-item
  237. label="值渲染模式"
  238. label-width="100px"
  239. >
  240. <el-radio-group
  241. v-model="config.customize.scatter"
  242. class="bs-el-radio-group"
  243. >
  244. <el-radio :label="true">
  245. 打点
  246. </el-radio>
  247. <el-radio :label="false">
  248. 色块
  249. </el-radio>
  250. </el-radio-group>
  251. </el-form-item>
  252. </div>
  253. <SettingTitle v-if="config.customize.scatter" >打点模式</SettingTitle>
  254. <div class="lc-field-body">
  255. <el-form-item
  256. v-if="config.customize.scatter"
  257. label="地图分割块颜色"
  258. label-width="100px"
  259. >
  260. <ColorPicker
  261. v-model="config.customize.areaColor"
  262. :predefine-colors="predefineThemeColors"
  263. />
  264. </el-form-item>
  265. <el-form-item
  266. v-if="config.customize.scatter"
  267. label="点颜色"
  268. label-width="100px"
  269. >
  270. <ColorPicker
  271. v-model="config.customize.scatterBackgroundColor"
  272. :predefine-colors="predefineThemeColors"
  273. />
  274. </el-form-item>
  275. <el-form-item
  276. v-if="config.customize.scatter"
  277. label="点形状"
  278. label-width="100px"
  279. >
  280. <el-select
  281. v-model="config.customize.scatterSymbol"
  282. popper-class="bs-el-select"
  283. class="bs-el-select"
  284. @change="changeLevel()"
  285. >
  286. <el-option
  287. v-for="symbol in symbolList"
  288. :key="symbol.value"
  289. :label="symbol.label"
  290. :value="symbol.value"
  291. />
  292. </el-select>
  293. </el-form-item>
  294. <el-form-item
  295. v-if="config.customize.scatter"
  296. label="显示点文字"
  297. label-width="100px"
  298. >
  299. <el-switch
  300. v-model="config.customize.showScatterValue"
  301. class="bs-el-switch"
  302. active-color="#007aff"
  303. />
  304. </el-form-item>
  305. <el-form-item
  306. v-if="config.customize.scatter"
  307. label="点文字颜色"
  308. label-width="100px"
  309. >
  310. <ColorPicker
  311. v-model="config.customize.scatterColor"
  312. :predefine-colors="predefineThemeColors"
  313. />
  314. </el-form-item>
  315. <el-form-item
  316. v-if="config.customize.scatter"
  317. label="点尺寸"
  318. label-width="100px"
  319. >
  320. <el-slider
  321. v-model="config.customize.scatterSize"
  322. class="bs-el-slider-dark"
  323. :step="1"
  324. :min="1"
  325. :max="100"
  326. ></el-slider>
  327. </el-form-item>
  328. </div>
  329. <SettingTitle v-if="!config.customize.scatter">色块模式</SettingTitle>
  330. <div class="lc-field-body">
  331. <el-form-item
  332. v-if="!config.customize.scatter"
  333. label="悬浮框背景色"
  334. label-width="100px"
  335. >
  336. <ColorPicker
  337. v-model="config.customize.tooltipBackgroundColor"
  338. :predefine-colors="predefineThemeColors"
  339. />
  340. </el-form-item>
  341. <el-form-item
  342. v-if="!config.customize.scatter"
  343. label="悬浮框边框色"
  344. label-width="100px"
  345. >
  346. <ColorPicker
  347. v-model="config.customize.borderColor"
  348. :predefine-colors="predefineThemeColors"
  349. />
  350. </el-form-item>
  351. <el-form-item
  352. v-if="!config.customize.scatter"
  353. label="悬浮框数值标题"
  354. label-width="100px"
  355. >
  356. <el-input
  357. v-model="config.customize.tooltipTitle"
  358. placeholder="请输入数值标题"
  359. clearable
  360. />
  361. </el-form-item>
  362. <el-form-item
  363. v-if="!config.customize.scatter"
  364. label="启用手动筛选"
  365. label-width="100px"
  366. >
  367. <el-switch
  368. v-model="config.customize.visual"
  369. class="bs-el-switch"
  370. active-color="#007aff"
  371. />
  372. </el-form-item>
  373. <el-form-item
  374. v-if="!config.customize.scatter"
  375. label="色块数值范围"
  376. label-width="100px"
  377. >
  378. <el-input-number
  379. v-model="config.customize.range[0]"
  380. placeholder="请输入最小值"
  381. controls-position="right"
  382. :step="1"
  383. />
  384. -
  385. <el-input-number
  386. v-model="config.customize.range[1]"
  387. controls-position="right"
  388. placeholder="请输入最大值"
  389. :step="1"
  390. />
  391. </el-form-item>
  392. <el-form-item
  393. v-if="!config.customize.scatter"
  394. label="色块配色方案"
  395. label-width="100px"
  396. >
  397. <color-select
  398. v-model="config.customize.rangeColor"
  399. @update="updateColorScheme"
  400. />
  401. <div
  402. style="
  403. display: flex;
  404. align-items: center;
  405. height: 42px;
  406. flex-wrap: wrap;
  407. "
  408. >
  409. <el-color-picker
  410. v-for="(colorItem, index) in colors"
  411. :key="index"
  412. v-model="config.customize.rangeColor[index]"
  413. show-alpha
  414. popper-class="bs-el-color-picker"
  415. class="start-color bs-el-color-picker"
  416. />
  417. <span
  418. class="el-icon-circle-plus-outline"
  419. style="color: #007aff; font-size: 20px"
  420. @click="addColor"
  421. />
  422. <span
  423. v-if="colors.length"
  424. class="el-icon-remove-outline"
  425. style="color: #ea0b30; font-size: 20px"
  426. @click="delColor"
  427. />
  428. </div>
  429. </el-form-item>
  430. </div>
  431. </el-form>
  432. </div>
  433. </template>
  434. <script>
  435. import SettingTitle from 'data-room-ui/SettingTitle/index.vue'
  436. import { chartSettingMixins } from 'data-room-ui/js/mixins/chartSettingMixins'
  437. import ColorSelect from 'data-room-ui/ColorMultipleSelect/index.vue'
  438. import ColorPicker from 'data-room-ui/ColorPicker/index.vue'
  439. import BorderSetting from 'data-room-ui/BigScreenDesign/RightSetting/BorderSetting.vue'
  440. import PosWhSetting from 'data-room-ui/BigScreenDesign/RightSetting/PosWhSetting.vue'
  441. import RotateSetting from 'data-room-ui/BigScreenDesign/RightSetting/RotateSetting.vue'
  442. import {predefineColors} from "data-room-ui/js/utils/colorList";
  443. export default {
  444. name: 'BarSetting',
  445. components: {
  446. ColorSelect,
  447. ColorPicker,
  448. PosWhSetting,
  449. SettingTitle,
  450. BorderSetting,
  451. RotateSetting
  452. },
  453. mixins: [chartSettingMixins],
  454. props: {},
  455. data () {
  456. return {
  457. mapList: [],
  458. predefineThemeColors: predefineColors,
  459. mapTree: [],
  460. currentMap: {},
  461. levelList: [
  462. {value: '0', label: '世界'},
  463. {value: '1', label: '国家'},
  464. {value: '2', label: '省份'},
  465. {value: '3', label: '城市'},
  466. {value: '4', label: '区县'}
  467. ],
  468. symbolList: [
  469. {value: 'circle', label: '圆形'},
  470. {value: 'rect', label: '矩形'},
  471. {value: 'roundRect', label: '圆角矩形'},
  472. {value: 'triangle', label: '三角形'},
  473. {value: 'diamond', label: '菱形'},
  474. {value: 'pin', label: '水滴'},
  475. {value: 'arrow', label: '箭头'}
  476. ],
  477. // 旧版本地图等级,该数据用于兼容旧版本
  478. oldLevelMap: {
  479. 'world' : '0',
  480. 'country' : '1',
  481. 'province' : '2',
  482. },
  483. downLevelList: [
  484. {value: 1, label: '下钻一层'},
  485. {value: 2, label: '下钻两层'},
  486. {value: 3, label: '下钻三层'},
  487. {value: 4, label: '下钻四层'},
  488. {value: 5, label: '下钻五层'}
  489. ],
  490. }
  491. },
  492. computed: {
  493. config: {
  494. get () {
  495. return this.$store.state.bigScreen.activeItemConfig
  496. },
  497. set (val) {
  498. this.$store.state.bigScreen.activeItemConfig = val
  499. }
  500. }
  501. },
  502. watch: {},
  503. mounted () {
  504. this.getMapTree()
  505. },
  506. methods: {
  507. getMapTree() {
  508. const levelConst = ['0', '1', '2', '3', '4']
  509. if (!levelConst.includes(this.config.customize.level)) {
  510. this.config.customize.level = this.oldLevelMap[this.config.customize.level] || '0'
  511. }
  512. this.$dataRoomAxios.get(`${window.BS_CONFIG?.httpConfigs?.baseURL}/bigScreen/map/tree/${this.config.customize.level}`).then((res) => {
  513. this.mapTree = res
  514. })
  515. },
  516. mapSelect (mapId) {
  517. let mapData = this.$refs['cascade'].getCheckedNodes()[0].data
  518. this.currentMap = mapData
  519. },
  520. changeMap(val){
  521. this.config.customize.scope=val.slice(0,-5)
  522. },
  523. changeLevel () {
  524. this.getMapTree()
  525. },
  526. delColor () {
  527. this.colors = []
  528. this.config.customize.rangeColor = []
  529. },
  530. addColor () {
  531. this.colors.push('')
  532. },
  533. updateColorScheme (colors) {
  534. this.colors = [...colors]
  535. this.config.customize.rangeColor = [...colors]
  536. }
  537. }
  538. }
  539. </script>
  540. <style lang="scss" scoped>
  541. @import '../../assets/style/settingWrap.scss';
  542. @import '../../assets/style/bsTheme.scss';
  543. // 筛选条件的按钮样式
  544. .add-filter-box {
  545. position: relative;
  546. .add-filter {
  547. margin-left: 90px;
  548. margin-bottom: 10px;
  549. }
  550. .add-filter-btn {
  551. position: absolute;
  552. top: 0;
  553. }
  554. }
  555. .lc-field-body {
  556. padding: 12px 16px;
  557. }
  558. ::v-deep.bs-el-slider-dark {
  559. .el-slider__runway {
  560. background-color: var(--bs-el-background-1) !important;
  561. }
  562. }
  563. </style>