backend変更マージ
This commit is contained in:
@@ -156,10 +156,10 @@ def getsettingfromexcel(df):
|
||||
des = df.iloc[2,2]
|
||||
return {"name":appname,"description":des}
|
||||
|
||||
def getsettingfromkintone(app:str,c:config.KINTONE_ENV):
|
||||
headers={config.API_V1_AUTH_KEY:c.API_V1_AUTH_VALUE}
|
||||
def getsettingfromkintone(app:str,env:config.KINTONE_ENV):
|
||||
headers={config.API_V1_AUTH_KEY:env.API_V1_AUTH_VALUE}
|
||||
params = {"app":app}
|
||||
url = f"{c.BASE_URL}{config.API_V1_STR}/app/settings.json"
|
||||
url = f"{env.BASE_URL}{config.API_V1_STR}/app/settings.json"
|
||||
r = httpx.get(url,headers=headers,params=params)
|
||||
return r.json()
|
||||
|
||||
@@ -171,24 +171,24 @@ def analysesettings(excel,kintone):
|
||||
updatesettings[key] = excel[key]
|
||||
return updatesettings
|
||||
|
||||
def createkintoneapp(name:str,c:config.KINTONE_ENV):
|
||||
headers={config.API_V1_AUTH_KEY:c.API_V1_AUTH_VALUE,"Content-Type": "application/json"}
|
||||
def createkintoneapp(name:str,env:config.KINTONE_ENV):
|
||||
headers={config.API_V1_AUTH_KEY:env.API_V1_AUTH_VALUE,"Content-Type": "application/json"}
|
||||
data = {"name":name}
|
||||
url = f"{c.BASE_URL}{config.API_V1_STR}/preview/app.json"
|
||||
url = f"{env.BASE_URL}{config.API_V1_STR}/preview/app.json"
|
||||
r = httpx.post(url,headers=headers,data=json.dumps(data))
|
||||
return r.json()
|
||||
|
||||
def updateappsettingstokintone(app:str,updates:dict,c:config.KINTONE_ENV):
|
||||
headers={config.API_V1_AUTH_KEY:c.API_V1_AUTH_VALUE,"Content-Type": "application/json"}
|
||||
url = f"{c.BASE_URL}{config.API_V1_STR}/preview/app/settings.json"
|
||||
def updateappsettingstokintone(app:str,updates:dict,env:config.KINTONE_ENV):
|
||||
headers={config.API_V1_AUTH_KEY:env.API_V1_AUTH_VALUE,"Content-Type": "application/json"}
|
||||
url = f"{env.BASE_URL}{config.API_V1_STR}/preview/app/settings.json"
|
||||
data = {"app":app}
|
||||
data.update(updates)
|
||||
r = httpx.put(url,headers=headers,data=json.dumps(data))
|
||||
return r.json()
|
||||
|
||||
def addfieldstokintone(app:str,fields:dict,c:config.KINTONE_ENV,revision:str = None):
|
||||
headers={config.API_V1_AUTH_KEY:c.API_V1_AUTH_VALUE,"Content-Type": "application/json"}
|
||||
url = f"{c.BASE_URL}{config.API_V1_STR}/preview/app/form/fields.json"
|
||||
def addfieldstokintone(app:str,fields:dict,env:config.KINTONE_ENV,revision:str = None):
|
||||
headers={config.API_V1_AUTH_KEY:env.API_V1_AUTH_VALUE,"Content-Type": "application/json"}
|
||||
url = f"{env.BASE_URL}{config.API_V1_STR}/preview/app/form/fields.json"
|
||||
if revision != None:
|
||||
data = {"app":app,"revision":revision,"properties":fields}
|
||||
else:
|
||||
@@ -197,43 +197,43 @@ def addfieldstokintone(app:str,fields:dict,c:config.KINTONE_ENV,revision:str = N
|
||||
r.raise_for_status()
|
||||
return r.json()
|
||||
|
||||
def updatefieldstokintone(app:str,revision:str,fields:dict,c:config.KINTONE_ENV):
|
||||
headers={config.API_V1_AUTH_KEY:c.API_V1_AUTH_VALUE,"Content-Type": "application/json"}
|
||||
url = f"{c.BASE_URL}{config.API_V1_STR}/preview/app/form/fields.json"
|
||||
def updatefieldstokintone(app:str,revision:str,fields:dict,env:config.KINTONE_ENV):
|
||||
headers={config.API_V1_AUTH_KEY:env.API_V1_AUTH_VALUE,"Content-Type": "application/json"}
|
||||
url = f"{env.BASE_URL}{config.API_V1_STR}/preview/app/form/fields.json"
|
||||
data = {"app":app,"properties":fields}
|
||||
r = httpx.put(url,headers=headers,data=json.dumps(data))
|
||||
return r.json()
|
||||
|
||||
def deletefieldsfromkintone(app:str,revision:str,fields:dict,c:config.KINTONE_ENV):
|
||||
headers={config.API_V1_AUTH_KEY:c.API_V1_AUTH_VALUE,"Content-Type": "application/json"}
|
||||
url = f"{c.BASE_URL}{config.API_V1_STR}/preview/app/form/fields.json"
|
||||
def deletefieldsfromkintone(app:str,revision:str,fields:dict,env:config.KINTONE_ENV):
|
||||
headers={config.API_V1_AUTH_KEY:env.API_V1_AUTH_VALUE,"Content-Type": "application/json"}
|
||||
url = f"{env.BASE_URL}{config.API_V1_STR}/preview/app/form/fields.json"
|
||||
params = {"app":app,"revision":revision,"fields":fields}
|
||||
#r = httpx.delete(url,headers=headers,content=json.dumps(params))
|
||||
r = httpx.request(method="DELETE",url=url,headers=headers,content=json.dumps(params))
|
||||
return r.json()
|
||||
|
||||
def deoployappfromkintone(app:str,revision:str,c:config.KINTONE_ENV):
|
||||
headers={config.API_V1_AUTH_KEY:c.API_V1_AUTH_VALUE,"Content-Type": "application/json"}
|
||||
url = f"{c.BASE_URL}{config.API_V1_STR}/preview/app/deploy.json"
|
||||
def deoployappfromkintone(app:str,revision:str,env:config.KINTONE_ENV):
|
||||
headers={config.API_V1_AUTH_KEY:env.API_V1_AUTH_VALUE,"Content-Type": "application/json"}
|
||||
url = f"{env.BASE_URL}{config.API_V1_STR}/preview/app/deploy.json"
|
||||
data = {"apps":[{"app":app,"revision":revision}],"revert": False}
|
||||
r = httpx.post(url,headers=headers,data=json.dumps(data))
|
||||
return r.json
|
||||
|
||||
# 既定項目に含めるアプリのフィールドのみ取得する
|
||||
# スペース、枠線、ラベルを含まない
|
||||
def getfieldsfromkintone(app:str,c:config.KINTONE_ENV):
|
||||
headers={config.API_V1_AUTH_KEY:c.API_V1_AUTH_VALUE}
|
||||
def getfieldsfromkintone(app:str,env:config.KINTONE_ENV):
|
||||
headers={config.API_V1_AUTH_KEY:env.API_V1_AUTH_VALUE}
|
||||
params = {"app":app}
|
||||
url = f"{c.BASE_URL}{config.API_V1_STR}/app/form/fields.json"
|
||||
url = f"{env.BASE_URL}{config.API_V1_STR}/app/form/fields.json"
|
||||
r = httpx.get(url,headers=headers,params=params)
|
||||
return r.json()
|
||||
|
||||
# フォームに配置するフィールドのみ取得する
|
||||
# スペース、枠線、ラベルも含める
|
||||
def getformfromkintone(app:str,c:config.KINTONE_ENV):
|
||||
headers={config.API_V1_AUTH_KEY:c.API_V1_AUTH_VALUE}
|
||||
def getformfromkintone(app:str,env:config.KINTONE_ENV):
|
||||
headers={config.API_V1_AUTH_KEY:env.API_V1_AUTH_VALUE}
|
||||
params = {"app":app}
|
||||
url = f"{c.BASE_URL}{config.API_V1_STR}/form.json"
|
||||
url = f"{env.BASE_URL}{config.API_V1_STR}/form.json"
|
||||
r = httpx.get(url,headers=headers,params=params)
|
||||
return r.json()
|
||||
|
||||
@@ -286,10 +286,10 @@ def analysefields(excel,kintone):
|
||||
|
||||
return {"update":updatefields,"add":addfields,"del":delfields}
|
||||
|
||||
def getprocessfromkintone(app:str,c:config.KINTONE_ENV):
|
||||
headers={config.API_V1_AUTH_KEY:c.API_V1_AUTH_VALUE}
|
||||
def getprocessfromkintone(app:str,env:config.KINTONE_ENV):
|
||||
headers={config.API_V1_AUTH_KEY:env.API_V1_AUTH_VALUE}
|
||||
params = {"app":app}
|
||||
url = f"{c.BASE_URL}{config.API_V1_STR}/app/status.json"
|
||||
url = f"{env.BASE_URL}{config.API_V1_STR}/app/status.json"
|
||||
r = httpx.get(url,headers=headers,params=params)
|
||||
return r.json()
|
||||
|
||||
@@ -374,24 +374,24 @@ def getkintoneorgs(c:config.KINTONE_ENV):
|
||||
r = httpx.get(url,headers=headers,params=params)
|
||||
return r.json()
|
||||
|
||||
def uploadkintonefiles(file,c:config.KINTONE_ENV):
|
||||
def uploadkintonefiles(file,env:config.KINTONE_ENV):
|
||||
if (file.endswith('alc_runtime.js') and config.DEPLOY_MODE == "DEV"):
|
||||
return {'fileKey':file}
|
||||
upload_files = {'file': open(file,'rb')}
|
||||
headers={config.API_V1_AUTH_KEY:c.API_V1_AUTH_VALUE}
|
||||
headers={config.API_V1_AUTH_KEY:env.API_V1_AUTH_VALUE}
|
||||
data ={'name':'file','filename':os.path.basename(file)}
|
||||
url = f"{c.BASE_URL}/k/v1/file.json"
|
||||
url = f"{env.BASE_URL}/k/v1/file.json"
|
||||
r = httpx.post(url,headers=headers,data=data,files=upload_files)
|
||||
#{"name":data['filename'],'fileKey':r['fileKey']}
|
||||
return r.json()
|
||||
|
||||
def updateappjscss(app,uploads,c:config.KINTONE_ENV):
|
||||
def updateappjscss(app,uploads,env:config.KINTONE_ENV):
|
||||
dsjs = []
|
||||
dscss = []
|
||||
#mobile側
|
||||
mbjs = []
|
||||
mbcss = []
|
||||
customize = getappcustomize(app, c)
|
||||
customize = getappcustomize(app, env)
|
||||
current_js = customize['desktop'].get('js', [])
|
||||
current_css = customize['desktop'].get('css', [])
|
||||
current_mobile_js = customize['mobile'].get('js', [])
|
||||
@@ -430,16 +430,16 @@ def updateappjscss(app,uploads,c:config.KINTONE_ENV):
|
||||
ds ={'js':dsjs,'css':dscss}
|
||||
mb ={'js':mbjs,'css':mbcss}
|
||||
data = {'app':app,'scope':'ALL','desktop':ds,'mobile':mb,'revision':customize["revision"]}
|
||||
headers={config.API_V1_AUTH_KEY:c.API_V1_AUTH_VALUE,"Content-Type": "application/json"}
|
||||
url = f"{c.BASE_URL}{config.API_V1_STR}/preview/app/customize.json"
|
||||
headers={config.API_V1_AUTH_KEY:env.API_V1_AUTH_VALUE,"Content-Type": "application/json"}
|
||||
url = f"{env.BASE_URL}{config.API_V1_STR}/preview/app/customize.json"
|
||||
print(json.dumps(data))
|
||||
r = httpx.put(url,headers=headers,data=json.dumps(data))
|
||||
return r.json()
|
||||
|
||||
#kintone カスタマイズ情報
|
||||
def getappcustomize(app,c:config.KINTONE_ENV):
|
||||
headers={config.API_V1_AUTH_KEY:c.API_V1_AUTH_VALUE}
|
||||
url = f"{c.BASE_URL}{config.API_V1_STR}/preview/app/customize.json"
|
||||
def getappcustomize(app,env:config.KINTONE_ENV):
|
||||
headers={config.API_V1_AUTH_KEY:env.API_V1_AUTH_VALUE}
|
||||
url = f"{env.BASE_URL}{config.API_V1_STR}/preview/app/customize.json"
|
||||
params = {"app":app}
|
||||
r = httpx.get(url,headers=headers,params=params)
|
||||
return r.json()
|
||||
@@ -451,9 +451,9 @@ def getTempPath(filename):
|
||||
fpath = os.path.join(rootdir,"Temp",filename)
|
||||
return fpath
|
||||
|
||||
def createappjs(domainid,app):
|
||||
def createappjs(domain_url,app):
|
||||
db = SessionLocal()
|
||||
flows = get_flows_by_app(db,domainid,app)
|
||||
flows = get_flows_by_app(db,domain_url,app)
|
||||
db.close()
|
||||
content={}
|
||||
for flow in flows:
|
||||
@@ -521,7 +521,7 @@ async def upload(request:Request,files:t.List[UploadFile] = File(...)):
|
||||
return {"files": [file.filename for file in files]}
|
||||
|
||||
@r.post("/updatejscss")
|
||||
async def jscss(request:Request,app:str,files:t.List[UploadFile] = File(...),env = Depends(getkintoneenv)):
|
||||
async def jscss(request:Request,app:str,files:t.List[UploadFile] = File(...),env:config.KINTONE_ENV = Depends(getkintoneenv)):
|
||||
try:
|
||||
jscs=[]
|
||||
for file in files:
|
||||
@@ -542,21 +542,21 @@ async def jscss(request:Request,app:str,files:t.List[UploadFile] = File(...),env
|
||||
raise APIException('kintone:updatejscss',request.url._url, f"Error occurred while update js/css {file.filename} is not an Excel file",e)
|
||||
|
||||
@r.get("/app")
|
||||
async def app(request:Request,app:str,c:config.KINTONE_ENV=Depends(getkintoneenv)):
|
||||
async def app(request:Request,app:str,env:config.KINTONE_ENV=Depends(getkintoneenv)):
|
||||
try:
|
||||
headers={config.API_V1_AUTH_KEY:c.API_V1_AUTH_VALUE}
|
||||
url = f"{c.BASE_URL}{config.API_V1_STR}/app.json"
|
||||
headers={config.API_V1_AUTH_KEY:env.API_V1_AUTH_VALUE}
|
||||
url = f"{env.BASE_URL}{config.API_V1_STR}/app.json"
|
||||
params ={"id":app}
|
||||
r = httpx.get(url,headers=headers,params=params)
|
||||
return r.json()
|
||||
except Exception as e:
|
||||
raise APIException('kintone:app',request.url._url, f"Error occurred while get app({c.DOMAIN_NAME}->{app}):",e)
|
||||
raise APIException('kintone:app',request.url._url, f"Error occurred while get app({env.DOMAIN_NAME}->{app}):",e)
|
||||
|
||||
@r.get("/allapps")
|
||||
async def allapps(request:Request,c:config.KINTONE_ENV=Depends(getkintoneenv)):
|
||||
async def allapps(request:Request,env:config.KINTONE_ENV=Depends(getkintoneenv)):
|
||||
try:
|
||||
headers={config.API_V1_AUTH_KEY:c.API_V1_AUTH_VALUE}
|
||||
url = f"{c.BASE_URL}{config.API_V1_STR}/apps.json"
|
||||
headers={config.API_V1_AUTH_KEY:env.API_V1_AUTH_VALUE}
|
||||
url = f"{env.BASE_URL}{config.API_V1_STR}/apps.json"
|
||||
offset = 0
|
||||
limit = 100
|
||||
all_apps = []
|
||||
@@ -572,17 +572,17 @@ async def allapps(request:Request,c:config.KINTONE_ENV=Depends(getkintoneenv)):
|
||||
return {"apps": all_apps}
|
||||
|
||||
except Exception as e:
|
||||
raise APIException('kintone:allapps', request.url._url, f"Error occurred while get allapps({c.DOMAIN_NAME}):", e)
|
||||
raise APIException('kintone:allapps', request.url._url, f"Error occurred while get allapps({env.DOMAIN_NAME}):", e)
|
||||
|
||||
@r.get("/appfields")
|
||||
async def appfields(request:Request,app:str,env = Depends(getkintoneenv)):
|
||||
async def appfields(request:Request,app:str,env:config.KINTONE_ENV = Depends(getkintoneenv)):
|
||||
try:
|
||||
return getfieldsfromkintone(app,env)
|
||||
except Exception as e:
|
||||
raise APIException('kintone:appfields',request.url._url, f"Error occurred while get app fileds({env.DOMAIN_NAME}->{app}):",e)
|
||||
|
||||
@r.get("/allfields")
|
||||
async def allfields(request:Request,app:str,env = Depends(getkintoneenv)):
|
||||
async def allfields(request:Request,app:str,env:config.KINTONE_ENV = Depends(getkintoneenv)):
|
||||
try:
|
||||
field_resp = getfieldsfromkintone(app,env)
|
||||
form_resp = getformfromkintone(app,env)
|
||||
@@ -591,38 +591,38 @@ async def allfields(request:Request,app:str,env = Depends(getkintoneenv)):
|
||||
raise APIException('kintone:allfields',request.url._url, f"Error occurred while get form fileds({env.DOMAIN_NAME}->{app}):",e)
|
||||
|
||||
@r.get("/appprocess")
|
||||
async def appprocess(request:Request,app:str,env = Depends(getkintoneenv)):
|
||||
async def appprocess(request:Request,app:str,env:config.KINTONE_ENV = Depends(getkintoneenv)):
|
||||
try:
|
||||
return getprocessfromkintone(app,env)
|
||||
except Exception as e:
|
||||
raise APIException('kintone:appprocess',request.url._url, f"Error occurred while get app process({env.DOMAIN_NAME}->{app}):",e)
|
||||
|
||||
@r.get("/alljscss")
|
||||
async def alljscs(request:Request,app:str,c:config.KINTONE_ENV=Depends(getkintoneenv)):
|
||||
async def alljscs(request:Request,app:str,env:config.KINTONE_ENV=Depends(getkintoneenv)):
|
||||
try:
|
||||
headers={config.API_V1_AUTH_KEY:c.API_V1_AUTH_VALUE}
|
||||
url = f"{c.BASE_URL}{config.API_V1_STR}/app/customize.json"
|
||||
headers={config.API_V1_AUTH_KEY:env.API_V1_AUTH_VALUE}
|
||||
url = f"{env.BASE_URL}{config.API_V1_STR}/app/customize.json"
|
||||
params = {"app":app}
|
||||
r = httpx.get(url,headers=headers,params=params)
|
||||
return r.json()
|
||||
except Exception as e:
|
||||
raise APIException('kintone:alljscss',request.url._url, f"Error occurred while get app js/css({c.DOMAIN_NAME}->{app}):",e)
|
||||
raise APIException('kintone:alljscss',request.url._url, f"Error occurred while get app js/css({env.DOMAIN_NAME}->{app}):",e)
|
||||
|
||||
@r.post("/createapp",)
|
||||
async def createapp(request:Request,name:str,c:config.KINTONE_ENV=Depends(getkintoneenv)):
|
||||
async def createapp(request:Request,name:str,env:config.KINTONE_ENV=Depends(getkintoneenv)):
|
||||
try:
|
||||
headers={config.API_V1_AUTH_KEY:c.API_V1_AUTH_VALUE,"Content-Type": "application/json"}
|
||||
headers={config.API_V1_AUTH_KEY:env.API_V1_AUTH_VALUE,"Content-Type": "application/json"}
|
||||
data = {"name":name}
|
||||
url = f"{c.BASE_URL}{config.API_V1_STR}/preview/app.json"
|
||||
url = f"{env.BASE_URL}{config.API_V1_STR}/preview/app.json"
|
||||
r = httpx.post(url,headers=headers,data=json.dumps(data))
|
||||
result = r.json()
|
||||
if result.get("app") != None:
|
||||
url = f"{c.BASE_URL}{config.API_V1_STR}/preview/app/deploy.json"
|
||||
url = f"{env.BASE_URL}{config.API_V1_STR}/preview/app/deploy.json"
|
||||
data = {"apps":[result],"revert": False}
|
||||
r = httpx.post(url,headers=headers,data=json.dumps(data))
|
||||
return r.json
|
||||
except Exception as e:
|
||||
raise APIException('kintone:createapp',request.url._url, f"Error occurred while create app({c.DOMAIN_NAME}->{name}):",e)
|
||||
raise APIException('kintone:createapp',request.url._url, f"Error occurred while create app({env.DOMAIN_NAME}->{name}):",e)
|
||||
|
||||
|
||||
@r.post("/createappfromexcel",)
|
||||
@@ -761,7 +761,7 @@ async def createjstokintone(request:Request,app:str,env:config.KINTONE_ENV = Dep
|
||||
try:
|
||||
jscs=[]
|
||||
files=[]
|
||||
files.append(createappjs(env.DOMAIN_ID, app))
|
||||
files.append(createappjs(env.BASE_URL, app))
|
||||
files.append(getTempPath('alc_runtime.js'))
|
||||
files.append(getTempPath('alc_runtime.css'))
|
||||
for file in files:
|
||||
|
||||
@@ -228,12 +228,14 @@ async def flow_create(
|
||||
)
|
||||
async def flow_edit(
|
||||
request: Request,
|
||||
flowid: str,
|
||||
flow: FlowIn,
|
||||
user=Depends(get_current_active_user),
|
||||
db=Depends(get_db),
|
||||
):
|
||||
try:
|
||||
return edit_flow(db, flow,user.id)
|
||||
domain = get_activedomain(db, user.id)
|
||||
return edit_flow(db,domain.url, flow,user.id)
|
||||
except Exception as e:
|
||||
raise APIException('platform:flow',request.url._url,f"Error occurred while edit flow:",e)
|
||||
|
||||
|
||||
@@ -239,14 +239,16 @@ def delete_flow(db: Session, flowid: str):
|
||||
|
||||
|
||||
def edit_flow(
|
||||
db: Session, flow: schemas.FlowIn,userid:int
|
||||
db: Session, domainurl: str, flow: schemas.FlowIn,userid:int
|
||||
) -> schemas.Flow:
|
||||
db_flow = get_flow(db, flow.flowid)
|
||||
if not db_flow:
|
||||
raise HTTPException(status.HTTP_404_NOT_FOUND, detail="Flow not found")
|
||||
#見つからない時新規作成
|
||||
return create_flow(db,domainurl,flow,userid)
|
||||
|
||||
db_flow.appid =flow.appid,
|
||||
db_flow.eventid=flow.eventid,
|
||||
db_flow.domainurl=flow.domainurl,
|
||||
db_flow.domainurl=domainurl,
|
||||
db_flow.name=flow.name,
|
||||
db_flow.content=flow.content,
|
||||
db_flow.updateuserid = userid,
|
||||
@@ -266,8 +268,8 @@ def get_flows(db: Session, flowid: str):
|
||||
|
||||
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")
|
||||
# if not flow:
|
||||
# raise HTTPException(status_code=404, detail="Data not found")
|
||||
return flow
|
||||
|
||||
def get_flows_by_app(db: Session,domainurl: str, appid: str):
|
||||
|
||||
@@ -67,6 +67,7 @@ class AppList(Base):
|
||||
domainurl: str
|
||||
appname: str
|
||||
appid:str
|
||||
updateuser: UserOut
|
||||
version:int
|
||||
|
||||
class AppVersion(BaseModel):
|
||||
@@ -75,6 +76,7 @@ class AppVersion(BaseModel):
|
||||
versionname: str
|
||||
comment:str
|
||||
appid:str
|
||||
|
||||
|
||||
class TokenData(BaseModel):
|
||||
id:int = 0
|
||||
@@ -122,7 +124,7 @@ class Action(BaseModel):
|
||||
|
||||
class FlowIn(BaseModel):
|
||||
flowid: str
|
||||
domainurl:str
|
||||
# domainurl:str
|
||||
appid: str
|
||||
appname:str
|
||||
eventid: str
|
||||
|
||||
@@ -1,12 +1,15 @@
|
||||
<template>
|
||||
<q-btn-dropdown
|
||||
color="primay"
|
||||
class="customized-disabled-btn"
|
||||
push
|
||||
flat
|
||||
no-caps
|
||||
icon="share"
|
||||
size="md"
|
||||
:label="userStore.currentDomain.domainName"
|
||||
:disable-dropdown="isUnclickable"
|
||||
:dropdown-icon="isUnclickable ? 'none' : ''"
|
||||
:disable="isUnclickable"
|
||||
>
|
||||
<q-list>
|
||||
<q-item v-for="domain in domains" :key="domain.domainName"
|
||||
@@ -26,18 +29,32 @@
|
||||
<script setup lang="ts" >
|
||||
import { IDomainInfo } from 'src/types/ActionTypes';
|
||||
import { useAuthStore,IUserState } from 'stores/useAuthStore';
|
||||
import { ref } from 'vue';
|
||||
import { ref, computed } from 'vue';
|
||||
import { useRoute } from 'vue-router';
|
||||
const userStore = useAuthStore();
|
||||
const route = useRoute()
|
||||
const domains = ref<IDomainInfo[]>([]);
|
||||
(async ()=>{
|
||||
domains.value = await userStore.getUserDomains();
|
||||
})();
|
||||
|
||||
const isUnclickable = computed(()=>{
|
||||
return route.path.startsWith('/FlowChart/') || domains.value === undefined || domains.value.length === 0;
|
||||
});
|
||||
|
||||
|
||||
const onItemClick=(domain:IDomainInfo)=>{
|
||||
console.log(domain);
|
||||
userStore.setCurrentDomain(domain);
|
||||
}
|
||||
</script>
|
||||
<style lang="scss">
|
||||
.q-btn.disabled.customized-disabled-btn {
|
||||
opacity: 1 !important;
|
||||
cursor: default !important;
|
||||
}
|
||||
|
||||
.q-btn.disabled.customized-disabled-btn * {
|
||||
cursor: default !important;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -39,26 +39,13 @@
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { ref, onMounted, reactive } from 'vue';
|
||||
import { ref, onMounted, watch, reactive } from 'vue';
|
||||
import { api } from 'boot/axios';
|
||||
import { useAuthStore } from 'stores/useAuthStore';
|
||||
import { useFlowEditorStore } from 'stores/flowEditor';
|
||||
import { router } from 'src/router';
|
||||
|
||||
interface IUser{
|
||||
first_name:string;
|
||||
last_name:string;
|
||||
email:string;
|
||||
}
|
||||
|
||||
interface IManagedApp{
|
||||
appid:string;
|
||||
appname:string;
|
||||
domainurl:string;
|
||||
version:string;
|
||||
user:IUser;
|
||||
update_time:string;
|
||||
}
|
||||
import { date } from 'quasar'
|
||||
import { IManagedApp } from 'src/types/AppTypes';
|
||||
|
||||
interface IAppDisplay{
|
||||
id:string;
|
||||
@@ -69,16 +56,16 @@ interface IAppDisplay{
|
||||
updatetime:string;
|
||||
}
|
||||
|
||||
|
||||
const authStore = useAuthStore();
|
||||
const numberStringSorting = (a: string, b: string) => parseInt(a, 10) - parseInt(b, 10);
|
||||
|
||||
const columns = [
|
||||
{ name: 'id', label: 'アプリID', field: 'id', align: 'left', sortable: true },
|
||||
{ name: 'id', label: 'アプリID', field: 'id', align: 'left', sortable: true, sort: numberStringSorting },
|
||||
{ name: 'name', label: 'アプリ名', field: 'name', align: 'left', sortable: true },
|
||||
{ name: 'url', label: 'URL', field: 'url', align: 'left', sortable: true },
|
||||
{ name: 'user', label: '最後更新者', field: 'user', align: 'left', sortable: true},
|
||||
{ name: 'updatetime', label: '最後更新日', field: 'updatetime', align: 'left', sortable: true},
|
||||
{ name: 'version', label: 'バージョン', field: 'version', align: 'left'},
|
||||
{ name: 'version', label: 'バージョン', field: 'version', align: 'left', sortable: true},
|
||||
{ name: 'actions', label: '操作', field: 'actions' }
|
||||
];
|
||||
|
||||
@@ -88,20 +75,19 @@ const filter = ref('');
|
||||
const rows = ref<IAppDisplay[]>([]);
|
||||
const store = useFlowEditorStore();
|
||||
|
||||
const tenantid = ref(authStore.currentDomain.id);
|
||||
|
||||
const getApps = async () => {
|
||||
loading.value = true;
|
||||
const result = await api.get('api/apps');
|
||||
rows.value = result.data.map((item:IManagedApp) => {
|
||||
rows.value = result.data.map((item: IManagedApp) => {
|
||||
return {
|
||||
id: item.appid,
|
||||
name: item.appname,
|
||||
url: `${item.domainurl}/k/${item.appid}`,
|
||||
user: `${item.user.first_name} ${item.user.last_name}` ,
|
||||
updatetime:item.update_time,
|
||||
version: item.version }
|
||||
});
|
||||
user: `${item.updateuser.first_name} ${item.updateuser.last_name}` ,
|
||||
updatetime:date.formatDate(item.update_time, 'YYYY/MM/DD HH:mm'),
|
||||
version: Number(item.version)
|
||||
}
|
||||
}).sort((a: IAppDisplay, b: IAppDisplay) => numberStringSorting(a.id, b.id)); // set default order
|
||||
loading.value = false;
|
||||
}
|
||||
|
||||
@@ -110,6 +96,10 @@ onMounted(async () => {
|
||||
await getApps();
|
||||
});
|
||||
|
||||
watch(() => authStore.currentDomain.id, async () => {
|
||||
await getApps();
|
||||
});
|
||||
|
||||
const addRow = () => {
|
||||
return
|
||||
}
|
||||
@@ -127,6 +117,7 @@ const editFlow = (app:IAppDisplay) => {
|
||||
appId: app.id,
|
||||
name: app.name
|
||||
});
|
||||
router.push('/FlowChart');
|
||||
store.selectFlow(undefined);
|
||||
router.push('/FlowChart/' + app.id);
|
||||
};
|
||||
</script>
|
||||
|
||||
@@ -3,11 +3,7 @@
|
||||
<q-layout container class="absolute-full shadow-2 rounded-borders">
|
||||
<div class="q-pa-sm q-gutter-sm ">
|
||||
<q-drawer side="left" :overlay="true" bordered v-model="drawerLeft" :show-if-above="false" elevated>
|
||||
<div class="flex-center fixed-top app-selector">
|
||||
<AppSelector />
|
||||
</div>
|
||||
|
||||
<div class="flex-center absolute-full" style="padding-top:65px;padding-left:15px;padding-right:15px;">
|
||||
<div class="flex-center absolute-full" style="padding:15px">
|
||||
<q-scroll-area class="fit" :horizontal-thumb-style="{ opacity: '0' }">
|
||||
<EventTree />
|
||||
</q-scroll-area>
|
||||
@@ -42,8 +38,24 @@
|
||||
</div>
|
||||
<q-btn flat dense round
|
||||
:icon="drawerLeft?'keyboard_double_arrow_left':'keyboard_double_arrow_right'"
|
||||
:style="[drawerLeft?{'left':'300px'}:{'left':'0px'}]"
|
||||
:style="{'left': fixedLeftPosition}"
|
||||
@click="drawerLeft=!drawerLeft" class="expand" />
|
||||
<q-breadcrumbs v-if="store.appInfo" class="fixed q-pl-md"
|
||||
:style="{'left': fixedLeftPosition}">
|
||||
<q-breadcrumbs-el icon="widgets" label="アプリ管理" to="/app" />
|
||||
<q-breadcrumbs-el>
|
||||
<template v-slot>
|
||||
<a class="full-width" :href="!store.appInfo?'':`${authStore.currentDomain.kintoneUrl}/k/${store.appInfo?.appId}`" target="_blank" title="Kiontoneへ">
|
||||
{{ store.appInfo?.name }}
|
||||
<q-icon
|
||||
class="q-ma-xs"
|
||||
name="open_in_new"
|
||||
color="grey-9"
|
||||
/>
|
||||
</a>
|
||||
</template>
|
||||
</q-breadcrumbs-el>
|
||||
</q-breadcrumbs>
|
||||
<div class="q-pa-md q-gutter-sm" :style="{minWidth: minPanelWidth}">
|
||||
<div class="flowchart" v-if="store.currentFlow" :style="[drawerLeft?{paddingLeft:'300px'}:{}]">
|
||||
<node-item v-if="rootNode!==undefined" :key="rootNode.id" :isSelected="rootNode === store.activeNode"
|
||||
@@ -63,31 +75,40 @@
|
||||
</template>
|
||||
<action-select ref="appDg" name="model" :filter="filter" type="single" @clearFilter="onClearFilter" ></action-select>
|
||||
</ShowDialog>
|
||||
|
||||
<q-inner-loading
|
||||
:showing="initLoading"
|
||||
color="primary"
|
||||
label="読み込み中..."
|
||||
/>
|
||||
</q-page>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { ref, reactive, computed, onMounted } from 'vue';
|
||||
import { useRoute } from 'vue-router';
|
||||
import { IActionNode, ActionNode, IActionFlow, ActionFlow, RootAction, IActionProperty } from 'src/types/ActionTypes';
|
||||
import { IManagedApp } from 'src/types/AppTypes';
|
||||
import { storeToRefs } from 'pinia';
|
||||
import { useFlowEditorStore } from 'stores/flowEditor';
|
||||
import { useAuthStore } from 'stores/useAuthStore';
|
||||
import { api } from 'boot/axios';
|
||||
|
||||
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';
|
||||
import { useQuasar } from 'quasar';
|
||||
|
||||
const deployLoading = ref(false);
|
||||
const saveLoading = ref(false);
|
||||
const initLoading = ref(true);
|
||||
const drawerLeft = ref(false);
|
||||
const $q = useQuasar();
|
||||
const store = useFlowEditorStore();
|
||||
const authStore = useAuthStore();
|
||||
const route = useRoute()
|
||||
|
||||
const appDg = ref();
|
||||
const prevNodeIfo = ref({
|
||||
@@ -111,6 +132,9 @@ const minPanelWidth=computed(()=>{
|
||||
return "300px";
|
||||
}
|
||||
});
|
||||
const fixedLeftPosition = computed(()=>{
|
||||
return drawerLeft.value?"300px":"0px";
|
||||
});
|
||||
|
||||
const addNode = (node: IActionNode, inputPoint: string) => {
|
||||
if (drawerRight.value) {
|
||||
@@ -290,10 +314,24 @@ const onSaveAllFlow= async ()=>{
|
||||
}
|
||||
|
||||
const fetchData = async () => {
|
||||
initLoading.value = true;
|
||||
if (store.appInfo === undefined && route?.params?.id !== undefined) {
|
||||
const { appid, appname } = await fetchAppById(route.params.id as string);
|
||||
store.setApp({
|
||||
appId: appid,
|
||||
name: appname
|
||||
});
|
||||
};
|
||||
await store.loadFlow();
|
||||
initLoading.value = false
|
||||
drawerLeft.value = true;
|
||||
}
|
||||
|
||||
const fetchAppById = async(id: string) => {
|
||||
const result = await api.get('api/apps');
|
||||
return result.data.find((item: IManagedApp) => item.appid === id ) as IManagedApp;
|
||||
}
|
||||
|
||||
const onClearFilter=()=>{
|
||||
filter.value='';
|
||||
}
|
||||
@@ -305,11 +343,6 @@ onMounted(() => {
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.app-selector {
|
||||
padding: 15px;
|
||||
z-index: 999;
|
||||
}
|
||||
|
||||
.flowchart {
|
||||
padding-top: 10px;
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ const routes: RouteRecordRaw[] = [
|
||||
component: () => import('pages/LoginPage.vue')
|
||||
},
|
||||
{
|
||||
path:'/FlowChart',
|
||||
path:'/FlowChart/:id',
|
||||
component:()=>import('layouts/MainLayout.vue'),
|
||||
children:[
|
||||
{path:'',component:()=>import('pages/FlowChart.vue')}
|
||||
|
||||
@@ -128,6 +128,7 @@ export const useFlowEditorStore = defineStore('flowEditor', {
|
||||
const jsonData = {
|
||||
flowid: isNew ? flow.createNewId() : flow.id,
|
||||
appid: this.appInfo?.appId,
|
||||
appname: this.appInfo?.name,
|
||||
eventid: root?.name,
|
||||
name: root?.subTitle,
|
||||
content: JSON.stringify(flow),
|
||||
|
||||
14
frontend/src/types/AppTypes.ts
Normal file
14
frontend/src/types/AppTypes.ts
Normal file
@@ -0,0 +1,14 @@
|
||||
interface IUser {
|
||||
first_name: string;
|
||||
last_name: string;
|
||||
email: string;
|
||||
}
|
||||
|
||||
export interface IManagedApp {
|
||||
appid: string;
|
||||
appname: string;
|
||||
domainurl: string;
|
||||
version: string;
|
||||
updateuser: IUser;
|
||||
update_time: string;
|
||||
}
|
||||
Reference in New Issue
Block a user