vue-wiring-diagram 1.1.24 → 1.1.26

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 (32) hide show
  1. package/README.md +93 -93
  2. package/dist/style.css +1 -1
  3. package/dist/vue-wiring-diagram.es.js +4501 -4488
  4. package/dist/vue-wiring-diagram.umd.js +35 -35
  5. package/package.json +1 -1
  6. package/packages/components/Shortcuts.vue +31 -31
  7. package/packages/components/baseShape.js +62 -62
  8. package/packages/components/common.js +105 -105
  9. package/packages/components/edge-control/arrow-line.vue +292 -292
  10. package/packages/components/edge-control/condition.vue +110 -110
  11. package/packages/components/edge-control/default-line.vue +156 -156
  12. package/packages/components/edge-control/index.vue +94 -94
  13. package/packages/components/edge-control/pipe-line.vue +354 -354
  14. package/packages/components/editor/index.vue +590 -590
  15. package/packages/components/enums.js +80 -80
  16. package/packages/components/graph-control/index.vue +121 -121
  17. package/packages/components/image-control/group-form.vue +114 -114
  18. package/packages/components/image-control/image-condition.vue +117 -117
  19. package/packages/components/image-control/image-form.vue +184 -184
  20. package/packages/components/image-control/image-management.vue +213 -213
  21. package/packages/components/image-control/index.vue +290 -290
  22. package/packages/components/portsOptions.js +21 -21
  23. package/packages/components/preview/index.vue +399 -399
  24. package/packages/components/settings.js +262 -262
  25. package/packages/components/text-control/index.vue +472 -457
  26. package/packages/components/tools.js +256 -256
  27. package/packages/http.js +104 -104
  28. package/packages/index.js +43 -43
  29. package/packages/styles/animation.scss +27 -27
  30. package/packages/styles/dialog.scss +4 -4
  31. package/packages/styles/editor.scss +165 -165
  32. package/packages/styles/elPath.scss +257 -257
