cloud-web-corejs 1.0.281 → 1.1.0-dev.10

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 (192) hide show
  1. package/package.json +6 -2
  2. package/src/components/VabUpload/image-viewer.vue +442 -442
  3. package/src/components/VabUpload/index.vue +45 -3
  4. package/src/components/VabUpload/mixins.js +126 -19
  5. package/src/components/VabUpload/view.vue +248 -209
  6. package/src/components/baseTabs/mixins.js +181 -181
  7. package/src/components/bizTab/BizBillActions.vue +129 -0
  8. package/src/components/bizTab/BizTabListPage.vue +391 -0
  9. package/src/components/bizTab/README.md +378 -0
  10. package/src/components/bizTab/billTableUtil.js +48 -0
  11. package/src/components/bizTab/billValidators.js +136 -0
  12. package/src/components/bizTab/bizBillDetailMixin.js +705 -0
  13. package/src/components/bizTab/index.js +24 -0
  14. package/src/components/excelExport/exportFieldDialog.vue +23 -12
  15. package/src/components/excelExport/exportItemConfigUtil.js +30 -0
  16. package/src/components/excelExport/mixins.js +3 -3
  17. package/src/components/excelImport/index.vue +156 -156
  18. package/src/components/jsonImport/index.vue +1 -1
  19. package/src/components/langImport/index.vue +1 -1
  20. package/src/components/mobile/statusTag/mixins.js +1 -61
  21. package/src/components/mobile/wf/addTaskUserdialog.vue +23 -3
  22. package/src/components/mobile/wf/content.vue +1705 -1556
  23. package/src/components/mobile/wf/deleteTaskUserDialog.vue +22 -3
  24. package/src/components/mobile/wf/mixins/wfModifyDialogMixin.js +8 -6
  25. package/src/components/mobile/wf/selectUserDialog.vue +122 -0
  26. package/src/components/mobile/wf/setCandidateDialog.vue +25 -4
  27. package/src/components/mobile/wf/urgingDialog.vue +26 -3
  28. package/src/components/mobile/wf/wfModifyDialog.vue +4 -0
  29. package/src/components/obsUpload/index.vue +1 -1
  30. package/src/components/table/config.js +78 -78
  31. package/src/components/table/index.js +1276 -1276
  32. package/src/components/table/plugins/cell-area/index.js +1055 -0
  33. package/src/components/table/plugins/cell-area/index.scss +77 -0
  34. package/src/components/table/plugins/cell-area/util.js +224 -0
  35. package/src/components/table/tableForm.vue +330 -330
  36. package/src/components/table/tableFormMixin.js +318 -318
  37. package/src/components/table/vxeFilter/index.js +163 -163
  38. package/src/components/table/vxeFilter/mixin.js +316 -316
  39. package/src/components/wf/content.vue +1188 -1188
  40. package/src/components/wf/wf.js +40 -20
  41. package/src/components/wf/wfActionDropdown.vue +1 -1
  42. package/src/components/wf/wfActionItems.js +1 -1
  43. package/src/components/xform/docs/2026-08 xform H5 P0 /345/256/236/347/216/260/350/247/204/346/240/274.md" +528 -0
  44. package/src/components/xform/docs/2026-08 xform H5 P1 /345/256/236/347/216/260/350/247/204/346/240/274.md" +412 -0
  45. package/src/components/xform/docs/2026-08 xform H5 P2 /345/256/236/347/216/260/350/247/204/346/240/274.md" +287 -0
  46. package/src/components/xform/docs/2026-08 xform /347/247/273/345/212/250/347/253/257/345/270/203/345/261/200/345/257/271/351/275/220 bill_setting /346/226/271/346/241/210.md" +400 -0
  47. package/src/components/xform/form-designer/designer.js +51 -52
  48. package/src/components/xform/form-designer/form-widget/container-widget/data-table-widget.vue +269 -269
  49. package/src/components/xform/form-designer/form-widget/container-widget/detail-h5-widget.vue +18 -2
  50. package/src/components/xform/form-designer/form-widget/container-widget/detail-temp-widget.vue +132 -0
  51. package/src/components/xform/form-designer/form-widget/container-widget/detail-widget.vue +250 -250
  52. package/src/components/xform/form-designer/form-widget/container-widget/h5-card-pane-widget.vue +23 -2
  53. package/src/components/xform/form-designer/form-widget/container-widget/h5-card-widget.vue +30 -1
  54. package/src/components/xform/form-designer/form-widget/dialog/fileReferenceDialog.vue +319 -320
  55. package/src/components/xform/form-designer/form-widget/dialog/formDialog.vue +365 -365
  56. package/src/components/xform/form-designer/form-widget/dialog/importDialog.vue +185 -185
  57. package/src/components/xform/form-designer/form-widget/dialog/searchFormDialog.vue +554 -555
  58. package/src/components/xform/form-designer/form-widget/dialog/vabSearchDialog.vue +409 -409
  59. package/src/components/xform/form-designer/form-widget/field-widget/a-link-widget.vue +150 -132
  60. package/src/components/xform/form-designer/form-widget/field-widget/date-range-widget.vue +114 -114
  61. package/src/components/xform/form-designer/form-widget/field-widget/date-widget.vue +154 -154
  62. package/src/components/xform/form-designer/form-widget/field-widget/form-item-wrapper.vue +47 -1
  63. package/src/components/xform/form-designer/form-widget/field-widget/mixins/date-limit-mixin.js +178 -178
  64. package/src/components/xform/form-designer/form-widget/field-widget/mixins/time-limit-mixin.js +77 -77
  65. package/src/components/xform/form-designer/form-widget/field-widget/select-export-item-button-widget.vue +6 -0
  66. package/src/components/xform/form-designer/form-widget/field-widget/select-widget.vue +139 -139
  67. package/src/components/xform/form-designer/form-widget/field-widget/singleUpload-widget.vue +1 -1
  68. package/src/components/xform/form-designer/form-widget/field-widget/time-range-widget.vue +106 -106
  69. package/src/components/xform/form-designer/form-widget/field-widget/time-widget.vue +134 -134
  70. package/src/components/xform/form-designer/form-widget/field-widget/vabUpload-widget.vue +3 -2
  71. package/src/components/xform/form-designer/indexMixin.js +35 -1
  72. package/src/components/xform/form-designer/setting-panel/form-setting.vue +39 -39
  73. package/src/components/xform/form-designer/setting-panel/property-editor/container-data-table/data-table-editor.vue +10 -10
  74. package/src/components/xform/form-designer/setting-panel/property-editor/container-data-table/exportItemColumns-dialog.vue +438 -432
  75. package/src/components/xform/form-designer/setting-panel/property-editor/container-data-table/table-column-dialog.vue +2103 -2103
  76. package/src/components/xform/form-designer/setting-panel/property-editor/container-detail/detail-temp-edito.vue +90 -0
  77. package/src/components/xform/form-designer/setting-panel/property-editor/container-grid/gutter-editor.vue +82 -82
  78. package/src/components/xform/form-designer/setting-panel/property-editor/container-list-h5/list-h5-editor.vue +833 -846
  79. package/src/components/xform/form-designer/setting-panel/property-editor/container-table/table-dynamicField-editor.vue +8 -8
  80. package/src/components/xform/form-designer/setting-panel/property-editor/dropdownFlag-editor.vue +137 -137
  81. package/src/components/xform/form-designer/setting-panel/property-editor/field-button/search-dialog-event-editor.vue +237 -237
  82. package/src/components/xform/form-designer/setting-panel/property-editor/field-date/date-defaultValue-editor.vue +43 -43
  83. package/src/components/xform/form-designer/setting-panel/property-editor/field-date-range/date-range-defaultValue-editor.vue +43 -43
  84. package/src/components/xform/form-designer/setting-panel/property-editor/field-import-button/import2-button-editor.vue +96 -96
  85. package/src/components/xform/form-designer/setting-panel/property-editor/field-table-export-button/select-export-item-button-editor.vue +51 -0
  86. package/src/components/xform/form-designer/setting-panel/property-editor/field-time/time-defaultValue-editor.vue +42 -42
  87. package/src/components/xform/form-designer/setting-panel/property-editor/field-time-range/time-range-defaultValue-editor.vue +43 -43
  88. package/src/components/xform/form-designer/setting-panel/property-editor/formScriptEnabled-editor.vue +158 -158
  89. package/src/components/xform/form-designer/setting-panel/property-editor/h5Span-editor.vue +51 -0
  90. package/src/components/xform/form-designer/setting-panel/property-editor/itemStyle-editor.vue +39 -0
  91. package/src/components/xform/form-designer/setting-panel/property-editor/name-editor.vue +188 -188
  92. package/src/components/xform/form-designer/setting-panel/property-editor/styleTempClass-editor.vue +51 -0
  93. package/src/components/xform/form-designer/setting-panel/property-editor/textFlag-editor.vue +347 -347
  94. package/src/components/xform/form-designer/setting-panel/propertyRegister.js +12 -0
  95. package/src/components/xform/form-designer/toolbar-panel/index.vue +884 -874
  96. package/src/components/xform/form-designer/toolbar-panel/indexMixin.js +14 -0
  97. package/src/components/xform/form-designer/widget-panel/index.vue +11 -7
  98. package/src/components/xform/form-designer/widget-panel/indexMixin.js +30 -6
  99. package/src/components/xform/form-designer/widget-panel/widgetsConfig.js +112 -4
  100. package/src/components/xform/form-render/container-item/data-table-mixin.js +151 -93
  101. package/src/components/xform/form-render/container-item/detail-h5-item.vue +204 -34
  102. package/src/components/xform/form-render/container-item/detail-temp-item.vue +110 -0
  103. package/src/components/xform/form-render/container-item/h5-card-pane-item.vue +160 -140
  104. package/src/components/xform/form-render/container-item/list-h5-item.vue +1913 -1699
  105. package/src/components/xform/form-render/index.vue +153 -147
  106. package/src/components/xform/form-render/indexMixin.js +35 -3
  107. package/src/components/xform/lang/en-US.js +14 -0
  108. package/src/components/xform/lang/zh-CN.js +17 -0
  109. package/src/components/xform/mixins/defaultHandle.js +707 -707
  110. package/src/components/xform/styles/h5.scss +2238 -0
  111. package/src/components/xform/utils/textMaskUtil.js +182 -179
  112. package/src/components/xform/utils/treeTableUtil.js +1292 -1265
  113. package/src/components/xform/utils/util.js +56 -11
  114. package/src/directive/append-to-body/index.js +48 -0
  115. package/src/index.js +13 -4
  116. package/src/layout/components/Sidebar/default.vue +1655 -1655
  117. package/src/layout/components/extractedCode/viewDialog.vue +7 -7
  118. package/src/router/index.js +48 -27
  119. package/src/router/modules/customer.js +71 -14
  120. package/src/store/modules/permission.js +17 -18
  121. package/src/utils/assetUrl.js +19 -0
  122. package/src/utils/pdfUtil.js +429 -429
  123. package/src/utils/resolveViewComponent.js +142 -16
  124. package/src/utils/vab.js +1283 -1279
  125. package/src/views/bd/project/branch/bd_branch/edit.vue +145 -0
  126. package/src/views/bd/project/branch/bd_branch/list.vue +72 -0
  127. package/src/views/bd/project/branch/bd_branch/menuKindDialog.vue +106 -0
  128. package/src/views/bd/project/branch/bd_branch/mixins/edit.js +189 -0
  129. package/src/views/bd/project/branch/bd_branch/mixins/list.js +124 -0
  130. package/src/views/bd/project/branch/bd_branch/mixins/menuKindDialog.js +85 -0
  131. package/src/views/bd/project/branch/form_script/list.vue +31 -0
  132. package/src/views/bd/project/branch/form_template/list.vue +30 -0
  133. package/src/views/bd/project/branch/menu_kind/list.vue +31 -0
  134. package/src/views/bd/project/common/form_script/list.vue +16 -0
  135. package/src/views/bd/project/common/form_template/list.vue +15 -0
  136. package/src/views/bd/project/common/menu_kind/list.vue +15 -0
  137. package/src/views/bd/project/core/branchContext.js +100 -0
  138. package/src/views/bd/project/core/branchPage.js +78 -0
  139. package/src/views/bd/project/core/branchPageWrap.vue +225 -0
  140. package/src/views/bd/project/core/branchScope.js +44 -0
  141. package/src/views/bd/project/core/branchSearchPage.js +285 -0
  142. package/src/views/bd/project/core/branchSelect.vue +85 -0
  143. package/src/views/bd/project/core/branchTreeBar.vue +81 -0
  144. package/src/views/bd/project/core/httpBranchPatch.js +58 -0
  145. package/src/views/bd/project/datatable/menu_kind/list.vue +15 -0
  146. package/src/views/bd/project/datatable/table_model/list.vue +15 -0
  147. package/src/views/bd/setting/bd_company_env/dialog.vue +174 -174
  148. package/src/views/bd/setting/form_template/edit.vue +378 -356
  149. package/src/views/bd/setting/form_template/formDesignerDialog.vue +6 -0
  150. package/src/views/bd/setting/form_template/formTemplateType.js +43 -0
  151. package/src/views/bd/setting/form_template/list.vue +304 -303
  152. package/src/views/bd/setting/form_template/mixins/edit.js +344 -280
  153. package/src/views/bd/setting/form_template/mixins/list.js +748 -721
  154. package/src/views/bd/setting/table_model/edit.vue +1066 -1066
  155. package/src/views/bd/setting/table_model/mixins/edit.js +1455 -1455
  156. package/src/views/bd/setting/table_model/mixins/zdDialog.js +148 -148
  157. package/src/views/demo/bizTab/bill/billConfig.js +41 -0
  158. package/src/views/demo/bizTab/bill/detail.vue +436 -0
  159. package/src/views/demo/bizTab/bill/list.vue +288 -0
  160. package/src/views/demo/bizTab/bill/productDialog.vue +176 -0
  161. package/src/views/demo/bizTab/simple/billApi.js +123 -0
  162. package/src/views/demo/bizTab/simple/detail.vue +407 -0
  163. package/src/views/demo/bizTab/simple/list.vue +217 -0
  164. package/src/views/demo/bizTab/standalone/index.vue +121 -0
  165. package/src/views/demo/bizTab/wf/billConfig.js +44 -0
  166. package/src/views/demo/bizTab/wf/detail.vue +661 -0
  167. package/src/views/demo/bizTab/wf/list.vue +242 -0
  168. package/src/views/support/form-dialog-demo/demoPickerDialog.vue +72 -0
  169. package/src/views/support/form-dialog-demo/index.vue +537 -0
  170. package/src/views/user/file_view_ins/list.vue +970 -970
  171. package/src/views/user/form/vform/designer.vue +823 -821
  172. package/src/views/user/home/default.vue +1117 -1117
  173. package/src/views/user/home/default2.vue +1 -1
  174. package/src/views/user/home/index.vue +103 -101
  175. package/src/views/user/home/wjl/content.vue +1569 -0
  176. package/src/views/user/notify_message/dialog.vue +139 -137
  177. package/src/views/user/outLink/cc_form_view.vue +188 -0
  178. package/src/views/user/outLink/form_view.vue +202 -202
  179. package/src/views/user/outLink/index.vue +110 -110
  180. package/src/views/user/outLink/view.vue +3 -3
  181. package/src/views/user/role/edit.vue +632 -632
  182. package/src/views/user/role/list.vue +260 -260
  183. package/src/views/user/wf/iframe/index.vue +51 -51
  184. package/src/views/user/wf/iframe/index2.vue +64 -64
  185. package/src/views/user/wf/wf_manage/list.vue +1112 -1116
  186. package/src/views/user/wf/wf_manage/list2.vue +871 -875
  187. package/src/views/user/wf/wf_manage/wfContentDialog.vue +134 -131
  188. package/src/views/user/wf/wf_obj_config/importItemDialog.vue +1 -1
  189. package/src/components/xform/form-designer/form-widget/field-widget/dropdown-menu-widget.vue +0 -106
  190. package/src/components/xform/form-designer/form-widget/field-widget/tableexportbuttonwidget.vue +0 -99
  191. package/src/components/xform/form-render/container-item/list-h5-item2.vue +0 -1340
  192. package/src/utils/wf.js +0 -766
