GridColumnDef.vue 4.9 KB

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