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> <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> | ... | ... |
-
Please register or login to post a comment