useJumpEditorDrawer.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. import { ref, watch } from "vue";
  2. import { ElMessageBox } from "element-plus";
  3. const useJumpEditorDrawer = (curNodeRef, graphRef) => {
  4. // 跳转模块得抽屉状态
  5. const jumpDrawerRef = ref(false);
  6. // 跳转模块得表单数据
  7. const jumpFormRef = ref({
  8. jumpNodeId: "",
  9. jumpNodeName: "",
  10. });
  11. // 表单规则
  12. const jumpFormRuleRef = ref({
  13. jumpNodeName: [
  14. { required: true, message: "请选择跳转模块", trigger: "change" },
  15. ],
  16. });
  17. // 可以跳转得节点列表
  18. const canJumpNodeListRef = ref([]);
  19. // 更新可以跳转节点列表
  20. const updataCanJumpNodeList = () => {
  21. const allNode = graphRef.value.getNodes();
  22. const curNode = curNodeRef.value;
  23. const curModel = curNode.getModel();
  24. // 过滤出非自己本身和直接上级节点的所有节点
  25. const result = [];
  26. for (let i = 0; i < allNode.length; i++) {
  27. const _node = allNode[i];
  28. const _model = _node.getModel();
  29. if (_model.type === "jump-node" || _model.id === curModel.preNodeId)
  30. continue;
  31. result.push({
  32. jumpNodeId: _model.id,
  33. jumpNodeName: _model.data?.name || "",
  34. });
  35. }
  36. canJumpNodeListRef.value = result;
  37. };
  38. // 选择跳转节点之后赋值跳转节点名称
  39. const handleChangeJumpTarget = (jumpNodeId) => {
  40. const target = canJumpNodeListRef.value.find(
  41. (item) => item.jumpNodeId === jumpNodeId
  42. );
  43. jumpFormRef.value.jumpNodeId = jumpNodeId;
  44. jumpFormRef.value.jumpNodeName = target.jumpNodeName;
  45. };
  46. // 关闭抽屉
  47. const handleJumpCancel = () => {
  48. ElMessageBox.confirm("是否确认取消更改?")
  49. .then(() => {
  50. jumpDrawerRef.value = false;
  51. curNodeRef.value = null;
  52. })
  53. .catch(() => {
  54. // catch error
  55. });
  56. };
  57. // 保存
  58. const handleJumpSave = () => {
  59. if (!graphRef.value) return console.warn("画布不存在");
  60. const config = {
  61. data: {
  62. jumpNodeId: jumpFormRef.value.jumpNodeId,
  63. jumpNodeName: jumpFormRef.value.jumpNodeName,
  64. },
  65. };
  66. // 更新当前节点
  67. graphRef.value.updateItem(curNodeRef.value, config);
  68. jumpDrawerRef.value = false;
  69. curNodeRef.value = null;
  70. };
  71. // 根据传入的节点初始化内容
  72. const init = (node) => {
  73. const model = node.getModel();
  74. const data = model.data || {};
  75. jumpFormRef.value = {
  76. jumpNodeId: data.jumpNodeId,
  77. jumpNodeName: data.jumpNodeName,
  78. };
  79. };
  80. watch(
  81. () => curNodeRef.value,
  82. (node) => {
  83. if (!node) return;
  84. init(node);
  85. }
  86. );
  87. return {
  88. jumpDrawerRef,
  89. jumpFormRef,
  90. jumpFormRuleRef,
  91. canJumpNodeListRef,
  92. updataCanJumpNodeList,
  93. handleChangeJumpTarget,
  94. handleJumpCancel,
  95. handleJumpSave,
  96. };
  97. };
  98. export default useJumpEditorDrawer;