@smallwei/avue 3.8.1 → 3.8.3
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/README.md +206 -86
- package/dist/avue.js +37301 -0
- package/dist/avue.js.map +1 -0
- package/dist/avue.min.js +6 -0
- package/dist/avue.min.mjs +2 -0
- package/dist/avue.mjs +2 -0
- package/dist/index.css +1 -0
- package/es/avue.min.mjs +2 -0
- package/es/avue.min.ts +2 -0
- package/es/avue.mjs +2 -0
- package/es/avue.ts +2 -0
- package/es/core/create.mjs +8 -0
- package/es/core/create.ts +16 -0
- package/es/core/dataformat.mjs +184 -0
- package/es/core/dataformat.ts +190 -0
- package/es/core/detail.mjs +74 -0
- package/es/core/detail.ts +81 -0
- package/es/core/dic.mjs +213 -0
- package/es/core/dic.ts +235 -0
- package/es/core/locale.mjs +8 -0
- package/es/core/locale.ts +9 -0
- package/es/core/packages.mjs +61 -0
- package/es/core/packages.ts +62 -0
- package/es/core/slot.mjs +32 -0
- package/es/core/slot.ts +30 -0
- package/es/global/variable.mjs +80 -0
- package/es/global/variable.ts +84 -0
- package/es/icon.mjs +9 -0
- package/es/icon.ts +11 -0
- package/es/index.mjs +127 -0
- package/es/index.ts +177 -0
- package/es/locale/browser/en.mjs +288 -0
- package/es/locale/browser/zh-cn.mjs +288 -0
- package/es/locale/browser/zh.mjs +288 -0
- package/es/locale/index.mjs +141 -0
- package/es/locale/index.ts +196 -0
- package/es/locale/lang/en.mjs +282 -0
- package/es/locale/lang/en.ts +282 -0
- package/es/locale/lang/zh-cn.mjs +282 -0
- package/es/locale/lang/zh-cn.ts +282 -0
- package/es/locale/lang/zh.mjs +282 -0
- package/es/locale/lang/zh.ts +282 -0
- package/es/packages/core/common/event.mjs +58 -0
- package/es/packages/core/common/event.ts +56 -0
- package/es/packages/core/common/init.mjs +134 -0
- package/es/packages/core/common/init.ts +133 -0
- package/es/packages/core/common/props.mjs +239 -0
- package/es/packages/core/common/props.ts +240 -0
- package/es/packages/core/components/dialog-form/index.mjs +29 -0
- package/es/packages/core/components/dialog-form/index.ts +29 -0
- package/es/packages/core/components/dialog-form/index.vue +108 -0
- package/es/packages/core/components/form/custom.mjs +41 -0
- package/es/packages/core/components/form/custom.ts +41 -0
- package/es/packages/core/components/form/index.vue +176 -0
- package/es/packages/core/components/icon/index.vue +37 -0
- package/es/packages/core/components/image-preview/index.mjs +34 -0
- package/es/packages/core/components/image-preview/index.ts +37 -0
- package/es/packages/core/components/image-preview/index.vue +215 -0
- package/es/packages/core/directive/contextmenu.mjs +92 -0
- package/es/packages/core/directive/contextmenu.ts +103 -0
- package/es/packages/core/directive/permission.mjs +19 -0
- package/es/packages/core/directive/permission.ts +18 -0
- package/es/packages/data/box/index.vue +66 -0
- package/es/packages/data/card/index.vue +62 -0
- package/es/packages/data/cardText/index.vue +56 -0
- package/es/packages/data/countdown/index.vue +81 -0
- package/es/packages/data/dashboard/index.vue +72 -0
- package/es/packages/data/display/index.vue +63 -0
- package/es/packages/data/icons/index.vue +68 -0
- package/es/packages/data/imgText/index.vue +72 -0
- package/es/packages/data/list/index.vue +69 -0
- package/es/packages/data/notice/index.vue +63 -0
- package/es/packages/data/operaText/index.vue +62 -0
- package/es/packages/data/panel/index.vue +62 -0
- package/es/packages/data/pay/index.vue +92 -0
- package/es/packages/data/price/index.vue +55 -0
- package/es/packages/data/product/index.vue +106 -0
- package/es/packages/data/profile/index.vue +91 -0
- package/es/packages/data/progress/index.vue +64 -0
- package/es/packages/data/rank/index.vue +92 -0
- package/es/packages/data/rotate/index.vue +69 -0
- package/es/packages/data/statistic/index.vue +71 -0
- package/es/packages/data/tabs/index.vue +64 -0
- package/es/packages/data/task/index.vue +82 -0
- package/es/packages/data/weather/index.vue +103 -0
- package/es/packages/element-plus/array/index.vue +115 -0
- package/es/packages/element-plus/article/index.vue +73 -0
- package/es/packages/element-plus/card/index.vue +103 -0
- package/es/packages/element-plus/cascader/index.vue +132 -0
- package/es/packages/element-plus/chat/index.vue +513 -0
- package/es/packages/element-plus/checkbox/index.vue +84 -0
- package/es/packages/element-plus/comment/index.vue +76 -0
- package/es/packages/element-plus/count-up/index.vue +107 -0
- package/es/packages/element-plus/crud/column/column-default.vue +128 -0
- package/es/packages/element-plus/crud/column/column-dynamic.vue +86 -0
- package/es/packages/element-plus/crud/column/column-menu.vue +267 -0
- package/es/packages/element-plus/crud/column/column-slot.vue +348 -0
- package/es/packages/element-plus/crud/column/column.vue +119 -0
- package/es/packages/element-plus/crud/column/menu.vue +78 -0
- package/es/packages/element-plus/crud/config.mjs +74 -0
- package/es/packages/element-plus/crud/config.ts +74 -0
- package/es/packages/element-plus/crud/dialog/dialog-column.vue +102 -0
- package/es/packages/element-plus/crud/dialog/dialog-excel.vue +204 -0
- package/es/packages/element-plus/crud/dialog/dialog-filter.vue +159 -0
- package/es/packages/element-plus/crud/dialog/dialog-form.vue +352 -0
- package/es/packages/element-plus/crud/grid/index.vue +271 -0
- package/es/packages/element-plus/crud/grid/item.vue +39 -0
- package/es/packages/element-plus/crud/index.vue +1018 -0
- package/es/packages/element-plus/crud/menu/header-menu.vue +175 -0
- package/es/packages/element-plus/crud/menu/header-search.vue +228 -0
- package/es/packages/element-plus/crud/menu/table-page.vue +108 -0
- package/es/packages/element-plus/date/index.vue +81 -0
- package/es/packages/element-plus/draggable/index.vue +444 -0
- package/es/packages/element-plus/dynamic/index.vue +353 -0
- package/es/packages/element-plus/flow/index.vue +339 -0
- package/es/packages/element-plus/flow/node.vue +84 -0
- package/es/packages/element-plus/form/config.mjs +6 -0
- package/es/packages/element-plus/form/config.ts +6 -0
- package/es/packages/element-plus/form/index.vue +954 -0
- package/es/packages/element-plus/form/menu.vue +63 -0
- package/es/packages/element-plus/group/index.vue +90 -0
- package/es/packages/element-plus/input/index.vue +1264 -0
- package/es/packages/element-plus/input-color/index.vue +70 -0
- package/es/packages/element-plus/input-cron/index.vue +363 -0
- package/es/packages/element-plus/input-icon/index.vue +143 -0
- package/es/packages/element-plus/input-map/index.vue +311 -0
- package/es/packages/element-plus/input-number/index.vue +91 -0
- package/es/packages/element-plus/input-table/index.vue +279 -0
- package/es/packages/element-plus/input-tag/index.vue +79 -0
- package/es/packages/element-plus/input-tree/index.vue +194 -0
- package/es/packages/element-plus/license/index.vue +155 -0
- package/es/packages/element-plus/login/index.vue +203 -0
- package/es/packages/element-plus/mention/index.vue +117 -0
- package/es/packages/element-plus/radio/index.vue +38 -0
- package/es/packages/element-plus/rate/index.vue +51 -0
- package/es/packages/element-plus/search/index.vue +129 -0
- package/es/packages/element-plus/select/index.vue +292 -0
- package/es/packages/element-plus/sign/index.vue +230 -0
- package/es/packages/element-plus/slider/index.vue +66 -0
- package/es/packages/element-plus/switch/index.vue +72 -0
- package/es/packages/element-plus/tabs/index.vue +62 -0
- package/es/packages/element-plus/text-ellipsis/index.vue +104 -0
- package/es/packages/element-plus/time/index.vue +81 -0
- package/es/packages/element-plus/title/index.vue +30 -0
- package/es/packages/element-plus/tree/index.vue +460 -0
- package/es/packages/element-plus/upload/index.vue +728 -0
- package/es/packages/element-plus/verify/index.vue +62 -0
- package/es/packages/element-plus/video/index.vue +90 -0
- package/es/plugin/ali/index.mjs +4 -0
- package/es/plugin/ali/index.ts +6 -0
- package/es/plugin/clipboard/index.mjs +61 -0
- package/es/plugin/clipboard/index.ts +67 -0
- package/es/plugin/export/_blob.mjs +151 -0
- package/es/plugin/export/_blob.ts +176 -0
- package/es/plugin/export/_export2Excel.mjs +141 -0
- package/es/plugin/export/_export2Excel.ts +166 -0
- package/es/plugin/export/index.mjs +263 -0
- package/es/plugin/export/index.ts +274 -0
- package/es/plugin/logs/index.mjs +46 -0
- package/es/plugin/logs/index.ts +66 -0
- package/es/plugin/print/index.mjs +145 -0
- package/es/plugin/print/index.ts +155 -0
- package/es/plugin/qiniu/index.mjs +78 -0
- package/es/plugin/qiniu/index.ts +88 -0
- package/es/plugin/screenshot/index.mjs +8 -0
- package/es/plugin/screenshot/index.ts +9 -0
- package/es/plugin/video/index.mjs +52 -0
- package/es/plugin/video/index.ts +60 -0
- package/es/plugin/watermark/index.mjs +114 -0
- package/es/plugin/watermark/index.ts +127 -0
- package/es/plugin/watermark/watermark.mjs +109 -0
- package/es/plugin/watermark/watermark.ts +121 -0
- package/es/ui/data/index.mjs +49 -0
- package/es/ui/data/index.ts +51 -0
- package/es/ui/element-plus/index.mjs +87 -0
- package/es/ui/element-plus/index.ts +89 -0
- package/es/ui/index.mjs +4 -0
- package/es/ui/index.ts +6 -0
- package/es/utils/bem.mjs +29 -0
- package/es/utils/bem.ts +36 -0
- package/es/utils/mock.mjs +137 -0
- package/es/utils/mock.ts +151 -0
- package/es/utils/util.mjs +370 -0
- package/es/utils/util.ts +392 -0
- package/es/utils/validate.mjs +18 -0
- package/es/utils/validate.ts +23 -0
- package/es/version.mjs +1 -0
- package/es/version.ts +1 -0
- package/lib/avue.js +11 -31398
- package/lib/avue.min.js +11 -6
- package/lib/avue.min.ts +2 -0
- package/lib/avue.ts +2 -0
- package/lib/core/create.js +14 -0
- package/lib/core/create.ts +16 -0
- package/lib/core/dataformat.js +194 -0
- package/lib/core/dataformat.ts +190 -0
- package/lib/core/detail.js +81 -0
- package/lib/core/detail.ts +81 -0
- package/lib/core/dic.js +220 -0
- package/lib/core/dic.ts +235 -0
- package/lib/core/locale.js +10 -0
- package/lib/core/locale.ts +9 -0
- package/lib/core/packages.js +66 -0
- package/lib/core/packages.ts +62 -0
- package/lib/core/slot.js +34 -0
- package/lib/core/slot.ts +30 -0
- package/lib/global/variable.js +83 -0
- package/lib/global/variable.ts +84 -0
- package/lib/icon.js +44 -0
- package/lib/icon.ts +11 -0
- package/lib/index.css +1 -1
- package/lib/index.js +134 -0
- package/lib/index.ts +177 -0
- package/lib/locale/browser/en.js +288 -0
- package/lib/locale/browser/zh-cn.js +288 -0
- package/lib/locale/browser/zh.js +288 -0
- package/lib/locale/index.js +153 -47
- package/lib/locale/index.ts +196 -0
- package/lib/locale/lang/en.js +284 -100
- package/lib/locale/lang/en.ts +282 -0
- package/lib/locale/lang/zh-cn.js +284 -0
- package/lib/locale/lang/zh-cn.ts +282 -0
- package/lib/locale/lang/zh.js +284 -100
- package/lib/locale/lang/zh.ts +282 -0
- package/lib/packages/core/common/event.js +61 -0
- package/lib/packages/core/common/event.ts +56 -0
- package/lib/packages/core/common/init.js +140 -0
- package/lib/packages/core/common/init.ts +133 -0
- package/lib/packages/core/common/props.js +245 -0
- package/lib/packages/core/common/props.ts +240 -0
- package/lib/packages/core/components/dialog-form/index.js +35 -0
- package/lib/packages/core/components/dialog-form/index.ts +29 -0
- package/lib/packages/core/components/dialog-form/index.vue +108 -0
- package/lib/packages/core/components/form/custom.js +43 -0
- package/lib/packages/core/components/form/custom.ts +41 -0
- package/lib/packages/core/components/form/index.vue +176 -0
- package/lib/packages/core/components/icon/index.vue +37 -0
- package/lib/packages/core/components/image-preview/index.js +40 -0
- package/lib/packages/core/components/image-preview/index.ts +37 -0
- package/lib/packages/core/components/image-preview/index.vue +215 -0
- package/lib/packages/core/directive/contextmenu.js +94 -0
- package/lib/packages/core/directive/contextmenu.ts +103 -0
- package/lib/packages/core/directive/permission.js +21 -0
- package/lib/packages/core/directive/permission.ts +18 -0
- package/lib/packages/data/box/index.vue +66 -0
- package/lib/packages/data/card/index.vue +62 -0
- package/lib/packages/data/cardText/index.vue +56 -0
- package/lib/packages/data/countdown/index.vue +81 -0
- package/lib/packages/data/dashboard/index.vue +72 -0
- package/lib/packages/data/display/index.vue +63 -0
- package/lib/packages/data/icons/index.vue +68 -0
- package/lib/packages/data/imgText/index.vue +72 -0
- package/lib/packages/data/list/index.vue +69 -0
- package/lib/packages/data/notice/index.vue +63 -0
- package/lib/packages/data/operaText/index.vue +62 -0
- package/lib/packages/data/panel/index.vue +62 -0
- package/lib/packages/data/pay/index.vue +92 -0
- package/lib/packages/data/price/index.vue +55 -0
- package/lib/packages/data/product/index.vue +106 -0
- package/lib/packages/data/profile/index.vue +91 -0
- package/lib/packages/data/progress/index.vue +64 -0
- package/lib/packages/data/rank/index.vue +92 -0
- package/lib/packages/data/rotate/index.vue +69 -0
- package/lib/packages/data/statistic/index.vue +71 -0
- package/lib/packages/data/tabs/index.vue +64 -0
- package/lib/packages/data/task/index.vue +82 -0
- package/lib/packages/data/weather/index.vue +103 -0
- package/lib/packages/element-plus/array/index.vue +115 -0
- package/lib/packages/element-plus/article/index.vue +73 -0
- package/lib/packages/element-plus/card/index.vue +103 -0
- package/lib/packages/element-plus/cascader/index.vue +132 -0
- package/lib/packages/element-plus/chat/index.vue +513 -0
- package/lib/packages/element-plus/checkbox/index.vue +84 -0
- package/lib/packages/element-plus/comment/index.vue +76 -0
- package/lib/packages/element-plus/count-up/index.vue +107 -0
- package/lib/packages/element-plus/crud/column/column-default.vue +128 -0
- package/lib/packages/element-plus/crud/column/column-dynamic.vue +86 -0
- package/lib/packages/element-plus/crud/column/column-menu.vue +267 -0
- package/lib/packages/element-plus/crud/column/column-slot.vue +348 -0
- package/lib/packages/element-plus/crud/column/column.vue +119 -0
- package/lib/packages/element-plus/crud/column/menu.vue +78 -0
- package/lib/packages/element-plus/crud/config.js +76 -0
- package/lib/packages/element-plus/crud/config.ts +74 -0
- package/lib/packages/element-plus/crud/dialog/dialog-column.vue +102 -0
- package/lib/packages/element-plus/crud/dialog/dialog-excel.vue +204 -0
- package/lib/packages/element-plus/crud/dialog/dialog-filter.vue +159 -0
- package/lib/packages/element-plus/crud/dialog/dialog-form.vue +352 -0
- package/lib/packages/element-plus/crud/grid/index.vue +271 -0
- package/lib/packages/element-plus/crud/grid/item.vue +39 -0
- package/lib/packages/element-plus/crud/index.vue +1018 -0
- package/lib/packages/element-plus/crud/menu/header-menu.vue +175 -0
- package/lib/packages/element-plus/crud/menu/header-search.vue +228 -0
- package/lib/packages/element-plus/crud/menu/table-page.vue +108 -0
- package/lib/packages/element-plus/date/index.vue +81 -0
- package/lib/packages/element-plus/draggable/index.vue +444 -0
- package/lib/packages/element-plus/dynamic/index.vue +353 -0
- package/lib/packages/element-plus/flow/index.vue +339 -0
- package/lib/packages/element-plus/flow/node.vue +84 -0
- package/lib/packages/element-plus/form/config.js +8 -0
- package/lib/packages/element-plus/form/config.ts +6 -0
- package/lib/packages/element-plus/form/index.vue +954 -0
- package/lib/packages/element-plus/form/menu.vue +63 -0
- package/lib/packages/element-plus/group/index.vue +90 -0
- package/lib/packages/element-plus/input/index.vue +1264 -0
- package/lib/packages/element-plus/input-color/index.vue +70 -0
- package/lib/packages/element-plus/input-cron/index.vue +363 -0
- package/lib/packages/element-plus/input-icon/index.vue +143 -0
- package/lib/packages/element-plus/input-map/index.vue +311 -0
- package/lib/packages/element-plus/input-number/index.vue +91 -0
- package/lib/packages/element-plus/input-table/index.vue +279 -0
- package/lib/packages/element-plus/input-tag/index.vue +79 -0
- package/lib/packages/element-plus/input-tree/index.vue +194 -0
- package/lib/packages/element-plus/license/index.vue +155 -0
- package/lib/packages/element-plus/login/index.vue +203 -0
- package/lib/packages/element-plus/mention/index.vue +117 -0
- package/lib/packages/element-plus/radio/index.vue +38 -0
- package/lib/packages/element-plus/rate/index.vue +51 -0
- package/lib/packages/element-plus/search/index.vue +129 -0
- package/lib/packages/element-plus/select/index.vue +292 -0
- package/lib/packages/element-plus/sign/index.vue +230 -0
- package/lib/packages/element-plus/slider/index.vue +66 -0
- package/lib/packages/element-plus/switch/index.vue +72 -0
- package/lib/packages/element-plus/tabs/index.vue +62 -0
- package/lib/packages/element-plus/text-ellipsis/index.vue +104 -0
- package/lib/packages/element-plus/time/index.vue +81 -0
- package/lib/packages/element-plus/title/index.vue +30 -0
- package/lib/packages/element-plus/tree/index.vue +460 -0
- package/lib/packages/element-plus/upload/index.vue +728 -0
- package/lib/packages/element-plus/verify/index.vue +62 -0
- package/lib/packages/element-plus/video/index.vue +90 -0
- package/lib/plugin/ali/index.js +8 -0
- package/lib/plugin/ali/index.ts +6 -0
- package/lib/plugin/clipboard/index.js +64 -0
- package/lib/plugin/clipboard/index.ts +67 -0
- package/lib/plugin/export/_blob.js +151 -0
- package/lib/plugin/export/_blob.ts +176 -0
- package/lib/plugin/export/_export2Excel.js +145 -0
- package/lib/plugin/export/_export2Excel.ts +166 -0
- package/lib/plugin/export/index.js +268 -0
- package/lib/plugin/export/index.ts +274 -0
- package/lib/plugin/logs/index.js +48 -0
- package/lib/plugin/logs/index.ts +66 -0
- package/lib/plugin/print/index.js +147 -0
- package/lib/plugin/print/index.ts +155 -0
- package/lib/plugin/qiniu/index.js +82 -0
- package/lib/plugin/qiniu/index.ts +88 -0
- package/lib/plugin/screenshot/index.js +14 -0
- package/lib/plugin/screenshot/index.ts +9 -0
- package/lib/plugin/video/index.js +55 -0
- package/lib/plugin/video/index.ts +60 -0
- package/lib/plugin/watermark/index.js +121 -0
- package/lib/plugin/watermark/index.ts +127 -0
- package/lib/plugin/watermark/watermark.js +111 -0
- package/lib/plugin/watermark/watermark.ts +121 -0
- package/lib/ui/data/index.js +54 -0
- package/lib/ui/data/index.ts +51 -0
- package/lib/ui/element-plus/index.js +92 -0
- package/lib/ui/element-plus/index.ts +89 -0
- package/lib/ui/index.js +9 -0
- package/lib/ui/index.ts +6 -0
- package/lib/utils/bem.js +31 -0
- package/lib/utils/bem.ts +36 -0
- package/lib/utils/mock.js +142 -0
- package/lib/utils/mock.ts +151 -0
- package/lib/utils/util.js +403 -0
- package/lib/utils/util.ts +392 -0
- package/lib/utils/validate.js +21 -0
- package/lib/utils/validate.ts +23 -0
- package/lib/version.js +4 -0
- package/lib/version.ts +1 -0
- package/package.json +24 -11
- package/types/index.d.ts +141 -0
- package/types/shims-aliases.d.ts +4 -0
- package/types/shims-vue.d.ts +6 -0
- package/lib/avue.js.map +0 -1
- package/lib/locale/format.js +0 -44
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div :class="b()"
|
|
3
|
+
:key="reload">
|
|
4
|
+
<template v-if="isForm">
|
|
5
|
+
<div :class="b('header')">
|
|
6
|
+
<el-button :size="size"
|
|
7
|
+
circle
|
|
8
|
+
v-if="!readonly && !disabled && !addBtn"
|
|
9
|
+
:disabled="disabled"
|
|
10
|
+
type="primary"
|
|
11
|
+
icon="el-icon-plus"
|
|
12
|
+
@click="addRow"></el-button>
|
|
13
|
+
</div>
|
|
14
|
+
<div>
|
|
15
|
+
<div v-for="(item,index) in text"
|
|
16
|
+
:class="b('row')"
|
|
17
|
+
:key="index"
|
|
18
|
+
@mouseenter="cellMouseenter({$index:index})"
|
|
19
|
+
@mouseleave="cellMouseLeave({$index:index})">
|
|
20
|
+
<el-button v-if="!readonly && !disabled && !delBtn && hoverList[index]"
|
|
21
|
+
@click="delRow(item.$index)"
|
|
22
|
+
type="danger"
|
|
23
|
+
:class="b('menu')"
|
|
24
|
+
:size="size"
|
|
25
|
+
:disabled="disabled"
|
|
26
|
+
icon="el-icon-delete"
|
|
27
|
+
circle></el-button>
|
|
28
|
+
<avue-form :key="index"
|
|
29
|
+
ref="main"
|
|
30
|
+
:table-data="{row:text[index],index}"
|
|
31
|
+
:option="option"
|
|
32
|
+
v-bind="$uploadFun(null,this)"
|
|
33
|
+
v-model="text[index]">
|
|
34
|
+
<template #index="{}">
|
|
35
|
+
<span>{{item.$index+1}}</span>
|
|
36
|
+
</template>
|
|
37
|
+
<template v-for="item in columnSlot"
|
|
38
|
+
#[item]="scope">
|
|
39
|
+
<slot v-bind="Object.assign(scope,{
|
|
40
|
+
row:text[index]
|
|
41
|
+
})"
|
|
42
|
+
:name="item"></slot>
|
|
43
|
+
</template>
|
|
44
|
+
</avue-form>
|
|
45
|
+
</div>
|
|
46
|
+
</div>
|
|
47
|
+
</template>
|
|
48
|
+
<avue-crud v-else-if="isCrud"
|
|
49
|
+
ref="main"
|
|
50
|
+
:option="option"
|
|
51
|
+
:disabled="disabled"
|
|
52
|
+
v-bind="$uploadFun(null,this)"
|
|
53
|
+
@cell-mouse-enter="cellMouseenter"
|
|
54
|
+
@cell-mouse-leave="cellMouseLeave"
|
|
55
|
+
@selection-change="handleSelectionChange"
|
|
56
|
+
@sortable-change="handleSortableChange"
|
|
57
|
+
:data="text">
|
|
58
|
+
<template #index-header="{}">
|
|
59
|
+
<el-button v-if="!(addBtn || readonly) && maxFlag"
|
|
60
|
+
@click="addRow()"
|
|
61
|
+
type="primary"
|
|
62
|
+
:size="size"
|
|
63
|
+
:disabled="disabled"
|
|
64
|
+
icon="el-icon-plus"
|
|
65
|
+
circle></el-button>
|
|
66
|
+
</template>
|
|
67
|
+
<template #index="scope">
|
|
68
|
+
<el-button v-if="!readonly && !disabled && !delBtn && hoverList[scope.row.$index]"
|
|
69
|
+
@click="delRow(scope.row.$index)"
|
|
70
|
+
type="danger"
|
|
71
|
+
:size="size"
|
|
72
|
+
:disabled="disabled"
|
|
73
|
+
icon="el-icon-delete"
|
|
74
|
+
circle></el-button>
|
|
75
|
+
<div v-else>{{scope.row.$index+1}}</div>
|
|
76
|
+
</template>
|
|
77
|
+
<template v-for="item in columnSlot"
|
|
78
|
+
#[getSlotName({prop:item},`F`)]="scope">
|
|
79
|
+
<slot v-bind="scope"
|
|
80
|
+
:name="item"></slot>
|
|
81
|
+
</template>
|
|
82
|
+
|
|
83
|
+
</avue-crud>
|
|
84
|
+
</div>
|
|
85
|
+
</template>
|
|
86
|
+
|
|
87
|
+
<script>
|
|
88
|
+
import create from "../../../core/create.mjs";
|
|
89
|
+
import props from "../../core/common/props.mjs";
|
|
90
|
+
import event from "../../core/common/event.mjs";
|
|
91
|
+
import { getColumn } from '../../../utils/util.mjs'
|
|
92
|
+
export default create({
|
|
93
|
+
name: "dynamic",
|
|
94
|
+
mixins: [props(), event()],
|
|
95
|
+
data () {
|
|
96
|
+
return {
|
|
97
|
+
reload: Math.random(),
|
|
98
|
+
hoverList: []
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
props: {
|
|
102
|
+
uploadSized: Function,
|
|
103
|
+
uploadBefore: Function,
|
|
104
|
+
uploadAfter: Function,
|
|
105
|
+
uploadDelete: Function,
|
|
106
|
+
uploadPreview: Function,
|
|
107
|
+
uploadError: Function,
|
|
108
|
+
uploadExceed: Function,
|
|
109
|
+
max: Number,
|
|
110
|
+
boxType: String,
|
|
111
|
+
columnSlot: {
|
|
112
|
+
type: Array,
|
|
113
|
+
default: () => {
|
|
114
|
+
return []
|
|
115
|
+
}
|
|
116
|
+
},
|
|
117
|
+
children: {
|
|
118
|
+
type: Object,
|
|
119
|
+
default: () => {
|
|
120
|
+
return {}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
},
|
|
124
|
+
computed: {
|
|
125
|
+
isAdd () {
|
|
126
|
+
return this.boxType === "add"
|
|
127
|
+
},
|
|
128
|
+
isEdit () {
|
|
129
|
+
return this.boxType === "edit"
|
|
130
|
+
},
|
|
131
|
+
isView () {
|
|
132
|
+
return this.boxType === "view"
|
|
133
|
+
},
|
|
134
|
+
textLen () {
|
|
135
|
+
return this.text.length;
|
|
136
|
+
},
|
|
137
|
+
maxFlag () {
|
|
138
|
+
if (this.max) {
|
|
139
|
+
return !(this.text.length == this.max)
|
|
140
|
+
}
|
|
141
|
+
return true
|
|
142
|
+
},
|
|
143
|
+
showIndex () {
|
|
144
|
+
return this.validData(this.children.index, true)
|
|
145
|
+
},
|
|
146
|
+
showType () {
|
|
147
|
+
return this.children.type || 'crud'
|
|
148
|
+
},
|
|
149
|
+
isForm () {
|
|
150
|
+
return this.showType === 'form'
|
|
151
|
+
},
|
|
152
|
+
isCrud () {
|
|
153
|
+
return this.showType === 'crud'
|
|
154
|
+
},
|
|
155
|
+
selectionChange () {
|
|
156
|
+
return this.children.selectionChange
|
|
157
|
+
},
|
|
158
|
+
sortableChange () {
|
|
159
|
+
return this.children.sortableChange
|
|
160
|
+
},
|
|
161
|
+
rowAdd () {
|
|
162
|
+
return this.children.rowAdd
|
|
163
|
+
},
|
|
164
|
+
rowDel () {
|
|
165
|
+
return this.children.rowDel
|
|
166
|
+
},
|
|
167
|
+
viewBtn () {
|
|
168
|
+
return this.children.viewBtn === false
|
|
169
|
+
},
|
|
170
|
+
addBtn () {
|
|
171
|
+
return this.children.addBtn === false
|
|
172
|
+
},
|
|
173
|
+
delBtn () {
|
|
174
|
+
return this.children.delBtn === false
|
|
175
|
+
},
|
|
176
|
+
valueOption () {
|
|
177
|
+
let result = {};
|
|
178
|
+
this.columnOption.forEach(ele => {
|
|
179
|
+
if (ele.value) {
|
|
180
|
+
result[ele.prop] = ele.value;
|
|
181
|
+
}
|
|
182
|
+
})
|
|
183
|
+
return result;
|
|
184
|
+
},
|
|
185
|
+
rulesOption () {
|
|
186
|
+
let rules = {};
|
|
187
|
+
this.columnOption.forEach(ele => {
|
|
188
|
+
if (ele.rules) {
|
|
189
|
+
rules[ele.prop] = ele.rules;
|
|
190
|
+
}
|
|
191
|
+
})
|
|
192
|
+
return rules;
|
|
193
|
+
},
|
|
194
|
+
columnOption () {
|
|
195
|
+
return getColumn(this.children.column)
|
|
196
|
+
},
|
|
197
|
+
option () {
|
|
198
|
+
// 默认选项
|
|
199
|
+
let options = {
|
|
200
|
+
boxType: this.boxType,
|
|
201
|
+
border: true,
|
|
202
|
+
header: false,
|
|
203
|
+
menu: false,
|
|
204
|
+
size: this.size,
|
|
205
|
+
disabled: this.disabled,
|
|
206
|
+
readonly: this.readonly,
|
|
207
|
+
menuBtn: false,
|
|
208
|
+
};
|
|
209
|
+
|
|
210
|
+
// 处理子选项
|
|
211
|
+
let childOptions = this.deepClone(this.children);
|
|
212
|
+
delete childOptions.column;
|
|
213
|
+
|
|
214
|
+
let columnOption = this.deepClone(this.columnOption);
|
|
215
|
+
const callback = (list) => {
|
|
216
|
+
list.forEach((ele, index) => {
|
|
217
|
+
if (ele.children && Array.isArray(ele.children)) callback(ele.children)
|
|
218
|
+
else {
|
|
219
|
+
list[index] = {
|
|
220
|
+
...ele,
|
|
221
|
+
...{
|
|
222
|
+
hide: this.validData(ele.hide, !this.validParams(ele, 'display', true)),
|
|
223
|
+
disabled: this.validParams(ele, 'disabled', false),
|
|
224
|
+
detail: this.validParams(ele, 'detail', false),
|
|
225
|
+
cell: this.validData(ele.cell, this.isCrud)
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
})
|
|
230
|
+
}
|
|
231
|
+
callback(columnOption)
|
|
232
|
+
// 处理列选项
|
|
233
|
+
columnOption.unshift({
|
|
234
|
+
label: this.children.indexLabel || '#',
|
|
235
|
+
prop: 'index',
|
|
236
|
+
display: this.showIndex,
|
|
237
|
+
hide: !this.showIndex,
|
|
238
|
+
fixed: true,
|
|
239
|
+
align: 'center',
|
|
240
|
+
headerAlign: 'center',
|
|
241
|
+
span: 24,
|
|
242
|
+
width: 60
|
|
243
|
+
})
|
|
244
|
+
|
|
245
|
+
// 返回合并后的选项对象
|
|
246
|
+
return {
|
|
247
|
+
...options,
|
|
248
|
+
...{ column: columnOption },
|
|
249
|
+
...childOptions
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
},
|
|
253
|
+
mounted () {
|
|
254
|
+
this.initData();
|
|
255
|
+
},
|
|
256
|
+
methods: {
|
|
257
|
+
validParams (column, type, value) {
|
|
258
|
+
function replaceStr (str) { // 正则法
|
|
259
|
+
str = str.toLowerCase();
|
|
260
|
+
var reg = /\b(\w)|\s(\w)/g; // \b判断边界\s判断空格
|
|
261
|
+
return str.replace(reg, function (m) {
|
|
262
|
+
return m.toUpperCase()
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
let key, caseKey = replaceStr(type);
|
|
266
|
+
if (!this.validatenull(column[type])) {
|
|
267
|
+
key = type
|
|
268
|
+
} else if (this.isAdd) {
|
|
269
|
+
key = 'add' + caseKey
|
|
270
|
+
} else if (this.isEdit) {
|
|
271
|
+
key = 'edit' + caseKey
|
|
272
|
+
} else if (this.isView) {
|
|
273
|
+
key = 'view' + caseKey
|
|
274
|
+
}
|
|
275
|
+
return this.validData(column[key], value)
|
|
276
|
+
},
|
|
277
|
+
handleTextValue (val) {
|
|
278
|
+
this.initData();
|
|
279
|
+
},
|
|
280
|
+
handleSelectionChange (val) {
|
|
281
|
+
this.selectionChange && this.selectionChange(val);
|
|
282
|
+
},
|
|
283
|
+
handleSortableChange (oldindex, newindex, row, list) {
|
|
284
|
+
this.sortableChange && this.sortableChange(oldindex, newindex, row, list);
|
|
285
|
+
},
|
|
286
|
+
cellMouseenter (row) {
|
|
287
|
+
let index = row.$index;
|
|
288
|
+
this.mouseoverRow(index);
|
|
289
|
+
},
|
|
290
|
+
cellMouseLeave (row, column, cell, event) {
|
|
291
|
+
let index = row.$index;
|
|
292
|
+
this.mouseoutRow(index)
|
|
293
|
+
},
|
|
294
|
+
initData () {
|
|
295
|
+
this.text.forEach((ele, index) => {
|
|
296
|
+
ele = Object.assign(ele, {
|
|
297
|
+
$cellEdit: true,
|
|
298
|
+
$index: index,
|
|
299
|
+
})
|
|
300
|
+
})
|
|
301
|
+
},
|
|
302
|
+
mouseoverRow (index) {
|
|
303
|
+
if (this.delBtn) return
|
|
304
|
+
this.flagList();
|
|
305
|
+
this.hoverList[index] = true;
|
|
306
|
+
},
|
|
307
|
+
mouseoutRow (index) {
|
|
308
|
+
if (this.delBtn) return
|
|
309
|
+
this.flagList();
|
|
310
|
+
this.hoverList[index] = false
|
|
311
|
+
},
|
|
312
|
+
flagList () {
|
|
313
|
+
this.hoverList.forEach((ele, index) => {
|
|
314
|
+
ele = false;
|
|
315
|
+
})
|
|
316
|
+
},
|
|
317
|
+
delRow (index) {
|
|
318
|
+
const callback = () => {
|
|
319
|
+
let list = this.deepClone(this.text)
|
|
320
|
+
list.splice(index, 1);
|
|
321
|
+
this.text = list;
|
|
322
|
+
this.reload = Math.random();
|
|
323
|
+
}
|
|
324
|
+
if (typeof this.rowDel === 'function') {
|
|
325
|
+
this.rowDel(this.text[index], callback);
|
|
326
|
+
} else {
|
|
327
|
+
callback();
|
|
328
|
+
}
|
|
329
|
+
},
|
|
330
|
+
addRow () {
|
|
331
|
+
const callback = (obj = {}) => {
|
|
332
|
+
let row = this.deepClone({
|
|
333
|
+
...this.valueOption,
|
|
334
|
+
...obj,
|
|
335
|
+
...{
|
|
336
|
+
$index: this.textLen
|
|
337
|
+
}
|
|
338
|
+
})
|
|
339
|
+
if (this.isCrud) {
|
|
340
|
+
this.$refs.main.rowCellAdd(row);
|
|
341
|
+
} else if (this.isForm) {
|
|
342
|
+
this.text.push(row)
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
if (typeof this.rowAdd === 'function') {
|
|
346
|
+
this.rowAdd(callback);
|
|
347
|
+
} else {
|
|
348
|
+
callback();
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
});
|
|
353
|
+
</script>
|
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div :class="b()"
|
|
3
|
+
:style="styleName">
|
|
4
|
+
<div :id="id"
|
|
5
|
+
:style="styleName">
|
|
6
|
+
<div class="avue-grid"></div>
|
|
7
|
+
<template v-for="(node,index) in option.nodeList">
|
|
8
|
+
<flow-node :node="node"
|
|
9
|
+
:id="node.id"
|
|
10
|
+
v-if="!node.display"
|
|
11
|
+
@click="handleClick(node)"
|
|
12
|
+
@changeNodeSite="changeNodeSite"
|
|
13
|
+
:index="index"
|
|
14
|
+
:active="active"
|
|
15
|
+
:key="index">
|
|
16
|
+
<template #header="{node}">
|
|
17
|
+
<slot name="header"
|
|
18
|
+
:node="node">
|
|
19
|
+
</slot>
|
|
20
|
+
</template>
|
|
21
|
+
<template #="{node}">
|
|
22
|
+
<slot :node="node"></slot>
|
|
23
|
+
</template>
|
|
24
|
+
</flow-node>
|
|
25
|
+
</template>
|
|
26
|
+
|
|
27
|
+
</div>
|
|
28
|
+
</div>
|
|
29
|
+
</template>
|
|
30
|
+
|
|
31
|
+
<script>
|
|
32
|
+
import create from "../../../core/create.mjs";
|
|
33
|
+
import locale from "../../../core/locale.mjs";
|
|
34
|
+
import flowNode from './node.vue'
|
|
35
|
+
import { randomId } from '../../../utils/util.mjs';
|
|
36
|
+
export default create({
|
|
37
|
+
name: "flow",
|
|
38
|
+
mixins: [locale],
|
|
39
|
+
components: {
|
|
40
|
+
flowNode
|
|
41
|
+
},
|
|
42
|
+
data () {
|
|
43
|
+
return {
|
|
44
|
+
active: '',
|
|
45
|
+
jsPlumb: {},
|
|
46
|
+
id: '',
|
|
47
|
+
// 默认设置参数
|
|
48
|
+
jsplumbSetting: {
|
|
49
|
+
// 动态锚点、位置自适应
|
|
50
|
+
Anchors: ['Top', 'TopCenter', 'TopRight', 'TopLeft', 'Right', 'RightMiddle', 'Bottom', 'BottomCenter', 'BottomRight', 'BottomLeft', 'Left', 'LeftMiddle'],
|
|
51
|
+
Container: '',
|
|
52
|
+
// 连线的样式 StateMachine、Flowchart
|
|
53
|
+
Connector: 'Flowchart',
|
|
54
|
+
// 鼠标不能拖动删除线
|
|
55
|
+
ConnectionsDetachable: false,
|
|
56
|
+
// 删除线的时候节点不删除
|
|
57
|
+
DeleteEndpointsOnDetach: false,
|
|
58
|
+
// 连线的端点
|
|
59
|
+
// Endpoint: ["Dot", {radius: 5}],
|
|
60
|
+
Endpoint: ['Rectangle', { height: 10, width: 10 }],
|
|
61
|
+
// 线端点的样式
|
|
62
|
+
EndpointStyle: { fill: 'rgba(255,255,255,0)', outlineWidth: 1 },
|
|
63
|
+
LogEnabled: true, // 是否打开jsPlumb的内部日志记录
|
|
64
|
+
// 绘制线
|
|
65
|
+
PaintStyle: { stroke: 'black', strokeWidth: 3 },
|
|
66
|
+
// 绘制箭头
|
|
67
|
+
Overlays: [['Arrow', { width: 12, length: 12, location: 1 }]],
|
|
68
|
+
RenderMode: 'svg'
|
|
69
|
+
},
|
|
70
|
+
// jsplumb连接参数
|
|
71
|
+
jsplumbConnectOptions: {
|
|
72
|
+
isSource: true,
|
|
73
|
+
isTarget: true,
|
|
74
|
+
// 动态锚点、提供了4个方向 Continuous、AutoDefault
|
|
75
|
+
anchor: 'Continuous'
|
|
76
|
+
},
|
|
77
|
+
|
|
78
|
+
jsplumbSourceOptions: {
|
|
79
|
+
filter: '.avue-flow__node-drag', /* "span"表示标签,".className"表示类,"#id"表示元素id*/
|
|
80
|
+
filterExclude: false,
|
|
81
|
+
anchor: 'Continuous',
|
|
82
|
+
allowLoopback: false
|
|
83
|
+
},
|
|
84
|
+
jsplumbTargetOptions: {
|
|
85
|
+
filter: '.avue-flow__node-drag', /*"span"表示标签,".className"表示类,"#id"表示元素id */
|
|
86
|
+
filterExclude: false,
|
|
87
|
+
anchor: 'Continuous',
|
|
88
|
+
allowLoopback: false
|
|
89
|
+
},
|
|
90
|
+
loadEasyFlowFinish: false,
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
props: {
|
|
94
|
+
modelValue: {
|
|
95
|
+
type: String,
|
|
96
|
+
default: () => {
|
|
97
|
+
return {}
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
option: {
|
|
101
|
+
type: Object
|
|
102
|
+
},
|
|
103
|
+
width: {
|
|
104
|
+
type: [Number, String],
|
|
105
|
+
default: '100%'
|
|
106
|
+
},
|
|
107
|
+
height: {
|
|
108
|
+
type: [Number, String],
|
|
109
|
+
default: '100%'
|
|
110
|
+
}
|
|
111
|
+
},
|
|
112
|
+
created () {
|
|
113
|
+
this.id = randomId();
|
|
114
|
+
this.jsplumbSetting.Container = this.id;
|
|
115
|
+
},
|
|
116
|
+
mounted () {
|
|
117
|
+
this.init();
|
|
118
|
+
},
|
|
119
|
+
watch: {
|
|
120
|
+
modelValue: {
|
|
121
|
+
handler (val) {
|
|
122
|
+
this.active = val;
|
|
123
|
+
},
|
|
124
|
+
immediate: true
|
|
125
|
+
},
|
|
126
|
+
active (val) {
|
|
127
|
+
this.$emit('update:modelValue', val)
|
|
128
|
+
}
|
|
129
|
+
},
|
|
130
|
+
computed: {
|
|
131
|
+
styleName () {
|
|
132
|
+
return {
|
|
133
|
+
position: 'relative',
|
|
134
|
+
width: this.setPx(this.width),
|
|
135
|
+
height: this.setPx(this.height)
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
},
|
|
139
|
+
methods: {
|
|
140
|
+
init () {
|
|
141
|
+
this.jsPlumb = jsPlumb.getInstance()
|
|
142
|
+
this.$nextTick(() => {
|
|
143
|
+
this.jsPlumbInit()
|
|
144
|
+
})
|
|
145
|
+
},
|
|
146
|
+
handleClick (node) {
|
|
147
|
+
this.$emit('click', node)
|
|
148
|
+
},
|
|
149
|
+
// 是否具有该线
|
|
150
|
+
hasLine (from, to) {
|
|
151
|
+
for (var i = 0; i < this.data.lineList.length; i++) {
|
|
152
|
+
var line = this.data.lineList[i]
|
|
153
|
+
if (line.from === from && line.to === to) {
|
|
154
|
+
return true
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return false
|
|
158
|
+
},
|
|
159
|
+
// 是否含有相反的线
|
|
160
|
+
hashOppositeLine (from, to) {
|
|
161
|
+
return this.hasLine(to, from)
|
|
162
|
+
},
|
|
163
|
+
// 删除线
|
|
164
|
+
deleteLine (from, to) {
|
|
165
|
+
this.option.lineList = this.option.lineList.filter(function (line) {
|
|
166
|
+
return line.from !== from && line.to !== to
|
|
167
|
+
})
|
|
168
|
+
},
|
|
169
|
+
// 改变连线
|
|
170
|
+
changeLine (oldFrom, oldTo) {
|
|
171
|
+
this.deleteLine(oldFrom, oldTo)
|
|
172
|
+
},
|
|
173
|
+
// 改变节点的位置
|
|
174
|
+
changeNodeSite ({ index, left, top }) {
|
|
175
|
+
for (var i = 0; i < this.option.nodeList.length; i++) {
|
|
176
|
+
let node = this.option.nodeList[i]
|
|
177
|
+
if (i === index) {
|
|
178
|
+
this.option.nodeList[i].left = left;
|
|
179
|
+
this.option.nodeList[i].top = top
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
},
|
|
183
|
+
//删除节点
|
|
184
|
+
deleteNode (nodeId) {
|
|
185
|
+
this.$confirm(this.t('flow.deleteNodeConfirm', { nodeId }), this.t('common.tip'), {
|
|
186
|
+
confirmButtonText: this.t('common.submitBtn'),
|
|
187
|
+
cancelButtonText: this.t('common.cancelBtn'),
|
|
188
|
+
type: 'warning',
|
|
189
|
+
closeOnClickModal: false
|
|
190
|
+
}).then(() => {
|
|
191
|
+
this.option.nodeList.forEach(node => {
|
|
192
|
+
if (node.id === nodeId) {
|
|
193
|
+
node.display = true;
|
|
194
|
+
}
|
|
195
|
+
})
|
|
196
|
+
this.$nextTick(function () {
|
|
197
|
+
this.jsPlumb.removeAllEndpoints(nodeId);
|
|
198
|
+
})
|
|
199
|
+
}).catch(() => {
|
|
200
|
+
})
|
|
201
|
+
return true
|
|
202
|
+
},
|
|
203
|
+
// 添加新的节点
|
|
204
|
+
addNode (name) {
|
|
205
|
+
const index = this.option.nodeList.length;
|
|
206
|
+
let nodeId = 'node' + index
|
|
207
|
+
this.option.nodeList.push({
|
|
208
|
+
id: 'node' + index,
|
|
209
|
+
name: name,
|
|
210
|
+
left: 0,
|
|
211
|
+
top: 0,
|
|
212
|
+
})
|
|
213
|
+
this.$nextTick(function () {
|
|
214
|
+
|
|
215
|
+
this.jsPlumb.makeSource(nodeId, this.jsplumbSourceOptions)
|
|
216
|
+
|
|
217
|
+
this.jsPlumb.makeTarget(nodeId, this.jsplumbTargetOptions)
|
|
218
|
+
|
|
219
|
+
this.jsPlumb.draggable(nodeId, {
|
|
220
|
+
containment: 'parent'
|
|
221
|
+
})
|
|
222
|
+
|
|
223
|
+
})
|
|
224
|
+
},
|
|
225
|
+
loadEasyFlow () {
|
|
226
|
+
// 初始化节点
|
|
227
|
+
for (var i = 0; i < this.option.nodeList.length; i++) {
|
|
228
|
+
let node = this.option.nodeList[i]
|
|
229
|
+
// 设置源点,可以拖出线连接其他节点
|
|
230
|
+
this.jsPlumb.makeSource(node.id, this.jsplumbSourceOptions)
|
|
231
|
+
// // 设置目标点,其他源点拖出的线可以连接该节点
|
|
232
|
+
this.jsPlumb.makeTarget(node.id, this.jsplumbTargetOptions)
|
|
233
|
+
this.jsPlumb.draggable(node.id)
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
// 初始化连线
|
|
237
|
+
for (var i = 0; i < this.option.lineList.length; i++) {
|
|
238
|
+
let line = this.option.lineList[i]
|
|
239
|
+
this.jsPlumb.connect({
|
|
240
|
+
source: line.from,
|
|
241
|
+
target: line.to
|
|
242
|
+
}, this.jsplumbConnectOptions)
|
|
243
|
+
}
|
|
244
|
+
this.$nextTick(function () {
|
|
245
|
+
this.loadEasyFlowFinish = true
|
|
246
|
+
})
|
|
247
|
+
},
|
|
248
|
+
jsPlumbInit () {
|
|
249
|
+
const _this = this
|
|
250
|
+
this.jsPlumb.ready(function () {
|
|
251
|
+
// 导入默认配置
|
|
252
|
+
_this.jsPlumb.importDefaults(_this.jsplumbSetting)
|
|
253
|
+
// 会使整个jsPlumb立即重绘。
|
|
254
|
+
_this.jsPlumb.setSuspendDrawing(false, true)
|
|
255
|
+
// 初始化节点
|
|
256
|
+
_this.loadEasyFlow()
|
|
257
|
+
|
|
258
|
+
// 单点击了连接线,
|
|
259
|
+
_this.jsPlumb.bind('click', function (conn, originalEvent) {
|
|
260
|
+
console.log('click', conn)
|
|
261
|
+
|
|
262
|
+
_this.$confirm(_this.t('flow.deleteLineConfirm'), _this.t('common.tip'), {
|
|
263
|
+
confirmButtonText: _this.t('common.submitBtn'),
|
|
264
|
+
cancelButtonText: _this.t('common.cancelBtn'),
|
|
265
|
+
type: 'warning'
|
|
266
|
+
}).then(() => {
|
|
267
|
+
_this.jsPlumb.deleteConnection(conn)
|
|
268
|
+
}).catch(() => {
|
|
269
|
+
})
|
|
270
|
+
})
|
|
271
|
+
// 连线
|
|
272
|
+
_this.jsPlumb.bind('connection', function (evt) {
|
|
273
|
+
console.log('connection', evt)
|
|
274
|
+
let from = evt.source.id
|
|
275
|
+
let to = evt.target.id
|
|
276
|
+
if (_this.loadEasyFlowFinish) {
|
|
277
|
+
_this.option.lineList.push({
|
|
278
|
+
from: from,
|
|
279
|
+
to: to
|
|
280
|
+
})
|
|
281
|
+
}
|
|
282
|
+
})
|
|
283
|
+
|
|
284
|
+
// 删除连线
|
|
285
|
+
_this.jsPlumb.bind('connectionDetached', function (evt) {
|
|
286
|
+
console.log('connectionDetached', evt)
|
|
287
|
+
_this.deleteLine(evt.sourceId, evt.targetId)
|
|
288
|
+
})
|
|
289
|
+
|
|
290
|
+
// 改变线的连接节点
|
|
291
|
+
_this.jsPlumb.bind('connectionMoved', function (evt) {
|
|
292
|
+
console.log('connectionMoved', evt)
|
|
293
|
+
_this.changeLine(evt.originalSourceId, evt.originalTargetId)
|
|
294
|
+
})
|
|
295
|
+
|
|
296
|
+
// 单击endpoint
|
|
297
|
+
// jsPlumb.bind("endpointClick", function (evt) {
|
|
298
|
+
// console.log('endpointClick', evt)
|
|
299
|
+
// })
|
|
300
|
+
//
|
|
301
|
+
// // 双击endpoint
|
|
302
|
+
// jsPlumb.bind("endpointDblClick", function (evt) {
|
|
303
|
+
// console.log('endpointDblClick', evt)
|
|
304
|
+
// })
|
|
305
|
+
|
|
306
|
+
// contextmenu
|
|
307
|
+
_this.jsPlumb.bind('contextmenu', function (evt) {
|
|
308
|
+
console.log('contextmenu', evt)
|
|
309
|
+
})
|
|
310
|
+
|
|
311
|
+
// beforeDrop
|
|
312
|
+
_this.jsPlumb.bind('beforeDrop', function (evt) {
|
|
313
|
+
console.log('beforeDrop', evt)
|
|
314
|
+
let from = evt.sourceId
|
|
315
|
+
let to = evt.targetId
|
|
316
|
+
if (from === to) {
|
|
317
|
+
_this.$message.error(_this.t('flow.noSelfConnect'))
|
|
318
|
+
return false
|
|
319
|
+
}
|
|
320
|
+
if (_this.hasLine(from, to)) {
|
|
321
|
+
_this.$message.error(_this.t('flow.noDuplicateConnect'))
|
|
322
|
+
return false
|
|
323
|
+
}
|
|
324
|
+
if (_this.hashOppositeLine(from, to)) {
|
|
325
|
+
_this.$message.error(_this.t('flow.noLoopConnect'))
|
|
326
|
+
return false
|
|
327
|
+
}
|
|
328
|
+
return true
|
|
329
|
+
})
|
|
330
|
+
|
|
331
|
+
// beforeDetach
|
|
332
|
+
_this.jsPlumb.bind('beforeDetach', function (evt) {
|
|
333
|
+
console.log('beforeDetach', evt)
|
|
334
|
+
})
|
|
335
|
+
})
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
});
|
|
339
|
+
</script>
|