Compare commits
17 Commits
daitian-pi
...
mvp_featur
| Author | SHA1 | Date | |
|---|---|---|---|
| 76457b6667 | |||
| e1f2afa942 | |||
| 8d5dff60f1 | |||
| 461cd26690 | |||
| 4c6b2ea844 | |||
| 418f45f997 | |||
| 51ebe99d1c | |||
| 2f1f8a60fc | |||
| 64795a80c7 | |||
| 94a17073dd | |||
| 7f7d625fdd | |||
| 6902079866 | |||
| 6aa057e590 | |||
| 2721cd60d1 | |||
| 1f8d079d4d | |||
| 3ae685a0e2 | |||
| c1e50736e8 |
@@ -2,7 +2,8 @@ from fastapi import Request,Depends, APIRouter, UploadFile,HTTPException,File
|
|||||||
from app.db import Base,engine
|
from app.db import Base,engine
|
||||||
from app.db.session import get_db
|
from app.db.session import get_db
|
||||||
from app.db.crud import *
|
from app.db.crud import *
|
||||||
from app.db.schemas import AppBase, AppEdit, App,Kintone
|
from app.db.schemas import *
|
||||||
|
from typing import List
|
||||||
|
|
||||||
platform_router = r = APIRouter()
|
platform_router = r = APIRouter()
|
||||||
|
|
||||||
@@ -64,4 +65,122 @@ async def kintone_data(
|
|||||||
db=Depends(get_db),
|
db=Depends(get_db),
|
||||||
):
|
):
|
||||||
kintone = get_kintones(db, type)
|
kintone = get_kintones(db, type)
|
||||||
return kintone
|
return kintone
|
||||||
|
|
||||||
|
@r.get(
|
||||||
|
"/actions",
|
||||||
|
response_model=t.List[Action],
|
||||||
|
response_model_exclude={"id"},
|
||||||
|
response_model_exclude_none=True,
|
||||||
|
)
|
||||||
|
async def action_data(
|
||||||
|
request: Request,
|
||||||
|
db=Depends(get_db),
|
||||||
|
):
|
||||||
|
actions = get_actions(db)
|
||||||
|
return actions
|
||||||
|
|
||||||
|
@r.get(
|
||||||
|
"/flow/{flowid}",
|
||||||
|
response_model=Flow,
|
||||||
|
response_model_exclude_none=True,
|
||||||
|
)
|
||||||
|
async def flow_details(
|
||||||
|
request: Request,
|
||||||
|
flowid: str,
|
||||||
|
db=Depends(get_db),
|
||||||
|
):
|
||||||
|
app = get_flow(db, flowid)
|
||||||
|
return app
|
||||||
|
|
||||||
|
|
||||||
|
@r.get(
|
||||||
|
"/flows/{appid}",
|
||||||
|
response_model=List[Flow],
|
||||||
|
response_model_exclude_none=True,
|
||||||
|
)
|
||||||
|
async def flow_list(
|
||||||
|
request: Request,
|
||||||
|
appid: str,
|
||||||
|
db=Depends(get_db),
|
||||||
|
):
|
||||||
|
flows = get_flows_by_app(db, appid)
|
||||||
|
return flows
|
||||||
|
|
||||||
|
|
||||||
|
@r.post("/flow", response_model=Flow, response_model_exclude_none=True)
|
||||||
|
async def flow_create(
|
||||||
|
request: Request,
|
||||||
|
flow: FlowBase,
|
||||||
|
db=Depends(get_db),
|
||||||
|
):
|
||||||
|
return create_flow(db, flow)
|
||||||
|
|
||||||
|
|
||||||
|
@r.put(
|
||||||
|
"/flow/{flowid}", response_model=Flow, response_model_exclude_none=True
|
||||||
|
)
|
||||||
|
async def flow_edit(
|
||||||
|
request: Request,
|
||||||
|
flow: FlowBase,
|
||||||
|
db=Depends(get_db),
|
||||||
|
):
|
||||||
|
return edit_flow(db, flow)
|
||||||
|
|
||||||
|
|
||||||
|
@r.delete(
|
||||||
|
"/flow/{flowid}", response_model=Flow, response_model_exclude_none=True
|
||||||
|
)
|
||||||
|
async def flow_delete(
|
||||||
|
request: Request,
|
||||||
|
flowid: str,
|
||||||
|
db=Depends(get_db),
|
||||||
|
):
|
||||||
|
|
||||||
|
return delete_flow(db, flowid)
|
||||||
|
|
||||||
|
@r.get(
|
||||||
|
"/domain/{userid}",
|
||||||
|
response_model=List[Domain],
|
||||||
|
response_model_exclude_none=True,
|
||||||
|
)
|
||||||
|
async def domain_details(
|
||||||
|
request: Request,
|
||||||
|
userid: str,
|
||||||
|
db=Depends(get_db),
|
||||||
|
):
|
||||||
|
domains = get_domain(db, userid)
|
||||||
|
return domains
|
||||||
|
|
||||||
|
|
||||||
|
@r.post("/domain", response_model=Domain, response_model_exclude_none=True)
|
||||||
|
async def domain_create(
|
||||||
|
request: Request,
|
||||||
|
domain: DomainBase,
|
||||||
|
db=Depends(get_db),
|
||||||
|
):
|
||||||
|
return create_domain(db, domain)
|
||||||
|
|
||||||
|
|
||||||
|
@r.put(
|
||||||
|
"/domain", response_model=Domain, response_model_exclude_none=True
|
||||||
|
)
|
||||||
|
async def domain_edit(
|
||||||
|
request: Request,
|
||||||
|
domain: DomainBase,
|
||||||
|
db=Depends(get_db),
|
||||||
|
):
|
||||||
|
return edit_domain(db, domain)
|
||||||
|
|
||||||
|
|
||||||
|
@r.delete(
|
||||||
|
"/domain/{userid}/{id}", response_model=Domain, response_model_exclude_none=True
|
||||||
|
)
|
||||||
|
async def domain_delete(
|
||||||
|
request: Request,
|
||||||
|
userid: int,
|
||||||
|
id: int,
|
||||||
|
db=Depends(get_db),
|
||||||
|
):
|
||||||
|
|
||||||
|
return delete_domain(db, userid,id)
|
||||||
@@ -2,7 +2,7 @@ import os
|
|||||||
|
|
||||||
PROJECT_NAME = "KintoneAppBuilder"
|
PROJECT_NAME = "KintoneAppBuilder"
|
||||||
|
|
||||||
SQLALCHEMY_DATABASE_URI = "mssql+pymssql://maxz64@maxzdb:m@xz1205@maxzdb.database.windows.net/alloc"
|
SQLALCHEMY_DATABASE_URI = "postgres://maxz64:m@xz1205@alicornkintone.postgres.database.azure.com/postgres"
|
||||||
|
|
||||||
BASE_URL = "https://mfu07rkgnb7c.cybozu.com"
|
BASE_URL = "https://mfu07rkgnb7c.cybozu.com"
|
||||||
|
|
||||||
|
|||||||
@@ -115,4 +115,113 @@ def get_kintones(db: Session, type: int):
|
|||||||
kintones = db.query(models.Kintone).filter(models.Kintone.type == type).all()
|
kintones = db.query(models.Kintone).filter(models.Kintone.type == type).all()
|
||||||
if not kintones:
|
if not kintones:
|
||||||
raise HTTPException(status_code=404, detail="Data not found")
|
raise HTTPException(status_code=404, detail="Data not found")
|
||||||
return kintones
|
return kintones
|
||||||
|
|
||||||
|
def get_actions(db: Session):
|
||||||
|
actions = db.query(models.Action).all()
|
||||||
|
if not actions:
|
||||||
|
raise HTTPException(status_code=404, detail="Data not found")
|
||||||
|
return actions
|
||||||
|
|
||||||
|
|
||||||
|
def create_flow(db: Session, flow: schemas.FlowBase):
|
||||||
|
db_flow = models.Flow(
|
||||||
|
flowid=flow.flowid,
|
||||||
|
appid=flow.appid,
|
||||||
|
eventid=flow.eventid,
|
||||||
|
name=flow.name,
|
||||||
|
content=flow.content
|
||||||
|
)
|
||||||
|
db.add(db_flow)
|
||||||
|
db.commit()
|
||||||
|
db.refresh(db_flow)
|
||||||
|
return db_flow
|
||||||
|
|
||||||
|
def delete_flow(db: Session, flowid: str):
|
||||||
|
flow = get_flow(db, flowid)
|
||||||
|
if not flow:
|
||||||
|
raise HTTPException(status.HTTP_404_NOT_FOUND, detail="Flow not found")
|
||||||
|
db.delete(flow)
|
||||||
|
db.commit()
|
||||||
|
return flow
|
||||||
|
|
||||||
|
|
||||||
|
def edit_flow(
|
||||||
|
db: Session, flow: schemas.FlowBase
|
||||||
|
) -> schemas.Flow:
|
||||||
|
db_flow = get_flow(db, flow.flowid)
|
||||||
|
if not db_flow:
|
||||||
|
raise HTTPException(status.HTTP_404_NOT_FOUND, detail="Flow not found")
|
||||||
|
update_data = flow.dict(exclude_unset=True)
|
||||||
|
|
||||||
|
for key, value in update_data.items():
|
||||||
|
setattr(db_flow, key, value)
|
||||||
|
|
||||||
|
db.add(db_flow)
|
||||||
|
db.commit()
|
||||||
|
db.refresh(db_flow)
|
||||||
|
return db_flow
|
||||||
|
|
||||||
|
|
||||||
|
def get_flows(db: Session, flowid: str):
|
||||||
|
flows = db.query(models.Flow).all()
|
||||||
|
if not flows:
|
||||||
|
raise HTTPException(status_code=404, detail="Data not found")
|
||||||
|
return flows
|
||||||
|
|
||||||
|
def get_flow(db: Session, flowid: str):
|
||||||
|
flow = db.query(models.Flow).filter(models.Flow.flowid == flowid).first()
|
||||||
|
if not flow:
|
||||||
|
raise HTTPException(status_code=404, detail="Data not found")
|
||||||
|
return flow
|
||||||
|
|
||||||
|
def get_flows_by_app(db: Session, appid: str):
|
||||||
|
flows = db.query(models.Flow).filter(models.Flow.appid == appid).all()
|
||||||
|
if not flows:
|
||||||
|
raise HTTPException(status_code=404, detail="Data not found")
|
||||||
|
return flows
|
||||||
|
|
||||||
|
def create_domain(db: Session, domain: schemas.DomainBase):
|
||||||
|
db_domain = models.UserDomain(
|
||||||
|
userid=domain.userid,
|
||||||
|
name=domain.name,
|
||||||
|
url=domain.url,
|
||||||
|
kintoneuser=domain.kintoneuser,
|
||||||
|
kintonepwd=domain.kintonepwd
|
||||||
|
)
|
||||||
|
db.add(db_domain)
|
||||||
|
db.commit()
|
||||||
|
db.refresh(db_domain)
|
||||||
|
return db_domain
|
||||||
|
|
||||||
|
def delete_domain(db: Session, userid: int,id: int):
|
||||||
|
db_domain = db.query(models.UserDomain).get(id)
|
||||||
|
if not db_domain or db_domain.userid != userid:
|
||||||
|
raise HTTPException(status.HTTP_404_NOT_FOUND, detail="Domain not found")
|
||||||
|
db.delete(db_domain)
|
||||||
|
db.commit()
|
||||||
|
return db_domain
|
||||||
|
|
||||||
|
|
||||||
|
def edit_domain(
|
||||||
|
db: Session, domain: schemas.DomainBase
|
||||||
|
) -> schemas.Domain:
|
||||||
|
db_domain = db.query(models.UserDomain).get(domain.id)
|
||||||
|
if not db_domain or db_domain.userid != domain.userid:
|
||||||
|
raise HTTPException(status.HTTP_404_NOT_FOUND, detail="Domain not found")
|
||||||
|
update_data = domain.dict(exclude_unset=True)
|
||||||
|
|
||||||
|
for key, value in update_data.items():
|
||||||
|
if(key != "id"):
|
||||||
|
setattr(db_domain, key, value)
|
||||||
|
|
||||||
|
db.add(db_domain)
|
||||||
|
db.commit()
|
||||||
|
db.refresh(db_domain)
|
||||||
|
return db_domain
|
||||||
|
|
||||||
|
def get_domain(db: Session, userid: str):
|
||||||
|
domains = db.query(models.UserDomain).filter(models.UserDomain.userid == userid).all()
|
||||||
|
if not domains:
|
||||||
|
raise HTTPException(status_code=404, detail="Data not found")
|
||||||
|
return domains
|
||||||
@@ -1,12 +1,16 @@
|
|||||||
from sqlalchemy import Boolean, Column, Integer, String
|
from sqlalchemy import Boolean, Column, Integer, String, DateTime,ForeignKey
|
||||||
|
from sqlalchemy.ext.declarative import as_declarative
|
||||||
from .session import Base
|
from datetime import datetime
|
||||||
|
|
||||||
|
@as_declarative()
|
||||||
|
class Base:
|
||||||
|
id = Column(Integer, primary_key=True, index=True)
|
||||||
|
create_time = Column(DateTime, default=datetime.now)
|
||||||
|
update_time = Column(DateTime, default=datetime.now, onupdate=datetime.now)
|
||||||
|
|
||||||
class User(Base):
|
class User(Base):
|
||||||
__tablename__ = "user"
|
__tablename__ = "user"
|
||||||
|
|
||||||
id = Column(Integer, primary_key=True, index=True)
|
|
||||||
email = Column(String(50), unique=True, index=True, nullable=False)
|
email = Column(String(50), unique=True, index=True, nullable=False)
|
||||||
first_name = Column(String(100))
|
first_name = Column(String(100))
|
||||||
last_name = Column(String(100))
|
last_name = Column(String(100))
|
||||||
@@ -17,15 +21,41 @@ class User(Base):
|
|||||||
class AppSetting(Base):
|
class AppSetting(Base):
|
||||||
__tablename__ = "appsetting"
|
__tablename__ = "appsetting"
|
||||||
|
|
||||||
id = Column(Integer, primary_key=True, index=True)
|
|
||||||
appid = Column(String(100), index=True, nullable=False)
|
appid = Column(String(100), index=True, nullable=False)
|
||||||
setting = Column(String(1000))
|
setting = Column(String(1000))
|
||||||
|
|
||||||
class Kintone(Base):
|
class Kintone(Base):
|
||||||
__tablename__ = "kintone"
|
__tablename__ = "kintone"
|
||||||
|
|
||||||
id = Column(Integer, primary_key=True, index=True)
|
|
||||||
type = Column(Integer, index=True, nullable=False)
|
type = Column(Integer, index=True, nullable=False)
|
||||||
name = Column(String(100), nullable=False)
|
name = Column(String(100), nullable=False)
|
||||||
desc = Column(String)
|
desc = Column(String)
|
||||||
content = Column(String)
|
content = Column(String)
|
||||||
|
|
||||||
|
class Action(Base):
|
||||||
|
__tablename__ = "action"
|
||||||
|
|
||||||
|
name = Column(String(100), index=True, nullable=False)
|
||||||
|
title = Column(String(200))
|
||||||
|
subtitle = Column(String(500))
|
||||||
|
outputpoints = Column(String)
|
||||||
|
property = Column(String)
|
||||||
|
|
||||||
|
class Flow(Base):
|
||||||
|
__tablename__ = "flow"
|
||||||
|
|
||||||
|
flowid = Column(String(100), index=True, nullable=False)
|
||||||
|
appid = Column(String(100), index=True, nullable=False)
|
||||||
|
eventid = Column(String(100), index=True, nullable=False)
|
||||||
|
name = Column(String(200))
|
||||||
|
content = Column(String)
|
||||||
|
|
||||||
|
class UserDomain(Base):
|
||||||
|
__tablename__ = "userdomain"
|
||||||
|
|
||||||
|
userid = Column(Integer,ForeignKey("user.id"))
|
||||||
|
name = Column(String(100), nullable=False)
|
||||||
|
url = Column(String(200), nullable=False)
|
||||||
|
kintoneuser = Column(String(100), nullable=False)
|
||||||
|
kintonepwd = Column(String(100), nullable=False)
|
||||||
|
active = Column(Boolean, default=False)
|
||||||
@@ -1,7 +1,12 @@
|
|||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
|
from datetime import datetime
|
||||||
import typing as t
|
import typing as t
|
||||||
|
|
||||||
|
|
||||||
|
class Base(BaseModel):
|
||||||
|
create_time: datetime
|
||||||
|
update_time: datetime
|
||||||
|
|
||||||
class UserBase(BaseModel):
|
class UserBase(BaseModel):
|
||||||
email: str
|
email: str
|
||||||
is_active: bool = True
|
is_active: bool = True
|
||||||
@@ -67,5 +72,55 @@ class Kintone(BaseModel):
|
|||||||
desc: str = None
|
desc: str = None
|
||||||
content: str = None
|
content: str = None
|
||||||
|
|
||||||
|
class Config:
|
||||||
|
orm_mode = True
|
||||||
|
|
||||||
|
class Action(BaseModel):
|
||||||
|
id: int
|
||||||
|
name: str = None
|
||||||
|
title: str = None
|
||||||
|
subtitle: str = None
|
||||||
|
outputpoints: str = None
|
||||||
|
property: str = None
|
||||||
|
|
||||||
|
class Config:
|
||||||
|
orm_mode = True
|
||||||
|
|
||||||
|
class FlowBase(BaseModel):
|
||||||
|
flowid: str
|
||||||
|
appid: str
|
||||||
|
eventid: str
|
||||||
|
name: str = None
|
||||||
|
content: str = None
|
||||||
|
|
||||||
|
class Flow(Base):
|
||||||
|
id: int
|
||||||
|
flowid: str
|
||||||
|
appid: str
|
||||||
|
eventid: str
|
||||||
|
name: str = None
|
||||||
|
content: str = None
|
||||||
|
|
||||||
|
class Config:
|
||||||
|
orm_mode = True
|
||||||
|
|
||||||
|
class DomainBase(BaseModel):
|
||||||
|
id: int
|
||||||
|
userid: int
|
||||||
|
name: str
|
||||||
|
url: str
|
||||||
|
kintoneuser: str
|
||||||
|
kintonepwd: str
|
||||||
|
active:bool = False
|
||||||
|
|
||||||
|
class Domain(Base):
|
||||||
|
id: int
|
||||||
|
userid: str
|
||||||
|
name: str
|
||||||
|
url: str
|
||||||
|
kintoneuser: str
|
||||||
|
kintonepwd: str
|
||||||
|
active:bool
|
||||||
|
|
||||||
class Config:
|
class Config:
|
||||||
orm_mode = True
|
orm_mode = True
|
||||||
@@ -20,4 +20,5 @@ pyjwt==1.7.1
|
|||||||
pandas==2.0.3
|
pandas==2.0.3
|
||||||
openpyxl==3.1.2
|
openpyxl==3.1.2
|
||||||
deepdiff==6.3.1
|
deepdiff==6.3.1
|
||||||
pymssql==2.2.7
|
pymssql==2.2.7
|
||||||
|
psycopg2==2.9.8
|
||||||
BIN
document/kintone開発自動化ツール UIデザイン案.pptx
Normal file
BIN
document/kintone開発自動化ツール UIデザイン案.pptx
Normal file
Binary file not shown.
53
frontend/package-lock.json
generated
53
frontend/package-lock.json
generated
@@ -10,6 +10,7 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@quasar/extras": "^1.16.4",
|
"@quasar/extras": "^1.16.4",
|
||||||
"axios": "^1.4.0",
|
"axios": "^1.4.0",
|
||||||
|
"pinia": "^2.1.6",
|
||||||
"quasar": "^2.6.0",
|
"quasar": "^2.6.0",
|
||||||
"uuid": "^9.0.0",
|
"uuid": "^9.0.0",
|
||||||
"vue": "^3.0.0",
|
"vue": "^3.0.0",
|
||||||
@@ -4079,6 +4080,56 @@
|
|||||||
"url": "https://github.com/sponsors/jonschlinkert"
|
"url": "https://github.com/sponsors/jonschlinkert"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/pinia": {
|
||||||
|
"version": "2.1.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/pinia/-/pinia-2.1.6.tgz",
|
||||||
|
"integrity": "sha512-bIU6QuE5qZviMmct5XwCesXelb5VavdOWKWaB17ggk++NUwQWWbP5YnsONTk3b752QkW9sACiR81rorpeOMSvQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"@vue/devtools-api": "^6.5.0",
|
||||||
|
"vue-demi": ">=0.14.5"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/posva"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"@vue/composition-api": "^1.4.0",
|
||||||
|
"typescript": ">=4.4.4",
|
||||||
|
"vue": "^2.6.14 || ^3.3.0"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"@vue/composition-api": {
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"typescript": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/pinia/node_modules/vue-demi": {
|
||||||
|
"version": "0.14.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz",
|
||||||
|
"integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==",
|
||||||
|
"hasInstallScript": true,
|
||||||
|
"bin": {
|
||||||
|
"vue-demi-fix": "bin/vue-demi-fix.js",
|
||||||
|
"vue-demi-switch": "bin/vue-demi-switch.js"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/antfu"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"@vue/composition-api": "^1.0.0-rc.1",
|
||||||
|
"vue": "^3.0.0-0 || ^2.6.0"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"@vue/composition-api": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/postcss": {
|
"node_modules/postcss": {
|
||||||
"version": "8.4.25",
|
"version": "8.4.25",
|
||||||
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.25.tgz",
|
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.25.tgz",
|
||||||
@@ -4955,7 +5006,7 @@
|
|||||||
"version": "4.9.5",
|
"version": "4.9.5",
|
||||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz",
|
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz",
|
||||||
"integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==",
|
"integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==",
|
||||||
"dev": true,
|
"devOptional": true,
|
||||||
"bin": {
|
"bin": {
|
||||||
"tsc": "bin/tsc",
|
"tsc": "bin/tsc",
|
||||||
"tsserver": "bin/tsserver"
|
"tsserver": "bin/tsserver"
|
||||||
|
|||||||
@@ -1,6 +1,12 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="q-pa-md">
|
<div class="q-pa-md">
|
||||||
<q-table :title="name+'一覧'" row-key="name" :selection="type" v-model:selected="selected" :columns="columns" :rows="rows" />
|
<q-table row-key="name" :selection="type" v-model:selected="selected" :columns="columns" :rows="rows"
|
||||||
|
class="action-table"
|
||||||
|
flat bordered
|
||||||
|
virtual-scroll
|
||||||
|
:pagination="pagination"
|
||||||
|
:rows-per-page-options="[0]"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
@@ -17,11 +23,11 @@ export default {
|
|||||||
const columns = [
|
const columns = [
|
||||||
{ name: 'name', required: true,label: 'アクション名',align: 'left',field: 'name',sortable: true},
|
{ name: 'name', required: true,label: 'アクション名',align: 'left',field: 'name',sortable: true},
|
||||||
{ name: 'desc', align: 'left', label: '説明', field: 'desc', sortable: true },
|
{ name: 'desc', align: 'left', label: '説明', field: 'desc', sortable: true },
|
||||||
{ name: 'content', label: '内容', field: 'content', sortable: true }
|
// { name: 'content', label: '内容', field: 'content', sortable: true }
|
||||||
]
|
]
|
||||||
const rows = reactive([])
|
const rows = reactive([])
|
||||||
onMounted(async () => {
|
onMounted(async () => {
|
||||||
await api.get('http://127.0.0.1:8000/api/kintone/2').then(res =>{
|
await api.get('http://127.0.0.1:8000/api/kintone/1').then(res =>{
|
||||||
res.data.forEach((item) =>
|
res.data.forEach((item) =>
|
||||||
{
|
{
|
||||||
rows.push({name:item.name,desc:item.desc,content:item.content});
|
rows.push({name:item.name,desc:item.desc,content:item.content});
|
||||||
@@ -33,8 +39,16 @@ export default {
|
|||||||
columns,
|
columns,
|
||||||
rows,
|
rows,
|
||||||
selected: ref([]),
|
selected: ref([]),
|
||||||
|
pagination:ref({
|
||||||
|
rowsPerPage:0
|
||||||
|
})
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
<style lang="scss">
|
||||||
|
.action-table{
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import { ref,onMounted,reactive } from 'vue'
|
|||||||
import { api } from 'boot/axios';
|
import { api } from 'boot/axios';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'appSelect',
|
name: 'AppSelect',
|
||||||
props: {
|
props: {
|
||||||
name: String,
|
name: String,
|
||||||
type: String
|
type: String
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
<script>
|
<script>
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'showDialog',
|
name: 'ShowDialog',
|
||||||
props: {
|
props: {
|
||||||
name:String,
|
name:String,
|
||||||
visible: Boolean,
|
visible: Boolean,
|
||||||
|
|||||||
85
frontend/src/components/left/AppSelector.vue
Normal file
85
frontend/src/components/left/AppSelector.vue
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
<template>
|
||||||
|
<div
|
||||||
|
class="row"
|
||||||
|
style="
|
||||||
|
border-radius: 2px;
|
||||||
|
box-shadow: rgba(255, 255, 255, 0.1) 0px 0px 0px 1px inset,
|
||||||
|
rgba(0, 0, 0, 0.3) 0px 0px 0px 1px;
|
||||||
|
">
|
||||||
|
<q-icon
|
||||||
|
class="self-center q-ma-sm"
|
||||||
|
name="widgets"
|
||||||
|
color="grey-9"
|
||||||
|
style="font-size: 2em"
|
||||||
|
/>
|
||||||
|
<div class="col-7 self-center ellipsis">
|
||||||
|
{{ selectedApp.name }}
|
||||||
|
</div>
|
||||||
|
<div class="self-center">
|
||||||
|
<q-btn
|
||||||
|
outline
|
||||||
|
dense
|
||||||
|
label="変 更"
|
||||||
|
padding="none sm"
|
||||||
|
color="primary"
|
||||||
|
@click="showAppDialog"
|
||||||
|
></q-btn>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<ShowDialog v-model:visible="showSelectApp" name="アプリ" @close="closeDg">
|
||||||
|
<AppSelect ref="appDg" name="アプリ" type="single"></AppSelect>
|
||||||
|
</ShowDialog>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import { defineComponent,ref } from 'vue';
|
||||||
|
import {AppInfo} from '../../types/ActionTypes'
|
||||||
|
import ShowDialog from '../../components/ShowDialog.vue';
|
||||||
|
import AppSelect from '../../components/AppSelect.vue';
|
||||||
|
import { useFlowEditorStore } from 'stores/flowEditor';
|
||||||
|
export default defineComponent({
|
||||||
|
name: 'AppSelector',
|
||||||
|
emits:[
|
||||||
|
"appSelected"
|
||||||
|
],
|
||||||
|
components:{
|
||||||
|
AppSelect,
|
||||||
|
ShowDialog
|
||||||
|
},
|
||||||
|
setup(props, context) {
|
||||||
|
|
||||||
|
const store = useFlowEditorStore();
|
||||||
|
const appDg = ref();
|
||||||
|
const showSelectApp=ref(false);
|
||||||
|
const selectedApp =ref<AppInfo>({
|
||||||
|
appId:"",
|
||||||
|
name:"",
|
||||||
|
});
|
||||||
|
const closeDg=(val :any)=>{
|
||||||
|
showSelectApp.value=false;
|
||||||
|
console.log("Dialog closed->",val);
|
||||||
|
if (val == 'OK') {
|
||||||
|
const data = appDg.value.selected[0];
|
||||||
|
console.log(data);
|
||||||
|
selectedApp.value={
|
||||||
|
appId:data.id ,
|
||||||
|
name:data.name
|
||||||
|
};
|
||||||
|
store.setApp(selectedApp.value);
|
||||||
|
store.setFlow();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const showAppDialog=()=>{
|
||||||
|
showSelectApp.value=true;
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
store,
|
||||||
|
selectedApp,
|
||||||
|
showSelectApp,
|
||||||
|
showAppDialog,
|
||||||
|
closeDg,
|
||||||
|
appDg
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
72
frontend/src/components/left/EventTree.vue
Normal file
72
frontend/src/components/left/EventTree.vue
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
<template>
|
||||||
|
<div class="q-pa-md q-gutter-sm">
|
||||||
|
<q-tree
|
||||||
|
:nodes="eventTree.screens"
|
||||||
|
node-key="label"
|
||||||
|
children-key="events"
|
||||||
|
no-connectors
|
||||||
|
v-model:expanded="expanded"
|
||||||
|
:dense="true"
|
||||||
|
>
|
||||||
|
<template v-slot:default-header="prop">
|
||||||
|
<div class="row col items-start no-wrap event-node" @click="onSelected(prop.node)">
|
||||||
|
<q-icon v-if="prop.node.eventId"
|
||||||
|
name="play_circle"
|
||||||
|
:color="prop.node.hasFlow?'green':'grey'"
|
||||||
|
size="16px" class="q-mr-sm">
|
||||||
|
</q-icon>
|
||||||
|
<div class="no-wrap" :class="selectedEvent && prop.node.eventId===selectedEvent.eventId?'selected-node':''">{{ prop.node.label }}</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</q-tree>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import { defineComponent, computed, ref } from 'vue';
|
||||||
|
import { kintoneEvents,KintoneEvent } from '../../types/KintoneEvents';
|
||||||
|
import { storeToRefs } from 'pinia';
|
||||||
|
import { useFlowEditorStore } from 'stores/flowEditor';
|
||||||
|
export default defineComponent({
|
||||||
|
name: 'EventTree',
|
||||||
|
setup(props, context) {
|
||||||
|
const store = useFlowEditorStore();
|
||||||
|
const eventTree=ref(kintoneEvents);
|
||||||
|
const selectedFlow = store.currentFlow;
|
||||||
|
|
||||||
|
const expanded=ref([
|
||||||
|
selectedFlow?.getRoot()?.title
|
||||||
|
]);
|
||||||
|
const selectedEvent = ref<KintoneEvent|null>(null);
|
||||||
|
const onSelected=(node:KintoneEvent)=>{
|
||||||
|
if(!node.eventId){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
selectedEvent.value=node;
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
eventTree,
|
||||||
|
expanded,
|
||||||
|
onSelected,
|
||||||
|
selectedEvent,
|
||||||
|
store
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
<style lang="scss">
|
||||||
|
.nowrap{
|
||||||
|
flex-wrap:nowarp;
|
||||||
|
text-wrap:nowarp;
|
||||||
|
}
|
||||||
|
.event-node{
|
||||||
|
cursor:pointer;
|
||||||
|
}
|
||||||
|
.selected-node{
|
||||||
|
color: $primary;
|
||||||
|
font-weight: bolder;
|
||||||
|
}
|
||||||
|
.event-node:hover{
|
||||||
|
background-color: $light-blue-1;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -5,7 +5,7 @@
|
|||||||
</template>
|
</template>
|
||||||
</q-input>
|
</q-input>
|
||||||
<show-dialog v-model:visible="show" name="フィールド一覧" @close="closeDg">
|
<show-dialog v-model:visible="show" name="フィールド一覧" @close="closeDg">
|
||||||
<field-select ref="appDg" name="フィールド" type="single" :appId="1"></field-select>
|
<field-select ref="appDg" name="フィールド" type="single" :appId="store.appInfo?.appId"></field-select>
|
||||||
</show-dialog>
|
</show-dialog>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
import { defineComponent, ref ,watchEffect} from 'vue';
|
import { defineComponent, ref ,watchEffect} from 'vue';
|
||||||
import ShowDialog from '../ShowDialog.vue';
|
import ShowDialog from '../ShowDialog.vue';
|
||||||
import FieldSelect from '../FieldSelect.vue';
|
import FieldSelect from '../FieldSelect.vue';
|
||||||
|
import { useFlowEditorStore } from 'stores/flowEditor';
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
name: 'FieldInput',
|
name: 'FieldInput',
|
||||||
components: {
|
components: {
|
||||||
@@ -35,6 +35,7 @@ export default defineComponent({
|
|||||||
const appDg = ref();
|
const appDg = ref();
|
||||||
const show = ref(false);
|
const show = ref(false);
|
||||||
const selectedField = ref(props.modelValue);
|
const selectedField = ref(props.modelValue);
|
||||||
|
const store = useFlowEditorStore();
|
||||||
|
|
||||||
const showDg = () => {
|
const showDg = () => {
|
||||||
show.value = true;
|
show.value = true;
|
||||||
@@ -51,6 +52,7 @@ export default defineComponent({
|
|||||||
});
|
});
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
store,
|
||||||
appDg,
|
appDg,
|
||||||
show,
|
show,
|
||||||
showDg,
|
showDg,
|
||||||
|
|||||||
21
frontend/src/control/auth.ts
Normal file
21
frontend/src/control/auth.ts
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
import { api } from 'boot/axios';
|
||||||
|
|
||||||
|
export class Auth
|
||||||
|
{
|
||||||
|
async login(user:string,pwd:string):Promise<boolean>
|
||||||
|
{
|
||||||
|
const params = new URLSearchParams();
|
||||||
|
params.append('username', user);
|
||||||
|
params.append('password', pwd);
|
||||||
|
try{
|
||||||
|
const result = await api.post(`http://127.0.0.1:8000/api/token`,params);
|
||||||
|
console.info(result);
|
||||||
|
localStorage.setItem('Token', result.data.access_token);
|
||||||
|
return true;
|
||||||
|
}catch(e)
|
||||||
|
{
|
||||||
|
console.info(e);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
37
frontend/src/control/flowctrl.ts
Normal file
37
frontend/src/control/flowctrl.ts
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
import { api } from 'boot/axios';
|
||||||
|
import { ActionFlow } from 'src/types/ActionTypes';
|
||||||
|
|
||||||
|
export class FlowCtrl
|
||||||
|
{
|
||||||
|
|
||||||
|
async getFlows(appId:string):Promise<ActionFlow[]>
|
||||||
|
{
|
||||||
|
const result = await api.get(`http://127.0.0.1:8000/api/flows/${appId}`);
|
||||||
|
//console.info(result.data);
|
||||||
|
if(!result.data || !Array.isArray(result.data)){
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
const flows:ActionFlow[]=[];
|
||||||
|
for(const flow of result.data){
|
||||||
|
flows.push(ActionFlow.fromJSON(flow.content));
|
||||||
|
}
|
||||||
|
return flows;
|
||||||
|
}
|
||||||
|
|
||||||
|
async SaveFlow(jsonData:any):Promise<boolean>
|
||||||
|
{
|
||||||
|
const result = await api.post('http://127.0.0.1:8000/api/flow',jsonData);
|
||||||
|
console.info(result.data)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
async UpdateFlow(jsonData:any):Promise<boolean>
|
||||||
|
{
|
||||||
|
const result = await api.put('http://127.0.0.1:8000/api/flow/' + jsonData.flowid,jsonData);
|
||||||
|
console.info(result.data)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@@ -14,7 +14,9 @@
|
|||||||
Kintone App Builder
|
Kintone App Builder
|
||||||
<q-badge align="top" outline>V{{ env.version }}</q-badge>
|
<q-badge align="top" outline>V{{ env.version }}</q-badge>
|
||||||
</q-toolbar-title>
|
</q-toolbar-title>
|
||||||
|
<q-btn flat round dense icon="logout" @click="authStore.logout()"/>
|
||||||
</q-toolbar>
|
</q-toolbar>
|
||||||
|
|
||||||
</q-header>
|
</q-header>
|
||||||
|
|
||||||
<q-drawer
|
<q-drawer
|
||||||
@@ -46,6 +48,9 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref } from 'vue';
|
import { ref } from 'vue';
|
||||||
import EssentialLink, { EssentialLinkProps } from 'components/EssentialLink.vue';
|
import EssentialLink, { EssentialLinkProps } from 'components/EssentialLink.vue';
|
||||||
|
import { useAuthStore } from 'stores/useAuthStore';
|
||||||
|
|
||||||
|
const authStore = useAuthStore();
|
||||||
|
|
||||||
const essentialLinks: EssentialLinkProps[] = [
|
const essentialLinks: EssentialLinkProps[] = [
|
||||||
{
|
{
|
||||||
@@ -59,7 +64,7 @@ const essentialLinks: EssentialLinkProps[] = [
|
|||||||
title: 'フローエディター',
|
title: 'フローエディター',
|
||||||
caption: 'flowChart',
|
caption: 'flowChart',
|
||||||
icon: 'account_tree',
|
icon: 'account_tree',
|
||||||
link: '/#/flowChart',
|
link: '/#/flowEditor2',
|
||||||
target:'_self'
|
target:'_self'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
160
frontend/src/pages/FlowChart.vue
Normal file
160
frontend/src/pages/FlowChart.vue
Normal file
@@ -0,0 +1,160 @@
|
|||||||
|
<template>
|
||||||
|
<div class="q-pa-md q-gutter-sm event-tree">
|
||||||
|
<q-drawer
|
||||||
|
side="left"
|
||||||
|
overlay
|
||||||
|
bordered
|
||||||
|
v-model="drawerLeft"
|
||||||
|
:show-if-above="false"
|
||||||
|
elevated
|
||||||
|
>
|
||||||
|
<!-- <q-card class="column full-height" style="width: 300px">
|
||||||
|
<q-card-section> -->
|
||||||
|
|
||||||
|
<div class="flex-center fixd-top" >
|
||||||
|
<AppSelector />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- </q-card-section> -->
|
||||||
|
<q-separator />
|
||||||
|
<!-- <q-card-section> -->
|
||||||
|
<div class="flex-center">
|
||||||
|
<EventTree />
|
||||||
|
</div>
|
||||||
|
<!-- </q-card-section> -->
|
||||||
|
<!-- </q-card> -->
|
||||||
|
</q-drawer>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<q-page>
|
||||||
|
<div class="q-pa-md q-gutter-sm">
|
||||||
|
<div class="flowchart" v-if="store.currentFlow">
|
||||||
|
<node-item v-for="(node,) in store.currentFlow.actionNodes" :key="node.id"
|
||||||
|
:isSelected="node===state.activeNode" :actionNode="node"
|
||||||
|
@addNode="addNode"
|
||||||
|
@nodeSelected="onNodeSelected"
|
||||||
|
@nodeEdit="onNodeEdit"
|
||||||
|
@deleteNode="onDeleteNode"
|
||||||
|
@deleteAllNextNodes="onDeleteAllNextNodes"
|
||||||
|
></node-item>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</q-page>
|
||||||
|
<PropertyPanel :actionNode="state.activeNode" v-model:drawerRight="drawerRight"></PropertyPanel>
|
||||||
|
<ShowDialog v-model:visible="showAddAction" name="アクション" @close="closeDg">
|
||||||
|
<action-select ref="appDg" name="model" type="single"></action-select>
|
||||||
|
</ShowDialog>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import {ref,reactive,computed,onMounted} from 'vue';
|
||||||
|
import {IActionNode, ActionNode, IActionFlow, ActionFlow,RootAction, IActionProperty } from 'src/types/ActionTypes';
|
||||||
|
import { storeToRefs } from 'pinia';
|
||||||
|
import { useFlowEditorStore } from 'stores/flowEditor';
|
||||||
|
import NodeItem from 'src/components/main/NodeItem.vue';
|
||||||
|
import ShowDialog from 'components/ShowDialog.vue';
|
||||||
|
import ActionSelect from 'components/ActionSelect.vue';
|
||||||
|
import PropertyPanel from 'components/right/PropertyPanel.vue';
|
||||||
|
import AppSelector from 'components/left/AppSelector.vue';
|
||||||
|
import EventTree from 'components/left/EventTree.vue';
|
||||||
|
import {FlowCtrl } from '../control/flowctrl';
|
||||||
|
const drawerLeft = ref(true);
|
||||||
|
|
||||||
|
const store = useFlowEditorStore();
|
||||||
|
// ref関数を使ってtemplateとバインド
|
||||||
|
const state=reactive({
|
||||||
|
activeNode:{
|
||||||
|
id:""
|
||||||
|
},
|
||||||
|
})
|
||||||
|
const appDg = ref();
|
||||||
|
const prevNodeIfo=ref({
|
||||||
|
prevNode:{} as IActionNode,
|
||||||
|
inputPoint:""
|
||||||
|
});
|
||||||
|
const refFlow = ref<ActionFlow|null>(null);
|
||||||
|
const showAddAction=ref(false);
|
||||||
|
const drawerRight=ref(false);
|
||||||
|
const model=ref("");
|
||||||
|
const addActionNode=(action:IActionNode)=>{
|
||||||
|
// refFlow.value?.actionNodes.push(action);
|
||||||
|
store.currentFlow?.actionNodes.push(action);
|
||||||
|
}
|
||||||
|
|
||||||
|
const addNode=(node:IActionNode,inputPoint:string)=>{
|
||||||
|
showAddAction.value=true;
|
||||||
|
prevNodeIfo.value.prevNode=node;
|
||||||
|
prevNodeIfo.value.inputPoint=inputPoint;
|
||||||
|
}
|
||||||
|
|
||||||
|
const onNodeSelected=(node:IActionNode)=>{
|
||||||
|
//右パネルが開いている場合、自動閉じる
|
||||||
|
if(drawerRight.value && state.activeNode.id!==node.id){
|
||||||
|
drawerRight.value=false;
|
||||||
|
}
|
||||||
|
state.activeNode = node;
|
||||||
|
}
|
||||||
|
|
||||||
|
const onNodeEdit=(node:IActionNode)=>{
|
||||||
|
state.activeNode = node;
|
||||||
|
drawerRight.value=true;
|
||||||
|
}
|
||||||
|
|
||||||
|
const onDeleteNode=(node:IActionNode)=>{
|
||||||
|
if(!store.currentFlow) return;
|
||||||
|
store.currentFlow?.removeNode(node);
|
||||||
|
}
|
||||||
|
|
||||||
|
const onDeleteAllNextNodes=(node:IActionNode)=>{
|
||||||
|
if(!store.currentFlow) return;
|
||||||
|
store.currentFlow?.removeAllNext(node.id);
|
||||||
|
}
|
||||||
|
const closeDg=(val :any)=>{
|
||||||
|
console.log("Dialog closed->",val);
|
||||||
|
if (val == 'OK') {
|
||||||
|
const data = appDg.value.selected[0];
|
||||||
|
const actionProps=JSON.parse(data.content);
|
||||||
|
const action = new ActionNode(data.name,data.desc,"",[],actionProps);
|
||||||
|
store.currentFlow?.addNode(action, prevNodeIfo.value.prevNode,prevNodeIfo.value.inputPoint);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const fetchData= async ()=>{
|
||||||
|
const flowCtrl = new FlowCtrl();
|
||||||
|
if(store.appInfo===undefined) return;
|
||||||
|
const actionFlows = await flowCtrl.getFlows(store.appInfo?.appId);
|
||||||
|
if(actionFlows && actionFlows.length>0){
|
||||||
|
store.setFlows(actionFlows);
|
||||||
|
}
|
||||||
|
if(actionFlows && actionFlows.length==1){
|
||||||
|
store.selectFlow(actionFlows[0]);
|
||||||
|
}
|
||||||
|
refFlow.value=actionFlows[0];
|
||||||
|
const root =refFlow.value.getRoot();
|
||||||
|
if(root){
|
||||||
|
state.activeNode=root;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
fetchData();
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
.flowchart{
|
||||||
|
padding-top: 10px;
|
||||||
|
}
|
||||||
|
.flow-toolbar{
|
||||||
|
opacity: 50%;
|
||||||
|
}
|
||||||
|
.flow-container{
|
||||||
|
height: 91.5dvb;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
.event-tree .q-drawer {
|
||||||
|
top:50px;
|
||||||
|
z-index: 999;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<q-page>
|
<q-page>
|
||||||
|
|
||||||
<div class="flowchart">
|
<div class="flowchart">
|
||||||
<node-item v-for="(node,) in refFlow.actionNodes" :key="node.id"
|
<node-item v-for="(node,) in refFlow.actionNodes" :key="node.id"
|
||||||
:isSelected="node===state.activeNode" :actionNode="node"
|
:isSelected="node===state.activeNode" :actionNode="node"
|
||||||
@@ -46,11 +47,10 @@ const saibanProps:IActionProperty[]=[{
|
|||||||
}
|
}
|
||||||
}];
|
}];
|
||||||
|
|
||||||
|
|
||||||
actionFlow.addNode(new ActionNode('自動採番','文書番号を自動採番する','',[],saibanProps));
|
actionFlow.addNode(new ActionNode('自動採番','文書番号を自動採番する','',[],saibanProps));
|
||||||
actionFlow.addNode(new ActionNode('入力データ取得','電話番号を取得する',''));
|
actionFlow.addNode(new ActionNode('入力データ取得','電話番号を取得する',''));
|
||||||
const branchNode = actionFlow.addNode(new ActionNode('条件分岐','電話番号入力形式チャック','',['はい','いいえ'] ));
|
const branchNode = actionFlow.addNode(new ActionNode('条件分岐','電話番号入力形式チャック','',['はい','いいえ'] ));
|
||||||
actionFlow.addNode(new ActionNode('入力データ取得','住所を取得する',''),branchNode,'はい');
|
// actionFlow.addNode(new ActionNode('入力データ取得','住所を取得する',''),branchNode,'はい');
|
||||||
actionFlow.addNode(new ActionNode('エラー表示','エラー表示して保存しない',''),branchNode,'いいえ' );
|
actionFlow.addNode(new ActionNode('エラー表示','エラー表示して保存しない',''),branchNode,'いいえ' );
|
||||||
|
|
||||||
// ref関数を使ってtemplateとバインド
|
// ref関数を使ってtemplateとバインド
|
||||||
|
|||||||
117
frontend/src/pages/FlowEditorPage2.vue
Normal file
117
frontend/src/pages/FlowEditorPage2.vue
Normal file
@@ -0,0 +1,117 @@
|
|||||||
|
<template>
|
||||||
|
<div >
|
||||||
|
<div class="q-ma-md">
|
||||||
|
<div class="q-gutter-xs row items-start">
|
||||||
|
<q-btn
|
||||||
|
size="md"
|
||||||
|
@click="drawerLeft = !drawerLeft"
|
||||||
|
icon="keyboard_double_arrow_right"
|
||||||
|
round
|
||||||
|
/>
|
||||||
|
|
||||||
|
<q-space />
|
||||||
|
<q-btn
|
||||||
|
color="white"
|
||||||
|
size="sm"
|
||||||
|
text-color="black"
|
||||||
|
label="キャンセル"
|
||||||
|
dense
|
||||||
|
/>
|
||||||
|
|
||||||
|
<q-btn
|
||||||
|
class="q-px-sm"
|
||||||
|
color="primary"
|
||||||
|
size="sm"
|
||||||
|
label="保存する"
|
||||||
|
@click="save()"
|
||||||
|
dense
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<q-layout
|
||||||
|
container
|
||||||
|
class="flow-container shadow-2 rounded-borders"
|
||||||
|
>
|
||||||
|
<q-drawer side="left" overlay bordered v-model="drawerLeft">
|
||||||
|
<div class="q-pa-sm fixed-right">
|
||||||
|
<q-btn
|
||||||
|
flat
|
||||||
|
round
|
||||||
|
color="primary"
|
||||||
|
icon="close"
|
||||||
|
@click="drawerLeft = !drawerLeft"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div class="q-mt-lg q-pa-sm">
|
||||||
|
<q-card-section>
|
||||||
|
<div class="flex-center">
|
||||||
|
<ItemSelector />
|
||||||
|
</div>
|
||||||
|
</q-card-section>
|
||||||
|
</div>
|
||||||
|
<q-separator />
|
||||||
|
<div class="q-mt-md q-pa-sm">
|
||||||
|
<q-card-section>
|
||||||
|
<ControlPanel />
|
||||||
|
</q-card-section>
|
||||||
|
</div>
|
||||||
|
<q-separator />
|
||||||
|
<q-card-actions align="right">
|
||||||
|
<div class="q-pa-sm">
|
||||||
|
<q-btn
|
||||||
|
flat
|
||||||
|
color="primary"
|
||||||
|
size="md"
|
||||||
|
@click="drawerLeft = !drawerLeft"
|
||||||
|
label="ジャンプ"
|
||||||
|
dense
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</q-card-actions>
|
||||||
|
</q-drawer>
|
||||||
|
|
||||||
|
<FlowChartTest />
|
||||||
|
</q-layout>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import FlowChartTest from 'pages/FlowChartTest.vue';
|
||||||
|
import ControlPanel from 'components/flowEditor/left/ControlPanelC.vue';
|
||||||
|
import ItemSelector from 'components/flowEditor/left/ItemSelector.vue';
|
||||||
|
import { ref } from 'vue';
|
||||||
|
import { storeToRefs } from 'pinia';
|
||||||
|
import { useFlowEditorStore } from 'stores/flowEditor';
|
||||||
|
import { FlowCtrl } from '../control/flowctrl'
|
||||||
|
|
||||||
|
const flowCtrl = new FlowCtrl();
|
||||||
|
const actName = ref('勤怠管理 - 4');
|
||||||
|
|
||||||
|
const drawerLeft = ref(false);
|
||||||
|
const store = useFlowEditorStore();
|
||||||
|
const { flowNames1 } = storeToRefs(store);
|
||||||
|
let isNew = ref(true);
|
||||||
|
|
||||||
|
const save = () =>{
|
||||||
|
|
||||||
|
if(isNew.value)
|
||||||
|
{
|
||||||
|
flowCtrl.SaveFlow({appid:'1',flowid:'flow123',eventid:'event123',name:'test',content:'[]'});
|
||||||
|
isNew.value = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
flowCtrl.UpdateFlow({appid:'1',flowid:'flow123',eventid:'event123',name:'test',content:'[{"a":"b"}]'});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
.flow-toolbar{
|
||||||
|
opacity: 50%;
|
||||||
|
}
|
||||||
|
.flow-container{
|
||||||
|
height: calc(91.5dvb - 50px);
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
100
frontend/src/pages/LoginPage.vue
Normal file
100
frontend/src/pages/LoginPage.vue
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
<template>
|
||||||
|
<q-layout view="lHh Lpr fff">
|
||||||
|
<q-page-container>
|
||||||
|
<q-page class="window-height window-width row justify-center items-center">
|
||||||
|
<div class="column q-pa-lg">
|
||||||
|
<div class="row">
|
||||||
|
<q-card square class="shadow-24" style="width:400px;height:540px;">
|
||||||
|
<q-card-section class="bg-primary">
|
||||||
|
<h4 class="text-h5 text-white q-my-md">{{ title}}</h4>
|
||||||
|
|
||||||
|
</q-card-section>
|
||||||
|
<q-card-section>
|
||||||
|
<q-form class="q-px-sm q-pt-xl" ref="loginForm">
|
||||||
|
<q-input square clearable v-model="email" type="email" lazy-rules
|
||||||
|
:rules="[required,isEmail,short]" label="メール">
|
||||||
|
<template v-slot:prepend>
|
||||||
|
<q-icon name="email" />
|
||||||
|
</template>
|
||||||
|
</q-input>
|
||||||
|
<q-input square clearable v-model="password" :type="passwordFieldType" lazy-rules
|
||||||
|
:rules="[required, short]" label="パスワード">
|
||||||
|
|
||||||
|
<template v-slot:prepend>
|
||||||
|
<q-icon name="lock" />
|
||||||
|
</template>
|
||||||
|
<template v-slot:append>
|
||||||
|
<q-icon :name="visibilityIcon" @click="switchVisibility" class="cursor-pointer" />
|
||||||
|
</template>
|
||||||
|
</q-input>
|
||||||
|
</q-form>
|
||||||
|
</q-card-section>
|
||||||
|
|
||||||
|
<q-card-actions class="q-px-lg">
|
||||||
|
<q-btn unelevated size="lg" color="secondary" @click="submit" class="full-width text-white"
|
||||||
|
:label="btnLabel" />
|
||||||
|
</q-card-actions>
|
||||||
|
|
||||||
|
</q-card>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</q-page>
|
||||||
|
</q-page-container>
|
||||||
|
</q-layout>>
|
||||||
|
</template>
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { useQuasar } from 'quasar'
|
||||||
|
// import { useRouter } from 'vue-router';
|
||||||
|
import { ref } from 'vue';
|
||||||
|
// import { Auth } from '../control/auth'
|
||||||
|
import { useAuthStore } from 'stores/useAuthStore';
|
||||||
|
const authStore = useAuthStore();
|
||||||
|
const $q = useQuasar()
|
||||||
|
const loginForm = ref(null);
|
||||||
|
let title = ref('ログイン');
|
||||||
|
let email = ref('');
|
||||||
|
let password = ref('');
|
||||||
|
let visibility = ref(false);
|
||||||
|
let passwordFieldType = ref('password');
|
||||||
|
let visibilityIcon = ref('visibility');
|
||||||
|
let btnLabel = ref('ログイン');
|
||||||
|
const required = (val:string) => {
|
||||||
|
return (val && val.length > 0 || '必須項目')
|
||||||
|
}
|
||||||
|
const isEmail = (val:string) => {
|
||||||
|
const emailPattern = /^(?=[a-zA-Z0-9@._%+-]{6,254}$)[a-zA-Z0-9._%+-]{1,64}@(?:[a-zA-Z0-9-]{1,63}\.){1,8}[a-zA-Z]{2,63}$/
|
||||||
|
return (emailPattern.test(val) || '無効なメールアドレス')
|
||||||
|
}
|
||||||
|
const short = (val:string) => {
|
||||||
|
return (val && val.length > 3 || '値が短く過ぎる')
|
||||||
|
}
|
||||||
|
const switchVisibility = () => {
|
||||||
|
visibility.value = !visibility.value
|
||||||
|
passwordFieldType.value = visibility.value ? 'text' : 'password'
|
||||||
|
visibilityIcon.value = visibility.value ? 'visibility_off' : 'visibility'
|
||||||
|
}
|
||||||
|
const submit = () =>{
|
||||||
|
authStore.login(email.value,password.value).then((result)=>{
|
||||||
|
if(result)
|
||||||
|
{
|
||||||
|
$q.notify({
|
||||||
|
icon: 'done',
|
||||||
|
color: 'positive',
|
||||||
|
message: 'ログイン成功'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$q.notify({
|
||||||
|
icon: 'error',
|
||||||
|
color: 'negative',
|
||||||
|
message: 'ログイン失敗'
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
354
frontend/src/pages/UserDomain.vue
Normal file
354
frontend/src/pages/UserDomain.vue
Normal file
@@ -0,0 +1,354 @@
|
|||||||
|
<!-- <template>
|
||||||
|
<div class="q-pa-md" style="max-width: 400px">
|
||||||
|
|
||||||
|
<q-form
|
||||||
|
@submit="onSubmit"
|
||||||
|
@reset="onReset"
|
||||||
|
class="q-gutter-md"
|
||||||
|
>
|
||||||
|
<q-input
|
||||||
|
filled
|
||||||
|
v-model="name"
|
||||||
|
label="Your name *"
|
||||||
|
hint="Kintone envirment name"
|
||||||
|
lazy-rules
|
||||||
|
:rules="[ val => val && val.length > 0 || 'Please type something']"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<q-input
|
||||||
|
filled type="url"
|
||||||
|
v-model="url"
|
||||||
|
label="Kintone url"
|
||||||
|
hint="Kintone domain address"
|
||||||
|
lazy-rules
|
||||||
|
:rules="[ val => val && val.length > 0,isDomain || 'Please type something']"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<q-input
|
||||||
|
filled
|
||||||
|
v-model="username"
|
||||||
|
label="Login user "
|
||||||
|
hint="Kintone user name"
|
||||||
|
lazy-rules
|
||||||
|
:rules="[ val => val && val.length > 0 || 'Please type something']"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<q-input v-model="password" filled :type="isPwd ? 'password' : 'text'" hint="Password with toggle" label="User password">
|
||||||
|
<template v-slot:append>
|
||||||
|
<q-icon
|
||||||
|
:name="isPwd ? 'visibility_off' : 'visibility'"
|
||||||
|
class="cursor-pointer"
|
||||||
|
@click="isPwd = !isPwd"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
</q-input>
|
||||||
|
|
||||||
|
<q-toggle v-model="accept" label="Active Domain" />
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<q-btn label="Submit" type="submit" color="primary"/>
|
||||||
|
<q-btn label="Reset" type="reset" color="primary" flat class="q-ml-sm" />
|
||||||
|
</div>
|
||||||
|
</q-form>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import { useQuasar } from 'quasar'
|
||||||
|
import { ref } from 'vue'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
setup () {
|
||||||
|
const $q = useQuasar()
|
||||||
|
|
||||||
|
const name = ref(null)
|
||||||
|
const age = ref(null)
|
||||||
|
const accept = ref(false)
|
||||||
|
const isPwd =ref(true)
|
||||||
|
|
||||||
|
return {
|
||||||
|
name,
|
||||||
|
age,
|
||||||
|
accept,
|
||||||
|
isPwd,
|
||||||
|
isDomain(val) {
|
||||||
|
const domainPattern = /^https?\/\/:([a-zA-Z] +\.){1}([a-zA-Z]+)\.([a-zA-Z]+)$/;
|
||||||
|
return (domainPattern.test(val) || '無効なURL')
|
||||||
|
},
|
||||||
|
|
||||||
|
onSubmit () {
|
||||||
|
if (accept.value !== true) {
|
||||||
|
$q.notify({
|
||||||
|
color: 'red-5',
|
||||||
|
textColor: 'white',
|
||||||
|
icon: 'warning',
|
||||||
|
message: 'You need to accept the license and terms first'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$q.notify({
|
||||||
|
color: 'green-4',
|
||||||
|
textColor: 'white',
|
||||||
|
icon: 'cloud_done',
|
||||||
|
message: 'Submitted'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
onReset () {
|
||||||
|
name.value = null
|
||||||
|
age.value = null
|
||||||
|
accept.value = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script> -->
|
||||||
|
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div class="q-pa-md">
|
||||||
|
<q-table grid grid-header title="Domain" selection="single" :rows="rows" :columns="columns" v-model:selected="selected" row-key="name" :filter="filter" hide-header>
|
||||||
|
<template v-slot:top>
|
||||||
|
<div class="q-pa-md q-gutter-sm">
|
||||||
|
<q-btn color="primary" size="sm" label=" 新規 " @click="newDomain()" dense />
|
||||||
|
</div>
|
||||||
|
<q-space />
|
||||||
|
<q-input borderless dense debounce="300" v-model="filter" placeholder="Search">
|
||||||
|
<template v-slot:append>
|
||||||
|
<q-icon name="search" />
|
||||||
|
</template>
|
||||||
|
</q-input>
|
||||||
|
</template>
|
||||||
|
<template v-slot:item="props">
|
||||||
|
<div class="q-pa-xs col-xs-12 col-sm-6 col-md-4">
|
||||||
|
<q-card>
|
||||||
|
<q-card-section>
|
||||||
|
<div class="q-table__grid-item-row">
|
||||||
|
<div class="q-table__grid-item-title">Name</div>
|
||||||
|
<div class="q-table__grid-item-value">{{ props.row.name }}</div>
|
||||||
|
</div>
|
||||||
|
<div class="q-table__grid-item-row">
|
||||||
|
<div class="q-table__grid-item-title">Domain</div>
|
||||||
|
<div class="q-table__grid-item-value">{{ props.row.url }}</div>
|
||||||
|
</div>
|
||||||
|
<div class="q-table__grid-item-row">
|
||||||
|
<div class="q-table__grid-item-title">Account</div>
|
||||||
|
<div class="q-table__grid-item-value">{{ props.row.kintoneuser }}</div>
|
||||||
|
</div>
|
||||||
|
</q-card-section>
|
||||||
|
<q-separator />
|
||||||
|
<q-card-actions align="right">
|
||||||
|
<q-btn flat @click = "editDomain(props.row)">編集</q-btn>
|
||||||
|
<q-btn flat @click = "deleteConfirm(props.row)">削除</q-btn>
|
||||||
|
</q-card-actions>
|
||||||
|
</q-card>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</q-table>
|
||||||
|
|
||||||
|
<q-dialog :model-value="show" persistent>
|
||||||
|
<q-card style="min-width: 400px">
|
||||||
|
<q-card-section>
|
||||||
|
<div class="text-h6">Kintone Account</div>
|
||||||
|
</q-card-section>
|
||||||
|
|
||||||
|
<q-card-section class="q-pt-none">
|
||||||
|
<q-form class="q-gutter-md">
|
||||||
|
<q-input filled v-model="name" label="Your name *" hint="Kintone envirment name" lazy-rules
|
||||||
|
:rules="[val => val && val.length > 0 || 'Please type something']" />
|
||||||
|
|
||||||
|
<q-input filled type="url" v-model="url" label="Kintone url" hint="Kintone domain address" lazy-rules
|
||||||
|
:rules="[val => val && val.length > 0, isDomain || 'Please type something']" />
|
||||||
|
|
||||||
|
<q-input filled v-model="kintoneuser" label="Login user " hint="Kintone user name" lazy-rules
|
||||||
|
:rules="[val => val && val.length > 0 || 'Please type something']" />
|
||||||
|
|
||||||
|
<q-input v-model="kintonepwd" filled :type="isPwd ? 'password' : 'text'" hint="Password with toggle"
|
||||||
|
label="User password">
|
||||||
|
<template v-slot:append>
|
||||||
|
<q-icon :name="isPwd ? 'visibility_off' : 'visibility'" class="cursor-pointer" @click="isPwd = !isPwd" />
|
||||||
|
</template>
|
||||||
|
</q-input>
|
||||||
|
|
||||||
|
<q-toggle v-model="active" label="Active Domain" />
|
||||||
|
</q-form>
|
||||||
|
</q-card-section>
|
||||||
|
<q-card-actions align="right" class="text-primary">
|
||||||
|
<q-btn label="Save" type="submit" color="primary" @click="onSubmit"/>
|
||||||
|
<q-btn label="Cancel" type="cancel" color="primary" flat class="q-ml-sm" @click="closeDg()"/>
|
||||||
|
</q-card-actions>
|
||||||
|
</q-card>
|
||||||
|
|
||||||
|
</q-dialog>
|
||||||
|
|
||||||
|
<q-dialog v-model="confirm" persistent>
|
||||||
|
<q-card>
|
||||||
|
<q-card-section class="row items-center">
|
||||||
|
<q-avatar icon="confirm" color="primary" text-color="white" />
|
||||||
|
<span class="q-ml-sm">削除してもよろしいですか?</span>
|
||||||
|
</q-card-section>
|
||||||
|
|
||||||
|
<q-card-actions align="right">
|
||||||
|
<q-btn flat label="Cancel" color="primary" v-close-popup />
|
||||||
|
<q-btn flat label="OK" color="primary" v-close-popup @click = "deleteDomain()"/>
|
||||||
|
</q-card-actions>
|
||||||
|
</q-card>
|
||||||
|
</q-dialog>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { useQuasar } from 'quasar'
|
||||||
|
import { ref, onMounted, reactive } from 'vue'
|
||||||
|
import { api } from 'boot/axios';
|
||||||
|
|
||||||
|
|
||||||
|
const $q = useQuasar()
|
||||||
|
|
||||||
|
const selected = ref([])
|
||||||
|
const name = ref('')
|
||||||
|
const active = ref(false)
|
||||||
|
const isPwd =ref(true)
|
||||||
|
const url =ref('')
|
||||||
|
const kintoneuser =ref('')
|
||||||
|
const kintonepwd =ref('')
|
||||||
|
|
||||||
|
const show = ref(false);
|
||||||
|
const confirm = ref(false)
|
||||||
|
|
||||||
|
let editId = ref(0);
|
||||||
|
|
||||||
|
const columns = [
|
||||||
|
{ name: 'id'},
|
||||||
|
{
|
||||||
|
name: 'name',
|
||||||
|
required: true,
|
||||||
|
label: 'Name',
|
||||||
|
align: 'left',
|
||||||
|
field: row => row.name,
|
||||||
|
sortable: true
|
||||||
|
},
|
||||||
|
{ name: 'url', align: 'center', label: 'Domain', field: 'url', sortable: true },
|
||||||
|
{ name: 'kintoneuser', label: 'User', field: 'kintoneuser', sortable: true },
|
||||||
|
{ name: 'kintonepwd' }
|
||||||
|
]
|
||||||
|
|
||||||
|
const rows = reactive([])
|
||||||
|
|
||||||
|
const newDomain = () => {
|
||||||
|
editId.value = 0;
|
||||||
|
show.value = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
const editDomain = (row:object) => {
|
||||||
|
editId.value = row.id;
|
||||||
|
name.value = row.name;
|
||||||
|
url.value = row.url;
|
||||||
|
kintoneuser.value = row.kintoneuser;
|
||||||
|
kintonepwd.value = row.kintonepwd;
|
||||||
|
isPwd.value = true;
|
||||||
|
active.value = false;
|
||||||
|
show.value = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
const deleteConfirm = (row:object) => {
|
||||||
|
confirm.value = true;
|
||||||
|
editId.value = row.id;
|
||||||
|
};
|
||||||
|
|
||||||
|
const deleteDomain = () => {
|
||||||
|
api.delete(`http://127.0.0.1:8000/api/domain/1/`+ editId.value).then(() =>{
|
||||||
|
getDomain();
|
||||||
|
})
|
||||||
|
editId.value = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
const closeDg = () => {
|
||||||
|
show.value = false;
|
||||||
|
onReset();
|
||||||
|
};
|
||||||
|
const getDomain = () => {
|
||||||
|
api.get(`http://127.0.0.1:8000/api/domain/1`).then(res => {
|
||||||
|
rows.length = 0;
|
||||||
|
res.data.forEach((item) => {
|
||||||
|
rows.push({ id:item.id,name: item.name, url: item.url, kintoneuser: item.kintoneuser, kintonepwd: item.kintonepwd });
|
||||||
|
}
|
||||||
|
)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
onMounted(() => {
|
||||||
|
getDomain();
|
||||||
|
})
|
||||||
|
|
||||||
|
const isDomain = (val) =>{
|
||||||
|
// const domainPattern = /^https\/\/:([a-zA-Z] +\.){1}([a-zA-Z]+)\.([a-zA-Z]+)$/;
|
||||||
|
// return (domainPattern.test(val) || '無効なURL')
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
|
||||||
|
const onSubmit = () =>{
|
||||||
|
if(editId.value !== 0)
|
||||||
|
{
|
||||||
|
api.put(`http://127.0.0.1:8000/api/domain`,{
|
||||||
|
'id': editId.value,
|
||||||
|
'userid': 1,
|
||||||
|
'name': name.value,
|
||||||
|
'url': url.value,
|
||||||
|
'kintoneuser': kintoneuser.value,
|
||||||
|
'kintonepwd': kintonepwd.value,
|
||||||
|
'active': active.value
|
||||||
|
}).then(() =>{
|
||||||
|
getDomain();
|
||||||
|
closeDg();
|
||||||
|
onReset();
|
||||||
|
})
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
api.post(`http://127.0.0.1:8000/api/domain`,{
|
||||||
|
'id': 0,
|
||||||
|
'userid': 1,
|
||||||
|
'name': name.value,
|
||||||
|
'url': url.value,
|
||||||
|
'kintoneuser': kintoneuser.value,
|
||||||
|
'kintonepwd': kintonepwd.value,
|
||||||
|
'active': active.value
|
||||||
|
}).then(() =>{
|
||||||
|
getDomain();
|
||||||
|
closeDg();
|
||||||
|
onReset();
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// if (accept.value !== true) {
|
||||||
|
// $q.notify({
|
||||||
|
// color: 'red-5',
|
||||||
|
// textColor: 'white',
|
||||||
|
// icon: 'warning',
|
||||||
|
// message: 'You need to accept the license and terms first'
|
||||||
|
// })
|
||||||
|
// }
|
||||||
|
// else {
|
||||||
|
// $q.notify({
|
||||||
|
// color: 'green-4',
|
||||||
|
// textColor: 'white',
|
||||||
|
// icon: 'cloud_done',
|
||||||
|
// message: 'Submitted'
|
||||||
|
// })
|
||||||
|
// }
|
||||||
|
};
|
||||||
|
|
||||||
|
const onReset = () => {
|
||||||
|
name.value = '';
|
||||||
|
url.value = '';
|
||||||
|
kintoneuser.value = '';
|
||||||
|
kintonepwd.value ='';
|
||||||
|
isPwd.value = true;
|
||||||
|
active.value = false;
|
||||||
|
editId.value = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -7,7 +7,7 @@ import {
|
|||||||
} from 'vue-router';
|
} from 'vue-router';
|
||||||
|
|
||||||
import routes from './routes';
|
import routes from './routes';
|
||||||
|
import { useAuthStore } from 'stores/useAuthStore';
|
||||||
/*
|
/*
|
||||||
* If not building with SSR mode, you can
|
* If not building with SSR mode, you can
|
||||||
* directly export the Router instantiation;
|
* directly export the Router instantiation;
|
||||||
@@ -17,20 +17,57 @@ import routes from './routes';
|
|||||||
* with the Router instance.
|
* with the Router instance.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// export default route(function (/* { store, ssrContext } */) {
|
||||||
|
// const createHistory = process.env.SERVER
|
||||||
|
// ? createMemoryHistory
|
||||||
|
// : (process.env.VUE_ROUTER_MODE === 'history' ? createWebHistory : createWebHashHistory);
|
||||||
|
|
||||||
|
// const Router = createRouter({
|
||||||
|
// scrollBehavior: () => ({ left: 0, top: 0 }),
|
||||||
|
// routes,
|
||||||
|
|
||||||
|
// // Leave this as is and make changes in quasar.conf.js instead!
|
||||||
|
// // quasar.conf.js -> build -> vueRouterMode
|
||||||
|
// // quasar.conf.js -> build -> publicPath
|
||||||
|
// history: createHistory(process.env.VUE_ROUTER_BASE),
|
||||||
|
// });
|
||||||
|
|
||||||
|
// return Router;
|
||||||
|
// });
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
const createHistory = process.env.SERVER
|
||||||
|
? createMemoryHistory
|
||||||
|
: (process.env.VUE_ROUTER_MODE === 'history' ? createWebHistory : createWebHashHistory);
|
||||||
|
|
||||||
|
export const Router = createRouter({
|
||||||
|
scrollBehavior: () => ({ left: 0, top: 0 }),
|
||||||
|
routes,
|
||||||
|
|
||||||
|
// Leave this as is and make changes in quasar.conf.js instead!
|
||||||
|
// quasar.conf.js -> build -> vueRouterMode
|
||||||
|
// quasar.conf.js -> build -> publicPath
|
||||||
|
history: createHistory(process.env.VUE_ROUTER_BASE),
|
||||||
|
});
|
||||||
|
|
||||||
export default route(function (/* { store, ssrContext } */) {
|
export default route(function (/* { store, ssrContext } */) {
|
||||||
const createHistory = process.env.SERVER
|
return Router;
|
||||||
? createMemoryHistory
|
});
|
||||||
: (process.env.VUE_ROUTER_MODE === 'history' ? createWebHistory : createWebHashHistory);
|
|
||||||
|
|
||||||
const Router = createRouter({
|
Router.beforeEach(async (to) => {
|
||||||
scrollBehavior: () => ({ left: 0, top: 0 }),
|
// clear alert on route change
|
||||||
routes,
|
//const alertStore = useAlertStore();
|
||||||
|
//alertStore.clear();
|
||||||
|
|
||||||
// Leave this as is and make changes in quasar.conf.js instead!
|
// redirect to login page if not logged in and trying to access a restricted page
|
||||||
// quasar.conf.js -> build -> vueRouterMode
|
const publicPages = ['/login'];
|
||||||
// quasar.conf.js -> build -> publicPath
|
const authRequired = !publicPages.includes(to.path);
|
||||||
history: createHistory(process.env.VUE_ROUTER_BASE),
|
const authStore = useAuthStore();
|
||||||
});
|
|
||||||
|
|
||||||
return Router;
|
if (authRequired && !authStore.token) {
|
||||||
|
authStore.returnUrl = to.fullPath;
|
||||||
|
return '/login';
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,11 @@
|
|||||||
import { RouteRecordRaw } from 'vue-router';
|
import { RouteRecordRaw } from 'vue-router';
|
||||||
|
|
||||||
const routes: RouteRecordRaw[] = [
|
const routes: RouteRecordRaw[] = [
|
||||||
|
{
|
||||||
|
path: '/login',
|
||||||
|
component: () => import('pages/LoginPage.vue')
|
||||||
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
path: '/',
|
path: '/',
|
||||||
component: () => import('layouts/MainLayout.vue'),
|
component: () => import('layouts/MainLayout.vue'),
|
||||||
@@ -11,7 +16,10 @@ const routes: RouteRecordRaw[] = [
|
|||||||
{ path: 'flow', component: () => import('pages/testFlow.vue') },
|
{ path: 'flow', component: () => import('pages/testFlow.vue') },
|
||||||
{ path: 'flowchart', component: () => import('pages/FlowChartTest.vue') },
|
{ path: 'flowchart', component: () => import('pages/FlowChartTest.vue') },
|
||||||
{ path: 'flowEditor', component: () => import('pages/FlowEditorPage.vue') },
|
{ path: 'flowEditor', component: () => import('pages/FlowEditorPage.vue') },
|
||||||
|
{ path: 'flowEditor2', component: () => import('pages/FlowChart.vue') },
|
||||||
|
{ path: 'flowChart2', component: () => import('pages/FlowEditorPage2.vue') },
|
||||||
{ path: 'right', component: () => import('pages/testRight.vue') },
|
{ path: 'right', component: () => import('pages/testRight.vue') },
|
||||||
|
{ path: 'domain', component: () => import('pages/UserDomain.vue') }
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
// Always leave this as last one,
|
// Always leave this as last one,
|
||||||
|
|||||||
@@ -1,25 +1,47 @@
|
|||||||
import { defineStore } from 'pinia';
|
import { defineStore } from 'pinia';
|
||||||
|
import { ActionFlow,AppInfo } from 'src/types/ActionTypes';
|
||||||
|
import {FlowCtrl } from '../control/flowCtrl';
|
||||||
|
|
||||||
export const useFlowEditorStore = defineStore('flowEditor', {
|
export interface FlowEditorState{
|
||||||
state: () => ({
|
flowNames1:string;
|
||||||
counter: 0,
|
appInfo?:AppInfo;
|
||||||
flowNames: [],
|
flows?:ActionFlow[];
|
||||||
flowNames1: ''
|
selectedFlow?:ActionFlow|undefined;
|
||||||
}),
|
}
|
||||||
|
const flowCtrl=new FlowCtrl();
|
||||||
|
export const useFlowEditorStore = defineStore("flowEditor",{
|
||||||
|
state: ():FlowEditorState => ({
|
||||||
|
flowNames1: '',
|
||||||
|
appInfo:undefined,
|
||||||
|
flows:undefined,
|
||||||
|
selectedFlow:undefined
|
||||||
|
}),
|
||||||
getters: {
|
getters: {
|
||||||
doubleCount(state) {
|
currentFlow():ActionFlow|undefined{
|
||||||
return state.counter * 2;
|
return this.selectedFlow;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
actions: {
|
actions: {
|
||||||
increment() {
|
setFlows(flows:ActionFlow[]){
|
||||||
this.counter++;
|
this.flows=flows;
|
||||||
},
|
},
|
||||||
|
selectFlow(flow:ActionFlow){
|
||||||
setDefaultFlow() {
|
this.selectedFlow=flow;
|
||||||
this.counter++
|
},
|
||||||
|
setApp(app:AppInfo){
|
||||||
|
this.appInfo=app;
|
||||||
|
},
|
||||||
|
async setFlow(){
|
||||||
|
if(this.appInfo===undefined) return;
|
||||||
|
const actionFlows = await flowCtrl.getFlows(this.appInfo?.appId);
|
||||||
|
if(actionFlows && actionFlows.length>0){
|
||||||
|
this.setFlows(actionFlows);
|
||||||
|
}
|
||||||
|
if(actionFlows && actionFlows.length==1){
|
||||||
|
this.selectFlow(actionFlows[0]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
36
frontend/src/stores/useAuthStore.ts
Normal file
36
frontend/src/stores/useAuthStore.ts
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
import { defineStore } from 'pinia';
|
||||||
|
import { api } from 'boot/axios';
|
||||||
|
import { Router } from '../router';
|
||||||
|
|
||||||
|
|
||||||
|
export const useAuthStore = defineStore({
|
||||||
|
id: 'auth',
|
||||||
|
state: () => ({
|
||||||
|
token: localStorage.getItem('token'),
|
||||||
|
returnUrl: ''
|
||||||
|
}),
|
||||||
|
actions: {
|
||||||
|
async login(username:string, password:string) {
|
||||||
|
const params = new URLSearchParams();
|
||||||
|
params.append('username', username);
|
||||||
|
params.append('password', password);
|
||||||
|
try{
|
||||||
|
const result = await api.post(`http://127.0.0.1:8000/api/token`,params);
|
||||||
|
console.info(result);
|
||||||
|
this.token =result.data.access_token;
|
||||||
|
localStorage.setItem('token', result.data.access_token);
|
||||||
|
Router.push(this.returnUrl || '/');
|
||||||
|
return true;
|
||||||
|
}catch(e)
|
||||||
|
{
|
||||||
|
console.info(e);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
logout() {
|
||||||
|
this.token = null;
|
||||||
|
localStorage.removeItem('token');
|
||||||
|
Router.push('/login');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
@@ -1,5 +1,13 @@
|
|||||||
import { v4 as uuidv4 } from 'uuid';
|
import { v4 as uuidv4 } from 'uuid';
|
||||||
|
/**
|
||||||
|
* アプリ情報
|
||||||
|
*/
|
||||||
|
export interface AppInfo {
|
||||||
|
appId:string;
|
||||||
|
code?:string;
|
||||||
|
name:string;
|
||||||
|
description?:string;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* アクションのプロパティ定義
|
* アクションのプロパティ定義
|
||||||
@@ -41,6 +49,7 @@ export interface IActionNode{
|
|||||||
* アクションフローの定義
|
* アクションフローの定義
|
||||||
*/
|
*/
|
||||||
export interface IActionFlow {
|
export interface IActionFlow {
|
||||||
|
id:string;
|
||||||
actionNodes:Array<IActionNode>
|
actionNodes:Array<IActionNode>
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -112,7 +121,7 @@ export class ActionNode implements IActionNode {
|
|||||||
title:string,
|
title:string,
|
||||||
inputPoint:string,
|
inputPoint:string,
|
||||||
outputPoint: Array<string> = [],
|
outputPoint: Array<string> = [],
|
||||||
actionProps: Array<IActionProperty> =[ActionProperty.defaultProperty()]
|
actionProps: Array<IActionProperty> =[ActionProperty.defaultProperty()],
|
||||||
) {
|
) {
|
||||||
this.id=uuidv4();
|
this.id=uuidv4();
|
||||||
this.name = name;
|
this.name = name;
|
||||||
@@ -168,7 +177,7 @@ export class RootAction implements IActionNode {
|
|||||||
* アクションフローの定義
|
* アクションフローの定義
|
||||||
*/
|
*/
|
||||||
export class ActionFlow implements IActionFlow {
|
export class ActionFlow implements IActionFlow {
|
||||||
|
id:string;
|
||||||
actionNodes:Array<IActionNode>;
|
actionNodes:Array<IActionNode>;
|
||||||
constructor(actionNodes:Array<IActionNode>|RootAction){
|
constructor(actionNodes:Array<IActionNode>|RootAction){
|
||||||
if(actionNodes instanceof Array){
|
if(actionNodes instanceof Array){
|
||||||
@@ -176,6 +185,7 @@ export class ActionFlow implements IActionFlow {
|
|||||||
}else{
|
}else{
|
||||||
this.actionNodes=[actionNodes];
|
this.actionNodes=[actionNodes];
|
||||||
}
|
}
|
||||||
|
this.id=uuidv4();
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* ノードを追加する
|
* ノードを追加する
|
||||||
@@ -194,13 +204,18 @@ export class ActionFlow implements IActionFlow {
|
|||||||
if(inputPoint!==undefined){
|
if(inputPoint!==undefined){
|
||||||
newNode.inputPoint=inputPoint;
|
newNode.inputPoint=inputPoint;
|
||||||
}
|
}
|
||||||
if(prevNode){
|
if(prevNode!==undefined){
|
||||||
this.connectNodes(prevNode,newNode,inputPoint||'');
|
this.connectNodes(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||'');
|
||||||
}
|
}
|
||||||
this.actionNodes.push(newNode);
|
const index=this.actionNodes.findIndex(node=>node.id===prevNode?.id)
|
||||||
|
if(index>=0){
|
||||||
|
this.actionNodes.splice(index+1,0,newNode);
|
||||||
|
}else{
|
||||||
|
this.actionNodes.push(newNode);
|
||||||
|
}
|
||||||
return newNode;
|
return newNode;
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
@@ -291,6 +306,7 @@ reconnectOrRemoveNextNodes(targetNode: IActionNode): void {
|
|||||||
//二つ以上の場合
|
//二つ以上の場合
|
||||||
for(const [point,nextid] of nextNodeIds){
|
for(const [point,nextid] of nextNodeIds){
|
||||||
const nextNode = this.findNodeById(nextid);
|
const nextNode = this.findNodeById(nextid);
|
||||||
|
if(!nextNode) return;
|
||||||
if(!this.connectNodes(prevNode,nextNode,point)){
|
if(!this.connectNodes(prevNode,nextNode,point)){
|
||||||
this.removeAllNext(nextid);
|
this.removeAllNext(nextid);
|
||||||
this.removeFromActionNodes(nextid);
|
this.removeFromActionNodes(nextid);
|
||||||
@@ -353,5 +369,38 @@ reconnectOrRemoveNextNodes(targetNode: IActionNode): void {
|
|||||||
return this.actionNodes.find((node) => node.id === id);
|
return this.actionNodes.find((node) => node.id === id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
toJSON() {
|
||||||
|
return {
|
||||||
|
id:this.id,
|
||||||
|
actionNodes: this.actionNodes.map(node => {
|
||||||
|
const { nextNodeIds, ...rest } = node;
|
||||||
|
return {
|
||||||
|
...rest,
|
||||||
|
nextNodeIds: Array.from(nextNodeIds.entries())
|
||||||
|
};
|
||||||
|
})
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
getRoot():IActionNode|undefined{
|
||||||
|
return this.actionNodes.find(node=>node.isRoot)
|
||||||
|
}
|
||||||
|
|
||||||
|
static fromJSON(json: string): ActionFlow {
|
||||||
|
const parsedObject = JSON.parse(json);
|
||||||
|
|
||||||
|
const actionNodes = parsedObject.actionNodes.map((node: any) => {
|
||||||
|
const nodeClass = !node.isRoot? new ActionNode(node.name,node.title,node.inputPoint,node.outputPoint,node.actionProps)
|
||||||
|
:new RootAction(node.name,node.title,node.subTitle);
|
||||||
|
nodeClass.nextNodeIds=new Map(node.nextNodeIds);
|
||||||
|
nodeClass.prevNodeId=node.prevNodeId;
|
||||||
|
return nodeClass;
|
||||||
|
});
|
||||||
|
const actionFlow = new ActionFlow(actionNodes);
|
||||||
|
actionFlow.id=parsedObject.id;
|
||||||
|
return actionFlow;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
138
frontend/src/types/KintoneEvents.ts
Normal file
138
frontend/src/types/KintoneEvents.ts
Normal file
@@ -0,0 +1,138 @@
|
|||||||
|
import {IActionFlow} from './ActionTypes';
|
||||||
|
export interface TreeNode {
|
||||||
|
label: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface KintoneEvent extends TreeNode {
|
||||||
|
eventId: string;
|
||||||
|
hasFlow: boolean;
|
||||||
|
flowData?: IActionFlow;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface KintoneScreen extends TreeNode {
|
||||||
|
label: string;
|
||||||
|
events: KintoneEvent[];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export class KintoneEventManager {
|
||||||
|
public screens: KintoneScreen[];
|
||||||
|
|
||||||
|
constructor(screens: KintoneScreen[]) {
|
||||||
|
this.screens = screens;
|
||||||
|
}
|
||||||
|
|
||||||
|
public findEventById(eventId: string): KintoneEvent | null {
|
||||||
|
for (const screen of this.screens) {
|
||||||
|
for (const event of screen.events) {
|
||||||
|
if (event.eventId === eventId) {
|
||||||
|
return event;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export const kintoneEvents:KintoneEventManager = new KintoneEventManager([
|
||||||
|
{
|
||||||
|
label:"レコード追加画面",
|
||||||
|
events:[
|
||||||
|
{
|
||||||
|
label:"レコード追加画面を表示した後",
|
||||||
|
eventId:"app.record.create.show",
|
||||||
|
hasFlow:false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label:"保存をクリックしたとき",
|
||||||
|
eventId:"app.record.create.submit",
|
||||||
|
hasFlow:true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label:"保存が成功したとき",
|
||||||
|
eventId:"app.record.create.submit.success ",
|
||||||
|
hasFlow:false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label:"フィールドの値を変更したとき",
|
||||||
|
eventId:"app.record.create.change",
|
||||||
|
hasFlow:false
|
||||||
|
},
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label:"レコード詳細画面",
|
||||||
|
events:[
|
||||||
|
{
|
||||||
|
label:"レコード詳細画面を表示した後",
|
||||||
|
eventId:"app.record.detail.show",
|
||||||
|
hasFlow:false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label:"レコードを削除するとき",
|
||||||
|
eventId:"app.record.detail.delete.submit",
|
||||||
|
hasFlow:false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label:"プロセス管理のアクションを実行したとき",
|
||||||
|
eventId:"app.record.detail.process.proceed",
|
||||||
|
hasFlow:false
|
||||||
|
},
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label:"レコード編集画面",
|
||||||
|
events:[
|
||||||
|
{
|
||||||
|
label:"レコード編集画面を表示した後",
|
||||||
|
eventId:"app.record.edit.show",
|
||||||
|
hasFlow:false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label:"保存をクリックしたとき",
|
||||||
|
eventId:"app.record.edit.submit",
|
||||||
|
hasFlow:false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label:"保存が成功したとき",
|
||||||
|
eventId:"app.record.edit.submit.success",
|
||||||
|
hasFlow:false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label:"フィールドの値を変更したとき",
|
||||||
|
eventId:"app.record.edit.change",
|
||||||
|
hasFlow:false
|
||||||
|
},
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label:"レコード一覧画面",
|
||||||
|
events:[
|
||||||
|
{
|
||||||
|
label:"一覧画面を表示した後",
|
||||||
|
eventId:"app.record.index.show",
|
||||||
|
hasFlow:false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label:"インライン編集を開始したとき",
|
||||||
|
eventId:"app.record.index.edit.show",
|
||||||
|
hasFlow:false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label:"インライン編集のフィールド値を変更したとき",
|
||||||
|
eventId:"app.record.index.edit.change",
|
||||||
|
hasFlow:false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label:"インライン編集の【保存】をクリックしたとき",
|
||||||
|
eventId:"app.record.index.edit.submit",
|
||||||
|
hasFlow:false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label:"インライン編集の保存が成功したとき",
|
||||||
|
eventId:"app.record.index.edit.submit.success",
|
||||||
|
hasFlow:false
|
||||||
|
},
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]);
|
||||||
@@ -76,7 +76,7 @@
|
|||||||
"@nodelib/fs.stat" "2.0.5"
|
"@nodelib/fs.stat" "2.0.5"
|
||||||
run-parallel "^1.1.9"
|
run-parallel "^1.1.9"
|
||||||
|
|
||||||
"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
|
"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5":
|
||||||
version "2.0.5"
|
version "2.0.5"
|
||||||
resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz"
|
resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz"
|
||||||
integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
|
integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
|
||||||
@@ -299,7 +299,7 @@
|
|||||||
semver "^7.3.7"
|
semver "^7.3.7"
|
||||||
tsutils "^3.21.0"
|
tsutils "^3.21.0"
|
||||||
|
|
||||||
"@typescript-eslint/parser@^5.10.0":
|
"@typescript-eslint/parser@^5.0.0", "@typescript-eslint/parser@^5.10.0":
|
||||||
version "5.61.0"
|
version "5.61.0"
|
||||||
resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.61.0.tgz"
|
resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.61.0.tgz"
|
||||||
integrity sha512-yGr4Sgyh8uO6fSi9hw3jAFXNBHbCtKKFMdX2IkT3ZqpKmtAq3lHS4ixB/COFuAIJpwl9/AqF7j72ZDWYKmIfvg==
|
integrity sha512-yGr4Sgyh8uO6fSi9hw3jAFXNBHbCtKKFMdX2IkT3ZqpKmtAq3lHS4ixB/COFuAIJpwl9/AqF7j72ZDWYKmIfvg==
|
||||||
@@ -367,7 +367,7 @@
|
|||||||
"@typescript-eslint/types" "5.61.0"
|
"@typescript-eslint/types" "5.61.0"
|
||||||
eslint-visitor-keys "^3.3.0"
|
eslint-visitor-keys "^3.3.0"
|
||||||
|
|
||||||
"@vitejs/plugin-vue@^2.2.0":
|
"@vitejs/plugin-vue@^2.0.0 || ^3.0.0 || ^4.0.0", "@vitejs/plugin-vue@^2.2.0":
|
||||||
version "2.3.4"
|
version "2.3.4"
|
||||||
resolved "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-2.3.4.tgz"
|
resolved "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-2.3.4.tgz"
|
||||||
integrity sha512-IfFNbtkbIm36O9KB8QodlwwYvTEsJb4Lll4c2IwB3VHc2gie2mSPtSzL0eYay7X2jd/2WX02FjSGTWR6OPr/zg==
|
integrity sha512-IfFNbtkbIm36O9KB8QodlwwYvTEsJb4Lll4c2IwB3VHc2gie2mSPtSzL0eYay7X2jd/2WX02FjSGTWR6OPr/zg==
|
||||||
@@ -480,12 +480,22 @@ acorn-jsx@^5.3.2:
|
|||||||
resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz"
|
resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz"
|
||||||
integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
|
integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
|
||||||
|
|
||||||
acorn@^8.9.0:
|
"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8.9.0:
|
||||||
version "8.10.0"
|
version "8.10.0"
|
||||||
resolved "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz"
|
resolved "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz"
|
||||||
integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==
|
integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==
|
||||||
|
|
||||||
ajv@^6.10.0, ajv@^6.12.4:
|
ajv@^6.10.0:
|
||||||
|
version "6.12.6"
|
||||||
|
resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz"
|
||||||
|
integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
|
||||||
|
dependencies:
|
||||||
|
fast-deep-equal "^3.1.1"
|
||||||
|
fast-json-stable-stringify "^2.0.0"
|
||||||
|
json-schema-traverse "^0.4.1"
|
||||||
|
uri-js "^4.2.2"
|
||||||
|
|
||||||
|
ajv@^6.12.4:
|
||||||
version "6.12.6"
|
version "6.12.6"
|
||||||
resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz"
|
resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz"
|
||||||
integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
|
integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
|
||||||
@@ -681,7 +691,7 @@ braces@^3.0.2, braces@~3.0.2:
|
|||||||
dependencies:
|
dependencies:
|
||||||
fill-range "^7.0.1"
|
fill-range "^7.0.1"
|
||||||
|
|
||||||
browserslist@^4.21.5:
|
browserslist@^4.21.5, "browserslist@>= 4.21.0":
|
||||||
version "4.21.9"
|
version "4.21.9"
|
||||||
resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz"
|
resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz"
|
||||||
integrity sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==
|
integrity sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==
|
||||||
@@ -753,7 +763,7 @@ chardet@^0.7.0:
|
|||||||
resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz"
|
resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz"
|
||||||
integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==
|
integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==
|
||||||
|
|
||||||
"chokidar@>=3.0.0 <4.0.0", chokidar@^3.5.3:
|
chokidar@^3.5.3, "chokidar@>=3.0.0 <4.0.0":
|
||||||
version "3.5.3"
|
version "3.5.3"
|
||||||
resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz"
|
resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz"
|
||||||
integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
|
integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
|
||||||
@@ -938,6 +948,27 @@ csstype@^3.1.1:
|
|||||||
resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz"
|
resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz"
|
||||||
integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==
|
integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==
|
||||||
|
|
||||||
|
debug@^4.1.1:
|
||||||
|
version "4.3.4"
|
||||||
|
resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz"
|
||||||
|
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
|
||||||
|
dependencies:
|
||||||
|
ms "2.1.2"
|
||||||
|
|
||||||
|
debug@^4.3.2:
|
||||||
|
version "4.3.4"
|
||||||
|
resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz"
|
||||||
|
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
|
||||||
|
dependencies:
|
||||||
|
ms "2.1.2"
|
||||||
|
|
||||||
|
debug@^4.3.4:
|
||||||
|
version "4.3.4"
|
||||||
|
resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz"
|
||||||
|
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
|
||||||
|
dependencies:
|
||||||
|
ms "2.1.2"
|
||||||
|
|
||||||
debug@2.6.9:
|
debug@2.6.9:
|
||||||
version "2.6.9"
|
version "2.6.9"
|
||||||
resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz"
|
resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz"
|
||||||
@@ -945,13 +976,6 @@ debug@2.6.9:
|
|||||||
dependencies:
|
dependencies:
|
||||||
ms "2.0.0"
|
ms "2.0.0"
|
||||||
|
|
||||||
debug@^4.1.1, debug@^4.3.2, debug@^4.3.4:
|
|
||||||
version "4.3.4"
|
|
||||||
resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz"
|
|
||||||
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
|
|
||||||
dependencies:
|
|
||||||
ms "2.1.2"
|
|
||||||
|
|
||||||
deep-is@^0.1.3:
|
deep-is@^0.1.3:
|
||||||
version "0.1.4"
|
version "0.1.4"
|
||||||
resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz"
|
resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz"
|
||||||
@@ -1044,107 +1068,12 @@ end-of-stream@^1.4.1:
|
|||||||
dependencies:
|
dependencies:
|
||||||
once "^1.4.0"
|
once "^1.4.0"
|
||||||
|
|
||||||
esbuild-android-64@0.14.51:
|
|
||||||
version "0.14.51"
|
|
||||||
resolved "https://mirrors.cloud.tencent.com/npm/esbuild-android-64/-/esbuild-android-64-0.14.51.tgz#414a087cb0de8db1e347ecca6c8320513de433db"
|
|
||||||
integrity sha512-6FOuKTHnC86dtrKDmdSj2CkcKF8PnqkaIXqvgydqfJmqBazCPdw+relrMlhGjkvVdiiGV70rpdnyFmA65ekBCQ==
|
|
||||||
|
|
||||||
esbuild-android-arm64@0.14.51:
|
|
||||||
version "0.14.51"
|
|
||||||
resolved "https://mirrors.cloud.tencent.com/npm/esbuild-android-arm64/-/esbuild-android-arm64-0.14.51.tgz#55de3bce2aab72bcd2b606da4318ad00fb9c8151"
|
|
||||||
integrity sha512-vBtp//5VVkZWmYYvHsqBRCMMi1MzKuMIn5XDScmnykMTu9+TD9v0NMEDqQxvtFToeYmojdo5UCV2vzMQWJcJ4A==
|
|
||||||
|
|
||||||
esbuild-darwin-64@0.14.51:
|
|
||||||
version "0.14.51"
|
|
||||||
resolved "https://mirrors.cloud.tencent.com/npm/esbuild-darwin-64/-/esbuild-darwin-64-0.14.51.tgz#4259f23ed6b4cea2ec8a28d87b7fb9801f093754"
|
|
||||||
integrity sha512-YFmXPIOvuagDcwCejMRtCDjgPfnDu+bNeh5FU2Ryi68ADDVlWEpbtpAbrtf/lvFTWPexbgyKgzppNgsmLPr8PA==
|
|
||||||
|
|
||||||
esbuild-darwin-arm64@0.14.51:
|
|
||||||
version "0.14.51"
|
|
||||||
resolved "https://mirrors.cloud.tencent.com/npm/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.51.tgz#d77b4366a71d84e530ba019d540b538b295d494a"
|
|
||||||
integrity sha512-juYD0QnSKwAMfzwKdIF6YbueXzS6N7y4GXPDeDkApz/1RzlT42mvX9jgNmyOlWKN7YzQAYbcUEJmZJYQGdf2ow==
|
|
||||||
|
|
||||||
esbuild-freebsd-64@0.14.51:
|
|
||||||
version "0.14.51"
|
|
||||||
resolved "https://mirrors.cloud.tencent.com/npm/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.51.tgz#27b6587b3639f10519c65e07219d249b01f2ad38"
|
|
||||||
integrity sha512-cLEI/aXjb6vo5O2Y8rvVSQ7smgLldwYY5xMxqh/dQGfWO+R1NJOFsiax3IS4Ng300SVp7Gz3czxT6d6qf2cw0g==
|
|
||||||
|
|
||||||
esbuild-freebsd-arm64@0.14.51:
|
|
||||||
version "0.14.51"
|
|
||||||
resolved "https://mirrors.cloud.tencent.com/npm/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.51.tgz#63c435917e566808c71fafddc600aca4d78be1ec"
|
|
||||||
integrity sha512-TcWVw/rCL2F+jUgRkgLa3qltd5gzKjIMGhkVybkjk6PJadYInPtgtUBp1/hG+mxyigaT7ib+od1Xb84b+L+1Mg==
|
|
||||||
|
|
||||||
esbuild-linux-32@0.14.51:
|
|
||||||
version "0.14.51"
|
|
||||||
resolved "https://mirrors.cloud.tencent.com/npm/esbuild-linux-32/-/esbuild-linux-32-0.14.51.tgz#c3da774143a37e7f11559b9369d98f11f997a5d9"
|
|
||||||
integrity sha512-RFqpyC5ChyWrjx8Xj2K0EC1aN0A37H6OJfmUXIASEqJoHcntuV3j2Efr9RNmUhMfNE6yEj2VpYuDteZLGDMr0w==
|
|
||||||
|
|
||||||
esbuild-linux-64@0.14.51:
|
|
||||||
version "0.14.51"
|
|
||||||
resolved "https://mirrors.cloud.tencent.com/npm/esbuild-linux-64/-/esbuild-linux-64-0.14.51.tgz#5d92b67f674e02ae0b4a9de9a757ba482115c4ae"
|
|
||||||
integrity sha512-dxjhrqo5i7Rq6DXwz5v+MEHVs9VNFItJmHBe1CxROWNf4miOGoQhqSG8StStbDkQ1Mtobg6ng+4fwByOhoQoeA==
|
|
||||||
|
|
||||||
esbuild-linux-arm64@0.14.51:
|
|
||||||
version "0.14.51"
|
|
||||||
resolved "https://mirrors.cloud.tencent.com/npm/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.51.tgz#dac84740516e859d8b14e1ecc478dd5241b10c93"
|
|
||||||
integrity sha512-D9rFxGutoqQX3xJPxqd6o+kvYKeIbM0ifW2y0bgKk5HPgQQOo2k9/2Vpto3ybGYaFPCE5qTGtqQta9PoP6ZEzw==
|
|
||||||
|
|
||||||
esbuild-linux-arm@0.14.51:
|
|
||||||
version "0.14.51"
|
|
||||||
resolved "https://mirrors.cloud.tencent.com/npm/esbuild-linux-arm/-/esbuild-linux-arm-0.14.51.tgz#b3ae7000696cd53ed95b2b458554ff543a60e106"
|
|
||||||
integrity sha512-LsJynDxYF6Neg7ZC7748yweCDD+N8ByCv22/7IAZglIEniEkqdF4HCaa49JNDLw1UQGlYuhOB8ZT/MmcSWzcWg==
|
|
||||||
|
|
||||||
esbuild-linux-mips64le@0.14.51:
|
|
||||||
version "0.14.51"
|
|
||||||
resolved "https://mirrors.cloud.tencent.com/npm/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.51.tgz#dad10770fac94efa092b5a0643821c955a9dd385"
|
|
||||||
integrity sha512-vS54wQjy4IinLSlb5EIlLoln8buh1yDgliP4CuEHumrPk4PvvP4kTRIG4SzMXm6t19N0rIfT4bNdAxzJLg2k6A==
|
|
||||||
|
|
||||||
esbuild-linux-ppc64le@0.14.51:
|
|
||||||
version "0.14.51"
|
|
||||||
resolved "https://mirrors.cloud.tencent.com/npm/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.51.tgz#b68c2f8294d012a16a88073d67e976edd4850ae0"
|
|
||||||
integrity sha512-xcdd62Y3VfGoyphNP/aIV9LP+RzFw5M5Z7ja+zdpQHHvokJM7d0rlDRMN+iSSwvUymQkqZO+G/xjb4/75du8BQ==
|
|
||||||
|
|
||||||
esbuild-linux-riscv64@0.14.51:
|
|
||||||
version "0.14.51"
|
|
||||||
resolved "https://mirrors.cloud.tencent.com/npm/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.51.tgz#608a318b8697123e44c1e185cdf6708e3df50b93"
|
|
||||||
integrity sha512-syXHGak9wkAnFz0gMmRBoy44JV0rp4kVCEA36P5MCeZcxFq8+fllBC2t6sKI23w3qd8Vwo9pTADCgjTSf3L3rA==
|
|
||||||
|
|
||||||
esbuild-linux-s390x@0.14.51:
|
|
||||||
version "0.14.51"
|
|
||||||
resolved "https://mirrors.cloud.tencent.com/npm/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.51.tgz#c9e7791170a3295dba79b93aa452beb9838a8625"
|
|
||||||
integrity sha512-kFAJY3dv+Wq8o28K/C7xkZk/X34rgTwhknSsElIqoEo8armCOjMJ6NsMxm48KaWY2h2RUYGtQmr+RGuUPKBhyw==
|
|
||||||
|
|
||||||
esbuild-netbsd-64@0.14.51:
|
|
||||||
version "0.14.51"
|
|
||||||
resolved "https://mirrors.cloud.tencent.com/npm/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.51.tgz#0abd40b8c2e37fda6f5cc41a04cb2b690823d891"
|
|
||||||
integrity sha512-ZZBI7qrR1FevdPBVHz/1GSk1x5GDL/iy42Zy8+neEm/HA7ma+hH/bwPEjeHXKWUDvM36CZpSL/fn1/y9/Hb+1A==
|
|
||||||
|
|
||||||
esbuild-openbsd-64@0.14.51:
|
|
||||||
version "0.14.51"
|
|
||||||
resolved "https://mirrors.cloud.tencent.com/npm/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.51.tgz#4adba0b7ea7eb1428bb00d8e94c199a949b130e8"
|
|
||||||
integrity sha512-7R1/p39M+LSVQVgDVlcY1KKm6kFKjERSX1lipMG51NPcspJD1tmiZSmmBXoY5jhHIu6JL1QkFDTx94gMYK6vfA==
|
|
||||||
|
|
||||||
esbuild-sunos-64@0.14.51:
|
|
||||||
version "0.14.51"
|
|
||||||
resolved "https://mirrors.cloud.tencent.com/npm/esbuild-sunos-64/-/esbuild-sunos-64-0.14.51.tgz#4b8a6d97dfedda30a6e39607393c5c90ebf63891"
|
|
||||||
integrity sha512-HoHaCswHxLEYN8eBTtyO0bFEWvA3Kdb++hSQ/lLG7TyKF69TeSG0RNoBRAs45x/oCeWaTDntEZlYwAfQlhEtJA==
|
|
||||||
|
|
||||||
esbuild-windows-32@0.14.51:
|
|
||||||
version "0.14.51"
|
|
||||||
resolved "https://mirrors.cloud.tencent.com/npm/esbuild-windows-32/-/esbuild-windows-32-0.14.51.tgz#d31d8ca0c1d314fb1edea163685a423b62e9ac17"
|
|
||||||
integrity sha512-4rtwSAM35A07CBt1/X8RWieDj3ZUHQqUOaEo5ZBs69rt5WAFjP4aqCIobdqOy4FdhYw1yF8Z0xFBTyc9lgPtEg==
|
|
||||||
|
|
||||||
esbuild-windows-64@0.14.51:
|
esbuild-windows-64@0.14.51:
|
||||||
version "0.14.51"
|
version "0.14.51"
|
||||||
resolved "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.51.tgz"
|
resolved "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.51.tgz"
|
||||||
integrity sha512-HoN/5HGRXJpWODprGCgKbdMvrC3A2gqvzewu2eECRw2sYxOUoh2TV1tS+G7bHNapPGI79woQJGV6pFH7GH7qnA==
|
integrity sha512-HoN/5HGRXJpWODprGCgKbdMvrC3A2gqvzewu2eECRw2sYxOUoh2TV1tS+G7bHNapPGI79woQJGV6pFH7GH7qnA==
|
||||||
|
|
||||||
esbuild-windows-arm64@0.14.51:
|
esbuild@^0.14.27, esbuild@0.14.51:
|
||||||
version "0.14.51"
|
|
||||||
resolved "https://mirrors.cloud.tencent.com/npm/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.51.tgz#0220d2304bfdc11bc27e19b2aaf56edf183e4ae9"
|
|
||||||
integrity sha512-JQDqPjuOH7o+BsKMSddMfmVJXrnYZxXDHsoLHc0xgmAZkOOCflRmC43q31pk79F9xuyWY45jDBPolb5ZgGOf9g==
|
|
||||||
|
|
||||||
esbuild@0.14.51, esbuild@^0.14.27:
|
|
||||||
version "0.14.51"
|
version "0.14.51"
|
||||||
resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.14.51.tgz"
|
resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.14.51.tgz"
|
||||||
integrity sha512-+CvnDitD7Q5sT7F+FM65sWkF8wJRf+j9fPcprxYV4j+ohmzVj2W7caUqH2s5kCaCJAfcAICjSlKhDCcvDpU7nw==
|
integrity sha512-+CvnDitD7Q5sT7F+FM65sWkF8wJRf+j9fPcprxYV4j+ohmzVj2W7caUqH2s5kCaCJAfcAICjSlKhDCcvDpU7nw==
|
||||||
@@ -1216,7 +1145,15 @@ eslint-scope@^5.1.1:
|
|||||||
esrecurse "^4.3.0"
|
esrecurse "^4.3.0"
|
||||||
estraverse "^4.1.1"
|
estraverse "^4.1.1"
|
||||||
|
|
||||||
eslint-scope@^7.1.1, eslint-scope@^7.2.0:
|
eslint-scope@^7.1.1:
|
||||||
|
version "7.2.0"
|
||||||
|
resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz"
|
||||||
|
integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==
|
||||||
|
dependencies:
|
||||||
|
esrecurse "^4.3.0"
|
||||||
|
estraverse "^5.2.0"
|
||||||
|
|
||||||
|
eslint-scope@^7.2.0:
|
||||||
version "7.2.0"
|
version "7.2.0"
|
||||||
resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz"
|
resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz"
|
||||||
integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==
|
integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==
|
||||||
@@ -1229,7 +1166,7 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1:
|
|||||||
resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz"
|
resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz"
|
||||||
integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==
|
integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==
|
||||||
|
|
||||||
eslint@^8.10.0:
|
eslint@*, "eslint@^6.0.0 || ^7.0.0 || ^8.0.0", "eslint@^6.0.0 || ^7.0.0 || >=8.0.0", "eslint@^6.2.0 || ^7.0.0 || ^8.0.0", eslint@^8.10.0, eslint@^8.11.0, eslint@>=6.0.0, eslint@>=7.0.0:
|
||||||
version "8.44.0"
|
version "8.44.0"
|
||||||
resolved "https://registry.npmjs.org/eslint/-/eslint-8.44.0.tgz"
|
resolved "https://registry.npmjs.org/eslint/-/eslint-8.44.0.tgz"
|
||||||
integrity sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A==
|
integrity sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A==
|
||||||
@@ -1302,7 +1239,12 @@ estraverse@^4.1.1:
|
|||||||
resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz"
|
resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz"
|
||||||
integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
|
integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
|
||||||
|
|
||||||
estraverse@^5.1.0, estraverse@^5.2.0:
|
estraverse@^5.1.0:
|
||||||
|
version "5.3.0"
|
||||||
|
resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz"
|
||||||
|
integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
|
||||||
|
|
||||||
|
estraverse@^5.2.0:
|
||||||
version "5.3.0"
|
version "5.3.0"
|
||||||
resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz"
|
resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz"
|
||||||
integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
|
integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
|
||||||
@@ -1373,7 +1315,7 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
|
|||||||
resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz"
|
resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz"
|
||||||
integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
|
integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
|
||||||
|
|
||||||
fast-glob@3.2.12, fast-glob@^3.2.9:
|
fast-glob@^3.2.9, fast-glob@3.2.12:
|
||||||
version "3.2.12"
|
version "3.2.12"
|
||||||
resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz"
|
resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz"
|
||||||
integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==
|
integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==
|
||||||
@@ -1504,11 +1446,6 @@ fs.realpath@^1.0.0:
|
|||||||
resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz"
|
resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz"
|
||||||
integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
|
integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
|
||||||
|
|
||||||
fsevents@~2.3.2:
|
|
||||||
version "2.3.3"
|
|
||||||
resolved "https://mirrors.cloud.tencent.com/npm/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
|
|
||||||
integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
|
|
||||||
|
|
||||||
function-bind@^1.1.1:
|
function-bind@^1.1.1:
|
||||||
version "1.1.1"
|
version "1.1.1"
|
||||||
resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz"
|
resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz"
|
||||||
@@ -1635,7 +1572,7 @@ http-errors@2.0.0:
|
|||||||
statuses "2.0.1"
|
statuses "2.0.1"
|
||||||
toidentifier "1.0.1"
|
toidentifier "1.0.1"
|
||||||
|
|
||||||
iconv-lite@0.4.24, iconv-lite@^0.4.24:
|
iconv-lite@^0.4.24, iconv-lite@0.4.24:
|
||||||
version "0.4.24"
|
version "0.4.24"
|
||||||
resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz"
|
resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz"
|
||||||
integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
|
integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
|
||||||
@@ -1673,7 +1610,7 @@ inflight@^1.0.4:
|
|||||||
once "^1.3.0"
|
once "^1.3.0"
|
||||||
wrappy "1"
|
wrappy "1"
|
||||||
|
|
||||||
inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3:
|
inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3, inherits@2, inherits@2.0.4:
|
||||||
version "2.0.4"
|
version "2.0.4"
|
||||||
resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz"
|
resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz"
|
||||||
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
|
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
|
||||||
@@ -1957,7 +1894,7 @@ micromatch@^4.0.4:
|
|||||||
braces "^3.0.2"
|
braces "^3.0.2"
|
||||||
picomatch "^2.3.1"
|
picomatch "^2.3.1"
|
||||||
|
|
||||||
mime-db@1.52.0, "mime-db@>= 1.43.0 < 2":
|
"mime-db@>= 1.43.0 < 2", mime-db@1.52.0:
|
||||||
version "1.52.0"
|
version "1.52.0"
|
||||||
resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz"
|
resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz"
|
||||||
integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
|
integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
|
||||||
@@ -2212,9 +2149,9 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.3.1:
|
|||||||
resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz"
|
resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz"
|
||||||
integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
|
integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
|
||||||
|
|
||||||
pinia@^2.1.6:
|
pinia@^2.0.0, pinia@^2.1.6:
|
||||||
version "2.1.6"
|
version "2.1.6"
|
||||||
resolved "https://mirrors.cloud.tencent.com/npm/pinia/-/pinia-2.1.6.tgz#e88959f14b61c4debd9c42d0c9944e2875cbe0fa"
|
resolved "https://registry.npmjs.org/pinia/-/pinia-2.1.6.tgz"
|
||||||
integrity sha512-bIU6QuE5qZviMmct5XwCesXelb5VavdOWKWaB17ggk++NUwQWWbP5YnsONTk3b752QkW9sACiR81rorpeOMSvQ==
|
integrity sha512-bIU6QuE5qZviMmct5XwCesXelb5VavdOWKWaB17ggk++NUwQWWbP5YnsONTk3b752QkW9sACiR81rorpeOMSvQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@vue/devtools-api" "^6.5.0"
|
"@vue/devtools-api" "^6.5.0"
|
||||||
@@ -2233,7 +2170,7 @@ postcss-value-parser@^4.2.0:
|
|||||||
resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz"
|
resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz"
|
||||||
integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
|
integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
|
||||||
|
|
||||||
postcss@^8.1.10, postcss@^8.4.13:
|
postcss@^8.1.0, postcss@^8.1.10, postcss@^8.4.13:
|
||||||
version "8.4.25"
|
version "8.4.25"
|
||||||
resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.25.tgz"
|
resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.25.tgz"
|
||||||
integrity sha512-7taJ/8t2av0Z+sQEvNzCkpDynl0tX3uJMCODi6nT3PfASC7dYCWV9aQ+uiCf+KBD4SEFcu+GvJdGdwzQ6OSjCw==
|
integrity sha512-7taJ/8t2av0Z+sQEvNzCkpDynl0tX3uJMCODi6nT3PfASC7dYCWV9aQ+uiCf+KBD4SEFcu+GvJdGdwzQ6OSjCw==
|
||||||
@@ -2282,7 +2219,7 @@ qs@6.11.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
side-channel "^1.0.4"
|
side-channel "^1.0.4"
|
||||||
|
|
||||||
quasar@^2.6.0:
|
quasar@^2.6.0, quasar@^2.8.0:
|
||||||
version "2.12.2"
|
version "2.12.2"
|
||||||
resolved "https://registry.npmjs.org/quasar/-/quasar-2.12.2.tgz"
|
resolved "https://registry.npmjs.org/quasar/-/quasar-2.12.2.tgz"
|
||||||
integrity sha512-UB+J1cN6b9FrRphUuMvW1Pt1uaOPH2XJMAZagQlYzVUmltKCXQ0sby+ANgGRYa8w/tsekMySmN9QvkQ3+hYv/g==
|
integrity sha512-UB+J1cN6b9FrRphUuMvW1Pt1uaOPH2XJMAZagQlYzVUmltKCXQ0sby+ANgGRYa8w/tsekMySmN9QvkQ3+hYv/g==
|
||||||
@@ -2314,7 +2251,20 @@ raw-body@2.5.1:
|
|||||||
iconv-lite "0.4.24"
|
iconv-lite "0.4.24"
|
||||||
unpipe "1.0.0"
|
unpipe "1.0.0"
|
||||||
|
|
||||||
readable-stream@^2.0.0, readable-stream@^2.0.5:
|
readable-stream@^2.0.0:
|
||||||
|
version "2.3.8"
|
||||||
|
resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz"
|
||||||
|
integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==
|
||||||
|
dependencies:
|
||||||
|
core-util-is "~1.0.0"
|
||||||
|
inherits "~2.0.3"
|
||||||
|
isarray "~1.0.0"
|
||||||
|
process-nextick-args "~2.0.0"
|
||||||
|
safe-buffer "~5.1.1"
|
||||||
|
string_decoder "~1.1.1"
|
||||||
|
util-deprecate "~1.0.1"
|
||||||
|
|
||||||
|
readable-stream@^2.0.5:
|
||||||
version "2.3.8"
|
version "2.3.8"
|
||||||
resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz"
|
resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz"
|
||||||
integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==
|
integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==
|
||||||
@@ -2414,7 +2364,7 @@ rollup-plugin-visualizer@^5.5.4:
|
|||||||
source-map "^0.7.4"
|
source-map "^0.7.4"
|
||||||
yargs "^17.5.1"
|
yargs "^17.5.1"
|
||||||
|
|
||||||
"rollup@>=2.59.0 <2.78.0":
|
"rollup@>=2.59.0 <2.78.0", "rollup@2.x || 3.x":
|
||||||
version "2.77.3"
|
version "2.77.3"
|
||||||
resolved "https://registry.npmjs.org/rollup/-/rollup-2.77.3.tgz"
|
resolved "https://registry.npmjs.org/rollup/-/rollup-2.77.3.tgz"
|
||||||
integrity sha512-/qxNTG7FbmefJWoeeYJFbHehJ2HNWnjkAFRKzWN/45eNBBF/r8lo992CwcJXEzyVxs5FmfId+vTSTQDb+bxA+g==
|
integrity sha512-/qxNTG7FbmefJWoeeYJFbHehJ2HNWnjkAFRKzWN/45eNBBF/r8lo992CwcJXEzyVxs5FmfId+vTSTQDb+bxA+g==
|
||||||
@@ -2440,7 +2390,7 @@ rxjs@^7.5.5:
|
|||||||
dependencies:
|
dependencies:
|
||||||
tslib "^2.1.0"
|
tslib "^2.1.0"
|
||||||
|
|
||||||
safe-buffer@5.1.2, safe-buffer@^5.1.0, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
|
safe-buffer@^5.1.0, safe-buffer@~5.1.0, safe-buffer@~5.1.1, safe-buffer@5.1.2:
|
||||||
version "5.1.2"
|
version "5.1.2"
|
||||||
resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz"
|
resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz"
|
||||||
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
|
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
|
||||||
@@ -2455,7 +2405,7 @@ safe-buffer@5.2.1:
|
|||||||
resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz"
|
resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz"
|
||||||
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
|
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
|
||||||
|
|
||||||
sass@1.32.12:
|
sass@*, sass@1.32.12:
|
||||||
version "1.32.12"
|
version "1.32.12"
|
||||||
resolved "https://registry.npmjs.org/sass/-/sass-1.32.12.tgz"
|
resolved "https://registry.npmjs.org/sass/-/sass-1.32.12.tgz"
|
||||||
integrity sha512-zmXn03k3hN0KaiVTjohgkg98C3UowhL1/VSGdj4/VAAiMKGQOE80PFPxFP2Kyq0OUskPKcY5lImkhBKEHlypJA==
|
integrity sha512-zmXn03k3hN0KaiVTjohgkg98C3UowhL1/VSGdj4/VAAiMKGQOE80PFPxFP2Kyq0OUskPKcY5lImkhBKEHlypJA==
|
||||||
@@ -2587,6 +2537,13 @@ statuses@2.0.1:
|
|||||||
resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz"
|
resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz"
|
||||||
integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==
|
integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==
|
||||||
|
|
||||||
|
string_decoder@^1.1.1, string_decoder@~1.1.1:
|
||||||
|
version "1.1.1"
|
||||||
|
resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz"
|
||||||
|
integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
|
||||||
|
dependencies:
|
||||||
|
safe-buffer "~5.1.0"
|
||||||
|
|
||||||
string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
|
string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
|
||||||
version "4.2.3"
|
version "4.2.3"
|
||||||
resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz"
|
resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz"
|
||||||
@@ -2596,13 +2553,6 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
|
|||||||
is-fullwidth-code-point "^3.0.0"
|
is-fullwidth-code-point "^3.0.0"
|
||||||
strip-ansi "^6.0.1"
|
strip-ansi "^6.0.1"
|
||||||
|
|
||||||
string_decoder@^1.1.1, string_decoder@~1.1.1:
|
|
||||||
version "1.1.1"
|
|
||||||
resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz"
|
|
||||||
integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
|
|
||||||
dependencies:
|
|
||||||
safe-buffer "~5.1.0"
|
|
||||||
|
|
||||||
strip-ansi@^6.0.0, strip-ansi@^6.0.1:
|
strip-ansi@^6.0.0, strip-ansi@^6.0.1:
|
||||||
version "6.0.1"
|
version "6.0.1"
|
||||||
resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz"
|
resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz"
|
||||||
@@ -2720,7 +2670,7 @@ type-is@~1.6.18:
|
|||||||
media-typer "0.3.0"
|
media-typer "0.3.0"
|
||||||
mime-types "~2.1.24"
|
mime-types "~2.1.24"
|
||||||
|
|
||||||
typescript@^4.5.4:
|
typescript@^4.5.4, "typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta", typescript@>=4.4.4:
|
||||||
version "4.9.5"
|
version "4.9.5"
|
||||||
resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz"
|
resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz"
|
||||||
integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==
|
integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==
|
||||||
@@ -2735,7 +2685,7 @@ universalify@^2.0.0:
|
|||||||
resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz"
|
resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz"
|
||||||
integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==
|
integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==
|
||||||
|
|
||||||
unpipe@1.0.0, unpipe@~1.0.0:
|
unpipe@~1.0.0, unpipe@1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz"
|
resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz"
|
||||||
integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==
|
integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==
|
||||||
@@ -2780,7 +2730,7 @@ vary@~1.1.2:
|
|||||||
resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz"
|
resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz"
|
||||||
integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==
|
integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==
|
||||||
|
|
||||||
vite@^2.9.13:
|
"vite@^2.0.0 || ^3.0.0 || ^4.0.0", vite@^2.5.10, vite@^2.9.13:
|
||||||
version "2.9.16"
|
version "2.9.16"
|
||||||
resolved "https://registry.npmjs.org/vite/-/vite-2.9.16.tgz"
|
resolved "https://registry.npmjs.org/vite/-/vite-2.9.16.tgz"
|
||||||
integrity sha512-X+6q8KPyeuBvTQV8AVSnKDvXoBMnTx8zxh54sOwmmuOdxkjMmEJXH2UEchA+vTMps1xw9vL64uwJOWryULg7nA==
|
integrity sha512-X+6q8KPyeuBvTQV8AVSnKDvXoBMnTx8zxh54sOwmmuOdxkjMmEJXH2UEchA+vTMps1xw9vL64uwJOWryULg7nA==
|
||||||
@@ -2794,7 +2744,7 @@ vite@^2.9.13:
|
|||||||
|
|
||||||
vue-demi@>=0.14.5:
|
vue-demi@>=0.14.5:
|
||||||
version "0.14.6"
|
version "0.14.6"
|
||||||
resolved "https://mirrors.cloud.tencent.com/npm/vue-demi/-/vue-demi-0.14.6.tgz#dc706582851dc1cdc17a0054f4fec2eb6df74c92"
|
resolved "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz"
|
||||||
integrity sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==
|
integrity sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==
|
||||||
|
|
||||||
vue-eslint-parser@^9.3.0:
|
vue-eslint-parser@^9.3.0:
|
||||||
@@ -2810,14 +2760,14 @@ vue-eslint-parser@^9.3.0:
|
|||||||
lodash "^4.17.21"
|
lodash "^4.17.21"
|
||||||
semver "^7.3.6"
|
semver "^7.3.6"
|
||||||
|
|
||||||
vue-router@^4.0.0:
|
vue-router@^4.0.0, vue-router@^4.0.12:
|
||||||
version "4.2.4"
|
version "4.2.4"
|
||||||
resolved "https://registry.npmjs.org/vue-router/-/vue-router-4.2.4.tgz"
|
resolved "https://registry.npmjs.org/vue-router/-/vue-router-4.2.4.tgz"
|
||||||
integrity sha512-9PISkmaCO02OzPVOMq2w82ilty6+xJmQrarYZDkjZBfl4RvYAlt4PKnEX21oW4KTtWfa9OuO/b3qk1Od3AEdCQ==
|
integrity sha512-9PISkmaCO02OzPVOMq2w82ilty6+xJmQrarYZDkjZBfl4RvYAlt4PKnEX21oW4KTtWfa9OuO/b3qk1Od3AEdCQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@vue/devtools-api" "^6.5.0"
|
"@vue/devtools-api" "^6.5.0"
|
||||||
|
|
||||||
vue@^3.0.0:
|
"vue@^2.6.14 || ^3.3.0", vue@^3.0.0, "vue@^3.0.0-0 || ^2.6.0", vue@^3.2.0, vue@^3.2.25, vue@^3.2.29, vue@3.3.4:
|
||||||
version "3.3.4"
|
version "3.3.4"
|
||||||
resolved "https://registry.npmjs.org/vue/-/vue-3.3.4.tgz"
|
resolved "https://registry.npmjs.org/vue/-/vue-3.3.4.tgz"
|
||||||
integrity sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==
|
integrity sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==
|
||||||
|
|||||||
138
sample.json
Normal file
138
sample.json
Normal file
@@ -0,0 +1,138 @@
|
|||||||
|
{
|
||||||
|
"id": "681ecde3-4439-4210-9fdf-424c6af98f09",
|
||||||
|
"actionNodes": [
|
||||||
|
{
|
||||||
|
"id": "34dfd32e-ba1a-440f-bb46-a8a1999109cd",
|
||||||
|
"name": "app.record.create.submit",
|
||||||
|
"title": "レコード追加画面",
|
||||||
|
"subTitle": "保存するとき",
|
||||||
|
"inputPoint": "",
|
||||||
|
"outputPoints": [],
|
||||||
|
"isRoot": true,
|
||||||
|
"actionProps": [],
|
||||||
|
"ActionValue": {},
|
||||||
|
"nextNodeIds": [
|
||||||
|
[
|
||||||
|
"",
|
||||||
|
"ce07775d-9729-4516-a88c-78ee8f2f851e"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "ce07775d-9729-4516-a88c-78ee8f2f851e",
|
||||||
|
"name": "自動採番",
|
||||||
|
"title": "文書番号を自動採番する",
|
||||||
|
"inputPoint": "",
|
||||||
|
"outputPoints": [],
|
||||||
|
"actionProps": [
|
||||||
|
{
|
||||||
|
"component": "InputText",
|
||||||
|
"props": {
|
||||||
|
"name": "displayName",
|
||||||
|
"displayName": "文書番号を自動採番する",
|
||||||
|
"placeholder": "表示を入力してください",
|
||||||
|
"modelValue": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"component": "InputText",
|
||||||
|
"props": {
|
||||||
|
"displayName": "フォーマット",
|
||||||
|
"modelValue": "",
|
||||||
|
"name": "format",
|
||||||
|
"placeholder": "フォーマットを入力してください"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"component": "FieldInput",
|
||||||
|
"props": {
|
||||||
|
"displayName": "採番項目",
|
||||||
|
"modelValue": "",
|
||||||
|
"name": "field",
|
||||||
|
"placeholder": "採番項目を選択してください"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"prevNodeId": "34dfd32e-ba1a-440f-bb46-a8a1999109cd",
|
||||||
|
"nextNodeIds": [
|
||||||
|
[
|
||||||
|
"",
|
||||||
|
"0d18c3c9-abee-44e5-83eb-82074316219b"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "0d18c3c9-abee-44e5-83eb-82074316219b",
|
||||||
|
"name": "入力データ取得",
|
||||||
|
"title": "電話番号を取得する",
|
||||||
|
"inputPoint": "",
|
||||||
|
"outputPoints": [],
|
||||||
|
"actionProps": [
|
||||||
|
{
|
||||||
|
"component": "InputText",
|
||||||
|
"props": {
|
||||||
|
"name": "displayName",
|
||||||
|
"displayName": "表示名",
|
||||||
|
"placeholder": "表示を入力してください",
|
||||||
|
"modelValue": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"prevNodeId": "ce07775d-9729-4516-a88c-78ee8f2f851e",
|
||||||
|
"nextNodeIds": [
|
||||||
|
[
|
||||||
|
"",
|
||||||
|
"399d7c04-5345-4bf6-8da3-d745df554524"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "399d7c04-5345-4bf6-8da3-d745df554524",
|
||||||
|
"name": "条件分岐",
|
||||||
|
"title": "電話番号入力形式チャック",
|
||||||
|
"inputPoint": "",
|
||||||
|
"outputPoints": [
|
||||||
|
"はい",
|
||||||
|
"いいえ"
|
||||||
|
],
|
||||||
|
"actionProps": [
|
||||||
|
{
|
||||||
|
"component": "InputText",
|
||||||
|
"props": {
|
||||||
|
"name": "displayName",
|
||||||
|
"displayName": "表示名",
|
||||||
|
"placeholder": "表示を入力してください",
|
||||||
|
"modelValue": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"prevNodeId": "0d18c3c9-abee-44e5-83eb-82074316219b",
|
||||||
|
"nextNodeIds": [
|
||||||
|
[
|
||||||
|
"いいえ",
|
||||||
|
"8173e6bc-3fa2-4403-b973-9368884e2dfa"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "8173e6bc-3fa2-4403-b973-9368884e2dfa",
|
||||||
|
"name": "エラー表示",
|
||||||
|
"title": "エラー表示して保存しない",
|
||||||
|
"inputPoint": "いいえ",
|
||||||
|
"outputPoints": [],
|
||||||
|
"actionProps": [
|
||||||
|
{
|
||||||
|
"component": "InputText",
|
||||||
|
"props": {
|
||||||
|
"name": "displayName",
|
||||||
|
"displayName": "表示名",
|
||||||
|
"placeholder": "表示を入力してください",
|
||||||
|
"modelValue": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"prevNodeId": "399d7c04-5345-4bf6-8da3-d745df554524",
|
||||||
|
"nextNodeIds": []
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user