qtsk-vue3 0.0.14 → 0.0.15
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/package/component.js +9 -2
- package/package/components/Container/index.vue +1 -1
- package/package/components/Dialog/index.vue +2 -1
- package/package/components/Empty/index.vue +1 -1
- package/package/components/Input/index.vue +3 -2
- package/package/components/Menu/index.vue +1 -1
- package/package/components/SelectRemote/index.vue +76 -0
- package/package/components/TabPane/index.vue +21 -0
- package/package/components/Table/index.vue +51 -7
- package/package/components/Tabs/index.vue +18 -0
- package/package/components/Timeline/index.vue +59 -0
- package/package/index.backup.js +23 -22
- package/package/index.js +22 -22
- package/package.json +1 -1
package/package/component.js
CHANGED
@@ -13,7 +13,10 @@ import Dialog from './components/Dialog/index.vue'
|
|
13
13
|
import Form from './components/Form/index.vue'
|
14
14
|
import FormItem from './components/FormItem/index.vue'
|
15
15
|
import Empty from './components/Empty/index.vue'
|
16
|
-
|
16
|
+
import Tabs from './components/Tabs/index.vue'
|
17
|
+
import TabPane from './components/TabPane/index.vue'
|
18
|
+
import SelectRemote from './components/SelectRemote/index.vue'
|
19
|
+
import Timeline from './components/Timeline/index.vue'
|
17
20
|
const components =
|
18
21
|
[
|
19
22
|
CommonButton,
|
@@ -30,6 +33,10 @@ const components =
|
|
30
33
|
Dialog,
|
31
34
|
Form,
|
32
35
|
FormItem,
|
33
|
-
Empty
|
36
|
+
Empty,
|
37
|
+
Tabs,
|
38
|
+
TabPane,
|
39
|
+
SelectRemote,
|
40
|
+
Timeline
|
34
41
|
]
|
35
42
|
export default components
|
@@ -38,10 +38,11 @@ defineProps({
|
|
38
38
|
})
|
39
39
|
|
40
40
|
let modelValue = defineModel('modelValue', {type: Boolean})
|
41
|
-
let emits = defineEmits(['confirm'])
|
41
|
+
let emits = defineEmits(['confirm', 'cancel'])
|
42
42
|
// 点击取消
|
43
43
|
const handleCancel = () => {
|
44
44
|
modelValue.value = false
|
45
|
+
emits('cancel')
|
45
46
|
}
|
46
47
|
// 点击确认
|
47
48
|
const handleConfirm = () => {
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<template>
|
2
|
-
<ElInput :type="type" :placeholder="placeholder" v-model="inputValue" v-bind="$attrs" clearable>
|
2
|
+
<ElInput :type="type" :placeholder="placeholder" v-model="inputValue" v-bind="$attrs" clearable :disabled="disabled">
|
3
3
|
<template #prepend v-if="$slots.prepend">
|
4
4
|
<!-- 前缀 -->
|
5
5
|
<slot name="prepend" />
|
@@ -31,7 +31,8 @@ const props = defineProps({
|
|
31
31
|
modelValue: {
|
32
32
|
type: [String, Number],
|
33
33
|
default: ''
|
34
|
-
}
|
34
|
+
},
|
35
|
+
disabled: Boolean
|
35
36
|
})
|
36
37
|
const emits = defineEmits(['update:modelValue'])
|
37
38
|
const inputValue = computed({
|
@@ -2,7 +2,7 @@
|
|
2
2
|
<div class="menu">
|
3
3
|
<el-menu class="el-menu-vertical-demo" router :collapse="isCollapse" :default-active="activeMenu"
|
4
4
|
@open="handleOpen" @close="handleClose">
|
5
|
-
<el-menu-item :index="menu.url" v-for="(menu, index) in menus" :key="index">
|
5
|
+
<el-menu-item :index="menu.url" v-for="(menu, index) in menus.filter(item => item)" :key="index">
|
6
6
|
<Icons :type="menu.icon"></Icons>
|
7
7
|
<template #title>
|
8
8
|
<span>{{ menu.menuName }}</span>
|
@@ -0,0 +1,76 @@
|
|
1
|
+
<template>
|
2
|
+
<el-select
|
3
|
+
v-model="selectValue"
|
4
|
+
:placeholder="placeholder"
|
5
|
+
v-bind="$attrs"
|
6
|
+
:teleported="false"
|
7
|
+
:loading="loading"
|
8
|
+
clearable
|
9
|
+
filterable
|
10
|
+
remote
|
11
|
+
:remote-method="remoteMethod"
|
12
|
+
:no-data-text="'暂无数据项'"
|
13
|
+
:loading-text="'加载中'"
|
14
|
+
:no-match-text="'暂无匹配数据'"
|
15
|
+
>
|
16
|
+
<el-option v-for="item in list" :key="item[valueName]" :label="item[keyName]" :value="item[valueName]">
|
17
|
+
<div v-if="item.icon" style="display: flex;align-items: center;justify-content: space-between;">
|
18
|
+
<Icons :type="item.icon"/>
|
19
|
+
<span>{{ item.icon }}</span>
|
20
|
+
</div>
|
21
|
+
</el-option>
|
22
|
+
</el-select>
|
23
|
+
</template>
|
24
|
+
|
25
|
+
<script setup>
|
26
|
+
import { ref } from 'vue'
|
27
|
+
import { ElSelect, ElOption } from 'element-plus'
|
28
|
+
import '../../style/root.css'
|
29
|
+
|
30
|
+
const loading = ref(false)
|
31
|
+
|
32
|
+
defineOptions({
|
33
|
+
name: 'SelectRemote'
|
34
|
+
})
|
35
|
+
const props = defineProps({
|
36
|
+
placeholder: {
|
37
|
+
type: String,
|
38
|
+
default: '请选择'
|
39
|
+
},
|
40
|
+
keyName: {
|
41
|
+
type: String,
|
42
|
+
default: 'label'
|
43
|
+
},
|
44
|
+
valueName: {
|
45
|
+
type: String,
|
46
|
+
default: 'value'
|
47
|
+
},
|
48
|
+
remoteMethod: {
|
49
|
+
type: Function
|
50
|
+
},
|
51
|
+
list: {
|
52
|
+
type: Array,
|
53
|
+
default: () => ([])
|
54
|
+
}
|
55
|
+
})
|
56
|
+
const selectValue = defineModel('modelValue', { default: '', type: [Number, String, Array] })
|
57
|
+
const options = ref([])
|
58
|
+
const remoteMethod = (query) => {
|
59
|
+
if (query) {
|
60
|
+
props.remoteMethod(query)
|
61
|
+
selectValue.value = query
|
62
|
+
} else {
|
63
|
+
options.value = []
|
64
|
+
}
|
65
|
+
}
|
66
|
+
|
67
|
+
</script>
|
68
|
+
|
69
|
+
<style lang="less" scoped>
|
70
|
+
:deep(.el-select__wrapper.is-focused){
|
71
|
+
box-shadow: 0 0 0 1px var(--main-color) inset;
|
72
|
+
}
|
73
|
+
:deep(.el-select-dropdown__item.is-selected){
|
74
|
+
color: var(--main-color);
|
75
|
+
}
|
76
|
+
</style>
|
@@ -0,0 +1,21 @@
|
|
1
|
+
<template>
|
2
|
+
<el-tab-pane :label="label" :name="name">
|
3
|
+
<slot/>
|
4
|
+
</el-tab-pane>
|
5
|
+
</template>
|
6
|
+
|
7
|
+
<script setup>
|
8
|
+
import { ElTabPane } from 'element-plus'
|
9
|
+
|
10
|
+
defineOptions({
|
11
|
+
name: 'TabPane'
|
12
|
+
})
|
13
|
+
|
14
|
+
defineProps({
|
15
|
+
label: String,
|
16
|
+
name: String
|
17
|
+
})
|
18
|
+
</script>
|
19
|
+
|
20
|
+
<style lang="less" scoped>
|
21
|
+
</style>
|
@@ -1,6 +1,15 @@
|
|
1
1
|
<template>
|
2
2
|
<div>
|
3
|
-
<el-table
|
3
|
+
<el-table
|
4
|
+
ref="tableRef"
|
5
|
+
border
|
6
|
+
:data="data"
|
7
|
+
style="width: 100%"
|
8
|
+
:height="height"
|
9
|
+
:header-cell-style="{background:'#f2f4f7', color:'#606266',height: '60px'}"
|
10
|
+
@selection-change="handleSelectionChange"
|
11
|
+
>
|
12
|
+
<el-table-column v-if="checkbox" type="selection" width="55" :selectable="selectable"/>
|
4
13
|
<el-table-column
|
5
14
|
v-for="(column, index) in columns"
|
6
15
|
:label="column.label"
|
@@ -11,27 +20,33 @@
|
|
11
20
|
>
|
12
21
|
<template #default="scope">
|
13
22
|
<template v-if="column.key!=='operations'">
|
14
|
-
|
23
|
+
<template v-if="column?.click==true">
|
24
|
+
<slot name="click" :data="scope.row" :index="scope.$index"/>
|
25
|
+
</template>
|
26
|
+
<template v-else>
|
27
|
+
{{ (column?.text && column.text(scope.row[column.key])) || scope.row[column.key] }}
|
28
|
+
</template>
|
15
29
|
</template>
|
16
30
|
<template v-else>
|
17
31
|
<slot name="operations" :data="scope.row" :index="scope.$index"/>
|
18
32
|
</template>
|
19
33
|
</template>
|
20
34
|
</el-table-column>
|
21
|
-
<template #empty>
|
22
|
-
<el-empty description="暂无数据" />
|
23
|
-
</template>
|
24
35
|
</el-table>
|
36
|
+
<Empty v-if="emptyStatus" description="暂无数据" />
|
25
37
|
<slot v-if="data.length" name="pagination" />
|
26
38
|
</div>
|
27
39
|
</template>
|
28
40
|
|
29
41
|
<script setup>
|
30
|
-
import {
|
42
|
+
import { ref, watch } from 'vue'
|
43
|
+
import { ElTable, ElTableColumn } from 'element-plus'
|
44
|
+
|
31
45
|
defineOptions({
|
32
46
|
name: 'Table',
|
33
47
|
})
|
34
|
-
|
48
|
+
const emits = defineEmits('getSelection')
|
49
|
+
const props = defineProps({
|
35
50
|
data: {
|
36
51
|
type: Object,
|
37
52
|
default: () => ([])
|
@@ -43,7 +58,36 @@ defineProps({
|
|
43
58
|
columns: {
|
44
59
|
type: Array,
|
45
60
|
default: () => ([])
|
61
|
+
},
|
62
|
+
checkbox: {
|
63
|
+
type: Boolean,
|
64
|
+
default: false
|
65
|
+
},
|
66
|
+
selectable: {
|
67
|
+
type: Function
|
68
|
+
}
|
69
|
+
})
|
70
|
+
const tableRef = ref(null)
|
71
|
+
const emptyStatus = ref(false)
|
72
|
+
const multipleSelection = ref([])
|
73
|
+
watch(() => props.data, (nv) => {
|
74
|
+
if (!nv.length) {
|
75
|
+
emptyStatus.value = true
|
76
|
+
} else {
|
77
|
+
emptyStatus.value = false
|
78
|
+
}
|
79
|
+
})
|
80
|
+
const handleSelectionChange = (list) => {
|
81
|
+
multipleSelection.value = [];
|
82
|
+
if (list.length > 1) {
|
83
|
+
tableRef.value.clearSelection();
|
84
|
+
tableRef.value.toggleRowSelection(list[list.length - 1]);
|
46
85
|
}
|
86
|
+
multipleSelection.value = [list[list.length - 1]];
|
87
|
+
}
|
88
|
+
defineExpose({
|
89
|
+
selection: multipleSelection,
|
90
|
+
clearSelection: () => { tableRef.value.clearSelection() }
|
47
91
|
})
|
48
92
|
</script>
|
49
93
|
|
@@ -0,0 +1,18 @@
|
|
1
|
+
<template>
|
2
|
+
<el-tabs v-model="activeName" type="border-card" class="demo-tabs">
|
3
|
+
<slot/>
|
4
|
+
</el-tabs>
|
5
|
+
</template>
|
6
|
+
|
7
|
+
<script setup>
|
8
|
+
import { ElTabs } from 'element-plus'
|
9
|
+
import '../../style/root.css'
|
10
|
+
|
11
|
+
defineOptions({
|
12
|
+
name: 'Tabs'
|
13
|
+
})
|
14
|
+
const activeName = defineModel('activeName', {type: String})
|
15
|
+
</script>
|
16
|
+
|
17
|
+
<style lang="less" scoped>
|
18
|
+
</style>
|
@@ -0,0 +1,59 @@
|
|
1
|
+
<template>
|
2
|
+
<div class="normalClass">
|
3
|
+
<el-timeline style="max-width: 600px">
|
4
|
+
<el-timeline-item
|
5
|
+
v-for="(activity, index) in activities"
|
6
|
+
:key="index"
|
7
|
+
:timestamp="activity[timeKey]"
|
8
|
+
:color="activity.color"
|
9
|
+
>
|
10
|
+
<div class="content">{{ activity[contentKey] }}</div>
|
11
|
+
<div class="address">{{ activity[addressKey] }}</div>
|
12
|
+
</el-timeline-item>
|
13
|
+
</el-timeline>
|
14
|
+
</div>
|
15
|
+
</template>
|
16
|
+
|
17
|
+
<script setup>
|
18
|
+
import { ElTimeline, ElTimelineItem} from 'element-plus'
|
19
|
+
|
20
|
+
defineOptions({
|
21
|
+
name: 'Timeline'
|
22
|
+
})
|
23
|
+
|
24
|
+
defineProps({
|
25
|
+
activities: {
|
26
|
+
type: Array,
|
27
|
+
default: () => ([])
|
28
|
+
},
|
29
|
+
timeKey: {
|
30
|
+
type: String,
|
31
|
+
default: 'timestamp'
|
32
|
+
},
|
33
|
+
contentKey: {
|
34
|
+
type: String,
|
35
|
+
default: 'content'
|
36
|
+
},
|
37
|
+
addressKey: {
|
38
|
+
type: String,
|
39
|
+
default: 'address'
|
40
|
+
}
|
41
|
+
})
|
42
|
+
</script>
|
43
|
+
|
44
|
+
<style lang="less" scoped>
|
45
|
+
.normalClass {
|
46
|
+
margin: 0 10px;
|
47
|
+
.content {
|
48
|
+
font-size: 14px;
|
49
|
+
font-weight: bolder;
|
50
|
+
}
|
51
|
+
.address {
|
52
|
+
color: #909399;
|
53
|
+
margin-top: 5px;
|
54
|
+
}
|
55
|
+
}
|
56
|
+
:deep(.el-timeline-item__timestamp) {
|
57
|
+
font-size: 12px;
|
58
|
+
}
|
59
|
+
</style>
|
package/package/index.backup.js
CHANGED
@@ -1,22 +1,23 @@
|
|
1
|
-
import Components from './component'
|
2
|
-
import { Message, MessageBox } from './components/Message'
|
3
|
-
|
4
|
-
const makeInstaller = (components = [], directives = []) => {
|
5
|
-
const apps = []
|
6
|
-
const install = (app, opts) => {
|
7
|
-
const option = opts
|
8
|
-
if (apps.includes(app)) return
|
9
|
-
apps.push(app)
|
10
|
-
components.forEach((c) => {
|
11
|
-
app.component(c.name, c)
|
12
|
-
})
|
13
|
-
app.config.globalProperties.$ELEMENT = option
|
14
|
-
}
|
15
|
-
return install
|
16
|
-
}
|
17
|
-
|
18
|
-
const install = makeInstaller(Components)
|
19
|
-
|
20
|
-
export { Message, MessageBox, install, install as default }
|
21
|
-
|
22
|
-
console.info('%c====== Editing in local package ======', 'font-size:16px;color:pink;')
|
1
|
+
import Components from './component'
|
2
|
+
import { Message, MessageBox } from './components/Message'
|
3
|
+
|
4
|
+
const makeInstaller = (components = [], directives = []) => {
|
5
|
+
const apps = []
|
6
|
+
const install = (app, opts) => {
|
7
|
+
const option = opts
|
8
|
+
if (apps.includes(app)) return
|
9
|
+
apps.push(app)
|
10
|
+
components.forEach((c) => {
|
11
|
+
app.component(c.name, c)
|
12
|
+
})
|
13
|
+
app.config.globalProperties.$ELEMENT = option
|
14
|
+
}
|
15
|
+
return install
|
16
|
+
}
|
17
|
+
|
18
|
+
const install = makeInstaller(Components)
|
19
|
+
|
20
|
+
export { Message, MessageBox, install, install as default }
|
21
|
+
|
22
|
+
console.info('%c====== Editing in local package ======', 'font-size:16px;color:pink;')
|
23
|
+
|
package/package/index.js
CHANGED
@@ -1,22 +1,22 @@
|
|
1
|
-
import Components from './component'
|
2
|
-
import { Message, MessageBox } from './components/Message'
|
3
|
-
|
4
|
-
const makeInstaller = (components = [], directives = []) => {
|
5
|
-
const apps = []
|
6
|
-
const install = (app, opts) => {
|
7
|
-
const option = opts
|
8
|
-
if (apps.includes(app)) return
|
9
|
-
apps.push(app)
|
10
|
-
components.forEach((c) => {
|
11
|
-
app.component(c.name, c)
|
12
|
-
})
|
13
|
-
app.config.globalProperties.$ELEMENT = option
|
14
|
-
}
|
15
|
-
return install
|
16
|
-
}
|
17
|
-
|
18
|
-
const install = makeInstaller(Components)
|
19
|
-
|
20
|
-
export { Message, MessageBox, install, install as default }
|
21
|
-
|
22
|
-
console.info('%c====== Editing in local package ======', 'font-size:16px;color:pink;')
|
1
|
+
import Components from './component'
|
2
|
+
import { Message, MessageBox } from './components/Message'
|
3
|
+
|
4
|
+
const makeInstaller = (components = [], directives = []) => {
|
5
|
+
const apps = []
|
6
|
+
const install = (app, opts) => {
|
7
|
+
const option = opts
|
8
|
+
if (apps.includes(app)) return
|
9
|
+
apps.push(app)
|
10
|
+
components.forEach((c) => {
|
11
|
+
app.component(c.name, c)
|
12
|
+
})
|
13
|
+
app.config.globalProperties.$ELEMENT = option
|
14
|
+
}
|
15
|
+
return install
|
16
|
+
}
|
17
|
+
|
18
|
+
const install = makeInstaller(Components)
|
19
|
+
|
20
|
+
export { Message, MessageBox, install, install as default }
|
21
|
+
|
22
|
+
console.info('%c====== Editing in local package ======', 'font-size:16px;color:pink;')
|