変数設定を追加
This commit is contained in:
@@ -1,144 +1,144 @@
|
|||||||
<mxfile host="app.diagrams.net" modified="2024-02-16T02:56:42.507Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36" etag="NzG1tCg9--3lv7kIB1PY" version="23.0.2" type="device">
|
<mxfile host="app.diagrams.net" modified="2024-02-21T05:42:02.026Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36" etag="T2S5cjvthSOlO5DmGw-C" version="23.1.5" type="device">
|
||||||
<diagram id="Z6uZM46JtkVaKDzPjE9h" name="サイトマップ">
|
<diagram id="Z6uZM46JtkVaKDzPjE9h" name="サイトマップ">
|
||||||
<mxGraphModel dx="1434" dy="820" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
|
<mxGraphModel dx="1434" dy="820" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
|
||||||
<root>
|
<root>
|
||||||
<mxCell id="0" />
|
<mxCell id="0" />
|
||||||
<mxCell id="1" parent="0" />
|
<mxCell id="1" parent="0" />
|
||||||
<mxCell id="Gi77RX5G2m4J9-6cMje4-14" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="Gi77RX5G2m4J9-6cMje4-1" target="Gi77RX5G2m4J9-6cMje4-13">
|
<mxCell id="Gi77RX5G2m4J9-6cMje4-14" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="Gi77RX5G2m4J9-6cMje4-1" target="Gi77RX5G2m4J9-6cMje4-13" edge="1">
|
||||||
<mxGeometry relative="1" as="geometry" />
|
<mxGeometry relative="1" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="Gi77RX5G2m4J9-6cMje4-1" value="テナント登録" style="html=1;whiteSpace=wrap;strokeColor=none;fillColor=#0079D6;labelPosition=center;verticalLabelPosition=middle;verticalAlign=top;align=center;fontSize=12;outlineConnect=0;spacingTop=-6;fontColor=#FFFFFF;sketch=0;shape=mxgraph.sitemap.login;" vertex="1" parent="1">
|
<mxCell id="Gi77RX5G2m4J9-6cMje4-1" value="テナント登録" style="html=1;whiteSpace=wrap;strokeColor=none;fillColor=#0079D6;labelPosition=center;verticalLabelPosition=middle;verticalAlign=top;align=center;fontSize=12;outlineConnect=0;spacingTop=-6;fontColor=#FFFFFF;sketch=0;shape=mxgraph.sitemap.login;" parent="1" vertex="1">
|
||||||
<mxGeometry x="60" y="50" width="120" height="70" as="geometry" />
|
<mxGeometry x="60" y="50" width="120" height="70" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="Gi77RX5G2m4J9-6cMje4-2" value="Admin Login" style="html=1;whiteSpace=wrap;strokeColor=none;fillColor=#0079D6;labelPosition=center;verticalLabelPosition=middle;verticalAlign=top;align=center;fontSize=12;outlineConnect=0;spacingTop=-6;fontColor=#FFFFFF;sketch=0;shape=mxgraph.sitemap.login;" vertex="1" parent="1">
|
<mxCell id="Gi77RX5G2m4J9-6cMje4-2" value="Admin Login" style="html=1;whiteSpace=wrap;strokeColor=#2D7600;fillColor=#60a917;labelPosition=center;verticalLabelPosition=middle;verticalAlign=top;align=center;fontSize=12;outlineConnect=0;spacingTop=-6;fontColor=#ffffff;sketch=0;shape=mxgraph.sitemap.login;" parent="1" vertex="1">
|
||||||
<mxGeometry x="60" y="270" width="120" height="70" as="geometry" />
|
<mxGeometry x="60" y="270" width="120" height="70" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="Gi77RX5G2m4J9-6cMje4-8" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="Gi77RX5G2m4J9-6cMje4-5" target="Gi77RX5G2m4J9-6cMje4-7">
|
<mxCell id="Gi77RX5G2m4J9-6cMje4-8" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="Gi77RX5G2m4J9-6cMje4-5" target="Gi77RX5G2m4J9-6cMje4-7" edge="1">
|
||||||
<mxGeometry relative="1" as="geometry" />
|
<mxGeometry relative="1" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="Gi77RX5G2m4J9-6cMje4-9" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="Gi77RX5G2m4J9-6cMje4-5" target="Gi77RX5G2m4J9-6cMje4-7">
|
<mxCell id="Gi77RX5G2m4J9-6cMje4-9" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="Gi77RX5G2m4J9-6cMje4-5" target="Gi77RX5G2m4J9-6cMje4-7" edge="1">
|
||||||
<mxGeometry relative="1" as="geometry" />
|
<mxGeometry relative="1" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="Gi77RX5G2m4J9-6cMje4-12" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="Gi77RX5G2m4J9-6cMje4-5" target="Gi77RX5G2m4J9-6cMje4-11">
|
<mxCell id="Gi77RX5G2m4J9-6cMje4-12" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="Gi77RX5G2m4J9-6cMje4-5" target="Gi77RX5G2m4J9-6cMje4-11" edge="1">
|
||||||
<mxGeometry relative="1" as="geometry" />
|
<mxGeometry relative="1" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="Gi77RX5G2m4J9-6cMje4-5" value="Home" style="html=1;whiteSpace=wrap;strokeColor=none;fillColor=#0079D6;labelPosition=center;verticalLabelPosition=middle;verticalAlign=top;align=center;fontSize=12;outlineConnect=0;spacingTop=-6;fontColor=#FFFFFF;sketch=0;shape=mxgraph.sitemap.home;" vertex="1" parent="1">
|
<mxCell id="Gi77RX5G2m4J9-6cMje4-5" value="Home" style="html=1;whiteSpace=wrap;strokeColor=#2D7600;fillColor=#60a917;labelPosition=center;verticalLabelPosition=middle;verticalAlign=top;align=center;fontSize=12;outlineConnect=0;spacingTop=-6;fontColor=#ffffff;sketch=0;shape=mxgraph.sitemap.home;" parent="1" vertex="1">
|
||||||
<mxGeometry x="240" y="270" width="120" height="70" as="geometry" />
|
<mxGeometry x="240" y="270" width="120" height="70" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="Gi77RX5G2m4J9-6cMje4-6" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="Gi77RX5G2m4J9-6cMje4-2" target="Gi77RX5G2m4J9-6cMje4-5">
|
<mxCell id="Gi77RX5G2m4J9-6cMje4-6" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="Gi77RX5G2m4J9-6cMje4-2" target="Gi77RX5G2m4J9-6cMje4-5" edge="1">
|
||||||
<mxGeometry relative="1" as="geometry" />
|
<mxGeometry relative="1" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="Gi77RX5G2m4J9-6cMje4-42" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="Gi77RX5G2m4J9-6cMje4-7" target="Gi77RX5G2m4J9-6cMje4-41">
|
<mxCell id="Gi77RX5G2m4J9-6cMje4-42" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="Gi77RX5G2m4J9-6cMje4-7" target="Gi77RX5G2m4J9-6cMje4-41" edge="1">
|
||||||
<mxGeometry relative="1" as="geometry" />
|
<mxGeometry relative="1" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="Gi77RX5G2m4J9-6cMje4-7" value="ユーザー登録" style="html=1;whiteSpace=wrap;strokeColor=none;fillColor=#0079D6;labelPosition=center;verticalLabelPosition=middle;verticalAlign=top;align=center;fontSize=12;outlineConnect=0;spacingTop=-6;fontColor=#FFFFFF;sketch=0;shape=mxgraph.sitemap.home;" vertex="1" parent="1">
|
<mxCell id="Gi77RX5G2m4J9-6cMje4-7" value="ユーザー登録" style="html=1;whiteSpace=wrap;strokeColor=none;fillColor=#0079D6;labelPosition=center;verticalLabelPosition=middle;verticalAlign=top;align=center;fontSize=12;outlineConnect=0;spacingTop=-6;fontColor=#FFFFFF;sketch=0;shape=mxgraph.sitemap.home;" parent="1" vertex="1">
|
||||||
<mxGeometry x="440" y="220" width="120" height="70" as="geometry" />
|
<mxGeometry x="440" y="220" width="120" height="70" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="Gi77RX5G2m4J9-6cMje4-11" value="ドメイン登録" style="html=1;whiteSpace=wrap;strokeColor=none;fillColor=#0079D6;labelPosition=center;verticalLabelPosition=middle;verticalAlign=top;align=center;fontSize=12;outlineConnect=0;spacingTop=-6;fontColor=#FFFFFF;sketch=0;shape=mxgraph.sitemap.home;" vertex="1" parent="1">
|
<mxCell id="Gi77RX5G2m4J9-6cMje4-11" value="ドメイン登録" style="html=1;whiteSpace=wrap;strokeColor=none;fillColor=#0079D6;labelPosition=center;verticalLabelPosition=middle;verticalAlign=top;align=center;fontSize=12;outlineConnect=0;spacingTop=-6;fontColor=#FFFFFF;sketch=0;shape=mxgraph.sitemap.home;" parent="1" vertex="1">
|
||||||
<mxGeometry x="440" y="340" width="120" height="70" as="geometry" />
|
<mxGeometry x="440" y="340" width="120" height="70" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="Gi77RX5G2m4J9-6cMje4-13" value="テナント管理者作成" style="html=1;whiteSpace=wrap;strokeColor=none;fillColor=#0079D6;labelPosition=center;verticalLabelPosition=middle;verticalAlign=top;align=center;fontSize=12;outlineConnect=0;spacingTop=-6;fontColor=#FFFFFF;sketch=0;shape=mxgraph.sitemap.login;" vertex="1" parent="1">
|
<mxCell id="Gi77RX5G2m4J9-6cMje4-13" value="テナント管理者作成" style="html=1;whiteSpace=wrap;strokeColor=none;fillColor=#0079D6;labelPosition=center;verticalLabelPosition=middle;verticalAlign=top;align=center;fontSize=12;outlineConnect=0;spacingTop=-6;fontColor=#FFFFFF;sketch=0;shape=mxgraph.sitemap.login;" parent="1" vertex="1">
|
||||||
<mxGeometry x="240" y="50" width="120" height="70" as="geometry" />
|
<mxGeometry x="240" y="50" width="120" height="70" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="Gi77RX5G2m4J9-6cMje4-15" value="ライセンス情報" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;" vertex="1" parent="1">
|
<mxCell id="Gi77RX5G2m4J9-6cMje4-15" value="ライセンス情報" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;" parent="1" vertex="1">
|
||||||
<mxGeometry x="480" y="10" width="90" height="70" as="geometry" />
|
<mxGeometry x="480" y="10" width="90" height="70" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="Gi77RX5G2m4J9-6cMje4-16" value="Adminユーザー" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;" vertex="1" parent="1">
|
<mxCell id="Gi77RX5G2m4J9-6cMje4-16" value="Adminユーザー" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;" parent="1" vertex="1">
|
||||||
<mxGeometry x="480" y="90" width="90" height="70" as="geometry" />
|
<mxGeometry x="480" y="90" width="90" height="70" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="Gi77RX5G2m4J9-6cMje4-17" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="Gi77RX5G2m4J9-6cMje4-13" target="Gi77RX5G2m4J9-6cMje4-15">
|
<mxCell id="Gi77RX5G2m4J9-6cMje4-17" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="Gi77RX5G2m4J9-6cMje4-13" target="Gi77RX5G2m4J9-6cMje4-15" edge="1">
|
||||||
<mxGeometry relative="1" as="geometry" />
|
<mxGeometry relative="1" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="Gi77RX5G2m4J9-6cMje4-18" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="Gi77RX5G2m4J9-6cMje4-13" target="Gi77RX5G2m4J9-6cMje4-16">
|
<mxCell id="Gi77RX5G2m4J9-6cMje4-18" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="Gi77RX5G2m4J9-6cMje4-13" target="Gi77RX5G2m4J9-6cMje4-16" edge="1">
|
||||||
<mxGeometry relative="1" as="geometry" />
|
<mxGeometry relative="1" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="Gi77RX5G2m4J9-6cMje4-19" value="テナントDB<br>作成" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;" vertex="1" parent="1">
|
<mxCell id="Gi77RX5G2m4J9-6cMje4-19" value="テナントDB<br>作成" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;" parent="1" vertex="1">
|
||||||
<mxGeometry x="550" y="50" width="90" height="70" as="geometry" />
|
<mxGeometry x="550" y="50" width="90" height="70" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="Gi77RX5G2m4J9-6cMje4-22" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="Gi77RX5G2m4J9-6cMje4-20" target="Gi77RX5G2m4J9-6cMje4-21">
|
<mxCell id="Gi77RX5G2m4J9-6cMje4-22" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="Gi77RX5G2m4J9-6cMje4-20" target="Gi77RX5G2m4J9-6cMje4-21" edge="1">
|
||||||
<mxGeometry relative="1" as="geometry" />
|
<mxGeometry relative="1" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="Gi77RX5G2m4J9-6cMje4-20" value="Login" style="html=1;whiteSpace=wrap;strokeColor=#005700;fillColor=#008a00;labelPosition=center;verticalLabelPosition=middle;verticalAlign=top;align=center;fontSize=12;outlineConnect=0;spacingTop=-6;sketch=0;shape=mxgraph.sitemap.login;fontColor=#ffffff;" vertex="1" parent="1">
|
<mxCell id="Gi77RX5G2m4J9-6cMje4-20" value="Login" style="html=1;whiteSpace=wrap;strokeColor=#005700;fillColor=#008a00;labelPosition=center;verticalLabelPosition=middle;verticalAlign=top;align=center;fontSize=12;outlineConnect=0;spacingTop=-6;sketch=0;shape=mxgraph.sitemap.login;fontColor=#ffffff;" parent="1" vertex="1">
|
||||||
<mxGeometry x="50" y="610" width="120" height="70" as="geometry" />
|
<mxGeometry x="50" y="610" width="120" height="70" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="Gi77RX5G2m4J9-6cMje4-24" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="Gi77RX5G2m4J9-6cMje4-21" target="Gi77RX5G2m4J9-6cMje4-25">
|
<mxCell id="Gi77RX5G2m4J9-6cMje4-24" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="Gi77RX5G2m4J9-6cMje4-21" target="Gi77RX5G2m4J9-6cMje4-25" edge="1">
|
||||||
<mxGeometry relative="1" as="geometry">
|
<mxGeometry relative="1" as="geometry">
|
||||||
<mxPoint x="430" y="645" as="targetPoint" />
|
<mxPoint x="430" y="645" as="targetPoint" />
|
||||||
</mxGeometry>
|
</mxGeometry>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="Gi77RX5G2m4J9-6cMje4-21" value="Home" style="html=1;whiteSpace=wrap;strokeColor=#005700;fillColor=#008a00;labelPosition=center;verticalLabelPosition=middle;verticalAlign=top;align=center;fontSize=12;outlineConnect=0;spacingTop=-6;fontColor=#ffffff;sketch=0;shape=mxgraph.sitemap.home;" vertex="1" parent="1">
|
<mxCell id="Gi77RX5G2m4J9-6cMje4-21" value="Home" style="html=1;whiteSpace=wrap;strokeColor=#005700;fillColor=#008a00;labelPosition=center;verticalLabelPosition=middle;verticalAlign=top;align=center;fontSize=12;outlineConnect=0;spacingTop=-6;fontColor=#ffffff;sketch=0;shape=mxgraph.sitemap.home;" parent="1" vertex="1">
|
||||||
<mxGeometry x="230" y="610" width="120" height="70" as="geometry" />
|
<mxGeometry x="230" y="610" width="120" height="70" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="Gi77RX5G2m4J9-6cMje4-27" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="Gi77RX5G2m4J9-6cMje4-25" target="Gi77RX5G2m4J9-6cMje4-26">
|
<mxCell id="Gi77RX5G2m4J9-6cMje4-27" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="Gi77RX5G2m4J9-6cMje4-25" target="Gi77RX5G2m4J9-6cMje4-26" edge="1">
|
||||||
<mxGeometry relative="1" as="geometry" />
|
<mxGeometry relative="1" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="Gi77RX5G2m4J9-6cMje4-25" value="アプリ一覧" style="html=1;whiteSpace=wrap;strokeColor=none;fillColor=#0079D6;labelPosition=center;verticalLabelPosition=middle;verticalAlign=top;align=center;fontSize=12;outlineConnect=0;spacingTop=-6;fontColor=#FFFFFF;sketch=0;shape=mxgraph.sitemap.news;" vertex="1" parent="1">
|
<mxCell id="Gi77RX5G2m4J9-6cMje4-25" value="アプリ一覧" style="html=1;whiteSpace=wrap;strokeColor=none;fillColor=#0079D6;labelPosition=center;verticalLabelPosition=middle;verticalAlign=top;align=center;fontSize=12;outlineConnect=0;spacingTop=-6;fontColor=#FFFFFF;sketch=0;shape=mxgraph.sitemap.news;" parent="1" vertex="1">
|
||||||
<mxGeometry x="440" y="610" width="120" height="70" as="geometry" />
|
<mxGeometry x="440" y="610" width="120" height="70" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="Gi77RX5G2m4J9-6cMje4-29" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="Gi77RX5G2m4J9-6cMje4-26" target="Gi77RX5G2m4J9-6cMje4-28">
|
<mxCell id="Gi77RX5G2m4J9-6cMje4-29" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="Gi77RX5G2m4J9-6cMje4-26" target="Gi77RX5G2m4J9-6cMje4-28" edge="1">
|
||||||
<mxGeometry relative="1" as="geometry" />
|
<mxGeometry relative="1" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="Gi77RX5G2m4J9-6cMje4-26" value="フロー一覧" style="html=1;whiteSpace=wrap;strokeColor=none;fillColor=#0079D6;labelPosition=center;verticalLabelPosition=middle;verticalAlign=top;align=center;fontSize=12;outlineConnect=0;spacingTop=-6;fontColor=#FFFFFF;sketch=0;shape=mxgraph.sitemap.news;" vertex="1" parent="1">
|
<mxCell id="Gi77RX5G2m4J9-6cMje4-26" value="フロー一覧" style="html=1;whiteSpace=wrap;strokeColor=none;fillColor=#0079D6;labelPosition=center;verticalLabelPosition=middle;verticalAlign=top;align=center;fontSize=12;outlineConnect=0;spacingTop=-6;fontColor=#FFFFFF;sketch=0;shape=mxgraph.sitemap.news;" parent="1" vertex="1">
|
||||||
<mxGeometry x="620" y="610" width="120" height="70" as="geometry" />
|
<mxGeometry x="620" y="610" width="120" height="70" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="Gi77RX5G2m4J9-6cMje4-40" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="Gi77RX5G2m4J9-6cMje4-28" target="Gi77RX5G2m4J9-6cMje4-39">
|
<mxCell id="Gi77RX5G2m4J9-6cMje4-40" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="Gi77RX5G2m4J9-6cMje4-28" target="Gi77RX5G2m4J9-6cMje4-39" edge="1">
|
||||||
<mxGeometry relative="1" as="geometry" />
|
<mxGeometry relative="1" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="Gi77RX5G2m4J9-6cMje4-28" value="フローエディタ" style="html=1;whiteSpace=wrap;strokeColor=#005700;fillColor=#008a00;labelPosition=center;verticalLabelPosition=middle;verticalAlign=top;align=center;fontSize=12;outlineConnect=0;spacingTop=-6;fontColor=#ffffff;sketch=0;shape=mxgraph.sitemap.news;" vertex="1" parent="1">
|
<mxCell id="Gi77RX5G2m4J9-6cMje4-28" value="フローエディタ" style="html=1;whiteSpace=wrap;strokeColor=#005700;fillColor=#008a00;labelPosition=center;verticalLabelPosition=middle;verticalAlign=top;align=center;fontSize=12;outlineConnect=0;spacingTop=-6;fontColor=#ffffff;sketch=0;shape=mxgraph.sitemap.news;" parent="1" vertex="1">
|
||||||
<mxGeometry x="800" y="610" width="120" height="70" as="geometry" />
|
<mxGeometry x="800" y="610" width="120" height="70" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="Gi77RX5G2m4J9-6cMje4-33" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="Gi77RX5G2m4J9-6cMje4-30" target="Gi77RX5G2m4J9-6cMje4-32">
|
<mxCell id="Gi77RX5G2m4J9-6cMje4-33" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="Gi77RX5G2m4J9-6cMje4-30" target="Gi77RX5G2m4J9-6cMje4-32" edge="1">
|
||||||
<mxGeometry relative="1" as="geometry" />
|
<mxGeometry relative="1" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="Gi77RX5G2m4J9-6cMje4-30" value="設計書取込" style="html=1;whiteSpace=wrap;strokeColor=#005700;fillColor=#008a00;labelPosition=center;verticalLabelPosition=middle;verticalAlign=top;align=center;fontSize=12;outlineConnect=0;spacingTop=-6;fontColor=#ffffff;sketch=0;shape=mxgraph.sitemap.news;" vertex="1" parent="1">
|
<mxCell id="Gi77RX5G2m4J9-6cMje4-30" value="設計書取込" style="html=1;whiteSpace=wrap;strokeColor=#005700;fillColor=#008a00;labelPosition=center;verticalLabelPosition=middle;verticalAlign=top;align=center;fontSize=12;outlineConnect=0;spacingTop=-6;fontColor=#ffffff;sketch=0;shape=mxgraph.sitemap.news;" parent="1" vertex="1">
|
||||||
<mxGeometry x="440" y="715" width="120" height="70" as="geometry" />
|
<mxGeometry x="440" y="715" width="120" height="70" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="Gi77RX5G2m4J9-6cMje4-31" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="Gi77RX5G2m4J9-6cMje4-21" target="Gi77RX5G2m4J9-6cMje4-30">
|
<mxCell id="Gi77RX5G2m4J9-6cMje4-31" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="Gi77RX5G2m4J9-6cMje4-21" target="Gi77RX5G2m4J9-6cMje4-30" edge="1">
|
||||||
<mxGeometry relative="1" as="geometry" />
|
<mxGeometry relative="1" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="Gi77RX5G2m4J9-6cMje4-32" value="取込結果表示" style="html=1;whiteSpace=wrap;strokeColor=#005700;fillColor=#008a00;labelPosition=center;verticalLabelPosition=middle;verticalAlign=top;align=center;fontSize=12;outlineConnect=0;spacingTop=-6;fontColor=#ffffff;sketch=0;shape=mxgraph.sitemap.news;" vertex="1" parent="1">
|
<mxCell id="Gi77RX5G2m4J9-6cMje4-32" value="取込結果表示" style="html=1;whiteSpace=wrap;strokeColor=#005700;fillColor=#008a00;labelPosition=center;verticalLabelPosition=middle;verticalAlign=top;align=center;fontSize=12;outlineConnect=0;spacingTop=-6;fontColor=#ffffff;sketch=0;shape=mxgraph.sitemap.news;" parent="1" vertex="1">
|
||||||
<mxGeometry x="620" y="715" width="120" height="70" as="geometry" />
|
<mxGeometry x="620" y="715" width="120" height="70" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="Gi77RX5G2m4J9-6cMje4-37" value="設計書ダウロード" style="html=1;whiteSpace=wrap;strokeColor=none;fillColor=#0079D6;labelPosition=center;verticalLabelPosition=middle;verticalAlign=top;align=center;fontSize=12;outlineConnect=0;spacingTop=-6;fontColor=#FFFFFF;sketch=0;shape=mxgraph.sitemap.news;" vertex="1" parent="1">
|
<mxCell id="Gi77RX5G2m4J9-6cMje4-37" value="設計書ダウロード" style="html=1;whiteSpace=wrap;strokeColor=none;fillColor=#0079D6;labelPosition=center;verticalLabelPosition=middle;verticalAlign=top;align=center;fontSize=12;outlineConnect=0;spacingTop=-6;fontColor=#FFFFFF;sketch=0;shape=mxgraph.sitemap.news;" parent="1" vertex="1">
|
||||||
<mxGeometry x="440" y="825" width="120" height="70" as="geometry" />
|
<mxGeometry x="440" y="825" width="120" height="70" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="Gi77RX5G2m4J9-6cMje4-38" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="Gi77RX5G2m4J9-6cMje4-21" target="Gi77RX5G2m4J9-6cMje4-37">
|
<mxCell id="Gi77RX5G2m4J9-6cMje4-38" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="Gi77RX5G2m4J9-6cMje4-21" target="Gi77RX5G2m4J9-6cMje4-37" edge="1">
|
||||||
<mxGeometry relative="1" as="geometry" />
|
<mxGeometry relative="1" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="Gi77RX5G2m4J9-6cMje4-39" value="フロー履歴管理" style="html=1;whiteSpace=wrap;strokeColor=none;fillColor=#0079D6;labelPosition=center;verticalLabelPosition=middle;verticalAlign=top;align=center;fontSize=12;outlineConnect=0;spacingTop=-6;fontColor=#FFFFFF;sketch=0;shape=mxgraph.sitemap.news;" vertex="1" parent="1">
|
<mxCell id="Gi77RX5G2m4J9-6cMje4-39" value="フロー履歴管理" style="html=1;whiteSpace=wrap;strokeColor=none;fillColor=#0079D6;labelPosition=center;verticalLabelPosition=middle;verticalAlign=top;align=center;fontSize=12;outlineConnect=0;spacingTop=-6;fontColor=#FFFFFF;sketch=0;shape=mxgraph.sitemap.news;" parent="1" vertex="1">
|
||||||
<mxGeometry x="980" y="610" width="120" height="70" as="geometry" />
|
<mxGeometry x="980" y="610" width="120" height="70" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="Gi77RX5G2m4J9-6cMje4-41" value="ALC設定" style="html=1;whiteSpace=wrap;strokeColor=none;fillColor=#0079D6;labelPosition=center;verticalLabelPosition=middle;verticalAlign=top;align=center;fontSize=12;outlineConnect=0;spacingTop=-6;fontColor=#FFFFFF;sketch=0;shape=mxgraph.sitemap.home;" vertex="1" parent="1">
|
<mxCell id="Gi77RX5G2m4J9-6cMje4-41" value="ALC設定" style="html=1;whiteSpace=wrap;strokeColor=none;fillColor=#0079D6;labelPosition=center;verticalLabelPosition=middle;verticalAlign=top;align=center;fontSize=12;outlineConnect=0;spacingTop=-6;fontColor=#FFFFFF;sketch=0;shape=mxgraph.sitemap.home;" parent="1" vertex="1">
|
||||||
<mxGeometry x="620" y="220" width="120" height="70" as="geometry" />
|
<mxGeometry x="620" y="220" width="120" height="70" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="Gi77RX5G2m4J9-6cMje4-43" value="管理ドメイン設定" style="html=1;whiteSpace=wrap;strokeColor=none;fillColor=#0079D6;labelPosition=center;verticalLabelPosition=middle;verticalAlign=top;align=center;fontSize=12;outlineConnect=0;spacingTop=-6;fontColor=#FFFFFF;sketch=0;shape=mxgraph.sitemap.home;" vertex="1" parent="1">
|
<mxCell id="Gi77RX5G2m4J9-6cMje4-43" value="管理ドメイン設定" style="html=1;whiteSpace=wrap;strokeColor=none;fillColor=#0079D6;labelPosition=center;verticalLabelPosition=middle;verticalAlign=top;align=center;fontSize=12;outlineConnect=0;spacingTop=-6;fontColor=#FFFFFF;sketch=0;shape=mxgraph.sitemap.home;" parent="1" vertex="1">
|
||||||
<mxGeometry x="800" y="220" width="120" height="70" as="geometry" />
|
<mxGeometry x="800" y="220" width="120" height="70" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="Gi77RX5G2m4J9-6cMje4-44" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="Gi77RX5G2m4J9-6cMje4-41" target="Gi77RX5G2m4J9-6cMje4-43">
|
<mxCell id="Gi77RX5G2m4J9-6cMje4-44" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="Gi77RX5G2m4J9-6cMje4-41" target="Gi77RX5G2m4J9-6cMje4-43" edge="1">
|
||||||
<mxGeometry relative="1" as="geometry" />
|
<mxGeometry relative="1" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="Gi77RX5G2m4J9-6cMje4-45" value="プロファイル" style="html=1;whiteSpace=wrap;strokeColor=none;fillColor=#0079D6;labelPosition=center;verticalLabelPosition=middle;verticalAlign=top;align=center;fontSize=12;outlineConnect=0;spacingTop=-6;fontColor=#FFFFFF;sketch=0;shape=mxgraph.sitemap.home;" vertex="1" parent="1">
|
<mxCell id="Gi77RX5G2m4J9-6cMje4-45" value="プロファイル" style="html=1;whiteSpace=wrap;strokeColor=none;fillColor=#0079D6;labelPosition=center;verticalLabelPosition=middle;verticalAlign=top;align=center;fontSize=12;outlineConnect=0;spacingTop=-6;fontColor=#FFFFFF;sketch=0;shape=mxgraph.sitemap.home;" parent="1" vertex="1">
|
||||||
<mxGeometry x="440" y="935" width="120" height="70" as="geometry" />
|
<mxGeometry x="440" y="935" width="120" height="70" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="Gi77RX5G2m4J9-6cMje4-46" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="Gi77RX5G2m4J9-6cMje4-21" target="Gi77RX5G2m4J9-6cMje4-45">
|
<mxCell id="Gi77RX5G2m4J9-6cMje4-46" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="Gi77RX5G2m4J9-6cMje4-21" target="Gi77RX5G2m4J9-6cMje4-45" edge="1">
|
||||||
<mxGeometry relative="1" as="geometry" />
|
<mxGeometry relative="1" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="Gi77RX5G2m4J9-6cMje4-50" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="Gi77RX5G2m4J9-6cMje4-47" target="Gi77RX5G2m4J9-6cMje4-49">
|
<mxCell id="Gi77RX5G2m4J9-6cMje4-50" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="Gi77RX5G2m4J9-6cMje4-47" target="Gi77RX5G2m4J9-6cMje4-49" edge="1">
|
||||||
<mxGeometry relative="1" as="geometry" />
|
<mxGeometry relative="1" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="Gi77RX5G2m4J9-6cMje4-47" value="プロファイル" style="html=1;whiteSpace=wrap;strokeColor=none;fillColor=#0079D6;labelPosition=center;verticalLabelPosition=middle;verticalAlign=top;align=center;fontSize=12;outlineConnect=0;spacingTop=-6;fontColor=#FFFFFF;sketch=0;shape=mxgraph.sitemap.home;" vertex="1" parent="1">
|
<mxCell id="Gi77RX5G2m4J9-6cMje4-47" value="プロファイル" style="html=1;whiteSpace=wrap;strokeColor=none;fillColor=#0079D6;labelPosition=center;verticalLabelPosition=middle;verticalAlign=top;align=center;fontSize=12;outlineConnect=0;spacingTop=-6;fontColor=#FFFFFF;sketch=0;shape=mxgraph.sitemap.home;" parent="1" vertex="1">
|
||||||
<mxGeometry x="440" y="450" width="120" height="70" as="geometry" />
|
<mxGeometry x="440" y="450" width="120" height="70" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="Gi77RX5G2m4J9-6cMje4-48" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="Gi77RX5G2m4J9-6cMje4-5" target="Gi77RX5G2m4J9-6cMje4-47">
|
<mxCell id="Gi77RX5G2m4J9-6cMje4-48" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="Gi77RX5G2m4J9-6cMje4-5" target="Gi77RX5G2m4J9-6cMje4-47" edge="1">
|
||||||
<mxGeometry relative="1" as="geometry" />
|
<mxGeometry relative="1" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="Gi77RX5G2m4J9-6cMje4-49" value="ライセンス情報" style="html=1;whiteSpace=wrap;strokeColor=none;fillColor=#0079D6;labelPosition=center;verticalLabelPosition=middle;verticalAlign=top;align=center;fontSize=12;outlineConnect=0;spacingTop=-6;fontColor=#FFFFFF;sketch=0;shape=mxgraph.sitemap.home;" vertex="1" parent="1">
|
<mxCell id="Gi77RX5G2m4J9-6cMje4-49" value="ライセンス情報" style="html=1;whiteSpace=wrap;strokeColor=none;fillColor=#0079D6;labelPosition=center;verticalLabelPosition=middle;verticalAlign=top;align=center;fontSize=12;outlineConnect=0;spacingTop=-6;fontColor=#FFFFFF;sketch=0;shape=mxgraph.sitemap.home;" parent="1" vertex="1">
|
||||||
<mxGeometry x="620" y="450" width="120" height="70" as="geometry" />
|
<mxGeometry x="620" y="450" width="120" height="70" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="Gi77RX5G2m4J9-6cMje4-51" value="ライセンス情報" style="html=1;whiteSpace=wrap;strokeColor=none;fillColor=#0079D6;labelPosition=center;verticalLabelPosition=middle;verticalAlign=top;align=center;fontSize=12;outlineConnect=0;spacingTop=-6;fontColor=#FFFFFF;sketch=0;shape=mxgraph.sitemap.home;" vertex="1" parent="1">
|
<mxCell id="Gi77RX5G2m4J9-6cMje4-51" value="ライセンス情報" style="html=1;whiteSpace=wrap;strokeColor=none;fillColor=#0079D6;labelPosition=center;verticalLabelPosition=middle;verticalAlign=top;align=center;fontSize=12;outlineConnect=0;spacingTop=-6;fontColor=#FFFFFF;sketch=0;shape=mxgraph.sitemap.home;" parent="1" vertex="1">
|
||||||
<mxGeometry x="620" y="935" width="120" height="70" as="geometry" />
|
<mxGeometry x="620" y="935" width="120" height="70" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="Gi77RX5G2m4J9-6cMje4-52" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="Gi77RX5G2m4J9-6cMje4-45" target="Gi77RX5G2m4J9-6cMje4-51">
|
<mxCell id="Gi77RX5G2m4J9-6cMje4-52" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="Gi77RX5G2m4J9-6cMje4-45" target="Gi77RX5G2m4J9-6cMje4-51" edge="1">
|
||||||
<mxGeometry relative="1" as="geometry" />
|
<mxGeometry relative="1" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
@@ -36,7 +36,8 @@ module.exports = configure(function (/* ctx */) {
|
|||||||
// --> boot files are part of "main.js"
|
// --> boot files are part of "main.js"
|
||||||
// https://v2.quasar.dev/quasar-cli-vite/boot-files
|
// https://v2.quasar.dev/quasar-cli-vite/boot-files
|
||||||
boot: [
|
boot: [
|
||||||
'axios'
|
'axios',
|
||||||
|
'error-handler'
|
||||||
],
|
],
|
||||||
|
|
||||||
// https://v2.quasar.dev/quasar-cli-vite/quasar-config-js#css
|
// https://v2.quasar.dev/quasar-cli-vite/quasar-config-js#css
|
||||||
|
|||||||
@@ -20,22 +20,20 @@ const token=localStorage.getItem('token')||'';
|
|||||||
if(token!==''){
|
if(token!==''){
|
||||||
api.defaults.headers["Authorization"]='Bearer ' + token;
|
api.defaults.headers["Authorization"]='Bearer ' + token;
|
||||||
}
|
}
|
||||||
|
//axios例外キャプチャー
|
||||||
api.interceptors.response.use(
|
api.interceptors.response.use(
|
||||||
(response)=>response,
|
(response)=>response,
|
||||||
(error)=>{
|
(error)=>{
|
||||||
const orgReq=error.config;
|
if (error.response && error.response.status === 401) {
|
||||||
if(error.response && error.response.status===401){
|
// 認証エラーの場合再ログインする
|
||||||
console.error("401エラー");
|
console.error('(; ゚Д゚)/認証エラー(401):', error);
|
||||||
localStorage.removeItem('token');
|
localStorage.removeItem('token');
|
||||||
router.replace({
|
router.replace({
|
||||||
path:"/login",
|
path:"/login",
|
||||||
query:{redirect:router.currentRoute.value.fullPath}
|
query:{redirect:router.currentRoute.value.fullPath}
|
||||||
});
|
});
|
||||||
// router.push({
|
|
||||||
// path:"/login",
|
|
||||||
// query:{redirect:router.currentRoute.value.fullPath}
|
|
||||||
// });
|
|
||||||
}
|
}
|
||||||
|
return Promise.reject(error);
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
export default boot(({ app }) => {
|
export default boot(({ app }) => {
|
||||||
|
|||||||
20
frontend/src/boot/error-handler.ts
Normal file
20
frontend/src/boot/error-handler.ts
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
// src/boot/error-handler.ts
|
||||||
|
import { boot } from 'quasar/wrappers';
|
||||||
|
import { Router } from 'vue-router';
|
||||||
|
import { App } from 'vue';
|
||||||
|
|
||||||
|
export default boot(({ app, router }: { app: App<Element>; router: Router }) => {
|
||||||
|
app.config.errorHandler = (err: any, instance: any, info: string) => {
|
||||||
|
if (err.response && err.response.status === 401) {
|
||||||
|
// 認証エラーの場合再ログインする
|
||||||
|
console.error('(; ゚Д゚)/認証エラー(401):', err, info);
|
||||||
|
localStorage.removeItem('token');
|
||||||
|
router.replace({
|
||||||
|
path:"/login",
|
||||||
|
query:{redirect:router.currentRoute.value.fullPath}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
console.error('(; ゚Д゚)例外:', err, info);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
});
|
||||||
@@ -1,30 +1,34 @@
|
|||||||
<template>
|
<template>
|
||||||
<q-field v-model="selectedField" labelColor="primary" class="condition-object"
|
<q-field v-model="selectedObject" labelColor="primary" class="condition-object"
|
||||||
:clearable="isSelected" stack-label :dense="true" :outlined="true" >
|
:clearable="isSelected" stack-label :dense="true" :outlined="true" >
|
||||||
<template v-slot:control >
|
<template v-slot:control >
|
||||||
<q-chip color="primary" text-color="white" v-if="isSelected" :dense="true" class="selected-obj">
|
<q-chip color="primary" text-color="white" v-if="isSelected && selectedObject.objectType==='field'" :dense="true" class="selected-obj">
|
||||||
{{ selectedField.name }}
|
{{ selectedObject.name }}
|
||||||
|
</q-chip>
|
||||||
|
<q-chip color="info" text-color="white" v-if="isSelected && selectedObject.objectType==='variable'" :dense="true" class="selected-obj">
|
||||||
|
{{ selectedObject.name }}
|
||||||
</q-chip>
|
</q-chip>
|
||||||
</template>
|
</template>
|
||||||
<template v-slot:append>
|
<template v-slot:append>
|
||||||
<q-icon name="search" class="cursor-pointer" @click="showDg"/>
|
<q-icon name="search" class="cursor-pointer" @click="showDg"/>
|
||||||
</template>
|
</template>
|
||||||
</q-field>
|
</q-field>
|
||||||
<show-dialog v-model:visible="show" name="フィールド一覧" @close="closeDg" widht="400px">
|
<show-dialog v-model:visible="show" name="条件設定項目一覧" @close="closeDg" width="600px">
|
||||||
<condition-objects ref="appDg" name="フィールド" type="single" :appId="store.appInfo?.appId"></condition-objects>
|
<condition-objects ref="appDg" name="フィールド" type="single" :appId="store.appInfo?.appId" :vars="vars"></condition-objects>
|
||||||
</show-dialog>
|
</show-dialog>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { defineComponent, ref ,watchEffect,computed} from 'vue';
|
import { defineComponent, reactive, ref ,watchEffect,computed} from 'vue';
|
||||||
import ShowDialog from '../ShowDialog.vue';
|
import ShowDialog from '../ShowDialog.vue';
|
||||||
import ConditionObjects from '../ConditionObjects.vue';
|
import ConditionObjects from '../ConditionObjects.vue';
|
||||||
import { useFlowEditorStore } from '../../stores/flowEditor';
|
import { useFlowEditorStore } from '../../stores/flowEditor';
|
||||||
|
import {IActionFlow,IActionNode,IActionVariable} from '../../types/ActionTypes';
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
name: 'ConditionObject',
|
name: 'ConditionObject',
|
||||||
components: {
|
components: {
|
||||||
ShowDialog,
|
ShowDialog,
|
||||||
ConditionObjects,
|
ConditionObjects
|
||||||
},
|
},
|
||||||
props: {
|
props: {
|
||||||
modelValue: {
|
modelValue: {
|
||||||
@@ -35,11 +39,15 @@
|
|||||||
setup(props, { emit }) {
|
setup(props, { emit }) {
|
||||||
const appDg = ref();
|
const appDg = ref();
|
||||||
const show = ref(false);
|
const show = ref(false);
|
||||||
const selectedField = ref(props.modelValue);
|
const selectedObject = ref(props.modelValue);
|
||||||
const store = useFlowEditorStore();
|
const store = useFlowEditorStore();
|
||||||
const isSelected = computed(()=>{
|
const isSelected = computed(()=>{
|
||||||
return selectedField.value!==null && typeof selectedField.value === 'object' && ('name' in selectedField.value)
|
return selectedObject.value!==null && typeof selectedObject.value === 'object' && ('name' in selectedObject.value)
|
||||||
});
|
});
|
||||||
|
let vars:IActionVariable[] =[];
|
||||||
|
if(store.currentFlow!==undefined && store.activeNode!==undefined ){
|
||||||
|
vars =store.currentFlow.getVarNames(store.activeNode);
|
||||||
|
}
|
||||||
|
|
||||||
const showDg = () => {
|
const showDg = () => {
|
||||||
show.value = true;
|
show.value = true;
|
||||||
@@ -47,12 +55,12 @@
|
|||||||
|
|
||||||
const closeDg = (val:string) => {
|
const closeDg = (val:string) => {
|
||||||
if (val == 'OK') {
|
if (val == 'OK') {
|
||||||
selectedField.value = appDg.value.selected[0];
|
selectedObject.value = appDg.value.selected[0];
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
watchEffect(() => {
|
watchEffect(() => {
|
||||||
emit('update:modelValue', selectedField.value);
|
emit('update:modelValue', selectedObject.value);
|
||||||
});
|
});
|
||||||
|
|
||||||
return {
|
return {
|
||||||
@@ -61,7 +69,8 @@
|
|||||||
show,
|
show,
|
||||||
showDg,
|
showDg,
|
||||||
closeDg,
|
closeDg,
|
||||||
selectedField,
|
selectedObject,
|
||||||
|
vars:reactive(vars),
|
||||||
isSelected
|
isSelected
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -106,10 +106,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</q-tree>
|
</q-tree>
|
||||||
<!-- <q-btn @click="addCondition(tree.root)" class="q-mt-md" color="primary" icon="mdi-plus">Add Condition</q-btn> -->
|
|
||||||
<!-- <q-btn @click="getConditionString()" class="q-mt-md" color="primary" icon="mdi-plus">Show Condtion</q-btn>
|
|
||||||
<q-btn @click="getConditionJson()" class="q-mt-md" color="primary" icon="mdi-plus">Show Condtion data</q-btn>
|
|
||||||
<q-btn @click="LoadCondition()" class="q-mt-md" color="primary" icon="mdi-plus">Load Condition</q-btn> -->
|
|
||||||
<q-tooltip anchor="center middle" v-model="showingCondition" no-parent-event>
|
<q-tooltip anchor="center middle" v-model="showingCondition" no-parent-event>
|
||||||
import { finished } from 'stream';
|
import { finished } from 'stream';
|
||||||
{{ conditionString }}
|
{{ conditionString }}
|
||||||
|
|||||||
@@ -1,52 +1,56 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="q-pa-md">
|
<div class="q-gutter-y-md" style="max-width: 600px;">
|
||||||
<div v-if="!isLoaded" class="spinner flex flex-center">
|
<q-card >
|
||||||
<q-spinner color="primary" size="3em" />
|
<q-tabs
|
||||||
</div>
|
v-model="tab"
|
||||||
<q-table v-else row-key="name" :selection="type" v-model:selected="selected" :columns="columns" :rows="rows" />
|
dense
|
||||||
</div>
|
class="text-grey"
|
||||||
|
active-color="white"
|
||||||
|
active-bg-color="primary"
|
||||||
|
indicator-color="primary"
|
||||||
|
align="justify"
|
||||||
|
narrow-indicator
|
||||||
|
>
|
||||||
|
<q-tab name="fields" label="フィールド"></q-tab>
|
||||||
|
<q-tab name="vars" label="変数"></q-tab>
|
||||||
|
</q-tabs>
|
||||||
|
|
||||||
|
<q-separator></q-separator>
|
||||||
|
|
||||||
|
<q-tab-panels v-model="tab" animated>
|
||||||
|
<q-tab-panel name="fields">
|
||||||
|
<field-list v-model="selected" type="single" :appId="appId"></field-list>
|
||||||
|
</q-tab-panel>
|
||||||
|
|
||||||
|
<q-tab-panel name="vars" >
|
||||||
|
<variable-list v-model="selected" type="single" :vars="vars"></variable-list>
|
||||||
|
</q-tab-panel>
|
||||||
|
</q-tab-panels>
|
||||||
|
</q-card>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script lang="ts">
|
||||||
import { ref,onMounted,reactive } from 'vue'
|
import { ref, onMounted, reactive } from 'vue'
|
||||||
import { api } from 'boot/axios';
|
import FieldList from './FieldList.vue';
|
||||||
|
import VariableList from './VariableList.vue';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'ConditionObjects',
|
name: 'ConditionObjects',
|
||||||
|
components:{
|
||||||
|
FieldList,
|
||||||
|
VariableList
|
||||||
|
},
|
||||||
props: {
|
props: {
|
||||||
name: String,
|
name: String,
|
||||||
type: String,
|
type: String,
|
||||||
appId:Number
|
appId: Number,
|
||||||
|
vars: Array
|
||||||
},
|
},
|
||||||
setup(props) {
|
setup(props) {
|
||||||
const isLoaded=ref(false);
|
|
||||||
const columns = [
|
|
||||||
{ name: 'name', required: true,label: 'フィールド名',align: 'left',field: row=>row.name,sortable: true},
|
|
||||||
{ name: 'code', label: 'フィールドコード', align: 'left',field: 'code', sortable: true },
|
|
||||||
{ name: 'type', label: 'フィールドタイプ', align: 'left',field: 'type', sortable: true }
|
|
||||||
]
|
|
||||||
const rows = reactive([])
|
|
||||||
onMounted( async () => {
|
|
||||||
const res = await api.get('api/v1/appfields', {
|
|
||||||
params:{
|
|
||||||
app: props.appId
|
|
||||||
}
|
|
||||||
});
|
|
||||||
let fields = res.data.properties;
|
|
||||||
console.log(fields);
|
|
||||||
Object.keys(fields).forEach((key) =>
|
|
||||||
{
|
|
||||||
const fld=fields[key];
|
|
||||||
// rows.push({name:fields[key].label,code:fields[key].code,type:fields[key].type});
|
|
||||||
rows.push({name:fld.label,objectType:'field',...fld});
|
|
||||||
});
|
|
||||||
isLoaded.value=true;
|
|
||||||
});
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
columns,
|
tab: ref('fields'),
|
||||||
rows,
|
selected: ref([])
|
||||||
selected: ref([]),
|
|
||||||
isLoaded
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
53
frontend/src/components/FieldList.vue
Normal file
53
frontend/src/components/FieldList.vue
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
<template>
|
||||||
|
<div class="q-pa-md">
|
||||||
|
<q-table flat bordered :loading="!isLoaded" row-key="name" :selection="type" :selected="modelValue" @update:selected="$emit('update:modelValue', $event)" :columns="columns" :rows="rows" />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import { ref, onMounted, reactive } from 'vue'
|
||||||
|
import { api } from 'boot/axios';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'FieldList',
|
||||||
|
props: {
|
||||||
|
name: String,
|
||||||
|
type: String,
|
||||||
|
appId: Number,
|
||||||
|
modelValue:Array
|
||||||
|
},
|
||||||
|
emits:[
|
||||||
|
'update:modelValue'
|
||||||
|
],
|
||||||
|
setup(props) {
|
||||||
|
const isLoaded = ref(false);
|
||||||
|
const columns = [
|
||||||
|
{ name: 'name', required: true, label: 'フィールド名', align: 'left', field: row => row.name, sortable: true },
|
||||||
|
{ name: 'code', label: 'フィールドコード', align: 'left', field: 'code', sortable: true },
|
||||||
|
{ name: 'type', label: 'フィールドタイプ', align: 'left', field: 'type', sortable: true }
|
||||||
|
]
|
||||||
|
const rows = reactive([]);
|
||||||
|
onMounted(async () => {
|
||||||
|
const res = await api.get('api/v1/appfields', {
|
||||||
|
params: {
|
||||||
|
app: props.appId
|
||||||
|
}
|
||||||
|
});
|
||||||
|
let fields = res.data.properties;
|
||||||
|
console.log(fields);
|
||||||
|
Object.keys(fields).forEach((key) => {
|
||||||
|
const fld = fields[key];
|
||||||
|
rows.push({ name: fld.label, objectType: 'field', ...fld });
|
||||||
|
});
|
||||||
|
isLoaded.value = true;
|
||||||
|
});
|
||||||
|
|
||||||
|
return {
|
||||||
|
columns,
|
||||||
|
rows,
|
||||||
|
// selected: ref([]),
|
||||||
|
isLoaded
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
}
|
||||||
|
</script>
|
||||||
44
frontend/src/components/VariableList.vue
Normal file
44
frontend/src/components/VariableList.vue
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
<template>
|
||||||
|
<div class="q-pa-md">
|
||||||
|
<q-table flat bordered row-key="name" :selection="type"
|
||||||
|
:selected="modelValue"
|
||||||
|
@update:selected="$emit('update:modelValue', $event)"
|
||||||
|
:columns="columns" :rows="rows" />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script lang="ts">
|
||||||
|
import { ref, reactive, PropType, compile } from 'vue';
|
||||||
|
import {IActionNode,IActionVariable} from '../types/ActionTypes';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'VariableList',
|
||||||
|
props: {
|
||||||
|
name: String,
|
||||||
|
type: String,
|
||||||
|
vars:{
|
||||||
|
type:Array as PropType<IActionVariable[]>,
|
||||||
|
reqired:true,
|
||||||
|
default:()=>[]
|
||||||
|
},
|
||||||
|
modelValue:Array
|
||||||
|
},
|
||||||
|
emits:[
|
||||||
|
'update:modelValue'
|
||||||
|
],
|
||||||
|
setup(props) {
|
||||||
|
const columns= [
|
||||||
|
{ name: 'actionName', label: 'アクション名',align: 'left',field: 'actionName',sortable: true},
|
||||||
|
{ name: 'displayName', label: '変数表示名', align: 'left',field: 'displayName', sortable: true },
|
||||||
|
{ name: 'name', label: '変数名', align: 'left',field: 'name',required: true, sortable: true }
|
||||||
|
];
|
||||||
|
const rows= props.vars.map((v)=>{
|
||||||
|
return {objectType:'variable',...v};
|
||||||
|
});
|
||||||
|
|
||||||
|
return {
|
||||||
|
columns,
|
||||||
|
rows:reactive(rows)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
>
|
>
|
||||||
<q-card class="column full-height" style="width: 300px">
|
<q-card class="column full-height" style="width: 300px">
|
||||||
<q-card-section>
|
<q-card-section>
|
||||||
<div class="text-h6">{{ actionNode.subTitle }}:設定</div>
|
<div class="text-h6">{{ actionNode?.subTitle }}:設定</div>
|
||||||
</q-card-section>
|
</q-card-section>
|
||||||
<q-card-section class="col q-pt-none">
|
<q-card-section class="col q-pt-none">
|
||||||
<property-list :node-props="actionProps" v-if="showPanel" ></property-list>
|
<property-list :node-props="actionProps" v-if="showPanel" ></property-list>
|
||||||
@@ -51,10 +51,10 @@ import { IActionNode } from 'src/types/ActionTypes';
|
|||||||
],
|
],
|
||||||
setup(props,{emit}) {
|
setup(props,{emit}) {
|
||||||
const showPanel =ref(props.drawerRight);
|
const showPanel =ref(props.drawerRight);
|
||||||
const actionProps =ref(props.actionNode.actionProps);
|
const actionProps =ref(props.actionNode?.actionProps);
|
||||||
watchEffect(() => {
|
watchEffect(() => {
|
||||||
showPanel.value = props.drawerRight;
|
showPanel.value = props.drawerRight;
|
||||||
actionProps.value= props.actionNode.actionProps;
|
actionProps.value= props.actionNode?.actionProps;
|
||||||
});
|
});
|
||||||
|
|
||||||
const cancel = async() =>{
|
const cancel = async() =>{
|
||||||
|
|||||||
@@ -22,12 +22,12 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="q-pa-md q-gutter-sm">
|
<div class="q-pa-md q-gutter-sm">
|
||||||
<div class="flowchart" v-if="store.currentFlow">
|
<div class="flowchart" v-if="store.currentFlow">
|
||||||
<node-item v-for="(node,) in store.currentFlow.actionNodes" :key="node.id" :isSelected="node === state.activeNode"
|
<node-item v-for="(node,) in store.currentFlow.actionNodes" :key="node.id" :isSelected="node === store.activeNode"
|
||||||
:actionNode="node" @addNode="addNode" @nodeSelected="onNodeSelected" @nodeEdit="onNodeEdit"
|
:actionNode="node" @addNode="addNode" @nodeSelected="onNodeSelected" @nodeEdit="onNodeEdit"
|
||||||
@deleteNode="onDeleteNode" @deleteAllNextNodes="onDeleteAllNextNodes" @copyFlow="onCopyFlow"></node-item>
|
@deleteNode="onDeleteNode" @deleteAllNextNodes="onDeleteAllNextNodes" @copyFlow="onCopyFlow"></node-item>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<PropertyPanel :actionNode="state.activeNode" v-model:drawerRight="drawerRight"></PropertyPanel>
|
<PropertyPanel :actionNode="store.activeNode" v-model:drawerRight="drawerRight"></PropertyPanel>
|
||||||
</q-layout>
|
</q-layout>
|
||||||
<ShowDialog v-model:visible="showAddAction" name="アクション" @close="closeDg" width="350px">
|
<ShowDialog v-model:visible="showAddAction" name="アクション" @close="closeDg" width="350px">
|
||||||
<action-select ref="appDg" name="model" type="single"></action-select>
|
<action-select ref="appDg" name="model" type="single"></action-select>
|
||||||
@@ -57,12 +57,7 @@ const drawerLeft = ref(false);
|
|||||||
const $q = useQuasar();
|
const $q = useQuasar();
|
||||||
const store = useFlowEditorStore();
|
const store = useFlowEditorStore();
|
||||||
const authStore = useAuthStore();
|
const authStore = useAuthStore();
|
||||||
// ref関数を使ってtemplateとバインド
|
|
||||||
const state = reactive({
|
|
||||||
activeNode: {
|
|
||||||
id: ""
|
|
||||||
},
|
|
||||||
})
|
|
||||||
const appDg = ref();
|
const appDg = ref();
|
||||||
const prevNodeIfo = ref({
|
const prevNodeIfo = ref({
|
||||||
prevNode: {} as IActionNode,
|
prevNode: {} as IActionNode,
|
||||||
@@ -88,21 +83,21 @@ const addNode = (node: IActionNode, inputPoint: string) => {
|
|||||||
|
|
||||||
const onNodeSelected = (node: IActionNode) => {
|
const onNodeSelected = (node: IActionNode) => {
|
||||||
//右パネルが開いている場合、自動閉じる
|
//右パネルが開いている場合、自動閉じる
|
||||||
if (drawerRight.value && state.activeNode.id !== node.id) {
|
if (drawerRight.value && store.activeNode?.id !== node.id) {
|
||||||
drawerRight.value = false;
|
drawerRight.value = false;
|
||||||
}
|
}
|
||||||
state.activeNode = node;
|
store.setActiveNode(node);
|
||||||
}
|
}
|
||||||
|
|
||||||
const onNodeEdit = (node: IActionNode) => {
|
const onNodeEdit = (node: IActionNode) => {
|
||||||
state.activeNode = node;
|
store.setActiveNode(node);
|
||||||
drawerRight.value = true;
|
drawerRight.value = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
const onDeleteNode = (node: IActionNode) => {
|
const onDeleteNode = (node: IActionNode) => {
|
||||||
if (!store.currentFlow) return;
|
if (!store.currentFlow) return;
|
||||||
//右パネルが開いている場合、自動閉じる
|
//右パネルが開いている場合、自動閉じる
|
||||||
if (drawerRight.value && state.activeNode.id === node.id) {
|
if (drawerRight.value && store.activeNode?.id === node.id) {
|
||||||
drawerRight.value = false;
|
drawerRight.value = false;
|
||||||
}
|
}
|
||||||
store.currentFlow?.removeNode(node);
|
store.currentFlow?.removeNode(node);
|
||||||
@@ -219,7 +214,7 @@ const fetchData = async () => {
|
|||||||
}
|
}
|
||||||
const root = actionFlows[0].getRoot();
|
const root = actionFlows[0].getRoot();
|
||||||
if (root) {
|
if (root) {
|
||||||
state.activeNode = root;
|
store.setActiveNode(root);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { defineStore } from 'pinia';
|
import { defineStore } from 'pinia';
|
||||||
import { AppInfo ,IActionFlow} from 'src/types/ActionTypes';
|
import { AppInfo ,IActionFlow, IActionNode} from 'src/types/ActionTypes';
|
||||||
import { kintoneEvents,IKintoneEvent,KintoneEventManager } from 'src/types/KintoneEvents';
|
import { kintoneEvents,IKintoneEvent,KintoneEventManager } from 'src/types/KintoneEvents';
|
||||||
import {FlowCtrl } from '../control/flowctrl';
|
import {FlowCtrl } from '../control/flowctrl';
|
||||||
|
|
||||||
@@ -8,6 +8,7 @@ export interface FlowEditorState{
|
|||||||
appInfo?:AppInfo;
|
appInfo?:AppInfo;
|
||||||
flows?:IActionFlow[];
|
flows?:IActionFlow[];
|
||||||
selectedFlow?:IActionFlow|undefined;
|
selectedFlow?:IActionFlow|undefined;
|
||||||
|
activeNode:IActionNode|undefined;
|
||||||
eventTree:KintoneEventManager;
|
eventTree:KintoneEventManager;
|
||||||
selectedEvent:IKintoneEvent|undefined;
|
selectedEvent:IKintoneEvent|undefined;
|
||||||
expandedScreen:any[];
|
expandedScreen:any[];
|
||||||
@@ -19,6 +20,7 @@ export const useFlowEditorStore = defineStore("flowEditor",{
|
|||||||
appInfo:undefined,
|
appInfo:undefined,
|
||||||
flows:[],
|
flows:[],
|
||||||
selectedFlow:undefined,
|
selectedFlow:undefined,
|
||||||
|
activeNode:undefined,
|
||||||
eventTree:kintoneEvents,
|
eventTree:kintoneEvents,
|
||||||
selectedEvent:undefined,
|
selectedEvent:undefined,
|
||||||
expandedScreen:[]
|
expandedScreen:[]
|
||||||
@@ -53,6 +55,9 @@ export const useFlowEditorStore = defineStore("flowEditor",{
|
|||||||
selectFlow(flow:IActionFlow){
|
selectFlow(flow:IActionFlow){
|
||||||
this.selectedFlow=flow;
|
this.selectedFlow=flow;
|
||||||
},
|
},
|
||||||
|
setActiveNode(node:IActionNode){
|
||||||
|
this.activeNode=node;
|
||||||
|
},
|
||||||
setApp(app:AppInfo){
|
setApp(app:AppInfo){
|
||||||
this.appInfo=app;
|
this.appInfo=app;
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -16,11 +16,9 @@ export interface AppInfo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* アクションのプロパティ定義
|
* 属性項目情報
|
||||||
*/
|
*/
|
||||||
export interface IActionProperty {
|
export interface IProp{
|
||||||
component: string;
|
|
||||||
props: {
|
|
||||||
//プロパティ名
|
//プロパティ名
|
||||||
name: string;
|
name: string;
|
||||||
//プロパティ表示名
|
//プロパティ表示名
|
||||||
@@ -30,7 +28,22 @@ export interface IActionProperty {
|
|||||||
hint:string;
|
hint:string;
|
||||||
//プロパティ設定値
|
//プロパティ設定値
|
||||||
modelValue: any;
|
modelValue: any;
|
||||||
};
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* アクションのプロパティ定義
|
||||||
|
*/
|
||||||
|
export interface IActionProperty {
|
||||||
|
component: string;
|
||||||
|
props: IProp;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 変数オブジェクト
|
||||||
|
*/
|
||||||
|
export interface IActionVariable{
|
||||||
|
actionName:string;
|
||||||
|
displayName:string;
|
||||||
|
name:string;
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* アクションタイプ定義
|
* アクションタイプ定義
|
||||||
@@ -40,6 +53,7 @@ export interface IActionNode {
|
|||||||
//アクション名
|
//アクション名
|
||||||
name: string;
|
name: string;
|
||||||
title: string;
|
title: string;
|
||||||
|
varName:IProp|undefined;
|
||||||
subTitle: string;
|
subTitle: string;
|
||||||
inputPoint: string;
|
inputPoint: string;
|
||||||
//出力ポイント(条件分岐以外未使用)
|
//出力ポイント(条件分岐以外未使用)
|
||||||
@@ -62,6 +76,7 @@ export interface IActionFlow {
|
|||||||
addNode(newNode: IActionNode, prevNode?: IActionNode, inputPoint?: string): IActionNode;
|
addNode(newNode: IActionNode, prevNode?: IActionNode, inputPoint?: string): IActionNode;
|
||||||
removeNode(targetNode: IActionNode): boolean;
|
removeNode(targetNode: IActionNode): boolean;
|
||||||
removeAllNext(targetNodeId: string): void;
|
removeAllNext(targetNodeId: string): void;
|
||||||
|
getVarNames(currentNode:IActionNode):IActionVariable[];
|
||||||
findNodeById(id: string): IActionNode | undefined;
|
findNodeById(id: string): IActionNode | undefined;
|
||||||
toJSON(): any;
|
toJSON(): any;
|
||||||
getRoot(): IActionNode | undefined;
|
getRoot(): IActionNode | undefined;
|
||||||
@@ -73,16 +88,7 @@ export interface IActionFlow {
|
|||||||
*/
|
*/
|
||||||
class ActionProperty implements IActionProperty {
|
class ActionProperty implements IActionProperty {
|
||||||
component: string;
|
component: string;
|
||||||
props: {
|
props: IProp;
|
||||||
// プロパティ名
|
|
||||||
name: string;
|
|
||||||
// プロパティ表示名
|
|
||||||
displayName: string;
|
|
||||||
placeholder: string;
|
|
||||||
hint:string;
|
|
||||||
// プロパティ設定値
|
|
||||||
modelValue: any;
|
|
||||||
};
|
|
||||||
|
|
||||||
static defaultProperty(): IActionProperty {
|
static defaultProperty(): IActionProperty {
|
||||||
return new ActionProperty('InputText', 'displayName', '表示名', '表示を入力してください', '','');
|
return new ActionProperty('InputText', 'displayName', '表示名', '表示を入力してください', '','');
|
||||||
@@ -121,6 +127,13 @@ export class ActionNode implements IActionNode {
|
|||||||
get subTitle(): string {
|
get subTitle(): string {
|
||||||
return this.name;
|
return this.name;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//変数名
|
||||||
|
get varName():IProp|undefined{
|
||||||
|
const prop = this.actionProps.find((prop) => prop.props.name === "verName");
|
||||||
|
return prop?.props;
|
||||||
|
}
|
||||||
|
|
||||||
inputPoint: string;
|
inputPoint: string;
|
||||||
//出力ポイント(条件分岐以外未使用)
|
//出力ポイント(条件分岐以外未使用)
|
||||||
outputPoints: Array<string>;
|
outputPoints: Array<string>;
|
||||||
@@ -168,6 +181,7 @@ export class RootAction implements IActionNode {
|
|||||||
title: string;
|
title: string;
|
||||||
subTitle: string;
|
subTitle: string;
|
||||||
inputPoint: string;
|
inputPoint: string;
|
||||||
|
varName: IProp | undefined=undefined;
|
||||||
//出力ポイント(条件分岐以外未使用)
|
//出力ポイント(条件分岐以外未使用)
|
||||||
outputPoints: Array<string>;
|
outputPoints: Array<string>;
|
||||||
isRoot: boolean;
|
isRoot: boolean;
|
||||||
@@ -225,7 +239,7 @@ export class ActionFlow implements IActionFlow {
|
|||||||
newNode.inputPoint = inputPoint;
|
newNode.inputPoint = inputPoint;
|
||||||
}
|
}
|
||||||
if (prevNode !== undefined) {
|
if (prevNode !== undefined) {
|
||||||
this.connectNodes(prevNode, newNode, inputPoint || '');
|
this.resetNodeRelation(prevNode, newNode, inputPoint || '');
|
||||||
} else {
|
} else {
|
||||||
prevNode = this.actionNodes[this.actionNodes.length - 1];
|
prevNode = this.actionNodes[this.actionNodes.length - 1];
|
||||||
this.connectNodes(prevNode, newNode, inputPoint || '');
|
this.connectNodes(prevNode, newNode, inputPoint || '');
|
||||||
@@ -319,8 +333,7 @@ export class ActionFlow implements IActionFlow {
|
|||||||
if (!nextNodeId) return;
|
if (!nextNodeId) return;
|
||||||
const nextNode = this.findNodeById(nextNodeId);
|
const nextNode = this.findNodeById(nextNodeId);
|
||||||
if (!nextNode) return;
|
if (!nextNode) return;
|
||||||
nextNode.prevNodeId = prevNode.id;
|
this.connectNodes(prevNode,nextNode,targetNode.inputPoint || '');
|
||||||
prevNode.nextNodeIds.set(targetNode.inputPoint || '', nextNodeId);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
//二つ以上の場合
|
//二つ以上の場合
|
||||||
@@ -354,15 +367,16 @@ export class ActionFlow implements IActionFlow {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param prevNode ノードの接続をリセットする
|
* @param prevNode ノード挿入時の接続をリセットする
|
||||||
* @param newNode
|
* @param newNode
|
||||||
* @param inputPoint
|
* @param inputPoint
|
||||||
*/
|
*/
|
||||||
resetNodeRelation(prevNode: IActionNode, newNode: IActionNode, inputPoint?: string) {
|
resetNodeRelation(prevNode: IActionNode, newNode: IActionNode, inputPoint?: string) {
|
||||||
//
|
//元の次のノードを取得
|
||||||
|
const originalNextNodeId = prevNode.nextNodeIds.get(inputPoint || '');
|
||||||
prevNode.nextNodeIds.set(inputPoint || '', newNode.id);
|
prevNode.nextNodeIds.set(inputPoint || '', newNode.id);
|
||||||
newNode.prevNodeId = prevNode.id;
|
newNode.prevNodeId = prevNode.id;
|
||||||
const originalNextNodeId = prevNode.nextNodeIds.get(inputPoint || '');
|
newNode.inputPoint=inputPoint||'';
|
||||||
this.setNewNodeNextId(newNode, originalNextNodeId, inputPoint);
|
this.setNewNodeNextId(newNode, originalNextNodeId, inputPoint);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -374,15 +388,18 @@ export class ActionFlow implements IActionFlow {
|
|||||||
*/
|
*/
|
||||||
private setNewNodeNextId(newNode: IActionNode, originalNextNodeId: string | undefined, inputPoint?: string) {
|
private setNewNodeNextId(newNode: IActionNode, originalNextNodeId: string | undefined, inputPoint?: string) {
|
||||||
// 元の接続ノードが存在する
|
// 元の接続ノードが存在する
|
||||||
if (originalNextNodeId) {
|
if (!originalNextNodeId) {return;}
|
||||||
|
const originNextNode = this.findNodeById(originalNextNodeId);
|
||||||
|
if (!originNextNode) {return;}
|
||||||
// 新しいノードの outputPoints に該当 inputPointが存在するか場合をチェックする
|
// 新しいノードの outputPoints に該当 inputPointが存在するか場合をチェックする
|
||||||
if (newNode.outputPoints.includes(inputPoint || '')) {
|
if (newNode.outputPoints.includes(inputPoint || '')) {
|
||||||
newNode.nextNodeIds.set(inputPoint || '', originalNextNodeId);
|
newNode.nextNodeIds.set(inputPoint || '', originalNextNodeId);
|
||||||
|
originNextNode.prevNodeId=newNode.id;
|
||||||
} else {
|
} else {
|
||||||
// inputPointが存在しない場合、outputPointのポイントの任意ポートを選択する
|
// inputPointが存在しない場合、outputPointのポイントの任意ポートを選択する
|
||||||
const alternativeOutputPoint = newNode.outputPoints.length > 0 ? newNode.outputPoints[0] : '';
|
const alternativeOutputPoint = newNode.outputPoints.length > 0 ? newNode.outputPoints[0] : '';
|
||||||
newNode.nextNodeIds.set(alternativeOutputPoint, originalNextNodeId);
|
newNode.nextNodeIds.set(alternativeOutputPoint, originalNextNodeId);
|
||||||
}
|
originNextNode.prevNodeId=newNode.id;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -393,6 +410,36 @@ export class ActionFlow implements IActionFlow {
|
|||||||
return this.actionNodes.find((node) => node.id === id);
|
return this.actionNodes.find((node) => node.id === id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getVarNames(currentNode:IActionNode):IActionVariable[]{
|
||||||
|
let varNames:IActionVariable[]=[];
|
||||||
|
if(currentNode.prevNodeId!==undefined){
|
||||||
|
const prevNode=this.findNodeById(currentNode.prevNodeId);
|
||||||
|
if(prevNode!==undefined){
|
||||||
|
varNames = this.getPrevVarNames(prevNode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return varNames;
|
||||||
|
}
|
||||||
|
|
||||||
|
getPrevVarNames(prevNode:IActionNode):IActionVariable[]{
|
||||||
|
let varNames:IActionVariable[]=[];
|
||||||
|
if(prevNode.varName!==undefined){
|
||||||
|
varNames.unshift({
|
||||||
|
actionName:prevNode.name,
|
||||||
|
displayName:prevNode.varName.displayName,
|
||||||
|
name:prevNode.varName.modelValue
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if(prevNode.prevNodeId!==undefined){
|
||||||
|
const prevPrevNode=this.findNodeById(prevNode.prevNodeId);
|
||||||
|
if(prevPrevNode!==undefined){
|
||||||
|
const prevVars = this.getPrevVarNames(prevPrevNode);
|
||||||
|
varNames=[...prevVars,...varNames];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return varNames;
|
||||||
|
}
|
||||||
|
|
||||||
toJSON() {
|
toJSON() {
|
||||||
return {
|
return {
|
||||||
id: this.id,
|
id: this.id,
|
||||||
|
|||||||
@@ -35,7 +35,13 @@ export class AutoNumbering implements IAction{
|
|||||||
globalThis.window.$format=this.format;
|
globalThis.window.$format=this.format;
|
||||||
this.register();
|
this.register();
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* アクションの処理を実装する
|
||||||
|
* @param actionNode アクションノード
|
||||||
|
* @param event Kintoneのイベント
|
||||||
|
* @param context コンテキスト(レコード、変数情報を持っている)
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
async process(actionNode:IActionNode,event:any,context:IContext):Promise<IActionResult> {
|
async process(actionNode:IActionNode,event:any,context:IContext):Promise<IActionResult> {
|
||||||
let result={
|
let result={
|
||||||
canNext:false,
|
canNext:false,
|
||||||
|
|||||||
Reference in New Issue
Block a user