lambo-design-bi 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/bi/widget/README.md +18 -0
  2. package/bi/widget/api/data.js +48 -0
  3. package/bi/widget/atom/index.vue +36 -0
  4. package/bi/widget/atom/test.vue +36 -0
  5. package/bi/widget/config/config.js +7 -0
  6. package/bi/widget/container/card/card-widget.vue +46 -0
  7. package/bi/widget/container/card/comps/indicator-card/index.js +7 -0
  8. package/bi/widget/container/card/comps/indicator-card/src/indicator-card-bi-search.vue +132 -0
  9. package/bi/widget/container/card/comps/indicator-card/src/indicator-card-bi.vue +129 -0
  10. package/bi/widget/container/card/comps/indicator-card/src/indicator-card-item-bi.vue +97 -0
  11. package/bi/widget/container/card/comps/indicator-card/src/styles/css/card-search.less +108 -0
  12. package/bi/widget/container/card/comps/indicator-card/src/styles/css/card.less +114 -0
  13. package/bi/widget/layout/col.vue +35 -0
  14. package/bi/widget/layout/row.vue +40 -0
  15. package/bi/widget/num/index.vue +101 -0
  16. package/bi/widget/page/index.vue +38 -0
  17. package/bi/widget/search/search-form.vue +85 -0
  18. package/bi/widget/search/search-item.vue +205 -0
  19. package/bi/widget/table/detail-table.vue +65 -0
  20. package/bi/widget/table/paging-table.vue +188 -0
  21. package/bi/widget/util/widget-map.js +41 -0
  22. package/package.json +39 -0
  23. package/pub/charts/echarts.vue +57 -0
  24. package/pub/charts/factory/charts-factory.vue +58 -0
  25. package/pub/charts/factory/options.js +2351 -0
  26. package/pub/empty/index.vue +33 -0
  27. package/pub/helpbox/README.md +6 -0
  28. package/pub/helpbox/index.vue +363 -0
  29. package/pub/num-index/num-index.vue +120 -0
  30. package/pub/table/detail-table/index.vue +41 -0
  31. package/pub/table/paging-table/README.md +4 -0
  32. package/pub/table/paging-table/comps/export-data.vue +390 -0
  33. package/pub/table/paging-table/comps/export-drawer.vue +429 -0
  34. package/pub/table/paging-table/index.js +3 -0
  35. package/pub/table/paging-table/index.vue +1577 -0
  36. package/pub/table/paging-table/styles/css/index.less +190 -0
  37. package/pub/theme/color.js +3 -0
  38. package/util/math-util.js +71 -0
  39. package/util/num-util.js +16 -0
