diff --git a/addin.js b/addin.js new file mode 100644 index 0000000..8b49e96 --- /dev/null +++ b/addin.js @@ -0,0 +1,99 @@ +"use strict"; +const events =[ + "app.record.index.show", + "app.record.index.edit.show" +] + +kintone.events.on(events,(event)=>{ + onRecordIndexEvent(event); + return event; +}); + +function onRecordIndexEvent(event){ + console.log(event.type,event); + return event; +} + + +//レコード表示 +kintone.events.on('app.record.detail.show', (event) => { + showRecode(event); + return event; +}); + +//レコード編集時 +kintone.events.on('app.record.edit.show', (event) => { + showRecodeEdit(event); + return event; +}); + +//新規作成 +kintone.events.on('app.record.create.show', (event) => { + newRecord(event); + return event; +}); + +function showRecode(event){ + console.log("app.record.detail.show",event); + let fld=kintone.app.record.getFieldElement('txtname'); + fld.style.backgroundColor="red"; +} + +function newRecord(event){ + console.log("app.record.create.show",event); + //kintone.app.record.setFieldShown("名前",false); + //let fld = kintone.app.record.getFieldElement("txtname"); + //kintone.app.record.setFieldShown("txtname",false); + kintone.events.on('app.record.create.change.radio', (event)=>{ + radioChnage(event); + return event; + }); +} + +function showList(event){ + console.log("app.record.index.show",event); +} + +function showRecodeEdit(event){ + kintone.events.on('app.record.edit.change.radio', (event)=>{ + radioChnage(event); + return event; + }); + + let record = event.record; + let statusValue =record["radio"].value; + switch (statusValue) { + case "非表示": + kintone.app.record.setFieldShown("txtname",false); + break; + case "無効": + kintone.app.record.setFieldShown("txtname",true); + event.record.txtname.disabled = true; + break; + default: + event.record.txtname.disabled = false; + kintone.app.record.setFieldShown("txtname",true); + break; + } + return event; +} + +function radioChnage(event){ + let changeField =event.changes.field; + let statusValue =changeField.value; + let record = event.record; + switch (statusValue) { + case "非表示": + kintone.app.record.setFieldShown("txtname",false); + break; + case "無効": + kintone.app.record.setFieldShown("txtname",true); + record.txtname.disabled = true; + break; + default: + record.txtname.disabled = false; + kintone.app.record.setFieldShown("txtname",true); + break; + } + return event; +} \ No newline at end of file diff --git a/backend/Temp/日報設計書.xlsx b/backend/Temp/日報設計書.xlsx index b9f01e5..7898c31 100644 Binary files a/backend/Temp/日報設計書.xlsx and b/backend/Temp/日報設計書.xlsx differ diff --git a/backend/app/api/api_v1/routers/kintone.py b/backend/app/api/api_v1/routers/kintone.py index b8a98bc..3a78c61 100644 --- a/backend/app/api/api_v1/routers/kintone.py +++ b/backend/app/api/api_v1/routers/kintone.py @@ -264,6 +264,15 @@ async def allapps(): r = httpx.get(url,headers=headers) return r.json() +@r.get("/app") +async def app(app:str): + headers={c.API_V1_AUTH_KEY:c.API_V1_AUTH_VALUE} + url = f"{c.BASE_URL}{c.API_V1_STR}/app.json" + params ={"id":app} + r = httpx.get(url,headers=headers,params=params) + return r.json() + + @r.get("/appfields") async def appfields(app:str): return getfieldsfromkintone(app) diff --git a/backend/app/core/auth.py b/backend/app/core/auth.py index 0b404b2..7af62c4 100644 --- a/backend/app/core/auth.py +++ b/backend/app/core/auth.py @@ -31,7 +31,6 @@ async def get_current_user( raise credentials_exception return user - async def get_current_active_user( current_user: models.User = Depends(get_current_user), ): diff --git a/frontend/README.md b/frontend/README.md index 9a49b60..6d6096c 100644 --- a/frontend/README.md +++ b/frontend/README.md @@ -33,8 +33,12 @@ yarn format # or npm run format ``` - - +### Install Quasar/cli +```bash +$ yarn global add @quasar/cli +# or +$ npm install -g @quasar/cli +``` ### Build the app for production ```bash diff --git a/frontend/package-lock.json b/frontend/package-lock.json index e05472f..82d6da2 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -9,6 +9,7 @@ "version": "0.0.1", "dependencies": { "@quasar/extras": "^1.16.4", + "axios": "^1.4.0", "quasar": "^2.6.0", "vue": "^3.0.0", "vue-router": "^4.0.0" @@ -1135,6 +1136,11 @@ "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", "dev": true }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, "node_modules/autoprefixer": { "version": "10.4.14", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", @@ -1168,6 +1174,16 @@ "postcss": "^8.1.0" } }, + "node_modules/axios": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", + "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -1565,6 +1581,17 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -1776,6 +1803,14 @@ "node": ">=8" } }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -2783,6 +2818,38 @@ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", "dev": true }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -3618,7 +3685,6 @@ "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, "engines": { "node": ">= 0.6" } @@ -3627,7 +3693,6 @@ "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, "dependencies": { "mime-db": "1.52.0" }, @@ -4094,6 +4159,11 @@ "node": ">= 0.10" } }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, "node_modules/punycode": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", diff --git a/frontend/package.json b/frontend/package.json index b0d52a8..f126579 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -14,6 +14,7 @@ }, "dependencies": { "@quasar/extras": "^1.16.4", + "axios": "^1.4.0", "quasar": "^2.6.0", "vue": "^3.0.0", "vue-router": "^4.0.0" diff --git a/frontend/quasar.config.js b/frontend/quasar.config.js index fb7b8b0..bcb0fcd 100644 --- a/frontend/quasar.config.js +++ b/frontend/quasar.config.js @@ -32,8 +32,7 @@ module.exports = configure(function (/* ctx */) { // --> boot files are part of "main.js" // https://v2.quasar.dev/quasar-cli-vite/boot-files boot: [ - - + 'axios' ], // https://v2.quasar.dev/quasar-cli-vite/quasar-config-js#css diff --git a/frontend/src/boot/axios.ts b/frontend/src/boot/axios.ts new file mode 100644 index 0000000..1e22234 --- /dev/null +++ b/frontend/src/boot/axios.ts @@ -0,0 +1,34 @@ +import { boot } from 'quasar/wrappers'; +import axios, { AxiosInstance } from 'axios'; + +declare module '@vue/runtime-core' { + interface ComponentCustomProperties { + $axios: AxiosInstance; + $api: AxiosInstance; + } +} + +// Be careful when using SSR for cross-request state pollution +// due to creating a Singleton instance here; +// If any client changes this (global) instance, it might be a +// good idea to move this instance creation inside of the +// "export default () => {}" function below (which runs individually +// for each client) +const api:AxiosInstance = axios.create({ baseURL: process.env.KAB_BACKEND_URL }); + +export default boot(({ app }) => { + // for use inside Vue files (Options API) through this.$axios and this.$api + + app.config.globalProperties.$axios = axios; + // ^ ^ ^ this will allow you to use this.$axios (for Vue Options API form) + // so you won't necessarily have to import axios in each vue file + + app.config.globalProperties.$api = api; + // ^ ^ ^ this will allow you to use this.$api (for Vue Options API form) + // so you can easily perform requests against your app's API + app.provide('$api',api); + app.provide('$axios',axios); + +}); + +export { api }; diff --git a/frontend/src/components/AppInfo.vue b/frontend/src/components/AppInfo.vue new file mode 100644 index 0000000..22cc51f --- /dev/null +++ b/frontend/src/components/AppInfo.vue @@ -0,0 +1,101 @@ + + + diff --git a/frontend/src/components/DocUpload.vue b/frontend/src/components/DocUpload.vue index cfede92..65c9eb9 100644 --- a/frontend/src/components/DocUpload.vue +++ b/frontend/src/components/DocUpload.vue @@ -15,10 +15,8 @@ diff --git a/frontend/src/pages/RuleEditor.vue b/frontend/src/pages/RuleEditor.vue index 8f6ff1b..c274ec9 100644 --- a/frontend/src/pages/RuleEditor.vue +++ b/frontend/src/pages/RuleEditor.vue @@ -7,7 +7,7 @@ -
+
+
+ +
+ + + diff --git a/frontend/yarn.lock b/frontend/yarn.lock index 33f5678..df4c7cc 100644 --- a/frontend/yarn.lock +++ b/frontend/yarn.lock @@ -591,6 +591,11 @@ async@^3.2.3: resolved "https://registry.npmjs.org/async/-/async-3.2.4.tgz" integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + autoprefixer@^10.4.2: version "10.4.14" resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz" @@ -603,6 +608,15 @@ autoprefixer@^10.4.2: picocolors "^1.0.0" postcss-value-parser "^4.2.0" +axios@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz" + integrity sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA== + dependencies: + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" @@ -823,6 +837,13 @@ color-name@~1.1.4: resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + commander@^2.19.0: version "2.20.3" resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" @@ -967,6 +988,11 @@ define-lazy-prop@^2.0.0: resolved "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz" integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + depd@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" @@ -1367,6 +1393,20 @@ flatted@^3.1.0: resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz" integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== +follow-redirects@^1.15.0: + version "1.15.2" + resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz" + integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + forwarded@0.2.0: version "0.2.0" resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" @@ -1854,7 +1894,7 @@ micromatch@^4.0.4: resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mime-types@~2.1.24, mime-types@~2.1.34: +mime-types@^2.1.12, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== @@ -2149,6 +2189,11 @@ proxy-addr@~2.0.7: forwarded "0.2.0" ipaddr.js "1.9.1" +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + punycode@^2.1.0: version "2.3.0" resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz"