ダイアログに検索追加

This commit is contained in:
2024-04-15 16:54:33 +09:00
parent 5349c46225
commit ecb90e7120
11 changed files with 1162 additions and 1026 deletions

File diff suppressed because one or more lines are too long

View File

@@ -3,13 +3,15 @@
<div v-if="!isLoaded" class="spinner flex flex-center"> <div v-if="!isLoaded" class="spinner flex flex-center">
<q-spinner color="primary" size="3em" /> <q-spinner color="primary" size="3em" />
</div> </div>
<q-table v-else row-key="name" :selection="type" v-model:selected="selected" :columns="columns" :rows="rows" <q-table v-else row-key="index" :selection="type" v-model:selected="selected" :columns="columns" :rows="rows"
class="action-table" class="action-table"
flat bordered flat bordered
virtual-scroll virtual-scroll
:pagination="pagination" :pagination="pagination"
:rows-per-page-options="[0]" :rows-per-page-options="[0]"
/> :filter="filter"
>
</q-table>
</div> </div>
</template> </template>
<script> <script>
@@ -20,9 +22,10 @@ export default {
name: 'actionSelect', name: 'actionSelect',
props: { props: {
name: String, name: String,
type: String type: String,
filter:String
}, },
setup() { setup(props) {
const isLoaded=ref(false); const isLoaded=ref(false);
const columns = [ const columns = [
{ name: 'name', required: true,label: 'アクション名',align: 'left',field: 'name',sortable: true}, { name: 'name', required: true,label: 'アクション名',align: 'left',field: 'name',sortable: true},
@@ -32,9 +35,9 @@ export default {
const rows = reactive([]) const rows = reactive([])
onMounted(async () => { onMounted(async () => {
const res =await api.get('api/actions'); const res =await api.get('api/actions');
res.data.forEach((item) => res.data.forEach((item,index) =>
{ {
rows.push({name:item.name,desc:item.title,outputPoints:item.outputpoints,property:item.property}); rows.push({index,name:item.name,desc:item.title,outputPoints:item.outputpoints,property:item.property});
}); });
isLoaded.value=true; isLoaded.value=true;
}); });
@@ -54,5 +57,6 @@ export default {
<style lang="scss"> <style lang="scss">
.action-table{ .action-table{
height: 100%; height: 100%;
max-height: 540px;
} }
</style> </style>

View File

@@ -3,7 +3,19 @@
<div v-if="!isLoaded" class="spinner flex flex-center"> <div v-if="!isLoaded" class="spinner flex flex-center">
<q-spinner color="primary" size="3em" /> <q-spinner color="primary" size="3em" />
</div> </div>
<q-table v-else :selection="type" v-model:selected="selected" :columns="columns" :rows="rows" > <q-table v-else
class="app-table"
:selection="type"
row-key="id"
v-model:selected="selected"
flat bordered
virtual-scroll
:columns="columns"
:rows="rows"
:pagination="pagination"
:rows-per-page-options="[0]"
:filter="filter"
>
<template v-slot:body-cell-description="props"> <template v-slot:body-cell-description="props">
<q-td :props="props"> <q-td :props="props">
<q-scroll-area class="description-cell"> <q-scroll-area class="description-cell">
@@ -23,7 +35,8 @@ export default {
name: 'AppSelect', name: 'AppSelect',
props: { props: {
name: String, name: String,
type: String type: String,
filter:String
}, },
setup() { setup() {
const columns = [ const columns = [
@@ -63,7 +76,10 @@ export default {
columns, columns,
rows, rows,
selected: ref([]), selected: ref([]),
isLoaded isLoaded,
pagination:ref({
rowsPerPage:10
})
} }
}, },
@@ -81,4 +97,8 @@ export default {
min-height: 300px; min-height: 300px;
min-width: 400px; min-width: 400px;
} }
.app-table{
height: 100%;
max-height: 600px;
}
</style> </style>

View File

@@ -1,5 +1,5 @@
<template> <template>
<show-dialog v-model:visible="showflg" name="条件エディタ" @close="closeDg" width="60vw" height="60vh"> <show-dialog v-model:visible="showflg" name="条件エディタ" @close="closeDg" min-width="60vw" min-height="60vh">
<template v-slot:toolbar> <template v-slot:toolbar>
<q-btn flat round dense icon="more_vert" > <q-btn flat round dense icon="more_vert" >
<q-menu auto-close anchor="bottom start"> <q-menu auto-close anchor="bottom start">

View File

@@ -14,7 +14,14 @@
</template> </template>
</q-field> </q-field>
<show-dialog v-model:visible="show" name="条件設定項目一覧" @close="closeDg" width="600px"> <show-dialog v-model:visible="show" name="条件設定項目一覧" @close="closeDg" width="600px">
<condition-objects ref="appDg" name="フィールド" type="single" :appId="store.appInfo?.appId" :vars="vars"></condition-objects> <template v-slot:toolbar>
<q-input dense debounce="200" v-model="filter" placeholder="検索" clearable>
<template v-slot:before>
<q-icon name="search" />
</template>
</q-input>
</template>
<condition-objects ref="appDg" name="フィールド" type="single" :filter="filter" :appId="store.appInfo?.appId" :vars="vars"></condition-objects>
</show-dialog> </show-dialog>
</template> </template>
@@ -48,7 +55,7 @@
if(store.currentFlow!==undefined && store.activeNode!==undefined ){ if(store.currentFlow!==undefined && store.activeNode!==undefined ){
vars =store.currentFlow.getVarNames(store.activeNode); vars =store.currentFlow.getVarNames(store.activeNode);
} }
const filter=ref('');
const showDg = () => { const showDg = () => {
show.value = true; show.value = true;
}; };
@@ -71,7 +78,8 @@
closeDg, closeDg,
selectedObject, selectedObject,
vars:reactive(vars), vars:reactive(vars),
isSelected isSelected,
filter
}; };
} }
}); });

