diff --git a/backend/app/api/api_v1/routers/kintone.py b/backend/app/api/api_v1/routers/kintone.py index 0b595ae..eb8ee5e 100644 --- a/backend/app/api/api_v1/routers/kintone.py +++ b/backend/app/api/api_v1/routers/kintone.py @@ -217,7 +217,9 @@ def deoployappfromkintone(app:str,revision:str,c:config.KINTONE_ENV): 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} params = {"app":app} @@ -225,6 +227,44 @@ def getfieldsfromkintone(app:str,c:config.KINTONE_ENV): 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} + params = {"app":app} + url = f"{c.BASE_URL}{config.API_V1_STR}/form.json" + r = httpx.get(url,headers=headers,params=params) + return r.json() + + +def merge_kintone_fields(fields_response: dict, form_response: dict) -> dict: + fields_properties = fields_response.get('properties', {}) + form_properties = form_response.get('properties', []) + + merged_properties = {k: v for k, v in fields_properties.items()} + + for index, form_field in enumerate(form_properties): + code = form_field.get('code') + if code: + if code and code not in merged_properties: + merged_properties[code] = form_field + else: + element_id = form_field.get('elementId') + if element_id: + key = element_id + form_field['code']=element_id + form_field['label']=form_field.get('type') + # else: + # key = f"{form_field.get('type')}_{index}" + merged_properties[key] = form_field + + merged_response = { + 'revision': fields_response.get('revision', ''), + 'properties': merged_properties + } + + return merged_response + def analysefields(excel,kintone): updatefields={} addfields={} @@ -482,6 +522,15 @@ async def appfields(request:Request,app:str,env = Depends(getkintoneenv)): except Exception as e: raise APIException('kintone:appfields',request.url._url, f"Error occurred while get app fileds({env.DOMAIN_NAM}->{app}):",e) +@r.get("/allfields") +async def allfields(request:Request,app:str,env = Depends(getkintoneenv)): + try: + field_resp = getfieldsfromkintone(app,env) + form_resp = getformfromkintone(app,env) + return merge_kintone_fields(field_resp,form_resp) + except Exception as e: + raise APIException('kintone:allfields',request.url._url, f"Error occurred while get form fileds({env.DOMAIN_NAM}->{app}):",e) + @r.get("/appprocess") async def appprocess(request:Request,app:str,env = Depends(getkintoneenv)): try: diff --git a/backend/readme.md b/backend/readme.md index d487559..ed1a2ce 100644 --- a/backend/readme.md +++ b/backend/readme.md @@ -24,4 +24,8 @@ python -m venv env ```bash pip install -r requirements.txt - ``` \ No newline at end of file + ``` +4. backend 起動 + ```bash + uvicorn app.main:app --reload + ``` diff --git a/frontend/.env b/frontend/.env index 019b6f4..94ec5bc 100644 --- a/frontend/.env +++ b/frontend/.env @@ -1,3 +1,3 @@ -KAB_BACKEND_URL="https://kab-backend.azurewebsites.net/" -#KAB_BACKEND_URL="http://127.0.0.1:8000/" +#KAB_BACKEND_URL="https://kab-backend.azurewebsites.net/" +KAB_BACKEND_URL="http://127.0.0.1:8000/" diff --git a/frontend/src/components/FieldSelect.vue b/frontend/src/components/FieldSelect.vue index 0567d89..c6c9924 100644 --- a/frontend/src/components/FieldSelect.vue +++ b/frontend/src/components/FieldSelect.vue @@ -11,6 +11,7 @@ import { ref, onMounted, reactive, watchEffect } from 'vue' import { api } from 'boot/axios'; + export default { name: 'fieldSelect', props: { @@ -28,8 +29,9 @@ export default { type:Array, default:()=>[] }, - updateSelects: { - type: Function + fieldTypes:{ + type:Array, + default:()=>[] }, filter: String, }, @@ -43,29 +45,26 @@ export default { const pageSetting = ref({ sortBy: 'desc', descending: false, - page: 2, + page: 1, rowsPerPage: props.not_page ? 0 : 5 // rowsNumber: xx if getting data from a server }); const rows = reactive([]); const selected = ref(props.selectedFields && props.selectedFields.length>0?props.selectedFields:[]); - watchEffect(() => { - props.updateSelects(selected); - }); - onMounted(async () => { - const res = await api.get('api/v1/appfields', { + const url = props.fieldTypes.includes('SPACER')?'api/v1/allfields':'api/v1/appfields'; + const res = await api.get(url, { params: { app: props.appId } }); let fields = res.data.properties; - console.log(fields); Object.keys(fields).forEach((key) => { const fld = fields[key]; - // rows.push({name:fields[key].label,code:fields[key].code,type:fields[key].type}); - rows.push({ name: fld.label, ...fld }); + if(props.fieldTypes.length===0 || props.fieldTypes.includes(fld.type)){ + rows.push({ name: fld.code, ...fld }); + } }); isLoaded.value = true; }); diff --git a/frontend/src/components/right/AppFieldSelect.vue b/frontend/src/components/right/AppFieldSelect.vue index 3c16c73..aea39a5 100644 --- a/frontend/src/components/right/AppFieldSelect.vue +++ b/frontend/src/components/right/AppFieldSelect.vue @@ -81,7 +81,7 @@