Showing
1 changed file
with
132 additions
and
3 deletions
| ... | @@ -112,6 +112,32 @@ | ... | @@ -112,6 +112,32 @@ |
| 112 | </el-tag> | 112 | </el-tag> |
| 113 | <div v-else class="text-empty">请选择成员</div> | 113 | <div v-else class="text-empty">请选择成员</div> |
| 114 | </div> | 114 | </div> |
| 115 | + <div> | ||
| 116 | + <el-checkbox v-model="state.has_next_step_user">选择下一步的执行人</el-checkbox> | ||
| 117 | + <!-- TODO: 需要给每个子分支选择下一步执行人,删除分支的时候需要删除保存的值 --> | ||
| 118 | + <el-select v-model="state.next_step_node" placeholder="请选择节点" style="margin-bottom: 0.5rem;"> | ||
| 119 | + <el-option | ||
| 120 | + v-for="node in state.next_step_node_opt" | ||
| 121 | + :key="node.value" | ||
| 122 | + :label="node.label" | ||
| 123 | + :value="node.value"> | ||
| 124 | + </el-option> | ||
| 125 | + </el-select> | ||
| 126 | + <div class="flow-tag__wrapper" @click="openNextStepUserForm"> | ||
| 127 | + <el-tag | ||
| 128 | + v-if="state.nextStepUserTags.length" | ||
| 129 | + v-for="tag in state.nextStepUserTags" | ||
| 130 | + :key="tag.name" | ||
| 131 | + style="margin: 0 0.25rem 0.5rem 0.25rem;" | ||
| 132 | + > | ||
| 133 | + <el-icon v-if="tag.type === 'dept'" style="height: 13px; display: inline-block; vertical-align: middle; line-height: 10px;"><House /></el-icon> | ||
| 134 | + <el-icon v-if="tag.type === 'user'" style="height: 12px; display: inline-block; vertical-align: middle; line-height: 10px;"><Female /></el-icon> | ||
| 135 | + <el-icon v-if="tag.type === 'role'" style="height: 12px; display: inline-block; vertical-align: middle; line-height: 10px;"><User /></el-icon> | ||
| 136 | + <span style="margin-left: 2px; height: 10px; display: inline-block; vertical-align: middle; line-height: 10px;">{{ tag.name }}</span> | ||
| 137 | + </el-tag> | ||
| 138 | + <div v-else class="text-empty">请选择成员</div> | ||
| 139 | + </div> | ||
| 140 | + </div> | ||
| 115 | </div> | 141 | </div> |
| 116 | <!-- <el-form-item v-if="state.select_attr_set" prop="attr" style="width: 100%;"> --> | 142 | <!-- <el-form-item v-if="state.select_attr_set" prop="attr" style="width: 100%;"> --> |
| 117 | <!-- <el-radio-group | 143 | <!-- <el-radio-group |
| ... | @@ -229,7 +255,7 @@ | ... | @@ -229,7 +255,7 @@ |
| 229 | </div> | 255 | </div> |
| 230 | </div> | 256 | </div> |
| 231 | <div v-else class="more-attr-set"> | 257 | <div v-else class="more-attr-set"> |
| 232 | - <el-button @click="onConfirmMoreAttr(state.more_attr_data)" type="primary" color="#009688" style="width: 100%;">完成</el-button> | 258 | + <el-button @click="onConfirmMoreAttr(state.more_attr_data)" type="primary" color="#009688" style="width: 100%;">返回</el-button> |
| 233 | <div class="more-attr-switch"> | 259 | <div class="more-attr-switch"> |
| 234 | <div class="more-attr-title">{{ state.more_attr_data.label }}</div> | 260 | <div class="more-attr-title">{{ state.more_attr_data.label }}</div> |
| 235 | <div><el-switch v-model="state.more_attr_data.show" /></div> | 261 | <div><el-switch v-model="state.more_attr_data.show" /></div> |
| ... | @@ -239,6 +265,38 @@ | ... | @@ -239,6 +265,38 @@ |
| 239 | <p style="font-size: 14px; font-weight: bold;">按钮文字</p> | 265 | <p style="font-size: 14px; font-weight: bold;">按钮文字</p> |
| 240 | <el-input v-model="state.more_attr_data.btnText" /> | 266 | <el-input v-model="state.more_attr_data.btnText" /> |
| 241 | </div> | 267 | </div> |
| 268 | + <div v-if="state.more_attr_data.is_node"> | ||
| 269 | + {{ state.more_attr_data }} | ||
| 270 | + <p style="font-size: 14px; font-weight: bold;">消息配置</p> | ||
| 271 | + <div style="display: flex; justify-content: space-between; align-items: center;"> | ||
| 272 | + <div style="font-size: 0.9rem;">开关</div> | ||
| 273 | + <div><el-switch v-model="state.more_attr_data.msg_opt.is_open" /></div> | ||
| 274 | + </div> | ||
| 275 | + <div> | ||
| 276 | + <div style="font-size: 0.9rem; margin: 0.5rem 0;">接收对象(整个组织用户范围)</div> | ||
| 277 | + <div class="flow-tag__wrapper" @click="openNextStepUserForm"> | ||
| 278 | + <el-tag | ||
| 279 | + v-if="state.nextStepUserTags.length" | ||
| 280 | + v-for="tag in state.nextStepUserTags" | ||
| 281 | + :key="tag.name" | ||
| 282 | + style="margin: 0 0.25rem 0.5rem 0.25rem;" | ||
| 283 | + > | ||
| 284 | + <el-icon v-if="tag.type === 'dept'" style="height: 13px; display: inline-block; vertical-align: middle; line-height: 10px;"><House /></el-icon> | ||
| 285 | + <el-icon v-if="tag.type === 'user'" style="height: 12px; display: inline-block; vertical-align: middle; line-height: 10px;"><Female /></el-icon> | ||
| 286 | + <el-icon v-if="tag.type === 'role'" style="height: 12px; display: inline-block; vertical-align: middle; line-height: 10px;"><User /></el-icon> | ||
| 287 | + <span style="margin-left: 2px; height: 10px; display: inline-block; vertical-align: middle; line-height: 10px;">{{ tag.name }}</span> | ||
| 288 | + </el-tag> | ||
| 289 | + <div v-else class="text-empty">请选择成员</div> | ||
| 290 | + </div> | ||
| 291 | + </div> | ||
| 292 | + <div> | ||
| 293 | + <div style="font-size: 0.9rem; margin: 0.5rem 0;">消息类型(站内信、微信)</div> | ||
| 294 | + <el-checkbox-group v-model="state.more_attr_data.msg_opt.msg_type"> | ||
| 295 | + <el-checkbox label="站内信"></el-checkbox> | ||
| 296 | + <el-checkbox label="微信"></el-checkbox> | ||
| 297 | + </el-checkbox-group> | ||
| 298 | + </div> | ||
| 299 | + </div> | ||
| 242 | </div> | 300 | </div> |
| 243 | </el-tab-pane> | 301 | </el-tab-pane> |
| 244 | <!-- <el-tab-pane label="流程属性" name="flow" style="padding: 0 1rem"> | 302 | <!-- <el-tab-pane label="流程属性" name="flow" style="padding: 0 1rem"> |
| ... | @@ -684,10 +742,17 @@ export default { | ... | @@ -684,10 +742,17 @@ export default { |
| 684 | showBtn: true, | 742 | showBtn: true, |
| 685 | desc: '', | 743 | desc: '', |
| 686 | btnText: '', | 744 | btnText: '', |
| 745 | + is_node: false, | ||
| 746 | + msg_opt: { | ||
| 747 | + is_open: false, // 开关 | ||
| 748 | + user: [], // 接收对象 | ||
| 749 | + msg_type: [] // 消息类型 | ||
| 750 | + } | ||
| 687 | }, | 751 | }, |
| 688 | node_name: '', // 节点名称 | 752 | node_name: '', // 节点名称 |
| 689 | node_idx: null, // 节点index | 753 | node_idx: null, // 节点index |
| 690 | userTags: [], // 节点负责人, | 754 | userTags: [], // 节点负责人, |
| 755 | + nextStepUserTags: [], // 下一步节点负责人, | ||
| 691 | auth_all_checked: false, | 756 | auth_all_checked: false, |
| 692 | auth_all_edit: false, | 757 | auth_all_edit: false, |
| 693 | field_auths: [], | 758 | field_auths: [], |
| ... | @@ -710,6 +775,17 @@ export default { | ... | @@ -710,6 +775,17 @@ export default { |
| 710 | window_height: '500px', | 775 | window_height: '500px', |
| 711 | preview_form_url: '', | 776 | preview_form_url: '', |
| 712 | drawer: false, | 777 | drawer: false, |
| 778 | + has_next_step_user: true, | ||
| 779 | + is_user_tags_visible: false, | ||
| 780 | + is_next_step_user_visible: false, | ||
| 781 | + next_step_node: '', | ||
| 782 | + next_step_node_opt: [{ | ||
| 783 | + value: '1', | ||
| 784 | + label: '节点1' | ||
| 785 | + }, { | ||
| 786 | + value: '2', | ||
| 787 | + label: '节点2' | ||
| 788 | + },] | ||
| 713 | }); | 789 | }); |
| 714 | 790 | ||
| 715 | const setNodeTree = (id: string, data: object) => { | 791 | const setNodeTree = (id: string, data: object) => { |
| ... | @@ -1028,6 +1104,7 @@ export default { | ... | @@ -1028,6 +1104,7 @@ export default { |
| 1028 | }, | 1104 | }, |
| 1029 | // { immediate: true } | 1105 | // { immediate: true } |
| 1030 | ); | 1106 | ); |
| 1107 | + // TODO:需要监听state.nextStepUserTags的变化赋值 | ||
| 1031 | watch( | 1108 | watch( |
| 1032 | () => state.field_auths, | 1109 | () => state.field_auths, |
| 1033 | (newValue, oldValue) => { | 1110 | (newValue, oldValue) => { |
| ... | @@ -1393,15 +1470,41 @@ export default { | ... | @@ -1393,15 +1470,41 @@ export default { |
| 1393 | */ | 1470 | */ |
| 1394 | const openUserForm = () => { | 1471 | const openUserForm = () => { |
| 1395 | state.dialogUserFormVisible = true; | 1472 | state.dialogUserFormVisible = true; |
| 1473 | + state.is_user_tags_visible = true; | ||
| 1396 | state.dialogUserTags = state.node_tree[state.detailModel.id].user; | 1474 | state.dialogUserTags = state.node_tree[state.detailModel.id].user; |
| 1397 | } | 1475 | } |
| 1398 | 1476 | ||
| 1477 | + const openNextStepUserForm = () => { // 打开下一步用户弹框 | ||
| 1478 | + state.dialogUserFormVisible = true; | ||
| 1479 | + state.is_next_step_user_visible = true; | ||
| 1480 | + // TODO: 重新打开的时候需要把选中的数据还原显示 | ||
| 1481 | + // TODO: 监听变化会把下面的值改变之后更新到显示上面 | ||
| 1482 | + state.nextStepUserTags = state.node_tree[state.detailModel.id].user; | ||
| 1483 | + state.dialogUserTags = [ | ||
| 1484 | + { | ||
| 1485 | + "id": 137919, | ||
| 1486 | + "type": "user", | ||
| 1487 | + "name": "11组寝室长" | ||
| 1488 | + }, | ||
| 1489 | + { | ||
| 1490 | + "id": 137923, | ||
| 1491 | + "type": "user", | ||
| 1492 | + "name": "13组寝室长" | ||
| 1493 | + } | ||
| 1494 | + ]; | ||
| 1495 | + } | ||
| 1496 | + | ||
| 1399 | const onCloseUserView = (status: boolean) => { | 1497 | const onCloseUserView = (status: boolean) => { |
| 1400 | state.dialogUserFormVisible = status | 1498 | state.dialogUserFormVisible = status |
| 1401 | } | 1499 | } |
| 1402 | 1500 | ||
| 1403 | const onConfirmUserView = async (data: any) => { // 负责人弹框确认回调 | 1501 | const onConfirmUserView = async (data: any) => { // 负责人弹框确认回调 |
| 1404 | - state.userTags = data; | 1502 | + if (state.is_user_tags_visible) { // 赋值给负责人框 |
| 1503 | + state.userTags = data; | ||
| 1504 | + } | ||
| 1505 | + if (state.is_next_step_user_visible) { // 赋值给下一步负责人框 | ||
| 1506 | + state.nextStepUserTags = data; | ||
| 1507 | + } | ||
| 1405 | // // 自动保存流程 | 1508 | // // 自动保存流程 |
| 1406 | // let { nodes, edges } = editor.editorState.graph.save(); | 1509 | // let { nodes, edges } = editor.editorState.graph.save(); |
| 1407 | // // 检查路径有效性 | 1510 | // // 检查路径有效性 |
| ... | @@ -1534,6 +1637,8 @@ export default { | ... | @@ -1534,6 +1637,8 @@ export default { |
| 1534 | state.statusLoading = false; | 1637 | state.statusLoading = false; |
| 1535 | state.node_name = state.node_tree[state.detailModel.id].name; | 1638 | state.node_name = state.node_tree[state.detailModel.id].name; |
| 1536 | state.userTags = state.node_tree[state.detailModel.id].user; | 1639 | state.userTags = state.node_tree[state.detailModel.id].user; |
| 1640 | + // TODO:获取下一步操作人列表 | ||
| 1641 | + state.nextStepUserTags = state.node_tree[state.detailModel.id].user; | ||
| 1537 | state.dialogUserTags = state.node_tree[state.detailModel.id].user; | 1642 | state.dialogUserTags = state.node_tree[state.detailModel.id].user; |
| 1538 | state.field_auths = state.node_tree[state.detailModel.id].field_auths; | 1643 | state.field_auths = state.node_tree[state.detailModel.id].field_auths; |
| 1539 | state.more_attr = state.node_tree[state.detailModel.id].property; | 1644 | state.more_attr = state.node_tree[state.detailModel.id].property; |
| ... | @@ -1564,6 +1669,8 @@ export default { | ... | @@ -1564,6 +1669,8 @@ export default { |
| 1564 | state.statusLoading = false; | 1669 | state.statusLoading = false; |
| 1565 | state.node_name = data.name ? data.name : model.text; // 节点名称 | 1670 | state.node_name = data.name ? data.name : model.text; // 节点名称 |
| 1566 | state.userTags = data.user; // 节点负责人 | 1671 | state.userTags = data.user; // 节点负责人 |
| 1672 | + // TODO:获取下一步操作人列表 | ||
| 1673 | + state.nextStepUserTags = data.user; | ||
| 1567 | state.dialogUserTags = state.userTags; // 同步给弹框数据 | 1674 | state.dialogUserTags = state.userTags; // 同步给弹框数据 |
| 1568 | state.field_extend = data.field; // 字段权限临时储存,实际传给后端数据结构 | 1675 | state.field_extend = data.field; // 字段权限临时储存,实际传给后端数据结构 |
| 1569 | state.field_auths = []; // 清空字段权限列表,本地使用数据结构 | 1676 | state.field_auths = []; // 清空字段权限列表,本地使用数据结构 |
| ... | @@ -1602,6 +1709,21 @@ export default { | ... | @@ -1602,6 +1709,21 @@ export default { |
| 1602 | return ele.id !== 'reject' | 1709 | return ele.id !== 'reject' |
| 1603 | }); | 1710 | }); |
| 1604 | } | 1711 | } |
| 1712 | + // TODO:模拟节点操作-消息配置数据结构 | ||
| 1713 | + let msg_opt = { | ||
| 1714 | + is_open: false, // 开关 | ||
| 1715 | + user: [], // 接收对象 | ||
| 1716 | + msg_type: [] // 消息类型 | ||
| 1717 | + } | ||
| 1718 | + state.more_attr.forEach(attr => { | ||
| 1719 | + if (attr.id === 'no-2') { | ||
| 1720 | + attr.data.forEach(ele => { | ||
| 1721 | + console.warn(ele); | ||
| 1722 | + ele.msg_opt = msg_opt; | ||
| 1723 | + }) | ||
| 1724 | + } | ||
| 1725 | + }); | ||
| 1726 | + | ||
| 1605 | 1727 | ||
| 1606 | // 抄送节点不显示 | 1728 | // 抄送节点不显示 |
| 1607 | if (state.detailModel.control === 'cc') { | 1729 | if (state.detailModel.control === 'cc') { |
| ... | @@ -1698,8 +1820,10 @@ export default { | ... | @@ -1698,8 +1820,10 @@ export default { |
| 1698 | state.more_attr_data = attr['data'][index]; // 同步数据 | 1820 | state.more_attr_data = attr['data'][index]; // 同步数据 |
| 1699 | if (attr.id === 'no-1') { // 如果是审批意见,按钮文字不可以修改 | 1821 | if (attr.id === 'no-1') { // 如果是审批意见,按钮文字不可以修改 |
| 1700 | state.more_attr_data.showBtn = false; | 1822 | state.more_attr_data.showBtn = false; |
| 1701 | - } else { | 1823 | + state.more_attr_data.is_node = false; // 节点属性标识 |
| 1824 | + } else { // 节点操作 | ||
| 1702 | state.more_attr_data.showBtn = true; | 1825 | state.more_attr_data.showBtn = true; |
| 1826 | + state.more_attr_data.is_node = true; // 节点属性标识 | ||
| 1703 | } | 1827 | } |
| 1704 | } | 1828 | } |
| 1705 | 1829 | ||
| ... | @@ -2413,6 +2537,7 @@ export default { | ... | @@ -2413,6 +2537,7 @@ export default { |
| 2413 | handleNodeNameChange, | 2537 | handleNodeNameChange, |
| 2414 | 2538 | ||
| 2415 | openUserForm, | 2539 | openUserForm, |
| 2540 | + openNextStepUserForm, | ||
| 2416 | onCloseUserView, | 2541 | onCloseUserView, |
| 2417 | onConfirmUserView, | 2542 | onConfirmUserView, |
| 2418 | 2543 | ||
| ... | @@ -2701,6 +2826,10 @@ body { | ... | @@ -2701,6 +2826,10 @@ body { |
| 2701 | color: #009688 !important; | 2826 | color: #009688 !important; |
| 2702 | } | 2827 | } |
| 2703 | 2828 | ||
| 2829 | +.el-switch__label.is-active { | ||
| 2830 | + color: #009688 !important; | ||
| 2831 | +} | ||
| 2832 | + | ||
| 2704 | .sort-item { | 2833 | .sort-item { |
| 2705 | padding: 1rem; border: 1px solid #ebeef5; cursor: move; | 2834 | padding: 1rem; border: 1px solid #ebeef5; cursor: move; |
| 2706 | background-color: #fff; | 2835 | background-color: #fff; | ... | ... |
-
Please register or login to post a comment