cloud-web-corejs 1.1.0-dev.5 → 1.1.0-dev.7

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 (52) hide show
  1. package/package.json +1 -1
  2. package/src/components/VabUpload/index.vue +1 -1
  3. package/src/components/VabUpload/view.vue +27 -26
  4. package/src/components/excelImport/index.vue +156 -156
  5. package/src/components/jsonImport/index.vue +1 -1
  6. package/src/components/langImport/index.vue +1 -1
  7. package/src/components/mobile/wf/addTaskUserdialog.vue +23 -3
  8. package/src/components/mobile/wf/content.vue +110 -67
  9. package/src/components/mobile/wf/deleteTaskUserDialog.vue +22 -3
  10. package/src/components/mobile/wf/selectUserDialog.vue +122 -0
  11. package/src/components/mobile/wf/setCandidateDialog.vue +25 -4
  12. package/src/components/mobile/wf/urgingDialog.vue +26 -3
  13. package/src/components/mobile/wf/wfModifyDialog.vue +4 -0
  14. package/src/components/obsUpload/index.vue +1 -1
  15. package/src/components/xform/form-designer/designer.js +36 -52
  16. package/src/components/xform/form-designer/form-widget/dialog/importDialog.vue +185 -185
  17. package/src/components/xform/form-designer/form-widget/field-widget/singleUpload-widget.vue +1 -1
  18. package/src/components/xform/form-designer/form-widget/field-widget/vabUpload-widget.vue +2 -2
  19. package/src/components/xform/form-designer/indexMixin.js +33 -1
  20. package/src/components/xform/form-designer/setting-panel/property-editor/container-list-h5/list-h5-editor.vue +833 -860
  21. package/src/components/xform/form-designer/toolbar-panel/index.vue +874 -874
  22. package/src/components/xform/form-designer/toolbar-panel/indexMixin.js +1 -0
  23. package/src/components/xform/form-designer/widget-panel/index.vue +11 -7
  24. package/src/components/xform/form-designer/widget-panel/indexMixin.js +30 -6
  25. package/src/components/xform/form-designer/widget-panel/widgetsConfig.js +53 -1
  26. package/src/components/xform/form-render/container-item/list-h5-item.vue +154 -27
  27. package/src/components/xform/form-render/indexMixin.js +23 -3
  28. package/src/components/xform/styles/h5.scss +774 -588
  29. package/src/directive/append-to-body/index.js +48 -0
  30. package/src/index.js +4 -0
  31. package/src/layout/components/Sidebar/default.vue +1655 -1655
  32. package/src/router/index.js +48 -48
  33. package/src/utils/assetUrl.js +19 -0
  34. package/src/utils/vab.js +1283 -1279
  35. package/src/views/bd/setting/form_template/edit.vue +378 -356
  36. package/src/views/bd/setting/form_template/formDesignerDialog.vue +6 -0
  37. package/src/views/bd/setting/form_template/formTemplateType.js +43 -0
  38. package/src/views/bd/setting/form_template/list.vue +304 -303
  39. package/src/views/bd/setting/form_template/mixins/edit.js +344 -280
  40. package/src/views/bd/setting/form_template/mixins/list.js +748 -721
  41. package/src/views/user/file_view_ins/list.vue +970 -970
  42. package/src/views/user/form/vform/designer.vue +823 -821
  43. package/src/views/user/home/default.vue +1117 -1117
  44. package/src/views/user/home/index.vue +103 -103
  45. package/src/views/user/notify_message/dialog.vue +139 -139
  46. package/src/views/user/outLink/form_view.vue +202 -202
  47. package/src/views/user/outLink/index.vue +110 -110
  48. package/src/views/user/wf/iframe/index.vue +51 -51
  49. package/src/views/user/wf/iframe/index2.vue +64 -64
  50. package/src/views/user/wf/wf_manage/list2.vue +871 -871
  51. package/src/views/user/wf/wf_manage/wfContentDialog.vue +134 -134
  52. package/src/views/user/wf/wf_obj_config/importItemDialog.vue +1 -1
@@ -74,75 +74,111 @@
74
74
  <!-- 流程相关的弹框必须放在卡片外面。h5CardPane 折叠时会给 .cont 加
75
75
  display:none,放在插槽里的弹框会被一起隐藏 —— 表现为「流程信息收起后,
76
76
  通过/驳回/转办这些弹框点了没反应」(祖先 display:none 无法被后代覆盖)。 -->
