GenereteInline.vue 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  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. :config="config"
  35. :style="{'margin-right': element.options.spaceSize+'px'}"
  36. :is-subform="isSubform"
  37. :row-index="rowIndex"
  38. :sub-name="subName"
  39. :is-dialog="isDialog"
  40. :dialog-name="dialogName"
  41. :is-group="isGroup"
  42. :group="group"
  43. :field-node="fieldNode"
  44. >
  45. <template v-slot:[blank.name]="scope" v-for="blank in blanks">
  46. <slot :name="blank.name" :model="scope.model"></slot>
  47. </template>
  48. </generate-form-item>
  49. </template>
  50. </div>
  51. </template>
  52. <script>
  53. import GenerateFormItem from './GenerateFormItem'
  54. import {executeExpression, isExpression, extractExpression} from '../../util/expression'
  55. export default {
  56. name: 'generate-inline',
  57. components: {
  58. GenerateFormItem
  59. },
  60. props: ['config', 'element', 'model', 'rules', 'remote', 'blanks', 'display', 'edit', 'remoteOption', 'platform', 'preview', 'containerKey', 'dataSourceValue', 'eventFunction', 'printRead', 'isSubform', 'rowIndex', 'subName', 'subHideFields', 'subDisabledFields', 'isDialog', 'dialogName', 'group', 'fieldNode', 'isGroup'],
  61. data () {
  62. return {
  63. dataModels: this.model,
  64. }
  65. },
  66. computed: {
  67. currentOptions () {
  68. if (this.isSubform) {
  69. return {
  70. fieldNode: this.fieldNode ? `${this.fieldNode}.${this.element.model}` : this.element.model,
  71. rowIndex: this.rowIndex,
  72. row: this.model
  73. }
  74. } else {
  75. return {
  76. fieldNode: this.fieldNode ? `${this.fieldNode}.${this.element.model}` : this.element.model,
  77. }
  78. }
  79. },
  80. elementDisplay () {
  81. let curFullField = this.fieldNode ? this.fieldNode + '.' + this.element.model : this.element.model
  82. let curField = this.group ? this.group + '.' + this.element.model : this.element.model
  83. if (this.dynamicHideFields[curFullField] != undefined) {
  84. return !this.dynamicHideFields[curFullField]
  85. }
  86. if (this.dynamicHideFields[curField] != undefined) {
  87. return !this.dynamicHideFields[curField]
  88. }
  89. if (typeof this.element.options.hidden === 'boolean') {
  90. return !this.element.options.hidden
  91. } else {
  92. if (isExpression(this.element.options.hidden)) {
  93. return !executeExpression(extractExpression(this.element.options.hidden), this.currentOptions, this.formContext)
  94. }
  95. }
  96. return true
  97. }
  98. },
  99. inject: ['generateComponentInstance', 'deleteComponentInstance', 'dynamicHideFields', 'formContext'],
  100. mounted () {
  101. this.generateComponentInstance && this.generateComponentInstance(this.fieldNode ? `${this.fieldNode}.${this.element.model}` : this.element.model, this)
  102. },
  103. beforeUnmount () {
  104. this.deleteComponentInstance && this.deleteComponentInstance(this.fieldNode ? `${this.fieldNode}.${this.element.model}` : this.element.model)
  105. },
  106. methods: {
  107. },
  108. watch: {
  109. model: {
  110. deep: true,
  111. handler (val) {
  112. this.dataModels = this.model
  113. }
  114. }
  115. }
  116. }
  117. </script>
  118. <style lang="scss">
  119. .fm-inline-container{
  120. > *{
  121. display: inline-block;
  122. vertical-align: top;
  123. }
  124. }
  125. </style>