zyf-model-engine 0.0.1 → 0.1.0
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/index.cjs +293 -0
- package/index.d.mts +1 -0
- package/index.d.ts +1 -0
- package/index.mjs +21645 -0
- package/package.json +29 -99
- package/style.css +1 -0
- package/types/components/CSvgIcon/components/SvgPathIcon.vue.d.ts +9 -0
- package/types/components/CSvgIcon/defaultIcons.d.ts +23 -0
- package/types/components/CSvgIcon/index.vue.d.ts +30 -0
- package/types/components/Empty/index.vue.d.ts +16 -0
- package/types/components/Overflow/index.vue.d.ts +11 -0
- package/types/components/UtilsMenu/components/BaseInfo/index.vue.d.ts +122 -0
- package/types/components/UtilsMenu/components/Card/index.vue.d.ts +42 -0
- package/types/components/UtilsMenu/components/ComInfo/index.vue.d.ts +128 -0
- package/types/components/UtilsMenu/components/Config/index.vue.d.ts +8 -0
- package/types/components/UtilsMenu/components/Cutting/clipping.d.ts +56 -0
- package/types/components/UtilsMenu/components/Cutting/index.vue.d.ts +128 -0
- package/types/components/UtilsMenu/components/Measure/index.vue.d.ts +122 -0
- package/types/components/UtilsMenu/components/Measure/interface/index.d.ts +5 -0
- package/types/components/UtilsMenu/components/Measure/measure.d.ts +106 -0
- package/types/components/UtilsMenu/components/ModelTree/index.vue.d.ts +875 -0
- package/types/components/UtilsMenu/components/ModelTree/interface/index.d.ts +19 -0
- package/types/components/UtilsMenu/components/ModelTree/utils/index.d.ts +13 -0
- package/types/components/UtilsMenu/components/Roam/index.vue.d.ts +125 -0
- package/types/components/UtilsMenu/components/SubMenu/index.vue.d.ts +18 -0
- package/types/components/UtilsMenu/index.vue.d.ts +15 -0
- package/types/components/UtilsMenu/interface/index.d.ts +129 -0
- package/types/index-dxf.vue.d.ts +15 -0
- package/types/index.d.ts +209 -0
- package/types/index.vue.d.ts +18 -0
- package/types/libs/CFace.d.ts +16 -0
- package/types/libs/CLabel.d.ts +13 -0
- package/types/libs/CLine.d.ts +49 -0
- package/types/libs/CText.d.ts +17 -0
- package/types/libs/MathUtils.d.ts +26 -0
- package/types/libs/ViewCube.d.ts +21 -0
- package/types/libs/materials.d.ts +4 -0
- package/types/libs/svg.d.ts +26 -0
- package/types/libs/types.d.ts +177 -0
- package/types/main.d.ts +22 -0
- package/types/manager/highLightMeshManager.d.ts +31 -0
- package/types/manager/lightManager.d.ts +35 -0
- package/types/manager/rayCasterManager.d.ts +18 -0
- package/types/tools/Events.d.ts +15 -0
- package/types/tools/math.d.ts +13 -0
- package/types/vendor/DXFPaser/BatchingKey.d.ts +25 -0
- package/types/vendor/DXFPaser/DxfFetcher.d.ts +6 -0
- package/types/vendor/DXFPaser/DxfScene.d.ts +95 -0
- package/types/vendor/DXFPaser/DxfWorker.d.ts +44 -0
- package/types/vendor/DXFPaser/DynamicBuffer.d.ts +30 -0
- package/types/vendor/DXFPaser/Entity.d.ts +18 -0
- package/types/vendor/DXFPaser/MTextFormatParser.d.ts +15 -0
- package/types/vendor/DXFPaser/MaterialKey.d.ts +8 -0
- package/types/vendor/DXFPaser/RBTree.d.ts +5 -0
- package/types/vendor/DXFPaser/TextRenderer.d.ts +43 -0
- package/types/vendor/DXFPaser/index.d.ts +26 -0
- package/types/vendor/controls/BaseArrow.d.ts +20 -0
- package/types/vendor/controls/FirstPersonControls.d.ts +32 -0
- package/types/vendor/controls/FlyControls.d.ts +18 -0
- package/types/vendor/controls/OrbitControls.d.ts +75 -0
- package/types/vendor/controls/TransformControls.d.ts +41 -0
- package/types/vendor/controls/directionControls.d.ts +26 -0
- package/types/vendor/loaders/GLTFLoader.d.ts +71 -0
- package/types/workbench/DxfViewer.d.ts +16 -0
- package/types/workbench/clickInfo.d.ts +24 -0
- package/types/workbench/clipping.d.ts +62 -0
- package/types/workbench/dxfMeasure.d.ts +92 -0
- package/types/workbench/dxfTools.d.ts +78 -0
- package/types/workbench/functionalComponent.d.ts +127 -0
- package/types/workbench/modelTree.d.ts +89 -0
- package/.editorconfig +0 -15
- package/.env +0 -13
- package/.env.development +0 -20
- package/.env.production +0 -25
- package/.env.test +0 -25
- package/.eslintignore +0 -15
- package/.eslintrc-auto-import.json +0 -65
- package/.eslintrc.cjs +0 -66
- package/.husky/commit-msg +0 -4
- package/.husky/pre-commit +0 -5
- package/.prettierignore +0 -9
- package/.prettierrc.cjs +0 -41
- package/.stylelintignore +0 -4
- package/.stylelintrc.cjs +0 -40
- package/.vscode/extensions.json +0 -14
- package/.vscode/settings.json +0 -92
- package/CHANGELOG.md +0 -246
- package/LICENSE +0 -21
- package/README.md +0 -205
- package/auto-imports.d.ts +0 -132
- package/build/getEnv.ts +0 -46
- package/build/plugins.ts +0 -138
- package/build/proxy.ts +0 -28
- package/commitlint.config.cjs +0 -84
- package/components.d.ts +0 -28
- package/index.html +0 -105
- package/lint-staged.config.cjs +0 -8
- package/postcss.config.cjs +0 -5
- package/public/logo.png +0 -0
- package/src/App.vue +0 -16
- package/src/api/config/servicePort.ts +0 -3
- package/src/api/enums/httpEnum.ts +0 -35
- package/src/api/helper/axiosCancel.ts +0 -50
- package/src/api/helper/axiosFileCancel.ts +0 -62
- package/src/api/helper/checkStatus.ts +0 -97
- package/src/api/index.ts +0 -142
- package/src/api/interface/index.ts +0 -27
- package/src/assets/global-icons/icon-demo.svg +0 -1
- package/src/assets/iconfont/iconfont.scss +0 -44
- package/src/assets/iconfont/iconfont.ttf +0 -0
- package/src/assets/images/empty-img.png +0 -0
- package/src/assets/option-icons/add.svg +0 -1
- package/src/assets/option-icons/check.svg +0 -1
- package/src/assets/option-icons/config.svg +0 -1
- package/src/assets/option-icons/del.svg +0 -1
- package/src/assets/option-icons/detail.svg +0 -1
- package/src/assets/option-icons/edit.svg +0 -2
- package/src/assets/option-icons/export.svg +0 -1
- package/src/assets/option-icons/folder.svg +0 -1
- package/src/assets/option-icons/full-screen.svg +0 -1
- package/src/assets/option-icons/more.svg +0 -1
- package/src/assets/option-icons/return.svg +0 -1
- package/src/assets/option-icons/search.svg +0 -1
- package/src/components/CSvgIcon/index.scss +0 -23
- package/src/components/CSvgIcon/index.vue +0 -74
- package/src/components/CTree/index.scss +0 -48
- package/src/components/CTree/index.vue +0 -176
- package/src/components/CTree/interface/index.ts +0 -6
- package/src/components/Dialog/index.scss +0 -74
- package/src/components/Dialog/index.vue +0 -87
- package/src/components/Empty/index.scss +0 -16
- package/src/components/Empty/index.vue +0 -43
- package/src/components/Grid/components/GridItem.vue +0 -68
- package/src/components/Grid/index.vue +0 -167
- package/src/components/Grid/interface/index.ts +0 -6
- package/src/components/Loading/index.scss +0 -67
- package/src/components/Loading/index.vue +0 -13
- package/src/components/Overflow/index.vue +0 -76
- package/src/components/ProTable/components/ColSetting.vue +0 -45
- package/src/components/ProTable/components/Pagination.vue +0 -29
- package/src/components/ProTable/components/SearchForm/components/SearchFormItem.vue +0 -93
- package/src/components/ProTable/components/SearchForm/index.scss +0 -12
- package/src/components/ProTable/components/SearchForm/index.vue +0 -91
- package/src/components/ProTable/components/TableColumn.vue +0 -56
- package/src/components/ProTable/index.scss +0 -14
- package/src/components/ProTable/index.vue +0 -274
- package/src/components/ProTable/interface/index.ts +0 -86
- package/src/components/ScrollBox/index.vue +0 -44
- package/src/components/SvgIcon/index.vue +0 -20
- package/src/components/Tabs/index.vue +0 -142
- package/src/config/index.ts +0 -12
- package/src/config/nprogress.ts +0 -12
- package/src/config/piniaPersist.ts +0 -19
- package/src/config/serviceLoading.ts +0 -45
- package/src/enums/httpEnum.ts +0 -24
- package/src/hooks/interface/index.ts +0 -32
- package/src/hooks/useOnline.ts +0 -27
- package/src/hooks/useTable.ts +0 -167
- package/src/main.ts +0 -35
- package/src/plugins/button/button.vue +0 -56
- package/src/plugins/index.js +0 -26
- package/src/plugins/index.vue +0 -24
- package/src/plugins/msg/msg.vue +0 -56
- package/src/stores/commonStore.ts +0 -9
- package/src/stores/index.ts +0 -8
- package/src/stores/interface/index.ts +0 -1
- package/src/styles/common.scss +0 -87
- package/src/styles/element.scss +0 -233
- package/src/styles/reset.scss +0 -20
- package/src/styles/var.scss +0 -2
- package/src/typings/global.d.ts +0 -37
- package/src/typings/window.d.ts +0 -8
- package/src/utils/color.ts +0 -59
- package/src/utils/commonUtils.ts +0 -175
- package/src/utils/errorHandler.ts +0 -28
- package/src/utils/is.ts +0 -147
- package/src/utils/layoutUtils.ts +0 -83
- package/src/utils/localUtils.ts +0 -42
- package/src/utils/serviceDict.ts +0 -9
- package/src/vite-env.d.ts +0 -6
- package/tsconfig.json +0 -50
- package/vite.config.ts +0 -76
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
.loading-box {
|
|
2
|
-
display: flex;
|
|
3
|
-
flex-direction: column;
|
|
4
|
-
align-items: center;
|
|
5
|
-
justify-content: center;
|
|
6
|
-
width: 100%;
|
|
7
|
-
height: 100%;
|
|
8
|
-
.loading-wrap {
|
|
9
|
-
display: flex;
|
|
10
|
-
align-items: center;
|
|
11
|
-
justify-content: center;
|
|
12
|
-
padding: 98px;
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
.dot {
|
|
16
|
-
position: relative;
|
|
17
|
-
box-sizing: border-box;
|
|
18
|
-
display: inline-block;
|
|
19
|
-
width: 32px;
|
|
20
|
-
height: 32px;
|
|
21
|
-
font-size: 32px;
|
|
22
|
-
transform: rotate(45deg);
|
|
23
|
-
animation: ant-rotate 1.2s infinite linear;
|
|
24
|
-
}
|
|
25
|
-
.dot i {
|
|
26
|
-
position: absolute;
|
|
27
|
-
display: block;
|
|
28
|
-
width: 14px;
|
|
29
|
-
height: 14px;
|
|
30
|
-
background-color: var(--el-color-primary);
|
|
31
|
-
border-radius: 100%;
|
|
32
|
-
opacity: 0.3;
|
|
33
|
-
transform: scale(0.75);
|
|
34
|
-
transform-origin: 50% 50%;
|
|
35
|
-
animation: ant-spin-move 1s infinite linear alternate;
|
|
36
|
-
}
|
|
37
|
-
.dot i:nth-child(1) {
|
|
38
|
-
top: 0;
|
|
39
|
-
left: 0;
|
|
40
|
-
}
|
|
41
|
-
.dot i:nth-child(2) {
|
|
42
|
-
top: 0;
|
|
43
|
-
right: 0;
|
|
44
|
-
animation-delay: 0.4s;
|
|
45
|
-
}
|
|
46
|
-
.dot i:nth-child(3) {
|
|
47
|
-
right: 0;
|
|
48
|
-
bottom: 0;
|
|
49
|
-
animation-delay: 0.8s;
|
|
50
|
-
}
|
|
51
|
-
.dot i:nth-child(4) {
|
|
52
|
-
bottom: 0;
|
|
53
|
-
left: 0;
|
|
54
|
-
animation-delay: 1.2s;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
@keyframes ant-rotate {
|
|
58
|
-
to {
|
|
59
|
-
transform: rotate(405deg);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
@keyframes ant-spin-move {
|
|
64
|
-
to {
|
|
65
|
-
opacity: 1;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div class="loading-box">
|
|
3
|
-
<div class="loading-wrap">
|
|
4
|
-
<span class="dot dot-spin"><i></i><i></i><i></i><i></i></span>
|
|
5
|
-
</div>
|
|
6
|
-
</div>
|
|
7
|
-
</template>
|
|
8
|
-
|
|
9
|
-
<script setup lang="ts" name="Loading"></script>
|
|
10
|
-
|
|
11
|
-
<style scoped lang="scss">
|
|
12
|
-
@import "./index.scss";
|
|
13
|
-
</style>
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<el-tooltip
|
|
3
|
-
popper-class="custom-over-flow"
|
|
4
|
-
:visible="isShowTooltip"
|
|
5
|
-
:content="text.toString()"
|
|
6
|
-
effect="light"
|
|
7
|
-
placement="top"
|
|
8
|
-
:enterable="enterable"
|
|
9
|
-
:hide-after="100"
|
|
10
|
-
>
|
|
11
|
-
<div class="text" :style="customStyle" @mouseenter="e => showTooltip(e)" @mouseout="hideTooltip">
|
|
12
|
-
{{ text }}
|
|
13
|
-
</div>
|
|
14
|
-
</el-tooltip>
|
|
15
|
-
</template>
|
|
16
|
-
|
|
17
|
-
<script setup lang="ts">
|
|
18
|
-
const props = defineProps({
|
|
19
|
-
text: {
|
|
20
|
-
type: [String, Number],
|
|
21
|
-
default: () => "-"
|
|
22
|
-
},
|
|
23
|
-
customStyle: {
|
|
24
|
-
type: [String, Object],
|
|
25
|
-
default: () => ""
|
|
26
|
-
},
|
|
27
|
-
enterable: {
|
|
28
|
-
type: Boolean,
|
|
29
|
-
default: () => true
|
|
30
|
-
}
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
const isShowTooltip = ref(false);
|
|
34
|
-
|
|
35
|
-
const showTooltip = (e: any) => {
|
|
36
|
-
isShowTooltip.value = textRange(e.target);
|
|
37
|
-
};
|
|
38
|
-
const hideTooltip = () => {
|
|
39
|
-
isShowTooltip.value = false;
|
|
40
|
-
};
|
|
41
|
-
|
|
42
|
-
const textRange = (el: any) => {
|
|
43
|
-
const textContent = el;
|
|
44
|
-
const targetW = textContent.getBoundingClientRect().width;
|
|
45
|
-
const range = document.createRange();
|
|
46
|
-
range.setStart(textContent, 0);
|
|
47
|
-
range.setEnd(textContent, textContent.childNodes.length);
|
|
48
|
-
const rangeWidth = range.getBoundingClientRect().width;
|
|
49
|
-
return rangeWidth > targetW;
|
|
50
|
-
};
|
|
51
|
-
</script>
|
|
52
|
-
<style lang="scss" scoped>
|
|
53
|
-
.text {
|
|
54
|
-
box-sizing: border-box;
|
|
55
|
-
flex: 1;
|
|
56
|
-
max-width: 100%;
|
|
57
|
-
overflow: hidden;
|
|
58
|
-
text-overflow: ellipsis;
|
|
59
|
-
white-space: nowrap;
|
|
60
|
-
vertical-align: middle;
|
|
61
|
-
> * {
|
|
62
|
-
vertical-align: middle;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
p {
|
|
66
|
-
margin: 0;
|
|
67
|
-
}
|
|
68
|
-
</style>
|
|
69
|
-
<style lang="scss">
|
|
70
|
-
.custom-over-flow {
|
|
71
|
-
> span:nth-child(1) {
|
|
72
|
-
display: inline-block;
|
|
73
|
-
max-width: 800px !important;
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
</style>
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<!-- 列设置 -->
|
|
3
|
-
<el-drawer v-model="drawerVisible" title="列设置" size="450px">
|
|
4
|
-
<div class="table-main">
|
|
5
|
-
<el-table :data="colSetting" :border="true" row-key="prop" default-expand-all :tree-props="{ children: '_children' }">
|
|
6
|
-
<el-table-column prop="label" align="center" label="列名" />
|
|
7
|
-
<el-table-column v-slot="scope" prop="isShow" align="center" label="显示">
|
|
8
|
-
<el-switch v-model="scope.row.isShow"></el-switch>
|
|
9
|
-
</el-table-column>
|
|
10
|
-
<el-table-column v-slot="scope" prop="sortable" align="center" label="排序">
|
|
11
|
-
<el-switch v-model="scope.row.sortable"></el-switch>
|
|
12
|
-
</el-table-column>
|
|
13
|
-
<template #empty>
|
|
14
|
-
<div class="table-empty">
|
|
15
|
-
<img src="@/assets/images/notData.png" alt="notData" />
|
|
16
|
-
<div>暂无可配置列</div>
|
|
17
|
-
</div>
|
|
18
|
-
</template>
|
|
19
|
-
</el-table>
|
|
20
|
-
</div>
|
|
21
|
-
</el-drawer>
|
|
22
|
-
</template>
|
|
23
|
-
|
|
24
|
-
<script setup lang="ts" name="ColSetting">
|
|
25
|
-
import { ref } from "vue";
|
|
26
|
-
import { ColumnProps } from "@/components/ProTable/interface";
|
|
27
|
-
|
|
28
|
-
defineProps<{ colSetting: ColumnProps[] }>();
|
|
29
|
-
|
|
30
|
-
const drawerVisible = ref<boolean>(false);
|
|
31
|
-
|
|
32
|
-
const openColSetting = () => {
|
|
33
|
-
drawerVisible.value = true;
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
defineExpose({
|
|
37
|
-
openColSetting
|
|
38
|
-
});
|
|
39
|
-
</script>
|
|
40
|
-
|
|
41
|
-
<style scoped lang="scss">
|
|
42
|
-
.cursor-move {
|
|
43
|
-
cursor: move;
|
|
44
|
-
}
|
|
45
|
-
</style>
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<!-- 分页组件 -->
|
|
3
|
-
<el-pagination
|
|
4
|
-
:background="true"
|
|
5
|
-
:current-page="pageable.page"
|
|
6
|
-
:page-size="pageable.limit"
|
|
7
|
-
:page-sizes="[10, 25, 50, 100]"
|
|
8
|
-
:total="pageable.total"
|
|
9
|
-
layout="total, sizes, prev, pager, next, jumper"
|
|
10
|
-
@size-change="handleSizeChange"
|
|
11
|
-
@current-change="handleCurrentChange"
|
|
12
|
-
></el-pagination>
|
|
13
|
-
</template>
|
|
14
|
-
|
|
15
|
-
<script setup lang="ts" name="Pagination">
|
|
16
|
-
interface Pageable {
|
|
17
|
-
page: number;
|
|
18
|
-
limit: number;
|
|
19
|
-
total: number;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
interface PaginationProps {
|
|
23
|
-
pageable: Pageable;
|
|
24
|
-
handleSizeChange: (size: number) => void;
|
|
25
|
-
handleCurrentChange: (currentPage: number) => void;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
defineProps<PaginationProps>();
|
|
29
|
-
</script>
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<component
|
|
3
|
-
:is="_column.search?.render ?? `el-${_column.search?.el}`"
|
|
4
|
-
v-bind="{ ...handleSearchProps, ...placeholder, searchParam: _searchParam, clearable }"
|
|
5
|
-
v-model.trim="_searchParam[_column.search?.key ?? handleProp(_column.prop!)]"
|
|
6
|
-
:data="_column.search?.el === 'tree-select' ? columnEnum : []"
|
|
7
|
-
:options="['cascader', 'select-v2'].includes(_column.search?.el!) ? columnEnum : []"
|
|
8
|
-
>
|
|
9
|
-
<template v-if="_column.search?.el === 'cascader'" #default="{ data }">
|
|
10
|
-
<span>{{ data[fieldNames.label] }}</span>
|
|
11
|
-
</template>
|
|
12
|
-
<template v-if="_column.search?.el === 'select'">
|
|
13
|
-
<component
|
|
14
|
-
:is="`el-option`"
|
|
15
|
-
v-for="(col, index) in columnEnum"
|
|
16
|
-
:key="index"
|
|
17
|
-
:label="col[fieldNames.label]"
|
|
18
|
-
:value="col[fieldNames.value]"
|
|
19
|
-
></component>
|
|
20
|
-
</template>
|
|
21
|
-
<slot v-else></slot>
|
|
22
|
-
</component>
|
|
23
|
-
</template>
|
|
24
|
-
|
|
25
|
-
<script setup lang="ts" name="SearchFormItem">
|
|
26
|
-
import { computed, inject, ref } from "vue";
|
|
27
|
-
import { handleProp } from "@/utils/layoutUtils";
|
|
28
|
-
import { ColumnProps } from "@/components/ProTable/interface";
|
|
29
|
-
|
|
30
|
-
interface SearchFormItem {
|
|
31
|
-
column: ColumnProps;
|
|
32
|
-
searchParam: { [key: string]: any };
|
|
33
|
-
}
|
|
34
|
-
const props = defineProps<SearchFormItem>();
|
|
35
|
-
|
|
36
|
-
// Re receive SearchParam
|
|
37
|
-
const _searchParam = computed(() => props.searchParam);
|
|
38
|
-
const _column = computed(() => props.column);
|
|
39
|
-
|
|
40
|
-
// 判断 fieldNames 设置 label && value && children 的 key 值
|
|
41
|
-
const fieldNames = computed(() => {
|
|
42
|
-
return {
|
|
43
|
-
label: props.column.fieldNames?.label ?? "name",
|
|
44
|
-
value: props.column.fieldNames?.value ?? "id",
|
|
45
|
-
children: props.column.fieldNames?.children ?? "children"
|
|
46
|
-
};
|
|
47
|
-
});
|
|
48
|
-
|
|
49
|
-
// 接收 enumMap (el 为 select-v2 需单独处理 enumData)
|
|
50
|
-
const enumMap = inject("enumMap", ref(new Map()));
|
|
51
|
-
const columnEnum = computed(() => {
|
|
52
|
-
let enumData = enumMap.value.get(props.column.prop);
|
|
53
|
-
if (!enumData) return [];
|
|
54
|
-
if (props.column.search?.el === "select-v2" && props.column.fieldNames) {
|
|
55
|
-
enumData = enumData.map((item: { [key: string]: any }) => {
|
|
56
|
-
return { ...item, label: item[fieldNames.value.label], value: item[fieldNames.value.value] };
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
return enumData;
|
|
60
|
-
});
|
|
61
|
-
|
|
62
|
-
// 处理透传的 searchProps (el 为 tree-select、cascader 的时候需要给下默认 label && value && children)
|
|
63
|
-
const handleSearchProps = computed(() => {
|
|
64
|
-
const label = fieldNames.value.label;
|
|
65
|
-
const value = fieldNames.value.value;
|
|
66
|
-
const children = fieldNames.value.children;
|
|
67
|
-
const searchEl = props.column.search?.el;
|
|
68
|
-
let searchProps = props.column.search?.props ?? {};
|
|
69
|
-
if (searchEl === "tree-select") {
|
|
70
|
-
searchProps = { ...searchProps, props: { ...searchProps.props, label, children }, nodeKey: value };
|
|
71
|
-
}
|
|
72
|
-
if (searchEl === "cascader") {
|
|
73
|
-
searchProps = { ...searchProps, props: { ...searchProps.props, label, value, children } };
|
|
74
|
-
}
|
|
75
|
-
return searchProps;
|
|
76
|
-
});
|
|
77
|
-
|
|
78
|
-
// 处理默认 placeholder
|
|
79
|
-
const placeholder = computed(() => {
|
|
80
|
-
const search = props.column.search;
|
|
81
|
-
if (["datetimerange", "daterange", "monthrange"].includes(search?.props?.type) || search?.props?.isRange) {
|
|
82
|
-
return { rangeSeparator: "至", startPlaceholder: "开始时间", endPlaceholder: "结束时间" };
|
|
83
|
-
}
|
|
84
|
-
const placeholder = search?.props?.placeholder ?? (search?.el?.includes("input") ? "请输入" : "请选择") + props.column.label;
|
|
85
|
-
return { placeholder };
|
|
86
|
-
});
|
|
87
|
-
|
|
88
|
-
// 是否有清除按钮 (当搜索项有默认值时,清除按钮不显示)
|
|
89
|
-
const clearable = computed(() => {
|
|
90
|
-
const search = props.column.search;
|
|
91
|
-
return search?.props?.clearable ?? (search?.defaultValue == null || search?.defaultValue == undefined);
|
|
92
|
-
});
|
|
93
|
-
</script>
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div v-if="columns.length" class="table-search" :class="{ card: useCard }">
|
|
3
|
-
<el-form ref="formRef" :model="searchParam">
|
|
4
|
-
<Grid ref="gridRef" :collapsed="collapsed" :gap="[20, 20]" :cols="searchCol">
|
|
5
|
-
<GridItem v-for="(item, index) in columns" :key="item.prop" v-bind="getResponsive(item)" :index="index">
|
|
6
|
-
<!-- :label="`${item.label} :`" -->
|
|
7
|
-
<el-form-item>
|
|
8
|
-
<SearchFormItem :column="item" :search-param="searchParam" />
|
|
9
|
-
</el-form-item>
|
|
10
|
-
</GridItem>
|
|
11
|
-
<GridItem suffix>
|
|
12
|
-
<div class="operation">
|
|
13
|
-
<el-button type="primary" :icon="Search" @click="search"> 搜索 </el-button>
|
|
14
|
-
<el-button :icon="Delete" @click="reset"> 重置 </el-button>
|
|
15
|
-
<el-button v-if="showCollapse" type="primary" link class="search-isOpen" @click="collapsed = !collapsed">
|
|
16
|
-
{{ collapsed ? "展开" : "合并" }}
|
|
17
|
-
<el-icon class="el-icon--right">
|
|
18
|
-
<component :is="collapsed ? ArrowDown : ArrowUp"></component>
|
|
19
|
-
</el-icon>
|
|
20
|
-
</el-button>
|
|
21
|
-
</div>
|
|
22
|
-
</GridItem>
|
|
23
|
-
</Grid>
|
|
24
|
-
</el-form>
|
|
25
|
-
</div>
|
|
26
|
-
</template>
|
|
27
|
-
<script setup lang="ts" name="SearchForm">
|
|
28
|
-
import { computed, ref } from "vue";
|
|
29
|
-
import { ColumnProps } from "@/components/ProTable/interface";
|
|
30
|
-
import { BreakPoint } from "@/components/Grid/interface";
|
|
31
|
-
import { Delete, Search, ArrowDown, ArrowUp } from "@element-plus/icons-vue";
|
|
32
|
-
import SearchFormItem from "./components/SearchFormItem.vue";
|
|
33
|
-
import Grid from "@/components/Grid/index.vue";
|
|
34
|
-
import GridItem from "@/components/Grid/components/GridItem.vue";
|
|
35
|
-
|
|
36
|
-
interface ProTableProps {
|
|
37
|
-
useCard?: boolean; // 是否启用卡片样式
|
|
38
|
-
columns?: ColumnProps[]; // 搜索配置列
|
|
39
|
-
searchParam?: { [key: string]: any }; // 搜索参数
|
|
40
|
-
searchCol: number | Record<BreakPoint, number>;
|
|
41
|
-
search: (params: any) => void; // 搜索方法
|
|
42
|
-
reset: (params: any) => void; // 重置方法
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
// 默认值
|
|
46
|
-
const props = withDefaults(defineProps<ProTableProps>(), {
|
|
47
|
-
useCard: true,
|
|
48
|
-
columns: () => [],
|
|
49
|
-
searchParam: () => ({})
|
|
50
|
-
});
|
|
51
|
-
|
|
52
|
-
// 获取响应式设置
|
|
53
|
-
const getResponsive = (item: ColumnProps) => {
|
|
54
|
-
return {
|
|
55
|
-
span: item.search?.span,
|
|
56
|
-
offset: item.search?.offset ?? 0,
|
|
57
|
-
xs: item.search?.xs,
|
|
58
|
-
sm: item.search?.sm,
|
|
59
|
-
md: item.search?.md,
|
|
60
|
-
lg: item.search?.lg,
|
|
61
|
-
xl: item.search?.xl
|
|
62
|
-
};
|
|
63
|
-
};
|
|
64
|
-
|
|
65
|
-
// 是否默认折叠搜索项
|
|
66
|
-
const collapsed = ref(true);
|
|
67
|
-
|
|
68
|
-
// 获取响应式断点
|
|
69
|
-
const gridRef = ref();
|
|
70
|
-
const breakPoint = computed<BreakPoint>(() => gridRef.value?.breakPoint);
|
|
71
|
-
|
|
72
|
-
// 判断是否显示 展开/合并 按钮
|
|
73
|
-
const showCollapse = computed(() => {
|
|
74
|
-
let show = false;
|
|
75
|
-
props.columns.reduce((prev, current) => {
|
|
76
|
-
prev +=
|
|
77
|
-
(current.search![breakPoint.value]?.span ?? current.search?.span ?? 1) +
|
|
78
|
-
(current.search![breakPoint.value]?.offset ?? current.search?.offset ?? 0);
|
|
79
|
-
if (typeof props.searchCol !== "number") {
|
|
80
|
-
if (prev >= props.searchCol[breakPoint.value]) show = true;
|
|
81
|
-
} else {
|
|
82
|
-
if (prev >= props.searchCol) show = true;
|
|
83
|
-
}
|
|
84
|
-
return prev;
|
|
85
|
-
}, 0);
|
|
86
|
-
return show;
|
|
87
|
-
});
|
|
88
|
-
</script>
|
|
89
|
-
<style lang="scss" scoped>
|
|
90
|
-
@import "./index.scss";
|
|
91
|
-
</style>
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<RenderTableColumn v-bind="{ ..._column }" />
|
|
3
|
-
</template>
|
|
4
|
-
|
|
5
|
-
<script setup lang="tsx" name="TableColumn">
|
|
6
|
-
import { inject, ref, useSlots } from "vue";
|
|
7
|
-
import { ColumnProps, RenderScope, HeaderRenderScope } from "@/components/ProTable/interface";
|
|
8
|
-
import { filterEnum, formatValue, handleProp, handleRowAccordingToProp } from "@/utils/layoutUtils";
|
|
9
|
-
|
|
10
|
-
const props = defineProps<{ column: ColumnProps }>();
|
|
11
|
-
const _column = computed(() => props.column);
|
|
12
|
-
const slots = useSlots();
|
|
13
|
-
|
|
14
|
-
const enumMap = inject("enumMap", ref(new Map()));
|
|
15
|
-
|
|
16
|
-
// 渲染表格数据
|
|
17
|
-
const renderCellData = (item: ColumnProps, scope: RenderScope<any>) => {
|
|
18
|
-
return enumMap.value.get(item.prop) && item.isFilterEnum
|
|
19
|
-
? filterEnum(handleRowAccordingToProp(scope.row, item.prop!), enumMap.value.get(item.prop)!, item.fieldNames)
|
|
20
|
-
: formatValue(handleRowAccordingToProp(scope.row, item.prop!));
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
// 获取 tag 类型
|
|
24
|
-
const getTagType = (item: ColumnProps, scope: RenderScope<any>) => {
|
|
25
|
-
return filterEnum(handleRowAccordingToProp(scope.row, item.prop!), enumMap.value.get(item.prop), item.fieldNames, "tag");
|
|
26
|
-
};
|
|
27
|
-
// 渲染表格行
|
|
28
|
-
const RenderTableColumn = (item: ColumnProps) => {
|
|
29
|
-
return (
|
|
30
|
-
<>
|
|
31
|
-
{item.isShow && (
|
|
32
|
-
<el-table-column
|
|
33
|
-
{...item}
|
|
34
|
-
align={item.align ?? "center"}
|
|
35
|
-
showOverflowTooltip={item.showOverflowTooltip ?? item.prop !== "operation"}
|
|
36
|
-
>
|
|
37
|
-
{{
|
|
38
|
-
default: (scope: RenderScope<any>) => {
|
|
39
|
-
if (item._children) return item._children.map(child => RenderTableColumn(child));
|
|
40
|
-
if (item.render) return item.render(scope);
|
|
41
|
-
if (slots[handleProp(item.prop!)]) return slots[handleProp(item.prop!)]!(scope);
|
|
42
|
-
if (item.tag) return <el-tag type={getTagType(item, scope)}>{renderCellData(item, scope)}</el-tag>;
|
|
43
|
-
return renderCellData(item, scope);
|
|
44
|
-
},
|
|
45
|
-
header: (scope: HeaderRenderScope<any>) => {
|
|
46
|
-
if (item.headerRender) return item.headerRender(scope);
|
|
47
|
-
if (slots[`${handleProp(item.prop!)}Header`]) return slots[`${handleProp(item.prop!)}Header`]!(scope);
|
|
48
|
-
return item.label;
|
|
49
|
-
}
|
|
50
|
-
}}
|
|
51
|
-
</el-table-column>
|
|
52
|
-
)}
|
|
53
|
-
</>
|
|
54
|
-
);
|
|
55
|
-
};
|
|
56
|
-
</script>
|