qtsk-vue3 0.0.5 → 0.0.7
Sign up to get free protection for your applications and to get access to all the features.
- package/package/component.js +33 -2
- package/package/components/QTButton/index.vue +45 -0
- package/package/components/QTContainer/index.vue +55 -0
- package/package/components/QTDatePicker/index.vue +29 -0
- package/package/components/QTDialog/index.vue +52 -0
- package/package/components/QTForm/index.vue +37 -0
- package/package/components/QTFormItem/index.vue +20 -0
- package/package/components/QTIcons/index.vue +27 -0
- package/package/components/QTInput/index.vue +29 -0
- package/package/components/QTMenu/index.vue +75 -0
- package/package/components/QTMessage/index.js +27 -0
- package/package/components/QTPagination/index.vue +40 -0
- package/package/components/QTSelect/index.vue +42 -0
- package/package/components/QTSwitch/index.vue +28 -0
- package/package/components/QTTable/index.vue +46 -0
- package/package/components/QTTree/index.vue +58 -0
- package/package/index.backup.js +20 -0
- package/package/index.js +5 -1
- package/package/style/root.css +3 -106
- package/package.json +24 -20
- package/package/components/button/index.vue +0 -11
package/package/component.js
CHANGED
@@ -95,5 +95,36 @@ export default [
|
|
95
95
|
]
|
96
96
|
*/
|
97
97
|
|
98
|
-
import QTButton from './components/
|
99
|
-
|
98
|
+
import QTButton from './components/QTButton/index.vue'
|
99
|
+
import QTContainer from './components/QTContainer/index.vue'
|
100
|
+
import QTMenu from './components/QTMenu/index.vue'
|
101
|
+
import QTIcons from './components/QTIcons/index.vue'
|
102
|
+
import QTInput from './components/QTInput/index.vue'
|
103
|
+
import QTSelect from './components/QTSelect/index.vue'
|
104
|
+
import QTTable from './components/QTTable/index.vue'
|
105
|
+
import QTSwitch from './components/QTSwitch/index.vue'
|
106
|
+
import QTPagination from './components/QTPagination/index.vue'
|
107
|
+
import QTDatePicker from './components/QTDatePicker/index.vue'
|
108
|
+
import QTTree from './components/QTTree/index.vue'
|
109
|
+
import QTDialog from './components/QTDialog/index.vue'
|
110
|
+
import QTForm from './components/QTForm/index.vue'
|
111
|
+
import QTFormItem from './components/QTFormItem/index.vue'
|
112
|
+
|
113
|
+
const components =
|
114
|
+
[
|
115
|
+
QTButton,
|
116
|
+
QTContainer,
|
117
|
+
QTMenu,
|
118
|
+
QTIcons,
|
119
|
+
QTInput,
|
120
|
+
QTSelect,
|
121
|
+
QTTable,
|
122
|
+
QTSwitch,
|
123
|
+
QTPagination,
|
124
|
+
QTDatePicker,
|
125
|
+
QTTree,
|
126
|
+
QTDialog,
|
127
|
+
QTForm,
|
128
|
+
QTFormItem
|
129
|
+
]
|
130
|
+
export default components
|
@@ -0,0 +1,45 @@
|
|
1
|
+
<template>
|
2
|
+
<div :class="[type === 'default' ? 'defaultClass' : 'normalClass']">
|
3
|
+
<el-button :type="type" :color="color" :link="link">
|
4
|
+
<slot>按钮</slot>
|
5
|
+
</el-button>
|
6
|
+
</div>
|
7
|
+
</template>
|
8
|
+
|
9
|
+
<script setup>
|
10
|
+
import { ElButton} from 'element-plus'
|
11
|
+
import '../../style/root.css'
|
12
|
+
|
13
|
+
defineOptions({
|
14
|
+
name: 'QTButton',
|
15
|
+
})
|
16
|
+
const props = defineProps({
|
17
|
+
type:{
|
18
|
+
type: String,
|
19
|
+
default: 'default', //可选数值有, primary/default
|
20
|
+
},
|
21
|
+
color: {
|
22
|
+
type: String,
|
23
|
+
default: '#4d4398'
|
24
|
+
},
|
25
|
+
link: {
|
26
|
+
type: Boolean,
|
27
|
+
default: false
|
28
|
+
}
|
29
|
+
})
|
30
|
+
//根据不同的类型,自定义按钮颜色
|
31
|
+
const color = props.type === 'primary' ? props.color : ''
|
32
|
+
</script>
|
33
|
+
|
34
|
+
<style lang="less" scoped>
|
35
|
+
.normalClass{
|
36
|
+
margin: 0 10px;
|
37
|
+
}
|
38
|
+
.defaultClass{
|
39
|
+
margin: 0 10px;
|
40
|
+
:deep(.el-button){
|
41
|
+
color: var(--qt-main-color)!important;
|
42
|
+
border-color: var(--qt-main-color)!important;
|
43
|
+
}
|
44
|
+
}
|
45
|
+
</style>
|
@@ -0,0 +1,55 @@
|
|
1
|
+
<template>
|
2
|
+
<div class="common-layout">
|
3
|
+
<el-container>
|
4
|
+
<el-header>
|
5
|
+
<slot name="header">
|
6
|
+
this is the header
|
7
|
+
</slot>
|
8
|
+
</el-header>
|
9
|
+
<el-container>
|
10
|
+
<el-aside>
|
11
|
+
<slot name="menu">
|
12
|
+
this is the menu
|
13
|
+
</slot>
|
14
|
+
</el-aside>
|
15
|
+
<el-main>
|
16
|
+
<slot name="main">
|
17
|
+
this is the main
|
18
|
+
</slot>
|
19
|
+
</el-main>
|
20
|
+
</el-container>
|
21
|
+
</el-container>
|
22
|
+
</div>
|
23
|
+
</template>
|
24
|
+
|
25
|
+
<script setup>
|
26
|
+
import { ElContainer, ElHeader, ElAside, ElMain } from 'element-plus'
|
27
|
+
defineOptions({
|
28
|
+
name: 'QTContainer'
|
29
|
+
})
|
30
|
+
</script>
|
31
|
+
|
32
|
+
<style scoped lang="less">
|
33
|
+
.common-layout{
|
34
|
+
width: 100vw;
|
35
|
+
height: 100vh;
|
36
|
+
.el-container{
|
37
|
+
width: 100%;
|
38
|
+
.el-header{
|
39
|
+
display: flex;
|
40
|
+
align-items: center;
|
41
|
+
height: 60px;
|
42
|
+
}
|
43
|
+
.el-aside, .el-main{
|
44
|
+
height: calc(100vh - 60px);
|
45
|
+
}
|
46
|
+
.el-aside {
|
47
|
+
width: auto;
|
48
|
+
background-color: #ccc;
|
49
|
+
}
|
50
|
+
.el-main{
|
51
|
+
background-color: #eee;
|
52
|
+
}
|
53
|
+
}
|
54
|
+
}
|
55
|
+
</style>
|
@@ -0,0 +1,29 @@
|
|
1
|
+
<template>
|
2
|
+
<el-config-provider :locale="zhCn">
|
3
|
+
<el-date-picker v-model="modelValue" type="date" :placeholder="placeholder" :format="format" :value-format="format"/>
|
4
|
+
</el-config-provider>
|
5
|
+
</template>
|
6
|
+
|
7
|
+
<script setup>
|
8
|
+
import { ElDatePicker, ElConfigProvider } from 'element-plus'
|
9
|
+
import zhCn from 'element-plus/es/locale/lang/zh-cn'
|
10
|
+
|
11
|
+
defineOptions({
|
12
|
+
name: 'QTDatePicker',
|
13
|
+
})
|
14
|
+
|
15
|
+
const props = defineProps({
|
16
|
+
format: {
|
17
|
+
type: String,
|
18
|
+
default: 'YYYY-MM-DD'
|
19
|
+
},
|
20
|
+
placeholder: {
|
21
|
+
type: String,
|
22
|
+
default: '请选择'
|
23
|
+
},
|
24
|
+
})
|
25
|
+
|
26
|
+
const modelValue = defineModel('modelValue', { type: Boolean })
|
27
|
+
</script>
|
28
|
+
|
29
|
+
<style lang="less" scoped></style>
|
@@ -0,0 +1,52 @@
|
|
1
|
+
<template>
|
2
|
+
<el-dialog v-model="modelValue" :title="title" :width="width" align-center>
|
3
|
+
<slot>内容</slot>
|
4
|
+
<template #footer>
|
5
|
+
<div class="dialog-footer">
|
6
|
+
<el-button @click="handleCancel">
|
7
|
+
{{ cancelName }}
|
8
|
+
</el-button>
|
9
|
+
<el-button type="primary" @click="handleConfirm">
|
10
|
+
{{ confirmName }}
|
11
|
+
</el-button>
|
12
|
+
</div>
|
13
|
+
</template>
|
14
|
+
</el-dialog>
|
15
|
+
</template>
|
16
|
+
|
17
|
+
<script setup>
|
18
|
+
import { ElDialog, ElButton } from 'element-plus'
|
19
|
+
|
20
|
+
defineOptions({
|
21
|
+
name: 'QTDialog',
|
22
|
+
})
|
23
|
+
|
24
|
+
defineProps({
|
25
|
+
title: String,
|
26
|
+
width: {
|
27
|
+
type: Number,
|
28
|
+
default: 500
|
29
|
+
},
|
30
|
+
cancelName: {
|
31
|
+
type: String,
|
32
|
+
default: '取消'
|
33
|
+
},
|
34
|
+
confirmName: {
|
35
|
+
type: String,
|
36
|
+
default: '确认'
|
37
|
+
}
|
38
|
+
})
|
39
|
+
|
40
|
+
let modelValue = defineModel('modelValue', {type: Boolean})
|
41
|
+
|
42
|
+
// 点击取消
|
43
|
+
const handleCancel = () => {
|
44
|
+
modelValue.value = false
|
45
|
+
}
|
46
|
+
// 点击确认
|
47
|
+
const handleConfirm = () => {
|
48
|
+
modelValue.value = false
|
49
|
+
}
|
50
|
+
</script>
|
51
|
+
|
52
|
+
<style lang="less" scoped></style>
|
@@ -0,0 +1,37 @@
|
|
1
|
+
<template>
|
2
|
+
<el-form
|
3
|
+
ref="ruleFormRef"
|
4
|
+
:model="formData"
|
5
|
+
:rules="rules"
|
6
|
+
label-width="auto"
|
7
|
+
:size="'default'"
|
8
|
+
:inline="inline"
|
9
|
+
status-icon
|
10
|
+
>
|
11
|
+
<slot/>
|
12
|
+
</el-form>
|
13
|
+
</template>
|
14
|
+
|
15
|
+
<script setup>
|
16
|
+
import { ElForm } from 'element-plus'
|
17
|
+
|
18
|
+
defineOptions({
|
19
|
+
name: 'QTForm',
|
20
|
+
})
|
21
|
+
|
22
|
+
defineProps({
|
23
|
+
rules: {
|
24
|
+
type: Array,
|
25
|
+
default: () => ([])
|
26
|
+
},
|
27
|
+
inline: {
|
28
|
+
type: Boolean,
|
29
|
+
default: false
|
30
|
+
}
|
31
|
+
})
|
32
|
+
|
33
|
+
let formData = defineModel('formData', {type: Object})
|
34
|
+
|
35
|
+
</script>
|
36
|
+
|
37
|
+
<style lang="less" scoped></style>
|
@@ -0,0 +1,20 @@
|
|
1
|
+
<template>
|
2
|
+
<el-form-item :label="label" :prop="propName">
|
3
|
+
<slot/>
|
4
|
+
</el-form-item>
|
5
|
+
</template>
|
6
|
+
|
7
|
+
<script setup>
|
8
|
+
import { ElFormItem } from 'element-plus'
|
9
|
+
|
10
|
+
defineOptions({
|
11
|
+
name: 'QTFormItem',
|
12
|
+
})
|
13
|
+
|
14
|
+
defineProps({
|
15
|
+
label: String,
|
16
|
+
propName: String
|
17
|
+
})
|
18
|
+
</script>
|
19
|
+
|
20
|
+
<style lang="less" scoped></style>
|
@@ -0,0 +1,27 @@
|
|
1
|
+
<template>
|
2
|
+
<el-icon :size="size">
|
3
|
+
<component :is='iconComponent'></component>
|
4
|
+
</el-icon>
|
5
|
+
</template>
|
6
|
+
|
7
|
+
<script setup>
|
8
|
+
import { ElIcon } from 'element-plus'
|
9
|
+
import { computed } from 'vue'
|
10
|
+
import * as Icons from '@element-plus/icons-vue';
|
11
|
+
|
12
|
+
defineOptions({
|
13
|
+
name: 'QTIcons'
|
14
|
+
})
|
15
|
+
const props = defineProps({
|
16
|
+
type: {
|
17
|
+
type: String,
|
18
|
+
default: ''
|
19
|
+
},
|
20
|
+
size: {
|
21
|
+
type: Number,
|
22
|
+
default: 18
|
23
|
+
}
|
24
|
+
})
|
25
|
+
//根据传入的类型使用图标
|
26
|
+
const iconComponent = computed(() => Icons[props.type])
|
27
|
+
</script>
|
@@ -0,0 +1,29 @@
|
|
1
|
+
<template>
|
2
|
+
<ElInput :type="type" :placeholder="placeholder" v-model="inputValue" v-bind="$attrs"/>
|
3
|
+
</template>
|
4
|
+
|
5
|
+
<script setup>
|
6
|
+
import {ElInput} from 'element-plus'
|
7
|
+
import '../../style/root.css'
|
8
|
+
|
9
|
+
defineOptions({
|
10
|
+
name: 'QTInput'
|
11
|
+
})
|
12
|
+
defineProps({
|
13
|
+
type: {
|
14
|
+
type: String,
|
15
|
+
default: 'text'
|
16
|
+
},
|
17
|
+
placeholder: {
|
18
|
+
type: String,
|
19
|
+
default: '请输入'
|
20
|
+
}
|
21
|
+
})
|
22
|
+
const inputValue = defineModel('modelValue', {default: '',type: [String, Number]})
|
23
|
+
</script>
|
24
|
+
|
25
|
+
<style lang="less" scoped>
|
26
|
+
:deep(.el-textarea__inner:focus), :deep(.el-input__wrapper.is-focus){
|
27
|
+
box-shadow: 0 0 0 1px var(--qt-main-color) inset;
|
28
|
+
}
|
29
|
+
</style>
|
@@ -0,0 +1,75 @@
|
|
1
|
+
<template>
|
2
|
+
<div class="menu">
|
3
|
+
<el-menu class="el-menu-vertical-demo" router :collapse="isCollapse" :default-active="activeMenu"
|
4
|
+
@open="handleOpen" @close="handleClose">
|
5
|
+
<el-menu-item :index="menu.path" v-for="(menu, index) in menus" :key="index">
|
6
|
+
<QTIcons :type="menu.icon"></QTIcons>
|
7
|
+
<template #title>
|
8
|
+
<span>{{ menu.name }}</span>
|
9
|
+
</template>
|
10
|
+
</el-menu-item>
|
11
|
+
</el-menu>
|
12
|
+
<div class="menu_btn">
|
13
|
+
<QTIcons v-if="isCollapse" @click="isCollapse = false" :type="'DArrowRight'"></QTIcons>
|
14
|
+
<QTIcons v-else @click="isCollapse = true" :type="'DArrowLeft'"></QTIcons>
|
15
|
+
</div>
|
16
|
+
</div>
|
17
|
+
</template>
|
18
|
+
|
19
|
+
<script setup>
|
20
|
+
import { ref } from 'vue'
|
21
|
+
import { ElMenu, ElMenuItem } from 'element-plus'
|
22
|
+
import QTIcons from '../QTIcons/index.vue'
|
23
|
+
|
24
|
+
defineOptions({
|
25
|
+
name: 'QTMenu'
|
26
|
+
})
|
27
|
+
defineProps({
|
28
|
+
menus: {
|
29
|
+
type: Array,
|
30
|
+
default: () => ([])
|
31
|
+
},
|
32
|
+
activeMenu: String
|
33
|
+
})
|
34
|
+
const isCollapse = ref(false)
|
35
|
+
const handleOpen = (key, keyPath) => {
|
36
|
+
console.log(key, keyPath)
|
37
|
+
}
|
38
|
+
const handleClose = (key, keyPath) => {
|
39
|
+
console.log(key, keyPath)
|
40
|
+
}
|
41
|
+
|
42
|
+
</script>
|
43
|
+
|
44
|
+
<style scoped lang="less">
|
45
|
+
.el-menu-vertical-demo:not(.el-menu--collapse) {
|
46
|
+
width: 180px;
|
47
|
+
min-height: 400px;
|
48
|
+
}
|
49
|
+
|
50
|
+
.menu {
|
51
|
+
position: relative;
|
52
|
+
height: 100%;
|
53
|
+
|
54
|
+
.el-menu {
|
55
|
+
height: 100%;
|
56
|
+
|
57
|
+
.el-menu-item {
|
58
|
+
display: flex;
|
59
|
+
}
|
60
|
+
|
61
|
+
.is-active {
|
62
|
+
color: var(--qt-main-color);
|
63
|
+
background-color: var(--qt-background-color);
|
64
|
+
}
|
65
|
+
}
|
66
|
+
|
67
|
+
&_btn {
|
68
|
+
position: absolute;
|
69
|
+
bottom: 10px;
|
70
|
+
left: 50%;
|
71
|
+
transform: translateX(-50%);
|
72
|
+
cursor: pointer;
|
73
|
+
}
|
74
|
+
}
|
75
|
+
</style>
|
@@ -0,0 +1,27 @@
|
|
1
|
+
/**
|
2
|
+
* QTMessage 消息提示包含四种类型: error(错误), success(成功), warning(警告), info(信息)
|
3
|
+
*/
|
4
|
+
import { ElMessage, ElMessageBox } from 'element-plus'
|
5
|
+
|
6
|
+
export const QTMessage = {
|
7
|
+
error: (message) => {
|
8
|
+
ElMessage.error(message)
|
9
|
+
},
|
10
|
+
success: (message) => {
|
11
|
+
ElMessage({
|
12
|
+
message,
|
13
|
+
type: 'success',
|
14
|
+
})
|
15
|
+
},
|
16
|
+
warning: (message) => {
|
17
|
+
ElMessage({
|
18
|
+
message,
|
19
|
+
type: 'warning',
|
20
|
+
})
|
21
|
+
},
|
22
|
+
info: (message) => {
|
23
|
+
ElMessage(message)
|
24
|
+
}
|
25
|
+
}
|
26
|
+
|
27
|
+
export const QTMessageBox = ElMessageBox
|
@@ -0,0 +1,40 @@
|
|
1
|
+
<template>
|
2
|
+
<div class="pagination">
|
3
|
+
<el-config-provider :locale="zhCn">
|
4
|
+
<el-pagination :page-sizes="[10, 20, 50]" layout="total, sizes, prev, pager, next" :total="total"
|
5
|
+
@size-change="handleSizeChange" @current-change="handleCurrentChange">
|
6
|
+
</el-pagination>
|
7
|
+
</el-config-provider>
|
8
|
+
</div>
|
9
|
+
</template>
|
10
|
+
|
11
|
+
<script setup>
|
12
|
+
import { ElPagination, ElConfigProvider } from 'element-plus'
|
13
|
+
import zhCn from 'element-plus/es/locale/lang/zh-cn'
|
14
|
+
|
15
|
+
defineOptions({
|
16
|
+
name: 'QTPagination',
|
17
|
+
})
|
18
|
+
defineProps({
|
19
|
+
total: {
|
20
|
+
type: Number,
|
21
|
+
default: 0
|
22
|
+
}
|
23
|
+
})
|
24
|
+
// 条目个数改变
|
25
|
+
const handleSizeChange = (val) => {
|
26
|
+
console.log(`${val} items per page`)
|
27
|
+
}
|
28
|
+
// 当前页码改变
|
29
|
+
const handleCurrentChange = (val) => {
|
30
|
+
console.log(`current page: ${val}`)
|
31
|
+
}
|
32
|
+
</script>
|
33
|
+
|
34
|
+
<style lang="less" scoped>
|
35
|
+
.pagination {
|
36
|
+
display: flex;
|
37
|
+
justify-content: flex-end;
|
38
|
+
margin-top: 20px;
|
39
|
+
}
|
40
|
+
</style>
|
@@ -0,0 +1,42 @@
|
|
1
|
+
<template>
|
2
|
+
<el-select v-model="selectValue" :placeholder="placeholder" v-bind="$attrs" :teleported="false">
|
3
|
+
<el-option v-for="item in options" :key="item[valueName]" :label="item[keyName]" :value="item[valueName]" />
|
4
|
+
</el-select>
|
5
|
+
</template>
|
6
|
+
|
7
|
+
<script setup>
|
8
|
+
import { ElSelect, ElOption } from 'element-plus'
|
9
|
+
import '../../style/root.css'
|
10
|
+
|
11
|
+
defineOptions({
|
12
|
+
name: 'QTSelect'
|
13
|
+
})
|
14
|
+
defineProps({
|
15
|
+
placeholder: {
|
16
|
+
type: String,
|
17
|
+
default: '请选择'
|
18
|
+
},
|
19
|
+
options: {
|
20
|
+
type: Array,
|
21
|
+
default: () => ([])
|
22
|
+
},
|
23
|
+
keyName: {
|
24
|
+
type: String,
|
25
|
+
default: 'label'
|
26
|
+
},
|
27
|
+
valueName: {
|
28
|
+
type: String,
|
29
|
+
default: 'value'
|
30
|
+
}
|
31
|
+
})
|
32
|
+
const selectValue = defineModel('modelValue', { default: '', type: [Number, String] })
|
33
|
+
</script>
|
34
|
+
|
35
|
+
<style lang="less" scoped>
|
36
|
+
:deep(.el-select__wrapper.is-focused){
|
37
|
+
box-shadow: 0 0 0 1px var(--qt-main-color) inset;
|
38
|
+
}
|
39
|
+
:deep(.el-select-dropdown__item.is-selected){
|
40
|
+
color: var(--qt-main-color);
|
41
|
+
}
|
42
|
+
</style>
|
@@ -0,0 +1,28 @@
|
|
1
|
+
<template>
|
2
|
+
<el-switch v-model="modelValue" :disabled="disabled" @change="handleChange"/>
|
3
|
+
</template>
|
4
|
+
|
5
|
+
<script setup>
|
6
|
+
import { ElSwitch } from 'element-plus'
|
7
|
+
|
8
|
+
defineOptions({
|
9
|
+
name: 'QTSwitch',
|
10
|
+
})
|
11
|
+
|
12
|
+
const props = defineProps({
|
13
|
+
disabled: {
|
14
|
+
type: Boolean,
|
15
|
+
default: false
|
16
|
+
},
|
17
|
+
index: Number,
|
18
|
+
})
|
19
|
+
|
20
|
+
const modelValue = defineModel('modelValue', {type: Boolean})
|
21
|
+
const emits = defineEmits(['changeStatus'])
|
22
|
+
const handleChange = () => {
|
23
|
+
emits('changeStatus', props.index)
|
24
|
+
}
|
25
|
+
</script>
|
26
|
+
|
27
|
+
<style lang="less" scoped>
|
28
|
+
</style>
|
@@ -0,0 +1,46 @@
|
|
1
|
+
<template>
|
2
|
+
<div>
|
3
|
+
<el-table :data="data" style="width: 100%" :header-cell-style="{background:'#f2f4f7', color:'#606266',height: '60px'}" border>
|
4
|
+
<el-table-column
|
5
|
+
v-for="(column, index) in columns"
|
6
|
+
:label="column.label"
|
7
|
+
:width="column.width"
|
8
|
+
:fixed="column.fixed"
|
9
|
+
:key="index"
|
10
|
+
>
|
11
|
+
<template #default="scope">
|
12
|
+
<div v-if="column.key!=='operations'">
|
13
|
+
{{ scope.row[column.key] }}
|
14
|
+
</div>
|
15
|
+
<div v-else>
|
16
|
+
<slot name="operations" :data="scope.row" :index="scope.$index"/>
|
17
|
+
</div>
|
18
|
+
</template>
|
19
|
+
</el-table-column>
|
20
|
+
<template #empty>
|
21
|
+
<el-empty description="暂无数据" />
|
22
|
+
</template>
|
23
|
+
</el-table>
|
24
|
+
<slot v-if="data.length" name="pagination" />
|
25
|
+
</div>
|
26
|
+
</template>
|
27
|
+
|
28
|
+
<script setup>
|
29
|
+
import { ElTable, ElTableColumn, ElEmpty } from 'element-plus'
|
30
|
+
defineOptions({
|
31
|
+
name: 'QTTable',
|
32
|
+
})
|
33
|
+
defineProps({
|
34
|
+
data: {
|
35
|
+
type: Object,
|
36
|
+
default: () => ([])
|
37
|
+
},
|
38
|
+
columns: {
|
39
|
+
type: Array,
|
40
|
+
default: () => ([])
|
41
|
+
}
|
42
|
+
})
|
43
|
+
</script>
|
44
|
+
|
45
|
+
<style lang="less" scoped>
|
46
|
+
</style>
|
@@ -0,0 +1,58 @@
|
|
1
|
+
<template>
|
2
|
+
<el-tree
|
3
|
+
ref="treeRef"
|
4
|
+
style="max-width: 600px"
|
5
|
+
:data="data"
|
6
|
+
:props="defaultProps"
|
7
|
+
:show-checkbox="showCheckBox"
|
8
|
+
default-expand-all
|
9
|
+
:node-key="nodeKey"
|
10
|
+
:expand-on-click-node="false"
|
11
|
+
@node-click="handleNodeClick"
|
12
|
+
/>
|
13
|
+
</template>
|
14
|
+
|
15
|
+
<script setup>
|
16
|
+
import { ref } from 'vue'
|
17
|
+
import { ElTree } from 'element-plus'
|
18
|
+
|
19
|
+
const treeRef = ref(null)
|
20
|
+
defineOptions({
|
21
|
+
name: 'QTTree',
|
22
|
+
})
|
23
|
+
|
24
|
+
defineProps({
|
25
|
+
data: {
|
26
|
+
type: Array,
|
27
|
+
default: () => ([])
|
28
|
+
},
|
29
|
+
showCheckBox: {
|
30
|
+
type: Boolean,
|
31
|
+
default: false
|
32
|
+
},
|
33
|
+
nodeKey: {
|
34
|
+
type: String,
|
35
|
+
default: 'id'
|
36
|
+
}
|
37
|
+
})
|
38
|
+
|
39
|
+
// 点击节点
|
40
|
+
const handleNodeClick = (data) => {
|
41
|
+
console.log('tree-data', data)
|
42
|
+
}
|
43
|
+
|
44
|
+
const defaultProps = {
|
45
|
+
children: 'children',
|
46
|
+
label: 'label',
|
47
|
+
}
|
48
|
+
|
49
|
+
// 获取选中的节点
|
50
|
+
const getCheckedKeys = () => {
|
51
|
+
console.log(treeRef.value.getCheckedKeys(false))
|
52
|
+
}
|
53
|
+
defineExpose({
|
54
|
+
getCheckedKeys
|
55
|
+
})
|
56
|
+
</script>
|
57
|
+
|
58
|
+
<style lang="less" scoped></style>
|
@@ -0,0 +1,20 @@
|
|
1
|
+
import Components from './component'
|
2
|
+
const makeInstaller = (components = [], directives = []) => {
|
3
|
+
const apps = []
|
4
|
+
const install = (app, opts) => {
|
5
|
+
const option = opts
|
6
|
+
if (apps.includes(app)) return
|
7
|
+
apps.push(app)
|
8
|
+
components.forEach((c) => {
|
9
|
+
app.component(c.name, c)
|
10
|
+
})
|
11
|
+
app.config.globalProperties.$ELEMENT = option
|
12
|
+
}
|
13
|
+
return install
|
14
|
+
}
|
15
|
+
|
16
|
+
const install = makeInstaller(Components)
|
17
|
+
|
18
|
+
export { install, install as default }
|
19
|
+
|
20
|
+
console.info('%c====== Editing in local package ======', 'font-size:16px;color:green;')
|
package/package/index.js
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
import Components from './component'
|
2
|
+
import { QTMessage, QTMessageBox } from './components/QTMessage'
|
3
|
+
|
2
4
|
const makeInstaller = (components = [], directives = []) => {
|
3
5
|
const apps = []
|
4
6
|
const install = (app, opts) => {
|
@@ -15,4 +17,6 @@ const makeInstaller = (components = [], directives = []) => {
|
|
15
17
|
|
16
18
|
const install = makeInstaller(Components)
|
17
19
|
|
18
|
-
export { install, install as default }
|
20
|
+
export { QTMessage, QTMessageBox, install, install as default }
|
21
|
+
|
22
|
+
console.info('%c====== Editing in local package ======', 'font-size:16px;color:green;')
|
package/package/style/root.css
CHANGED
@@ -1,108 +1,5 @@
|
|
1
|
-
/*
|
1
|
+
/* 标准化样式定义 */
|
2
2
|
:root{
|
3
|
-
|
4
|
-
--
|
5
|
-
--mc-title-color: #142D4C;
|
6
|
-
--mc-subtitle-color: #828B97;
|
7
|
-
--mc-placeholder-color: #A3AEBC;
|
8
|
-
--mc-primary-text-color: #00ADDF;
|
9
|
-
--mc-warning-color: #FD6B6D;
|
10
|
-
--mc-red-tag-text-color: #B84545;
|
11
|
-
--mc-special-number-color: #DF8400;
|
12
|
-
--mc-background-color: #F5F8FC;
|
13
|
-
--mc-split-color: #DCE4ED;
|
14
|
-
--mc-tab-color: #DCE4ED;
|
15
|
-
--mc-normal-font-color: #0A1830;
|
16
|
-
--mc-border-color: #F5F8FC;
|
17
|
-
--mc-checkbox-disabled-background: var(--mc-split-color);
|
18
|
-
--mc-disabled-input-background: #EAEEF3;
|
19
|
-
--mc-error-color: #FF4D4F;
|
20
|
-
--mc-collapse-header-bg-color: #6898A6;
|
21
|
-
|
22
|
-
/* gradient color */
|
23
|
-
--mc-gradient-blue-light: #83C3FB;
|
24
|
-
--mc-gradient-blue-deep: #446DEA;
|
25
|
-
--mc-gradient-blue-2-light: #B1DBFF;
|
26
|
-
--mc-gradient-blue-2-deep: #7294FF;
|
27
|
-
--mc-gradient-blue-3-light: #88C8FF;
|
28
|
-
--mc-gradient-blue-3-deep: #1444D8;
|
29
|
-
|
30
|
-
--mc-gradient-red-light: #ED866A;
|
31
|
-
--mc-gradient-red-deep: #E8361A;
|
32
|
-
|
33
|
-
--mc-gradient-purple-light: #9F97FE;
|
34
|
-
--mc-gradient-purple-deep: #7138EC;
|
35
|
-
|
36
|
-
--mc-gradient-origin-light: #F1BC61;
|
37
|
-
--mc-gradient-origin-deep: #E8701A;
|
38
|
-
|
39
|
-
--mc-gradient-green-light: #7AD48C;
|
40
|
-
--mc-gradient-green-deep: #27B111;
|
41
|
-
|
42
|
-
/* font */
|
43
|
-
--mc-title-size: 18px;
|
44
|
-
--mc-subtitle-size: 16px;
|
45
|
-
--mc-normal-size: 14px;
|
46
|
-
--mc-small-size: 12px;
|
47
|
-
|
48
|
-
--mc-title-line-height: 26px;
|
49
|
-
--mc-subtitle-line-height: 24px;
|
50
|
-
--mc-content-line-height: 22px;
|
51
|
-
--mc-explain-line-height: 20px;
|
52
|
-
|
53
|
-
/* button */
|
54
|
-
--mc-button-normal-bg: linear-gradient(60.7deg, var(--mc-gradient-blue-light), var(--mc-gradient-blue-deep));
|
55
|
-
--mc-button-hover-bg: linear-gradient(60.7deg, var(--mc-gradient-blue-2-light), var(--mc-gradient-blue-2-deep));
|
56
|
-
--mc-button-active-bg: linear-gradient(60.7deg, var(--mc-gradient-blue-3-light), var(--mc-gradient-blue-3-deep));
|
57
|
-
|
58
|
-
--mc-button-disabled-text: #A3AEBC;
|
59
|
-
--mc-button-disabled-bg: #EAEEF3;
|
60
|
-
|
61
|
-
--mc-button-warning-normal-text: #FF4D4F;
|
62
|
-
--mc-button-warning-normal-border: #FF4D4F;
|
63
|
-
--mc-button-warning-hover-text: #FF6668;
|
64
|
-
--mc-button-warning-hover-border: #FE7779;
|
65
|
-
--mc-button-warning-active-text: var(--mc-button-normal-warning-text);
|
66
|
-
--mc-button-warning-active-border: var(--mc-button-normal-warning-text);
|
67
|
-
|
68
|
-
--mc-button-cancel-normal-text: var(--mc-gradient-blue-deep);
|
69
|
-
--mc-button-cancel-normal-border: var(--mc-gradient-blue-deep);
|
70
|
-
--mc-button-cancel-hover-text: var(--mc-gradient-blue-2-deep);
|
71
|
-
--mc-button-cancel-hover-border: var(--mc-gradient-blue-2-deep);
|
72
|
-
--mc-button-cancel-active-text: var(--mc-gradient-blue-deep);
|
73
|
-
--mc-button-cancel-active-border: var(--mc-gradient-blue-deep);
|
74
|
-
|
75
|
-
--mc-button-inverse-normal-text: var(--mc-gradient-blue-deep);
|
76
|
-
--mc-button-inverse-normal-border: var(--mc-gradient-blue-deep);
|
77
|
-
--mc-button-inverse-hover-text: var(--mc-gradient-blue-2-deep);
|
78
|
-
--mc-button-inverse-hover-border: var(--mc-gradient-blue-2-deep);
|
79
|
-
--mc-button-inverse-active-text: var(--mc-gradient-blue-deep);
|
80
|
-
--mc-button-inverse-active-border: var(--mc-gradient-blue-deep);
|
81
|
-
|
82
|
-
--mc-link-normal-color: #00ADDF;
|
83
|
-
--mc-link-hover-color: var(--mc-main-color);
|
84
|
-
--mc-link-active-color: var(--mc-link-normal-color);
|
85
|
-
--mc-link-disabled-color: #A3AEBC;
|
86
|
-
|
87
|
-
/* float layer */
|
88
|
-
--mc-float-layer-box-shadow: 0px 1px 8px 2px rgba(104, 152, 166, .24);
|
89
|
-
--mc-float-layer-border-radius: 8px;
|
90
|
-
|
91
|
-
/* label */
|
92
|
-
--mc-label-default-text-color: #A3AEBC;
|
93
|
-
--mc-label-default-bg-color: #F5F8FC;
|
94
|
-
|
95
|
-
--mc-label-red-text-color: #B84545;
|
96
|
-
--mc-label-red-bg-color: #FAEAEA;
|
97
|
-
|
98
|
-
--mc-label-blue-text-color: #00ADDF;
|
99
|
-
--mc-label-blue-bg-color: #E7FAFF;
|
100
|
-
|
101
|
-
--mc-label-yellow-text-color: #D47802;
|
102
|
-
--mc-label-yellow-bg-color: #FBF0DB;
|
103
|
-
|
104
|
-
--mc-label-green-text-color: #3DB194;
|
105
|
-
--mc-label-green-bg-color: #EAFAF6;
|
106
|
-
|
107
|
-
--mc-tooltip-bg-color: rgba(0, 0, 0, 0.6);
|
3
|
+
--qt-main-color: #4d4398;
|
4
|
+
--qt-background-color: #e0edff;
|
108
5
|
}
|
package/package.json
CHANGED
@@ -1,21 +1,25 @@
|
|
1
1
|
{
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
2
|
+
"name": "qtsk-vue3",
|
3
|
+
"version": "0.0.7",
|
4
|
+
"description": "vue3版组件库",
|
5
|
+
"main": "./package/index.js",
|
6
|
+
"scripts": {
|
7
|
+
"patch": "node publish/build.js patch",
|
8
|
+
"minor": "node publish/build.js minor",
|
9
|
+
"major": "node publish/build.js major"
|
10
|
+
},
|
11
|
+
"keywords": [
|
12
|
+
"qingtingzhiyun",
|
13
|
+
"qtzy"
|
14
|
+
],
|
15
|
+
"files": [
|
16
|
+
"package"
|
17
|
+
],
|
18
|
+
"author": "qingting_tech",
|
19
|
+
"license": "MIT",
|
20
|
+
"dependencies": {
|
21
|
+
"@element-plus/icons-vue": "^2.3.1",
|
22
|
+
"@vue/shared": "^3.5.6",
|
23
|
+
"element-plus": "^2.8.3"
|
24
|
+
}
|
25
|
+
}
|