@@ -0,0 +1,18 @@
1
+ ## 自定义配置查询功能组件路径
2
+ ### common(普通组件)
3
+ #### charts(图表)
4
+
5
+ ---
6
+ ### widget(需要配置的组件)
7
+ #### layout(布局)
8
+ - row 行布局
9
+ - col 列布局
10
+
11
+ #### table(表格)
12
+ - paging-table 分页表格
13
+
14
+ #### container(容器)
15
+
16
+
17
+
18
+
@@ -0,0 +1,48 @@
1
+ import biConfig from "../config/config";
2
+ import ajax from "@lambo-design/shared/utils/ajax";
3
+
4
+ /**
5
+ * 公共分页数据查询接口
6
+ *
7
+ * @param apiId
8
+ * @param inJsonObj
9
+ * @param offset
10
+ * @param limit
11
+ * @param sort
12
+ * @param order
13
+ * @returns {Promise<AxiosResponse<any>>}
14
+ */
15
+ export function getListMapPageData(apiId, inJsonObj, offset, limit, sort, order) {
16
+ const params = {
17
+ apiId: apiId,
18
+ inJson: encodeURIComponent(JSON.stringify(inJsonObj)),
19
+ offset: offset,
20
+ limit: limit,
21
+ sort: sort,
22
+ order: order
23
+ }
24
+ return ajax.request({
25
+ url: biConfig.dataServerContext + '/itfc/data/list',
26
+ method: 'get',
27
+ params
28
+ })
29
+ }
30
+
31
+ /**
32
+ * 公共数据查询接口
33
+ *
34
+ * @param apiId
35
+ * @param inJsonObj
36
+ * @returns {Promise<AxiosResponse<any>>}
37
+ */
38
+ export function getListMapData(apiId, inJsonObj) {
39
+ const params = {
40
+ apiId: apiId,
41
+ inJson: encodeURIComponent(JSON.stringify(inJsonObj))
42
+ }
43
+ return ajax.request({
44
+ url: biConfig.dataServerContext + '/itfc/data/list',
45
+ method: 'get',
46
+ params
47
+ })
48
+ }
@@ -0,0 +1,36 @@
1
+ <template>
2
+ <component :is="getWidgetName(widget)" :widget="widget" :params="params">
3
+ <template v-for="slot in Object.keys($scopedSlots)" v-slot:[slot]="scope">
4
+ <slot :name="slot" v-bind="scope" />
5
+ </template>
6
+ </component>
7
+ </template>
8
+ <script>
9
+ import { getWidgetName } from '../util/widget-map'
10
+
11
+ export default {
12
+ name: "AtomWidget",
13
+ components: {},
14
+ props: {
15
+ widget: {
16
+ type: Object,
17
+ default: () => ({})
18
+ },
19
+ params: {
20
+ type: Object,
21
+ default: () => ({})
22
+ }
23
+ },
24
+ data() {
25
+ return {}
26
+ },
27
+ methods: { getWidgetName },
28
+ created() {
29
+
30
+ },
31
+ mounted() {
32
+
33
+ }
34
+ }
35
+ </script>
36
+ <style scoped></style>
@@ -0,0 +1,36 @@
1
+ <template>
2
+ <component :is="getWidgetName(widget)" :widget="widget" :params="params">
3
+ <template v-for="slot in Object.keys($scopedSlots)" v-slot:[slot]="scope">
4
+ <slot :name="slot" v-bind="scope" />
5
+ </template>
6
+ </component>
7
+ </template>
8
+ <script>
9
+ import { getWidgetName } from '../util/widget-map'
10
+
11
+ export default {
12
+ name: "WidgetTest",
13
+ components: {},
14
+ props: {
15
+ widget: {
16
+ type: Object,
17
+ default: () => ({})
18
+ },
19
+ params: {
20
+ type: Object,
21
+ default: () => ({})
22
+ }
23
+ },
24
+ data() {
25
+ return {}
26
+ },
27
+ methods: { getWidgetName },
28
+ created() {
29
+
30
+ },
31
+ mounted() {
32
+
33
+ }
34
+ }
35
+ </script>
36
+ <style scoped></style>
@@ -0,0 +1,7 @@
1
+
2
+ let biConfig = {
3
+ dataServerContext: '/scl-platform-server',
4
+ dataServiceUri: '/itfc/data/list?apiId='
5
+ }
6
+
7
+ export default biConfig
@@ -0,0 +1,46 @@
1
+ <template>
2
+ <lambo-indicator-card-bi
3
+ :has-title="(widget.options && widget.options.title && widget.options.title.length > 0) ? true : false">
4
+ <template slot="content-title" v-if="(widget.options.title && widget.options.title.length > 0)">
5
+ {{ widget.options.title }}
6
+ </template>
7
+ <template v-for="(item, index) in widget.widgets">
8
+ <atom-widget :widget="item" :key="index"></atom-widget>
9
+ </template>
10
+ </lambo-indicator-card-bi>
11
+ </template>
12
+ <script>
13
+ import LamboIndicatorCardBi from './comps/indicator-card/src/indicator-card-bi.vue'
14
+ import { getWidgetName } from '../../util/widget-map'
15
+ import AtomWidget from '../../atom/index.vue'
16
+
17
+ export default {
18
+ name: "BiContainerCard",
19
+ components: { LamboIndicatorCardBi, AtomWidget },
20
+ props: {
21
+ widget: {
22
+ type: Object,
23
+ default: () => ({})
24
+ },
25
+ params: {
26
+ type: Object,
27
+ default: () => ({})
28
+ }
29
+ },
30
+ data() {
31
+ return {
32
+
33
+ }
34
+ },
35
+ methods: {
36
+ getWidgetName
37
+ },
38
+ created() {
39
+
40
+ },
41
+ mounted() {
42
+
43
+ }
44
+ }
45
+ </script>
46
+ <style scoped></style>
@@ -0,0 +1,7 @@
1
+ import LamboIndicatorCardBi from './src/indicator-card-bi.vue'
2
+ import LamboIndicatorCardItemBi from './src/indicator-card-item-bi.vue'
3
+ export default LamboIndicatorCardBi;
4
+ export {
5
+ LamboIndicatorCardBi,
6
+ LamboIndicatorCardItemBi
7
+ }
@@ -0,0 +1,132 @@
1
+ <!--
2
+ 查询条件样式需求不一样,专门弄个组件
3
+ -->
4
+ <template>
5
+ <div :class="classes"
6
+ :style="{ ...(autoAdapt && toggleStatus ? { 'min-height': 'calc(100% - 10px)' } : {}), width: containerWidth }">
7
+ <div v-if="hasTitle || hasExtend" :class="['ct-header', toggleStatus ? '' : 'collapse']">
8
+ <div v-if="hasTitle" :class="[isCenterTitle && 'center-title', 'ct-title']">
9
+ <slot name="content-title"></slot>
10
+ </div>
11
+ <div v-if="hasExtend" class="hd-extend">
12
+ <slot name="header-extend"></slot>
13
+ </div>
14
+ <div v-if="hasExtend" class="ct-extend">
15
+ <slot name="content-extend"></slot>
16
+ </div>
17
+ <div v-if="hasToggle" class="ct-toggle">
18
+ <Button type="text" @click="toggleButton">
19
+ {{ toggleStatus ? '收起' : '展开' }}
20
+ <Icon :type="toggleStatus ? 'ios-arrow-up' : 'ios-arrow-down'" />
21
+ </Button>
22
+ </div>
23
+ </div>
24
+ <transition name="fade">
25
+ <div :class="['ct-body-search', (hasTitle || hasExtend) ? 'offset-padding' : 'no-border-top']"
26
+ v-if="toggleStatus">
27
+ <slot></slot>
28
+ </div>
29
+ </transition>
30
+ </div>
31
+ </template>
32
+ <script>
33
+
34
+ const prefixCls = 'c-info';
35
+ export default {
36
+ name: "LamboIndicatorCardBiSearch",
37
+ props: {
38
+ containerWidth: {
39
+ type: String,
40
+ default: '100%'
41
+ },
42
+ hasTitle: {
43
+ type: Boolean,
44
+ required: false,
45
+ default: true
46
+ },
47
+ isCenterTitle: {
48
+ type: Boolean,
49
+ required: false,
50
+ default: false
51
+ },
52
+ hasExtend: {
53
+ type: Boolean,
54
+ required: false,
55
+ default: false
56
+ },
57
+ hasToggle: {
58
+ type: Boolean,
59
+ required: false,
60
+ default: false
61
+ },
62
+ forceAutoAdapt: {
63
+ type: Boolean,
64
+ required: false,
65
+ default: false
66
+ },
67
+ bordered: {
68
+ type: Boolean,
69
+ default: true
70
+ },
71
+ disHover: {
72
+ type: Boolean,
73
+ default: false
74
+ },
75
+ shadow: {
76
+ type: Boolean,
77
+ default: false
78
+ },
79
+ },
80
+ computed: {
81
+ classes() {
82
+ return [
83
+ `${prefixCls}`,
84
+ {
85
+ [`${prefixCls}-bordered`]: this.bordered && !this.shadow,
86
+ [`${prefixCls}-dis-hover`]: this.disHover || this.shadow,
87
+ [`${prefixCls}-shadow`]: this.shadow
88
+ }
89
+ ];
90
+ },
91
+ },
92
+ data() {
93
+ return {
94
+ autoAdapt: false,
95
+ toggleStatus: true
96
+ }
97
+ },
98
+ methods: {
99
+ // 如果使用一个LamboIndicatorCard,自适应高度
100
+ openAutoAdapt() {
101
+ if (!this.forceAutoAdapt) {
102
+ // LamboIndicatorCard 组件数量
103
+ let count = 0;
104
+ const children = this.$parent.$children
105
+ for (let i = 0; i < children.length; i++) {
106
+ const componentName = children[i].$options['_componentTag']
107
+ if (componentName == 'LamboIndicatorCard') {
108
+ count += 1
109
+ }
110
+ if (count > 1) {
111
+ break
112
+ }
113
+ }
114
+ this.autoAdapt = count == 1
115
+ } else {
116
+ this.autoAdapt = true
117
+ }
118
+ },
119
+ toggleButton() {
120
+ this.toggleStatus = !this.toggleStatus;
121
+ }
122
+ },
123
+ mounted() {
124
+ this.$nextTick(() => {
125
+ this.openAutoAdapt()
126
+ })
127
+ }
128
+ }
129
+ </script>
130
+ <style lang="less" scoped>
131
+ @import "styles/css/card-search.less";
132
+ </style>
@@ -0,0 +1,129 @@
1
+ <template>
2
+ <div :class="classes"
3
+ :style="{ ...(autoAdapt && toggleStatus ? { 'min-height': 'calc(100% - 10px)' } : {}), width: containerWidth }">
4
+ <div v-if="hasTitle || hasExtend" :class="['ct-header', toggleStatus ? '' : 'collapse']">
5
+ <div v-if="hasTitle" :class="[isCenterTitle && 'center-title', 'ct-title']">
6
+ <slot name="content-title"></slot>
7
+ </div>
8
+ <div v-if="hasExtend" class="hd-extend">
9
+ <slot name="header-extend"></slot>
10
+ </div>
11
+ <div v-if="hasExtend" class="ct-extend">
12
+ <slot name="content-extend"></slot>
13
+ </div>
14
+ <div v-if="hasToggle" class="ct-toggle">
15
+ <Button type="text" @click="toggleButton">
16
+ {{ toggleStatus ? '收起' : '展开' }}
17
+ <Icon :type="toggleStatus ? 'ios-arrow-up' : 'ios-arrow-down'" />
18
+ </Button>
19
+ </div>
20
+ </div>
21
+ <transition name="fade">
22
+ <div :class="['ct-body', (hasTitle || hasExtend) ? 'offset-padding' : 'no-border-top']" v-if="toggleStatus">
23
+ <slot></slot>
24
+ </div>
25
+ </transition>
26
+ </div>
27
+ </template>
28
+ <script>
29
+ /* eslint-disable */
30
+
31
+ const prefixCls = 'c-info';
32
+ export default {
33
+ name: "LamboIndicatorCardBi",
34
+ props: {
35
+ containerWidth: {
36
+ type: String,
37
+ default: '100%'
38
+ },
39
+ hasTitle: {
40
+ type: Boolean,
41
+ required: false,
42
+ default: true
43
+ },
44
+ isCenterTitle: {
45
+ type: Boolean,
46
+ required: false,
47
+ default: false
48
+ },
49
+ hasExtend: {
50
+ type: Boolean,
51
+ required: false,
52
+ default: false
53
+ },
54
+ hasToggle: {
55
+ type: Boolean,
56
+ required: false,
57
+ default: false
58
+ },
59
+ forceAutoAdapt: {
60
+ type: Boolean,
61
+ required: false,
62
+ default: false
63
+ },
64
+ bordered: {
65
+ type: Boolean,
66
+ default: true
67
+ },
68
+ disHover: {
69
+ type: Boolean,
70
+ default: false
71
+ },
72
+ shadow: {
73
+ type: Boolean,
74
+ default: false
75
+ },
76
+ },
77
+ computed: {
78
+ classes() {
79
+ return [
80
+ `${prefixCls}`,
81
+ {
82
+ [`${prefixCls}-bordered`]: this.bordered && !this.shadow,
83
+ [`${prefixCls}-dis-hover`]: this.disHover || this.shadow,
84
+ [`${prefixCls}-shadow`]: this.shadow
85
+ }
86
+ ];
87
+ },
88
+ },
89
+ data() {
90
+ return {
91
+ autoAdapt: false,
92
+ toggleStatus: true
93
+ }
94
+ },
95
+ methods: {
96
+ // 如果使用一个LamboIndicatorCard,自适应高度
97
+ openAutoAdapt() {
98
+ if (!this.forceAutoAdapt) {
99
+ // LamboIndicatorCard 组件数量
100
+ let count = 0;
101
+ const children = this.$parent.$children
102
+ for (let i = 0; i < children.length; i++) {
103
+ const componentName = children[i].$options['_componentTag']
104
+ if (componentName == 'LamboIndicatorCard') {
105
+ count += 1
106
+ }
107
+ if (count > 1) {
108
+ break
109
+ }
110
+ }
111
+ this.autoAdapt = count == 1
112
+ } else {
113
+ this.autoAdapt = true
114
+ }
115
+ },
116
+ toggleButton() {
117
+ this.toggleStatus = !this.toggleStatus;
118
+ }
119
+ },
120
+ mounted() {
121
+ this.$nextTick(() => {
122
+ this.openAutoAdapt()
123
+ })
124
+ }
125
+ }
126
+ </script>
127
+ <style lang="less" scoped>
128
+ @import "styles/css/card.less";
129
+ </style>
@@ -0,0 +1,97 @@
1
+ <template>
2
+ <div class="indicator-card-item">
3
+ <div :class="['indicator-card-item-header',separateHeader && 'single-card-item-header']">
4
+ <div :class="['indicator-card-item-title',showTitleIcon && 'before-title-icon']">
5
+ <slot></slot>
6
+ </div>
7
+ <div class="indicator-card-item-extend">
8
+ <slot name="content-extend"></slot>
9
+ <Button type="text" v-if="hasToggle && toggleStatus" @click="toggleButton">
10
+ 收起
11
+ <Icon type="ios-arrow-up" />
12
+ </Button>
13
+ <Button type="text" v-if="hasToggle && !toggleStatus" @click="toggleButton">
14
+ 展开
15
+ <Icon type="ios-arrow-down" />
16
+ </Button>
17
+ </div>
18
+ </div>
19
+ <transition name="fade">
20
+ <div class="indicator-card-item-body" v-if="toggleStatus">
21
+ <slot name="content-body"></slot>
22
+ </div>
23
+ </transition>
24
+ </div>
25
+ </template>
26
+
27
+ <script>
28
+ export default {
29
+ name: "LamboIndicatorCardItemBi",
30
+ props: {
31
+ hasToggle: {
32
+ type: Boolean,
33
+ required: false,
34
+ default: false
35
+ },
36
+ showTitleIcon:{
37
+ type:Boolean,
38
+ default:false
39
+ }
40
+ },
41
+ data(){
42
+ return {
43
+ toggleStatus: true
44
+ }
45
+ },
46
+ methods: {
47
+ toggleButton(){
48
+ this.toggleStatus = !this.toggleStatus;
49
+ }
50
+ },
51
+ computed:{
52
+ separateHeader(){
53
+ return this.toggleStatus && this.showTitleIcon
54
+ }
55
+ }
56
+ }
57
+ </script>
58
+
59
+ <style scoped lang="less">
60
+ @import "@lambo-design/core/src/styles/default.less";
61
+ .indicator-card-item {
62
+ .indicator-card-item-header {
63
+ background: var(--background-color-base,@_background-color-base);
64
+ line-height: 32px;
65
+ color: var(--text-color-secondary,@_text-color-secondary);
66
+ padding: 5px 15px;
67
+ margin-bottom: 24px;
68
+ overflow: hidden;
69
+ .indicator-card-item-title {
70
+ font-weight: bold;
71
+ float: left;
72
+ font-size: 16px;
73
+ }
74
+ .indicator-card-item-extend {
75
+ float: right;
76
+ font-size: 14px;
77
+ }
78
+ .before-title-icon{
79
+ &:before{
80
+ content: '';
81
+ height: 16px;
82
+ width: 6px;
83
+ display: inline-block;
84
+ background-color: var(--primary-color);
85
+ vertical-align: text-top;
86
+ margin-right: 5px;
87
+ }
88
+ }
89
+ }
90
+ .single-card-item-header{
91
+ margin: 10px 0;
92
+ }
93
+ .indicator-card-item-body {
94
+
95
+ }
96
+ }
97
+ </style>
@@ -0,0 +1,108 @@
1
+ @import "@lambo-design/core/src/styles/default.less";
2
+
3
+ .c-info {
4
+ background: var(--component-background, @_component-background);
5
+ border-radius: var(--border-radius-base, @_border-radius-base);
6
+ padding: 0;
7
+ margin-bottom: 8px;
8
+
9
+ &-bordered {
10
+ border: 1px solid var(--border-color-base, @_border-color-base);
11
+ border-color: var(--border-color-split, @_border-color-split);
12
+ }
13
+
14
+ &-shadow {
15
+ box-shadow: var(--shadow-base, @_shadow-base);
16
+ }
17
+
18
+ &:hover {
19
+ box-shadow: var(--shadow-base, @_shadow-base);
20
+ border-color: var(--border-color-split, @_border-color-split);
21
+ }
22
+
23
+ &&-dis-hover:hover {
24
+ box-shadow: none;
25
+ border-color: transparent;
26
+ }
27
+
28
+ &&-dis-hover&-bordered:hover {
29
+ border-color: var(--border-color-split, @_border-color-split);
30
+ }
31
+
32
+ &&-shadow:hover {
33
+ box-shadow: var(--shadow-base, @_shadow-base);
34
+ }
35
+
36
+ &:last-child {
37
+ margin-bottom: 0;
38
+ }
39
+
40
+ .ct-header {
41
+ background: var(--component-background, @_component-background);
42
+ overflow: hidden;
43
+ padding: 0px 8px;
44
+ border-radius: var(--border-radius-base, @_border-radius-base) var(--border-radius-base, @_border-radius-base) 0 0;
45
+ display: flex;
46
+
47
+ .ct-title {
48
+ color: var(--heading-color, @_heading-color);
49
+ font-weight: bold;
50
+ font-size: 15px;
51
+ line-height: 30px;
52
+ flex: 0 0 auto;
53
+ }
54
+
55
+ .center-title {
56
+ position: relative;
57
+ left: 50%;
58
+ transform: translateX(-50%);
59
+ }
60
+
61
+ .hd-extend {
62
+ font-size: 13px;
63
+ line-height: 30px;
64
+ flex: 1 1 auto;
65
+ }
66
+
67
+ .ct-extend {
68
+ font-size: 13px;
69
+ line-height: 30px;
70
+ flex: 0 0 auto;
71
+ }
72
+
73
+ .ct-toggle {
74
+ font-size: 13px;
75
+ line-height: 30px;
76
+ flex: 0 0 auto;
77
+ }
78
+
79
+ &.collapse {
80
+ border-radius: var(--border-radius-base, @_border-radius-base);
81
+ }
82
+ }
83
+
84
+ .ct-body-search {
85
+ background: var(--component-background, @_component-background);
86
+ border-radius: 0 0 var(--border-radius-base, @_border-radius-base) var(--border-radius-base, @_border-radius-base);
87
+ padding: 8px 8px;
88
+
89
+ &.no-border-top {
90
+ border-top: 0;
91
+ border-radius: var(--border-radius-base, @_border-radius-base);
92
+ }
93
+
94
+ .ivu-form-label-right {
95
+ .ivu-form-item {
96
+ .ivu-form-item-content {
97
+ button {
98
+ width: 88px;
99
+ }
100
+ }
101
+ }
102
+ }
103
+ }
104
+
105
+ .offset-padding {
106
+ padding: 0px 8px 8px 8px;
107
+ }
108
+ }