77
- <div class="pop-box" v-if="showPreviewDialog">
78
- <div>
79
- <div class="header-box">
80
- <i class="back el-icon-close" @click="showPreviewDialog=false"></i>流程图预览
81
- </div>
82
- <div class="flex" style="height:calc(100vh - 38px)">
83
- <el-form label-position="top" class="form-box">
84
- <div class="tit"><span>{{
85
- (wfInfo.createDate ? wfInfo.createDate.substring(0, 10) : '') + wfInfo.name
86
- }}</span></div>
87
- <iframe style="width: 100%;flex:1" :src="wfImage"></iframe>
88
- </el-form>
89
- </div>
90
- <!-- 只读预览,没有「确定」要提交的东西:原先取消/确定两个按钮点了都是关掉,
91
- 合成一个「关 闭」。.btn 上的 flex:1 会让它自动铺满一行(见 styles/h5.scss)。 -->
92
- <div class="fixed-bottom-btns">
93
- <el-button type="primary" plain class="btn" @click="showPreviewDialog=false" icon="el-icon-close">{{
94
- $t2('关 闭', 'system.button.close2')
95
- }}
96
- </el-button>
97
- </div>
77
+ <el-dialog
78
+ title="流程图预览"
79
+ :modal-append-to-body="false"
80
+ :close-on-click-modal="false"
81
+ :visible.sync="showPreviewDialog"
82
+ :modal="false"
83
+ custom-class="dialog-style h5view-dialog"
84
+ width="100%"
85
+ top="0px"
86
+ v-el-drag-dialog
87
+ v-el-dialog-center
88
+ :append-to-body ="true"
89
+ :destroy-on-close="true"
90
+ >
91
+ <div class="flex">
92
+ <el-form label-position="top" class="form-box">
93
+ <div class="tit"><span>{{
94
+ (wfInfo.createDate ? wfInfo.createDate.substring(0, 10) : '') + wfInfo.name
95
+ }}</span></div>
96
+ <iframe style="width: 100%;flex:1" :src="wfImage"></iframe>
97
+ </el-form>
98
98
  </div>
99
- </div>
99
+ <span slot="footer" class="dialog-footer">
100
+ <el-button
101
+ type="primary"
102
+ plain
103
+ class="button-sty"
104
+ icon="el-icon-close"
105
+ @click="showPreviewDialog = false"
106
+ >{{$t2('关 闭', 'system.button.close2')}}</el-button
107
+ >
108
+ </span>
109
+ </el-dialog>
100
110
 
101
- <div class="pop-box" v-if="showRenwuDialog">
102
- <div>
103
- <div class="header-box">
104
- <i class="back el-icon-close" @click="showRenwuDialog=false"></i>任务情况预览
105
- </div>
106
- <div class="flex" style="height:calc(100vh - 38px);overflow:auto">
107
- <div class="h5-process-info">
108
- <div class="item" v-for="wftaskLineData in wftaskData" :key="wftaskLineData.id">
109
- <div class="time">
110
- {{ wftaskLineData.approveTime ? wftaskLineData.approveTime.substring(0, 10) : '' }}
111
- <br/>
112
- {{ wftaskLineData.approveTime ? wftaskLineData.approveTime.substring(11) : '' }}
113
- </div>
114
- <div class="status"
115
- :class="taskStatuses[wftaskLineData.type]?taskStatuses[wftaskLineData.type].class:''">
116
- {{ taskStatuses[wftaskLineData.type] ? taskStatuses[wftaskLineData.type].value : null }}
117
- </div>
118
- <i class="circle"></i>
119
- <div class="info">
120
- <p>
121
- <span class="name">{{ wftaskLineData.taskName }}</span>
122
- <span>{{ $t2('执行人', 'components.wf.approverName') }}:{{ wftaskLineData.approverName }}</span>
123
- <span>
124
- {{ $t2('候选人', 'components.wf.candidateName') }}:
125
- <span class="">{{ wftaskLineData.candidateNames }}</span>
126
- </span>
127
- </p>
128
- <p class="t"><span class="t1">{{ $t2('备注/意见', 'components.wf.opinion') }}:</span><span>{{
129
- wftaskLineData.opinion
130
- }}</span></p>
131
- </div>
111
+ <el-dialog
112
+ title="任务情况预览"
113
+ :modal-append-to-body="false"
114
+ :close-on-click-modal="false"
115
+ :visible.sync="showRenwuDialog"
116
+ :modal="false"
117
+ custom-class="dialog-style h5view-dialog"
118
+ width="100%"
119
+ top="0px"
120
+ v-el-drag-dialog
121
+ v-el-dialog-center
122
+ :append-to-body ="true"
123
+ :destroy-on-close="true"
124
+ >
125
+ <div class="flex">
126
+ <div class="h5-process-info">
127
+ <div class="item" v-for="wftaskLineData in wftaskData" :key="wftaskLineData.id">
128
+ <div class="time">
129
+ {{ wftaskLineData.approveTime ? wftaskLineData.approveTime.substring(0, 10) : '' }}
130
+ <br/>
131
+ {{ wftaskLineData.approveTime ? wftaskLineData.approveTime.substring(11) : '' }}
132
+ </div>
133
+ <div class="status"
134
+ :class="taskStatuses[wftaskLineData.type]?taskStatuses[wftaskLineData.type].class:''">
135
+ {{ taskStatuses[wftaskLineData.type] ? taskStatuses[wftaskLineData.type].value : null }}
136
+ </div>
137
+ <i class="circle"></i>
138
+ <div class="info">
139
+ <p>
140
+ <span class="name">{{ wftaskLineData.taskName }}</span>
141
+ <span>{{ $t2('执行人', 'components.wf.approverName') }}:{{ wftaskLineData.approverName }}</span>
142
+ <span>
143
+ {{ $t2('候选人', 'components.wf.candidateName') }}:
144
+ <span class="">{{ wftaskLineData.candidateNames }}</span>
145
+ </span>
146
+ </p>
147
+ <p class="t"><span class="t1">{{ $t2('备注/意见', 'components.wf.opinion') }}:</span><span>{{
148
+ wftaskLineData.opinion
149
+ }}</span></p>
132
150
  </div>
