cloud-web-corejs 1.0.54-dev.798 → 1.0.54-dev.799

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 (187) hide show
  1. package/package.json +3 -1
  2. package/src/components/baseTabs/mixins.js +11 -12
  3. package/src/components/bizTab/BizBillActions.vue +129 -0
  4. package/src/components/bizTab/BizTabListPage.vue +391 -0
  5. package/src/components/bizTab/README.md +378 -0
  6. package/src/components/bizTab/billTableUtil.js +48 -0
  7. package/src/components/bizTab/billValidators.js +136 -0
  8. package/src/components/bizTab/bizBillDetailMixin.js +687 -0
  9. package/src/components/bizTab/index.js +24 -0
  10. package/src/components/excelExport/exportFieldDialog.vue +373 -367
  11. package/src/components/excelExport/exportType.js +49 -0
  12. package/src/components/excelExport/mixins.js +1153 -1144
  13. package/src/components/vb-tabs/x-tabs.vue +167 -143
  14. package/src/components/wf/wfUtil.js +327 -292
  15. package/src/components/xform/form-designer/designer.js +56 -8
  16. package/src/components/xform/form-designer/form-widget/container-widget/detail-widget.vue +59 -5
  17. package/src/components/xform/form-designer/form-widget/field-widget/baseAttachment-widget.vue +60 -8
  18. package/src/components/xform/form-designer/form-widget/field-widget/form-item-wrapper.vue +8 -2
  19. package/src/components/xform/form-designer/form-widget/field-widget/select-export-item-button-widget.vue +120 -92
  20. package/src/components/xform/form-designer/form-widget/field-widget/vabUpload-widget.vue +63 -94
  21. package/src/components/xform/form-designer/index.vue +0 -1
  22. package/src/components/xform/form-designer/setting-panel/dataSource-setting.vue +397 -397
  23. package/src/components/xform/form-designer/setting-panel/form-dynamicField-setting.vue +602 -602
  24. package/src/components/xform/form-designer/setting-panel/form-setting.vue +13 -13
  25. package/src/components/xform/form-designer/setting-panel/option-items-setting.vue +585 -585
  26. package/src/components/xform/form-designer/setting-panel/property-editor/a-link-editor.vue +1 -1
  27. package/src/components/xform/form-designer/setting-panel/property-editor/a-text-editor.vue +1 -1
  28. package/src/components/xform/form-designer/setting-panel/property-editor/alignType-editor.vue +1 -1
  29. package/src/components/xform/form-designer/setting-panel/property-editor/censusClass-editor.vue +1 -1
  30. package/src/components/xform/form-designer/setting-panel/property-editor/colorClass-editor.vue +1 -1
  31. package/src/components/xform/form-designer/setting-panel/property-editor/commonAttributeEnabled-editor.vue +3 -3
  32. package/src/components/xform/form-designer/setting-panel/property-editor/container-data-table/data-table-editor.vue +1154 -1154
  33. package/src/components/xform/form-designer/setting-panel/property-editor/container-detail/detail-editor.vue +96 -80
  34. package/src/components/xform/form-designer/setting-panel/property-editor/container-detail-plain/detail-plain-editor.vue +75 -75
  35. package/src/components/xform/form-designer/setting-panel/property-editor/container-grid/colHeight-editor.vue +1 -1
  36. package/src/components/xform/form-designer/setting-panel/property-editor/container-grid/gutter-editor.vue +1 -1
  37. package/src/components/xform/form-designer/setting-panel/property-editor/container-grid-col/grid-col-height-editor.vue +1 -1
  38. package/src/components/xform/form-designer/setting-panel/property-editor/container-grid-col/grid-col-offset-editor.vue +1 -1
  39. package/src/components/xform/form-designer/setting-panel/property-editor/container-grid-col/grid-col-pull-editor.vue +1 -1
  40. package/src/components/xform/form-designer/setting-panel/property-editor/container-grid-col/grid-col-push-editor.vue +1 -1
  41. package/src/components/xform/form-designer/setting-panel/property-editor/container-grid-col/grid-col-span-editor.vue +4 -4
  42. package/src/components/xform/form-designer/setting-panel/property-editor/container-h5-card/h5-card-editor.vue +124 -124
  43. package/src/components/xform/form-designer/setting-panel/property-editor/container-panel/height-editor.vue +1 -1
  44. package/src/components/xform/form-designer/setting-panel/property-editor/container-panel/width-editor.vue +1 -1
  45. package/src/components/xform/form-designer/setting-panel/property-editor/container-tab/tab-customClass-editor.vue +119 -119
  46. package/src/components/xform/form-designer/setting-panel/property-editor/container-tab/tabClass-editor.vue +45 -45
  47. package/src/components/xform/form-designer/setting-panel/property-editor/container-table/table-dynamicField-editor.vue +344 -344
  48. package/src/components/xform/form-designer/setting-panel/property-editor/container-table-cell/cellHeight-editor.vue +1 -1
  49. package/src/components/xform/form-designer/setting-panel/property-editor/container-table-cell/cellWidth-editor.vue +1 -1
  50. package/src/components/xform/form-designer/setting-panel/property-editor/container-tree/tree-customClass-editor.vue +2 -2
  51. package/src/components/xform/form-designer/setting-panel/property-editor/container-tree-pane/tree-pane-editor.vue +1 -1
  52. package/src/components/xform/form-designer/setting-panel/property-editor/container-vf-dialog/cancelButtonLabel-editor.vue +1 -1
  53. package/src/components/xform/form-designer/setting-panel/property-editor/container-vf-dialog/okButtonLabel-editor.vue +1 -1
  54. package/src/components/xform/form-designer/setting-panel/property-editor/container-vf-dialog/title-editor.vue +1 -1
  55. package/src/components/xform/form-designer/setting-panel/property-editor/container-vf-dialog/width-editor.vue +1 -1
  56. package/src/components/xform/form-designer/setting-panel/property-editor/containerClass-editor.vue +1 -1
  57. package/src/components/xform/form-designer/setting-panel/property-editor/customClass-editor.vue +1 -1
  58. package/src/components/xform/form-designer/setting-panel/property-editor/defaultValue-editor.vue +1 -1
  59. package/src/components/xform/form-designer/setting-panel/property-editor/descriptionsItems-editor.vue +4 -4
  60. package/src/components/xform/form-designer/setting-panel/property-editor/downloadButtonFlag-editor.vue +3 -3
  61. package/src/components/xform/form-designer/setting-panel/property-editor/dropdownFlag-editor.vue +2 -2
  62. package/src/components/xform/form-designer/setting-panel/property-editor/dsName-editor.vue +1 -1
  63. package/src/components/xform/form-designer/setting-panel/property-editor/echartHeight-editor.vue +1 -1
  64. package/src/components/xform/form-designer/setting-panel/property-editor/endPlaceholder-editor.vue +1 -1
  65. package/src/components/xform/form-designer/setting-panel/property-editor/field-accessUrl/accessUrl-editor.vue +2 -2
  66. package/src/components/xform/form-designer/setting-panel/property-editor/field-area-select/areaDataType-editor.vue +1 -1
  67. package/src/components/xform/form-designer/setting-panel/property-editor/field-area-select/areaMinLevel-editor.vue +50 -50
  68. package/src/components/xform/form-designer/setting-panel/property-editor/field-area-select/areaName-editor.vue +1 -1
  69. package/src/components/xform/form-designer/setting-panel/property-editor/field-autocomplete/autocomplete-vabSearchName-editor.vue +7 -7
  70. package/src/components/xform/form-designer/setting-panel/property-editor/field-button/addTableData-event-editor.vue +84 -84
  71. package/src/components/xform/form-designer/setting-panel/property-editor/field-button/button-type-editor.vue +1 -1
  72. package/src/components/xform/form-designer/setting-panel/property-editor/field-button/clickBindEvent-editor.vue +97 -97
  73. package/src/components/xform/form-designer/setting-panel/property-editor/field-button/form-host-event-editor.vue +188 -188
  74. package/src/components/xform/form-designer/setting-panel/property-editor/field-button/search-dialog-event-editor.vue +237 -237
  75. package/src/components/xform/form-designer/setting-panel/property-editor/field-common/keyName-editor.vue +74 -67
  76. package/src/components/xform/form-designer/setting-panel/property-editor/field-date/date-dateLimit-editor.vue +4 -4
  77. package/src/components/xform/form-designer/setting-panel/property-editor/field-date/date-defaultValue-editor.vue +1 -1
  78. package/src/components/xform/form-designer/setting-panel/property-editor/field-date/date-format-editor.vue +1 -1
  79. package/src/components/xform/form-designer/setting-panel/property-editor/field-date/date-type-editor.vue +1 -1
  80. package/src/components/xform/form-designer/setting-panel/property-editor/field-date/date-valueFormat-editor.vue +1 -1
  81. package/src/components/xform/form-designer/setting-panel/property-editor/field-date-range/date-range-defaultTime-editor.vue +1 -1
  82. package/src/components/xform/form-designer/setting-panel/property-editor/field-date-range/date-range-defaultValue-editor.vue +1 -1
  83. package/src/components/xform/form-designer/setting-panel/property-editor/field-date-range/date-range-format-editor.vue +1 -1
  84. package/src/components/xform/form-designer/setting-panel/property-editor/field-date-range/date-range-type-editor.vue +1 -1
  85. package/src/components/xform/form-designer/setting-panel/property-editor/field-date-range/date-range-valueFormat-editor.vue +1 -1
  86. package/src/components/xform/form-designer/setting-panel/property-editor/field-divider/contentPosition-editor.vue +1 -1
  87. package/src/components/xform/form-designer/setting-panel/property-editor/field-dropdown-menu/dropdown-menu-editor.vue +59 -59
  88. package/src/components/xform/form-designer/setting-panel/property-editor/field-echart/echart-bar-editor.vue +11 -11
  89. package/src/components/xform/form-designer/setting-panel/property-editor/field-echart/echart-category-editor.vue +10 -10
  90. package/src/components/xform/form-designer/setting-panel/property-editor/field-echart/echart-pie-editor.vue +12 -12
  91. package/src/components/xform/form-designer/setting-panel/property-editor/field-file-upload/file-upload-fileTypes-editor.vue +44 -44
  92. package/src/components/xform/form-designer/setting-panel/property-editor/field-html-text/htmlContent-editor.vue +29 -29
  93. package/src/components/xform/form-designer/setting-panel/property-editor/field-import-button/import-button-editor.vue +6 -6
  94. package/src/components/xform/form-designer/setting-panel/property-editor/field-import-button/import2-button-editor.vue +3 -3
  95. package/src/components/xform/form-designer/setting-panel/property-editor/field-number/controlsPosition-editor.vue +1 -1
  96. package/src/components/xform/form-designer/setting-panel/property-editor/field-picture-upload/picture-upload-fileTypes-editor.vue +44 -44
  97. package/src/components/xform/form-designer/setting-panel/property-editor/field-print-button/print-button-editor.vue +115 -115
  98. package/src/components/xform/form-designer/setting-panel/property-editor/field-print-button/print-detail-button-editor.vue +115 -115
  99. package/src/components/xform/form-designer/setting-panel/property-editor/field-rate/highThreshold-editor.vue +1 -1
  100. package/src/components/xform/form-designer/setting-panel/property-editor/field-rate/lowThreshold-editor.vue +1 -1
  101. package/src/components/xform/form-designer/setting-panel/property-editor/field-rate/rate-defaultValue-editor.vue +1 -1
  102. package/src/components/xform/form-designer/setting-panel/property-editor/field-rate/rate-max-editor.vue +1 -1
  103. package/src/components/xform/form-designer/setting-panel/property-editor/field-script/script-editor.vue +4 -4
  104. package/src/components/xform/form-designer/setting-panel/property-editor/field-script-input/script-input-editor.vue +4 -4
  105. package/src/components/xform/form-designer/setting-panel/property-editor/field-static-text/fontSize-editor.vue +1 -1
  106. package/src/components/xform/form-designer/setting-panel/property-editor/field-static-text/textContent-editor.vue +1 -1
  107. package/src/components/xform/form-designer/setting-panel/property-editor/field-status/field-status-editor.vue +3 -3
  108. package/src/components/xform/form-designer/setting-panel/property-editor/field-switch/activeText-editor.vue +1 -1
  109. package/src/components/xform/form-designer/setting-panel/property-editor/field-switch/inactiveText-editor.vue +1 -1
  110. package/src/components/xform/form-designer/setting-panel/property-editor/field-switch/switchWidth-editor.vue +1 -1
  111. package/src/components/xform/form-designer/setting-panel/property-editor/field-table-export-button/select-export-button-editor.vue +2 -2
  112. package/src/components/xform/form-designer/setting-panel/property-editor/field-table-export-button/select-export-item-button-editor.vue +74 -71
  113. package/src/components/xform/form-designer/setting-panel/property-editor/field-table-export-button/table-export-button-editor.vue +3 -3
  114. package/src/components/xform/form-designer/setting-panel/property-editor/field-time/time-defaultValue-editor.vue +1 -1
  115. package/src/components/xform/form-designer/setting-panel/property-editor/field-time/time-format-editor.vue +1 -1
  116. package/src/components/xform/form-designer/setting-panel/property-editor/field-time/time-timeLimit-editor.vue +1 -1
  117. package/src/components/xform/form-designer/setting-panel/property-editor/field-time-range/time-range-defaultValue-editor.vue +1 -1
  118. package/src/components/xform/form-designer/setting-panel/property-editor/field-time-range/time-range-format-editor.vue +1 -1
  119. package/src/components/xform/form-designer/setting-panel/property-editor/field-vabSearch/vabSearchField-editor.vue +2 -2
  120. package/src/components/xform/form-designer/setting-panel/property-editor/field-vabSearch/vabSearchName-editor.vue +2 -2
  121. package/src/components/xform/form-designer/setting-panel/property-editor/field-vabUpload/field-vabUpload-editor.vue +1 -1
  122. package/src/components/xform/form-designer/setting-panel/property-editor/field-vabUpload2/field-vabUpload2-editor.vue +1 -1
  123. package/src/components/xform/form-designer/setting-panel/property-editor/field-vue-page/vue-page-editor.vue +2 -2
  124. package/src/components/xform/form-designer/setting-panel/property-editor/fileMaxSize-editor.vue +1 -1
  125. package/src/components/xform/form-designer/setting-panel/property-editor/fileTypesSelect.vue +176 -176
  126. package/src/components/xform/form-designer/setting-panel/property-editor/formScriptEnabled-editor.vue +2 -1
  127. package/src/components/xform/form-designer/setting-panel/property-editor/formatType-editor.vue +2 -2
  128. package/src/components/xform/form-designer/setting-panel/property-editor/formula-editor.vue +972 -972
  129. package/src/components/xform/form-designer/setting-panel/property-editor/iconClass-editor.vue +1 -1
  130. package/src/components/xform/form-designer/setting-panel/property-editor/label-editor.vue +1 -1
  131. package/src/components/xform/form-designer/setting-panel/property-editor/labelAlign-editor.vue +1 -1
  132. package/src/components/xform/form-designer/setting-panel/property-editor/labelColor-editor.vue +1 -1
  133. package/src/components/xform/form-designer/setting-panel/property-editor/labelIconPosition-editor.vue +1 -1
  134. package/src/components/xform/form-designer/setting-panel/property-editor/labelWidth-editor.vue +1 -1
  135. package/src/components/xform/form-designer/setting-panel/property-editor/limit-editor.vue +1 -1
  136. package/src/components/xform/form-designer/setting-panel/property-editor/max-editor.vue +1 -1
  137. package/src/components/xform/form-designer/setting-panel/property-editor/maxLength-editor.vue +1 -1
  138. package/src/components/xform/form-designer/setting-panel/property-editor/min-editor.vue +1 -1
  139. package/src/components/xform/form-designer/setting-panel/property-editor/minLength-editor.vue +1 -1
  140. package/src/components/xform/form-designer/setting-panel/property-editor/multipleLimit-editor.vue +1 -1
  141. package/src/components/xform/form-designer/setting-panel/property-editor/name-editor.vue +178 -178
  142. package/src/components/xform/form-designer/setting-panel/property-editor/oplog-editor.vue +3 -3
  143. package/src/components/xform/form-designer/setting-panel/property-editor/placeholder-editor.vue +1 -1
  144. package/src/components/xform/form-designer/setting-panel/property-editor/precision-editor.vue +1 -1
  145. package/src/components/xform/form-designer/setting-panel/property-editor/project-tag-editor.vue +6 -6
  146. package/src/components/xform/form-designer/setting-panel/property-editor/requiredHint-editor.vue +1 -1
  147. package/src/components/xform/form-designer/setting-panel/property-editor/rows-editor.vue +1 -1
  148. package/src/components/xform/form-designer/setting-panel/property-editor/space-editor-editor.vue +1 -1
  149. package/src/components/xform/form-designer/setting-panel/property-editor/startPlaceholder-editor.vue +1 -1
  150. package/src/components/xform/form-designer/setting-panel/property-editor/step-editor.vue +1 -1
  151. package/src/components/xform/form-designer/setting-panel/property-editor/styleTableClass-editor.vue +1 -1
  152. package/src/components/xform/form-designer/setting-panel/property-editor/styleTitClass-editor.vue +1 -1
  153. package/src/components/xform/form-designer/setting-panel/property-editor/tempStorage-editor.vue +1 -1
  154. package/src/components/xform/form-designer/setting-panel/property-editor/type-editor.vue +1 -1
  155. package/src/components/xform/form-designer/setting-panel/property-editor/uploadTip-editor.vue +1 -1
  156. package/src/components/xform/form-designer/setting-panel/property-editor/uploadURL-editor.vue +1 -1
  157. package/src/components/xform/form-designer/setting-panel/property-editor/urlValueEnabled-editor.vue +91 -0
  158. package/src/components/xform/form-designer/setting-panel/property-editor/validation-editor.vue +1 -1
  159. package/src/components/xform/form-designer/setting-panel/property-editor/validationHint-editor.vue +1 -1
  160. package/src/components/xform/form-designer/setting-panel/property-editor/widgetWidth-editor.vue +1 -1
  161. package/src/components/xform/form-designer/setting-panel/propertyRegister.js +1 -0
  162. package/src/components/xform/form-designer/widget-panel/index.vue +3 -1
  163. package/src/components/xform/form-designer/widget-panel/widgetsConfig.js +55 -13
  164. package/src/components/xform/form-render/container-item/data-table-mixin copy.js +5910 -0
  165. package/src/components/xform/form-render/container-item/data-table-mixin.js +59 -13
  166. package/src/components/xform/form-render/container-item/detail-item.vue +52 -11
  167. package/src/components/xform/form-render/container-item/tab-item.vue +6 -2
  168. package/src/components/xform/form-render/indexMixin.js +56 -16
  169. package/src/components/xform/lang/zh-CN.js +2 -1
  170. package/src/components/xform/utils/attachmentValueUtil.js +239 -0
  171. package/src/components/xform/utils/util.js +27 -0
  172. package/src/mixins/wf/index.js +40 -38
  173. package/src/router/modules/customer.js +50 -0
  174. package/src/store/config/index.js +46 -0
  175. package/src/utils/scrollUtil.js +25 -0
  176. package/src/views/demo/bizTab/bill/billConfig.js +41 -0
  177. package/src/views/demo/bizTab/bill/detail.vue +436 -0
  178. package/src/views/demo/bizTab/bill/list.vue +288 -0
  179. package/src/views/demo/bizTab/bill/productDialog.vue +176 -0
  180. package/src/views/demo/bizTab/simple/billApi.js +123 -0
  181. package/src/views/demo/bizTab/simple/detail.vue +407 -0
  182. package/src/views/demo/bizTab/simple/list.vue +217 -0
  183. package/src/views/demo/bizTab/standalone/index.vue +121 -0
  184. package/src/views/demo/bizTab/wf/billConfig.js +44 -0
  185. package/src/views/demo/bizTab/wf/detail.vue +661 -0
  186. package/src/views/demo/bizTab/wf/list.vue +242 -0
  187. package/src/views/user/outLink/cc_form_view.vue +185 -0
