bri-components 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (215) hide show
  1. package/README.md +30 -0
  2. package/lib/.DS_Store +0 -0
  3. package/lib/0.bri-components.min.js +2 -0
  4. package/lib/0.bri-components.min.js.map +1 -0
  5. package/lib/1.bri-components.min.js +2 -0
  6. package/lib/1.bri-components.min.js.map +1 -0
  7. package/lib/2.bri-components.min.js +2 -0
  8. package/lib/2.bri-components.min.js.map +1 -0
  9. package/lib/3.bri-components.min.js +2 -0
  10. package/lib/3.bri-components.min.js.gz +0 -0
  11. package/lib/3.bri-components.min.js.map +1 -0
  12. package/lib/4.bri-components.min.js +2 -0
  13. package/lib/4.bri-components.min.js.gz +0 -0
  14. package/lib/4.bri-components.min.js.map +1 -0
  15. package/lib/5.bri-components.min.js +2 -0
  16. package/lib/5.bri-components.min.js.map +1 -0
  17. package/lib/6.bri-components.min.js +2 -0
  18. package/lib/6.bri-components.min.js.map +1 -0
  19. package/lib/bri-components.min.js +21 -0
  20. package/lib/bri-components.min.js.gz +0 -0
  21. package/lib/bri-components.min.js.map +1 -0
  22. package/lib/styles/bri-components.css +1 -0
  23. package/lib/styles/bundle.css +14 -0
  24. package/lib/styles/font/fontello.eot +0 -0
  25. package/lib/styles/font/fontello.svg +32 -0
  26. package/lib/styles/font/fontello.ttf +0 -0
  27. package/lib/styles/font/fontello.woff +0 -0
  28. package/lib/styles/font/fontello.woff2 +0 -0
  29. package/package.json +121 -0
  30. package/src/.DS_Store +0 -0
  31. package/src/components/controls/base/DshBack.vue +36 -0
  32. package/src/components/controls/base/DshCascader.vue +366 -0
  33. package/src/components/controls/base/DshCascaderMultiple.vue +158 -0
  34. package/src/components/controls/base/DshCheckbox.vue +199 -0
  35. package/src/components/controls/base/DshCoordinates.vue +497 -0
  36. package/src/components/controls/base/DshDate.vue +148 -0
  37. package/src/components/controls/base/DshDaterange.vue +335 -0
  38. package/src/components/controls/base/DshDivider.vue +59 -0
  39. package/src/components/controls/base/DshEditor.vue +166 -0
  40. package/src/components/controls/base/DshInput.vue +139 -0
  41. package/src/components/controls/base/DshLabels.vue +302 -0
  42. package/src/components/controls/base/DshNumber/BriInputNumber/BriInputNumber.vue +425 -0
  43. package/src/components/controls/base/DshNumber/BriInputNumber/mixins/emitter.js +34 -0
  44. package/src/components/controls/base/DshNumber/BriInputNumber/mixins/form.js +14 -0
  45. package/src/components/controls/base/DshNumber/BriInputNumber/utils/assist.js +322 -0
  46. package/src/components/controls/base/DshNumber/DshNumber.vue +148 -0
  47. package/src/components/controls/base/DshNumberange.vue +137 -0
  48. package/src/components/controls/base/DshPackage.vue +72 -0
  49. package/src/components/controls/base/DshSelect.vue +231 -0
  50. package/src/components/controls/base/DshSwitch.vue +112 -0
  51. package/src/components/controls/base/DshUndeveloped.vue +39 -0
  52. package/src/components/controls/base/YSerialNumber.vue +37 -0
  53. package/src/components/controls/base/ZUpload/YUploadImage.vue +228 -0
  54. package/src/components/controls/base/ZUpload/index.vue +356 -0
  55. package/src/components/controls/base/ZUpload/upload-list.vue +277 -0
  56. package/src/components/controls/base/ZUpload/upload-listItem.vue +0 -0
  57. package/src/components/controls/base/ZUpload/uploadMixin.js +397 -0
  58. package/src/components/controls/base/selectMixin.js +110 -0
  59. package/src/components/controls/base/textMultiple/DshTextMultiple.vue +94 -0
  60. package/src/components/controls/base/textMultiple/MultipleInput.vue +106 -0
  61. package/src/components/controls/controlMap.js +94 -0
  62. package/src/components/controls/controlMixin.js +84 -0
  63. package/src/components/form/DshAdvSearchForm.vue +341 -0
  64. package/src/components/form/DshDefaultSearch.vue +203 -0
  65. package/src/components/form/DshForm.vue +364 -0
  66. package/src/components/form/searchMixin.js +205 -0
  67. package/src/components/list/DshBox/DshBox.vue +168 -0
  68. package/src/components/list/DshBox/DshCard.vue +219 -0
  69. package/src/components/list/DshBox/DshCrossTable.vue +624 -0
  70. package/src/components/list/DshBox/DshList.vue +442 -0
  71. package/src/components/list/DshBox/DshPanel.vue +407 -0
  72. package/src/components/list/DshBox/DshSingleData.vue +82 -0
  73. package/src/components/list/DshBox/DshTable.vue +273 -0
  74. package/src/components/list/DshCascaderTable.vue +817 -0
  75. package/src/components/list/DshFlatTable.vue +622 -0
  76. package/src/components/list/ZTree.vue +527 -0
  77. package/src/components/list/easyTable/index.js +23 -0
  78. package/src/components/list/easyTable/src/directives/clickoutside.js +32 -0
  79. package/src/components/list/easyTable/src/mixins/layerAdjustment.js +62 -0
  80. package/src/components/list/easyTable/src/settings/settings.js +11 -0
  81. package/src/components/list/easyTable/src/utils/deepClone.js +256 -0
  82. package/src/components/list/easyTable/src/utils/dom.js +41 -0
  83. package/src/components/list/easyTable/src/utils/utils.js +190 -0
  84. package/src/components/list/easyTable/v-checkbox/index.js +7 -0
  85. package/src/components/list/easyTable/v-checkbox/src/checkbox.vue +127 -0
  86. package/src/components/list/easyTable/v-checkbox-group/index.js +7 -0
  87. package/src/components/list/easyTable/v-checkbox-group/src/checkbox-group.vue +68 -0
  88. package/src/components/list/easyTable/v-dropdown/index.js +7 -0
  89. package/src/components/list/easyTable/v-dropdown/src/dropdown.vue +337 -0
  90. package/src/components/list/easyTable/v-table/index.js +7 -0
  91. package/src/components/list/easyTable/v-table/src/body-cell-merge-mixin.js +141 -0
  92. package/src/components/list/easyTable/v-table/src/cell-edit-mixin.js +102 -0
  93. package/src/components/list/easyTable/v-table/src/checkbox-selection-mixin.js +189 -0
  94. package/src/components/list/easyTable/v-table/src/classes-mixin.js +56 -0
  95. package/src/components/list/easyTable/v-table/src/drag-width-mixin.js +202 -0
  96. package/src/components/list/easyTable/v-table/src/export-csv.js +74 -0
  97. package/src/components/list/easyTable/v-table/src/frozen-columns-mixin.js +134 -0
  98. package/src/components/list/easyTable/v-table/src/loading.vue +49 -0
  99. package/src/components/list/easyTable/v-table/src/scroll-bar-control-mixin.js +21 -0
  100. package/src/components/list/easyTable/v-table/src/scroll-control-mixin.js +92 -0
  101. package/src/components/list/easyTable/v-table/src/sort-control-mixin.js +108 -0
  102. package/src/components/list/easyTable/v-table/src/table-empty-mixin.js +73 -0
  103. package/src/components/list/easyTable/v-table/src/table-empty.vue +66 -0
  104. package/src/components/list/easyTable/v-table/src/table-filters-mixin.js +126 -0
  105. package/src/components/list/easyTable/v-table/src/table-footer-mixin.js +122 -0
  106. package/src/components/list/easyTable/v-table/src/table-resize-mixin.js +279 -0
  107. package/src/components/list/easyTable/v-table/src/table-row-mouse-events-mixin.js +123 -0
  108. package/src/components/list/easyTable/v-table/src/table.vue +1565 -0
  109. package/src/components/list/easyTable/v-table/src/title-cell-merge-mixin.js +115 -0
  110. package/src/components/list/evTable/EvTable.vue +323 -0
  111. package/src/components/list/evTable/EvTableMixin.js +26 -0
  112. package/src/components/other/DshAvatar.vue +149 -0
  113. package/src/components/other/DshBtnModal.vue +64 -0
  114. package/src/components/other/DshColorPanel.vue +128 -0
  115. package/src/components/other/DshEditPanel.vue +130 -0
  116. package/src/components/other/InfoCascader.vue +258 -0
  117. package/src/components/other/YNoPermission.vue +45 -0
  118. package/src/components/other/ZCode.vue +125 -0
  119. package/src/components/other/ZCollapseTree.vue +84 -0
  120. package/src/components/other/ZGantt.vue +669 -0
  121. package/src/components/other/ZIframe.vue +105 -0
  122. package/src/components/other/ZLoading.vue +59 -0
  123. package/src/components/other/menu/DshMenu.vue +133 -0
  124. package/src/components/other/menu/DshMenuNav.vue +104 -0
  125. package/src/components/pages/Error/Error403.vue +34 -0
  126. package/src/components/pages/Error/Error404.vue +34 -0
  127. package/src/components/pages/Error/Error500.vue +34 -0
  128. package/src/components/pages/Error/error.less +163 -0
  129. package/src/components/pages/Error/errorBack.vue +38 -0
  130. package/src/components/small/Ctooltip.vue +90 -0
  131. package/src/components/small/DshButtons.vue +195 -0
  132. package/src/components/small/DshControlDefine.vue +110 -0
  133. package/src/components/small/DshCrumbs.vue +61 -0
  134. package/src/components/small/DshCrumbsItem.vue +107 -0
  135. package/src/components/small/DshDropdown.vue +159 -0
  136. package/src/components/small/DshFileShow.vue +212 -0
  137. package/src/components/small/DshIcons.vue +63 -0
  138. package/src/components/small/DshModal.vue +255 -0
  139. package/src/components/small/DshPage.vue +98 -0
  140. package/src/components/small/DshSteps.vue +68 -0
  141. package/src/components/small/DshTabs.vue +227 -0
  142. package/src/components/small/DshTags.vue +58 -0
  143. package/src/components/small/DshTdRender.js +21 -0
  144. package/src/components/small/DshTitle.vue +36 -0
  145. package/src/components/small/render.js +20 -0
  146. package/src/components/unit/DshFormItem.vue +157 -0
  147. package/src/components/unit/DshUnit.vue +72 -0
  148. package/src/components/unit/unitMixin.js +43 -0
  149. package/src/datas/.DS_Store +0 -0
  150. package/src/datas/common/region.json +1 -0
  151. package/src/datas/common/resourceData.json +20 -0
  152. package/src/datas/index.js +11 -0
  153. package/src/index.js +243 -0
  154. package/src/styles/animate.less +16 -0
  155. package/src/styles/bundle.css +14 -0
  156. package/src/styles/common/box.less +157 -0
  157. package/src/styles/common/common.less +31 -0
  158. package/src/styles/common/flex.less +282 -0
  159. package/src/styles/common/index.less +4 -0
  160. package/src/styles/common/text.less +43 -0
  161. package/src/styles/components/controls/DshCascader.less +75 -0
  162. package/src/styles/components/controls/DshCheckbox.less +156 -0
  163. package/src/styles/components/controls/DshCoordinates.less +72 -0
  164. package/src/styles/components/controls/DshDaterange.less +49 -0
  165. package/src/styles/components/controls/DshDivider.less +115 -0
  166. package/src/styles/components/controls/DshEditor.less +52 -0
  167. package/src/styles/components/controls/DshInput.less +40 -0
  168. package/src/styles/components/controls/DshLabels.less +187 -0
  169. package/src/styles/components/controls/DshNumberange.less +24 -0
  170. package/src/styles/components/controls/DshPackage.less +25 -0
  171. package/src/styles/components/controls/DshSelect.less +172 -0
  172. package/src/styles/components/controls/MultipleInput.less +55 -0
  173. package/src/styles/components/controls/ZUpload.less +446 -0
  174. package/src/styles/components/form/DshAdvSearchForm.less +159 -0
  175. package/src/styles/components/form/DshDefaultSearch.less +71 -0
  176. package/src/styles/components/index.less +49 -0
  177. package/src/styles/components/list/DshCascaderTable.less +113 -0
  178. package/src/styles/components/list/DshCrossTable.less +175 -0
  179. package/src/styles/components/list/DshFlatTable.less +98 -0
  180. package/src/styles/components/list/DshSingleData.less +30 -0
  181. package/src/styles/components/list/evTable.less +79 -0
  182. package/src/styles/components/list/evtable/animation.less +141 -0
  183. package/src/styles/components/list/evtable/font/fontello.eot +0 -0
  184. package/src/styles/components/list/evtable/font/fontello.svg +32 -0
  185. package/src/styles/components/list/evtable/font/fontello.ttf +0 -0
  186. package/src/styles/components/list/evtable/font/fontello.woff +0 -0
  187. package/src/styles/components/list/evtable/font/fontello.woff2 +0 -0
  188. package/src/styles/components/list/evtable/fontello.less +68 -0
  189. package/src/styles/components/list/evtable/index.less +5 -0
  190. package/src/styles/components/list/evtable/v-checkbox.less +167 -0
  191. package/src/styles/components/list/evtable/v-dropdown.less +235 -0
  192. package/src/styles/components/list/evtable/v-table.less +334 -0
  193. package/src/styles/components/list/ivu_reset.less +49 -0
  194. package/src/styles/components/other/DshEditPanel.less +70 -0
  195. package/src/styles/components/other/DshMenu.less +37 -0
  196. package/src/styles/components/other/DshMenuNav.less +82 -0
  197. package/src/styles/components/other/InfoCascader.less +55 -0
  198. package/src/styles/components/other/ZCode.less +1 -0
  199. package/src/styles/components/other/ZCollapseTree.less +62 -0
  200. package/src/styles/components/other/ZGantt.less +278 -0
  201. package/src/styles/components/other/ZLoading.less +36 -0
  202. package/src/styles/components/small/Ctooltip.less +5 -0
  203. package/src/styles/components/small/DshButtons.less +40 -0
  204. package/src/styles/components/small/DshControlDefine.less +64 -0
  205. package/src/styles/components/small/DshDropdown.less +61 -0
  206. package/src/styles/components/small/DshPage.less +94 -0
  207. package/src/styles/components/small/DshSteps.less +58 -0
  208. package/src/styles/components/small/DshTabs.less +82 -0
  209. package/src/styles/components/small/DshTitle.less +18 -0
  210. package/src/styles/components/unit/DshFormItem.less +124 -0
  211. package/src/styles/define.less +374 -0
  212. package/src/styles/index.less +10 -0
  213. package/src/styles/reset.less +83 -0
  214. package/src/styles/variables.less +98 -0
  215. package/src/styles/view_reset.less +446 -0