133
151
  </div>
134
152
  </div>
135
- <!-- 同上:只读预览,合成一个「关 闭」 -->
136
- <div class="fixed-bottom-btns">
137
- <el-button type="primary" plain class="btn" @click="showRenwuDialog=false" icon="el-icon-close">{{
138
- $t2('关 闭', 'system.button.close2')
139
- }}
140
- </el-button>
141
- </div>
142
153
  </div>
143
- </div>
154
+ <!-- 同上:只读预览,合成一个「关 闭」 -->
155
+ <span slot="footer" class="dialog-footer">
156
+ <el-button
157
+ type="primary"
158
+ plain
159
+ class="button-sty"
160
+ icon="el-icon-close"
161
+ @click="showRenwuDialog = false"
162
+ >{{$t2('关 闭', 'system.button.close2')}}</el-button
163
+ >
164
+ </span>
165
+ </el-dialog>
166
+ <!-- 下面 5 个确认框(中断 / 驳回 / 通过 / 转办 / 加签)都走 v-append-to-body:
167
+ 节点搬到 document.body 下,不再靠 position:fixed 在宿主子树里侥幸生效。
168
+ 它们保持 .pop-tipsBox 的原造型,没有改成 el-dialog——那个圆角卡片 + 顶部
169
+ 溢出圆形图标的样子要用 el-dialog 复刻,得把 header/body/footer 三段默认
170
+ 样式全推翻,样式量不减反增。
144
171
 
145
- <div class="pop-tipsBox" style="display: block;" v-if="showWfManualDialog">
172
+ 三条约束,改动前先看 directive/append-to-body/index.js 的说明:
173
+ 1. 必须是 v-show,不能换回 v-if(Vue 的 insert() 会静默跳过以被搬走的
174
+ 节点为参照物的插入,兄弟顺序会错乱);
175
+ 2. 内联 style="display: block;" 不能删(v-show 的 originalDisplay 取自
176
+ 它,删了「显示」态会退回各应用 h5.scss 里 .pop-tipsBox{display:none});
177
+ 3. 多挂的 h5-pop-tips 类是样式作用域锚点——搬到 body 后 .xform-h5 前缀
178
+ 全部失配,样式改挂在 .pop-tipsBox.h5-pop-tips 上,既保住原有优先级,
179
+ 又不会误伤同样用 .pop-tipsBox 的 confirmDialog / baseAlert / errorMsg。 -->
180
+ <div class="pop-tipsBox h5-pop-tips" style="display: block;" v-show="showWfManualDialog"
181
+ v-append-to-body>
146
182
  <div>
147
183
  <i class="icon"></i>
148
184
  <div class="cont">
@@ -166,7 +202,8 @@
166
202
  </div>
167
203
  </div>
168
204
  </div>
169
- <div class="pop-tipsBox" style="display: block;" v-if="rejectDialogVisible">
205
+ <div class="pop-tipsBox h5-pop-tips" style="display: block;" v-show="rejectDialogVisible"
206
+ v-append-to-body>
170
207
  <div>
