Commit ff762ec5b3bd97ebb1085196cb5057fff81ea16a

Authored by ly525
1 parent 563e14b7

feat(chrt component): support color theme !#zh: echart 支持配色

front-end/h5/src/components/core/support/colors-panel.js 0 → 100644
  1 +export default {
  2 + name: 'colors-panel',
  3 + props: {
  4 + value: {
  5 + type: Array,
  6 + default: () => []
  7 + }
  8 + },
  9 + render () {
  10 + return <div>
  11 + {
  12 + this.value.map((colorString, index) => {
  13 + return <el-color-picker
  14 + size="small"
  15 + value={colorString}
  16 + onChange={newColorString => {
  17 + const colors = this.value.slice(0)
  18 + colors[index] = newColorString
  19 + this.$emit('change', colors)
  20 + }}
  21 + />
  22 + })
  23 + }
  24 + </div>
  25 + }
  26 +}
front-end/h5/src/components/core/support/csv-import.js
@@ -63,8 +63,8 @@ export default { @@ -63,8 +63,8 @@ export default {
63 }, 63 },
64 render () { 64 render () {
65 const randomId = +new Date() 65 const randomId = +new Date()
66 - return <div style="height: 50px;">  
67 - <label for={randomId} class="ant-btn ant-btn-primary ant-btn-sm">请选择CSV文件</label> 66 + return <div style="height: 24px;">
  67 + <label for={randomId} class="ant-btn ant-btn-primary ant-btn-sm">选择导入 csv 文件</label>
68 {/* <input id={randomId} style="visibility:hidden;" type="file"></input> */} 68 {/* <input id={randomId} style="visibility:hidden;" type="file"></input> */}
69 <input ref="input" id={randomId} ref="csv" type="file" onChange={this.validFileMimeType} style="visibility:hidden;" name="csv">xxxx</input> 69 <input ref="input" id={randomId} ref="csv" type="file" onChange={this.validFileMimeType} style="visibility:hidden;" name="csv">xxxx</input>
70 </div> 70 </div>
front-end/h5/src/components/core/support/excel.js
@@ -46,11 +46,12 @@ export default { @@ -46,11 +46,12 @@ export default {
46 } 46 }
47 }, 47 },
48 render () { 48 render () {
49 - return <div>  
50 - <span>方案1: 选择导入 csv 文件</span>  
51 - <CsvImport onParse={this.parseCSV} />  
52 - <span>方案2: 直接编辑 Excel</span>  
53 - <div id="excel-wrapper" ref="excel" style="margin-right: 12px;width: 100%;overflow: scroll"></div> 49 + return <div style="max-height: 320px;overflow:scroll;">
  50 + <div style="line-height:2;">
  51 + <span>方案1: <CsvImport onParse={this.parseCSV} /></span>
  52 + <span>方案2: 直接编辑 Excel</span>
  53 + <div id="excel-wrapper" ref="excel" style="margin-right: 12px;width: 100%;overflow: scroll"></div>
  54 + </div>
54 </div> 55 </div>
55 }, 56 },
56 mounted () { 57 mounted () {
front-end/h5/src/components/core/support/index.js
@@ -14,6 +14,7 @@ import PropMultiTextItemsEditor from &#39;./prop-multi-items-editor/text.js&#39; @@ -14,6 +14,7 @@ import PropMultiTextItemsEditor from &#39;./prop-multi-items-editor/text.js&#39;
14 import ImageGallery from './image-gallery/gallery.js' 14 import ImageGallery from './image-gallery/gallery.js'
15 import VideoGallery from './video-gallery/gallery.js' 15 import VideoGallery from './video-gallery/gallery.js'
16 import LbsExcelEditor from './excel' 16 import LbsExcelEditor from './excel'
  17 +import ColorsPanel from './colors-panel'
17 import LbpTextAlign from '@luban-h5/lbs-text-align' 18 import LbpTextAlign from '@luban-h5/lbs-text-align'
18 19
19 Vue.component(PropMultiTextItemsEditor.name, PropMultiTextItemsEditor) 20 Vue.component(PropMultiTextItemsEditor.name, PropMultiTextItemsEditor)
@@ -21,3 +22,4 @@ Vue.component(ImageGallery.name, ImageGallery) @@ -21,3 +22,4 @@ Vue.component(ImageGallery.name, ImageGallery)
21 Vue.component(VideoGallery.name, VideoGallery) 22 Vue.component(VideoGallery.name, VideoGallery)
22 Vue.component('lbs-text-align', LbpTextAlign) 23 Vue.component('lbs-text-align', LbpTextAlign)
23 Vue.component(LbsExcelEditor.name, LbsExcelEditor) 24 Vue.component(LbsExcelEditor.name, LbsExcelEditor)
  25 +Vue.component(ColorsPanel.name, ColorsPanel)
front-end/h5/src/components/plugins/charts/line.js
@@ -34,6 +34,17 @@ export default { @@ -34,6 +34,17 @@ export default {
34 label: '类型', 34 label: '类型',
35 defaultValue: 'line', 35 defaultValue: 'line',
36 visible: false 36 visible: false
  37 + }),
  38 + colors: PropTypes.colors({
  39 + label: '颜色面板',
  40 + defaultValue: () => [
  41 + // https://github.com/ElemeFE/v-charts/blob/01ebb541a5d905047dd52957ae0898d529342235/src/constants.js#L20
  42 + '#19d4ae', '#5ab1ef', '#fa6e86',
  43 + '#ffb980', '#0067a6', '#c4b4e4',
  44 + '#d87a80', '#9cbbff', '#d9d0c7',
  45 + '#87a997', '#d49ea2', '#5b4947',
  46 + '#7ba3a8'
  47 + ]
37 }) 48 })
38 }, 49 },
39 data () { 50 data () {
@@ -43,19 +54,14 @@ export default { @@ -43,19 +54,14 @@ export default {
43 }, 54 },
44 render () { 55 render () {
45 const chartData = Parser.csv2VChartJson(this.dataset) 56 const chartData = Parser.csv2VChartJson(this.dataset)
46 - const settings = {  
47 - // metrics: ['日期', '销售量'],  
48 - // dimension: ['日期']  
49 - }  
50 switch (this.type) { 57 switch (this.type) {
51 case 'line': 58 case 'line':
52 - return <VeLine data={chartData} settings={settings} />  
53 case 'histogram': 59 case 'histogram':
54 - return <VeHistogram data={chartData} settings={settings} /> 60 + return <VeHistogram data={chartData} colors={this.colors} />
55 case 'pie': 61 case 'pie':
56 - return <VePie data={chartData} settings={settings} /> 62 + return <VePie data={chartData} />
57 case 'funnel': 63 case 'funnel':
58 - return <VeFunnel data={chartData} settings={settings} /> 64 + return <VeFunnel data={chartData} />
59 default: 65 default:
60 return null 66 return null
61 } 67 }