@@ -0,0 +1,203 @@
1
+ <template>
2
+ <div
3
+ class="DshDefaultSearch bri-scrollbar6"
4
+ :style="{
5
+ 'margin-bottom': canUseFold ? '20px' : undefined
6
+ }"
7
+ >
8
+ <!-- 筛选表单 -->
9
+ <div
10
+ class="DshDefaultSearch-form"
11
+ :style="{
12
+ height: canUseFold && !isSpreadStatus ? `${46 * showRowNum}px` : undefined,
13
+ overflow: canUseFold && !isSpreadStatus ? 'hidden' : undefined
14
+ }"
15
+ >
16
+ <Row :gutter="10">
17
+ <template v-for="conditionItem in conditionList">
18
+ <Col
19
+ :key="conditionItem._id"
20
+ :span="conditionItem.formItem._span"
21
+ >
22
+ <dsh-formItem
23
+ :key="conditionItem._id"
24
+ class="DshDefaultSearch-item"
25
+ :formData="conditionItem"
26
+ :formItem="conditionItem.formItem"
27
+ height="46"
28
+ :labelStyle="labelStyle"
29
+ :rowStyle="rowStyle"
30
+ @change="change(conditionItem, arguments)"
31
+ >
32
+ <span
33
+ slot="label"
34
+ class="DshDefaultSearch-item-name"
35
+ >
36
+ {{ conditionItem.formItem._name }}
37
+ </span>
38
+ </dsh-formItem>
39
+ </Col>
40
+
41
+ <!-- 换行 -->
42
+ <div
43
+ v-if="conditionItem.formItem._wrap"
44
+ :key="conditionItem._id + '_wrap'"
45
+ style="width:100%"
46
+ ></div>
47
+ </template>
48
+ </Row>
49
+ </div>
50
+
51
+ <!-- 展开/叠起 -->
52
+ <div
53
+ v-if="canUseFold"
54
+ class="DshDefaultSearch-fold"
55
+ >
56
+ <div class="DshDefaultSearch-fold-zhanwei"></div>
57
+ <Icon
58
+ :class="[
59
+ 'DshDefaultSearch-fold-icon',
60
+ isSpreadStatus ? 'arrow-up' : 'arrow-down'
61
+ ]"
62
+ custom="bico-font bico-shuangjiantou"
63
+ @click="toggleSpreadStatus"
64
+ />
65
+ </div>
66
+ </div>
67
+ </template>
68
+
69
+ <script>
70
+ import searchMixin from "./searchMixin.js";
71
+
72
+ export default {
73
+ name: "DshDefaultSearch",
74
+ mixins: [
75
+ searchMixin
76
+ ],
77
+ props: {
78
+ initValue: {
79
+ type: Array,
80
+ default () {
81
+ return [];
82
+ }
83
+ },
84
+ labelWidth: {
85
+ type: Number,
86
+ default: 100
87
+ },
88
+ showRowNum: {
89
+ type: Number,
90
+ default: 2
91
+ }
92
+ },
93
+ data () {
94
+ return {
95
+ conditionList: [],
96
+ isSpreadStatus: false, // 是否展开
97
+
98
+ rowStyle: {
99
+ width: "calc(100% - 12px)"
100
+ },
101
+ labelStyle: {
102
+ textAlign: "center",
103
+ margin: 0,
104
+ color: "#666666",
105
+ border: "1px solid rgba(229, 229, 229, 1)",
106
+ background: "rgba(245, 245, 245, 1)",
107
+ padding: "5px 10px",
108
+ borderRight: "none",
109
+ height: "32px",
110
+ boxSizing: "border-box",
111
+ width: this.labelWidth + "px"
112
+ }
113
+ };
114
+ },
115
+ computed: {
116
+ searchFormList () {
117
+ return this.formList.filter(formItem => this.$formHasAbility(formItem, "canDefaultSearch"));
118
+ },
119
+
120
+ // 总span
121
+ allSpan () {
122
+ return this.searchFormList.reduce((totalSpan, formItem) => {
123
+ const curSpan = formItem._span || 24;
124
+
125
+ // 有余数,代表不是整行
126
+ if (totalSpan % 24 && (totalSpan + curSpan) % 24) {
127
+ const previousRow = Math.floor(totalSpan / 24);
128
+ const nowRow = Math.floor((totalSpan + curSpan) / 24);
129
+
130
+ // 或者用 previousRow < nowRow 判断
131
+ return previousRow !== nowRow
132
+ ? (previousRow + 1) * 24 + curSpan
133
+ : totalSpan + curSpan;
134
+ } else {
135
+ return totalSpan + curSpan;
136
+ }
137
+ }, 0);
138
+ },
139
+ allRowNum () {
140
+ return Math.ceil(this.allSpan / 24);
141
+ },
142
+ // 判断是否符合折叠情形,showRowNum为null时候不使用展开/收合,为0时候就是一行不露出来
143
+ canUseFold () {
144
+ return this.showRowNum == null
145
+ ? false
146
+ : this.allRowNum > this.showRowNum;
147
+ }
148
+ },
149
+ created () {
150
+ this.init();
151
+ },
152
+ methods: {
153
+ init () {
154
+ this.conditionList = this.searchFormList.map(formItem => {
155
+ const initConditionItem = this.initValue.find(initItem => initItem.fieldKey === formItem._key);
156
+ return this.createContionFunc(initConditionItem, formItem);
157
+ });
158
+ },
159
+ // 切换展开/折叠
160
+ toggleSpreadStatus () {
161
+ this.isSpreadStatus = !this.isSpreadStatus;
162
+ },
163
+
164
+ // 获取表单配置
165
+ getFormItem (formItem) {
166
+ return {
167
+ ...this.formatFormItem(formItem),
168
+ _line: true,
169
+ _br: formItem._defaultSearchBr,
170
+ _wrap: formItem._defaultSearchWrap,
171
+
172
+ ...(
173
+ // date、daterange类型的(formItem._type基本不会为daterange)
174
+ ["date", "daterange"].includes(formItem._type)
175
+ ? {
176
+ _useShortcuts: false
177
+ }
178
+ // select、checkbox、以及switch(都会转成checkbox)类型的
179
+ : ["switch", "select", "checkbox"].includes(formItem._type)
180
+ ? {
181
+ _optionKind: "dropdown",
182
+ _useColor: false
183
+ }
184
+ // labels类型的
185
+ : ["labels"].includes(formItem._type)
186
+ ? {
187
+ mode: "defaultSearch"
188
+ }
189
+ : {}
190
+ )
191
+ };
192
+ },
193
+ // 发生改动
194
+ change (conditionItem) {
195
+ const conditionList = this.transformConditions(this.conditionList).filter(item =>
196
+ !!item.fieldValue.length
197
+ );
198
+
199
+ this.$emit("change", conditionList, conditionItem);
200
+ }
201
+ }
202
+ };
203
+ </script>
@@ -0,0 +1,364 @@
1
+ <template>
2
+ <Form
3
+ class="DshForm"
4
+ ref="form"
5
+ :model="formData"
6
+ :rules="showRules ? rules : {}"
7
+ @submit.native.prevent
8
+ >
9
+ <Row>
10
+ <template v-for="(formItem) in formList">
11
+ <i-col
12
+ v-if="isShow(formItem, formData)"
13
+ :key="formItem._key"
14
+ :id="formItem._key"
15
+ class="DshForm-item"
16
+ :span="formItem._br ? 24 : (formItem._span || 24)"
17
+ >
18
+ <FormItem
19
+ :class="['DshForm-item-FormItem', formItemClass]"
20
+ :prop="formItem._key"
21
+ @click.native="clickControl(formItem)"
22
+ >
23
+ <dsh-formItem
24
+ ref="dshFormItem"
25
+ :mode="mode"
26
+ :canEdit="canEdit"
27
+ :formData="formData"
28
+ :isShare="isShare"
29
+ :formItem="formItem"
30
+ :allFormList="allFormList"
31
+ :changedFields="changedFields"
32
+ :rowStyle="rowStyle"
33
+ :labelStyle="labelStyle"
34
+ :height="height"
35
+ :label-width="labelWidth"
36
+ :formControlClass="formControlClass"
37
+ @change="change(formItem, arguments)"
38
+ @refChange="refChange(formItem, arguments)"
39
+ @changeField="changeField"
40
+ >
41
+ <slot
42
+ :mode="mode"
43
+ :canEdit="canEdit"
44
+ :formItem="formItem"
45
+ :formData="formData"
46
+ :allFormList="allFormList"
47
+ ></slot>
48
+
49
+ <slot
50
+ name="label"
51
+ slot="label"
52
+ :canEdit="canEdit"
53
+ :formItem="formItem"
54
+ :formData="formData"
55
+ :allFormList="allFormList"
56
+ ></slot>
57
+
58
+ <slot
59
+ name="extra"
60
+ slot="extra"
61
+ :canEdit="canEdit"
62
+ :formItem="formItem"
63
+ :formData="formData"
64
+ :allFormList="allFormList"
65
+ ></slot>
66
+
67
+ <slot
68
+ name="corner"
69
+ slot="corner"
70
+ :canEdit="canEdit"
71
+ :formItem="formItem"
72
+ :formData="formData"
73
+ :allFormList="allFormList"
74
+ ></slot>
75
+ </dsh-formItem>
76
+ </FormItem>
77
+ </i-col>
78
+
79
+ <!-- 换行 -->
80
+ <i-col
81
+ v-if="formItem._wrap"
82
+ :key="formItem._key + '_wrap'"
83
+ style="min-height: 0px;"
84
+ :span="24"
85
+ ></i-col>
86
+ </template>
87
+
88
+ <div
89
+ v-if="!formList.filter(formItem => isShow(formItem, formData)).length"
90
+ class="dsh-tip"
91
+ >{{ "--- 无字段 ---" }}</div>
92
+ </Row>
93
+ </Form>
94
+ </template>
95
+
96
+ <script>
97
+ export default {
98
+ name: "DshForm",
99
+ components: {},
100
+ props: {
101
+ mode: String,
102
+ canEdit: {
103
+ type: Boolean,
104
+ default: true
105
+ },
106
+ formData: {
107
+ type: Object,
108
+ default () {
109
+ return {};
110
+ }
111
+ },
112
+ formList: {
113
+ type: Array,
114
+ default () {
115
+ return [];
116
+ }
117
+ },
118
+ monitorFormList: Array,
119
+ allFormList: {
120
+ type: Array,
121
+ default () {
122
+ return [];
123
+ }
124
+ },
125
+ changedFields: Array,
126
+
127
+ rowStyle: {
128
+ type: Object,
129
+ default () {
130
+ return {};
131
+ }
132
+ },
133
+ labelStyle: {
134
+ type: Object,
135
+ default () {
136
+ return {};
137
+ }
138
+ },
139
+
140
+ height: [String, Number],
141
+ labelWidth: [String, Number],
142
+ formItemClass: String,
143
+ formControlClass: String,
144
+ isShare: Boolean,
145
+ showRules: {
146
+ type: Boolean,
147
+ default: true
148
+ }
149
+ },
150
+ data () {
151
+ return {
152
+ rules: {},
153
+ forceValidateTypes: ["select", "cascader", "regions", "cascaders", "file", "coordinates", "editor", "users", "departments", "labels", "flatTable", "reference", "referenceBy"],
154
+ ignoreProperties: [
155
+ "_name", "_key", "_default", "_required", "_span", "_br", "_line", "_noLabel", "_clearable",
156
+ "_disabledBtns", "_disabledOldDataRow"
157
+ ]
158
+ };
159
+ },
160
+ computed: {},
161
+ created () {
162
+ this.init();
163
+ },
164
+ methods: {
165
+ // 初始化
166
+ init () {
167
+ this.initMonitor();
168
+ this.initRules();
169
+ },
170
+ // 初始化监测
171
+ initMonitor () {
172
+ // 监测所有字段
173
+ (this.monitorFormList || this.formList).forEach(formItem => {
174
+ this.$set(this.formData, formItem._key, this.formData[formItem._key]);
175
+ });
176
+ },
177
+ // 初始化校验
178
+ initRules () {
179
+ // 此处代码可以改,但写法不能改!不然会引起表单页面渲染完就自动校验
180
+ (this.monitorFormList || this.formList).reduce((rulesObj, formItem) => {
181
+ rulesObj[formItem._key] = this.getRules(formItem);
182
+ return rulesObj;
183
+ }, this.rules);
184
+ },
185
+
186
+ /* ------- 供外部使用 ---------- */
187
+ // 获取iview的form组件实例
188
+ getFormVDom () {
189
+ return this.$refs.form;
190
+ },
191
+ // 控件校验
192
+ validate (callback) {
193
+ let bool = true;
194
+ let errorRefs = [];
195
+
196
+ if (this.$refs.dshFormItem) {
197
+ errorRefs = this.$refs.dshFormItem.filter(refItem => !refItem.validate());
198
+ bool = !errorRefs.length;
199
+ } else {
200
+ bool = true;
201
+ }
202
+ callback && callBack(bool, errorRefs.map(errorRefItem => errorRefItem.formItem));
203
+
204
+ return bool;
205
+ },
206
+
207
+ // 点击控件
208
+ clickControl (formItem) {
209
+ this.$emit("clickControl", formItem);
210
+ },
211
+ // 切换字段
212
+ changeField (...params) {
213
+ this.$emit("changeField", ...params);
214
+ },
215
+ // 发生改动
216
+ change (formItem, params) {
217
+ this.forceFormValidate(formItem, params);
218
+ this.$emit("change", formItem, ...params);
219
+ },
220
+ // 关联表相关的change
221
+ refChange (formItem, params) {
222
+ this.$emit("refChange", formItem, ...params);
223
+ },
224
+
225
+ /* -------- 工具类 -------- */
226
+ isShow (formItem, formData) {
227
+ // 寻找循环项
228
+ if (formItem._loop === true) {
229
+ Object.entries({
230
+ ...formData,
231
+ _displayType: "show",
232
+ canEdit: true
233
+ }).forEach(arr => {
234
+ !this.ignoreProperties.includes(arr[0]) && this.$set(formItem, arr[0], arr[1]);
235
+ });
236
+ }
237
+
238
+ // 判断各项 依赖的值
239
+ if (formItem._displayType === "show") {
240
+ return true;
241
+ } else if (formItem._displayType === "hide") {
242
+ return false;
243
+ } else {
244
+ if (
245
+ (formItem._advRely && formItem._advRely.conditions && formItem._advRely.conditions.length) ||
246
+ (formItem._rely && formItem._rely.length)
247
+ ) {
248
+ const isAccord = formItem._advRely && formItem._advRely.conditions && formItem._advRely.conditions.length
249
+ ? this.$isAdvRelyAccord(formItem._advRely, formData)
250
+ : this.$isRelyAccord(formItem, formData);
251
+
252
+ formData[formItem._key] = isAccord === true
253
+ ? formData[formItem._key] !== undefined
254
+ ? formData[formItem._key]
255
+ : this.$deepCopy(formItem._default)
256
+ : undefined;
257
+
258
+ return isAccord;
259
+ } else {
260
+ return true;
261
+ }
262
+ }
263
+ },
264
+ getRules (formItem) {
265
+ let rules = [];
266
+ let ruleConfig = this.$getFormTypeRuleConfig(formItem);
267
+
268
+ // 格式校验 (不依赖必填)
269
+ if (ruleConfig.regs && ruleConfig.regs.length) {
270
+ rules.push({
271
+ message: formItem.regMessage || `${formItem._name}格式不正确`,
272
+ trigger: "blur",
273
+ transform: (val) => {
274
+ if (this.$isEmptyData(val)) {
275
+ return val;
276
+ } else {
277
+ return ruleConfig.regs.every(regItem => regItem.test(val)) && val;
278
+ }
279
+ },
280
+ ...ruleConfig
281
+ });
282
+ }
283
+ // 必填校验
284
+ if (formItem._required) {
285
+ // 其他配置
286
+ const subFieldsMap = {
287
+ coordinates: {
288
+ fields: {
289
+ lnglat: {
290
+ required: true,
291
+ message: `${formItem._name}为必填项`,
292
+ type: "array"
293
+ }
294
+ }
295
+ },
296
+ flatTable: {
297
+ fields: {
298
+ list: {
299
+ required: true,
300
+ message: `${formItem._name}不能为空行!`,
301
+ type: "array"
302
+ }
303
+ }
304
+ },
305
+ referenceBy: {
306
+ fields: {
307
+ count: {
308
+ message: `${formItem._name}必须关联数据!`,
309
+ type: "number",
310
+ transform: (val) => {
311
+ if (val && val > 0) {
312
+ return val;
313
+ } else {
314
+ return false;
315
+ }
316
+ }
317
+ }
318
+ }
319
+ }
320
+ };
321
+
322
+ rules.push({
323
+ required: true,
324
+ message: `${formItem._name}为必填项!`,
325
+ trigger: "blur, change",
326
+ type: "string",
327
+ ...(subFieldsMap[formItem._type] || {}),
328
+ ...ruleConfig
329
+ });
330
+ }
331
+
332
+ return rules;
333
+ },
334
+ // 强行执行一些校验
335
+ forceFormValidate (curFormItem) {
336
+ if (curFormItem._required === true && this.forceValidateTypes.includes(curFormItem._type)) {
337
+ this.$refs.form.validateField(curFormItem._key);
338
+ }
339
+ }
340
+ },
341
+ watch: {
342
+ formList () {
343
+ this.init();
344
+ }
345
+ }
346
+ };
347
+ </script>
348
+
349
+ <style lang="less" scoped>
350
+ .DshForm {
351
+
352
+ }
353
+ </style>
354
+ <style lang="less">
355
+ .DshForm {
356
+ &-item-FormItem {
357
+ margin-bottom: 0px!important;
358
+ // .ivu-form-item-content {
359
+ // line-height: 1.5;
360
+ // font-size: 18px;
361
+ // }
362
+ }
363
+ }
364
+ </style>