GenerateInline.vue 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. <template>
  2. <div class="fm-inline-container"
  3. v-if="elementDisplay"
  4. :class="{
  5. [element.options && element.options.customClass]: element.options && element.options.customClass ? true : false
  6. }"
  7. :style="{
  8. display: element.options.flex ? 'flex' : 'block',
  9. 'flex-direction': 'row',
  10. 'flex-wrap': 'wrap',
  11. 'justify-content': element.options.flexJustify || 'normal',
  12. 'align-items': element.options.flexAlign || 'normal'
  13. }"
  14. >
  15. <template v-for="item in element.list">
  16. <generate-form-item
  17. :key="item.key"
  18. :models="dataModels"
  19. :rules="rules"
  20. :widget="item"
  21. :remote="remote"
  22. :blanks="blanks"
  23. :display="display"
  24. :sub-hide-fields="subHideFields"
  25. :sub-disabled-fields="subDisabledFields"
  26. :edit="edit"
  27. :remote-option="remoteOption"
  28. :platform="platform"
  29. :preview="preview"
  30. :container-key="containerKey"
  31. :data-source-value="dataSourceValue"
  32. :event-function="eventFunction"
  33. :print-read="printRead"
  34. :style="{'margin-right': element.options.spaceSize+'px'}"
  35. :is-subform="isSubform"
  36. :row-index="rowIndex"
  37. :sub-name="subName"
  38. :is-dialog="isDialog"
  39. :dialog-name="dialogName"
  40. :is-group="isGroup"
  41. :group="group"
  42. :field-node="fieldNode"
  43. >
  44. <template v-slot:[blank.name]="scope" v-for="blank in blanks">
  45. <slot :name="blank.name" :model="scope.model"></slot>
  46. </template>
  47. </generate-form-item>
  48. </template>
  49. </div>
  50. </template>
  51. <script>
  52. import GenerateFormItem from './GenerateFormItem'
  53. import {executeExpression, isExpression, extractExpression} from '../util/expression'
  54. export default {
  55. name: 'generate-inline',
  56. components: {
  57. GenerateFormItem
  58. },
  59. props: ['element', 'model', 'rules', 'remote', 'blanks', 'display', 'edit', 'remoteOption', 'platform', 'preview', 'containerKey', 'dataSourceValue', 'eventFunction', 'printRead', 'isSubform', 'rowIndex', 'subName', 'subHideFields', 'subDisabledFields', 'isDialog', 'dialogName', 'group', 'fieldNode', 'isGroup'],
  60. data () {
  61. return {
  62. dataModels: this.model,
  63. }
  64. },
  65. computed: {
  66. currentOptions () {
  67. if (this.isSubform) {
  68. return {
  69. fieldNode: this.fieldNode ? `${this.fieldNode}.${this.element.model}` : this.element.model,
  70. rowIndex: this.rowIndex,
  71. row: this.model
  72. }
  73. } else {
  74. return {
  75. fieldNode: this.fieldNode ? `${this.fieldNode}.${this.element.model}` : this.element.model,
  76. }
  77. }
  78. },
  79. elementDisplay () {
  80. let curFullField = this.fieldNode ? this.fieldNode + '.' + this.element.model : this.element.model
  81. let curField = this.group ? this.group + '.' + this.element.model : this.element.model
  82. if (this.dynamicHideFields[curFullField] != undefined) {
  83. return !this.dynamicHideFields[curFullField]
  84. }
  85. if (this.dynamicHideFields[curField] != undefined) {
  86. return !this.dynamicHideFields[curField]
  87. }
  88. if (typeof this.element.options.hidden === 'boolean') {
  89. return !this.element.options.hidden
  90. } else {
  91. if (isExpression(this.element.options.hidden)) {
  92. return !executeExpression(extractExpression(this.element.options.hidden), this.currentOptions, this.formContext)
  93. }
  94. }
  95. return true
  96. }
  97. },
  98. inject: ['generateComponentInstance', 'deleteComponentInstance', 'dynamicHideFields', 'formContext'],
  99. mounted () {
  100. this.generateComponentInstance && this.generateComponentInstance(this.fieldNode ? `${this.fieldNode}.${this.element.model}` : this.element.model, this)
  101. },
  102. beforeUnmount () {
  103. this.deleteComponentInstance && this.deleteComponentInstance(this.fieldNode ? `${this.fieldNode}.${this.element.model}` : this.element.model)
  104. },
  105. methods: {
  106. },
  107. watch: {
  108. model: {
  109. deep: true,
  110. handler (val) {
  111. this.dataModels = this.model
  112. }
  113. }
  114. }
  115. }
  116. </script>
  117. <style lang="scss">
  118. .fm-inline-container{
  119. > *{
  120. display: inline-block;
  121. vertical-align: top;
  122. }
  123. }
  124. </style>