171
208
  <i class="icon"></i>
172
209
  <div class="cont">
@@ -202,7 +239,8 @@
202
239
  </div>
203
240
  </div>
204
241
  </div>
205
- <div class="pop-tipsBox" style="display: block;" v-if="agreeDialogVisible">
242
+ <div class="pop-tipsBox h5-pop-tips" style="display: block;" v-show="agreeDialogVisible"
243
+ v-append-to-body>
206
244
  <div>
207
245
  <i class="icon"></i>
208
246
  <div class="cont">
@@ -244,7 +282,8 @@
244
282
  </div>
245
283
  </div>
246
284
  </div>
247
- <div class="pop-tipsBox" style="display: block;" v-if="changeWfDialogVisible">
285
+ <div class="pop-tipsBox h5-pop-tips" style="display: block;" v-show="changeWfDialogVisible"
286
+ v-append-to-body>
248
287
  <div>
249
288
  <i class="icon"></i>
250
289
  <div class="cont">
@@ -287,7 +326,8 @@
287
326
  </div>
288
327
  </div>
289
328
  </div>
290
- <div class="pop-tipsBox" style="display: block;" v-if="showAddIncreaseSignDialog">
329
+ <div class="pop-tipsBox h5-pop-tips" style="display: block;" v-show="showAddIncreaseSignDialog"
330
+ v-append-to-body>
291
331
  <div>
292
332
  <i class="icon"></i>
293
333
  <div class="cont">
