setting.vue 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371
  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. />
  34. </div>
  35. <SettingTitle>基础</SettingTitle>
  36. <div class="lc-field-body">
  37. <el-form-item
  38. label="是否显示地名"
  39. label-width="100px"
  40. >
  41. <el-switch
  42. v-model="config.customize.mapName"
  43. class="bs-el-switch"
  44. active-color="#007aff"
  45. />
  46. </el-form-item>
  47. <el-form-item
  48. label="地图级别"
  49. label-width="100px"
  50. >
  51. <el-select
  52. v-model="config.customize.level"
  53. popper-class="bs-el-select"
  54. class="bs-el-select"
  55. @change="changeLevel()"
  56. >
  57. <el-option
  58. label="国家"
  59. value="country"
  60. />
  61. <el-option
  62. label="省份"
  63. value="province"
  64. />
  65. </el-select>
  66. </el-form-item>
  67. <el-form-item
  68. v-if="config.customize.level == 'province'"
  69. label="地图显示区域"
  70. label-width="100px"
  71. >
  72. <el-select
  73. v-model="config.customize.dataMap"
  74. popper-class="bs-el-select"
  75. class="bs-el-select"
  76. @change="changeMap()"
  77. >
  78. <el-option
  79. v-for="map in mapList"
  80. :key="map.name"
  81. :label="map.name"
  82. :value="map.url"
  83. />
  84. </el-select>
  85. </el-form-item>
  86. <el-form-item
  87. v-if="config.customize.level == 'country'"
  88. label="是否开启下钻"
  89. label-width="100px"
  90. >
  91. <el-switch
  92. v-model="config.customize.down"
  93. class="bs-el-switch"
  94. active-color="#007aff"
  95. />
  96. </el-form-item>
  97. <el-form-item
  98. v-if="config.customize.down"
  99. label="头部字体颜色"
  100. label-width="100px"
  101. >
  102. <ColorPicker
  103. v-model="config.customize.fontGraphicColor"
  104. :predefine-colors="predefineThemeColors"
  105. />
  106. </el-form-item>
  107. <el-form-item
  108. v-if="config.customize.down"
  109. label="头部字体大小"
  110. label-width="100px"
  111. >
  112. <el-input-number
  113. v-model="config.customize.fontSize"
  114. placeholder="请输入字体大小"
  115. controls-position="right"
  116. :step="1"
  117. />
  118. </el-form-item>
  119. <el-form-item
  120. label="地图背景色"
  121. label-width="100px"
  122. >
  123. <ColorPicker
  124. v-model="config.customize.backgroundColor"
  125. :predefine-colors="predefineThemeColors"
  126. />
  127. </el-form-item>
  128. <el-form-item
  129. label="地图分割线颜色"
  130. label-width="100px"
  131. >
  132. <ColorPicker
  133. v-model="config.customize.mapLineColor"
  134. :predefine-colors="predefineThemeColors"
  135. />
  136. </el-form-item>
  137. <el-form-item
  138. label="地图分割块颜色"
  139. label-width="100px"
  140. >
  141. <ColorPicker
  142. v-model="config.customize.areaColor"
  143. :predefine-colors="predefineThemeColors"
  144. />
  145. </el-form-item>
  146. <el-form-item
  147. label="是否打点"
  148. label-width="100px"
  149. >
  150. <el-switch
  151. v-model="config.customize.scatter"
  152. class="bs-el-switch"
  153. active-color="#007aff"
  154. />
  155. </el-form-item>
  156. <el-form-item
  157. v-if="config.customize.scatter"
  158. label="打点图背景色"
  159. label-width="100px"
  160. >
  161. <ColorPicker
  162. v-model="config.customize.scatterBackgroundColor"
  163. :predefine-colors="predefineThemeColors"
  164. />
  165. </el-form-item>
  166. <el-form-item
  167. v-if="config.customize.scatter"
  168. label="打点图文字颜色"
  169. label-width="100px"
  170. >
  171. <ColorPicker
  172. v-model="config.customize.scatterColor"
  173. :predefine-colors="predefineThemeColors"
  174. />
  175. </el-form-item>
  176. <el-form-item
  177. v-if="!config.customize.scatter"
  178. label="悬浮框背景色"
  179. label-width="100px"
  180. >
  181. <ColorPicker
  182. v-model="config.customize.tooltipBackgroundColor"
  183. :predefine-colors="predefineThemeColors"
  184. />
  185. </el-form-item>
  186. <el-form-item
  187. v-if="!config.customize.scatter"
  188. label="悬浮框边框色"
  189. label-width="100px"
  190. >
  191. <ColorPicker
  192. v-model="config.customize.borderColor"
  193. :predefine-colors="predefineThemeColors"
  194. />
  195. </el-form-item>
  196. <el-form-item
  197. label="是否开启筛选"
  198. label-width="100px"
  199. >
  200. <el-switch
  201. v-model="config.customize.visual"
  202. class="bs-el-switch"
  203. active-color="#007aff"
  204. />
  205. </el-form-item>
  206. <el-form-item
  207. v-if="config.customize.visual"
  208. label="数值范围"
  209. label-width="100px"
  210. >
  211. <el-input-number
  212. v-model="config.customize.range[0]"
  213. placeholder="请输入最小值"
  214. controls-position="right"
  215. :step="1"
  216. />
  217. -
  218. <el-input-number
  219. v-model="config.customize.range[1]"
  220. controls-position="right"
  221. placeholder="请输入最大值"
  222. :step="1"
  223. />
  224. </el-form-item>
  225. <el-form-item
  226. v-if="config.customize.visual"
  227. label="配色方案"
  228. label-width="100px"
  229. >
  230. <color-select
  231. v-model="config.customize.rangeColor"
  232. @update="updateColorScheme"
  233. />
  234. <div
  235. style="
  236. display: flex;
  237. align-items: center;
  238. height: 42px;
  239. flex-wrap: wrap;
  240. "
  241. >
  242. <el-color-picker
  243. v-for="(colorItem, index) in colors"
  244. :key="index"
  245. v-model="config.customize.rangeColor[index]"
  246. show-alpha
  247. popper-class="bs-el-color-picker"
  248. class="start-color bs-el-color-picker"
  249. />
  250. <span
  251. class="el-icon-circle-plus-outline"
  252. style="color: #007aff; font-size: 20px"
  253. @click="addColor"
  254. />
  255. <span
  256. v-if="colors.length"
  257. class="el-icon-remove-outline"
  258. style="color: #ea0b30; font-size: 20px"
  259. @click="delColor"
  260. />
  261. </div>
  262. </el-form-item>
  263. </div>
  264. </el-form>
  265. </div>
  266. </template>
  267. <script>
  268. import SettingTitle from 'data-room-ui/SettingTitle/index.vue'
  269. import { chartSettingMixins } from 'data-room-ui/js/mixins/chartSettingMixins'
  270. import ColorSelect from 'data-room-ui/ColorMultipleSelect/index.vue'
  271. import ColorPicker from 'data-room-ui/ColorPicker/index.vue'
  272. import BorderSetting from 'data-room-ui/BigScreenDesign/RightSetting/BorderSetting.vue'
  273. import PosWhSetting from 'data-room-ui/BigScreenDesign/RightSetting/PosWhSetting.vue'
  274. export default {
  275. name: 'BarSetting',
  276. components: {
  277. ColorSelect,
  278. ColorPicker,
  279. PosWhSetting,
  280. SettingTitle,
  281. BorderSetting
  282. },
  283. mixins: [chartSettingMixins],
  284. props: {},
  285. data () {
  286. return {
  287. mapList: [],
  288. predefineThemeColors: [
  289. '#007aff',
  290. '#1aa97b',
  291. '#ff4d53',
  292. '#1890FF',
  293. '#DF0E1B',
  294. '#0086CC',
  295. '#2B74CF',
  296. '#00BC9D',
  297. '#ED7D32'
  298. ]
  299. }
  300. },
  301. computed: {
  302. config: {
  303. get () {
  304. return this.$store.state.bigScreen.activeItemConfig
  305. },
  306. set (val) {
  307. this.$store.state.bigScreen.activeItemConfig = val
  308. }
  309. }
  310. },
  311. watch: {},
  312. mounted () {
  313. this.getMapList()
  314. },
  315. methods: {
  316. getMapList () {
  317. this.$dataRoomAxios.get(`${window.BS_CONFIG?.httpConfigs?.baseURL}/bigScreen/design/map/list/${this.config.customize.level}`).then((res) => {
  318. this.mapList = res
  319. })
  320. },
  321. changeMap(val){
  322. this.config.customize.scope=val.slice(0,-5)
  323. },
  324. changeLevel () {
  325. this.getMapList()
  326. if (this.config.customize.level === 'country') {
  327. this.config.customize.dataMap = '中华人民共和国.json'
  328. this.config.customize.scope='中国'
  329. } else if (this.config.customize.level === 'province') {
  330. this.config.customize.dataMap = '安徽省.json'
  331. this.config.customize.scope='安徽省'
  332. this.config.customize.down=false
  333. }else{
  334. this.config.customize.scope='世界'
  335. this.config.customize.down=false
  336. }
  337. },
  338. delColor () {
  339. this.colors = []
  340. this.config.customize.rangeColor = []
  341. },
  342. addColor () {
  343. this.colors.push('')
  344. },
  345. updateColorScheme (colors) {
  346. this.colors = [...colors]
  347. this.config.customize.rangeColor = [...colors]
  348. }
  349. }
  350. }
  351. </script>
  352. <style lang="scss" scoped>
  353. @import '../../assets/style/settingWrap.scss';
  354. @import '../../assets/style/bsTheme.scss';
  355. // 筛选条件的按钮样式
  356. .add-filter-box {
  357. position: relative;
  358. .add-filter {
  359. margin-left: 90px;
  360. margin-bottom: 10px;
  361. }
  362. .add-filter-btn {
  363. position: absolute;
  364. top: 0;
  365. }
  366. }
  367. .lc-field-body {
  368. padding: 12px 16px;
  369. }
  370. </style>