2.3.1 • Published 5 months ago

@formily/vue v2.3.1

Weekly downloads
-
License
MIT
Repository
-
Last release
5 months ago

Usage

Requirement

vue^2.6.0 + @vue/composition-api^1.0.0-beta.1

Or

vue>=3.0.0-rc.0

Quick Start

<template>
  <FormProvider :form="form" class="demo">
    <Field
      name="bb"
      required
      description="122333"
      title="BB"
      validator="url"
      :decorator="[FormItem,{tooltips:'xxx',labelCol:{span:3}}]"
      :component="[Input,{placeholder:'xxx'}]"
    />
    <Field
      name="kk"
      title="KK"
      required
      :decorator="[FormItem,{tooltips:'xxx',labelCol:{span:3}}]"
      :component="[Input]"
    />
    <Field
      name="aa"
      title="AA"
      :decorator="[FormItem,{tooltips:'xxx',labelCol:{span:3}}]"
    >
      <ArrayField
        name="cc"
        title="CC"
        :decorator="[FormItem,{tooltips:'xxx',labelCol:{span:3}}]"
      >
        <template #default="{ field }">
          <div>
            <div v-for="(item, index) in field.value || []" :key="item.id">
              <Field :name="`${index}.dd`" required :component="[Input]" />
              <Field :name="`${index}.ee`" :component="[Input]" />
              <button
                @click="() => {
                  field.moveUp(index)
                }"
              >
                上移
              </button>
              <button
                @click="() => {
                  field.moveDown(index)
                }"
              >
                下移
              </button>
              <button
                @click="e => {
                  e.preventDefault()
                  field.remove(index)
                }"
              >
                移除
              </button>
            </div>
            <button
              @click="e => {
                e.preventDefault()
                field.push({ id: new Date().getTime() })
              }"
            >
              添加
            </button>
          </div>
        </template>
      </ArrayField>
      <ObjectField
        title="XX"
        :decorator="[FormItem,{tooltips:'xxx',labelCol:{span:3}}]"
        name="xx"
      >
        <template #default="{ field }">
          <div>
            <div v-for="(value, key) in field.value || []" :key="key">
              <Field :name="`${key}.yy`" required :component="[Input]" />
              <Field :name="`${key}.zz`" :component="[Input]" />
              <button
                @click="e => {
                  e.preventDefault()
                  field.removeProperty(key)
                }"
              >
                移除
              </button>
            </div>
            <button
              @click="e => {
                e.preventDefault()
                field.addProperty(new Date().getTime(), {})
              }"
            >
              添加
            </button>
          </div>
        </template>
      </ObjectField>
    </Field>
    <FormConsumer>
      <template #default="{ form }">
        {{ JSON.stringify(form.query('aa').get().value) }}
      </template>
    </FormConsumer>
    <FormConsumer>
      <template #default="{ form }">
        {{ form.errors.length > 0 ? JSON.stringify(form.errors) : '' }}
      </template>
    </FormConsumer>
    <button
      @click="() => {
        form.submit(log)
      }"
    >
      提交
    </button>
    <button
      @click="() => {
        form.setPattern('editable')
      }"
    >
      编辑
    </button>
    <button
      @click="() => {
        form.setPattern('disabled')
      }"
    >
      禁用
    </button>
  </FormProvider>
</template>