View File

@@ -19,7 +19,7 @@
<q-tab-panels v-model="tab" animated> <q-tab-panels v-model="tab" animated>
<q-tab-panel name="fields"> <q-tab-panel name="fields">
<field-list v-model="selected" type="single" :appId="appId"></field-list> <field-list v-model="selected" type="single" :filter="filter" :appId="appId"></field-list>
</q-tab-panel> </q-tab-panel>
<q-tab-panel name="vars" > <q-tab-panel name="vars" >
@@ -44,7 +44,8 @@ export default {
name: String, name: String,
type: String, type: String,
appId: Number, appId: Number,
vars: Array vars: Array,
filter:String
}, },
setup(props) { setup(props) {

View File

@@ -3,6 +3,7 @@
<q-table flat bordered :loading="!isLoaded" row-key="name" :selection="type" <q-table flat bordered :loading="!isLoaded" row-key="name" :selection="type"
:selected="modelValue" :selected="modelValue"
@update:selected="$emit('update:modelValue', $event)" @update:selected="$emit('update:modelValue', $event)"
:filter="filter"
:columns="columns" :rows="rows" /> :columns="columns" :rows="rows" />
</div> </div>
</template> </template>
@@ -16,7 +17,8 @@ export default {
name: String, name: String,
type: String, type: String,
appId: Number, appId: Number,
modelValue:Array modelValue:Array,
filter:String
}, },
emits:[ emits:[
'update:modelValue' 'update:modelValue'

View File

@@ -1,7 +1,7 @@
<template> <template>
<!-- <div class="q-pa-md q-gutter-sm" > --> <!-- <div class="q-pa-md q-gutter-sm" > -->
<q-dialog :model-value="visible" persistent bordered> <q-dialog :model-value="visible" persistent bordered>
<q-card :style="{minWidth : width}" > <q-card :style="cardStyle" >
<q-toolbar class="bg-grey-4"> <q-toolbar class="bg-grey-4">
<q-toolbar-title>{{ name }}</q-toolbar-title> <q-toolbar-title>{{ name }}</q-toolbar-title>
<q-space></q-space> <q-space></q-space>
@@ -11,7 +11,7 @@
<q-card-section> <q-card-section>
<!-- <div class="text-h6">{{ name }}</div> --> <!-- <div class="text-h6">{{ name }}</div> -->
</q-card-section> </q-card-section>
<q-card-section class="q-pt-none" :style="{...(height? {minHeight:height}:{}) }"> <q-card-section class="q-pt-none" :style="sectionStyle">
<slot></slot> <slot></slot>
</q-card-section> </q-card-section>
<q-card-actions align="right" class="text-primary"> <q-card-actions align="right" class="text-primary">
@@ -23,14 +23,16 @@
<!-- </div> --> <!-- </div> -->
</template> </template>
<script> <script>
import {computed} from 'vue'
export default { export default {
name: 'ShowDialog', name: 'ShowDialog',
props: { props: {
name:String, name:String,
visible: Boolean, visible: Boolean,
width:String, width:String,
height:String height:String,
minWidth:String,
minHeight:String
}, },
emits: [ emits: [
'close' 'close'
@@ -41,8 +43,20 @@ export default {
context.emit('close', val); context.emit('close', val);
} }
const cardStyle = computed(() => ({
minWidth: props.minWidth,
width: props.width
}));
const sectionStyle = computed(() => ({
height: props.height,
minHeight: props.minHeight
}));
return { return {
CloseDialogue CloseDialogue,
cardStyle,
sectionStyle
} }
}, },
} }

View File

@@ -22,8 +22,15 @@
></q-btn> ></q-btn>
</div> </div>
</div> </div>
<ShowDialog v-model:visible="showSelectApp" name="アプリ選択" @close="closeDg" width="600px" > <ShowDialog v-model:visible="showSelectApp" name="アプリ選択" @close="closeDg" min-width="680px" min-height="600px" height="600px">
<AppSelect ref="appDg" name="アプリ" type="single"></AppSelect> <template v-slot:toolbar>
<q-input dense debounce="300" v-model="filter" placeholder="検索" clearable>
<template v-slot:before>
<q-icon name="search" />
</template>
</q-input>
</template>
<AppSelect ref="appDg" name="アプリ" type="single" :filter="filter"></AppSelect>
</ShowDialog> </ShowDialog>
</template> </template>
@@ -73,7 +80,8 @@ export default defineComponent({
showSelectApp, showSelectApp,
showAppDialog, showAppDialog,
closeDg, closeDg,
appDg appDg,
filter:ref('')
} }
} }
}); });