@@ -0,0 +1,288 @@
1
+ <template>
2
+ <biz-tab-list-page
3
+ ref="bizTab"
4
+ :listLabel="$t1('列表')"
5
+ :titleField="BILL.titleField"
6
+ :addTitle="$t1('新增')"
7
+ :behavior="tabBehavior"
8
+ @refresh-list="searchEvent"
9
+ >
10
+ <!-- ===== 列表页签 ===== -->
11
+ <template #list>
12
+ <vxe-grid
13
+ ref="table-m1"
14
+ v-bind="vxeOption"
15
+ @resizable-change="$vxeTableUtil.onColumnWitchChange"
16
+ @custom="$vxeTableUtil.customHandle"
17
+ >
18
+ <template #form>
19
+ <div class="clearfix screen-btns">
20
+ <div class="fl">
21
+ <vxe-button
22
+ status="primary"
23
+ type="text"
24
+ plain
25
+ class="button-sty"
26
+ icon="el-icon-plus"
27
+ @click="openAdd"
28
+ >{{ $t1("新增") }}</vxe-button
29
+ >
30
+ <!-- demo 用:现场切换「提交/审批完成后」的页签行为,方便两种效果都看一遍 -->
31
+ <el-switch
32
+ v-model="closeAfterWf"
33
+ class="behavior-switch"
34
+ :active-text="$t1('提交/通过后关闭页签回列表')"
35
+ ></el-switch>
36
+ </div>
37
+ <div class="fr">
38
+ <vxe-button
39
+ icon="el-icon-brush"
40
+ class="button-sty"
41
+ type="text"
42
+ status="primary"
43
+ plain
44
+ @click="resetEvent"
45
+ >{{ $t1("刷新") }}</vxe-button
46
+ >
47
+ <vxe-button
48
+ status="warning"
49
+ icon="el-icon-search"
50
+ class="button-sty"
51
+ @click="searchEvent"
52
+ >{{ $t1("搜索") }}</vxe-button
53
+ >
54
+ </div>
55
+ </div>
56
+ <vxe-form
57
+ ref="form"
58
+ class="screen-box"
59
+ title-width="92px"
60
+ title-align="right"
61
+ :data="formData"
62
+ @submit="searchEvent"
63
+ @reset="resetEvent"
64
+ >
65
+ <vxe-form-item :title="$t1('变更单号') + ':'" field="sn">
66
+ <template v-slot>
67
+ <el-input v-model="formData.sn" size="small" clearable />
68
+ </template>
69
+ </vxe-form-item>
70
+ <vxe-form-item :title="$t1('变更原因') + ':'" field="remark">
71
+ <template v-slot>
72
+ <el-input v-model="formData.remark" size="small" clearable />
73
+ </template>
74
+ </vxe-form-item>
75
+ <vxe-form-item :title="$t1('状态') + ':'" field="status">
76
+ <template v-slot>
77
+ <el-select
78
+ v-model="formData.status"
79
+ size="small"
80
+ clearable
81
+ @clear="formData.status = null"
82
+ >
83
+ <el-option
84
+ v-for="(item, key) in STATUS_MAP"
85
+ :key="key"
86
+ :label="item.label"
87
+ :value="key"
88
+ ></el-option>
89
+ </el-select>
90
+ </template>
91
+ </vxe-form-item>
92
+ </vxe-form>
93
+ </template>
94
+
95
+ <template #sn="{ row, rowIndex }">
96
+ <a href="javascript:void(0);" class="a-link" @click="openDetail(row, rowIndex)">
97
+ {{ row.sn }}
98
+ </a>
99
+ </template>
100
+ <template #status="{ row }">
101
+ <div :class="getStatus(row).cls">{{ getStatus(row).label }}</div>
102
+ </template>
103
+ <template #operate="{ row, rowIndex }">
104
+ <a href="javascript:void(0);" class="a-link" @click="openDetail(row, rowIndex)">
105
+ <el-tooltip
106
+ :enterable="false"
107
+ effect="dark"
108
+ :content="$t1('查看')"
109
+ placement="top"
110
+ popper-class="tooltip-skin"
111
+ ><i class="el-icon-view"
112
+ /></el-tooltip>
113
+ </a>
114
+ </template>
115
+ </vxe-grid>
116
+ </template>
117
+
118
+ <!-- ===== 详情页签(新增/查看共用同一个组件) ===== -->
119
+ <template #detail="{ tab }">
120
+ <bill-detail :tab="tab" />
121
+ </template>
122
+ </biz-tab-list-page>
123
+ </template>
124
+
125
+ <script>
126
+ /**
127
+ * demo B:真实单据 + 真实流程。
128
+ *
129
+ * 覆盖场景:
130
+ * 1. 新增、查看详情都开独立页签,同一单据不重复开
131
+ * 2. 新增页上直接「保存并提交流程」
132
+ * 3. 提交流程 / 审批通过后按配置关页签回列表刷新(用工具栏开关现场切换)
133
+ * 4. 审批点「通过」自动保存单据(见 detail.vue 的 wfAgreeBindSave)
134
+ * 5. 详情头部「上一单/下一单」按列表当时的顺序翻单
135
+ *
136
+ * 后台前置条件见 ./billConfig.js 顶部注释;不想吃前置条件看 ../simple/list.vue。
137
+ * 菜单/路由:@base/views/demo/bizTab/bill/list(本地已在 router/modules/customer.js 注册)
138
+ */
139
+ import BizTabListPage from "@base/components/bizTab/BizTabListPage.vue";
140
+ import billDetail from "./detail.vue";
141
+ import { BILL, STATUS_MAP } from "./billConfig";
142
+
143
+ export default {
144
+ name: "demo_bizTab_bill:list",
145
+ components: { BizTabListPage, billDetail },
146
+ data() {
147
+ return {
148
+ BILL,
149
+ STATUS_MAP,
150
+ vxeOption: {},
151
+ formData: {},
152
+ closeAfterWf: false,
153
+ };
154
+ },
155
+ computed: {
156
+ /**
157
+ * 页签行为配置:默认全部「刷新当前页签」;打开开关后,提交流程和审批通过
158
+ * 改成「关页签 → 回列表 → 刷新列表」。驳回/中断这类还没走完的动作仍留在当前页。
159
+ */
160
+ tabBehavior() {
161
+ if (!this.closeAfterWf) return "refreshCurrent";
162
+ return {
163
+ submit: "closeToList",
164
+ agree: "closeToList",
165
+ default: "refreshCurrent",
166
+ };
167
+ },
168
+ },
169
+ mounted() {
170
+ this.initTableList();
171
+ },
172
+ methods: {
173
+ searchEvent() {
174
+ this.$refs["table-m1"].commitProxy("reload");
175
+ },
176
+ resetEvent() {
177
+ this.formData = {};
178
+ this.$refs["table-m1"].commitProxy("reload");
179
+ },
180
+ getStatus(row) {
181
+ return STATUS_MAP[row.status] || { label: "", cls: "" };
182
+ },
183
+ // 新增页签也传快照:保存成功后新单会被插到序列首位,翻单按钮随即可用
184
+ openAdd() {
185
+ this.$refs.bizTab.openAdd(null, { navRows: this.getListRows() });
186
+ },
187
+ // 把当前列表顺序和行下标一起传进去,详情头部就有「上一单/下一单」
188
+ openDetail(row, rowIndex) {
189
+ this.$refs.bizTab.openDetail(row, null, {
190
+ navRows: this.getListRows(),
191
+ navIndex: rowIndex != null ? rowIndex : -1,
192
+ });
193
+ },
194
+ getListRows() {
195
+ let grid = this.$refs["table-m1"];
196
+ return grid ? grid.getTableData().fullData : null;
197
+ },
198
+ initTableList() {
199
+ let tableOption = {
200
+ vue: this,
201
+ tableRef: "table-m1",
202
+ tableName: "demo-bizTab-bill-list-m1",
203
+ path: BILL.prefix + `/bd_api/${BILL.listFormCode}/getPage`,
204
+ param: () => {
205
+ return {
206
+ ...this.formData,
207
+ type: BILL.type,
208
+ };
209
+ },
210
+ paramHandle: (queryParam) => {
211
+ return {
212
+ fixeData: {},
213
+ formCode: BILL.listFormCode,
214
+ taBm: BILL.taBm,
215
+ data: {
216
+ ...queryParam,
217
+ },
218
+ };
219
+ },
220
+ columns: [
221
+ { type: "checkbox", width: 48, resizable: false, fixed: "left" },
222
+ {
223
+ title: this.$t1("变更单号"),
224
+ field: "sn",
225
+ width: 160,
226
+ sortable: false,
227
+ filterType: false,
228
+ fixed: "left",
229
+ slots: { default: "sn" },
230
+ },
231
+ {
232
+ title: this.$t1("状态"),
233
+ field: "status",
234
+ width: 100,
235
+ sortable: false,
236
+ filterType: false,
237
+ slots: { default: "status" },
238
+ },
239
+ {
240
+ title: this.$t1("产品编码"),
241
+ field: "itemcodes",
242
+ width: 180,
243
+ sortable: false,
244
+ filterType: false,
245
+ },
246
+ {
247
+ title: this.$t1("变更原因"),
248
+ field: "remark",
249
+ minWidth: 180,
250
+ sortable: false,
251
+ filterType: false,
252
+ },
253
+ {
254
+ title: this.$t1("创建人"),
255
+ field: "_createBy",
256
+ width: 120,
257
+ sortable: false,
258
+ filterType: false,
259
+ },
260
+ {
261
+ title: this.$t1("创建时间"),
262
+ field: "create_date",
263
+ width: 160,
264
+ sortable: false,
265
+ filterType: false,
266
+ },
267
+ {
268
+ title: "",
269
+ width: 47,
270
+ fixed: "right",
271
+ sortable: false,
272
+ slots: { default: "operate" },
273
+ },
274
+ ],
275
+ };
276
+ this.$vxeTableUtil.initVxeTable(tableOption).then((opts) => {
277
+ this.vxeOption = opts;
278
+ });
279
+ },
280
+ },
281
+ };
282
+ </script>
283
+
284
+ <style scoped>
285
+ .behavior-switch {
286
+ margin-left: 16px;
287
+ }
288
+ </style>
@@ -0,0 +1,176 @@
1
+ <template>
2
+ <el-dialog
3
+ :title="$t1('产品列表')"
4
+ :append-to-body="true"
5
+ :modal-append-to-body="true"
6
+ :close-on-click-modal="falseValue"
7
+ :visible.sync="showDialog"
8
+ :modal="falseValue"
9
+ custom-class="dialog-style list-dialog"
10
+ width="1200px"
11
+ @close="dialogClose"
12
+ v-el-drag-dialog
13
+ v-el-dialog-center
14
+ >
15
+ <div class="cont" style="height: 450px">
16
+ <vxe-grid
17
+ class="is-pointer"
18
+ ref="table-m1"
19
+ v-bind="vxeOption"
20
+ @resizable-change="$vxeTableUtil.onColumnWitchChange"
21
+ @custom="$vxeTableUtil.customHandle"
22
+ @checkbox-change="addDataTable"
23
+ @checkbox-all="checkAll"
24
+ @cell-dblclick="checkWithSubmit"
25
+ >
26
+ <template #form>
27
+ <div class="clearfix screen-btns">
28
+ <div class="fr">
29
+ <vxe-button
30
+ icon="el-icon-brush"
31
+ class="button-sty"
32
+ type="text"
33
+ status="primary"
34
+ plain
35
+ @click="resetEvent"
36
+ >{{ $t1("刷新") }}</vxe-button
37
+ >
38
+ <vxe-button
39
+ status="warning"
40
+ icon="el-icon-search"
41
+ class="button-sty"
42
+ @click="searchEvent"
43
+ >{{ $t1("搜索") }}</vxe-button
44
+ >
45
+ </div>
46
+ </div>
47
+ <vxe-form
48
+ class="screen-box"
49
+ title-width="92px"
50
+ title-align="right"
51
+ :data="formData"
52
+ @submit="searchEvent"
53
+ @reset="resetEvent"
54
+ >
55
+ <vxe-form-item :title="$t1('产品编码') + ':'" field="itemcode">
56
+ <template v-slot>
57
+ <el-input v-model="formData.itemcode" size="small" clearable />
58
+ </template>
59
+ </vxe-form-item>
60
+ <vxe-button type="submit" v-show="false" @click="searchEvent"></vxe-button>
61
+ </vxe-form>
62
+ </template>
63
+ </vxe-grid>
64
+ </div>
65
+ <label id="labBtn" class="transverse">
66
+ <div class="icon">
67
+ <i class="el-icon-more"></i>
68
+ <i class="el-icon-more"></i>
69
+ </div>
70
+ </label>
71
+ <div class="multipleChoice">
72
+ <el-tooltip :enterable="false" effect="dark" :content="$t1('全部删除')" placement="top">
73
+ <a class="allDel icon-quanbushanchu" @click="clearChecked()"></a>
74
+ </el-tooltip>
75
+ <div class="list">
76
+ <div class="item" v-for="(checkRow, index) in checkRows" :key="index">
77
+ <p>{{ checkRow.itemdesc }}</p>
78
+ <a class="el-icon-close" @click="clearTable1Select(index)"></a>
79
+ </div>
80
+ </div>
81
+ </div>
82
+ <span slot="footer" class="dialog-footer">
83
+ <el-button type="primary" plain class="button-sty" @click="dialogClose">
84
+ <i class="el-icon-close el-icon"></i>
85
+ {{ $t1("取 消") }}
86
+ </el-button>
87
+ <el-button type="primary" class="button-sty" @click="dialogPrimary">
88
+ <i class="el-icon-check el-icon"></i>
89
+ {{ $t1("确 定") }}
90
+ </el-button>
91
+ </span>
92
+ </el-dialog>
93
+ </template>
94
+
95
+ <script>
96
+ /**
97
+ * 产品选择弹框,走的是同一个 formCode 下的 findItemPage 脚本
98
+ * (与 stdxx 的 pmd/product/product_change/productItemDialog.vue 同源)。
99
+ * 选择类弹框的勾选态/回填/双击确认这些都在 selectDialogMixins 里,本文件只配表格。
100
+ */
101
+ import { selectDialogMixins } from "@base/mixins/selectDialog/index.js";
102
+ import { BILL } from "./billConfig";
103
+
104
+ export default {
105
+ name: "demoBizTabProductDialog",
106
+ props: ["visiable", "multi", "param", "allowSelected"],
107
+ mixins: [selectDialogMixins],
108
+ data() {
109
+ return {
110
+ showDialog: true,
111
+ falseValue: false,
112
+ selectMulti: true,
113
+ formData: {},
114
+ vxeOption: {},
115
+ };
116
+ },
117
+ created() {
118
+ this.initSetting();
119
+ },
120
+ mounted() {
121
+ this.initTableM1();
122
+ },
123
+ methods: {
124
+ initTableM1() {
125
+ let tableOption = {
126
+ vue: this,
127
+ tableRef: "table-m1",
128
+ tableName: "demo-bizTab-productDialog-m1",
129
+ path: BILL.prefix + `/bd_api/${BILL.formCode}/findItemPage`,
130
+ param: () => {
131
+ return {
132
+ ...this.formData,
133
+ ...this.param,
134
+ };
135
+ },
136
+ columns: [
137
+ { type: "checkbox", width: 48, resizable: false, fixed: "left" },
138
+ {
139
+ title: this.$t1("产品描述"),
140
+ field: "itemdesc",
141
+ width: 350,
142
+ sortable: false,
143
+ filterType: false,
144
+ fixed: "left",
145
+ },
146
+ {
147
+ title: this.$t1("产品编码"),
148
+ field: "itemcode",
149
+ width: 150,
150
+ sortable: false,
151
+ filterType: false,
152
+ },
153
+ {
154
+ title: this.$t1("产品分类名称"),
155
+ field: "category_name",
156
+ width: 150,
157
+ sortable: false,
158
+ filterType: false,
159
+ },
160
+ { title: "", width: 47, fixed: "right", sortable: false },
161
+ ],
162
+ config: {
163
+ checkboxConfig: {
164
+ checkStrictly: true,
165
+ showHeader: this.selectMulti,
166
+ trigger: "row",
167
+ },
168
+ },
169
+ };
170
+ this.$vxeTableUtil.initVxeTable(tableOption).then((opts) => {
171
+ this.vxeOption = opts;
172
+ });
173
+ },
174
+ },
175
+ };
176
+ </script>
@@ -0,0 +1,123 @@
1
+ /**
2
+ * demo A 的「接口适配层」——整个 demo 只有这个文件碰数据源。
3
+ *
4
+ * 这里是一份进程内 mock:不打后台、不依赖任何表单模板或流程配置,clone 下来就能跑,
5
+ * 目的是把 bizTab 的页签链路(新增/详情/翻单/脏数据拦截/保存后升编辑态)演示清楚。
6
+ *
7
+ * 换成真实后台时只改本文件,list.vue / detail.vue 一行都不用动:
8
+ * getPage → this.$http({ url: XX_PREFIX + "/demo_bill/listPage", ... })
9
+ * getOne → this.$http({ url: XX_PREFIX + "/demo_bill/get", data: { id } })
10
+ * save → this.$http({ url: XX_PREFIX + (id ? "/demo_bill/update" : "/demo_bill/save") })
11
+ * 也就是 std 那些手写页面(如 basic/stock/stock_check)的写法。
12
+ */
13
+
14
+ // 假延时,让 loading / 重挂载的时序和真实请求一致,不然页签切换看不出效果
15
+ const LATENCY = 200;
16
+
17
+ export const STATUS_MAP = {
18
+ 0: { label: "草稿", cls: "list-tag warning" },
19
+ 1: { label: "已提交", cls: "list-tag" },
20
+ 2: { label: "已完成", cls: "list-tag success" },
21
+ };
22
+
23
+ let seq = 3;
24
+ // 主表 + 子表都放在一起,模拟「整单读写」
25
+ let store = [
26
+ {
27
+ id: 1,
28
+ sn: "DEMO-0001",
29
+ name: "华南区物料补货",
30
+ status: 0,
31
+ owner: "张三",
32
+ amount: 1200,
33
+ remark: "月度常规补货",
34
+ createDate: "2026-08-01 09:12:00",
35
+ items: [
36
+ { id: 11, itemCode: "M-001", itemName: "包装膜", qty: 200, price: 3 },
37
+ { id: 12, itemCode: "M-002", itemName: "标签纸", qty: 300, price: 2 },
38
+ ],
39
+ },
40
+ {
41
+ id: 2,
42
+ sn: "DEMO-0002",
43
+ name: "华东区样品申请",
44
+ status: 1,
45
+ owner: "李四",
46
+ amount: 860,
47
+ remark: "客户送样",
48
+ createDate: "2026-08-03 14:20:00",
49
+ items: [{ id: 21, itemCode: "M-003", itemName: "试剂盒", qty: 20, price: 43 }],
50
+ },
51
+ {
52
+ id: 3,
53
+ sn: "DEMO-0003",
54
+ name: "西北区促销物料",
55
+ status: 2,
56
+ owner: "王五",
57
+ amount: 4300,
58
+ remark: "",
59
+ createDate: "2026-08-05 10:00:00",
60
+ items: [],
61
+ },
62
+ ];
63
+
64
+ function clone(val) {
65
+ return val == null ? val : JSON.parse(JSON.stringify(val));
66
+ }
67
+
68
+ function delay(val) {
69
+ return new Promise((resolve) => setTimeout(() => resolve(clone(val)), LATENCY));
70
+ }
71
+
72
+ /** 列表分页(demo 只做条件过滤,不分页) */
73
+ export function getPage(query) {
74
+ let q = query || {};
75
+ let rows = store.filter((row) => {
76
+ if (q.sn && String(row.sn).indexOf(q.sn) < 0) return false;
77
+ if (q.name && String(row.name).indexOf(q.name) < 0) return false;
78
+ if (q.status != null && q.status !== "" && row.status !== Number(q.status)) {
79
+ return false;
80
+ }
81
+ return true;
82
+ });
83
+ return delay(rows);
84
+ }
85
+
86
+ /** 单据详情(含子表) */
87
+ export function getOne(id) {
88
+ return delay(store.find((row) => String(row.id) === String(id)) || null);
89
+ }
90
+
91
+ /** 保存:无 id 为新增,返回新单号;有 id 为更新,返回原单号 */
92
+ export function save(bill) {
93
+ let data = clone(bill) || {};
94
+ return new Promise((resolve) => {
95
+ setTimeout(() => {
96
+ if (data.id == null || data.id === "") {
97
+ seq += 1;
98
+ data.id = seq;
99
+ data.sn = "DEMO-" + String(seq).padStart(4, "0");
100
+ data.status = 0;
101
+ data.createDate = formatNow();
102
+ store.push(data);
103
+ } else {
104
+ let index = store.findIndex((row) => String(row.id) === String(data.id));
105
+ if (index < 0) {
106
+ store.push(data);
107
+ } else {
108
+ store.splice(index, 1, data);
109
+ }
110
+ }
111
+ resolve(clone(data));
112
+ }, LATENCY);
113
+ });
114
+ }
115
+
116
+ function formatNow() {
117
+ let d = new Date();
118
+ let pad = (n) => String(n).padStart(2, "0");
119
+ return (
120
+ `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())} `
121
+ + `${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`
122
+ );
123
+ }