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

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 (175) 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 +118 -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/form-designer/designer.js +51 -52
  44. package/src/components/xform/form-designer/form-widget/container-widget/data-table-widget.vue +269 -269
  45. package/src/components/xform/form-designer/form-widget/container-widget/detail-h5-widget.vue +18 -2
  46. package/src/components/xform/form-designer/form-widget/container-widget/detail-temp-widget.vue +132 -0
  47. package/src/components/xform/form-designer/form-widget/container-widget/detail-widget.vue +250 -250
  48. package/src/components/xform/form-designer/form-widget/container-widget/h5-card-pane-widget.vue +23 -2
  49. package/src/components/xform/form-designer/form-widget/container-widget/h5-card-widget.vue +30 -1
  50. package/src/components/xform/form-designer/form-widget/dialog/fileReferenceDialog.vue +319 -320
  51. package/src/components/xform/form-designer/form-widget/dialog/formDialog.vue +365 -365
  52. package/src/components/xform/form-designer/form-widget/dialog/importDialog.vue +185 -185
  53. package/src/components/xform/form-designer/form-widget/dialog/searchFormDialog.vue +554 -555
  54. package/src/components/xform/form-designer/form-widget/dialog/vabSearchDialog.vue +409 -409
  55. package/src/components/xform/form-designer/form-widget/field-widget/a-link-widget.vue +150 -132
  56. package/src/components/xform/form-designer/form-widget/field-widget/date-range-widget.vue +114 -114
  57. package/src/components/xform/form-designer/form-widget/field-widget/date-widget.vue +154 -154
  58. package/src/components/xform/form-designer/form-widget/field-widget/form-item-wrapper.vue +47 -1
  59. package/src/components/xform/form-designer/form-widget/field-widget/mixins/date-limit-mixin.js +178 -178
  60. package/src/components/xform/form-designer/form-widget/field-widget/mixins/time-limit-mixin.js +77 -77
  61. package/src/components/xform/form-designer/form-widget/field-widget/select-export-item-button-widget.vue +6 -0
  62. package/src/components/xform/form-designer/form-widget/field-widget/select-widget.vue +139 -139
  63. package/src/components/xform/form-designer/form-widget/field-widget/singleUpload-widget.vue +1 -1
  64. package/src/components/xform/form-designer/form-widget/field-widget/time-range-widget.vue +106 -106
  65. package/src/components/xform/form-designer/form-widget/field-widget/time-widget.vue +134 -134
  66. package/src/components/xform/form-designer/form-widget/field-widget/vabUpload-widget.vue +3 -2
  67. package/src/components/xform/form-designer/indexMixin.js +35 -1
  68. package/src/components/xform/form-designer/setting-panel/form-setting.vue +39 -39
  69. package/src/components/xform/form-designer/setting-panel/property-editor/container-data-table/data-table-editor.vue +10 -10
  70. package/src/components/xform/form-designer/setting-panel/property-editor/container-data-table/exportItemColumns-dialog.vue +438 -432
  71. package/src/components/xform/form-designer/setting-panel/property-editor/container-data-table/table-column-dialog.vue +2103 -2103
  72. package/src/components/xform/form-designer/setting-panel/property-editor/container-detail/detail-temp-edito.vue +90 -0
  73. package/src/components/xform/form-designer/setting-panel/property-editor/container-grid/gutter-editor.vue +82 -82
  74. package/src/components/xform/form-designer/setting-panel/property-editor/container-list-h5/list-h5-editor.vue +833 -846
  75. package/src/components/xform/form-designer/setting-panel/property-editor/container-table/table-dynamicField-editor.vue +8 -8
  76. package/src/components/xform/form-designer/setting-panel/property-editor/dropdownFlag-editor.vue +137 -137
  77. package/src/components/xform/form-designer/setting-panel/property-editor/field-button/search-dialog-event-editor.vue +237 -237
  78. package/src/components/xform/form-designer/setting-panel/property-editor/field-date/date-defaultValue-editor.vue +43 -43
  79. package/src/components/xform/form-designer/setting-panel/property-editor/field-date-range/date-range-defaultValue-editor.vue +43 -43
  80. package/src/components/xform/form-designer/setting-panel/property-editor/field-import-button/import2-button-editor.vue +96 -96
  81. package/src/components/xform/form-designer/setting-panel/property-editor/field-table-export-button/select-export-item-button-editor.vue +51 -0
  82. package/src/components/xform/form-designer/setting-panel/property-editor/field-time/time-defaultValue-editor.vue +42 -42
  83. package/src/components/xform/form-designer/setting-panel/property-editor/field-time-range/time-range-defaultValue-editor.vue +43 -43
  84. package/src/components/xform/form-designer/setting-panel/property-editor/formScriptEnabled-editor.vue +158 -158
  85. package/src/components/xform/form-designer/setting-panel/property-editor/h5Span-editor.vue +51 -0
  86. package/src/components/xform/form-designer/setting-panel/property-editor/itemStyle-editor.vue +39 -0
  87. package/src/components/xform/form-designer/setting-panel/property-editor/name-editor.vue +188 -188
  88. package/src/components/xform/form-designer/setting-panel/property-editor/styleTempClass-editor.vue +51 -0
  89. package/src/components/xform/form-designer/setting-panel/property-editor/textFlag-editor.vue +347 -347
  90. package/src/components/xform/form-designer/setting-panel/propertyRegister.js +12 -0
  91. package/src/components/xform/form-designer/toolbar-panel/index.vue +884 -874
  92. package/src/components/xform/form-designer/toolbar-panel/indexMixin.js +14 -0
  93. package/src/components/xform/form-designer/widget-panel/index.vue +11 -7
  94. package/src/components/xform/form-designer/widget-panel/indexMixin.js +30 -6
  95. package/src/components/xform/form-designer/widget-panel/widgetsConfig.js +112 -4
  96. package/src/components/xform/form-render/container-item/data-table-mixin.js +151 -93
  97. package/src/components/xform/form-render/container-item/detail-h5-item.vue +204 -34
  98. package/src/components/xform/form-render/container-item/detail-temp-item.vue +110 -0
  99. package/src/components/xform/form-render/container-item/h5-card-pane-item.vue +160 -140
  100. package/src/components/xform/form-render/container-item/list-h5-item.vue +1913 -1699
  101. package/src/components/xform/form-render/index.vue +153 -147
  102. package/src/components/xform/form-render/indexMixin.js +35 -3
  103. package/src/components/xform/lang/en-US.js +14 -0
  104. package/src/components/xform/lang/zh-CN.js +17 -0
  105. package/src/components/xform/mixins/defaultHandle.js +707 -707
  106. package/src/components/xform/styles/h5.scss +2262 -0
  107. package/src/components/xform/utils/textMaskUtil.js +182 -179
  108. package/src/components/xform/utils/treeTableUtil.js +1292 -1265
  109. package/src/components/xform/utils/util.js +56 -11
  110. package/src/directive/append-to-body/index.js +48 -0
  111. package/src/index.js +13 -4
  112. package/src/layout/components/Sidebar/default.vue +1655 -1655
  113. package/src/layout/components/extractedCode/viewDialog.vue +7 -7
  114. package/src/router/index.js +48 -27
  115. package/src/router/modules/customer.js +71 -14
  116. package/src/store/modules/permission.js +17 -18
  117. package/src/utils/assetUrl.js +19 -0
  118. package/src/utils/pdfUtil.js +429 -429
  119. package/src/utils/resolveViewComponent.js +142 -16
  120. package/src/utils/vab.js +1283 -1279
  121. package/src/views/bd/project/branch/bd_branch/edit.vue +145 -0
  122. package/src/views/bd/project/branch/bd_branch/list.vue +72 -0
  123. package/src/views/bd/project/branch/bd_branch/menuKindDialog.vue +106 -0
  124. package/src/views/bd/project/branch/bd_branch/mixins/edit.js +189 -0
  125. package/src/views/bd/project/branch/bd_branch/mixins/list.js +124 -0
  126. package/src/views/bd/project/branch/bd_branch/mixins/menuKindDialog.js +85 -0
  127. package/src/views/bd/project/branch/form_script/list.vue +31 -0
  128. package/src/views/bd/project/branch/form_template/list.vue +30 -0
  129. package/src/views/bd/project/branch/menu_kind/list.vue +31 -0
  130. package/src/views/bd/project/common/form_script/list.vue +16 -0
  131. package/src/views/bd/project/common/form_template/list.vue +15 -0
  132. package/src/views/bd/project/common/menu_kind/list.vue +15 -0
  133. package/src/views/bd/project/core/branchContext.js +100 -0
  134. package/src/views/bd/project/core/branchPage.js +78 -0
  135. package/src/views/bd/project/core/branchPageWrap.vue +225 -0
  136. package/src/views/bd/project/core/branchScope.js +44 -0
  137. package/src/views/bd/project/core/branchSearchPage.js +285 -0
  138. package/src/views/bd/project/core/branchSelect.vue +85 -0
  139. package/src/views/bd/project/core/branchTreeBar.vue +81 -0
  140. package/src/views/bd/project/core/httpBranchPatch.js +58 -0
  141. package/src/views/bd/project/datatable/menu_kind/list.vue +15 -0
  142. package/src/views/bd/project/datatable/table_model/list.vue +15 -0
  143. package/src/views/bd/setting/bd_company_env/dialog.vue +174 -174
  144. package/src/views/bd/setting/form_template/edit.vue +378 -356
  145. package/src/views/bd/setting/form_template/formDesignerDialog.vue +6 -0
  146. package/src/views/bd/setting/form_template/formTemplateType.js +43 -0
  147. package/src/views/bd/setting/form_template/list.vue +304 -303
  148. package/src/views/bd/setting/form_template/mixins/edit.js +344 -280
  149. package/src/views/bd/setting/form_template/mixins/list.js +748 -721
  150. package/src/views/bd/setting/table_model/edit.vue +1066 -1066
  151. package/src/views/bd/setting/table_model/mixins/edit.js +1455 -1455
  152. package/src/views/bd/setting/table_model/mixins/zdDialog.js +148 -148
  153. package/src/views/support/form-dialog-demo/demoPickerDialog.vue +72 -0
  154. package/src/views/support/form-dialog-demo/index.vue +537 -0
  155. package/src/views/user/file_view_ins/list.vue +970 -970
  156. package/src/views/user/form/vform/designer.vue +823 -821
  157. package/src/views/user/home/default.vue +1117 -1117
  158. package/src/views/user/home/default2.vue +1 -1
  159. package/src/views/user/home/index.vue +103 -101
  160. package/src/views/user/notify_message/dialog.vue +139 -137
  161. package/src/views/user/outLink/form_view.vue +202 -202
  162. package/src/views/user/outLink/index.vue +110 -110
  163. package/src/views/user/outLink/view.vue +3 -3
  164. package/src/views/user/role/edit.vue +632 -632
  165. package/src/views/user/role/list.vue +260 -260
  166. package/src/views/user/wf/iframe/index.vue +51 -51
  167. package/src/views/user/wf/iframe/index2.vue +64 -64
  168. package/src/views/user/wf/wf_manage/list.vue +1112 -1116
  169. package/src/views/user/wf/wf_manage/list2.vue +871 -875
  170. package/src/views/user/wf/wf_manage/wfContentDialog.vue +134 -131
  171. package/src/views/user/wf/wf_obj_config/importItemDialog.vue +1 -1
  172. package/src/components/xform/form-designer/form-widget/field-widget/dropdown-menu-widget.vue +0 -106
  173. package/src/components/xform/form-designer/form-widget/field-widget/tableexportbuttonwidget.vue +0 -99
  174. package/src/components/xform/form-render/container-item/list-h5-item2.vue +0 -1340
  175. 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>