View File

@@ -1 +1,25 @@
// app global css in SCSS form // app global css in SCSS form
::-webkit-scrollbar {
height: 12px;
width: 14px;
background: transparent;
z-index: 12;
overflow: visible;
}
::-webkit-scrollbar-thumb {
width: 10px;
background-color: #c1c1c1;
border-radius: 10px;
z-index: 12;
border: 4px solid rgba(0, 0, 0, 0);
background-clip: padding-box;
transition: background-color .32s ease-in-out;
margin: 4px;
min-height: 32px;
min-width: 32px;
}
::-webkit-scrollbar-thumb:hover {
background: #c1c1c1;
}

View File

@@ -33,8 +33,15 @@
</div> </div>
<PropertyPanel :actionNode="store.activeNode" v-model:drawerRight="drawerRight"></PropertyPanel> <PropertyPanel :actionNode="store.activeNode" v-model:drawerRight="drawerRight"></PropertyPanel>
</q-layout> </q-layout>
<ShowDialog v-model:visible="showAddAction" name="アクション" @close="closeDg" width="350px"> <ShowDialog v-model:visible="showAddAction" name="アクション" @close="closeDg" min-width="500px" min-height="500px">
<action-select ref="appDg" name="model" type="single"></action-select> <template v-slot:toolbar>
<q-input dense debounce="200" v-model="filter" placeholder="検索" clearable>
<template v-slot:before>
<q-icon name="search" />
</template>
</q-input>
</template>
<action-select ref="appDg" name="model" :filter="filter" type="single"></action-select>
</ShowDialog> </ShowDialog>
</q-page> </q-page>
@@ -70,6 +77,7 @@ const prevNodeIfo = ref({
// const refFlow = ref<ActionFlow|null>(null); // const refFlow = ref<ActionFlow|null>(null);
const showAddAction = ref(false); const showAddAction = ref(false);
const drawerRight = ref(false); const drawerRight = ref(false);
const filter=ref("");
const model = ref(""); const model = ref("");
const addActionNode = (action: IActionNode) => { const addActionNode = (action: IActionNode) => {
// refFlow.value?.actionNodes.push(action); // refFlow.value?.actionNodes.push(action);