FormFieldDef.vue 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. <template>
  2. <div class="btn-group">
  3. <button
  4. type="button"
  5. class="btn btn-default dropdown-toggle"
  6. aria-haspopup="true"
  7. aria-expanded="false"
  8. @click="reverseShow"
  9. >
  10. <span class="fa fa-bars" />
  11. </button>
  12. <Modal v-model:show="modal">
  13. <template #header>{{ $t('lang.formFieldDef.formField') }}</template>
  14. <vuedraggable v-model="formFields" class="wrapper" item-key="id" draggable=".field-column-dragable" @end="sortChaned()">
  15. <template #item="{element}">
  16. <div class="field-column-dragable">
  17. <div class="column">
  18. <input
  19. :id="'FormFieldDefItem' + '_' + windowNo + '_' + tabIndex + '_' + element.fieldName + '_' + element.entityFieldIndex"
  20. v-model="element.visible"
  21. autocomplete="off"
  22. class="visible-checkbox"
  23. type="checkbox"
  24. :disabled="element.mandatory && element.visible"
  25. @change="tabFormFieldPropertyChanged(element)"
  26. />
  27. <label
  28. :for="'FormFieldDefItem' + '_' + windowNo + '_' + tabIndex + '_' + element.fieldName + '_' + element.entityFieldIndex"
  29. class="column-name"
  30. :class="{'column-red' : element.mandatory == true}"
  31. >
  32. {{ Language.getDisplayNameTrl($i18n.locale, element) }}
  33. </label>
  34. </div>
  35. </div>
  36. </template>
  37. </vuedraggable>
  38. </Modal>
  39. </div>
  40. </template>
  41. <script>
  42. import Common from '../../common/Common.js';
  43. import TabFormView from '../tabFormView/TabFormView.js';
  44. import Language from '../../common/Language.js';
  45. import vuedraggable from 'vuedraggable';
  46. export default {
  47. components: {
  48. vuedraggable,
  49. },
  50. /**
  51. * 页签表单字段
  52. */
  53. // eslint-disable-next-line
  54. props: ['windowNo', 'tabIndex', 'tabFormFields'],
  55. data: function () {
  56. this.Language = Language;
  57. return {
  58. gridFieldItemMap: {},
  59. formFields: [],
  60. modal: false,
  61. };
  62. },
  63. watch: {
  64. 'tabFormFields': function () {
  65. this.cloneTabFormFields();
  66. },
  67. },
  68. mounted: function () {
  69. this.cloneTabFormFields();
  70. },
  71. methods: {
  72. /**
  73. * 克隆页签表单字段
  74. */
  75. cloneTabFormFields: function () {
  76. var _self = this;
  77. if (_self.tabFormFields == null) {
  78. return;
  79. }
  80. _self.formFields.splice(0, _self.formFields.length);
  81. let tempFormFields = [];
  82. for (var i = 0, len1 = _self.tabFormFields.length; i < len1; i++) {
  83. let tempSortNo = _self.tabFormFields[i].sortNo;
  84. var tabFormFieldClone = {
  85. 'fieldName': _self.tabFormFields[i].fieldName,
  86. 'displayName': _self.tabFormFields[i].displayName,
  87. 'displayNameEng': _self.tabFormFields[i].displayNameEng,
  88. 'entityFieldIndex': _self.tabFormFields[i].entityFieldIndex,
  89. 'mandatory': _self.tabFormFields[i].mandatory,
  90. 'visible': _self.tabFormFields[i].visible,
  91. 'key':('FormFieldDef_' + _self.windowNo + '_'+_self.tabIndex+'_' + _self.tabFormFields[i].fieldName + '_' + _self.tabFormFields[i].entityFieldIndex),
  92. 'sortNo': (tempSortNo == null) ? 100 : tempSortNo,
  93. 'width': _self.tabFormFields[i].width,
  94. };
  95. tempFormFields.push(tabFormFieldClone);
  96. }
  97. tempFormFields.sort(function(a,b){
  98. return a.sortNo - b.sortNo;
  99. });
  100. tempFormFields.forEach(function(tempFormField){
  101. _self.formFields.push(tempFormField);
  102. });
  103. },
  104. /**
  105. * 表单字段的属性发生改变
  106. */
  107. tabFormFieldPropertyChanged: function (formField) {
  108. var _self = this;
  109. if (formField.mandatory) {
  110. formField.visible = true;
  111. return;
  112. }
  113. TabFormView.saveFormFieldDef(_self.windowNo, _self.tabIndex, _self.formFields).then(successData => {
  114. _self.$emit('tabFormFieldPropertyChanged', _self.formFields);
  115. }, errorData => {
  116. console.log(errorData);
  117. });
  118. },
  119. /**
  120. * 显示表单编辑模态框
  121. */
  122. reverseShow: function () {
  123. this.modal = true;
  124. },
  125. sortChaned:function(){
  126. console.log('sortChaned');
  127. var _self = this;
  128. for (var i = 0, len1 = _self.formFields.length; i < len1; i++) {
  129. _self.formFields[i].sortNo = i * 10;
  130. }
  131. TabFormView.saveFormFieldDef(_self.windowNo, _self.tabIndex, _self.formFields).then(successData => {
  132. _self.$emit('tabFormFieldPropertyChanged', _self.formFields);
  133. }, errorData => {
  134. console.log(errorData);
  135. });
  136. },
  137. },
  138. };
  139. </script>
  140. <style scoped>
  141. .visible-checkbox {
  142. width: 17px;
  143. height: 17px;
  144. text-align: center;
  145. margin-right: 15px;
  146. margin-left: 15px;
  147. margin-top: 8px;
  148. }
  149. .column-name {
  150. height: 25px;
  151. line-height: 25px;
  152. }
  153. .column-red {
  154. color: red;
  155. }
  156. .m-dropdown-menu {
  157. display: block;
  158. }
  159. ul label {
  160. cursor: pointer;
  161. }
  162. </style>