hookehuyr

节点属性新功能点初稿-新增选择下一步执行人和节点操作里添加消息配置

Showing 1 changed file with 131 additions and 2 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) => { // 负责人弹框确认回调
1502 + if (state.is_user_tags_visible) { // 赋值给负责人框
1404 state.userTags = data; 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;
......