hookehuyr

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

Showing 1 changed file with 259 additions and 88 deletions
...@@ -84,96 +84,129 @@ ...@@ -84,96 +84,129 @@
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 - <el-form-item prop="label"> 87 + <div v-if="state.main_attr_set" class="main-attr-set">
88 - <div slot="label"> 88 + <el-form-item prop="label">
89 - 节点名称 <span style="color: red;">*</span> 89 + <div slot="label">
90 + 节点名称 <span style="color: red;">*</span>
91 + </div>
92 + <el-input v-model="state.node_name" />
93 + </el-form-item>
94 + <div class="node-user">
95 + <div style="font-size: 14px; margin-bottom: 10px;">
96 + 节点负责人 <span style="color: red;">*</span>
97 + </div>
98 + <div class="flow-tag__wrapper" @click="openUserForm">
99 + <el-tag
100 + v-if="state.userTags.length"
101 + v-for="tag in state.userTags"
102 + :key="tag.name"
103 + style="margin-left: 0.25rem; margin-right: 0.25rem;"
104 + >
105 + {{ tag.name }}
106 + </el-tag>
107 + <div v-else class="text-empty">请选择成员</div>
108 + </div>
90 </div> 109 </div>
91 - <el-input v-model="state.node_name" /> 110 + <el-form-item prop="attr">
92 - </el-form-item> 111 + <el-radio-group
93 - <div class="node-user"> 112 + v-model="state.attr_radio"
94 - <div style="font-size: 14px; margin-bottom: 10px;"> 113 + size="large"
95 - 节点负责人 <span style="color: red;">*</span> 114 + class="attr-radio-group"
96 - </div> 115 + >
97 - <div class="flow-tag__wrapper" @click="openUserForm"> 116 + <el-radio-button label="基础属性" />
98 - <el-tag 117 + <el-radio-button label="更多属性" />
99 - v-if="state.userTags.length" 118 + </el-radio-group>
100 - v-for="tag in state.userTags" 119 + </el-form-item>
101 - :key="tag.name" 120 + <el-form-item v-if="state.attr_radio === '基础属性'" prop="">
102 - style="margin-left: 0.25rem; margin-right: 0.25rem;" 121 + <div slot="label">
122 + 字段权限 <span style="color: red;">*</span>
123 + </div>
124 + <el-row
125 + style="width: 100%; background-color: #f0f1f4; padding-left: 10px;"
103 > 126 >
104 - {{ tag.name }} 127 + <el-col :span="12">字段</el-col>
105 - </el-tag> 128 + <el-col :span="6">可见</el-col>
106 - <div v-else class="text-empty">请选择成员</div> 129 + <el-col :span="6">可编辑</el-col>
130 + </el-row>
131 + <el-row style="width: 100%; padding-left: 10px;">
132 + <el-col :span="12" style="color: #409eff;">全选</el-col>
133 + <el-col :span="6" style="padding-left: 5px;"
134 + ><el-checkbox
135 + @change="onAuthAllChange"
136 + v-model="state.auth_all_checked"
137 + label=""
138 + size="large"
139 + /></el-col>
140 + <el-col :span="6" style="padding-left: 5px;"
141 + ><el-checkbox
142 + @change="onAuthAllEditChange"
143 + v-model="state.auth_all_edit"
144 + label=""
145 + size="large"
146 + /></el-col>
147 + </el-row>
148 + <el-row
149 + v-for="(field, index) in state.field_auths"
150 + :key="index"
151 + style="width: 100%; padding-left: 10px;"
152 + >
153 + <el-col :span="12" style="">{{ field.name }}</el-col>
154 + <el-col :span="6" style="padding-left: 5px;"
155 + ><el-checkbox
156 + v-model="field.visible.checked"
157 + :disabled="field.visible.disabled"
158 + label=""
159 + size="large"
160 + @change="onAuthVisibleChange(field, index)"
161 + /></el-col>
162 + <el-col :span="6" style="padding-left: 5px;"
163 + ><el-checkbox
164 + v-model="field.editable.checked"
165 + :disabled="field.editable.disabled"
166 + label=""
167 + size="large"
168 + @change="onAuthEditableChange(field, index)"
169 + /></el-col>
170 + </el-row>
171 + </el-form-item>
172 + <div v-if="state.attr_radio === '更多属性'">
173 + <div class="more-attr">
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>
182 + </div>
183 + <div v-else class="left">
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>
107 </div> 198 </div>
108 </div> 199 </div>
109 - <el-form-item prop="attr"> 200 + <div v-else class="more-attr-set">
110 - <el-radio-group 201 + <el-button @click="onConfirmMoreAttr(state.more_attr_data)" type="primary" style="width: 100%;">完成</el-button>
111 - v-model="state.attr_radio" 202 + <div class="more-attr-switch">
112 - size="large" 203 + <div class="more-attr-title">{{ state.more_attr_data.label }}</div>
113 - class="attr-radio-group" 204 + <div><el-switch v-model="state.more_attr_data.show" /></div>
114 - >
115 - <el-radio-button label="基础属性" />
116 - <el-radio-button label="更多属性" />
117 - </el-radio-group>
118 - </el-form-item>
119 - <el-form-item v-if="state.attr_radio === '基础属性'" prop="">
120 - <div slot="label">
121 - 字段权限 <span style="color: red;">*</span>
122 - </div>
123 - <el-row
124 - style="width: 100%; background-color: #f0f1f4; padding-left: 10px;"
125 - >
126 - <el-col :span="12">字段</el-col>
127 - <el-col :span="6">可见</el-col>
128 - <el-col :span="6">可编辑</el-col>
129 - </el-row>
130 - <el-row style="width: 100%; padding-left: 10px;">
131 - <el-col :span="12" style="color: #409eff;">全选</el-col>
132 - <el-col :span="6" style="padding-left: 5px;"
133 - ><el-checkbox
134 - @change="onAuthAllChange"
135 - v-model="state.auth_all_checked"
136 - label=""
137 - size="large"
138 - /></el-col>
139 - <el-col :span="6" style="padding-left: 5px;"
140 - ><el-checkbox
141 - @change="onAuthAllEditChange"
142 - v-model="state.auth_all_edit"
143 - label=""
144 - size="large"
145 - /></el-col>
146 - </el-row>
147 - <el-row
148 - v-for="(field, index) in state.field_auths"
149 - :key="index"
150 - style="width: 100%; padding-left: 10px;"
151 - >
152 - <el-col :span="12" style="">{{ field.name }}</el-col>
153 - <el-col :span="6" style="padding-left: 5px;"
154 - ><el-checkbox
155 - v-model="field.visible.checked"
156 - :disabled="field.visible.disabled"
157 - label=""
158 - size="large"
159 - @change="onAuthVisibleChange(field, index)"
160 - /></el-col>
161 - <el-col :span="6" style="padding-left: 5px;"
162 - ><el-checkbox
163 - v-model="field.editable.checked"
164 - :disabled="field.editable.disabled"
165 - label=""
166 - size="large"
167 - @change="onAuthEditableChange(field, index)"
168 - /></el-col>
169 - </el-row>
170 - </el-form-item>
171 - <div v-if="state.attr_radio === '更多属性'">
172 - <div>
173 - <p style="font-size: 14px;">审批意见</p>
174 </div> 205 </div>
175 - <div> 206 + <p class="more-attr-tip">{{ state.more_attr_data.desc }}</p>
176 - <p style="font-size: 14px;">节点操作</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>
239 - <el-button type="primary" @click="saveForm">保存</el-button> 272 + <div v-if="state.main_attr_set">
240 - <el-button @click="cancel">取消</el-button> 273 + <el-button type="primary" @click="saveForm">保存</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>
......