ci-plus 1.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 (47) hide show
  1. package/README.md +8 -0
  2. package/index.ts +13 -0
  3. package/package.json +44 -0
  4. package/script/build/index.ts +32 -0
  5. package/script/publish/index.ts +7 -0
  6. package/script/utils/delpath.ts +30 -0
  7. package/script/utils/paths.ts +7 -0
  8. package/script/utils/run.ts +15 -0
  9. package/src/button/button.vue +41 -0
  10. package/src/button/index.ts +4 -0
  11. package/src/button/style/index.less +35 -0
  12. package/src/buttons/buttons.vue +18 -0
  13. package/src/buttons/index.ts +4 -0
  14. package/src/ccapp/ccapp.vue +27 -0
  15. package/src/ccapp/index.ts +4 -0
  16. package/src/components.d.ts +18 -0
  17. package/src/dailog/dialog.vue +266 -0
  18. package/src/dailog/index.ts +4 -0
  19. package/src/dailog/style/index.less +69 -0
  20. package/src/icon/icon.vue +7 -0
  21. package/src/icon/index.ts +4 -0
  22. package/src/icon/style/index.less +3 -0
  23. package/src/index.ts +5 -0
  24. package/src/sortableTable/headButtons.vue +25 -0
  25. package/src/sortableTable/headerCheckBox.vue +74 -0
  26. package/src/sortableTable/headerInput.vue +148 -0
  27. package/src/sortableTable/headerRange.vue +108 -0
  28. package/src/sortableTable/headerSelectV2.vue +178 -0
  29. package/src/sortableTable/sortableTable.ts +4 -0
  30. package/src/sortableTable/sortableTable.vue +221 -0
  31. package/src/sortableTable/sortableTableDialog.vue +109 -0
  32. package/src/sortableTable/utils/dataOpt.ts +65 -0
  33. package/src/sortableTable/utils/dateShortcuts.ts +72 -0
  34. package/src/sortableTable/utils/filter.vue +30 -0
  35. package/src/sortableTable/utils/filterIcon.vue +8 -0
  36. package/src/sortableTable/utils/headerPopover.vue +92 -0
  37. package/src/sortableTable/utils/index.d.ts +11 -0
  38. package/src/sortableTable/utils/interface.ts +52 -0
  39. package/src/sortableTable/utils/removeParamsFilters.ts +9 -0
  40. package/src/sortableTable/utils/sortableTableColumnCell.vue +91 -0
  41. package/src/sortableTable/utils/sortableTableColumnCell2.vue +72 -0
  42. package/src/sortableTable/utils/sortableTableDragItem.vue +164 -0
  43. package/src/sortableTable/utils/sortableTableDragItem2.vue +144 -0
  44. package/src/sortableTable/utils/sortableTableTs.ts +9 -0
  45. package/src/utils/index.ts +1 -0
  46. package/src/utils/withinstall/index.ts +12 -0
  47. package/vite.config.ts +76 -0
