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/index.html b/frontend/index.html index 43d25b2..b50159a 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -2,7 +2,6 @@ <%= productName %> - diff --git a/frontend/package.json b/frontend/package.json index 5016fbf..3343684 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -17,8 +17,9 @@ }, "dependencies": { "@quasar/extras": "^1.16.4", + "@vueuse/core": "^10.9.0", "axios": "^1.4.0", - "pinia": "^2.1.6", + "pinia": "^2.1.7", "quasar": "^2.6.0", "uuid": "^9.0.0", "vue": "^3.0.0", diff --git a/frontend/src/boot/error-handler.ts b/frontend/src/boot/error-handler.ts index 57253da..93be80b 100644 --- a/frontend/src/boot/error-handler.ts +++ b/frontend/src/boot/error-handler.ts @@ -4,6 +4,7 @@ import { Router } from 'vue-router'; import { App } from 'vue'; export default boot(({ app, router }: { app: App; router: Router }) => { + document.documentElement.lang="ja-JP"; app.config.errorHandler = (err: any, instance: any, info: string) => { if (err.response && err.response.status === 401) { // 認証エラーの場合再ログインする diff --git a/frontend/src/components/ConditionEditor/ConditionEditor.vue b/frontend/src/components/ConditionEditor/ConditionEditor.vue index ef47543..eef9401 100644 --- a/frontend/src/components/ConditionEditor/ConditionEditor.vue +++ b/frontend/src/components/ConditionEditor/ConditionEditor.vue @@ -1,5 +1,5 @@ @@ -88,9 +88,9 @@ .condition-object{ min-width: 200px; max-height: 40px; - padding: 2px; + margin: 0 2px; } .selected-obj{ - margin: 0px; + margin: 0 2px; } diff --git a/frontend/src/components/ConditionEditor/NodeCondition.vue b/frontend/src/components/ConditionEditor/NodeCondition.vue index c684992..943fdab 100644 --- a/frontend/src/components/ConditionEditor/NodeCondition.vue +++ b/frontend/src/components/ConditionEditor/NodeCondition.vue @@ -66,7 +66,7 @@
-
+
- + @@ -30,7 +30,7 @@
- diff --git a/frontend/src/components/main/NodeItem.vue b/frontend/src/components/main/NodeItem.vue index 6474a18..0e4cb8b 100644 --- a/frontend/src/components/main/NodeItem.vue +++ b/frontend/src/components/main/NodeItem.vue @@ -205,7 +205,7 @@ export default defineComponent({ */ const varName =(node:IActionNode)=>{ const prop = node.actionProps.find((prop) => prop.props.name === "verName"); - return prop?.props.modelValue; + return prop?.props.modelValue.name; }; const copyFlow=()=>{ context.emit('copyFlow', props.actionNode); diff --git a/frontend/src/components/right/AppFieldSelect.vue b/frontend/src/components/right/AppFieldSelect.vue index 3c16c73..53760f0 100644 --- a/frontend/src/components/right/AppFieldSelect.vue +++ b/frontend/src/components/right/AppFieldSelect.vue @@ -23,9 +23,9 @@ - - {{ item.label }} - + + {{ item.label }} + @@ -81,8 +81,8 @@
- +
@@ -99,9 +99,7 @@ - - + @@ -128,7 +126,7 @@ interface IAppFields{ export default defineComponent({ inheritAttrs:false, - name: 'FieldInput', + name: 'AppFieldSelect', components: { ShowDialog, FieldSelect, @@ -154,6 +152,10 @@ export default defineComponent({ selectType:{ type:String, default:'single' + }, + fieldTypes:{ + type:Array, + default:()=>[] } }, setup(props, { emit }) { @@ -197,13 +199,6 @@ export default defineComponent({ selectedField.value.fields = fieldDlg.value.selected; } }; - const updateExternalSelectAppInfo = (newAppinfo:IApp) => { - // selectedField.value.app = newAppinfo - } - - const updateItems = (newFields:IField[]) => { - // selectedField.value.fields = newFields - } const removeField=(index:number)=>{ selectedField.value.fields.splice(index,1); @@ -223,9 +218,7 @@ export default defineComponent({ selectedField, showSelectApp, isSelected, - updateExternalSelectAppInfo, filter: ref(), - updateItems, clear, fieldFilter: ref(), removeField diff --git a/frontend/src/components/right/ConditionInput.vue b/frontend/src/components/right/ConditionInput.vue index 2b5d552..966339a 100644 --- a/frontend/src/components/right/ConditionInput.vue +++ b/frontend/src/components/right/ConditionInput.vue @@ -1,12 +1,12 @@ - + @@ -54,6 +51,14 @@ export default defineComponent({ type: String, default: '', }, + selectType:{ + type:String, + default:'single' + }, + fieldTypes:{ + type:Array, + default:()=>[] + }, hint: { type: String, default: '', diff --git a/frontend/src/components/right/InputText.vue b/frontend/src/components/right/InputText.vue index a14e06d..cb6ee83 100644 --- a/frontend/src/components/right/InputText.vue +++ b/frontend/src/components/right/InputText.vue @@ -1,10 +1,7 @@