Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| ef6cc44d50 | |||
| 1914a8b1d6 | |||
| 2353f414b3 | |||
| e1a6af7e57 | |||
| be05c0879f | |||
| 66d91f01b7 |
@@ -0,0 +1,10 @@
|
||||
<mxfile host="65bd71144e">
|
||||
<diagram id="UMFNb7zEleFpzTH4EAp9" name="ページ1">
|
||||
<mxGraphModel dx="1202" dy="612" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0"/>
|
||||
<mxCell id="1" parent="0"/>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
BIN
document/Kintone自動化ツール画面設計.xlsx
Normal file
BIN
document/Kintone自動化ツール画面設計.xlsx
Normal file
Binary file not shown.
File diff suppressed because one or more lines are too long
1479
document/Kintone自動化ツール設計図2.drawio
Normal file
1479
document/Kintone自動化ツール設計図2.drawio
Normal file
File diff suppressed because one or more lines are too long
38
frontend/src/components/ActionNode.vue
Normal file
38
frontend/src/components/ActionNode.vue
Normal file
@@ -0,0 +1,38 @@
|
||||
<template>
|
||||
<div class="q-pa-md" style="max-width: 350px">
|
||||
<q-expansion-item
|
||||
class="shadow-1 overflow-hidden"
|
||||
style="border-radius: 30px"
|
||||
icon="explore"
|
||||
label="Counter"
|
||||
@show="startCounting"
|
||||
@hide="stopCounting"
|
||||
header-class="bg-primary text-white"
|
||||
expand-icon-class="text-white"
|
||||
>
|
||||
<q-card>
|
||||
<q-card-section>
|
||||
Counting: <q-badge color="secondary">{{ counter }}</q-badge>.
|
||||
Will only count when opened, using the show/hide events to control count timer.
|
||||
</q-card-section>
|
||||
</q-card>
|
||||
</q-expansion-item>
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts">
|
||||
import { defineComponent} from "vue"
|
||||
export default defineComponent({
|
||||
props:{
|
||||
icon:String,
|
||||
|
||||
},
|
||||
setup() {
|
||||
return {
|
||||
|
||||
}
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<style lang="">
|
||||
|
||||
</style>
|
||||
30
frontend/src/components/ActionPanel.vue
Normal file
30
frontend/src/components/ActionPanel.vue
Normal file
@@ -0,0 +1,30 @@
|
||||
<template>
|
||||
<div>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts">
|
||||
import {defineComponent,reactive} from 'vue';
|
||||
import {KintoneEvent} from "../models/kintone";
|
||||
export default defineComponent({
|
||||
setup(props, ctx) {
|
||||
const events = reactive<KintoneEvent[]>(
|
||||
[
|
||||
{
|
||||
screen:"レコード追加画面",
|
||||
type:"app.record.create.show",
|
||||
name:"レコード追加画面を表示した後"
|
||||
},
|
||||
{
|
||||
screen:"レコード追加画面",
|
||||
type:"app.record.create.show",
|
||||
name:"レコード追加画面を表示した後"
|
||||
}
|
||||
]
|
||||
);
|
||||
},
|
||||
});
|
||||
</script>
|
||||
<style lang="scss">
|
||||
|
||||
</style>
|
||||
13
frontend/src/components/PropertyList.vue
Normal file
13
frontend/src/components/PropertyList.vue
Normal file
@@ -0,0 +1,13 @@
|
||||
<template>
|
||||
<div>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
export default {
|
||||
|
||||
}
|
||||
</script>
|
||||
<style lang="">
|
||||
|
||||
</style>
|
||||
0
frontend/src/components/main/ActionNode.vue
Normal file
0
frontend/src/components/main/ActionNode.vue
Normal file
@@ -1,57 +0,0 @@
|
||||
<template>
|
||||
<div>
|
||||
<div v-for="(item, index) in componentData" :key="index">
|
||||
<component :is="item.component" v-bind="item.props" v-model="item.props.modelValue"></component>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import { defineComponent } from 'vue';
|
||||
import InputText from '../right/InputText.vue';
|
||||
import SelectBox from '../right/SelectBox.vue';
|
||||
import DatePicker from '../right/DatePicker.vue';
|
||||
import FieldInput from '../right/FieldInput.vue';
|
||||
|
||||
export default defineComponent({
|
||||
name: 'ActionProperty',
|
||||
components: {
|
||||
InputText,
|
||||
SelectBox,
|
||||
DatePicker,
|
||||
FieldInput
|
||||
},
|
||||
props: {
|
||||
jsonData: {
|
||||
type: Object,
|
||||
required: true,
|
||||
},
|
||||
jsonValue:{
|
||||
type: Object,
|
||||
required: false,
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
componentData() {
|
||||
return this.jsonData.elements.map((element: any) => {
|
||||
if(this.jsonValue != undefined )
|
||||
{
|
||||
if(this.jsonValue.hasOwnProperty(element.props.name))
|
||||
{
|
||||
element.props.modelValue = this.jsonValue[element.props.name];
|
||||
}
|
||||
else
|
||||
{
|
||||
element.props.modelValue = '';
|
||||
}
|
||||
|
||||
}
|
||||
return {
|
||||
component: element.component,
|
||||
props: element.props,
|
||||
};
|
||||
});
|
||||
},
|
||||
},
|
||||
});
|
||||
</script>
|
||||
@@ -1,45 +0,0 @@
|
||||
<template>
|
||||
|
||||
<q-input v-model="selectedDate" :label="placeholder" mask="date" :rules="['date']">
|
||||
<template v-slot:append>
|
||||
<q-icon name="event" class="cursor-pointer">
|
||||
<q-popup-proxy cover transition-show="scale" transition-hide="scale">
|
||||
<q-date v-model="selectedDate">
|
||||
<div class="row items-center justify-end">
|
||||
<q-btn v-close-popup label="Close" color="primary" flat />
|
||||
</div>
|
||||
</q-date>
|
||||
</q-popup-proxy>
|
||||
</q-icon>
|
||||
</template>
|
||||
</q-input>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import { defineComponent, ref ,watchEffect} from 'vue';
|
||||
|
||||
export default defineComponent({
|
||||
name: 'DatePicker',
|
||||
props: {
|
||||
placeholder: {
|
||||
type: String,
|
||||
default: '',
|
||||
},
|
||||
modelValue: {
|
||||
type: String,
|
||||
default: '',
|
||||
},
|
||||
},
|
||||
setup(props, { emit }) {
|
||||
const selectedDate = ref(props.modelValue);
|
||||
|
||||
watchEffect(() => {
|
||||
emit('update:modelValue', selectedDate.value);
|
||||
});
|
||||
|
||||
return {
|
||||
selectedDate
|
||||
};
|
||||
}
|
||||
});
|
||||
</script>
|
||||
@@ -1,62 +0,0 @@
|
||||
<template>
|
||||
<q-input v-model="selectedField" :label="placeholder">
|
||||
<template v-slot:append>
|
||||
<q-icon name="search" class="cursor-pointer" @click="showDg"/>
|
||||
</template>
|
||||
</q-input>
|
||||
<show-dialog v-model:visible="show" name="フィールド一覧" @close="closeDg">
|
||||
<field-select ref="appDg" name="フィールド" type="single" :appId="1"></field-select>
|
||||
</show-dialog>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import { defineComponent, ref ,watchEffect} from 'vue';
|
||||
import ShowDialog from '../ShowDialog.vue';
|
||||
import FieldSelect from '../FieldSelect.vue';
|
||||
|
||||
export default defineComponent({
|
||||
name: 'FieldInput',
|
||||
components: {
|
||||
ShowDialog,
|
||||
FieldSelect,
|
||||
},
|
||||
props: {
|
||||
placeholder: {
|
||||
type: String,
|
||||
default: '',
|
||||
},
|
||||
modelValue: {
|
||||
type: String,
|
||||
default: '',
|
||||
},
|
||||
},
|
||||
|
||||
setup(props, { emit }) {
|
||||
const appDg = ref();
|
||||
const show = ref(false);
|
||||
const selectedField = ref(props.modelValue);
|
||||
|
||||
const showDg = () => {
|
||||
show.value = true;
|
||||
};
|
||||
|
||||
const closeDg = (val:string) => {
|
||||
if (val == 'OK') {
|
||||
selectedField.value = appDg.value.selected[0].name;
|
||||
}
|
||||
};
|
||||
|
||||
watchEffect(() => {
|
||||
emit('update:modelValue', selectedField.value);
|
||||
});
|
||||
|
||||
return {
|
||||
appDg,
|
||||
show,
|
||||
showDg,
|
||||
closeDg,
|
||||
selectedField,
|
||||
};
|
||||
}
|
||||
});
|
||||
</script>
|
||||
@@ -1,33 +0,0 @@
|
||||
<template>
|
||||
<q-input :label="placeholder" v-model="inputValue"/>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import { defineComponent,ref,watchEffect } from 'vue';
|
||||
|
||||
export default defineComponent({
|
||||
name: 'InputText',
|
||||
props: {
|
||||
placeholder: {
|
||||
type: String,
|
||||
default: '',
|
||||
},
|
||||
modelValue: {
|
||||
type: String,
|
||||
default: '',
|
||||
},
|
||||
},
|
||||
|
||||
setup(props, { emit }) {
|
||||
const inputValue = ref(props.modelValue);
|
||||
|
||||
watchEffect(() => {
|
||||
emit('update:modelValue', inputValue.value);
|
||||
});
|
||||
|
||||
return {
|
||||
inputValue,
|
||||
};
|
||||
},
|
||||
});
|
||||
</script>
|
||||
@@ -1,36 +0,0 @@
|
||||
<template>
|
||||
<q-select v-model="selectedValue" :label="placeholder" :options="options"/>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import { defineComponent,ref,watchEffect } from 'vue';
|
||||
|
||||
export default defineComponent({
|
||||
name: 'SelectBox',
|
||||
props: {
|
||||
placeholder: {
|
||||
type: String,
|
||||
default: '',
|
||||
},
|
||||
options: {
|
||||
type: Array,
|
||||
required: true,
|
||||
},
|
||||
modelValue: {
|
||||
type: String,
|
||||
default: '',
|
||||
},
|
||||
},
|
||||
setup(props, { emit }) {
|
||||
const selectedValue = ref(props.modelValue);
|
||||
|
||||
watchEffect(() => {
|
||||
emit('update:modelValue', selectedValue.value);
|
||||
});
|
||||
|
||||
return {
|
||||
selectedValue
|
||||
};
|
||||
},
|
||||
});
|
||||
</script>
|
||||
8
frontend/src/models/kintone.ts
Normal file
8
frontend/src/models/kintone.ts
Normal file
@@ -0,0 +1,8 @@
|
||||
|
||||
|
||||
export interface KintoneEvent{
|
||||
screen:string,
|
||||
type:string,
|
||||
name:string
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
</div>
|
||||
<div style="min-height: 100vh;">
|
||||
<div class="q-pa-md">
|
||||
<q-btn-dropdown split color="primary" label="ルール新規作成" size="lg">
|
||||
<!-- <q-btn-dropdown split color="primary" label="ルール新規作成" size="lg">
|
||||
<q-list>
|
||||
<q-item v-for="action in actions" clickable v-close-popup @click="onItemClick" :key="action">
|
||||
<q-item-section>
|
||||
@@ -17,10 +17,10 @@
|
||||
</q-item-section>
|
||||
</q-item>
|
||||
</q-list>
|
||||
</q-btn-dropdown>
|
||||
</q-btn-dropdown> -->
|
||||
</div>
|
||||
<div class="q-pa-md">
|
||||
<q-select v-model="model" :options="options" label="Standard"/>
|
||||
<q-select v-model="model" :options="options" label="ダイアログ選択"/>
|
||||
<q-btn :label="model+'選択'" color="primary" @click="showDg()" />
|
||||
<show-dialog v-model:visible="show" :name="model" @close="closeDg">
|
||||
<template v-if="model=='アプリ'">
|
||||
|
||||
@@ -1,96 +0,0 @@
|
||||
<template>
|
||||
<div class="q-pa-md q-gutter-sm">
|
||||
<q-btn label="プロパティ" icon="keyboard_arrow_right" color="primary" @click="open('right')" />
|
||||
<!-- <q-btn label="Readプロパティ" icon="keyboard_arrow_right" color="primary" @click="write('right')" /> -->
|
||||
|
||||
<q-dialog v-model="dialog" :position="position">
|
||||
<q-card class="column full-height" style="width: 300px">
|
||||
<q-card-section>
|
||||
<div class="text-h6">プロパティ</div>
|
||||
</q-card-section>
|
||||
|
||||
|
||||
<q-card-section class="col q-pt-none">
|
||||
<ActionProperty :jsonData="jsonData" :jsonValue="jsonValue"/>
|
||||
</q-card-section>
|
||||
|
||||
<q-card-actions align="right" class="bg-white text-teal">
|
||||
<q-btn flat label="Save" v-close-popup @click="save"/>
|
||||
<q-btn flat label="Cancel" v-close-popup />
|
||||
</q-card-actions>
|
||||
</q-card>
|
||||
</q-dialog>
|
||||
</div>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { ref,onMounted } from 'vue'
|
||||
import ActionProperty from 'components/right/ActionProperty.vue';
|
||||
const dialog = ref(false)
|
||||
const position = ref('top')
|
||||
|
||||
const jsonData = {
|
||||
elements: [
|
||||
{
|
||||
component: 'InputText',
|
||||
props: {
|
||||
name:'1',
|
||||
placeholder: 'Enter some text',
|
||||
modelValue: '',
|
||||
},
|
||||
},
|
||||
{
|
||||
component: 'SelectBox',
|
||||
props: {
|
||||
name:'2',
|
||||
placeholder: 'Choose an option',
|
||||
modelValue: '',
|
||||
options: [
|
||||
'option1',
|
||||
'option2',
|
||||
'option3'
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
component: 'DatePicker',
|
||||
props: {
|
||||
name:'3',
|
||||
placeholder: 'Choose a date',
|
||||
modelValue: '',
|
||||
},
|
||||
},
|
||||
{
|
||||
component: 'FieldInput',
|
||||
props: {
|
||||
name:'4',
|
||||
placeholder: 'Choose a field',
|
||||
modelValue: '',
|
||||
},
|
||||
},
|
||||
]
|
||||
};
|
||||
|
||||
let jsonValue = {
|
||||
1:'abc',
|
||||
2:'option2',
|
||||
3:'2023/09/04',
|
||||
4:'6666'
|
||||
};
|
||||
|
||||
const open = (pos:string) => {
|
||||
position.value = pos
|
||||
dialog.value = true
|
||||
};
|
||||
|
||||
const save = async () =>{
|
||||
|
||||
jsonData.elements.forEach(property => {
|
||||
if(jsonValue != undefined)
|
||||
{
|
||||
jsonValue[property.props.name] = property.props.modelValue;
|
||||
}
|
||||
});
|
||||
console.log(jsonValue);
|
||||
|
||||
}
|
||||
</script>
|
||||
@@ -1,101 +0,0 @@
|
||||
<template>
|
||||
<div class="q-pa-md q-gutter-sm">
|
||||
<q-btn label="プロパティ" icon="keyboard_arrow_right" color="primary" @click="drawerRight = !drawerRight" />
|
||||
<!-- <q-btn label="Readプロパティ" icon="keyboard_arrow_right" color="primary" @click="write('right')" /> -->
|
||||
<q-drawer
|
||||
side="right"
|
||||
v-model="drawerRight"
|
||||
show-if-above
|
||||
bordered
|
||||
:width="301"
|
||||
:breakpoint="500"
|
||||
class="bg-grey-3"
|
||||
>
|
||||
<q-card class="column full-height" style="width: 300px">
|
||||
<q-card-section>
|
||||
<div class="text-h6">プロパティ</div>
|
||||
</q-card-section>
|
||||
|
||||
|
||||
<q-card-section class="col q-pt-none">
|
||||
<ActionProperty :jsonData="jsonData" :jsonValue="jsonValue" v-if="drawerRight"/>
|
||||
</q-card-section>
|
||||
|
||||
<q-card-actions align="right" class="bg-white text-teal">
|
||||
<q-btn flat label="Save" @click="save"/>
|
||||
<q-btn flat label="Cancel" @click="cancel" />
|
||||
</q-card-actions>
|
||||
</q-card>
|
||||
</q-drawer>
|
||||
</div>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { reactive, ref } from 'vue'
|
||||
import ActionProperty from 'components/right/ActionProperty.vue';
|
||||
const drawerRight = ref(false);
|
||||
const jsonData = {
|
||||
elements: [
|
||||
{
|
||||
component: 'InputText',
|
||||
props: {
|
||||
name:'1',
|
||||
placeholder: 'Enter some text',
|
||||
modelValue: '',
|
||||
},
|
||||
},
|
||||
{
|
||||
component: 'SelectBox',
|
||||
props: {
|
||||
name:'2',
|
||||
placeholder: 'Choose an option',
|
||||
modelValue: '',
|
||||
options: [
|
||||
'option1',
|
||||
'option2',
|
||||
'option3'
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
component: 'DatePicker',
|
||||
props: {
|
||||
name:'3',
|
||||
placeholder: 'Choose a date',
|
||||
modelValue: '',
|
||||
},
|
||||
},
|
||||
{
|
||||
component: 'FieldInput',
|
||||
props: {
|
||||
name:'4',
|
||||
placeholder: 'Choose a field',
|
||||
modelValue: '',
|
||||
},
|
||||
},
|
||||
]
|
||||
};
|
||||
|
||||
let jsonValue = {
|
||||
1:'abc',
|
||||
2:'option2',
|
||||
3:'2023/09/04',
|
||||
4:'6666'
|
||||
};
|
||||
|
||||
const cancel = async() =>{
|
||||
drawerRight.value = false;
|
||||
}
|
||||
|
||||
const save = async () =>{
|
||||
|
||||
jsonData.elements.forEach(property => {
|
||||
if(jsonValue != undefined)
|
||||
{
|
||||
jsonValue[property.props.name] = property.props.modelValue;
|
||||
}
|
||||
});
|
||||
console.log(jsonValue);
|
||||
drawerRight.value=false;
|
||||
|
||||
}
|
||||
</script>
|
||||
@@ -16,17 +16,6 @@ const routes: RouteRecordRaw[] = [
|
||||
component: () => import('layouts/MainLayout.vue'),
|
||||
children: [{ path: '', component: () => import('pages/testQursar.vue') }],
|
||||
},
|
||||
,
|
||||
{
|
||||
path: '/flow/',
|
||||
component: () => import('layouts/MainLayout.vue'),
|
||||
children: [{ path: '', component: () => import('pages/testFlow.vue') }],
|
||||
},
|
||||
{
|
||||
path: '/right/',
|
||||
component: () => import('layouts/MainLayout.vue'),
|
||||
children: [{ path: '', component: () => import('pages/testRight.vue') }],
|
||||
},
|
||||
|
||||
// Always leave this as last one,
|
||||
// but you can also remove it
|
||||
|
||||
@@ -1,6 +1,17 @@
|
||||
{
|
||||
"extends": "@quasar/app-vite/tsconfig-preset",
|
||||
"compilerOptions": {
|
||||
"baseUrl": "."
|
||||
"baseUrl": ".",
|
||||
"paths": {
|
||||
"src/*": ["src/*"],
|
||||
"app/*": ["*"],
|
||||
"components/*": ["src/components/*"],
|
||||
"layouts/*": ["src/layouts/*"],
|
||||
"pages/*": ["src/pages/*"],
|
||||
"assets/*": ["src/assets/*"],
|
||||
"boot/*": ["src/boot/*"],
|
||||
"stores/*": ["src/stores/*"],
|
||||
"models/*":["scr/models/*"]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user