hookehuyr

节点属性里面更多属性功能显示新增

Showing 1 changed file with 176 additions and 5 deletions
...@@ -84,6 +84,7 @@ ...@@ -84,6 +84,7 @@
84 stretch 84 stretch
85 > 85 >
86 <el-tab-pane label="节点属性" name="node" style="padding: 0 1rem"> 86 <el-tab-pane label="节点属性" name="node" style="padding: 0 1rem">
87 + <div v-if="state.main_attr_set" class="main-attr-set">
87 <el-form-item prop="label"> 88 <el-form-item prop="label">
88 <div slot="label"> 89 <div slot="label">
89 节点名称 <span style="color: red;">*</span> 90 节点名称 <span style="color: red;">*</span>
...@@ -169,11 +170,43 @@ ...@@ -169,11 +170,43 @@
169 </el-row> 170 </el-row>
170 </el-form-item> 171 </el-form-item>
171 <div v-if="state.attr_radio === '更多属性'"> 172 <div v-if="state.attr_radio === '更多属性'">
172 - <div> 173 + <div class="more-attr">
173 - <p style="font-size: 14px;">审批意见</p> 174 + <div v-for="(attr, index) in state.more_attr" :key="index" class="more-attr-item">
175 + <p class="title">{{ attr.label }}</p>
176 + <div v-for="(item, idx) in attr.data" :key="idx" class="content">
177 + <div v-if="item.btnText" class="left">
178 + <span v-if="item.label === item.btnText">{{ item.label }}</span>
179 + <span v-else>
180 + {{ item.btnText }} <span style="color: #838892;">| 原名:{{ item.label }}</span>
181 + </span>
174 </div> 182 </div>
175 - <div> 183 + <div v-else class="left">
176 - <p style="font-size: 14px;">节点操作</p> 184 + <span>
185 + {{ item.label }}
186 + </span>
187 + </div>
188 + <div :class="['right', item.show ? 'active' : '']">{{ item.show? '已开启' : '未开启' }}</div>
189 + <div class="btn-action" @click="setMoreAttr(attr, idx)">
190 + <el-icon :size="14"><Edit /></el-icon>&nbsp;<span>编辑</span>
191 + </div>
192 + </div>
193 + </div>
194 + <!-- <div class="more-attr-item">
195 + <p class="title">节点操作</p>
196 + </div> -->
197 + </div>
198 + </div>
199 + </div>
200 + <div v-else class="more-attr-set">
201 + <el-button @click="onConfirmMoreAttr(state.more_attr_data)" type="primary" style="width: 100%;">完成</el-button>
202 + <div class="more-attr-switch">
203 + <div class="more-attr-title">{{ state.more_attr_data.label }}</div>
204 + <div><el-switch v-model="state.more_attr_data.show" /></div>
205 + </div>
206 + <p class="more-attr-tip">{{ state.more_attr_data.desc }}</p>
207 + <div v-if="state.more_attr_data.btnText">
208 + <p style="font-size: 14px; font-weight: bold;">按钮文字</p>
209 + <el-input v-model="state.more_attr_data.btnText" />
177 </div> 210 </div>
178 </div> 211 </div>
179 </el-tab-pane> 212 </el-tab-pane>
...@@ -236,8 +269,10 @@ ...@@ -236,8 +269,10 @@
236 </template> 269 </template>
237 <!-- 表单底部按钮 --> 270 <!-- 表单底部按钮 -->
238 <template v-slot:foot> 271 <template v-slot:foot>
272 + <div v-if="state.main_attr_set">
239 <el-button type="primary" @click="saveForm">保存</el-button> 273 <el-button type="primary" @click="saveForm">保存</el-button>
240 <el-button @click="cancel">取消</el-button> 274 <el-button @click="cancel">取消</el-button>
275 + </div>
241 </template> 276 </template>
242 </vue-flow-editor> 277 </vue-flow-editor>
243 </div> 278 </div>
...@@ -388,6 +423,70 @@ export default { ...@@ -388,6 +423,70 @@ export default {
388 dialogUserFormVisible: false, 423 dialogUserFormVisible: false,
389 activeName: 'node', 424 activeName: 'node',
390 attr_radio: '基础属性', 425 attr_radio: '基础属性',
426 + main_attr_set: true,
427 + more_attr_switch: false,
428 + more_attr: [ // 更多属性
429 + {
430 + id: 'no-1',
431 + label: '审批意见',
432 + data: [
433 + {
434 + id: 'text-1',
435 + label: '文本意见',
436 + show: true,
437 + desc: '用户在处理流程时,可通过输入框或快捷选项录入文本意见。',
438 + btnText: '',
439 + },
440 + {
441 + id: 'signature-1',
442 + label: '手写签名',
443 + show: false,
444 + desc: '用户在处理流程时,需要签名确认。',
445 + btnText: ''
446 + },
447 + ]
448 + },
449 + {
450 + id: 'no-2',
451 + label: '节点操作',
452 + data: [
453 + {
454 + id: 'node-1',
455 + label: '提交',
456 + show: true,
457 + desc: '用户在处理流程时点击此按钮,将保存用户在此节点中对数据的更改,流程数据流转至后续节点。',
458 + btnText: '提交'
459 + },
460 + {
461 + id: 'node-2',
462 + label: '暂存',
463 + show: false,
464 + desc: '暂存后将保存在此节点中对数据的更改,流程不发生流转。',
465 + btnText: '暂存'
466 + },
467 + {
468 + id: 'node-3',
469 + label: '撤回',
470 + show: false,
471 + desc: '开启后,用户在处理流程时点击此按钮,将保存用户在此节点中对数据的更改,同时流程退回到指定的节点中。',
472 + btnText: '撤回'
473 + },
474 + {
475 + id: 'node-4',
476 + label: '回退',
477 + show: false,
478 + desc: '开启后,用户在处理流程时点击此按钮,将保存用户在此节点中对数据的更改,同时流程退回到指定的节点中。',
479 + btnText: '回退'
480 + },
481 + ],
482 + }
483 + ],
484 + more_attr_data: {
485 + label: '',
486 + show: false,
487 + desc: '',
488 + btnText: '',
489 + },
391 node_name: '', // 节点名称 490 node_name: '', // 节点名称
392 userTags: [ // 节点负责人 491 userTags: [ // 节点负责人
393 { id: "user-1-1", name: "用户1-1" } 492 { id: "user-1-1", name: "用户1-1" }
...@@ -666,6 +765,14 @@ export default { ...@@ -666,6 +765,14 @@ export default {
666 editor.closeModel() 765 editor.closeModel()
667 } 766 }
668 767
768 + const setMoreAttr = (attr: any, index: any) => { // 打开更多属性细节回调
769 + state.main_attr_set = false;
770 + state.more_attr_data = attr['data'][index]; // 同步数据
771 + }
772 + const onConfirmMoreAttr = (item: any) => { // 保存更多属性细节回调
773 + state.main_attr_set = true;
774 + }
775 +
669 /** 776 /**
670 * 保存表单信息 777 * 保存表单信息
671 * 778 *
...@@ -678,7 +785,6 @@ export default { ...@@ -678,7 +785,6 @@ export default {
678 // } 785 // }
679 // }) 786 // })
680 state.detailModel.text = state.node_name 787 state.detailModel.text = state.node_name
681 -
682 // state.detailModel.label = state.node_name 788 // state.detailModel.label = state.node_name
683 // 更新流程图信息 789 // 更新流程图信息
684 editor.updateModel(state.detailModel) 790 editor.updateModel(state.detailModel)
...@@ -686,6 +792,7 @@ export default { ...@@ -686,6 +792,7 @@ export default {
686 console.log('节点名称', state.node_name) 792 console.log('节点名称', state.node_name)
687 console.log('节点负责人', state.userTags) 793 console.log('节点负责人', state.userTags)
688 console.log('字段权限', state.field_auths) 794 console.log('字段权限', state.field_auths)
795 + console.log('更多属性', state.more_attr)
689 } 796 }
690 797
691 /** 798 /**
...@@ -916,6 +1023,8 @@ export default { ...@@ -916,6 +1023,8 @@ export default {
916 onDragEndNode, 1023 onDragEndNode,
917 onDblClickEdge, 1024 onDblClickEdge,
918 cancel, 1025 cancel,
1026 + setMoreAttr,
1027 + onConfirmMoreAttr,
919 saveForm, 1028 saveForm,
920 handleBeforeDelete, 1029 handleBeforeDelete,
921 handleAfterDelete, 1030 handleAfterDelete,
...@@ -986,4 +1095,66 @@ body { ...@@ -986,4 +1095,66 @@ body {
986 color: #dcdfe6; 1095 color: #dcdfe6;
987 } 1096 }
988 } 1097 }
1098 +
1099 +.more-attr {
1100 + .more-attr-item {
1101 + .title {
1102 + font-size: 14px;
1103 + color: #000;
1104 + margin-bottom: 8px;
1105 + }
1106 + .content {
1107 + font-size: 14px;
1108 + background: #f0f1f4;
1109 + border: 1px solid #e6e8ed;
1110 + border-radius: 2px;
1111 + padding: 10px;
1112 + position: relative;
1113 + display: flex;
1114 + justify-content: space-between;
1115 + align-items: center;
1116 + .left {
1117 + }
1118 + .right {
1119 + }
1120 + .active {
1121 + color: #409eff;
1122 + }
1123 + }
1124 + .content:hover .btn-action {
1125 + display: flex;
1126 + }
1127 + .btn-action {
1128 + background: hsla(0, 0%, 94%, 0.8);
1129 + display: none;
1130 + font-size: 14px;
1131 + height: 100%;
1132 + left: 0;
1133 + position: absolute;
1134 + text-align: center;
1135 + top: 0;
1136 + width: 100%;
1137 + cursor: pointer;
1138 + align-items: center;
1139 + justify-content: center;
1140 + }
1141 + }
1142 +}
1143 +.more-attr-set {
1144 + .more-attr-switch {
1145 + display: flex;
1146 + justify-content: space-between;
1147 + margin-top: 10px;
1148 + align-items: center;
1149 + .more-attr-title {
1150 + font-size: 14px;
1151 + font-weight: bold;
1152 + }
1153 + }
1154 + .more-attr-tip {
1155 + color: #525967;
1156 + margin-top: 10px;
1157 + font-size: 14px;
1158 + }
1159 +}
989 </style> 1160 </style>
......