hookehuyr

调整新的点击节点逻辑,属性表单校验调整

...@@ -13,7 +13,9 @@ ...@@ -13,7 +13,9 @@
13 :afterDelete="handleAfterDelete" 13 :afterDelete="handleAfterDelete"
14 :beforeAdd="handleBeforeAdd" 14 :beforeAdd="handleBeforeAdd"
15 :afterAdd="handleAfterAdd" 15 :afterAdd="handleAfterAdd"
16 + @click-canvas="onClickCanvas"
16 @dragend-node="onDragEndNode" 17 @dragend-node="onDragEndNode"
18 + @click-node="onClickNode"
17 @dblclick-node="onDblClickNode" 19 @dblclick-node="onDblClickNode"
18 @dblclick-edge="onDblClickEdge" 20 @dblclick-edge="onDblClickEdge"
19 :controlConfig="state.controlConfig" 21 :controlConfig="state.controlConfig"
...@@ -69,12 +71,13 @@ ...@@ -69,12 +71,13 @@
69 <template v-slot:model> 71 <template v-slot:model>
70 <el-form 72 <el-form
71 v-if="!!state.detailModel" 73 v-if="!!state.detailModel"
72 - ref="form" 74 + ref="formRef"
75 + :rules="rules"
73 :model="state.detailModel" 76 :model="state.detailModel"
74 label-position="top" 77 label-position="top"
75 label-width="100px" 78 label-width="100px"
76 > 79 >
77 - <template v-if="state.detailModel.activity === undefined"> 80 + <!-- <template v-if="state.detailModel.activity === undefined"> -->
78 <el-tabs 81 <el-tabs
79 v-model="state.activeName" 82 v-model="state.activeName"
80 class="" 83 class=""
...@@ -86,7 +89,7 @@ ...@@ -86,7 +89,7 @@
86 <div slot="label"> 89 <div slot="label">
87 节点名称 <span style="color: red;">*</span> 90 节点名称 <span style="color: red;">*</span>
88 </div> 91 </div>
89 - <el-input v-model="state.detailModel.label" /> 92 + <el-input v-model="state.node_name" />
90 </el-form-item> 93 </el-form-item>
91 <div> 94 <div>
92 <div style="font-size: 14px; margin-bottom: 10px;"> 95 <div style="font-size: 14px; margin-bottom: 10px;">
...@@ -192,14 +195,14 @@ ...@@ -192,14 +195,14 @@
192 设置人员配置 195 设置人员配置
193 </el-button> 196 </el-button>
194 </div> --> 197 </div> -->
195 - </template> 198 + <!-- </template> -->
196 - <template v-else> 199 + <!-- <template v-else> -->
197 - <el-form-item label="活动标题"> 200 + <!-- <el-form-item label="活动标题">
198 <el-input v-model="state.detailModel.text" /> 201 <el-input v-model="state.detailModel.text" />
199 </el-form-item> 202 </el-form-item>
200 <el-form-item label="活动副标题"> 203 <el-form-item label="活动副标题">
201 <el-input v-model="state.detailModel.desc" /> 204 <el-input v-model="state.detailModel.desc" />
202 - </el-form-item> 205 + </el-form-item> -->
203 <!-- <el-form-item label="活动类型"> 206 <!-- <el-form-item label="活动类型">
204 <el-select v-model="state.detailModel.activity"> 207 <el-select v-model="state.detailModel.activity">
205 <el-option 208 <el-option
...@@ -210,7 +213,7 @@ ...@@ -210,7 +213,7 @@
210 /> 213 />
211 </el-select> 214 </el-select>
212 </el-form-item> --> 215 </el-form-item> -->
213 - </template> 216 + <!-- </template> -->
214 </el-form> 217 </el-form>
215 </template> 218 </template>
216 <!-- 工具栏 --> 219 <!-- 工具栏 -->
...@@ -224,7 +227,7 @@ ...@@ -224,7 +227,7 @@
224 </template> 227 </template>
225 <!-- 表单底部按钮 --> 228 <!-- 表单底部按钮 -->
226 <template v-slot:foot> 229 <template v-slot:foot>
227 - <el-button type="primary" @click="save">保存</el-button> 230 + <el-button type="primary" @click="saveForm">保存</el-button>
228 <el-button @click="cancel">取消</el-button> 231 <el-button @click="cancel">取消</el-button>
229 </template> 232 </template>
230 </vue-flow-editor> 233 </vue-flow-editor>
...@@ -238,7 +241,7 @@ ...@@ -238,7 +241,7 @@
238 </template> 241 </template>
239 242
240 <script lang="ts"> 243 <script lang="ts">
241 -import { reactive, onMounted, watch, nextTick } from 'vue' 244 +import { ref, reactive, onMounted, watch, nextTick } from 'vue'
242 import { AppData } from './data.js' 245 import { AppData } from './data.js'
243 import { staticPath } from './utils' 246 import { staticPath } from './utils'
244 import { ElNotification } from 'element-plus' 247 import { ElNotification } from 'element-plus'
...@@ -248,6 +251,7 @@ import { Calendar, Search } from '@element-plus/icons-vue' ...@@ -248,6 +251,7 @@ import { Calendar, Search } from '@element-plus/icons-vue'
248 import SelectUserView from './selectUserView.vue' 251 import SelectUserView from './selectUserView.vue'
249 import { Function } from 'lodash' 252 import { Function } from 'lodash'
250 import { extend } from '@vue/shared' 253 import { extend } from '@vue/shared'
254 +import type { FormInstance, FormRules } from 'element-plus'
251 255
252 const G6 = (window as any).G6.default as any 256 const G6 = (window as any).G6.default as any
253 257
...@@ -255,6 +259,10 @@ function delay(time: number) { ...@@ -255,6 +259,10 @@ function delay(time: number) {
255 return new Promise((resolve) => setTimeout(resolve, time)) 259 return new Promise((resolve) => setTimeout(resolve, time))
256 } 260 }
257 261
262 +interface RuleForm {
263 + label: string
264 +}
265 +
258 interface myObj { 266 interface myObj {
259 source: string 267 source: string
260 id: string 268 id: string
...@@ -284,6 +292,16 @@ export default { ...@@ -284,6 +292,16 @@ export default {
284 SelectUserView, 292 SelectUserView,
285 }, 293 },
286 setup(props, context) { 294 setup(props, context) {
295 +
296 + const formRef = ref<any>(null);
297 +
298 + const rules = reactive<FormRules<RuleForm>>({
299 + label: [
300 + { required: true, message: '请输入名称', trigger: 'blur' },
301 + { min: 3, max: 10, message: '长度在 3 到 10 个字符', trigger: 'blur' },
302 + ],
303 + })
304 +
287 const state = reactive({ 305 const state = reactive({
288 data: AppData, // 渲染的数据,数据格式参考G6文档 306 data: AppData, // 渲染的数据,数据格式参考G6文档
289 detailModel: null, 307 detailModel: null,
...@@ -361,9 +379,13 @@ export default { ...@@ -361,9 +379,13 @@ export default {
361 dialogUserFormVisible: false, 379 dialogUserFormVisible: false,
362 activeName: 'node', 380 activeName: 'node',
363 attr_radio: '基础属性', 381 attr_radio: '基础属性',
382 + node_name: '', // 节点名称
383 + userTags: [ // 节点负责人
384 + { id: "user-1-1", name: "用户1-1" }
385 + ],
364 auth_all_checked: false, 386 auth_all_checked: false,
365 auth_all_edit: false, 387 auth_all_edit: false,
366 - field_auths: [ 388 + field_auths: [ // 字段权限
367 { 389 {
368 name: '字段1', 390 name: '字段1',
369 visible: { 391 visible: {
...@@ -398,7 +420,6 @@ export default { ...@@ -398,7 +420,6 @@ export default {
398 }, 420 },
399 }, 421 },
400 ], 422 ],
401 - userTags: [{ id: "user-1-1", name: "用户1-1" }]
402 }) 423 })
403 424
404 onMounted(() => { 425 onMounted(() => {
...@@ -487,10 +508,21 @@ export default { ...@@ -487,10 +508,21 @@ export default {
487 model.labelCfg = model.labelCfg || { style: {} } 508 model.labelCfg = model.labelCfg || { style: {} }
488 509
489 model.data = model.data ? model.data : {} 510 model.data = model.data ? model.data : {}
511 +
512 + // 判断是否是流程节点
513 + let model_id = model.id
514 + if (model_id !== 'start-node' && model_id!== 'end-node') {
490 state.detailModel = model 515 state.detailModel = model
491 editor.openModel() 516 editor.openModel()
492 } 517 }
493 518
519 + }
520 +
521 + /**
522 + * 点击节点回调
523 + *
524 + * @param {Event} e - The event object representing the click event.
525 + */
494 function onClickNode(e: myEvent) { 526 function onClickNode(e: myEvent) {
495 const model = G6.Util.clone(e.item.get('model')) 527 const model = G6.Util.clone(e.item.get('model'))
496 model.style = model.style || {} 528 model.style = model.style || {}
...@@ -498,7 +530,15 @@ export default { ...@@ -498,7 +530,15 @@ export default {
498 530
499 model.data = model.data ? model.data : {} 531 model.data = model.data ? model.data : {}
500 state.detailModel = model 532 state.detailModel = model
533 +
534 + // 判断是否是流程节点
535 + let model_id = model.id
536 + if (model_id !== 'start-node' && model_id!== 'end-node') {
537 + state.detailModel = model
501 editor.openModel() 538 editor.openModel()
539 + } else {
540 + editor.closeModel()
541 + }
502 } 542 }
503 543
504 /** 544 /**
...@@ -533,12 +573,21 @@ export default { ...@@ -533,12 +573,21 @@ export default {
533 } 573 }
534 574
535 /** 575 /**
536 - * Saves the changes made in the editor. 576 + * 保存表单信息
537 * 577 *
538 */ 578 */
539 - function save() { 579 + async function saveForm() {
540 - editor.updateModel(state.detailModel) 580 + // if (!formRef.value) return
541 - editor.closeModel() 581 + // await formRef.value.validate((valid) => {
582 + // if (!valid) {
583 + // return false
584 + // }
585 + // })
586 + // editor.updateModel(state.detailModel)
587 + // editor.closeModel()
588 + console.log(state.node_name)
589 + console.log(state.userTags)
590 + console.log(state.field_auths)
542 } 591 }
543 592
544 /** 593 /**
...@@ -639,6 +688,11 @@ export default { ...@@ -639,6 +688,11 @@ export default {
639 state.data.edges = editor.editorState.graph.save().edges 688 state.data.edges = editor.editorState.graph.save().edges
640 } 689 }
641 690
691 + function onClickCanvas(e: myEvent) {
692 + console.log('单击画布');
693 + editor.closeModel()
694 + }
695 +
642 /** 696 /**
643 * 拖动节点结束回调 697 * 拖动节点结束回调
644 * 698 *
...@@ -709,17 +763,20 @@ export default { ...@@ -709,17 +763,20 @@ export default {
709 763
710 return { 764 return {
711 state, 765 state,
766 + rules,
767 + formRef,
712 768
713 showGrid: true, // 是否开启网格 769 showGrid: true, // 是否开启网格
714 showMiniMap: false, // 是否开启缩略图 770 showMiniMap: false, // 是否开启缩略图
715 showMultipleSelect: true, // 编辑器是否可以多选 771 showMultipleSelect: true, // 编辑器是否可以多选
716 772
773 + onClickCanvas,
717 onClickNode, 774 onClickNode,
718 onDblClickNode, 775 onDblClickNode,
719 onDragEndNode, 776 onDragEndNode,
720 onDblClickEdge, 777 onDblClickEdge,
721 cancel, 778 cancel,
722 - save, 779 + saveForm,
723 handleBeforeDelete, 780 handleBeforeDelete,
724 handleAfterDelete, 781 handleAfterDelete,
725 handleBeforeAdd, 782 handleBeforeAdd,
......
...@@ -192,7 +192,7 @@ $transition: all 300ms cubic-bezier(0.23, 1, 0.32, 1); ...@@ -192,7 +192,7 @@ $transition: all 300ms cubic-bezier(0.23, 1, 0.32, 1);
192 } 192 }
193 193
194 .vue-flow-editor-model { 194 .vue-flow-editor-model {
195 - position: absolute; 195 + // position: absolute;
196 top: 0; 196 top: 0;
197 left: 0; 197 left: 0;
198 right: 0; 198 right: 0;
...@@ -202,7 +202,7 @@ $transition: all 300ms cubic-bezier(0.23, 1, 0.32, 1); ...@@ -202,7 +202,7 @@ $transition: all 300ms cubic-bezier(0.23, 1, 0.32, 1);
202 transition-duration: 500ms; 202 transition-duration: 500ms;
203 203
204 &:before { 204 &:before {
205 - position: absolute; 205 + // position: absolute;
206 top: 0; 206 top: 0;
207 bottom: 0; 207 bottom: 0;
208 left: 0; 208 left: 0;
......
...@@ -56,6 +56,9 @@ export default { ...@@ -56,6 +56,9 @@ export default {
56 editorState.graph = graph 56 editorState.graph = graph
57 commander.init(graph) 57 commander.init(graph)
58 58
59 + graph.on('canvas:click', (e) => {
60 + context.emit('click-canvas', e)
61 + })
59 graph.on('node:click', (e) => { 62 graph.on('node:click', (e) => {
60 context.emit('click-node', e) 63 context.emit('click-node', e)
61 }) 64 })
......