@@ -1,181 +1,181 @@
1
- import { scrollIntoScrollParent } from '@base/utils/scrollUtil';
2
-
3
- let baseTabsMixin, baseTabPaneMixin;
4
-
5
- baseTabsMixin = {
6
- props: {
7
- value: {
8
- type: [String, Number]
9
- }
10
- },
11
- data: function () {
12
- return {
13
- currentValue: this.value,
14
- navList: []
15
- };
16
- },
17
- methods: {
18
- tabCls: function (item) {
19
- return [
20
- 'tabs-tab',
21
- {
22
- 'tabs-tab-active': item.name === this.currentValue
23
- }
24
- ];
25
- },
26
- //遍历所有为pane的子元素
27
- getTabs() {
28
- let list = [];
29
- if (this.$slots.default) {
30
- this.$slots.default.filter(item => {
31
- return item.child !== undefined && item.child !== null;
32
- }).map(item => item.child).forEach(item => {
33
- if (item.$options.name === 'baseTabPane') {
34
- list.push(item);
35
- } else if (item.$attrs.tabPaneGrade === '2' || item.$attrs.tabPaneGrade === 2) {
36
- let items = item.$children.filter(function (thirdItem) {
37
- return thirdItem.$options.name === 'baseTabPane';
38
- });
39
- list.push(...items);
40
- }
41
- });
42
- }
43
- return list;
44
- },
45
- //将pane子元素中label name放进navList数组
46
- updateNav() {
47
- let navList = [];
48
- let _this = this;
49
- this.getTabs().forEach(function (pane, index) {
50
- navList.push({
51
- label: pane.label,
52
- name: pane.name || index,
53
- visible: pane.visible
54
- });
55
-
56
- // if (!pane.name) pane.name = index;
57
- if (index === 0) {
58
- if (!_this.currentValue) {
59
- _this.currentValue = pane.name || index;
60
- }
61
- }
62
- });
63
- this.navList = navList;
64
- this.updateStatus();
65
- },
66
- updateStatus() {
67
- let tabs = this.getTabs();
68
- let _this = this;
69
- //显示当前正在选中的
70
- tabs.forEach(function (tab) {
71
- return (tab.show = tab.name === _this.currentValue);
72
- });
73
- },
74
- handleChange: function (index) {
75
- let nav = this.navList[index];
76
- let name = nav.name;
77
- this.currentValue = name;
78
- this.$emit('input', name);
79
- this.$emit('on-click', name);
80
- let target = this.getTabs()[index].$el;
81
- //滚动体是 .d-cont 还是它外面那层(.d-header + div{flex:1;overflow-y:auto})由布局决定,
82
- //原来写死 .d-cont,在 .d-cont 没有确定高度(height:inherit 拿到 auto)的页面上
83
- //scrollTop 赋值是空操作,点导航没反应——统一交给 scrollIntoScrollParent 找真正的滚动体。
84
- scrollIntoScrollParent(target);
85
- }
86
- },
87
- watch: {
88
- value: function (val) {
89
- this.currentValue = val;
90
- },
91
- currentValue: function () {
92
- this.updateStatus();
93
- }
94
- }
95
- };
96
-
97
- baseTabPaneMixin = {
98
- props: {
99
- name: {
100
- type: String
101
- },
102
- label: {
103
- type: String,
104
- default: ''
105
- },
106
- showFold: {
107
- type: Boolean,
108
- default: false
109
- },
110
- defaultShowContent: {
111
- type: Boolean,
112
- default: true
113
- },
114
- visible: {
115
- type: Boolean,
116
- default: undefined
117
- }
118
- },
119
- computed: {
120
- foldClass() {
121
- return this.showContent ? 'el-icon-arrow-up' : 'el-icon-arrow-down';
122
- }
123
- },
124
- beforeDestroy() {
125
- //getParent() 只认 baseTabs 父级/祖父级,拿不到就是没被 baseTabs 包着(如设计期画布、
126
- //或中间隔了 draggable),此时没有 navList 可维护,直接跳过——原来这里直接取 .navList 会崩。
127
- let parentPanel = this.getParent();
128
- if (!parentPanel) return;
129
- let navList = parentPanel.navList;
130
- if (navList.length <= 1) {
131
- this.updateNav();
132
- }
133
- },
134
- created() {
135
- if (this.showFold) {
136
- this.showContent = this.defaultShowContent;
137
- }
138
- },
139
- data: function () {
140
- return {
141
- show: true,
142
- showContent: true
143
- };
144
- },
145
- methods: {
146
- getParent() {
147
- if (this.$parent.$options.name === 'baseTabs') {
148
- return this.$parent;
149
- } else if (this.$parent.$parent && this.$parent.$parent.$options.name === 'baseTabs') {
150
- return this.$parent.$parent;
151
- }
152
- },
153
- updateNav() {
154
- let parentPanel = this.getParent();
155
- parentPanel && parentPanel.updateNav();
156
- },
157
- handleFold(val) {
158
- if (this.showFold) {
159
- this.showContent = (val !== null && val !== undefined ? val : !this.showContent);
160
- }
161
- }
162
- },
163
- watch: {
164
- label() {
165
- this.updateNav();
166
- }
167
- },
168
- mounted() {
169
- this.updateNav();
170
- if (this.visible !== undefined) {
171
- this.$watch('visible', (val) => {
172
- this.updateNav();
173
- })
174
- }
175
- }
176
- };
177
-
178
- export {
179
- baseTabsMixin,
180
- baseTabPaneMixin,
181
- }
1
+ import { scrollIntoScrollParent } from '@base/utils/scrollUtil';
2
+
3
+ let baseTabsMixin, baseTabPaneMixin;
4
+
5
+ baseTabsMixin = {
6
+ props: {
7
+ value: {
8
+ type: [String, Number]
9
+ }
10
+ },
11
+ data: function () {
12
+ return {
13
+ currentValue: this.value,
14
+ navList: []
15
+ };
16
+ },
17
+ methods: {
18
+ tabCls: function (item) {
19
+ return [
20
+ 'tabs-tab',
21
+ {
22
+ 'tabs-tab-active': item.name === this.currentValue
23
+ }
24
+ ];
25
+ },
26
+ //遍历所有为pane的子元素
27
+ getTabs() {
28
+ let list = [];
29
+ if (this.$slots.default) {
30
+ this.$slots.default.filter(item => {
31
+ return item.child !== undefined && item.child !== null;
32
+ }).map(item => item.child).forEach(item => {
33
+ if (item.$options.name === 'baseTabPane') {
34
+ list.push(item);
35
+ } else if (item.$attrs.tabPaneGrade === '2' || item.$attrs.tabPaneGrade === 2) {
36
+ let items = item.$children.filter(function (thirdItem) {
37
+ return thirdItem.$options.name === 'baseTabPane';
38
+ });
39
+ list.push(...items);
40
+ }
41
+ });
42
+ }
43
+ return list;
44
+ },
45
+ //将pane子元素中label name放进navList数组
46
+ updateNav() {
47
+ let navList = [];
48
+ let _this = this;
49
+ this.getTabs().forEach(function (pane, index) {
50
+ navList.push({
51
+ label: pane.label,
52
+ name: pane.name || index,
53
+ visible: pane.visible
54
+ });
55
+
56
+ // if (!pane.name) pane.name = index;
57
+ if (index === 0) {
58
+ if (!_this.currentValue) {
59
+ _this.currentValue = pane.name || index;
60
+ }
61
+ }
62
+ });
63
+ this.navList = navList;
64
+ this.updateStatus();
65
+ },
66
+ updateStatus() {
67
+ let tabs = this.getTabs();
68
+ let _this = this;
69
+ //显示当前正在选中的
70
+ tabs.forEach(function (tab) {
71
+ return (tab.show = tab.name === _this.currentValue);
72
+ });
73
+ },
74
+ handleChange: function (index) {
75
+ let nav = this.navList[index];
76
+ let name = nav.name;
77
+ this.currentValue = name;
78
+ this.$emit('input', name);
79
+ this.$emit('on-click', name);
80
+ let target = this.getTabs()[index].$el;
81
+ //滚动体是 .d-cont 还是它外面那层(.d-header + div{flex:1;overflow-y:auto})由布局决定,
82
+ //原来写死 .d-cont,在 .d-cont 没有确定高度(height:inherit 拿到 auto)的页面上
83
+ //scrollTop 赋值是空操作,点导航没反应——统一交给 scrollIntoScrollParent 找真正的滚动体。
84
+ scrollIntoScrollParent(target);
85
+ }
86
+ },
87
+ watch: {
88
+ value: function (val) {
89
+ this.currentValue = val;
90
+ },
91
+ currentValue: function () {
92
+ this.updateStatus();
93
+ }
94
+ }
95
+ };
96
+
97
+ baseTabPaneMixin = {
98
+ props: {
99
+ name: {
100
+ type: String
101
+ },
102
+ label: {
103
+ type: String,
104
+ default: ''
105
+ },
106
+ showFold: {
107
+ type: Boolean,
108
+ default: false
109
+ },
110
+ defaultShowContent: {
111
+ type: Boolean,
112
+ default: true
113
+ },
114
+ visible: {
115
+ type: Boolean,
116
+ default: undefined
117
+ }
118
+ },
119
+ computed: {
120
+ foldClass() {
121
+ return this.showContent ? 'el-icon-arrow-up' : 'el-icon-arrow-down';
122
+ }
123
+ },
124
+ beforeDestroy() {
125
+ //getParent() 只认 baseTabs 父级/祖父级,拿不到就是没被 baseTabs 包着(如设计期画布、
126
+ //或中间隔了 draggable),此时没有 navList 可维护,直接跳过——原来这里直接取 .navList 会崩。
127
+ let parentPanel = this.getParent();
128
+ if (!parentPanel) return;
129
+ let navList = parentPanel.navList;
130
+ if (navList.length <= 1) {
131
+ this.updateNav();
132
+ }
133
+ },
134
+ created() {
135
+ if (this.showFold) {
136
+ this.showContent = this.defaultShowContent;
137
+ }
138
+ },
139
+ data: function () {
140
+ return {
141
+ show: true,
142
+ showContent: true
143
+ };
144
+ },
145
+ methods: {
146
+ getParent() {
147
+ if (this.$parent.$options.name === 'baseTabs') {
148
+ return this.$parent;
149
+ } else if (this.$parent.$parent && this.$parent.$parent.$options.name === 'baseTabs') {
150
+ return this.$parent.$parent;
151
+ }
152
+ },
153
+ updateNav() {
154
+ let parentPanel = this.getParent();
155
+ parentPanel && parentPanel.updateNav();
156
+ },
157
+ handleFold(val) {
158
+ if (this.showFold) {
159
+ this.showContent = (val !== null && val !== undefined ? val : !this.showContent);
160
+ }
161
+ }
162
+ },
163
+ watch: {
164
+ label() {
165
+ this.updateNav();
166
+ }
167
+ },
168
+ mounted() {
169
+ this.updateNav();
170
+ if (this.visible !== undefined) {
171
+ this.$watch('visible', (val) => {
172
+ this.updateNav();
173
+ })
174
+ }
175
+ }
176
+ };
177
+
178
+ export {
179
+ baseTabsMixin,
180
+ baseTabPaneMixin,
181
+ }
@@ -0,0 +1,129 @@
1
+ <template>
2
+ <div class="fr">
3
+ <!-- 按钮顺序(.fr 里 DOM 次序即从左到右):
4
+ 翻单 → 提交流程 → 业务按钮(默认插槽) → 重置 → 保存
5
+ #before 是留给"要排在翻单之前"的特例,一般不用。
6
+ 另外 wfUtil 的「更多」下拉 / 「修改单据」是 append 到本容器最前面的,会落在最左侧。 -->
7
+ <slot name="before"></slot>
8
+ <!-- ① 上一单 / 下一单:列表侧 openDetail 传了 navRows 才出现 -->
9
+ <template v-if="showBillNav">
10
+ <!-- 用默认按钮而不是 primary+plain:element 对 primary+plain 的禁用态是淡蓝
11
+ (#8cc5ff/#ecf5ff),在头部一排蓝按钮里看不出不可点;默认按钮的禁用态本来就是灰的 -->
12
+ <el-button
13
+ class="button-sty"
14
+ icon="el-icon-arrow-left"
15
+ :disabled="!detail.canPrevBill || busy"
16
+ @click="detail.gotoPrevBill()"
17
+ >{{ $t1("上一单") }}</el-button
18
+ >
19
+ <el-button
20
+ class="button-sty"
21
+ :disabled="!detail.canNextBill || busy"
22
+ @click="detail.gotoNextBill()"
23
+ >{{ $t1("下一单") }}<i class="el-icon-arrow-right el-icon--right"
24
+ /></el-button>
25
+ </template>
26
+ <!-- ② 提交流程。新增页是「保存并提交流程」,已存过的单据是「提交流程」,两者互斥 -->
27
+ <el-button
28
+ v-if="detail.showSaveSubmitBtn"
29
+ type="success"
30
+ class="button-sty"
31
+ icon="el-icon-video-play"
32
+ :disabled="busy"
33
+ :loading="detail.billSaving"
34
+ @click="detail.saveAndSubmitHandle()"
35
+ >{{ detail.saveSubmitButtonName }}</el-button
36
+ >
37
+ <el-button
38
+ v-if="detail.showWfStartBtn"
39
+ type="success"
40
+ class="button-sty"
41
+ icon="el-icon-video-play"
42
+ :disabled="busy"
43
+ @click="detail.startWfHandle()"
44
+ >{{ detail.submitButtonName }}</el-button
45
+ >
46
+ <!-- ③ 业务按钮(作废/复制/打印这类各单据自己的动作) -->
47
+ <slot></slot>
48
+ <!-- ④⑤ 重置、保存。每个按钮都显式写 :disabled:el-button 没传 disabled 时会继承外层
49
+ el-form 的 disabled(element-ui button.vue buttonDisabled),显式传就切断这条继承 -->
50
+ <el-button
51
+ v-if="canEdit"
52
+ type="primary"
53
+ plain
54
+ class="button-sty"
55
+ icon="el-icon-refresh-right"
56
+ :disabled="busy"
57
+ @click="detail.reloadDetail()"
58
+ >{{ $t1("重置") }}</el-button
59
+ >
60
+ <el-button
61
+ v-if="canEdit"
62
+ type="primary"
63
+ class="button-sty"
64
+ icon="el-icon-check"
65
+ :disabled="busy"
66
+ :loading="detail.billSaving"
67
+ @click="detail.saveHandle()"
68
+ >{{ $t1("保存") }}</el-button
69
+ >
70
+ </div>
71
+ </template>
72
+
73
+ <script>
74
+ /**
75
+ * 单据详情头部按钮区,统一「上一单/下一单 / 提交流程 / 保存 / 重置」的显隐、顺序与文案。
76
+ * 从左到右固定为:翻单 → 提交流程 → 业务按钮(默认插槽) → 重置 → 保存。
77
+ * 按钮名走后台 wf_diy_attribute 的 param18(wfButtonName.js),后台没配才用默认文案。
78
+ *
79
+ * 用法(detail 传详情组件自身,模板里用 Vue 内置的 _self):
80
+ * <div class="d-header clearfix">
81
+ * <div class="fl">标题</div>
82
+ * <biz-bill-actions :detail="_self" />
83
+ * </div>
84
+ *
85
+ * 注意:根节点是 .d-header 里的 .fr,别再往外包一层,否则布局会散,
86
+ * 而且 wfUtil 的「更多」下拉 / 「修改单据」就是往 .el-form .d-header > .fr 里塞的。
87
+ */
88
+ export default {
89
+ name: "BizBillActions",
90
+ props: {
91
+ // 详情组件实例(混入了 bizBillDetailMixin)
92
+ detail: {
93
+ type: Object,
94
+ required: true,
95
+ },
96
+ /**
97
+ * 覆盖「是否可编辑」(显示重置/保存)。
98
+ * 不传 = 自动判断:流程没启动、或流程当前节点允许改单据。
99
+ * 故意不声明 type:Boolean 型 prop 不传时 Vue 会塞 false,三态就没法表达。
100
+ */
101
+ editable: {
102
+ default: undefined,
103
+ },
104
+ // 是否显示上一单/下一单。不传 = 有翻单快照就显示
105
+ billNav: {
106
+ default: undefined,
107
+ },
108
+ },
109
+ computed: {
110
+ // 与字段禁用同源:都取详情的 canEditBill(),不会出现「字段能改却没有保存按钮」
111
+ canEdit() {
112
+ if (this.editable !== undefined && this.editable !== null) {
113
+ return !!this.editable;
114
+ }
115
+ return !this.detail.billDisabled;
116
+ },
117
+ showBillNav() {
118
+ if (this.billNav !== undefined && this.billNav !== null) {
119
+ return !!this.billNav;
120
+ }
121
+ return !!this.detail.billNavState;
122
+ },
123
+ // 保存中、或「已入库待提交流程」期间:一律禁用,避免并发写同一张单
124
+ busy() {
125
+ return !!(this.detail.billSaving || this.detail.billSubmitting);
126
+ },
127
+ },
128
+ };
129
+ </script>