<script>
  import { Form, Input, Select, Card, Button } from 'ant-design-vue'
  import {
    createForm,
    FormProvider,
    FormConsumer,
    Field,
    ArrayField,
    ObjectField,
    onFieldReact,
    connect,
    mapProps,
    isVoidField,
  } from '@formily/vue'

  const FormItem = connect(
    Form.Item,
    mapProps(
      { extract: 'validateStatus' },
      { extract: 'title', to: 'label' },
      (props, field) => {
        if (isVoidField(field)) return props
        if (field.invalid) {
          return {
            help: field.errors.reduce(
              (msg, info) => msg.concat(info.messages),
              []
            ),
          }
        } else {
          return {
            help: field.description,
          }
        }
      }
    )
  )

  export default {
    name: 'demo',
    components: {
      FormProvider,
      FormConsumer,
      Field,
      ArrayField,
      ObjectField,
      Button,
    },
    data() {
      const form = createForm({
        pattern: 'disabled',
        values: {
          bb: '123',
          aa: {
            cc: [
              {
                ee: '12',
              },
            ],
          },
        },
        effects: () => {
          onFieldReact('kk', (field, form) => {
            field.setDisplay(form.values.bb === '321' ? 'visible' : 'none')
          })
          onFieldReact('aa.cc.*.dd', (field) => {
            const value = field.query('.ee').get((field) => field.value)
            field.setPattern(value === '123' ? 'disabled' : 'editable')
          })
        },
      })
      return {
        form,
        FormItem,
        Input,
        Select,
        Card,
      }
    },
    methods: {
      log(...v) {
        console.log(...v)
      },
    },
  }
</script>

<style>
  .demo {
    width: 600px;
    padding: 16px;
    margin: 200px auto;
    border: 1px solid #ccc;
    word-break: break-all;
    border-radius: 3px;
  }

  .ant-btn + .ant-btn {
    margin-left: 8px;
  }
</style>
2.3.1

5 months ago

2.3.0

7 months ago

2.2.29

9 months ago

2.2.27

10 months ago

2.2.30

7 months ago

2.2.26

11 months ago

2.2.25

11 months ago

2.2.24

12 months ago

2.2.23

1 year ago

2.2.22

1 year ago

2.2.21

1 year ago

2.2.20

1 year ago

2.2.19

1 year ago

2.2.17

1 year ago

2.2.18

1 year ago

2.2.15

1 year ago

2.2.16

1 year ago

2.2.13

1 year ago

2.2.14

1 year ago

2.2.11

1 year ago

2.2.12

1 year ago

2.2.10

2 years ago

2.2.9

2 years ago

2.2.8

2 years ago

2.2.7

2 years ago

2.2.6

2 years ago

2.2.1

2 years ago

2.2.3

2 years ago

2.2.2

2 years ago

2.2.5

2 years ago

2.2.4

2 years ago

2.1.9

2 years ago

2.1.12

2 years ago

2.1.13

2 years ago

2.1.10

2 years ago

2.1.11

2 years ago

2.2.0

2 years ago

2.1.6

2 years ago

2.1.8

2 years ago

2.1.7

2 years ago

2.1.4

2 years ago

2.1.3

2 years ago

2.1.5

2 years ago

2.1.2

2 years ago

2.1.1

2 years ago

2.1.0

2 years ago

2.0.19

2 years ago

2.0.20

2 years ago

2.0.16

2 years ago

2.0.17

2 years ago

2.0.18

2 years ago

2.0.7

2 years ago

2.0.9

2 years ago

2.0.8

2 years ago

2.0.15

2 years ago

2.0.13

2 years ago

2.0.14

2 years ago

2.0.11

2 years ago

2.0.12

2 years ago

2.0.10

2 years ago

2.0.3

2 years ago

2.0.5

2 years ago

2.0.4

2 years ago

2.0.6

2 years ago

2.0.2

2 years ago

2.0.1

2 years ago

2.0.0

2 years ago

2.0.0-rc.20

2 years ago

2.0.0-rc.19

2 years ago

2.0.0-rc.18

3 years ago

2.0.0-rc.17

3 years ago

2.0.0-rc.15

3 years ago

2.0.0-rc.16

3 years ago

2.0.0-rc.14

3 years ago

2.0.0-rc.13

3 years ago

2.0.0-rc.12

3 years ago

2.0.0-rc.11

3 years ago

2.0.0-rc.10

3 years ago

2.0.0-rc.9

3 years ago

2.0.0-rc.8

3 years ago