@@ -399,7 +439,10 @@ export default {
399
439
  自身 components 与全局注册、不查父组件的局部注册,所以被别处(如 xform 的
400
440
  detail-h5-item)引用时会渲染不出来。补上自己的依赖声明。 */
401
441
  h5CardPane: () => import('../h5Card/h5CardPane.vue'),
402
- UserDialog: () => import('../../../views/mobile/user/user/dialog.vue'),
442
+ /* 选用户弹层用包内的 selectUserDialog(el-dialog + append-to-body 版)。
443
+ 原来引的 views/mobile/user/user/dialog.vue 仍是 .pop-box 就地渲染版,
444
+ 且 src/views 不随包发布(被包内组件引用属隐式依赖),保持原样不动。 */
445
+ UserDialog: () => import('./selectUserDialog.vue'),
403
446
  urgingDialog: () => import('./urgingDialog'),
404
447
  deleteTaskUserDialog: () => import('./deleteTaskUserDialog'),
405
448
  addTaskUserdialog: () => import('./addTaskUserdialog'),
@@ -1,5 +1,19 @@
1
1
  <template>
2
- <div class="pop-box" :style="'z-index:'+zIndex">
2
+ <!-- 外壳改成 el-dialog + append-to-body,说明见 urgingDialog.vue。
3
+ 原来的 :style="'z-index:'+zIndex" 去掉了:层级由 element 的 PopupManager
4
+ 统一分配给 .el-dialog__wrapper,再手写一层反而会和它打架。 -->
5
+ <el-dialog
6
+ :visible.sync="dialogVisible"
7
+ :append-to-body="true"
8
+ :modal="false"
9
+ :show-close="false"
10
+ :close-on-click-modal="false"
11
+ :destroy-on-close="true"
12
+ custom-class="h5-pop-dialog"
13
+ width="100%"
14
+ top="0px"
15
+ @close="dialogClose"
16
+ >
3
17
  <div>
4
18
  <div class="header-box">
5
19
  <i class="back el-icon-close" @click="dialogClose"></i>
@@ -40,7 +54,7 @@
40
54
  <el-button type="primary" class="btn" @click="dialogPrimary" icon="el-icon-check">确 定</el-button>
41
55
  </div>
42
56
  </div>
43
- </div>
57
+ </el-dialog>
44
58
  </template>
45
59
 
46
60
  <script>
@@ -49,6 +63,11 @@ import mixin from './mixins/deleteTaskUserDialogMixin';
49
63
 
50
64
  export default {
51
65
  name: 'deleteTaskUserDialog',
52
- mixins: [selectDialogMixins, mixin]
66
+ mixins: [selectDialogMixins, mixin],
67
+ data() {
68
+ return {
69
+ dialogVisible: true
70
+ };
71
+ }
53
72
  };
54
73
  </script>
@@ -0,0 +1,122 @@
1
+ <template>
2
+ <!-- 移动版「选择用户」弹层(转办人 / 沟通对象 / 候选人)。
3
+ 来源是 views/mobile/user/user/dialog.vue,那份仍被手写移动页用着、且
4
+ src/views 不随包发布,所以这里另起一份收进包内,原文件保持原样不动。
5
+
6
+ 与原文件的差别只有三处:
7
+ 1. 外壳从 <div class="pop-box"> 换成 el-dialog + append-to-body —— 节点挂到
8
+ document.body,不再依赖 position:fixed 在宿主子树里侥幸生效(祖先一旦有
9
+ transform / display:none 就废),层级交给 element 的 PopupManager;
10
+ 2. 去掉 :style="'z-index:'+zIndex",同上,避免和 PopupManager 打架;
11
+ 3. 不再 @import resources/css/h5.scss —— 那份不随包发布,且原文件用的是
12
+ 非 scoped 的 <style>,等于把整份手写移动页样式泄成全局。本组件的骨架样式
13
+ 走 xform/styles/h5.scss 的 .h5-pop-dialog(顶层选择器,body 挂载后才命中)。 -->
14
+ <el-dialog
15
+ :visible.sync="dialogVisible"
16
+ :append-to-body="true"
17
+ :modal="false"
18
+ :show-close="false"
19
+ :close-on-click-modal="false"
20
+ :destroy-on-close="true"
21
+ custom-class="h5-pop-dialog"
22
+ width="100%"
23
+ top="0px"
24
+ @close="dialogClose"
25
+ >
26
+ <div>
27
+ <div class="header-box">
28
+ <i class="back el-icon-close" @click="dialogClose"></i>
29
+ {{ $t1('选择用户') }}
30
+ </div>
31
+ <div class="search-H5box">
32
+ <div class="txt">
33
+ <el-input placeholder="姓名" suffix-icon="el-icon-search" v-model="formData.nickName"
34
+ @keyup.enter.native="searchEvent">
35
+ <el-button slot="append" @click="searchEvent"> 搜索</el-button>
36
+ </el-input>
37
+ </div>
38
+ <div class="icon-screen" @click="popStatus = true">
39
+ <i class="iconfont icon-shaixuan1"></i>
40
+ <span>{{ $t1('高级筛选') }}</span>
41
+ </div>
42
+ </div>
43
+ <div class="flex">
44
+ <div class="checkbox-all_list" @scroll="handleScroll">
45
+ <div v-for="(row,rowIndex) in page.records" :key="rowIndex" class="order-item"
46
+ :class="{on:isChecked(row)}" @click="changeCheck(row,rowIndex)">
47
+ <div class="is-checked" v-if="isChecked(row)"><i class="el-icon-check"></i>已选择</div>
48
+ <div class="t1">
49
+ <i class="icon"></i>
50
+ <span>{{ row.nickName }}</span>
51
+ </div>
52
+ <div class="t2">
53
+ <p>登录名:{{ row.loginAccount }}</p>
54
+ <p>角色:{{ row.roleNames }}</p>
55
+ <p>机构:{{ row.saleOrgNames }}</p>
56
+ <p>邮编:{{ row.zipCode }}</p>
57
+ <p>地址:{{ row.address }}</p>
58
+ <p>性别:{{ genderMap[row.gender] }}</p>
59
+ <p>所属组织:{{ row.companyNames }}</p>
60
+ </div>
61
+ </div>
62
+ </div>
63
+ <div class="checkbox-all">
64
+ <div class='ca-t'>已选择用户:</div>
65
+ <div class="ca-c">
66
+ <span v-for="(checkRow, rowIndex) in checkRows" :key="rowIndex">{{ checkRow.nickName }}<i
67
+ class="el-icon-delete" @click="changeCheck(checkRow)"></i></span>
68
+ </div>
69
+ </div>
70
+ </div>
71
+ <div class="fixed-bottom-btns">
72
+ <el-button type="primary" plain class="btn" @click="dialogClose" icon="el-icon-close">{{ $t1('取 消') }}
73
+ </el-button>
74
+ <el-button type="primary" class="btn" @click="dialogPrimary" icon="el-icon-check">{{ $t1('确 定') }}</el-button>
75
+ </div>
76
+ <h5SearchDialog v-if="popStatus" :visiable.sync="popStatus" @searchEvent="confirmSearchDialog"
77
+ @resetEvent="resetSearchDialog">
78
+ <el-form label-position="top">
79
+ <el-form-item label="登录名">
80
+ <el-input v-model="formData.loginAccount" class="txt" clearable/>
81
+ </el-form-item>
82
+ <el-form-item label="姓名">
83
+ <el-input v-model="formData.nickName" class="txt" clearable/>
84
+ </el-form-item>
85
+ </el-form>
86
+ </h5SearchDialog>
87
+ </div>
88
+ </el-dialog>
89
+ </template>
90
+
91
+ <script>
92
+ import mixin from "@base/mixins/mobile/selectDialog/index";
93
+
94
+ export default {
95
+ name: 'selectUserDialog',
96
+ mixins: [mixin],
97
+ props: ['visiable', 'multi', 'rows', 'param'],
98
+ data() {
99
+ return {
100
+ // 父级用 v-if 控制存活,组件一挂载就是「已打开」。关闭统一走 dialogClose()
101
+ // 向父级 $emit('update:visiable', false),由父级的 v-if 销毁本组件。
102
+ dialogVisible: true,
103
+ genderMap: {1: '男', 2: '女'}
104
+ };
105
+ },
106
+ created() {
107
+ this.initSetting({
108
+ url: USER_PREFIX + '/user/listCurrentPage',
109
+ param: () => {
110
+ return {
111
+ enabled: true,
112
+ ...this.formData,
113
+ ...this.param,
114
+ }
115
+ }
116
+ })
117
+ },
118
+ mounted() {
119
+ this.searchEvent();
120
+ }
121
+ };
122
+ </script>
@@ -1,6 +1,20 @@
1
1
  <template>
2
2
  <div>
3
- <div class="pop-box">
3
+ <!-- 外壳改成 el-dialog + append-to-body,说明见 urgingDialog.vue。
4
+ 下面的选用户弹层是本弹层里再弹一层,两层都由 PopupManager 递增发号,
5
+ 后开的天然在上,不用手写 z-index。 -->
6
+ <el-dialog
7
+ :visible.sync="dialogVisible"
8
+ :append-to-body="true"
9
+ :modal="false"
10
+ :show-close="false"
11
+ :close-on-click-modal="false"
12
+ :destroy-on-close="true"
13
+ custom-class="h5-pop-dialog"
14
+ width="100%"
15
+ top="0px"
16
+ @close="dialogClose"
17
+ >
4
18
  <div>
5
19
  <div class="header-box">
6
20
  <i class="back el-icon-close" @click="dialogClose"></i>
@@ -30,7 +44,7 @@
30
44
  <el-button type="primary" class="btn" @click="dialogClose" icon="el-icon-check">确 定</el-button>
31
45
  </div>
32
46
  </div>
33
- </div>
47
+ </el-dialog>
34
48
  <user-dialog v-if="showUserDialog" :visiable.sync="showUserDialog" @close="showUserDialog = false"
35
49
  @confirm="userConfirm" multi="true" :rows="userRows"></user-dialog>
36
50
  </div>
@@ -39,10 +53,17 @@
39
53
  <script>
40
54
  import selectDialogMixins from '../../../mixins/mobile/selectDialog/index.js';
41
55
  import mixin from './mixins/setCandidateDialogMixin';
42
- import userDialog from "../../../views/mobile/user/user/dialog.vue";
56
+ // 选用户弹层改用包内的 selectUserDialog(el-dialog 版)。原来引的
57
+ // views/mobile/user/user/dialog.vue 仍是 .pop-box 版、且不随包发布,保持原样不动。
58
+ import userDialog from "./selectUserDialog.vue";
43
59
 
44
60
  export default {
45
61
  mixins: [selectDialogMixins, mixin],
46
- components: {userDialog}
62
+ components: {userDialog},
63
+ data() {
64
+ return {
65
+ dialogVisible: true
66
+ };
67
+ }
47
68
  };
48
69
  </script>
@@ -1,5 +1,21 @@
1
1
  <template>
2
- <div class="pop-box">
2
+ <!-- 外壳是 el-dialog + append-to-body:节点挂到 document.body,不再依赖
3
+ `position:fixed` 在宿主子树里侥幸生效(祖先一旦有 transform/display:none 就废),
4
+ 层级也交给 element 的 PopupManager,不用再手写 z-index。
5
+ el-dialog 自带的表头关掉——标题和关闭按钮都在下面的 .header-box 里。
6
+ 骨架样式见 xform/styles/h5.scss 的 .h5-pop-dialog(必须是顶层选择器)。 -->
7
+ <el-dialog
8
+ :visible.sync="dialogVisible"
9
+ :append-to-body="true"
10
+ :modal="false"
11
+ :show-close="false"
12
+ :close-on-click-modal="false"
13
+ :destroy-on-close="true"
14
+ custom-class="h5-pop-dialog"
15
+ width="100%"
16
+ top="0px"
17
+ @close="dialogClose"
18
+ >
3
19
  <div>
4
20
  <div class="header-box">
5
21
  <i class="back el-icon-close" @click="dialogClose"></i>
@@ -38,7 +54,7 @@
38
54
  </el-button>
39
55
  </div>
40
56
  </div>
41
- </div>
57
+ </el-dialog>
42
58
  </template>
43
59
 
44
60
  <script>
@@ -47,6 +63,13 @@ import mixin from './mixins/urgingDialogMixin';
47
63
 
48
64
  export default {
49
65
  name: 'urgingDialog',
50
- mixins: [selectDialogMixins, mixin]
66
+ mixins: [selectDialogMixins, mixin],
67
+ data() {
68
+ // 父级用 v-if 控制存活,组件一挂载就是「已打开」。关闭统一走 dialogClose()
69
+ // 向父级 $emit('update:visiable', false),由父级的 v-if 销毁本组件。
70
+ return {
71
+ dialogVisible: true
72
+ };
73
+ }
51
74
  };
52
75
  </script>
@@ -1,4 +1,8 @@
1
1
  <template>
2
+ <!-- 注意:这一个没有跟着「移动版流程弹层改 el-dialog + append-to-body」那一轮走,
3
+ 仍是 .pop-box 就地渲染。原因是 H5 不需要「修改单据」——xform H5 底栏明确
4
+ 不放这个按钮(见 form-render/container-item/detail-h5-item.vue 的说明),
5
+ 它只从手写移动页的 buttonGroup 进。样式仍走各应用自己的 h5.scss。 -->
2
6
  <div class="pop-box">
3
7
  <div>
4
8
  <div class="header-box">
@@ -20,7 +20,7 @@
20
20
  </div>
21
21
  <ul class="el-upload-list el-upload-list--picture">
22
22
  <div class="nodata" v-if="pasteList.length == 0">
23
- <img src="~@/resources/images/nodata2.png"/>
23
+ <img :src="$assetUrl(require('@/resources/images/nodata2.png'))" />
24
24
  </div>
25
25
  <li v-for="(pasteFile,index) in pasteList" :key="index" class="el-upload-list__item is-success">
26
26
  <div>
@@ -148,12 +148,17 @@ let chartContainers = [],
148
148
 
149
149
  clearDesigner(skipHistoryChange) {
150
150
  let emptyWidgetListFlag = this.widgetList.length === 0;
151
+ /* 版式是"当前在设计哪一端",不是表单内容的一部分。defaultFormConfig 里没有
152
+ layoutType,overwriteObj 之后 getLayoutType() 会退回 "PC" —— 在 H5 模板里
153
+ 点一下「清空」,左侧面板就跳回 PC 组件列表了。先存后还。 */
154
+ let keepLayoutType = this.getLayoutType();
151
155
  this.widgetList = [];
152
156
  this.selectedId = null;
153
157
  this.selectedWidgetName = null;
154
158
  this.selectedWidget = {}; //this.selectedWidget = null
155
159
  baseRefUtil.overwriteObj(this.formConfig, defaultFormConfig); //
156
160
  this.formConfig.gridConfig = defaultFormConfig.gridConfig;
161
+ this.formConfig.layoutType = keepLayoutType;
157
162
 
158
163
  if (!!skipHistoryChange) {
159
164
  //什么也不做!!
@@ -1543,57 +1548,35 @@ let chartContainers = [],
1543
1548
  newCol.options.label = "基本信息";
1544
1549
  newCon.panes.push(newCol);
1545
1550
  } else if (newCon.type === "detail-h5") {
1546
- /*let newTab = this.copyNewContainerWidget(this.getContainerByType('tab'));
1547
- newCon.panes.push(newTab)
1548
-
1549
- newTab.options.tabClass = "tab-box";
1550
- let newTabPane = newTab.tabs[0];
1551
- newTabPane.options.label = '基本信息';*/
1552
-
1553
- //基本信息
1551
+ // 一张 h5-card:基础信息 / 明细信息 / 附件信息
1554
1552
  let newCard = this.copyNewContainerWidget(
1555
1553
  this.getContainerByType("h5-card")
1556
1554
  );
1557
- // newTabPane.widgetList.push(newCard);
1558
1555
  newCon.panes.push(newCard);
1559
1556
 
1560
- //明细信息
1557
+ // 基础信息:默认放 h5 表格(一行两列),对齐 PC 详情的「基础信息 + 表格」
1558
+ let basicPane = newCard.panes[0];
1559
+ if (basicPane) {
1560
+ basicPane.options.label = "基础信息";
1561
+ let h5Table = this.copyNewContainerWidget(
1562
+ this.getContainerByType("h5-table")
1563
+ );
1564
+ basicPane.widgetList.push(h5Table);
1565
+ }
1566
+
1567
+ // 明细信息:H5 列表;只读阶段不预置新增/查看按钮(点行仍可进详情)
1561
1568
  let newCardPane = this.copyNewContainerWidget(
1562
1569
  this.getContainerByType("h5-card-pane")
1563
1570
  );
1564
1571
  newCardPane.options.label = "明细信息";
1565
1572
  newCard.panes.push(newCardPane);
1566
1573
 
1567
- //列表
1568
1574
  let listH5 = this.copyNewContainerWidget(
1569
1575
  this.getContainerByType("list-h5")
1570
- ); //vabUpload
1571
- newCardPane.widgetList.push(listH5);
1572
-
1573
- //列表新增按钮
1574
- let buttonCon = this.copyNewFieldWidget(
1575
- this.getFieldWidgetByType("button")
1576
- );
1577
- buttonCon.options.label = "新增";
1578
- buttonCon.options.icon = "el-icon-search";
1579
- buttonCon.options.onClick =
1580
- "this.getWidgetRef('" + listH5.options.name + "').addTableData();";
1581
- newCardPane.buttonWidgetList.push(buttonCon);
1582
-
1583
- //列表行查看按钮
1584
- buttonCon = this.copyNewFieldWidget(
1585
- this.getFieldWidgetByType("button")
1586
1576
  );
1587
- buttonCon.options.rowFlag = true;
1588
- buttonCon.options.label = "查看";
1589
- buttonCon.options.icon = "el-icon-edit";
1590
- buttonCon.options.onClick =
1591
- "this.getWidgetRef('" +
1592
- listH5.options.name +
1593
- "').openRowDetailDialog(row);";
1594
- listH5.lineButtons.push(buttonCon);
1577
+ newCardPane.widgetList.push(listH5);
1595
1578
 
1596
- //附件信息
1579
+ // 附件信息
1597
1580
  newCardPane = this.copyNewContainerWidget(
1598
1581
  this.getContainerByType("h5-card-pane")
1599
1582
  );
@@ -1602,30 +1585,31 @@ let chartContainers = [],
1602
1585
 
1603
1586
  let vabUploadCon = this.copyNewFieldWidget(
1604
1587
  this.getFieldWidgetByType("vabUpload")
1605
- ); //vabUpload
1588
+ );
1606
1589
  newCardPane.widgetList.push(vabUploadCon);
1607
1590
  } else if (newCon.type === "h5-table") {
1608
- for (let i = 0; i < 4; i++) {
1591
+ /* 默认 4 × 2 列,对齐 H5「一行两个」的紧凑版式。
1592
+ 不再预置 input:H5 面板已下架单行输入,空单元格由设计者拖入字段。 */
1593
+ const h5TableCols = 2;
1594
+ const h5TableRows = 4;
1595
+ for (let i = 0; i < h5TableRows; i++) {
1609
1596
  let newRow = {
1610
1597
  cols: [],
1611
1598
  };
1612
1599
  newRow.id = "table-row-" + baseRefUtil.generateId();
1613
1600
  newRow.merged = false;
1614
1601
 
1615
- let newCell = baseRefUtil.deepClone(
1616
- this.getContainerByType("h5-table-cell")
1617
- );
1618
- newCell.id = "table-cell-" + baseRefUtil.generateId();
1619
- newCell.options.name = newCell.id;
1620
- newCell.merged = false;
1621
- newCell.options.colspan = 1;
1622
- newCell.options.rowspan = 1;
1623
- newRow.cols.push(newCell);
1624
-
1625
- let newInput = this.copyNewFieldWidget(
1626
- this.getFieldWidgetByType("input")
1627
- );
1628
- newCell.widgetList.push(newInput);
1602
+ for (let j = 0; j < h5TableCols; j++) {
1603
+ let newCell = baseRefUtil.deepClone(
1604
+ this.getContainerByType("h5-table-cell")
1605
+ );
1606
+ newCell.id = "table-cell-" + baseRefUtil.generateId();
1607
+ newCell.options.name = newCell.id;
1608
+ newCell.merged = false;
1609
+ newCell.options.colspan = 1;
1610
+ newCell.options.rowspan = 1;
1611
+ newRow.cols.push(newCell);
1612
+ }
1629
1613
 
1630
1614
  newCon.rows.push(newRow);
1631
1615
  }