meixioacomponent 0.4.2 → 0.4.6
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.
- package/lib/meixioacomponent.common.js +16241 -19856
- package/lib/meixioacomponent.umd.js +16353 -19968
- package/lib/meixioacomponent.umd.min.js +33 -34
- package/lib/style/element/index.css +1182 -1153
- package/lib/style/theme/light.less +5 -4
- package/package.json +2 -2
- package/packages/components/base/baseCropper/index.vue +2 -1
- package/packages/components/base/baseDialog/index.vue +13 -7
- package/packages/components/base/baseDrawer/index.vue +5 -2
- package/packages/components/base/baseIcon/index.vue +1 -2
- package/packages/components/base/baseList/index.js +6 -0
- package/packages/components/base/baseList/index.vue +48 -0
- package/packages/components/base/baseList/scrollbar/index.js +8 -0
- package/packages/components/base/baseList/scrollbar/src/bar.js +92 -0
- package/packages/components/base/baseList/scrollbar/src/main.js +150 -0
- package/packages/components/base/baseList/scrollbar/src/util.js +34 -0
- package/packages/components/base/baseNumberInput/index.js +6 -0
- package/packages/components/base/baseNumberInput/index.vue +191 -0
- package/packages/components/base/basePlainTable/basePlainTable.vue +78 -12
- package/packages/components/base/basePopoverButton/index.vue +1 -1
- package/packages/components/base/baseSection/baseSection.vue +24 -11
- package/packages/components/base/baseSingleImgUpload/index.js +6 -0
- package/packages/components/base/baseSingleImgUpload/index.vue +147 -0
- package/packages/components/base/baseStoreSelect/index.js +6 -0
- package/packages/components/base/baseStoreSelect/index.vue +159 -0
- package/packages/components/base/baseToggle/toggle.vue +22 -3
- package/packages/components/base/baseTreeSelect/index.vue +7 -1
- package/packages/components/base/baseUpload/baseUpload.vue +23 -0
- package/packages/components/base/baseUpload/baseUploadItem.vue +2 -3
- package/packages/components/base/baseUpload/mixins.js +12 -2
- package/packages/components/base/baseUploadTemplate/index.vue +19 -3
- package/packages/components/base/upload/upload.vue +36 -13
- package/packages/components/base/upload/uploadItem.vue +40 -17
- package/packages/components/dynamicmount/index.js +30 -29
- package/packages/components/index.js +19 -2
- package/packages/components/proForm/dialogForm/baseDialogForm.vue +29 -19
- package/packages/components/proForm/proForm/proFormItem/index.js +6 -0
- package/packages/components/proForm/proForm/{pro_form_item.vue → proFormItem/pro_form_item.vue} +161 -99
- package/packages/components/proForm/proForm/pro_form.vue +70 -16
- package/packages/components/proForm/proFormWrap/pro_form_wrap.vue +70 -28
- package/packages/components/proPageTable/oa_pro_colum_config.vue +24 -28
- package/packages/components/proPageTable/oa_pro_footer.vue +12 -10
- package/packages/components/proPageTable/oa_pro_screen.vue +1 -0
- package/packages/components/proPageTable/oa_pro_screen_item.vue +6 -6
- package/packages/components/proPageTable/oa_pro_table.vue +44 -20
- package/packages/components/style/element/index.css +1182 -1153
- package/packages/components/style/theme/light.less +5 -4
- package/packages/config/selectStore/SelectStore.js +26 -17
- package/packages/config/uploadRequest.js +1 -0
- package/packages/utils/upload.js +22 -21
- package/packages/utils/utils.js +110 -111
- package/src/App.vue +9 -14
- package/src/component/test.vue +333 -233
- package/src/component/testSelectStore.js +25 -13
- package/src/config/CompanyInfoConfig.js +4 -2
- package/packages/components/base/brieflyItem.vue +0 -198
|
@@ -12,7 +12,8 @@
|
|
|
12
12
|
//滚动条样式
|
|
13
13
|
--scrollbar-color: #1f23392d;
|
|
14
14
|
// 灰色类型
|
|
15
|
-
--color-gray-d: #dfe1e6;
|
|
15
|
+
// --color-gray-d: #dfe1e6;
|
|
16
|
+
--color-gray-d: #ebecf0;
|
|
16
17
|
--color-gray-m: #f4f5f7;
|
|
17
18
|
--color-gray-s: #fafbfc;
|
|
18
19
|
|
|
@@ -20,10 +21,10 @@
|
|
|
20
21
|
--font-color-d: #172b4d;
|
|
21
22
|
--font-color-m: #344563;
|
|
22
23
|
--font-color-s: #5e6c84;
|
|
23
|
-
--font-color-ds: #8f959e;
|
|
24
|
+
--font-color-ds: #8f959e;
|
|
24
25
|
// 字体颜色 按钮等primary 里面文字的白色非必要不要改
|
|
25
26
|
--text-white: white;
|
|
26
|
-
--form-label-color: #
|
|
27
|
+
--form-label-color: #42526E;
|
|
27
28
|
// 下拉 使用的组件包括:下拉菜单 / 气泡确认框 / 选择器 /
|
|
28
29
|
--shadow-down: 0px 4px 10px rgba(0, 0, 0, 0.05);
|
|
29
30
|
// fixed 使用的组件包括:全局提示 / 消息通知
|
|
@@ -35,4 +36,4 @@
|
|
|
35
36
|
--color-table-header: #ebecf0;
|
|
36
37
|
// tooltip 背景颜色
|
|
37
38
|
--color-tooltip: #242424;
|
|
38
|
-
}
|
|
39
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "meixioacomponent",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.6",
|
|
4
4
|
"private": false,
|
|
5
5
|
"author": "YuRi",
|
|
6
6
|
"main": "lib/meixioacomponent.umd.min.js",
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
"build:theme": "cp-cli packages/components/style/ lib/style"
|
|
11
11
|
},
|
|
12
12
|
"dependencies": {
|
|
13
|
+
"awe-dnd": "^0.3.4",
|
|
13
14
|
"axios": "^0.27.2",
|
|
14
15
|
"core-js": "^3.6.5",
|
|
15
16
|
"cp-cli": "^1.0.2",
|
|
@@ -20,7 +21,6 @@
|
|
|
20
21
|
"vue": "^2.7.0",
|
|
21
22
|
"vue-cropper": "^0.5.8",
|
|
22
23
|
"vue-router": "^3.2.0",
|
|
23
|
-
"vuedraggable": "^2.24.3",
|
|
24
24
|
"vuex": "^3.4.0"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
:destroy="closeCropper"
|
|
8
8
|
:contentHeight="`400px`"
|
|
9
9
|
>
|
|
10
|
-
<div class="base-dialog-wrap" slot="dialog-content">
|
|
10
|
+
<div class="base-dialog-wrap" slot="dialog-content" style="height:400px">
|
|
11
11
|
<vueCropper
|
|
12
12
|
:img="imgUrl"
|
|
13
13
|
ref="cropper"
|
|
@@ -117,6 +117,7 @@ export default {
|
|
|
117
117
|
</script>
|
|
118
118
|
|
|
119
119
|
<style lang="less" scoped>
|
|
120
|
+
|
|
120
121
|
.base-dialog-wrap {
|
|
121
122
|
width: 100%;
|
|
122
123
|
height: 100%;
|
|
@@ -6,7 +6,6 @@
|
|
|
6
6
|
:modal="modal"
|
|
7
7
|
:width="width"
|
|
8
8
|
:show-close="false"
|
|
9
|
-
:before-close="beforeClose"
|
|
10
9
|
:close-on-click-modal="false"
|
|
11
10
|
:close-on-press-escape="false"
|
|
12
11
|
:append-to-body="appendToBody"
|
|
@@ -43,13 +42,15 @@
|
|
|
43
42
|
:event="true"
|
|
44
43
|
v-if="hasCloseIcon"
|
|
45
44
|
:name="`meixicomponenticon-close`"
|
|
46
|
-
@iconClick="
|
|
45
|
+
@iconClick="onHandleClose"
|
|
47
46
|
></base-icon>
|
|
48
47
|
</div>
|
|
49
48
|
</div>
|
|
50
|
-
|
|
49
|
+
|
|
50
|
+
<base-list class="dialog-content-wrap" :style="dialogContentStyle">
|
|
51
51
|
<slot name="dialog-content"></slot>
|
|
52
|
-
</
|
|
52
|
+
</base-list>
|
|
53
|
+
|
|
53
54
|
<slot
|
|
54
55
|
class="dialog-footer-wrap"
|
|
55
56
|
slot="footer"
|
|
@@ -205,8 +206,14 @@ export default {
|
|
|
205
206
|
this.centerDialogVisible = false
|
|
206
207
|
}
|
|
207
208
|
},
|
|
208
|
-
|
|
209
|
-
this
|
|
209
|
+
onHandleClose() {
|
|
210
|
+
const { beforeClose } = this.$props
|
|
211
|
+
if (beforeClose) {
|
|
212
|
+
// 先执行传入的方法 this.closeDialog 再手动执行关闭的方法
|
|
213
|
+
this.beforeClose(this.closeDialog)
|
|
214
|
+
} else {
|
|
215
|
+
this.closeDialog()
|
|
216
|
+
}
|
|
210
217
|
},
|
|
211
218
|
|
|
212
219
|
handleCache() {
|
|
@@ -225,7 +232,6 @@ export default {
|
|
|
225
232
|
.dialog-content-wrap {
|
|
226
233
|
width: 100%;
|
|
227
234
|
height: auto;
|
|
228
|
-
max-height: 70vh;
|
|
229
235
|
overflow-y: auto;
|
|
230
236
|
}
|
|
231
237
|
}
|
|
@@ -38,14 +38,16 @@
|
|
|
38
38
|
@iconClick="iconClick"
|
|
39
39
|
></base-icon>
|
|
40
40
|
</div>
|
|
41
|
-
|
|
41
|
+
|
|
42
|
+
<base-list class="drawer-content" :style="contentStyle">
|
|
42
43
|
<slot name="drawer-content"></slot>
|
|
43
|
-
</
|
|
44
|
+
</base-list>
|
|
44
45
|
</div>
|
|
45
46
|
</el-drawer>
|
|
46
47
|
</template>
|
|
47
48
|
|
|
48
49
|
<script>
|
|
50
|
+
import baseList from '../baseList/index.vue'
|
|
49
51
|
import UseResize from '../../../config/use/UseResize'
|
|
50
52
|
export default {
|
|
51
53
|
name: 'baseDrawer',
|
|
@@ -61,6 +63,7 @@ export default {
|
|
|
61
63
|
},
|
|
62
64
|
|
|
63
65
|
mounted() {},
|
|
66
|
+
components: { baseList },
|
|
64
67
|
props: {
|
|
65
68
|
resize: {
|
|
66
69
|
type: Boolean,
|
|
@@ -75,7 +75,7 @@ export default {
|
|
|
75
75
|
color = `var(--icon-color-s)`
|
|
76
76
|
break
|
|
77
77
|
default:
|
|
78
|
-
color =
|
|
78
|
+
color = propsColor
|
|
79
79
|
break
|
|
80
80
|
}
|
|
81
81
|
return color
|
|
@@ -112,7 +112,6 @@ export default {
|
|
|
112
112
|
methods: {
|
|
113
113
|
iconClick() {
|
|
114
114
|
if (this.$props.event) {
|
|
115
|
-
console.log('das')
|
|
116
115
|
this.$emit('iconClick')
|
|
117
116
|
}
|
|
118
117
|
},
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<elScrollBar
|
|
3
|
+
class="list-wrap"
|
|
4
|
+
:onScroll="onScroll"
|
|
5
|
+
:noresize="noresize"
|
|
6
|
+
:wrapStyle="wrapStyle"
|
|
7
|
+
:viewStyle="viewStyle"
|
|
8
|
+
>
|
|
9
|
+
<slot>
|
|
10
|
+
|
|
11
|
+
</slot>
|
|
12
|
+
</elScrollBar>
|
|
13
|
+
</template>
|
|
14
|
+
|
|
15
|
+
<script>
|
|
16
|
+
import elScrollBar from './scrollbar/src/main'
|
|
17
|
+
export default {
|
|
18
|
+
name: 'baseList',
|
|
19
|
+
data() {
|
|
20
|
+
return {}
|
|
21
|
+
},
|
|
22
|
+
props: {
|
|
23
|
+
onScroll: {
|
|
24
|
+
type: Function,
|
|
25
|
+
},
|
|
26
|
+
noresize: {
|
|
27
|
+
type: Boolean,
|
|
28
|
+
default: true,
|
|
29
|
+
},
|
|
30
|
+
wrapStyle: {
|
|
31
|
+
type: Object,
|
|
32
|
+
},
|
|
33
|
+
viewStyle: {
|
|
34
|
+
type: Object,
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
components: {
|
|
38
|
+
elScrollBar,
|
|
39
|
+
},
|
|
40
|
+
}
|
|
41
|
+
</script>
|
|
42
|
+
|
|
43
|
+
<style lang="less" scoped>
|
|
44
|
+
.list-wrap {
|
|
45
|
+
width: 100%;
|
|
46
|
+
height: 100%;
|
|
47
|
+
}
|
|
48
|
+
</style>
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { on, off } from 'element-ui/src/utils/dom';
|
|
2
|
+
import { renderThumbStyle, BAR_MAP } from './util';
|
|
3
|
+
|
|
4
|
+
/* istanbul ignore next */
|
|
5
|
+
export default {
|
|
6
|
+
name: 'Bar',
|
|
7
|
+
|
|
8
|
+
props: {
|
|
9
|
+
vertical: Boolean,
|
|
10
|
+
size: String,
|
|
11
|
+
move: Number
|
|
12
|
+
},
|
|
13
|
+
|
|
14
|
+
computed: {
|
|
15
|
+
bar() {
|
|
16
|
+
return BAR_MAP[this.vertical ? 'vertical' : 'horizontal'];
|
|
17
|
+
},
|
|
18
|
+
|
|
19
|
+
wrap() {
|
|
20
|
+
return this.$parent.wrap;
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
|
|
24
|
+
render(h) {
|
|
25
|
+
const { size, move, bar } = this;
|
|
26
|
+
|
|
27
|
+
return (
|
|
28
|
+
<div
|
|
29
|
+
class={ ['el-scrollbar__bar', 'is-' + bar.key] }
|
|
30
|
+
onMousedown={ this.clickTrackHandler } >
|
|
31
|
+
<div
|
|
32
|
+
ref="thumb"
|
|
33
|
+
class="el-scrollbar__thumb"
|
|
34
|
+
onMousedown={ this.clickThumbHandler }
|
|
35
|
+
style={ renderThumbStyle({ size, move, bar }) }>
|
|
36
|
+
</div>
|
|
37
|
+
</div>
|
|
38
|
+
);
|
|
39
|
+
},
|
|
40
|
+
|
|
41
|
+
methods: {
|
|
42
|
+
clickThumbHandler(e) {
|
|
43
|
+
// prevent click event of right button
|
|
44
|
+
if (e.ctrlKey || e.button === 2) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
this.startDrag(e);
|
|
48
|
+
this[this.bar.axis] = (e.currentTarget[this.bar.offset] - (e[this.bar.client] - e.currentTarget.getBoundingClientRect()[this.bar.direction]));
|
|
49
|
+
},
|
|
50
|
+
|
|
51
|
+
clickTrackHandler(e) {
|
|
52
|
+
const offset = Math.abs(e.target.getBoundingClientRect()[this.bar.direction] - e[this.bar.client]);
|
|
53
|
+
const thumbHalf = (this.$refs.thumb[this.bar.offset] / 2);
|
|
54
|
+
const thumbPositionPercentage = ((offset - thumbHalf) * 100 / this.$el[this.bar.offset]);
|
|
55
|
+
|
|
56
|
+
this.wrap[this.bar.scroll] = (thumbPositionPercentage * this.wrap[this.bar.scrollSize] / 100);
|
|
57
|
+
},
|
|
58
|
+
|
|
59
|
+
startDrag(e) {
|
|
60
|
+
e.stopImmediatePropagation();
|
|
61
|
+
this.cursorDown = true;
|
|
62
|
+
|
|
63
|
+
on(document, 'mousemove', this.mouseMoveDocumentHandler);
|
|
64
|
+
on(document, 'mouseup', this.mouseUpDocumentHandler);
|
|
65
|
+
document.onselectstart = () => false;
|
|
66
|
+
},
|
|
67
|
+
|
|
68
|
+
mouseMoveDocumentHandler(e) {
|
|
69
|
+
if (this.cursorDown === false) return;
|
|
70
|
+
const prevPage = this[this.bar.axis];
|
|
71
|
+
|
|
72
|
+
if (!prevPage) return;
|
|
73
|
+
|
|
74
|
+
const offset = ((this.$el.getBoundingClientRect()[this.bar.direction] - e[this.bar.client]) * -1);
|
|
75
|
+
const thumbClickPosition = (this.$refs.thumb[this.bar.offset] - prevPage);
|
|
76
|
+
const thumbPositionPercentage = ((offset - thumbClickPosition) * 100 / this.$el[this.bar.offset]);
|
|
77
|
+
|
|
78
|
+
this.wrap[this.bar.scroll] = (thumbPositionPercentage * this.wrap[this.bar.scrollSize] / 100);
|
|
79
|
+
},
|
|
80
|
+
|
|
81
|
+
mouseUpDocumentHandler(e) {
|
|
82
|
+
this.cursorDown = false;
|
|
83
|
+
this[this.bar.axis] = 0;
|
|
84
|
+
off(document, 'mousemove', this.mouseMoveDocumentHandler);
|
|
85
|
+
document.onselectstart = null;
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
|
|
89
|
+
destroyed() {
|
|
90
|
+
off(document, 'mouseup', this.mouseUpDocumentHandler);
|
|
91
|
+
}
|
|
92
|
+
};
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
// reference https://github.com/noeldelgado/gemini-scrollbar/blob/master/index.js
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
addResizeListener,
|
|
5
|
+
removeResizeListener,
|
|
6
|
+
} from 'element-ui/src/utils/resize-event'
|
|
7
|
+
import scrollbarWidth from 'element-ui/src/utils/scrollbar-width'
|
|
8
|
+
import { toObject } from 'element-ui/src/utils/util'
|
|
9
|
+
import Bar from './bar'
|
|
10
|
+
|
|
11
|
+
/* istanbul ignore next */
|
|
12
|
+
export default {
|
|
13
|
+
name: 'ElScrollbar',
|
|
14
|
+
|
|
15
|
+
components: { Bar },
|
|
16
|
+
|
|
17
|
+
props: {
|
|
18
|
+
native: Boolean,
|
|
19
|
+
wrapStyle: {},
|
|
20
|
+
wrapClass: {},
|
|
21
|
+
viewClass: {},
|
|
22
|
+
viewStyle: {},
|
|
23
|
+
noresize: Boolean, // 如果 container 尺寸不会发生变化,最好设置它可以优化性能
|
|
24
|
+
tag: {
|
|
25
|
+
type: String,
|
|
26
|
+
default: 'div',
|
|
27
|
+
},
|
|
28
|
+
|
|
29
|
+
onScroll: {
|
|
30
|
+
type: Function,
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
|
|
34
|
+
data() {
|
|
35
|
+
return {
|
|
36
|
+
moveX: 0,
|
|
37
|
+
moveY: 0,
|
|
38
|
+
sizeWidth: '0',
|
|
39
|
+
sizeHeight: '0',
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
|
|
43
|
+
computed: {
|
|
44
|
+
wrap() {
|
|
45
|
+
return this.$refs.wrap
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
|
|
49
|
+
render(h) {
|
|
50
|
+
let gutter = scrollbarWidth()
|
|
51
|
+
let style = this.wrapStyle
|
|
52
|
+
|
|
53
|
+
if (gutter) {
|
|
54
|
+
const gutterWith = `-${gutter}px`
|
|
55
|
+
const gutterStyle = `margin-bottom: ${gutterWith}; margin-right: ${gutterWith};`
|
|
56
|
+
|
|
57
|
+
if (Array.isArray(this.wrapStyle)) {
|
|
58
|
+
style = toObject(this.wrapStyle)
|
|
59
|
+
style.marginRight = style.marginBottom = gutterWith
|
|
60
|
+
} else if (typeof this.wrapStyle === 'string') {
|
|
61
|
+
style += gutterStyle
|
|
62
|
+
} else {
|
|
63
|
+
style = gutterStyle
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
const view = h(
|
|
67
|
+
this.tag,
|
|
68
|
+
{
|
|
69
|
+
class: ['el-scrollbar__view', this.viewClass],
|
|
70
|
+
style: this.viewStyle,
|
|
71
|
+
ref: 'resize',
|
|
72
|
+
},
|
|
73
|
+
this.$slots.default,
|
|
74
|
+
)
|
|
75
|
+
const wrap = (
|
|
76
|
+
<div
|
|
77
|
+
ref="wrap"
|
|
78
|
+
style={style}
|
|
79
|
+
onScroll={this.handleScroll}
|
|
80
|
+
class={[
|
|
81
|
+
this.wrapClass,
|
|
82
|
+
'el-scrollbar__wrap',
|
|
83
|
+
gutter ? '' : 'el-scrollbar__wrap--hidden-default',
|
|
84
|
+
]}
|
|
85
|
+
>
|
|
86
|
+
{[view]}
|
|
87
|
+
</div>
|
|
88
|
+
)
|
|
89
|
+
let nodes
|
|
90
|
+
|
|
91
|
+
if (!this.native) {
|
|
92
|
+
nodes = [
|
|
93
|
+
wrap,
|
|
94
|
+
<Bar move={this.moveX} size={this.sizeWidth}></Bar>,
|
|
95
|
+
<Bar vertical move={this.moveY} size={this.sizeHeight}></Bar>,
|
|
96
|
+
]
|
|
97
|
+
} else {
|
|
98
|
+
nodes = [
|
|
99
|
+
<div
|
|
100
|
+
ref="wrap"
|
|
101
|
+
class={[this.wrapClass, 'el-scrollbar__wrap']}
|
|
102
|
+
style={style}
|
|
103
|
+
>
|
|
104
|
+
{[view]}
|
|
105
|
+
</div>,
|
|
106
|
+
]
|
|
107
|
+
}
|
|
108
|
+
return h('div', { class: 'el-scrollbar' }, nodes)
|
|
109
|
+
},
|
|
110
|
+
|
|
111
|
+
methods: {
|
|
112
|
+
handleScroll(e) {
|
|
113
|
+
const wrap = this.wrap
|
|
114
|
+
const target = e.target
|
|
115
|
+
const { scrollHeight, scrollTop, offsetHeight } = target
|
|
116
|
+
this.moveY = (wrap.scrollTop * 100) / wrap.clientHeight
|
|
117
|
+
this.moveX = (wrap.scrollLeft * 100) / wrap.clientWidth
|
|
118
|
+
const { onScroll } = this.$props
|
|
119
|
+
if (onScroll) {
|
|
120
|
+
const subsHeight = scrollHeight - (scrollTop + offsetHeight)
|
|
121
|
+
onScroll(subsHeight)
|
|
122
|
+
}
|
|
123
|
+
},
|
|
124
|
+
|
|
125
|
+
update() {
|
|
126
|
+
this.$nextTick(() => {
|
|
127
|
+
let heightPercentage, widthPercentage
|
|
128
|
+
const wrap = this.wrap
|
|
129
|
+
if (!wrap) return
|
|
130
|
+
|
|
131
|
+
heightPercentage = (wrap.clientHeight * 100) / wrap.scrollHeight
|
|
132
|
+
widthPercentage = (wrap.clientWidth * 100) / wrap.scrollWidth
|
|
133
|
+
|
|
134
|
+
this.sizeHeight = heightPercentage < 100 ? heightPercentage + '%' : ''
|
|
135
|
+
this.sizeWidth = widthPercentage < 100 ? widthPercentage + '%' : ''
|
|
136
|
+
})
|
|
137
|
+
},
|
|
138
|
+
},
|
|
139
|
+
|
|
140
|
+
mounted() {
|
|
141
|
+
if (this.native) return
|
|
142
|
+
this.$nextTick(this.update)
|
|
143
|
+
!this.noresize && addResizeListener(this.$refs.resize, this.update)
|
|
144
|
+
},
|
|
145
|
+
|
|
146
|
+
beforeDestroy() {
|
|
147
|
+
if (this.native) return
|
|
148
|
+
!this.noresize && removeResizeListener(this.$refs.resize, this.update)
|
|
149
|
+
},
|
|
150
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export const BAR_MAP = {
|
|
2
|
+
vertical: {
|
|
3
|
+
offset: 'offsetHeight',
|
|
4
|
+
scroll: 'scrollTop',
|
|
5
|
+
scrollSize: 'scrollHeight',
|
|
6
|
+
size: 'height',
|
|
7
|
+
key: 'vertical',
|
|
8
|
+
axis: 'Y',
|
|
9
|
+
client: 'clientY',
|
|
10
|
+
direction: 'top'
|
|
11
|
+
},
|
|
12
|
+
horizontal: {
|
|
13
|
+
offset: 'offsetWidth',
|
|
14
|
+
scroll: 'scrollLeft',
|
|
15
|
+
scrollSize: 'scrollWidth',
|
|
16
|
+
size: 'width',
|
|
17
|
+
key: 'horizontal',
|
|
18
|
+
axis: 'X',
|
|
19
|
+
client: 'clientX',
|
|
20
|
+
direction: 'left'
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export function renderThumbStyle({ move, size, bar }) {
|
|
25
|
+
const style = {};
|
|
26
|
+
const translate = `translate${bar.axis}(${ move }%)`;
|
|
27
|
+
|
|
28
|
+
style[bar.size] = size;
|
|
29
|
+
style.transform = translate;
|
|
30
|
+
style.msTransform = translate;
|
|
31
|
+
style.webkitTransform = translate;
|
|
32
|
+
|
|
33
|
+
return style;
|
|
34
|
+
};
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="pro-number-wrap" :class="{ select: select, disabled: disabled }">
|
|
3
|
+
<el-input-number
|
|
4
|
+
:min="min"
|
|
5
|
+
:max="max"
|
|
6
|
+
:class="{
|
|
7
|
+
unit: unit,
|
|
8
|
+
controls: controls,
|
|
9
|
+
}"
|
|
10
|
+
:size="size"
|
|
11
|
+
ref="target"
|
|
12
|
+
class="value-input"
|
|
13
|
+
:controls="controls"
|
|
14
|
+
:precision="precision"
|
|
15
|
+
v-model.number="module"
|
|
16
|
+
:disabled="disabled"
|
|
17
|
+
:maxlength="maxlength"
|
|
18
|
+
@change="onChange"
|
|
19
|
+
:placeholder="placeholder"
|
|
20
|
+
style="width: 100%; height: 100%;"
|
|
21
|
+
></el-input-number>
|
|
22
|
+
<div class="number-unit" v-if="(unit || select) && !controls">
|
|
23
|
+
<span v-if="!select">{{ unit }}</span>
|
|
24
|
+
|
|
25
|
+
<BaseStoreSelect
|
|
26
|
+
v-else
|
|
27
|
+
:size="size"
|
|
28
|
+
:placeholder="`规格`"
|
|
29
|
+
v-model="_linkValue"
|
|
30
|
+
:disabled="disabled"
|
|
31
|
+
:useStore="selectStore"
|
|
32
|
+
></BaseStoreSelect>
|
|
33
|
+
</div>
|
|
34
|
+
</div>
|
|
35
|
+
</template>
|
|
36
|
+
|
|
37
|
+
<script>
|
|
38
|
+
import BaseStoreSelect from '../baseStoreSelect/index.vue'
|
|
39
|
+
export default {
|
|
40
|
+
name: 'baseNumberInput',
|
|
41
|
+
data() {
|
|
42
|
+
return {}
|
|
43
|
+
},
|
|
44
|
+
props: {
|
|
45
|
+
value: {},
|
|
46
|
+
precision: {
|
|
47
|
+
default: 0,
|
|
48
|
+
},
|
|
49
|
+
unit: {},
|
|
50
|
+
select: null,
|
|
51
|
+
disabled: {
|
|
52
|
+
default: false,
|
|
53
|
+
},
|
|
54
|
+
maxlength: {},
|
|
55
|
+
size: {},
|
|
56
|
+
controls: { default: false },
|
|
57
|
+
min: {
|
|
58
|
+
default: null,
|
|
59
|
+
},
|
|
60
|
+
max: {},
|
|
61
|
+
linkValue: {},
|
|
62
|
+
|
|
63
|
+
selectStore: {},
|
|
64
|
+
|
|
65
|
+
placeholder: {
|
|
66
|
+
type: String,
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
computed: {
|
|
70
|
+
module: {
|
|
71
|
+
set(val) {
|
|
72
|
+
this.$emit('input', val)
|
|
73
|
+
},
|
|
74
|
+
get() {
|
|
75
|
+
return this.$props.value
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
_linkValue: {
|
|
79
|
+
set(val) {
|
|
80
|
+
this.$emit('selectChange', val)
|
|
81
|
+
},
|
|
82
|
+
get() {
|
|
83
|
+
return this.$props.linkValue
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
methods: {
|
|
88
|
+
focus() {
|
|
89
|
+
this.$refs.target.focus()
|
|
90
|
+
},
|
|
91
|
+
|
|
92
|
+
onChange() {
|
|
93
|
+
this.$emit('onChange')
|
|
94
|
+
},
|
|
95
|
+
},
|
|
96
|
+
components: { BaseStoreSelect },
|
|
97
|
+
}
|
|
98
|
+
</script>
|
|
99
|
+
|
|
100
|
+
<style lang="less" scoped>
|
|
101
|
+
.pro-number-wrap {
|
|
102
|
+
width: 100%;
|
|
103
|
+
display: flex;
|
|
104
|
+
position: relative;
|
|
105
|
+
justify-items: center;
|
|
106
|
+
&:hover {
|
|
107
|
+
border-color: var(--color-primary);
|
|
108
|
+
}
|
|
109
|
+
.unit {
|
|
110
|
+
width: calc(100%);
|
|
111
|
+
border-radius: inherit;
|
|
112
|
+
/deep/ input {
|
|
113
|
+
padding-right: 34px !important;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
.number-unit {
|
|
118
|
+
width: 28px;
|
|
119
|
+
height: 28px;
|
|
120
|
+
right: 2px;
|
|
121
|
+
top: 50%;
|
|
122
|
+
transform: translateY(-50%);
|
|
123
|
+
text-align: center;
|
|
124
|
+
line-height: 28px;
|
|
125
|
+
position: absolute;
|
|
126
|
+
background: var(--color-gray-d);
|
|
127
|
+
span {
|
|
128
|
+
color: var(--font-color-d);
|
|
129
|
+
font-size: var(--font-size-s);
|
|
130
|
+
font-weight: var(--font-weight-g);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
.controls {
|
|
134
|
+
/deep/ .el-input-number__decrease {
|
|
135
|
+
left: 2px;
|
|
136
|
+
border-right: 1px solid var(--color-gray-d) !important;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
/deep/ .el-input-number__increase {
|
|
140
|
+
right: 2px;
|
|
141
|
+
border-left: 1px solid var(--color-gray-d) !important;
|
|
142
|
+
}
|
|
143
|
+
/deep/ .el-input-number__decrease,
|
|
144
|
+
/deep/ .el-input-number__increase {
|
|
145
|
+
top: 50%;
|
|
146
|
+
width: 40px;
|
|
147
|
+
|
|
148
|
+
height: calc(100% - 4px) !important;
|
|
149
|
+
transform: translateY(-50%);
|
|
150
|
+
}
|
|
151
|
+
/deep/ .el-input__inner {
|
|
152
|
+
&:hover,
|
|
153
|
+
&:focus {
|
|
154
|
+
border: 2px solid var(--color-primary) !important;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
.select {
|
|
160
|
+
.value-input {
|
|
161
|
+
/deep/ input {
|
|
162
|
+
padding-right: 71px !important;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
.number-unit {
|
|
166
|
+
width: 65px !important;
|
|
167
|
+
height: 28px !important;
|
|
168
|
+
background: var(--color-gray-d);
|
|
169
|
+
|
|
170
|
+
/deep/ input {
|
|
171
|
+
width: 100% !important;
|
|
172
|
+
height: 24px !important;
|
|
173
|
+
border: 0px !important;
|
|
174
|
+
background: inherit !important;
|
|
175
|
+
}
|
|
176
|
+
// /deep/.el-input.is-disabled .el-input__inner {
|
|
177
|
+
// color: var(--font-color-d);
|
|
178
|
+
// }
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
.disabled {
|
|
182
|
+
.number-unit {
|
|
183
|
+
span {
|
|
184
|
+
color: #8f959e;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
/deep/ input {
|
|
189
|
+
font-weight: var(--font-weight-kg);
|
|
190
|
+
}
|
|
191
|
+
</style>
|