2.0.0-rc.7

3 years ago

2.0.0-rc.5

3 years ago

2.0.0-rc.6

3 years ago

2.0.0-rc.4

3 years ago

2.0.0-rc.2

3 years ago

2.0.0-rc.3

3 years ago

2.0.0-rc.1

3 years ago

2.0.0-beta.89

3 years ago

2.0.0-beta.88

3 years ago

2.0.0-beta.87

3 years ago

2.0.0-beta.86

3 years ago

2.0.0-beta.85

3 years ago

2.0.0-beta.84

3 years ago

2.0.0-beta.83

3 years ago

2.0.0-beta.82

3 years ago

2.0.0-beta.81

3 years ago

2.0.0-beta.80

3 years ago

2.0.0-beta.79

3 years ago

2.0.0-beta.78

3 years ago

2.0.0-beta.77

3 years ago

2.0.0-beta.76

3 years ago

2.0.0-beta.73

3 years ago

2.0.0-beta.75

3 years ago

2.0.0-beta.74

3 years ago

2.0.0-beta.72

3 years ago

2.0.0-beta.71

3 years ago

2.0.0-beta.69

3 years ago

2.0.0-beta.70

3 years ago

2.0.0-beta.66

3 years ago

2.0.0-beta.68

3 years ago

2.0.0-beta.67

3 years ago

2.0.0-beta.62

3 years ago

2.0.0-beta.65

3 years ago

2.0.0-beta.64

3 years ago

2.0.0-beta.63

3 years ago

2.0.0-beta.59

3 years ago

2.0.0-beta.58

3 years ago

2.0.0-beta.57

3 years ago

2.0.0-beta.51

3 years ago

2.0.0-beta.50

3 years ago

2.0.0-beta.55

3 years ago

2.0.0-beta.54

3 years ago

2.0.0-beta.53

3 years ago

2.0.0-beta.52

3 years ago

2.0.0-beta.56

3 years ago

2.0.0-beta.40

3 years ago

2.0.0-beta.44

3 years ago

2.0.0-beta.43

3 years ago

2.0.0-beta.42

3 years ago

2.0.0-beta.41

3 years ago

2.0.0-beta.48

3 years ago

2.0.0-beta.47

3 years ago

2.0.0-beta.46

3 years ago

2.0.0-beta.45

3 years ago

2.0.0-beta.49

3 years ago

2.0.0-beta.33

3 years ago

2.0.0-beta.37

3 years ago

2.0.0-beta.36

3 years ago

2.0.0-beta.35

3 years ago

2.0.0-beta.34

3 years ago

2.0.0-beta.39

3 years ago

2.0.0-beta.38

3 years ago

2.0.0-beta.32

3 years ago

2.0.0-beta.31

3 years ago

2.0.0-beta.29

3 years ago

2.0.0-beta.30

3 years ago

2.0.0-beta.28

3 years ago

2.0.0-beta.26

3 years ago

2.0.0-beta.27

3 years ago

2.0.0-beta.25

3 years ago

2.0.0-beta.24

3 years ago

2.0.0-beta.23

3 years ago

2.0.0-beta.22

3 years ago

2.0.0-beta.21

3 years ago

2.0.0-beta.20

3 years ago

2.0.0-beta.19

3 years ago

2.0.0-beta.18

3 years ago

2.0.0-beta.17

3 years ago

2.0.0-beta.15

3 years ago

2.0.0-beta.14

3 years ago

2.0.0-beta.13

3 years ago

2.0.0-beta.16

3 years ago

2.0.0-beta.9

3 years ago

2.0.0-beta.8

3 years ago

2.0.0-beta.11

3 years ago

2.0.0-beta.10

3 years ago

2.0.0-beta.12

3 years ago

2.0.0-beta.7

3 years ago

2.0.0-beta.6

3 years ago

2.0.0-beta.5

3 years ago

2.0.0-beta.4

3 years ago