@@ -0,0 +1,91 @@
1
+ <!-- /*
2
+ * @module sortableTableColumnCell
3
+ * @author : 杨佳贺&卖女孩的小火柴
4
+ * @description : 表格列单元格
5
+ * @version : 1.0.0
6
+ * @since : 创建时间 2023-12-29 13:40:49
7
+ * @lastTime : 2023-12-29 新增默认居中显示属性
8
+ * @lastTime : 2024-01-03 新增默认超出隐藏悬停显示、拖拽改变列宽
9
+ */ -->
10
+
11
+ <template>
12
+ <el-table-column
13
+ v-if="!data.hide && data.children"
14
+ v-bind="data.col"
15
+ >
16
+ <sortable-table-column-cell
17
+ v-for="v in data.children || []"
18
+ :key="v.key"
19
+ :data="v"
20
+ />
21
+ </el-table-column>
22
+ <el-table-column
23
+ v-else-if="!data.hide && data.scope"
24
+ v-bind="data.col"
25
+ :align="data.col.align || 'center'"
26
+ :showOverflowTooltip="data.col.showOverflowTooltip || true"
27
+ :resizable="data.col.resizable || true"
28
+ >
29
+ <template #default="scope">
30
+ {{ data.scope(scope) }}
31
+ </template>
32
+ <template #header="header">
33
+ <component
34
+ :is="headerVue(header)"
35
+ :header="header"
36
+ ></component>
37
+ </template>
38
+ </el-table-column>
39
+ <el-table-column
40
+ v-else-if="!data.hide && data.component"
41
+ v-bind="data.col"
42
+ :align="data.col.align || 'center'"
43
+ :showOverflowTooltip="data.col.showOverflowTooltip || true"
44
+ :resizable="data.col.resizable || true"
45
+ >
46
+ <template #default="scope">
47
+ <component
48
+ :is="data.component(h, scope)"
49
+ :scope="scope"
50
+ ></component>
51
+ </template>
52
+ <template #header="header">
53
+ <component
54
+ :is="headerVue(header)"
55
+ :header="header"
56
+ ></component>
57
+ </template>
58
+ </el-table-column>
59
+ <el-table-column
60
+ v-else-if="!data.hide"
61
+ v-bind="data.col"
62
+ :align="data.col.align || 'center'"
63
+ :showOverflowTooltip="data.col.showOverflowTooltip || true"
64
+ :resizable="data.col.resizable || true"
65
+ >
66
+ <template #header="header">
67
+ <component
68
+ :is="headerVue(header)"
69
+ :header="header"
70
+ ></component>
71
+ </template>
72
+ </el-table-column>
73
+ </template>
74
+ <script setup lang="ts">
75
+ import { Scope, SortColumn } from './interface'
76
+ import { h } from 'vue'
77
+ defineOptions({
78
+ name: 'sortable-table-column-cell',
79
+ })
80
+
81
+ const props = defineProps<{
82
+ data: SortColumn
83
+ }>()
84
+ const headerVue = (header: Pick<Scope<any>, '$index' | 'column'>) => {
85
+ const item = props.data.header?.(h, header)
86
+ if (!item) return h('div', props.data.col.label)
87
+ if (typeof item === 'string') return h('div', item)
88
+ return item
89
+ }
90
+ </script>
91
+ <style scoped></style>
@@ -0,0 +1,72 @@
1
+ <template>
2
+ <el-table-column
3
+ v-if="!data.hide && data.children"
4
+ v-bind="data.col"
5
+ >
6
+ <sortable-table-column-cell
7
+ v-for="v in data.children || []"
8
+ :key="v.key"
9
+ :data="v"
10
+ />
11
+ </el-table-column>
12
+ <el-table-column
13
+ v-else-if="!data.hide && data.scope"
14
+ v-bind="data.col"
15
+ >
16
+ <template #default="scope">
17
+ {{ data.scope(scope) }}
18
+ </template>
19
+ <template #header="header">
20
+ <component
21
+ :is="headerVue(header)"
22
+ :header="header"
23
+ ></component>
24
+ </template>
25
+ </el-table-column>
26
+ <el-table-column
27
+ v-else-if="!data.hide && data.component"
28
+ v-bind="data.col"
29
+ >
30
+ <template #default="scope">
31
+ <component
32
+ :is="data.component(h, scope)"
33
+ :scope="scope"
34
+ ></component>
35
+ </template>
36
+ <template #header="header">
37
+ <component
38
+ :is="headerVue(header)"
39
+ :header="header"
40
+ ></component>
41
+ </template>
42
+ </el-table-column>
43
+ <el-table-column
44
+ v-else-if="!data.hide"
45
+ v-bind="data.col"
46
+ >
47
+ <template #header="header">
48
+ <component
49
+ :is="headerVue(header)"
50
+ :header="header"
51
+ ></component>
52
+ </template>
53
+ </el-table-column>
54
+ </template>
55
+ <script setup lang="ts">
56
+ import { Scope, SortColumn } from './interface'
57
+ import { h } from 'vue'
58
+ defineOptions({
59
+ name: 'sortable-table-column-cell',
60
+ })
61
+
62
+ const props = defineProps<{
63
+ data: SortColumn
64
+ }>()
65
+ const headerVue = (header: Pick<Scope<any>, '$index' | 'column'>) => {
66
+ const item = props.data.header?.(h, header)
67
+ if (!item) return h('div', props.data.col.label)
68
+ if (typeof item === 'string') return h('div', item)
69
+ return item
70
+ }
71
+ </script>
72
+ <style scoped></style>
@@ -0,0 +1,164 @@
1
+ <!-- 2023-12-29 新增显示/隐藏按钮 -->
2
+
3
+ <template>
4
+ <draggable
5
+ class="drag-container"
6
+ :list="modelValue"
7
+ chosen-class="hover"
8
+ handle=".mover"
9
+ draggable=".item"
10
+ itemKey="key"
11
+ >
12
+ <template
13
+ #item="{ element, index }: { element: SortColumn; index: number }"
14
+ >
15
+ <div :class="{ item: true, 'item-hide': element.hide }">
16
+ <div class="mover">
17
+ <el-icon :size="16"><Rank /></el-icon>
18
+ </div>
19
+ <div
20
+ class="title"
21
+ @click="handleShow(element)"
22
+ >
23
+ {{ element.col.label }}
24
+ </div>
25
+ <div
26
+ class="pin"
27
+ v-if="showPin"
28
+ >
29
+ <span
30
+ v-if="element.col.fixed === true || element.col.fixed === 'left'"
31
+ @click="element.col.fixed = void 0"
32
+ >
33
+ <svg-icon
34
+ name="regular-left"
35
+ size="20"
36
+ color="#2C93FF"
37
+ ></svg-icon>
38
+ </span>
39
+ <span
40
+ v-else
41
+ @click="element.col.fixed = 'left'"
42
+ >
43
+ <svg-icon
44
+ name="regular-center"
45
+ size="20"
46
+ ></svg-icon>
47
+ </span>
48
+ <span
49
+ v-if="element.col.fixed === 'right'"
50
+ @click="element.col.fixed = void 0"
51
+ >
52
+ <svg-icon
53
+ name="regular-right"
54
+ size="20"
55
+ color="#2C93FF"
56
+ ></svg-icon>
57
+ </span>
58
+ <span
59
+ v-else
60
+ @click="element.col.fixed = 'right'"
61
+ >
62
+ <svg-icon
63
+ name="regular-center"
64
+ size="20"
65
+ ></svg-icon>
66
+ </span>
67
+ </div>
68
+ <div class="ifshow">
69
+ <el-button
70
+ :type="element.hide ? 'primary' : ''"
71
+ @click="handleShow(element)"
72
+ size="small"
73
+ >
74
+ {{ element.hide ? '显示' : '隐藏' }}
75
+ </el-button>
76
+ </div>
77
+ <sortable-table-drag-item
78
+ v-if="element.children"
79
+ v-model="element.children"
80
+ />
81
+ </div>
82
+ </template>
83
+ </draggable>
84
+ </template>
85
+ <script setup lang="ts">
86
+ import SvgIcon from '@/components/SvgIcon.vue'
87
+ import { computed } from 'vue'
88
+ import draggable from 'vuedraggable'
89
+ import { SortColumn, SortableTableIns } from './interface'
90
+ import { Rank } from '@element-plus/icons-vue'
91
+ const props = defineProps<{
92
+ modelValue: SortableTableIns['modelValue']
93
+ showPin?: boolean
94
+ }>()
95
+ const emits = defineEmits(['update:modelValue', 'update:data'])
96
+ const modelValue = computed({
97
+ get() {
98
+ return props.modelValue
99
+ },
100
+ set(value) {
101
+ emits('update:modelValue', value)
102
+ },
103
+ })
104
+
105
+ // 显示或者隐藏列
106
+ const handleShow = (col: SortColumn) => {
107
+ // console.log('显示或者隐藏列', col)
108
+ col.hide = !col.hide
109
+ }
110
+ </script>
111
+ <style scoped lang="scss">
112
+ $hoverBC: rgba(137, 182, 233, 0.5);
113
+
114
+ .drag-container {
115
+ display: flex;
116
+ width: 100%;
117
+ flex-direction: column;
118
+
119
+ .item {
120
+ border: 1px solid #f2f2f2;
121
+ display: flex;
122
+ align-items: center;
123
+ white-space: nowrap;
124
+ width: 100%;
125
+ .mover,
126
+ .title {
127
+ padding: 5px;
128
+ cursor: pointer;
129
+ &:hover {
130
+ background: $hoverBC;
131
+ }
132
+ }
133
+ .title {
134
+ width: 150px;
135
+ border-left: 1px solid #f2f2f2;
136
+ border-right: 1px solid #f2f2f2;
137
+ overflow: hidden;
138
+ }
139
+ .pin {
140
+ cursor: pointer;
141
+ > *:hover {
142
+ background: $hoverBC;
143
+ }
144
+ > * {
145
+ padding: 5px;
146
+ }
147
+ }
148
+ .ifshow {
149
+ text-align: center;
150
+ flex: 1;
151
+ line-height: 32px;
152
+ .el-button {
153
+ margin-bottom: 0;
154
+ }
155
+ }
156
+ }
157
+ .item-hide {
158
+ background: rgba(218, 218, 218, 0.5);
159
+ }
160
+ .hover {
161
+ background: $hoverBC;
162
+ }
163
+ }
164
+ </style>
@@ -0,0 +1,144 @@
1
+ <!-- @format -->
2
+
3
+ <template>
4
+ <draggable
5
+ class="drag-container"
6
+ :list="modelValue"
7
+ chosen-class="hover"
8
+ handle=".mover"
9
+ draggable=".item"
10
+ itemKey="key"
11
+ >
12
+ <template
13
+ #item="{ element, index }: { element: SortColumn; index: number }"
14
+ >
15
+ <div :class="{ item: true, 'item-hide': element.hide }">
16
+ <div class="mover">
17
+ <el-icon :size="16"><Rank /></el-icon>
18
+ </div>
19
+ <div
20
+ class="title"
21
+ @click="element.hide = !element.hide"
22
+ >
23
+ {{ element.col.label }}
24
+ </div>
25
+ <div
26
+ class="pin"
27
+ v-if="showPin"
28
+ >
29
+ <span
30
+ v-if="element.col.fixed === true || element.col.fixed === 'left'"
31
+ @click="element.col.fixed = void 0"
32
+ >
33
+ <!-- <el-icon color="#409EFC" class="no-inherit" > <StarFilled /> </el-icon> -->
34
+ <svg-icon
35
+ name="regular-left"
36
+ size="20"
37
+ color="#2C93FF"
38
+ ></svg-icon>
39
+ </span>
40
+ <span
41
+ v-else
42
+ @click="element.col.fixed = 'left'"
43
+ >
44
+ <!-- <el-icon color="#000000" class="no-inherit"><Star /></el-icon> -->
45
+ <svg-icon
46
+ name="regular-center"
47
+ size="20"
48
+ ></svg-icon>
49
+ </span>
50
+ <span
51
+ v-if="element.col.fixed === 'right'"
52
+ @click="element.col.fixed = void 0"
53
+ >
54
+ <!-- <el-icon color="#409EFC" class="no-inherit"> <StarFilled /> </el-icon> -->
55
+ <svg-icon
56
+ name="regular-right"
57
+ size="20"
58
+ color="#2C93FF"
59
+ ></svg-icon>
60
+ </span>
61
+ <span
62
+ v-else
63
+ @click="element.col.fixed = 'right'"
64
+ >
65
+ <!-- <el-icon color="#000000" class="no-inherit"><Star /></el-icon> -->
66
+ <svg-icon
67
+ name="regular-center"
68
+ size="20"
69
+ ></svg-icon>
70
+ </span>
71
+ </div>
72
+ <sortable-table-drag-item
73
+ v-if="element.children"
74
+ v-model="element.children"
75
+ />
76
+ </div>
77
+ </template>
78
+ </draggable>
79
+ </template>
80
+ <script setup lang="ts">
81
+ import SvgIcon from '@/components/SvgIcon.vue'
82
+ import { computed } from 'vue'
83
+ import draggable from 'vuedraggable'
84
+ import { SortColumn, SortableTableIns } from './interface'
85
+ import { Rank } from '@element-plus/icons-vue'
86
+ const props = defineProps<{
87
+ modelValue: SortableTableIns['modelValue']
88
+ showPin?: boolean
89
+ }>()
90
+ const emits = defineEmits(['update:modelValue', 'update:data'])
91
+ const modelValue = computed({
92
+ get() {
93
+ return props.modelValue
94
+ },
95
+ set(value) {
96
+ emits('update:modelValue', value)
97
+ },
98
+ })
99
+ </script>
100
+ <style scoped lang="scss">
101
+ $hoverBC: rgba(137, 182, 233, 0.5);
102
+
103
+ .drag-container {
104
+ display: flex;
105
+ width: 100%;
106
+ flex-direction: column;
107
+
108
+ .item {
109
+ border: 1px solid #f2f2f2;
110
+ display: flex;
111
+ align-items: center;
112
+ white-space: nowrap;
113
+ .mover,
114
+ .title {
115
+ padding: 5px;
116
+ cursor: pointer;
117
+ &:hover {
118
+ background: $hoverBC;
119
+ }
120
+ }
121
+ .title {
122
+ width: 150px;
123
+ border-left: 1px solid #f2f2f2;
124
+ border-right: 1px solid #f2f2f2;
125
+ overflow: hidden;
126
+ }
127
+ .pin {
128
+ cursor: pointer;
129
+ > *:hover {
130
+ background: $hoverBC;
131
+ }
132
+ > * {
133
+ padding: 5px;
134
+ }
135
+ }
136
+ }
137
+ .item-hide {
138
+ background: rgba(218, 218, 218, 0.5);
139
+ }
140
+ .hover {
141
+ background: $hoverBC;
142
+ }
143
+ }
144
+ </style>
@@ -0,0 +1,9 @@
1
+ import { SortColumn } from './interface'
2
+
3
+ export const setKey = (data: SortColumn[], path: number[] = []) => {
4
+ data.forEach((v, i) => {
5
+ const path_ = [...path, i]
6
+ v.key = path_.join('_')
7
+ if (v.children) setKey(v.children, path_)
8
+ })
9
+ }
@@ -0,0 +1 @@
1
+ export { default as withInstall } from './withinstall/index';
@@ -0,0 +1,12 @@
1
+ import type { App, Plugin } from 'vue';
2
+ export type SFCWithInstall<T> = T & Plugin;
3
+ export default <T>(comp: T) => {
4
+ (comp as SFCWithInstall<T>).install = (app: App) => {
5
+ // 当组件是 script setup 的形式时,会自动以为文件名注册,会挂载到组件的__name 属性上
6
+ // 所以要加上这个条件
7
+ const name = (comp as any).name || (comp as any).__name;
8
+ //注册组件
9
+ app.component(name, comp as SFCWithInstall<T>);
10
+ };
11
+ return comp as SFCWithInstall<T>;
12
+ };
package/vite.config.ts ADDED
@@ -0,0 +1,76 @@
1
+ /// <reference types="vitest" />
2
+ import { defineConfig } from 'vite';
3
+ import vue from '@vitejs/plugin-vue';
4
+ import dts from 'vite-plugin-dts';
5
+ // @ts-ignore
6
+ import DefineOptions from 'unplugin-vue-define-options/vite';
7
+ export default defineConfig({
8
+ test: {
9
+ environment: 'happy-dom'
10
+ },
11
+ build: {
12
+ //压缩
13
+ //minify: false,
14
+ rollupOptions: {
15
+ //忽略不需要打包的文件和组件库
16
+ external: ['vue', /\.less/, '@easyest/utils', 'element-plus'],
17
+ input: ['index.ts'],
18
+ output: [
19
+ {
20
+ //打包格式
21
+ format: 'es',
22
+ //打包后文件名
23
+ entryFileNames: '[name].mjs',
24
+ //让打包目录和我们目录对应
25
+ preserveModules: true,
26
+ exports: 'named',
27
+ //配置打包根目录
28
+ dir: '../easyest/es'
29
+ },
30
+ {
31
+ //打包格式
32
+ format: 'cjs',
33
+ //打包后文件名
34
+ entryFileNames: '[name].js',
35
+ //让打包目录和我们目录对应
36
+ preserveModules: true,
37
+ exports: 'named',
38
+ //配置打包根目录
39
+ dir: '../easyest/lib'
40
+ }
41
+ ]
42
+ },
43
+ lib: {
44
+ entry: './index.ts',
45
+ name: 'easyest'
46
+ }
47
+ },
48
+ plugins: [
49
+ vue(),
50
+ dts({
51
+ entryRoot: 'src',
52
+ outputDir: ['../easyest/es/src', '../easyest/lib/src'],
53
+ //指定使用的tsconfig.json为我们整个项目根目录下,如果不配置,你也可以在components下新建tsconfig.json
54
+ tsConfigFilePath: '../../tsconfig.json'
55
+ }),
56
+ DefineOptions(),
57
+ {
58
+ name: 'style',
59
+ generateBundle(config, bundle) {
60
+ //这里可以获取打包后的文件目录以及代码code
61
+ const keys = Object.keys(bundle);
62
+
63
+ for (const key of keys) {
64
+ const bundler: any = bundle[key as any];
65
+ //rollup内置方法,将所有输出文件code中的.less换成.css,因为我们当时没有打包less文件
66
+
67
+ this.emitFile({
68
+ type: 'asset',
69
+ fileName: key, //文件名名不变
70
+ source: bundler.code.replace(/\.less/g, '.css')
71
+ });
72
+ }
73
+ }
74
+ }
75
+ ]
76
+ });