generateCollapse.js 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. import {executeExpression, isExpression, extractExpression} from '../util/expression'
  2. export const generateCollapseMixin = {
  3. props: ['config', 'element', 'model', 'rules', 'remote', 'blanks', 'display', 'edit', 'remoteOption', 'platform', 'preview', 'containerKey', 'dataSourceValue', 'eventFunction', 'printRead', 'isSubform', 'rowIndex', 'subName', 'subHideFields', 'subDisabledFields', 'isDialog', 'dialogName', 'isGroup', 'group', 'fieldNode'],
  4. data () {
  5. return {
  6. dataModels: this.model,
  7. tabActive: this.element.tabs.length ? [this.element.tabs[0].name] : '',
  8. }
  9. },
  10. computed: {
  11. currentOptions () {
  12. if (this.isSubform) {
  13. return {
  14. fieldNode: this.fieldNode ? `${this.fieldNode}.${this.element.model}` : this.element.model,
  15. rowIndex: this.rowIndex,
  16. row: this.model
  17. }
  18. } else {
  19. return {
  20. fieldNode: this.fieldNode ? `${this.fieldNode}.${this.element.model}` : this.element.model,
  21. }
  22. }
  23. },
  24. elementDisplay () {
  25. let curFullField = this.fieldNode ? this.fieldNode + '.' + this.element.model : this.element.model
  26. let curField = this.group ? this.group + '.' + this.element.model : this.element.model
  27. if (this.dynamicHideFields[curFullField] != undefined) {
  28. return !this.dynamicHideFields[curFullField]
  29. }
  30. if (this.dynamicHideFields[curField] != undefined) {
  31. return !this.dynamicHideFields[curField]
  32. }
  33. if (typeof this.element.options.hidden === 'boolean') {
  34. return !this.element.options.hidden
  35. } else {
  36. if (isExpression(this.element.options.hidden)) {
  37. return !executeExpression(extractExpression(this.element.options.hidden), this.currentOptions, this.formContext)
  38. }
  39. }
  40. return true
  41. }
  42. },
  43. inject: ['generateComponentInstance', 'deleteComponentInstance', 'dynamicHideFields', 'formContext'],
  44. mounted () {
  45. this.generateComponentInstance && this.generateComponentInstance(this.fieldNode ? `${this.fieldNode}.${this.element.model}` : this.element.model, this)
  46. },
  47. beforeUnmount () {
  48. this.deleteComponentInstance && this.deleteComponentInstance(this.fieldNode ? `${this.fieldNode}.${this.element.model}` : this.element.model)
  49. },
  50. methods: {
  51. activateCollapse (title) {
  52. if (typeof title === 'string') {
  53. const currentCollapse = this.element.tabs.find(item => item.title == title)
  54. if (currentCollapse) {
  55. this.tabActive = currentCollapse.name
  56. }
  57. }
  58. if (typeof title === 'object' && Array.isArray(title)) {
  59. const collapses = title.map(item => {
  60. const current = this.element.tabs.find(iitem => iitem.title == item)
  61. if (current) {
  62. return current.name
  63. }
  64. return ''
  65. })
  66. this.tabActive = collapses
  67. }
  68. }
  69. },
  70. watch: {
  71. model: {
  72. deep: true,
  73. handler (val) {
  74. this.dataModels = this.model
  75. }
  76. }
  77. }
  78. }