2.3.2 • Published 11 months ago

@formily/vue v2.3.2

Weekly downloads
-
License
MIT
Repository
-
Last release
11 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.2

11 months ago

2.3.1

1 year ago

2.3.0

2 years ago

2.2.29

2 years ago

2.2.27

2 years ago

2.2.30

2 years ago

2.2.26

2 years ago

2.2.25

2 years ago

2.2.24

2 years ago

2.2.23

2 years ago

2.2.22

2 years ago

2.2.21

2 years ago

2.2.20

2 years ago

2.2.19

2 years ago

2.2.17

2 years ago

2.2.18

2 years ago

2.2.15

2 years ago

2.2.16

2 years ago

2.2.13

3 years ago

2.2.14

3 years ago

2.2.11

3 years ago

2.2.12

3 years ago

2.2.10

3 years ago

2.2.9

3 years ago

2.2.8

3 years ago

2.2.7

3 years ago

2.2.6

3 years ago

2.2.1

3 years ago

2.2.3

3 years ago

2.2.2

3 years ago

2.2.5

3 years ago

2.2.4

3 years ago

2.1.9

3 years ago

2.1.12

3 years ago

2.1.13

3 years ago

2.1.10

3 years ago

2.1.11

3 years ago

2.2.0

3 years ago

2.1.6

3 years ago

2.1.8

3 years ago

2.1.7

3 years ago

2.1.4

3 years ago

2.1.3

3 years ago

2.1.5

3 years ago

2.1.2

3 years ago

2.1.1

3 years ago

2.1.0

3 years ago

2.0.19

3 years ago

2.0.20

3 years ago

2.0.16

3 years ago

2.0.17

3 years ago

2.0.18

3 years ago

2.0.7

3 years ago

2.0.9

3 years ago

2.0.8

3 years ago

2.0.15

3 years ago

2.0.13

3 years ago

2.0.14

3 years ago

2.0.11

3 years ago

2.0.12

3 years ago

2.0.10

3 years ago

2.0.3

4 years ago

2.0.5

4 years ago

2.0.4

4 years ago

2.0.6

3 years ago

2.0.2

4 years ago

2.0.1

4 years ago

2.0.0

4 years ago

2.0.0-rc.20

4 years ago

2.0.0-rc.19

4 years ago

2.0.0-rc.18

4 years ago

2.0.0-rc.17

4 years ago

2.0.0-rc.15

4 years ago

2.0.0-rc.16

4 years ago

2.0.0-rc.14

4 years ago

2.0.0-rc.13

4 years ago

2.0.0-rc.12

4 years ago

2.0.0-rc.11

4 years ago

2.0.0-rc.10

4 years ago

2.0.0-rc.9

4 years ago

2.0.0-rc.8

4 years ago

2.0.0-rc.7

4 years ago

2.0.0-rc.5

4 years ago

2.0.0-rc.6

4 years ago

2.0.0-rc.4

4 years ago

2.0.0-rc.2

4 years ago

2.0.0-rc.3

4 years ago

2.0.0-rc.1

4 years ago

2.0.0-beta.89

4 years ago

2.0.0-beta.88

4 years ago

2.0.0-beta.87

4 years ago

2.0.0-beta.86

4 years ago

2.0.0-beta.85

4 years ago

2.0.0-beta.84

4 years ago

2.0.0-beta.83

4 years ago

2.0.0-beta.82

4 years ago

2.0.0-beta.81

4 years ago

2.0.0-beta.80

4 years ago

2.0.0-beta.79

4 years ago

2.0.0-beta.78

4 years ago

2.0.0-beta.77

4 years ago

2.0.0-beta.76

4 years ago

2.0.0-beta.73

4 years ago

2.0.0-beta.75

4 years ago

2.0.0-beta.74

4 years ago

2.0.0-beta.72

4 years ago

2.0.0-beta.71

4 years ago

2.0.0-beta.69

4 years ago

2.0.0-beta.70

4 years ago

2.0.0-beta.66

4 years ago

2.0.0-beta.68

4 years ago

2.0.0-beta.67

4 years ago

2.0.0-beta.62

4 years ago

2.0.0-beta.65

4 years ago

2.0.0-beta.64

4 years ago

2.0.0-beta.63

4 years ago

2.0.0-beta.59

4 years ago

2.0.0-beta.58

4 years ago

2.0.0-beta.57

4 years ago

2.0.0-beta.51

4 years ago

2.0.0-beta.50

4 years ago

2.0.0-beta.55

4 years ago

2.0.0-beta.54

4 years ago

2.0.0-beta.53

4 years ago

2.0.0-beta.52

4 years ago

2.0.0-beta.56

4 years ago

2.0.0-beta.40

4 years ago

2.0.0-beta.44

4 years ago

2.0.0-beta.43

4 years ago

2.0.0-beta.42

4 years ago

2.0.0-beta.41

4 years ago

2.0.0-beta.48

4 years ago

2.0.0-beta.47

4 years ago

2.0.0-beta.46

4 years ago

2.0.0-beta.45

4 years ago

2.0.0-beta.49

4 years ago

2.0.0-beta.33

4 years ago

2.0.0-beta.37

4 years ago

2.0.0-beta.36

4 years ago

2.0.0-beta.35

4 years ago

2.0.0-beta.34

4 years ago

2.0.0-beta.39

4 years ago

2.0.0-beta.38

4 years ago

2.0.0-beta.32

4 years ago

2.0.0-beta.31

4 years ago

2.0.0-beta.29

4 years ago

2.0.0-beta.30

4 years ago

2.0.0-beta.28

4 years ago

2.0.0-beta.26

4 years ago

2.0.0-beta.27

4 years ago

2.0.0-beta.25

4 years ago

2.0.0-beta.24

4 years ago

2.0.0-beta.23

4 years ago

2.0.0-beta.22

4 years ago

2.0.0-beta.21

4 years ago

2.0.0-beta.20

4 years ago

2.0.0-beta.19

4 years ago

2.0.0-beta.18

4 years ago

2.0.0-beta.17

4 years ago

2.0.0-beta.15

4 years ago

2.0.0-beta.14

4 years ago

2.0.0-beta.13

4 years ago

2.0.0-beta.16

4 years ago

2.0.0-beta.9

4 years ago

2.0.0-beta.8

4 years ago

2.0.0-beta.11

4 years ago

2.0.0-beta.10

4 years ago

2.0.0-beta.12

4 years ago

2.0.0-beta.7

4 years ago

2.0.0-beta.6

4 years ago

2.0.0-beta.5

4 years ago

2.0.0-beta.4

4 years ago