@@ -1,117 +1,117 @@
1
- /**
2
- * @Author: HuaYJ
3
- * @Date: 2024/12/10 10:23
4
- */
5
- <template>
6
- <div class="form-container">
7
- <el-button type="primary" size="small" @click="addItemBtnClick" style="margin-bottom: 10px">添加条件</el-button>
8
- <el-table :data="items" size="small" border>
9
- <el-table-column prop="min" label="最小值" width="150" align="center">
10
- <template #default="scope">
11
- <el-input-number v-model="scope.row.min" size="small" controls-position="right"></el-input-number>
12
- </template>
13
- </el-table-column>
14
- <el-table-column prop="max" label="最大值" width="150" align="center">
15
- <template #default="scope">
16
- <el-input-number v-model="scope.row.max" size="small" controls-position="right"></el-input-number>
17
- </template>
18
- </el-table-column>
19
- <el-table-column prop="imageUrl" label="更换元件" width="120" align="center">
20
- <template #default="scope">
21
- <el-select v-model="scope.row.imageUrl" placeholder="请选择元件" size="small" filterable clearable>
22
- <el-option v-for="item in imageList" :key="item.imageUrl" :label="item.imageName" :value="item.imageUrl"></el-option>
23
- </el-select>
24
- </template>
25
- </el-table-column>
26
- <el-table-column label="操作" align="center">
27
- <template #default="scope">
28
- <el-button type="danger" size="small" @click="deleteItemBtnClick(scope.$index)">删除</el-button>
29
- </template>
30
- </el-table-column>
31
- </el-table>
32
- <div class="footer" style="margin-top: 10px">
33
- <el-button type="primary" @click="saveBtnClick">保存</el-button>
34
- <el-button @click="cancelBtnClick">取消</el-button>
35
- </div>
36
- </div>
37
- </template>
38
-
39
- <script setup>
40
- import {ref, onMounted} from "vue";
41
- import {get} from "packages/http.js";
42
-
43
- const props = defineProps({
44
- payload: {
45
- type: Array,
46
- },
47
- type: {
48
- type: String,
49
- }
50
- })
51
-
52
- const items = ref(props.payload)
53
- const imageList = ref([]) // 图片列表
54
-
55
- /**
56
- * 获取图片列表
57
- */
58
- const getImageList = async () => {
59
- try {
60
- const res = await get('/custom/groupList')
61
- const data = res?.data || []
62
- const allImages = []
63
- data.forEach(group => {
64
- if (group?.pictureList) {
65
- allImages.push(...group.pictureList)
66
- }
67
- })
68
- imageList.value = allImages
69
- } catch (error) {
70
- console.error('获取图片列表失败:', error)
71
- }
72
- }
73
-
74
- /**
75
- * 添加条件
76
- */
77
- const addItemBtnClick = () => {
78
- items.value.push({
79
- min: 0,
80
- max: 100,
81
- imageUrl: ''
82
- })
83
- }
84
-
85
- /**
86
- * 删除条件
87
- * @param index
88
- */
89
- const deleteItemBtnClick = (index) => {
90
- items.value.splice(index, 1)
91
- }
92
-
93
- const emit = defineEmits(['close'])
94
-
95
- /**
96
- * 保存
97
- */
98
- const saveBtnClick = () => {
99
- emit('close', items.value)
100
- }
101
-
102
- /**
103
- * 取消
104
- */
105
- const cancelBtnClick = () => {
106
- emit('close', false)
107
- }
108
-
109
- onMounted(() => {
110
- getImageList()
111
- })
112
- </script>
113
-
114
- <style scoped lang="scss">
115
- @use '/packages/styles/elPath.scss';
116
- @use '/packages/styles/dialog.scss';
117
- </style>
1
+ /**
2
+ * @Author: HuaYJ
3
+ * @Date: 2024/12/10 10:23
4
+ */
5
+ <template>
6
+ <div class="form-container">
7
+ <el-button type="primary" size="small" @click="addItemBtnClick" style="margin-bottom: 10px">添加条件</el-button>
8
+ <el-table :data="items" size="small" border>
9
+ <el-table-column prop="min" label="最小值" width="150" align="center">
10
+ <template #default="scope">
11
+ <el-input-number v-model="scope.row.min" size="small" controls-position="right"></el-input-number>
12
+ </template>
13
+ </el-table-column>
14
+ <el-table-column prop="max" label="最大值" width="150" align="center">
15
+ <template #default="scope">
16
+ <el-input-number v-model="scope.row.max" size="small" controls-position="right"></el-input-number>
17
+ </template>
18
+ </el-table-column>
19
+ <el-table-column prop="imageUrl" label="更换元件" width="120" align="center">
20
+ <template #default="scope">
21
+ <el-select v-model="scope.row.imageUrl" placeholder="请选择元件" size="small" filterable clearable>
22
+ <el-option v-for="item in imageList" :key="item.imageUrl" :label="item.imageName" :value="item.imageUrl"></el-option>
23
+ </el-select>
24
+ </template>
25
+ </el-table-column>
26
+ <el-table-column label="操作" align="center">
27
+ <template #default="scope">
28
+ <el-button type="danger" size="small" @click="deleteItemBtnClick(scope.$index)">删除</el-button>
29
+ </template>
30
+ </el-table-column>
31
+ </el-table>
32
+ <div class="footer" style="margin-top: 10px">
33
+ <el-button type="primary" @click="saveBtnClick">保存</el-button>
34
+ <el-button @click="cancelBtnClick">取消</el-button>
35
+ </div>
36
+ </div>
37
+ </template>
38
+
39
+ <script setup>
40
+ import {ref, onMounted} from "vue";
41
+ import {get} from "packages/http.js";
42
+
43
+ const props = defineProps({
44
+ payload: {
45
+ type: Array,
46
+ },
47
+ type: {
48
+ type: String,
49
+ }
50
+ })
51
+
52
+ const items = ref(props.payload)
53
+ const imageList = ref([]) // 图片列表
54
+
55
+ /**
56
+ * 获取图片列表
57
+ */
58
+ const getImageList = async () => {
59
+ try {
60
+ const res = await get('/custom/groupList')
61
+ const data = res?.data || []
62
+ const allImages = []
63
+ data.forEach(group => {
64
+ if (group?.pictureList) {
65
+ allImages.push(...group.pictureList)
66
+ }
67
+ })
68
+ imageList.value = allImages
69
+ } catch (error) {
70
+ console.error('获取图片列表失败:', error)
71
+ }
72
+ }
73
+
74
+ /**
75
+ * 添加条件
76
+ */
77
+ const addItemBtnClick = () => {
78
+ items.value.push({
79
+ min: 0,
80
+ max: 100,
81
+ imageUrl: ''
82
+ })
83
+ }
84
+
85
+ /**
86
+ * 删除条件
87
+ * @param index
88
+ */
89
+ const deleteItemBtnClick = (index) => {
90
+ items.value.splice(index, 1)
91
+ }
92
+
93
+ const emit = defineEmits(['close'])
94
+
95
+ /**
96
+ * 保存
97
+ */
98
+ const saveBtnClick = () => {
99
+ emit('close', items.value)
100
+ }
101
+
102
+ /**
103
+ * 取消
104
+ */
105
+ const cancelBtnClick = () => {
106
+ emit('close', false)
107
+ }
108
+
109
+ onMounted(() => {
110
+ getImageList()
111
+ })
112
+ </script>
113
+
114
+ <style scoped lang="scss">
115
+ @use '/packages/styles/elPath.scss';
116
+ @use '/packages/styles/dialog.scss';
117
+ </style>
@@ -1,184 +1,184 @@
1
- /**
2
- * @Author: HuaYJ
3
- * @Date: 2025/2/8 10:24
4
- */
5
- <template>
6
- <div class="form-container">
7
- <el-form ref="form" :model="model" :rules="rules" label-width="90px" label-suffix=":">
8
- <el-form-item label="图片名称" prop="imageName">
9
- <el-input v-model="model.imageName" placeholder="请输入图片名称"></el-input>
10
- </el-form-item>
11
- <el-form-item label="排序" prop="sort">
12
- <el-input-number v-model="model.sort" :min="0" :max="999" :step="1" controls-position="right"/>
13
- </el-form-item>
14
- <el-form-item label="是否显示" prop="isShow">
15
- <el-switch v-model="model.isShow" :active-value="1" :inactive-value="0" active-color="#13ce66" inactive-color="#ff4949"/>
16
- </el-form-item>
17
- <el-form-item label="上传" prop="image">
18
- <el-upload
19
- action=""
20
- list-type="picture"
21
- class="avatar-uploader"
22
- :show-file-list="false"
23
- :on-change="changeImage"
24
- :auto-upload="false"
25
- >
26
- <el-image v-if="imageUrl" :src="imageUrl" fit="cover" style="width: 64px; height: 64px;"/>
27
- <el-icon v-else class="avatar-uploader-icon">
28
- <Plus/>
29
- </el-icon>
30
- </el-upload>
31
- </el-form-item>
32
- <div class="footer">
33
- <el-button type="primary" @click="saveBtnClick">保存</el-button>
34
- <el-button @click="cancelBtnClick">取消</el-button>
35
- </div>
36
- </el-form>
37
- </div>
38
- </template>
39
-
40
- <script setup>
41
- import {onMounted, reactive, ref, shallowRef} from 'vue'
42
- import {ElMessage} from "element-plus";
43
- import {instance, post, upload} from "packages/http.js";
44
- import {Plus} from "@element-plus/icons-vue";
45
- import {isSunOs} from "packages";
46
- import {setSunCloudImageUrl} from "packages/components/tools.js";
47
-
48
- const emits = defineEmits(['close'])
49
- const props = defineProps({
50
- payload: {
51
- type: Object,
52
- default: () => {
53
- return {}
54
- }
55
- }
56
- })
57
- const form = shallowRef(null)
58
- const model = reactive({
59
- groupId: '',
60
- id: '',
61
- imageName: '',
62
- sort: 0,
63
- isShow: 1,
64
- imageUrl: '',
65
- })
66
- const rules = ({
67
- imageName: [
68
- {required: true, message: '请输入图片名称', trigger: 'blur'},
69
- {min: 1, max: 20, message: '长度在 1 到 20 个字符', trigger: 'blur'}
70
- ],
71
- sort: [
72
- {required: true, message: '请输入排序', trigger: 'blur'},
73
- {type: 'number', message: '排序必须为数字值'}
74
- ]
75
- })
76
-
77
- const imageUrl = ref('')
78
-
79
- /**
80
- * 图片改变事件
81
- * @param file
82
- */
83
- const changeImage = (file) => {
84
- if (file.raw.type.indexOf('image') === -1) {
85
- ElMessage.error('请上传图片格式的文件')
86
- return
87
- }
88
- const formData = new FormData();
89
- formData.append('file', file.raw);
90
- upload('/file/fileUpload', formData).then(res => {
91
- if (res?.isOk) {
92
- if (isSunOs) {
93
- imageUrl.value = res?.data
94
- model.imageUrl = res?.data
95
- } else {
96
- imageUrl.value = instance.defaults.baseURL + '/upload/' + res?.data
97
- model.imageUrl = res?.data
98
- }
99
- } else {
100
- ElMessage.error(res?.msg || '上传失败')
101
- }
102
- })
103
- }
104
-
105
-
106
- /**
107
- * 保存按钮点击事件
108
- */
109
- const saveBtnClick = () => {
110
- console.log(model)
111
- form.value.validate((valid) => {
112
- if (valid) {
113
- post('/custom/savePicture', model).then(res => {
114
- if (res?.isOk) {
115
- ElMessage.success('保存成功')
116
- emits('close', true)
117
- } else {
118
- ElMessage.error(res?.msg || '保存失败')
119
- }
120
- })
121
- } else {
122
- return false;
123
- }
124
- })
125
- }
126
-
127
- /**
128
- * 取消按钮点击事件
129
- */
130
- const cancelBtnClick = () => {
131
- emits('close', false)
132
- }
133
-
134
- onMounted(() => {
135
- if (props.payload?.id) {
136
- model.id = props.payload.id
137
- model.imageName = props.payload.imageName
138
- model.sort = props.payload.sort
139
- model.isShow = props.payload.isShow
140
- model.imageUrl = isSunOs ? props.payload.imageUrl : setSunCloudImageUrl(props.payload.imageUrl)
141
- imageUrl.value = model.imageUrl
142
- }
143
- model.groupId = props.payload.groupId
144
- })
145
- </script>
146
-
147
- <style scoped lang="scss">
148
- @use "../../styles/dialog.scss";
149
-
150
- .avatar-uploader {
151
- width: 64px;
152
- height: 64px;
153
-
154
-
155
- :deep(.el-upload) {
156
- width: 100%;
157
- height: 100%;
158
- border: 1px dashed rgb(35, 100, 221);
159
- border-radius: 6px;
160
- cursor: pointer;
161
- position: relative;
162
- overflow: hidden;
163
- transition: var(--el-transition-duration-fast);
164
-
165
- :deep(.el-upload:hover) {
166
- border-color: var(--el-color-primary);
167
- }
168
-
169
- .el-icon {
170
- color: rgb(35, 100, 221);
171
- }
172
-
173
-
174
- :deep(.el-icon).avatar-uploader-icon {
175
- font-size: 28px;
176
- color: rgb(35, 100, 221);
177
- width: 178px;
178
- height: 178px;
179
- text-align: center;
180
- }
181
- }
182
- }
183
-
184
- </style>
1
+ /**
2
+ * @Author: HuaYJ
3
+ * @Date: 2025/2/8 10:24
4
+ */
5
+ <template>
6
+ <div class="form-container">
7
+ <el-form ref="form" :model="model" :rules="rules" label-width="90px" label-suffix=":">
8
+ <el-form-item label="图片名称" prop="imageName">
9
+ <el-input v-model="model.imageName" placeholder="请输入图片名称"></el-input>
10
+ </el-form-item>
11
+ <el-form-item label="排序" prop="sort">
12
+ <el-input-number v-model="model.sort" :min="0" :max="999" :step="1" controls-position="right"/>
13
+ </el-form-item>
14
+ <el-form-item label="是否显示" prop="isShow">
15
+ <el-switch v-model="model.isShow" :active-value="1" :inactive-value="0" active-color="#13ce66" inactive-color="#ff4949"/>
16
+ </el-form-item>
17
+ <el-form-item label="上传" prop="image">
18
+ <el-upload
19
+ action=""
20
+ list-type="picture"
21
+ class="avatar-uploader"
22
+ :show-file-list="false"
23
+ :on-change="changeImage"
24
+ :auto-upload="false"
25
+ >
26
+ <el-image v-if="imageUrl" :src="imageUrl" fit="cover" style="width: 64px; height: 64px;"/>
27
+ <el-icon v-else class="avatar-uploader-icon">
28
+ <Plus/>
29
+ </el-icon>
30
+ </el-upload>
31
+ </el-form-item>
32
+ <div class="footer">
33
+ <el-button type="primary" @click="saveBtnClick">保存</el-button>
34
+ <el-button @click="cancelBtnClick">取消</el-button>
35
+ </div>
36
+ </el-form>
37
+ </div>
38
+ </template>
39
+
40
+ <script setup>
41
+ import {onMounted, reactive, ref, shallowRef} from 'vue'
42
+ import {ElMessage} from "element-plus";
43
+ import {instance, post, upload} from "packages/http.js";
44
+ import {Plus} from "@element-plus/icons-vue";
45
+ import {isSunOs} from "packages";
46
+ import {setSunCloudImageUrl} from "packages/components/tools.js";
47
+
48
+ const emits = defineEmits(['close'])
49
+ const props = defineProps({
50
+ payload: {
51
+ type: Object,
52
+ default: () => {
53
+ return {}
54
+ }
55
+ }
56
+ })
57
+ const form = shallowRef(null)
58
+ const model = reactive({
59
+ groupId: '',
60
+ id: '',
61
+ imageName: '',
62
+ sort: 0,
63
+ isShow: 1,
64
+ imageUrl: '',
65
+ })
66
+ const rules = ({
67
+ imageName: [
68
+ {required: true, message: '请输入图片名称', trigger: 'blur'},
69
+ {min: 1, max: 20, message: '长度在 1 到 20 个字符', trigger: 'blur'}
70
+ ],
71
+ sort: [
72
+ {required: true, message: '请输入排序', trigger: 'blur'},
73
+ {type: 'number', message: '排序必须为数字值'}
74
+ ]
75
+ })
76
+
77
+ const imageUrl = ref('')
78
+
79
+ /**
80
+ * 图片改变事件
81
+ * @param file
82
+ */
83
+ const changeImage = (file) => {
84
+ if (file.raw.type.indexOf('image') === -1) {
85
+ ElMessage.error('请上传图片格式的文件')
86
+ return
87
+ }
88
+ const formData = new FormData();
89
+ formData.append('file', file.raw);
90
+ upload('/file/fileUpload', formData).then(res => {
91
+ if (res?.isOk) {
92
+ if (isSunOs) {
93
+ imageUrl.value = res?.data
94
+ model.imageUrl = res?.data
95
+ } else {
96
+ imageUrl.value = instance.defaults.baseURL + '/upload/' + res?.data
97
+ model.imageUrl = res?.data
98
+ }
99
+ } else {
100
+ ElMessage.error(res?.msg || '上传失败')
101
+ }
102
+ })
103
+ }
104
+
105
+
106
+ /**
107
+ * 保存按钮点击事件
108
+ */
109
+ const saveBtnClick = () => {
110
+ console.log(model)
111
+ form.value.validate((valid) => {
112
+ if (valid) {
113
+ post('/custom/savePicture', model).then(res => {
114
+ if (res?.isOk) {
115
+ ElMessage.success('保存成功')
116
+ emits('close', true)
117
+ } else {
118
+ ElMessage.error(res?.msg || '保存失败')
119
+ }
120
+ })
121
+ } else {
122
+ return false;
123
+ }
124
+ })
125
+ }
126
+
127
+ /**
128
+ * 取消按钮点击事件
129
+ */
130
+ const cancelBtnClick = () => {
131
+ emits('close', false)
132
+ }
133
+
134
+ onMounted(() => {
135
+ if (props.payload?.id) {
136
+ model.id = props.payload.id
137
+ model.imageName = props.payload.imageName
138
+ model.sort = props.payload.sort
139
+ model.isShow = props.payload.isShow
140
+ model.imageUrl = isSunOs ? props.payload.imageUrl : setSunCloudImageUrl(props.payload.imageUrl)
141
+ imageUrl.value = model.imageUrl
142
+ }
143
+ model.groupId = props.payload.groupId
144
+ })
145
+ </script>
146
+
147
+ <style scoped lang="scss">
148
+ @use "../../styles/dialog.scss";
149
+
150
+ .avatar-uploader {
151
+ width: 64px;
152
+ height: 64px;
153
+
154
+
155
+ :deep(.el-upload) {
156
+ width: 100%;
157
+ height: 100%;
158
+ border: 1px dashed rgb(35, 100, 221);
159
+ border-radius: 6px;
160
+ cursor: pointer;
161
+ position: relative;
162
+ overflow: hidden;
163
+ transition: var(--el-transition-duration-fast);
164
+
165
+ :deep(.el-upload:hover) {
166
+ border-color: var(--el-color-primary);
167
+ }
168
+
169
+ .el-icon {
170
+ color: rgb(35, 100, 221);
171
+ }
172
+
173
+
174
+ :deep(.el-icon).avatar-uploader-icon {
175
+ font-size: 28px;
176
+ color: rgb(35, 100, 221);
177
+ width: 178px;
178
+ height: 178px;
179
+ text-align: center;
180
+ }
181
+ }
182
+ }
183
+
184
+ </style>