hookehuyr

新增切换流程图版本功能

...@@ -316,19 +316,18 @@ ...@@ -316,19 +316,18 @@
316 <span style="font-size: 12px; transform: scale(0.8); margin-top: 2px;">启用</span> 316 <span style="font-size: 12px; transform: scale(0.8); margin-top: 2px;">启用</span>
317 </div> 317 </div>
318 </el-tooltip> --> 318 </el-tooltip> -->
319 - <!-- <div style="position: absolute; top:20px; right: 15px;"> 319 + <div style="position: absolute; top:20px; right: 15px;">
320 <el-dropdown trigger="click"> 320 <el-dropdown trigger="click">
321 <div style="margin-left: 15px;"> 321 <div style="margin-left: 15px;">
322 - <div style="width: 10px; height: 10px; background-color: #009688; border-radius: 50%; display: inline-block;"></div> <span style="font-size: 13px;">流程版本 (V1)</span> 322 + <div style="width: 10px; height: 10px; background-color: #009688; border-radius: 50%; display: inline-block;"></div> <span style="font-size: 13px;">流程版本 (V{{ state.flow_version }})</span>
323 </div> 323 </div>
324 <template #dropdown> 324 <template #dropdown>
325 <el-dropdown-menu> 325 <el-dropdown-menu>
326 - <el-dropdown-item>流程版本 (V2)</el-dropdown-item> 326 + <el-dropdown-item @click.native="onSelectFlowVersion(item.id)" v-for="(item, index) in state.flow_version_list" :key="index">流程版本 (V{{ item.code }})</el-dropdown-item>
327 - <el-dropdown-item>流程版本 (V3)</el-dropdown-item>
328 </el-dropdown-menu> 327 </el-dropdown-menu>
329 </template> 328 </template>
330 </el-dropdown> 329 </el-dropdown>
331 - </div> --> 330 + </div>
332 </template> 331 </template>
333 <!-- 表单底部按钮 --> 332 <!-- 表单底部按钮 -->
334 <template v-slot:foot> 333 <template v-slot:foot>
...@@ -338,6 +337,12 @@ ...@@ -338,6 +337,12 @@
338 </div> 337 </div>
339 </template> 338 </template>
340 </vue-flow-editor> 339 </vue-flow-editor>
340 + <div v-if="state.reloadLoading" style="position: absolute; top: 0; right: 0; left: 0; bottom: 0; background-color: rgba(255, 255, 255, 0.5);width: 100%; height: 100%; z-index: 2006;">
341 + <div class="el-loading-spinner">
342 + <svg class="circular" viewBox="0 0 50 50"><circle class="path" cx="25" cy="25" r="20" fill="none"></circle></svg>
343 + <p class="el-loading-text">加载流程图中...</p>
344 + </div>
345 + </div>
341 </div> 346 </div>
342 347
343 <select-user-view 348 <select-user-view
...@@ -419,6 +424,7 @@ export default { ...@@ -419,6 +424,7 @@ export default {
419 detailModel: null, 424 detailModel: null,
420 editorLoading: false, // 开始编辑器的loading状态 425 editorLoading: false, // 开始编辑器的loading状态
421 statusLoading: false, // loading状态 426 statusLoading: false, // loading状态
427 + reloadLoading: false, // loading状态
422 // menuData: [ 428 // menuData: [
423 // { 429 // {
424 // label: '流程节点', 430 // label: '流程节点',
...@@ -507,6 +513,8 @@ export default { ...@@ -507,6 +513,8 @@ export default {
507 auth_all_edit: false, 513 auth_all_edit: false,
508 field_auths: [], 514 field_auths: [],
509 field_extend: [], 515 field_extend: [],
516 + flow_version: '',
517 + flow_version_list: [],
510 }) 518 })
511 519
512 /** 520 /**
...@@ -574,6 +582,8 @@ export default { ...@@ -574,6 +582,8 @@ export default {
574 582
575 // TAG: 接口获取流程图数据 583 // TAG: 接口获取流程图数据
576 const flowData = ref<any>(null); 584 const flowData = ref<any>(null);
585 + const getFlowData = (flow_id) => {
586 + flowData.value = null;
577 axios.get('/admin/?a=flow_nodes&flow_id=' + flow_id) 587 axios.get('/admin/?a=flow_nodes&flow_id=' + flow_id)
578 .then(res => { 588 .then(res => {
579 if (res.data.code) { 589 if (res.data.code) {
...@@ -600,21 +610,26 @@ export default { ...@@ -600,21 +610,26 @@ export default {
600 } else { 610 } else {
601 flowData.value = res.data.data; // 获取已存在的数据 611 flowData.value = res.data.data; // 获取已存在的数据
602 } 612 }
613 + state.reloadLoading = false;
603 } else { 614 } else {
604 ElMessage({ 615 ElMessage({
605 type: 'error', 616 type: 'error',
606 message: res.data.msg, 617 message: res.data.msg,
607 }); 618 });
619 + state.reloadLoading = false;
608 } 620 }
609 }) 621 })
610 .catch(err => { 622 .catch(err => {
611 console.error(err); 623 console.error(err);
624 + state.reloadLoading = false;
612 }); 625 });
626 + }
627 + getFlowData(flow_id);
613 628
614 - onMounted(async () => {
615 - document.title = '可视化流程设计器'
616 // 显示提示框的标志位 629 // 显示提示框的标志位
617 var showConfirmation = true; 630 var showConfirmation = true;
631 + onMounted(async () => {
632 + document.title = '可视化流程设计器'
618 // 监听 beforeunload 事件 633 // 监听 beforeunload 事件
619 window.addEventListener('beforeunload', function (event) { 634 window.addEventListener('beforeunload', function (event) {
620 if (showConfirmation) { 635 if (showConfirmation) {
...@@ -632,7 +647,56 @@ export default { ...@@ -632,7 +647,56 @@ export default {
632 // state.detailModel = null; 647 // state.detailModel = null;
633 // editor.closeModel(); 648 // editor.closeModel();
634 // }); 649 // });
650 + getVersionList();
651 + });
652 +
653 + const getVersionList = () => {
654 + // 获取版本信息列表
655 + axios.get('/admin/?a=flow_version&form_id=' + form_id)
656 + .then(res => {
657 + if (res.data.code) {
658 + // 启用的版本号
659 + res.data.data.forEach((ele) => {
660 + if (ele.status === '1') {
661 + state.flow_version = ele.code;
662 + }
663 + });
664 + // 版本列表
665 + state.flow_version_list = res.data.data.filter((ele) => {
666 + return ele.status !== '1';
667 + });
668 + } else {
669 + ElMessage({
670 + type: 'error',
671 + message: res.data.msg,
672 + });
673 + }
635 }) 674 })
675 + .catch(err => {
676 + console.error(err);
677 + });
678 + }
679 +
680 + const onSelectFlowVersion = (id: string) => {
681 + // 切换版本信息
682 + axios.post('/admin/?a=enable_flow_version', qs.stringify({ id: +id }))
683 + .then(res => {
684 + if (res.data.code) {
685 + getVersionList();
686 + updateUrl(res.data.data);
687 + state.reloadLoading = true;
688 + getFlowData(res.data.data);
689 + } else {
690 + ElMessage({
691 + type: 'error',
692 + message: res.data.msg,
693 + });
694 + }
695 + })
696 + .catch(err => {
697 + console.error(err);
698 + });
699 + }
636 700
637 function handleActiveChange(name: any) { 701 function handleActiveChange(name: any) {
638 console.warn(name) 702 console.warn(name)
...@@ -1451,6 +1515,7 @@ export default { ...@@ -1451,6 +1515,7 @@ export default {
1451 handleBeforeAdd, 1515 handleBeforeAdd,
1452 handleAfterAdd, 1516 handleAfterAdd,
1453 1517
1518 + onSelectFlowVersion,
1454 handleActiveChange, 1519 handleActiveChange,
1455 onAuthVisibleChange, 1520 onAuthVisibleChange,
1456 onAuthEditableChange, 1521 onAuthEditableChange,
...@@ -1613,13 +1678,15 @@ body { ...@@ -1613,13 +1678,15 @@ body {
1613 } 1678 }
1614 1679
1615 .el-loading-spinner .path { 1680 .el-loading-spinner .path {
1616 - stroke: #009688!important; 1681 + stroke: #009688 !important;
1617 } 1682 }
1618 .el-loading-spinner .el-loading-text { 1683 .el-loading-spinner .el-loading-text {
1619 color: #009688 !important; 1684 color: #009688 !important;
1620 } 1685 }
1621 1686
1622 -:focus-visible { outline: none; } 1687 +:focus-visible {
1688 + outline: none;
1689 +}
1623 1690
1624 .el-dropdown-menu__item:not(.is-disabled):focus { 1691 .el-dropdown-menu__item:not(.is-disabled):focus {
1625 background-color: white; 1692 background-color: white;
......