539 lines
15 KiB
TypeScript
539 lines
15 KiB
TypeScript
import { TableOptions } from '@nocobase/database';
|
|
|
|
export default {
|
|
name: 'automations',
|
|
model: 'AutomationModel',
|
|
title: '自动化',
|
|
internal: true,
|
|
developerMode: true,
|
|
fields: [
|
|
{
|
|
interface: 'string',
|
|
type: 'string',
|
|
name: 'title',
|
|
title: '自动化名称',
|
|
required: true,
|
|
component: {
|
|
showInTable: true,
|
|
showInDetail: true,
|
|
showInForm: true,
|
|
},
|
|
},
|
|
{
|
|
interface: 'boolean',
|
|
type: 'boolean',
|
|
name: 'enabled',
|
|
title: '启用',
|
|
component: {
|
|
showInTable: true,
|
|
showInDetail: true,
|
|
showInForm: true,
|
|
},
|
|
},
|
|
{
|
|
interface: 'textarea',
|
|
type: 'text',
|
|
name: 'description',
|
|
title: '描述',
|
|
component: {
|
|
showInTable: true,
|
|
showInDetail: true,
|
|
showInForm: true,
|
|
},
|
|
},
|
|
{
|
|
interface: 'select',
|
|
type: 'string',
|
|
title: '触发方式',
|
|
name: 'type',
|
|
required: true,
|
|
createOnly: true,
|
|
dataSource: [
|
|
{
|
|
label: '数据表事件',
|
|
children: [
|
|
{
|
|
value: 'collections:afterCreate',
|
|
label: '新增数据时',
|
|
},
|
|
{
|
|
value: 'collections:afterUpdate',
|
|
label: '更新数据时',
|
|
},
|
|
{
|
|
value: 'collections:afterCreateOrUpdate',
|
|
label: '新增或更新数据时',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
label: '定时任务',
|
|
children: [
|
|
{
|
|
value: 'schedule',
|
|
label: '自定义时间触发',
|
|
},
|
|
{
|
|
value: 'collections:schedule',
|
|
label: '根据日期字段触发',
|
|
},
|
|
],
|
|
},
|
|
],
|
|
component: {
|
|
showInTable: true,
|
|
showInDetail: true,
|
|
showInForm: true,
|
|
"x-linkages": [
|
|
{
|
|
"type": "value:visible",
|
|
"target": "changed",
|
|
"condition": "{{ ['collections:afterUpdate', 'collections:afterCreateOrUpdate'].indexOf($self.value) !== -1 }}"
|
|
},
|
|
{
|
|
"type": "value:visible",
|
|
"target": "startTime",
|
|
"condition": "{{ ['schedule', 'collections:schedule'].indexOf($self.value) !== -1 }}"
|
|
},
|
|
// {
|
|
// "type": "value:visible",
|
|
// "target": "endDateField",
|
|
// "condition": "{{ ['collections:schedule'].indexOf($self.value) !== -1 }}"
|
|
// },
|
|
// {
|
|
// "type": "value:visible",
|
|
// "target": "startTime",
|
|
// "condition": "{{ ['schedule'].indexOf($self.value) !== -1 }}"
|
|
// },
|
|
// {
|
|
// "type": "value:visible",
|
|
// "target": "endTime",
|
|
// "condition": "{{ ['schedule'].indexOf($self.value) !== -1 }}"
|
|
// },
|
|
{
|
|
"type": "value:visible",
|
|
"target": "cron",
|
|
"condition": "{{ ['collections:schedule', 'schedule'].indexOf($self.value) !== -1 }}"
|
|
},
|
|
// {
|
|
// "type": "value:visible",
|
|
// "target": "endMode",
|
|
// "condition": "{{ ['collections:schedule', 'schedule'].indexOf($self.value) !== -1 }}"
|
|
// },
|
|
{
|
|
"type": "value:visible",
|
|
"target": "collection",
|
|
"condition": "{{ $self.value && $self.value !== 'schedule' }}"
|
|
},
|
|
{
|
|
"type": "value:visible",
|
|
"target": "filter",
|
|
"condition": "{{ $self.value && $self.value !== 'schedule' }}"
|
|
},
|
|
{
|
|
"type": "value:schema",
|
|
"target": "startTime",
|
|
"condition": "{{ $self.value === 'collections:schedule' }}",
|
|
schema: {
|
|
title: '开始日期字段',
|
|
'x-component-props': {
|
|
automationType: '{{ $self.value }}'
|
|
},
|
|
},
|
|
},
|
|
{
|
|
"type": "value:schema",
|
|
"target": "endMode",
|
|
"condition": "{{ ['collections:schedule', 'schedule'].indexOf($self.value) !== -1 }}",
|
|
schema: {
|
|
'x-component-props': {
|
|
automationType: '{{ $self.value }}'
|
|
},
|
|
},
|
|
},
|
|
{
|
|
"type": "value:schema",
|
|
"target": "endTime",
|
|
"condition": "{{ $self.value === 'collections:schedule' }}",
|
|
schema: {
|
|
title: '结束日期字段',
|
|
'x-component-props': {
|
|
automationType: '{{ $self.value }}'
|
|
},
|
|
},
|
|
},
|
|
{
|
|
"type": "value:schema",
|
|
"target": "startTime",
|
|
"condition": "{{ $self.value === 'schedule' }}",
|
|
schema: {
|
|
title: '开始时间',
|
|
'x-component-props': {
|
|
automationType: '{{ $self.value }}'
|
|
},
|
|
},
|
|
},
|
|
{
|
|
"type": "value:schema",
|
|
"target": "endTime",
|
|
"condition": "{{ $self.value === 'schedule' }}",
|
|
schema: {
|
|
title: '结束时间',
|
|
'x-component-props': {
|
|
automationType: '{{ $self.value }}'
|
|
},
|
|
},
|
|
},
|
|
|
|
// {
|
|
// "type": "value:state",
|
|
// "target": "cron",
|
|
// "condition": "{{ ['collections:schedule', 'schedule'].indexOf($self.value) !== -1 }}",
|
|
// state: {
|
|
// value: 'none',
|
|
// },
|
|
// },
|
|
// {
|
|
// "type": "value:state",
|
|
// "target": "endMode",
|
|
// "condition": "{{ ['collections:schedule', 'schedule'].indexOf($self.value) !== -1 }}",
|
|
// state: {
|
|
// value: 'none',
|
|
// },
|
|
// }
|
|
],
|
|
},
|
|
},
|
|
{
|
|
interface: 'linkTo',
|
|
type: 'belongsTo',
|
|
name: 'collection',
|
|
target: 'collections',
|
|
targetKey: 'name',
|
|
title: '触发数据表',
|
|
labelField: 'title',
|
|
valueField: 'name',
|
|
required: true,
|
|
multiple: false,
|
|
createOnly: true,
|
|
component: {
|
|
type: 'remoteSelect',
|
|
showInDetail: true,
|
|
showInForm: true,
|
|
'x-component-props': {
|
|
mode: 'multiple',
|
|
resourceName: 'collections',
|
|
labelField: 'title',
|
|
valueField: 'name',
|
|
},
|
|
"x-linkages": [
|
|
{
|
|
"type": "value:visible",
|
|
"target": "changed",
|
|
"condition": "{{ $self.value && ['collections:afterUpdate', 'collections:afterCreateOrUpdate'].indexOf($form.values.type) !== -1 }}"
|
|
},
|
|
// {
|
|
// "type": "value:visible",
|
|
// "target": "startTime",
|
|
// "condition": "{{ $self.value && ['collections:schedule'].indexOf($form.values.type) !== -1 }}"
|
|
// },
|
|
{
|
|
type: "value:schema",
|
|
target: "changed",
|
|
// condition: "{{ $self.value }}",
|
|
schema: {
|
|
"x-component-props": {
|
|
"associatedIndex": "{{ typeof $self.value === 'string' ? $self.value : $form.values.collection_name }}"
|
|
},
|
|
},
|
|
},
|
|
{
|
|
type: "value:schema",
|
|
target: "startTime",
|
|
// condition: "{{ $self.value }}",
|
|
schema: {
|
|
"x-component-props": {
|
|
"associatedIndex": "{{ typeof $self.value === 'string' ? $self.value : $form.values.collection_name }}"
|
|
},
|
|
},
|
|
},
|
|
{
|
|
type: "value:schema",
|
|
target: "endTime",
|
|
// condition: "{{ $self.value }}",
|
|
schema: {
|
|
"x-component-props": {
|
|
"associatedIndex": "{{ typeof $self.value === 'string' ? $self.value : $form.values.collection_name }}"
|
|
},
|
|
},
|
|
},
|
|
{
|
|
type: "value:schema",
|
|
target: "filter",
|
|
// condition: "{{ $self.value }}",
|
|
schema: {
|
|
"x-component-props": {
|
|
"associatedIndex": "{{ typeof $self.value === 'string' ? $self.value : $form.values.collection_name }}"
|
|
},
|
|
},
|
|
},
|
|
],
|
|
},
|
|
},
|
|
{
|
|
interface: 'multipleSelect',
|
|
type: 'json',
|
|
name: 'changed',
|
|
title: '发生变动的字段',
|
|
labelField: 'title',
|
|
valueField: 'name',
|
|
component: {
|
|
type: 'remoteSelect',
|
|
showInDetail: true,
|
|
showInForm: true,
|
|
'x-component-props': {
|
|
mode: 'simple',
|
|
multiple: true,
|
|
resourceName: 'collections.fields',
|
|
labelField: 'title',
|
|
valueField: 'name',
|
|
},
|
|
},
|
|
},
|
|
{
|
|
interface: 'json',
|
|
type: 'json',
|
|
name: 'startTime',
|
|
title: '开始时间',
|
|
showTime: true,
|
|
required: true,
|
|
component: {
|
|
type: 'automations.datetime',
|
|
showInDetail: true,
|
|
showInForm: true,
|
|
},
|
|
},
|
|
{
|
|
interface: 'json',
|
|
type: 'json',
|
|
name: 'cron',
|
|
title: '重复周期',
|
|
required: true,
|
|
component: {
|
|
type: 'automations.cron',
|
|
showInDetail: true,
|
|
showInForm: true,
|
|
// default: 'none',
|
|
"x-linkages": [
|
|
{
|
|
"type": "value:visible",
|
|
"target": "endMode",
|
|
"condition": "{{ $self.value && $self.value !== 'none' }}"
|
|
},
|
|
// {
|
|
// type: "value:schema",
|
|
// target: "endMode",
|
|
// condition: "{{ $form.values.type === 'schedule' && $self.value && $self.value !== 'norepeat' }}",
|
|
// schema: {
|
|
// enum: [
|
|
// { label: '永不结束', value: 'never' },
|
|
// { label: '指定重复次数', value: 'repeatTime' },
|
|
// { label: '自定义结束时间', value: 'customTime' },
|
|
// ]
|
|
// },
|
|
// },
|
|
// {
|
|
// type: "value:schema",
|
|
// target: "endMode",
|
|
// condition: "{{ $form.values.type === 'collections:schedule' && $self.value && $self.value !== 'norepeat' }}",
|
|
// schema: {
|
|
// enum: [
|
|
// { label: '永不结束', value: 'never' },
|
|
// { label: '指定重复次数', value: 'repeatTime' },
|
|
// { label: '根据日期字段', value: 'customField' },
|
|
// ]
|
|
// },
|
|
// },
|
|
// {
|
|
// "type": "value:visible",
|
|
// "target": "endDateField",
|
|
// "condition": "{{ $self.value && $self.value !== 'norepeat' }}"
|
|
// },
|
|
// {
|
|
// "type": "value:visible",
|
|
// "target": "endTime",
|
|
// "condition": "{{ $self.value && $self.value !== 'norepeat' }}"
|
|
// },
|
|
]
|
|
},
|
|
},
|
|
{
|
|
type: 'integer',
|
|
name: 'times',
|
|
developerMode: true,
|
|
},
|
|
{
|
|
interface: 'select',
|
|
type: 'string',
|
|
name: 'endMode',
|
|
title: '结束方式',
|
|
required: true,
|
|
// dataSource: [
|
|
// { label: '永不结束', value: 'never' },
|
|
// { label: '指定重复次数', value: 'repeatTime' },
|
|
// { label: '根据日期字段', value: 'customField' },
|
|
// { label: '自定义结束时间', value: 'customTime' },
|
|
// ],
|
|
component: {
|
|
type: 'automations.endmode',
|
|
showInDetail: true,
|
|
showInForm: true,
|
|
default: 'none',
|
|
"x-linkages": [
|
|
{
|
|
"type": "value:visible",
|
|
"target": "endTime",
|
|
"condition": "{{ $self.value === 'byField' || $self.value === 'customTime' }}"
|
|
},
|
|
// {
|
|
// "type": "value:visible",
|
|
// "target": "endTime",
|
|
// "condition": "{{ $self.value === 'customTime' }}"
|
|
// },
|
|
{
|
|
type: "value:schema",
|
|
target: "endTime",
|
|
condition: "{{ ($form.values.collection_name || $form.values.collection) && $self.value === 'customField' }}",
|
|
schema: {
|
|
"x-component-props": {
|
|
"associatedIndex": "{{ $form.values.collection_name || $form.values.collection }}"
|
|
},
|
|
},
|
|
},
|
|
],
|
|
},
|
|
},
|
|
// {
|
|
// interface: 'string',
|
|
// type: 'string',
|
|
// name: 'endDateField',
|
|
// title: '结束日期字段',
|
|
// required: true,
|
|
// labelField: 'title',
|
|
// valueField: 'name',
|
|
// component: {
|
|
// type: 'remoteSelect',
|
|
// showInDetail: true,
|
|
// showInForm: true,
|
|
// 'x-component-props': {
|
|
// mode: 'simple',
|
|
// resourceName: 'collections.fields',
|
|
// labelField: 'title',
|
|
// valueField: 'name',
|
|
// },
|
|
// },
|
|
// },
|
|
{
|
|
interface: 'json',
|
|
type: 'json',
|
|
name: 'endTime',
|
|
title: '结束时间',
|
|
showTime: true,
|
|
required: true,
|
|
component: {
|
|
type: 'automations.datetime',
|
|
showInDetail: true,
|
|
showInForm: true,
|
|
},
|
|
},
|
|
{
|
|
interface: 'json',
|
|
type: 'json',
|
|
name: 'filter',
|
|
title: '数据符合以下条件才会触发',
|
|
component: {
|
|
type: 'filter',
|
|
showInDetail: true,
|
|
showInForm: true,
|
|
},
|
|
},
|
|
{
|
|
interface: 'linkTo',
|
|
type: 'hasMany',
|
|
name: 'jobs',
|
|
target: 'automations_jobs',
|
|
title: '任务',
|
|
},
|
|
],
|
|
views_v2: [
|
|
{
|
|
developerMode: true,
|
|
type: 'table',
|
|
name: 'table',
|
|
title: '全部数据',
|
|
labelField: 'title',
|
|
actions: [
|
|
{
|
|
name: 'create',
|
|
type: 'create',
|
|
title: '新增',
|
|
viewName: 'form',
|
|
},
|
|
{
|
|
name: 'destroy',
|
|
type: 'destroy',
|
|
title: '删除',
|
|
},
|
|
],
|
|
fields: ['title', 'description', 'type', 'enabled'],
|
|
detailsOpenMode: 'drawer', // window
|
|
details: ['descriptions', 'jobs'],
|
|
sort: ['id'],
|
|
},
|
|
{
|
|
developerMode: true,
|
|
type: 'descriptions',
|
|
name: 'descriptions',
|
|
title: '详情',
|
|
fields: ['title', 'description', 'type', 'enabled'],
|
|
actions: [
|
|
{
|
|
name: 'update',
|
|
type: 'update',
|
|
title: '编辑',
|
|
viewName: 'form',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
developerMode: true,
|
|
type: 'form',
|
|
name: 'form',
|
|
title: '表单',
|
|
fields: [
|
|
'title',
|
|
'enabled',
|
|
'description',
|
|
'type',
|
|
'collection',
|
|
'changed',
|
|
'startTime',
|
|
'cron',
|
|
'times',
|
|
'endMode',
|
|
'endTime',
|
|
'filter',
|
|
],
|
|
},
|
|
{
|
|
developerMode: true,
|
|
type: 'table',
|
|
dataSourceType: 'association',
|
|
name: 'jobs',
|
|
title: '任务',
|
|
targetViewName: 'table',
|
|
targetFieldName: 'jobs',
|
|
},
|
|
],
|
|
} as TableOptions;
|