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.
- package/package.json +6 -2
- package/src/components/VabUpload/image-viewer.vue +442 -442
- package/src/components/VabUpload/index.vue +45 -3
- package/src/components/VabUpload/mixins.js +126 -19
- package/src/components/VabUpload/view.vue +248 -209
- package/src/components/baseTabs/mixins.js +181 -181
- package/src/components/bizTab/BizBillActions.vue +129 -0
- package/src/components/bizTab/BizTabListPage.vue +391 -0
- package/src/components/bizTab/README.md +378 -0
- package/src/components/bizTab/billTableUtil.js +48 -0
- package/src/components/bizTab/billValidators.js +136 -0
- package/src/components/bizTab/bizBillDetailMixin.js +705 -0
- package/src/components/bizTab/index.js +24 -0
- package/src/components/excelExport/exportFieldDialog.vue +23 -12
- package/src/components/excelExport/exportItemConfigUtil.js +30 -0
- package/src/components/excelExport/mixins.js +3 -3
- package/src/components/excelImport/index.vue +156 -156
- package/src/components/jsonImport/index.vue +1 -1
- package/src/components/langImport/index.vue +1 -1
- package/src/components/mobile/statusTag/mixins.js +1 -61
- package/src/components/mobile/wf/addTaskUserdialog.vue +23 -3
- package/src/components/mobile/wf/content.vue +1705 -1556
- package/src/components/mobile/wf/deleteTaskUserDialog.vue +22 -3
- package/src/components/mobile/wf/mixins/wfModifyDialogMixin.js +8 -6
- package/src/components/mobile/wf/selectUserDialog.vue +118 -0
- package/src/components/mobile/wf/setCandidateDialog.vue +25 -4
- package/src/components/mobile/wf/urgingDialog.vue +26 -3
- package/src/components/mobile/wf/wfModifyDialog.vue +4 -0
- package/src/components/obsUpload/index.vue +1 -1
- package/src/components/table/config.js +78 -78
- package/src/components/table/index.js +1276 -1276
- package/src/components/table/plugins/cell-area/index.js +1055 -0
- package/src/components/table/plugins/cell-area/index.scss +77 -0
- package/src/components/table/plugins/cell-area/util.js +224 -0
- package/src/components/table/tableForm.vue +330 -330
- package/src/components/table/tableFormMixin.js +318 -318
- package/src/components/table/vxeFilter/index.js +163 -163
- package/src/components/table/vxeFilter/mixin.js +316 -316
- package/src/components/wf/content.vue +1188 -1188
- package/src/components/wf/wf.js +40 -20
- package/src/components/wf/wfActionDropdown.vue +1 -1
- package/src/components/wf/wfActionItems.js +1 -1
- package/src/components/xform/form-designer/designer.js +51 -52
- package/src/components/xform/form-designer/form-widget/container-widget/data-table-widget.vue +269 -269
- package/src/components/xform/form-designer/form-widget/container-widget/detail-h5-widget.vue +18 -2
- package/src/components/xform/form-designer/form-widget/container-widget/detail-temp-widget.vue +132 -0
- package/src/components/xform/form-designer/form-widget/container-widget/detail-widget.vue +250 -250
- package/src/components/xform/form-designer/form-widget/container-widget/h5-card-pane-widget.vue +23 -2
- package/src/components/xform/form-designer/form-widget/container-widget/h5-card-widget.vue +30 -1
- package/src/components/xform/form-designer/form-widget/dialog/fileReferenceDialog.vue +319 -320
- package/src/components/xform/form-designer/form-widget/dialog/formDialog.vue +365 -365
- package/src/components/xform/form-designer/form-widget/dialog/importDialog.vue +185 -185
- package/src/components/xform/form-designer/form-widget/dialog/searchFormDialog.vue +554 -555
- package/src/components/xform/form-designer/form-widget/dialog/vabSearchDialog.vue +409 -409
- package/src/components/xform/form-designer/form-widget/field-widget/a-link-widget.vue +150 -132
- package/src/components/xform/form-designer/form-widget/field-widget/date-range-widget.vue +114 -114
- package/src/components/xform/form-designer/form-widget/field-widget/date-widget.vue +154 -154
- package/src/components/xform/form-designer/form-widget/field-widget/form-item-wrapper.vue +47 -1
- package/src/components/xform/form-designer/form-widget/field-widget/mixins/date-limit-mixin.js +178 -178
- package/src/components/xform/form-designer/form-widget/field-widget/mixins/time-limit-mixin.js +77 -77
- package/src/components/xform/form-designer/form-widget/field-widget/select-export-item-button-widget.vue +6 -0
- package/src/components/xform/form-designer/form-widget/field-widget/select-widget.vue +139 -139
- package/src/components/xform/form-designer/form-widget/field-widget/singleUpload-widget.vue +1 -1
- package/src/components/xform/form-designer/form-widget/field-widget/time-range-widget.vue +106 -106
- package/src/components/xform/form-designer/form-widget/field-widget/time-widget.vue +134 -134
- package/src/components/xform/form-designer/form-widget/field-widget/vabUpload-widget.vue +3 -2
- package/src/components/xform/form-designer/indexMixin.js +35 -1
- package/src/components/xform/form-designer/setting-panel/form-setting.vue +39 -39
- package/src/components/xform/form-designer/setting-panel/property-editor/container-data-table/data-table-editor.vue +10 -10
- package/src/components/xform/form-designer/setting-panel/property-editor/container-data-table/exportItemColumns-dialog.vue +438 -432
- package/src/components/xform/form-designer/setting-panel/property-editor/container-data-table/table-column-dialog.vue +2103 -2103
- package/src/components/xform/form-designer/setting-panel/property-editor/container-detail/detail-temp-edito.vue +90 -0
- package/src/components/xform/form-designer/setting-panel/property-editor/container-grid/gutter-editor.vue +82 -82
- package/src/components/xform/form-designer/setting-panel/property-editor/container-list-h5/list-h5-editor.vue +833 -846
- package/src/components/xform/form-designer/setting-panel/property-editor/container-table/table-dynamicField-editor.vue +8 -8
- package/src/components/xform/form-designer/setting-panel/property-editor/dropdownFlag-editor.vue +137 -137
- package/src/components/xform/form-designer/setting-panel/property-editor/field-button/search-dialog-event-editor.vue +237 -237
- package/src/components/xform/form-designer/setting-panel/property-editor/field-date/date-defaultValue-editor.vue +43 -43
- package/src/components/xform/form-designer/setting-panel/property-editor/field-date-range/date-range-defaultValue-editor.vue +43 -43
- package/src/components/xform/form-designer/setting-panel/property-editor/field-import-button/import2-button-editor.vue +96 -96
- package/src/components/xform/form-designer/setting-panel/property-editor/field-table-export-button/select-export-item-button-editor.vue +51 -0
- package/src/components/xform/form-designer/setting-panel/property-editor/field-time/time-defaultValue-editor.vue +42 -42
- package/src/components/xform/form-designer/setting-panel/property-editor/field-time-range/time-range-defaultValue-editor.vue +43 -43
- package/src/components/xform/form-designer/setting-panel/property-editor/formScriptEnabled-editor.vue +158 -158
- package/src/components/xform/form-designer/setting-panel/property-editor/h5Span-editor.vue +51 -0
- package/src/components/xform/form-designer/setting-panel/property-editor/itemStyle-editor.vue +39 -0
- package/src/components/xform/form-designer/setting-panel/property-editor/name-editor.vue +188 -188
- package/src/components/xform/form-designer/setting-panel/property-editor/styleTempClass-editor.vue +51 -0
- package/src/components/xform/form-designer/setting-panel/property-editor/textFlag-editor.vue +347 -347
- package/src/components/xform/form-designer/setting-panel/propertyRegister.js +12 -0
- package/src/components/xform/form-designer/toolbar-panel/index.vue +884 -874
- package/src/components/xform/form-designer/toolbar-panel/indexMixin.js +14 -0
- package/src/components/xform/form-designer/widget-panel/index.vue +11 -7
- package/src/components/xform/form-designer/widget-panel/indexMixin.js +30 -6
- package/src/components/xform/form-designer/widget-panel/widgetsConfig.js +112 -4
- package/src/components/xform/form-render/container-item/data-table-mixin.js +151 -93
- package/src/components/xform/form-render/container-item/detail-h5-item.vue +204 -34
- package/src/components/xform/form-render/container-item/detail-temp-item.vue +110 -0
- package/src/components/xform/form-render/container-item/h5-card-pane-item.vue +160 -140
- package/src/components/xform/form-render/container-item/list-h5-item.vue +1913 -1699
- package/src/components/xform/form-render/index.vue +153 -147
- package/src/components/xform/form-render/indexMixin.js +35 -3
- package/src/components/xform/lang/en-US.js +14 -0
- package/src/components/xform/lang/zh-CN.js +17 -0
- package/src/components/xform/mixins/defaultHandle.js +707 -707
- package/src/components/xform/styles/h5.scss +2262 -0
- package/src/components/xform/utils/textMaskUtil.js +182 -179
- package/src/components/xform/utils/treeTableUtil.js +1292 -1265
- package/src/components/xform/utils/util.js +56 -11
- package/src/directive/append-to-body/index.js +48 -0
- package/src/index.js +13 -4
- package/src/layout/components/Sidebar/default.vue +1655 -1655
- package/src/layout/components/extractedCode/viewDialog.vue +7 -7
- package/src/router/index.js +48 -27
- package/src/router/modules/customer.js +71 -14
- package/src/store/modules/permission.js +17 -18
- package/src/utils/assetUrl.js +19 -0
- package/src/utils/pdfUtil.js +429 -429
- package/src/utils/resolveViewComponent.js +142 -16
- package/src/utils/vab.js +1283 -1279
- package/src/views/bd/project/branch/bd_branch/edit.vue +145 -0
- package/src/views/bd/project/branch/bd_branch/list.vue +72 -0
- package/src/views/bd/project/branch/bd_branch/menuKindDialog.vue +106 -0
- package/src/views/bd/project/branch/bd_branch/mixins/edit.js +189 -0
- package/src/views/bd/project/branch/bd_branch/mixins/list.js +124 -0
- package/src/views/bd/project/branch/bd_branch/mixins/menuKindDialog.js +85 -0
- package/src/views/bd/project/branch/form_script/list.vue +31 -0
- package/src/views/bd/project/branch/form_template/list.vue +30 -0
- package/src/views/bd/project/branch/menu_kind/list.vue +31 -0
- package/src/views/bd/project/common/form_script/list.vue +16 -0
- package/src/views/bd/project/common/form_template/list.vue +15 -0
- package/src/views/bd/project/common/menu_kind/list.vue +15 -0
- package/src/views/bd/project/core/branchContext.js +100 -0
- package/src/views/bd/project/core/branchPage.js +78 -0
- package/src/views/bd/project/core/branchPageWrap.vue +225 -0
- package/src/views/bd/project/core/branchScope.js +44 -0
- package/src/views/bd/project/core/branchSearchPage.js +285 -0
- package/src/views/bd/project/core/branchSelect.vue +85 -0
- package/src/views/bd/project/core/branchTreeBar.vue +81 -0
- package/src/views/bd/project/core/httpBranchPatch.js +58 -0
- package/src/views/bd/project/datatable/menu_kind/list.vue +15 -0
- package/src/views/bd/project/datatable/table_model/list.vue +15 -0
- package/src/views/bd/setting/bd_company_env/dialog.vue +174 -174
- package/src/views/bd/setting/form_template/edit.vue +378 -356
- package/src/views/bd/setting/form_template/formDesignerDialog.vue +6 -0
- package/src/views/bd/setting/form_template/formTemplateType.js +43 -0
- package/src/views/bd/setting/form_template/list.vue +304 -303
- package/src/views/bd/setting/form_template/mixins/edit.js +344 -280
- package/src/views/bd/setting/form_template/mixins/list.js +748 -721
- package/src/views/bd/setting/table_model/edit.vue +1066 -1066
- package/src/views/bd/setting/table_model/mixins/edit.js +1455 -1455
- package/src/views/bd/setting/table_model/mixins/zdDialog.js +148 -148
- package/src/views/support/form-dialog-demo/demoPickerDialog.vue +72 -0
- package/src/views/support/form-dialog-demo/index.vue +537 -0
- package/src/views/user/file_view_ins/list.vue +970 -970
- package/src/views/user/form/vform/designer.vue +823 -821
- package/src/views/user/home/default.vue +1117 -1117
- package/src/views/user/home/default2.vue +1 -1
- package/src/views/user/home/index.vue +103 -101
- package/src/views/user/notify_message/dialog.vue +139 -137
- package/src/views/user/outLink/form_view.vue +202 -202
- package/src/views/user/outLink/index.vue +110 -110
- package/src/views/user/outLink/view.vue +3 -3
- package/src/views/user/role/edit.vue +632 -632
- package/src/views/user/role/list.vue +260 -260
- package/src/views/user/wf/iframe/index.vue +51 -51
- package/src/views/user/wf/iframe/index2.vue +64 -64
- package/src/views/user/wf/wf_manage/list.vue +1112 -1116
- package/src/views/user/wf/wf_manage/list2.vue +871 -875
- package/src/views/user/wf/wf_manage/wfContentDialog.vue +134 -131
- package/src/views/user/wf/wf_obj_config/importItemDialog.vue +1 -1
- package/src/components/xform/form-designer/form-widget/field-widget/dropdown-menu-widget.vue +0 -106
- package/src/components/xform/form-designer/form-widget/field-widget/tableexportbuttonwidget.vue +0 -99
- package/src/components/xform/form-render/container-item/list-h5-item2.vue +0 -1340
- package/src/utils/wf.js +0 -766
|
@@ -0,0 +1,2262 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* xform H5(移动端)版式样式基线
|
|
3
|
+
*
|
|
4
|
+
* 作用域:全部收在 .xform-h5 下。该根类由 form-render/index.vue 依
|
|
5
|
+
* formConfig.layoutType === 'H5' 输出,PC/Pad 版式下整份样式不生效。
|
|
6
|
+
*
|
|
7
|
+
* 为什么放包内而不是 resources/css/style.scss:
|
|
8
|
+
* package.json 的 files 只含 src/resources/js,不含 src/resources/css ——
|
|
9
|
+
* style.scss 不随 cloud-web-corejs 发布,消费应用用的是自己那份拷贝。
|
|
10
|
+
* 样式写在这里才能随包走,改一次各应用同步生效。
|
|
11
|
+
* 详见 docs/2026-08 xform 移动端布局对齐 bill_setting 方案.md 决策 2。
|
|
12
|
+
*
|
|
13
|
+
* ★ 特异度硬约束(改这个文件前必读):
|
|
14
|
+
* style.scss 里已有一批裸类名的 H5 规则(.h5-detail-wrap .h5-item ...),
|
|
15
|
+
* 它走全局 styles/index.scss,本文件走组件 <style> 块,两者加载先后在
|
|
16
|
+
* webpack 下不可靠,不能靠「后写覆盖先写」。因此:
|
|
17
|
+
* 1. 覆盖规则的选择器段数必须严格多于对手(对手 0,3,0 就写到 0,4,0 以上);
|
|
18
|
+
* 2. 对手带 !important 的,本方也必须带,特异度再高也压不过。
|
|
19
|
+
* 每处覆盖点都标了对手所在行号,便于核对。
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
@import "~@/styles/variables.scss";
|
|
23
|
+
|
|
24
|
+
/* ============ 块 A:变量 ============ */
|
|
25
|
+
/* 收掉 bill_setting 散在 4 处 5 个值的 calc(100vh - N),不要抄它的具体数值 */
|
|
26
|
+
$xformH5HeaderHeight: 38px; // 标题栏
|
|
27
|
+
$xformH5FooterHeight: 56px; // 底部动作栏
|
|
28
|
+
$xformH5RowHeight: 48px; // 字段行高
|
|
29
|
+
$xformH5LabelWidth: 80px; // 标签宽
|
|
30
|
+
$xformH5RowBorder: #f1f1f1; // 行分隔线
|
|
31
|
+
$xformH5CardRadius: 12px;
|
|
32
|
+
$xformH5PageBg: #f1f5fb;
|
|
33
|
+
$xformH5Size:14px;
|
|
34
|
+
|
|
35
|
+
/* ============ 块 B:分组卡片(对齐 bill_setting 的 .c-item / .tit) ============ */
|
|
36
|
+
/* 对手:style.scss:13766 .h5-detail-wrap .h5-item (0,2,0);本方 0,3,0
|
|
37
|
+
.c-item / .tit 是 components/mobile/h5Card/h5CardPane.vue 的外壳类
|
|
38
|
+
(移动版 wf 面板 content.vue 的根节点就是 <h5-card-pane>)。
|
|
39
|
+
把它们并进来,wf 面板直接复用 xform 的卡片视觉,不必再搬一套卡片皮肤。 */
|
|
40
|
+
.xform-h5 .h5-detail-wrap {
|
|
41
|
+
.h5-item,
|
|
42
|
+
.c-item {
|
|
43
|
+
background: #fff;
|
|
44
|
+
border-radius: $xformH5CardRadius;
|
|
45
|
+
margin: 12px 16px 0;
|
|
46
|
+
padding-bottom: 0;
|
|
47
|
+
overflow: hidden;
|
|
48
|
+
|
|
49
|
+
/* 对手:style.scss:13771 .h5-detail-wrap .h5-item .h5-title (0,3,0);本方 0,4,0
|
|
50
|
+
.tit 同上,是 h5CardPane 的标题类 */
|
|
51
|
+
.h5-title,
|
|
52
|
+
.tit {
|
|
53
|
+
line-height: 45px;
|
|
54
|
+
padding: 0 12px;
|
|
55
|
+
border-bottom:none;
|
|
56
|
+
position: relative;
|
|
57
|
+
|
|
58
|
+
b {
|
|
59
|
+
font-size: 15px;
|
|
60
|
+
font-weight: 600;
|
|
61
|
+
color: #323232;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/* 左侧竖色条,对齐 bill_setting 的 .tit > b::before */
|
|
65
|
+
&::after {
|
|
66
|
+
content: "";
|
|
67
|
+
position: absolute;
|
|
68
|
+
left: 0;
|
|
69
|
+
top: 16px;
|
|
70
|
+
width: 4px;
|
|
71
|
+
height: 13px;
|
|
72
|
+
background: $baseColor;
|
|
73
|
+
border-radius: 4px;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/* 展开/收起箭头。h5CardPane 的那份在块 L 里(.c-item > .tit > .arrow),
|
|
77
|
+
这里是 xform 自己的卡片 h5-card-pane-item.vue,口径保持一致。 */
|
|
78
|
+
> .arrow {
|
|
79
|
+
position: absolute;
|
|
80
|
+
right: 12px;
|
|
81
|
+
top: 0;
|
|
82
|
+
line-height: 45px;
|
|
83
|
+
font-size: 16px;
|
|
84
|
+
color: #909399;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/* 标题栏的按钮区原本贴右边(style.scss:13786 right:12px),会和箭头叠在一起,
|
|
90
|
+
给箭头让出一格。对手 (0,4,0),本方 (0,5,0)。 */
|
|
91
|
+
.h5-item .h5-title .btns {
|
|
92
|
+
right: 34px;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/* ============ 块 C:字段行(表格版式的 CSS 复刻) ============ */
|
|
97
|
+
/* 决策 4 走 CSS 复刻而非真 <table>:字段组件全部依赖 el-form-item 挂
|
|
98
|
+
prop/rules,compareView 也包在里面,拆 th/td 会打断校验链与对比包裹。
|
|
99
|
+
|
|
100
|
+
★ 锚点(2026-08-29 改):行版式挂 .field-wrapper.h5-field,不再挂容器。
|
|
101
|
+
原来锚 `.h5-detail-wrap .h5-item .h5-form-box`,而 `.h5-item` 只有 h5-card-pane
|
|
102
|
+
会吐(h5-card-pane-item.vue:4);h5-card 吐的是 `.grid-cell`(h5-card-item.vue:2),
|
|
103
|
+
字段/表格直挂 detail-h5.panes 时连 `.h5-form-box` 都没有(detail-h5-widget.vue:29
|
|
104
|
+
的 draggable 是单一 dragGroup,任何容器都能拖进去)。那两种摆法下整套行版式
|
|
105
|
+
静默落空,表现为「标签右对齐、值左对齐」(element 默认)。
|
|
106
|
+
h5-field 由 form-item-wrapper 按 formConfig.layoutType === 'H5' 打,PC 不打。
|
|
107
|
+
代价是特异度基线从 (0,5,0) 降到 (0,3,0),故本块每条都按对手重算,见各条注释。 */
|
|
108
|
+
|
|
109
|
+
/* 容器层仍按容器锚:内边距与两列排布是容器职责,不是字段职责。
|
|
110
|
+
写到 (0,4,0),压过 style.scss:13801/13886 的
|
|
111
|
+
`.h5-detail-wrap .h5-item .h5-form-box{padding:12px / padding-bottom:0}` (0,3,0)
|
|
112
|
+
—— 同分只能靠加载顺序,而本文件与 style.scss 的先后不可靠,必须多一段。
|
|
113
|
+
|
|
114
|
+
★ 这里只锚 h5-card-pane 出的 .h5-item:曾并列加过一条 `.grid-cell .h5-form-box`
|
|
115
|
+
想覆盖 h5-card,那是错的 —— h5-card 的 panes 只能装卡片(h5-card-pane)、装不了字段
|
|
116
|
+
(widgetsConfig 里它就是 `panes: []`,h5-card-item 也只遍历 panes),
|
|
117
|
+
给它加 12px 不会让任何字段受益,只会把里面的卡片整体往里缩一圈,
|
|
118
|
+
结果是同一屏里 h5-card 里的卡片比流程面板窄 30px、左右对不齐。 */
|
|
119
|
+
.xform-h5 .h5-detail-wrap .h5-item .h5-form-box {
|
|
120
|
+
/* 12 拆成「容器 6 + 每个子项 6」,外缘仍是 12px,省出来的给列间距,见下面 > * 那条 */
|
|
121
|
+
padding:0 6px;
|
|
122
|
+
.item{
|
|
123
|
+
background: #FFF;
|
|
124
|
+
border-color: $xformH5RowBorder;
|
|
125
|
+
}
|
|
126
|
+
> .form-widget-list {
|
|
127
|
+
display: flex;
|
|
128
|
+
flex-wrap: wrap;
|
|
129
|
+
.h5-header{
|
|
130
|
+
display: none;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/* 半宽两列的列间距(H5 版式最多两列,半宽的 50% 就是上限)。
|
|
134
|
+
没有这一条时两列是贴着的:值是右对齐的(块 D),左列的值正好停在
|
|
135
|
+
右列标签的左边界上,读起来就是「值粘在下一个字段名上」——
|
|
136
|
+
表格路径早就补过同一个问题(块 C3 的
|
|
137
|
+
`td.table-cell + td.table-cell .el-form-item{padding-left:12px}`),
|
|
138
|
+
流式路径一直缺。
|
|
139
|
+
|
|
140
|
+
★ 用「容器减半 + 每项补一半」而不是给右列单独加左边距:
|
|
141
|
+
整宽/半宽混排时,谁是右列在 CSS 里数不出来(半宽跟在整宽后面会另起一行,
|
|
142
|
+
nth-child 的奇偶与列位对不上)。这个口径与明细卡片块 I2 的 .t2/dl 一致:
|
|
143
|
+
外缘不变、列间得到 6+6=12px。
|
|
144
|
+
★ 打在所有直接子项上而不是只打 .field-wrapper:这一层还会装嵌套容器
|
|
145
|
+
(h5-table、list-h5 等),只给字段加的话容器会缩到距卡片边 6px、与字段行错开。
|
|
146
|
+
全局 box-sizing 是 border-box(styles/index.scss),内边距算在 50% 里不会溢出。 */
|
|
147
|
+
> * {
|
|
148
|
+
padding-left: 6px;
|
|
149
|
+
padding-right: 6px;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/* h5-card 在 H5 版式下只是个分组壳,里面直接装卡片,壳自己不该再占内边距。
|
|
155
|
+
那 3px 来自 h5-card-item.vue 的 scoped 样式(`.grid-cell{min-height:80px;padding:3px}`,
|
|
156
|
+
从设计器画布抄来的),(0,2,0);本方 (0,4,0) 压得过。
|
|
157
|
+
抹平之后,h5-card 里的卡片与直接挂在滚动区下的流程面板一样都落在 margin 8px 上。 */
|
|
158
|
+
.xform-h5 .h5-detail-body > .form-widget-list > .grid-cell {
|
|
159
|
+
padding: 0;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/* ★ 不要给 `.h5-detail-body > .form-widget-list` 也加 flex-wrap:那一层装的是
|
|
163
|
+
卡片(detail-h5-item.vue 的 panes),卡片自身没有宽度,一旦父级变 flex 容器
|
|
164
|
+
就会按内容宽并排成一行。字段直挂 detail-h5.panes 时靠下面的
|
|
165
|
+
`.field-wrapper.h5-field{width:100%}` 自然堆叠即可 —— 该摆法下 h5Span=half
|
|
166
|
+
不成两列(没有 flex 父级),这是刻意取舍:半宽本就是卡片内的排布选项。 */
|
|
167
|
+
|
|
168
|
+
/* 行版式本体 */
|
|
169
|
+
.xform-h5 .field-wrapper.h5-field {
|
|
170
|
+
width: 100%;
|
|
171
|
+
|
|
172
|
+
/* 半宽(两列),由字段选项 h5Span === 'half' 打在 form-item-wrapper 根节点上。
|
|
173
|
+
表格布局里不生效:对手 `.designer-view .table-layout td.table-cell
|
|
174
|
+
.field-wrapper{width:100%}` (0,4,1) 高于本条 (0,4,0),列宽本就该由表格自己控。 */
|
|
175
|
+
&.h5-half {
|
|
176
|
+
width: 50%;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/* 表格布局里 style.scss:9896 把它变成 display:table (0,4,1),本块不去争,
|
|
180
|
+
那条正是块 C1 依赖的前提。 */
|
|
181
|
+
.el-form-item {
|
|
182
|
+
display: flex;
|
|
183
|
+
align-items: flex-start;
|
|
184
|
+
position: relative;
|
|
185
|
+
min-height: $xformH5RowHeight;
|
|
186
|
+
margin-bottom: 0;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/* 对手:style.scss:13854 `.h5-detail-wrap .h5-item .el-form-item__label` (0,3,0)
|
|
190
|
+
带 text-align:left !important,且把 &:after 设成 display:none;本方 (0,5,0)。 */
|
|
191
|
+
.el-form-item > .el-form-item__label {
|
|
192
|
+
width: $xformH5LabelWidth;
|
|
193
|
+
padding: 0 5px 0 0;
|
|
194
|
+
margin: 0;
|
|
195
|
+
line-height: 1.4;
|
|
196
|
+
height: auto;
|
|
197
|
+
overflow: hidden;
|
|
198
|
+
color: #666666;
|
|
199
|
+
text-align: left !important;
|
|
200
|
+
|
|
201
|
+
/* 标签后自动补冒号,对齐 bill_setting form-table 的 th::after。
|
|
202
|
+
对手把 display 关了,必须先打开再给 content。本方 (0,5,1)。 */
|
|
203
|
+
&::after {
|
|
204
|
+
display: inline !important;
|
|
205
|
+
content: ":";
|
|
206
|
+
margin-left:2px;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
.el-form-item > .el-form-item__content {
|
|
211
|
+
flex: 1;
|
|
212
|
+
line-height: 1.4;
|
|
213
|
+
word-break: break-word;
|
|
214
|
+
/* el-form-item 按 label-width 写的内联 margin-left 在 flex 行里是多余的左空白:
|
|
215
|
+
值是右对齐的所以看不出来,但它白白压缩可用宽度、让长值提前折行。
|
|
216
|
+
内联样式只能 !important 压(同款处理见块 C2)。 */
|
|
217
|
+
margin-left: 0 !important;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
/* 卡片里最后一行不留分隔线。:last-child 计入 class 列,本条 (0,5,0)
|
|
221
|
+
高于上面 .el-form-item 的 border-bottom (0,4,0)。 */
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/* ============ 块 C1:表格布局(.table-layout)下退回块 C 的 flex 行 ============ */
|
|
225
|
+
/* 字段落进 td.table-cell 时,style.scss:9896 起把它改成「table 模拟」:
|
|
226
|
+
`.field-wrapper{display:table}` / `.el-form-item{display:table-row}` /
|
|
227
|
+
label 与 content 各 `display:table-cell`。这套在 H5 下有个死结:
|
|
228
|
+
|
|
229
|
+
form-item-wrapper 的根节点里还夹着一层普通 <div>
|
|
230
|
+
(.field-wrapper > div > .el-form-item),block 盒卡在 table 与 table-row 之间,
|
|
231
|
+
CSS 会给它补匿名 table-cell + 匿名 table —— el-form-item 落进的是那张**匿名表**,
|
|
232
|
+
而匿名表是 shrink-to-fit:整行只有「标签 80px + 值内容宽」那么宽,撑不满单元格,
|
|
233
|
+
值永远贴在标签右边,而不是单元格右缘(实测 305px 的格子里行只有 128px)。
|
|
234
|
+
改动前看着「还行」,是因为 PC 的 td.w1 给 content 钉了 172.2px 死宽顶着,
|
|
235
|
+
块 C3 一解除死宽就塌了 —— 那个死宽本来就是 PC 像素值,不能留。
|
|
236
|
+
|
|
237
|
+
另外 table-row 上 min-height/padding/border 一律不生效,element 的 label 又自带
|
|
238
|
+
float:left(float 非 none 会把 display 强制算成 block,标签直接脱出表格流),
|
|
239
|
+
顺着 table 模拟走要打三处补丁才勉强成型。
|
|
240
|
+
|
|
241
|
+
所以整段退回块 C 的 flex 行:一套行模型走到底,min-height/padding/border 跟着
|
|
242
|
+
恢复生效,值靠 content 的 flex:1 + text-align:right 贴到单元格右缘。
|
|
243
|
+
对手 `.designer-view .table-layout td.table-cell .field-wrapper …` (0,4,1)~(0,6,1);
|
|
244
|
+
本方 (0,6,1)~(0,8,1)(:not(.h5-block) 按其参数计一个 class)。
|
|
245
|
+
宽内容字段(h5-block)不走这条:它要的是「标签在上、内容整行」,见块 C2。 */
|
|
246
|
+
.xform-h5
|
|
247
|
+
.table-layout
|
|
248
|
+
td.table-cell
|
|
249
|
+
.field-wrapper.h5-field:not(.h5-block) {
|
|
250
|
+
display: block;
|
|
251
|
+
|
|
252
|
+
.el-form-item {
|
|
253
|
+
display: flex;
|
|
254
|
+
align-items: center;
|
|
255
|
+
|
|
256
|
+
> .el-form-item__label,
|
|
257
|
+
> .el-form-item__content {
|
|
258
|
+
display: block;
|
|
259
|
+
float: none;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
> .el-form-item__content {
|
|
263
|
+
flex: 1;
|
|
264
|
+
min-width: 0; // 不写这行,长值撑破行而不是折行
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
/* ============ 块 C3:表格布局里的字段值也贴右 ============ */
|
|
270
|
+
/* 光有块 C/C1 还不够,表格路径上另有两条 PC 老规则顶着:
|
|
271
|
+
|
|
272
|
+
对手一 style.scss:5185 `.table-d-box td .field-wrapper .el-form-item__content span
|
|
273
|
+
{ text-align:left }` (0,3,2) —— 只读字段的展示值正是一个 <span>
|
|
274
|
+
(form-item-wrapper 的兜底分支),块 C 的容器右对齐被这个子元素直接盖掉。
|
|
275
|
+
对手二 style.scss:5191 起 `.table-d-box td.w1 .field-wrapper .el-form-item__content
|
|
276
|
+
{ width:172.2px !important }` (0,4,1)+!important,四档 w1~w4 全是 PC 像素宽;
|
|
277
|
+
375px 屏上 w1 的 td 就要 284.2px,值区被钉在 172.2px,右对齐也只在这块死宽里
|
|
278
|
+
生效,看着仍然不贴边。td 自身的 width:284.2px~1138.8px 同理。
|
|
279
|
+
注:w{colspan} 只有 table/table2 的单元格会打(table-cell-item.vue:2、
|
|
280
|
+
table2-cell-item.vue:3),h5-table 的单元格不打,故 h5-table 只中对手一。
|
|
281
|
+
|
|
282
|
+
★ 不做「H5 下表格自动降成一列」:会打断 colspan/rowspan 合并,且与总方案
|
|
283
|
+
「PC 的 data-table/sub-form 不做 H5 自动降级」是同一条口径。列数交给设计器
|
|
284
|
+
用 h5-table 或 cellWidth 控制。 */
|
|
285
|
+
.xform-h5 .table-layout.table-d-box {
|
|
286
|
+
/* 解除 w1~w4 的 PC 死宽。设计器里显式配了 cellWidth 的单元格走内联
|
|
287
|
+
style="width:xx !important",优先级最高,不受这条影响,按配置生效。 */
|
|
288
|
+
> tbody > tr {
|
|
289
|
+
&:last-child{
|
|
290
|
+
.field-wrapper.h5-field .el-form-item{border-bottom:none}
|
|
291
|
+
}
|
|
292
|
+
> td.table-cell {
|
|
293
|
+
width: auto !important;
|
|
294
|
+
border:none !important
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
/* 一行两列(两个 td.w1 并排)时,左列的值右对齐后正好停在右列的左边界上,
|
|
299
|
+
读起来就是「值粘在下一个字段名上」(实测 359 对 360)。
|
|
300
|
+
对齐 bill_setting form-table 的处理:它用 `th:nth-child(3){padding-left:12px}`
|
|
301
|
+
让第二列的标签让出间隔。这里把间隔加在单元格上而不是标签上 —— 标签有 80px
|
|
302
|
+
定宽,加内边距会挤掉字数(全局 box-sizing 是 border-box)。 */
|
|
303
|
+
> tbody > tr > td.table-cell + td.table-cell .el-form-item{
|
|
304
|
+
padding-left: 12px;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
td.table-cell .field-wrapper.h5-field .el-form-item {
|
|
308
|
+
/* 断链场景下 element 默认标签是右对齐的,这里兜住 */
|
|
309
|
+
border-bottom:solid 1px $xformH5RowBorder;
|
|
310
|
+
> .el-form-item__label {
|
|
311
|
+
text-align: left !important;
|
|
312
|
+
font-size: $xformH5Size;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
> .el-form-item__content {
|
|
316
|
+
text-align: right;
|
|
317
|
+
display: flex;
|
|
318
|
+
justify-content: flex-end;
|
|
319
|
+
/* 对手一 (0,3,2),本方 (0,8,2) */
|
|
320
|
+
span {
|
|
321
|
+
font-size:$xformH5Size;
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
/* ============ 块 D:输入控件归一(去边框、右对齐) ============ */
|
|
328
|
+
.xform-h5 .field-wrapper.h5-field .el-form-item > .el-form-item__content {
|
|
329
|
+
.el-input,
|
|
330
|
+
.el-select {
|
|
331
|
+
width: 100% !important;
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
/* 对手:style.scss:13858 `.h5-detail-wrap .h5-item .el-input .el-input__inner` (0,4,0)
|
|
335
|
+
带 height/line-height 双 !important,故本方两条也带;本方 (0,7,0)。 */
|
|
336
|
+
.el-input .el-input__inner,
|
|
337
|
+
.el-textarea .el-textarea__inner {
|
|
338
|
+
height: auto !important;
|
|
339
|
+
line-height: 1.4 !important;
|
|
340
|
+
min-height: 34px;
|
|
341
|
+
border: none !important;
|
|
342
|
+
border-radius: 0 !important;
|
|
343
|
+
padding: 0;
|
|
344
|
+
text-align: right;
|
|
345
|
+
background: transparent;
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
/* 对手:style.scss:13845 `.h5-detail-wrap .h5-item .h5-form-box .el-input
|
|
349
|
+
.el-input__suffix .el-input__icon` (0,5,0)+!important;本方 (0,9,0)。 */
|
|
350
|
+
.el-input .el-input__suffix,
|
|
351
|
+
.el-input .el-input__prefix {
|
|
352
|
+
.el-input__icon {
|
|
353
|
+
line-height: 34px !important;
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
.el-radio-group .el-radio,
|
|
358
|
+
.el-checkbox-group .el-checkbox {
|
|
359
|
+
margin: 0 0 0 8px;
|
|
360
|
+
|
|
361
|
+
.el-radio__label,
|
|
362
|
+
.el-checkbox__label {
|
|
363
|
+
padding-left: 4px;
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
/* ============ 块 C2:宽内容字段不走紧凑行版式 ============ */
|
|
369
|
+
/* 附件、图片、富文本这类字段的内容是一片区域而不是一行值。
|
|
370
|
+
块 C/D 那套(标签定宽 80px + 内容 flex:1 右对齐)是给单行输入设计的,
|
|
371
|
+
套上去会把附件列表挤到右侧贴着边框、文件名压线、缩略图变形。
|
|
372
|
+
这里让它们恢复成「标签在上、内容整行左对齐」。
|
|
373
|
+
h5-block 由 form-item-wrapper 按字段类型打,见其 isH5BlockField。
|
|
374
|
+
★ 必须排在块 D 之后:输入框那条与块 D 的 text-align 需要靠段数取胜,
|
|
375
|
+
本块写全 `.el-form-item > .el-form-item__content …` 拿到 (0,8,0) > 块 D (0,7,0),
|
|
376
|
+
不依赖书写顺序;其余各条 (0,6,0) > 块 C 的 (0,5,0)。 */
|
|
377
|
+
.xform-h5 .field-wrapper.h5-field.h5-block {
|
|
378
|
+
width: 100%;
|
|
379
|
+
|
|
380
|
+
.el-form-item {
|
|
381
|
+
display: block;
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
.el-form-item > .el-form-item__label {
|
|
385
|
+
width: auto;
|
|
386
|
+
float: none;
|
|
387
|
+
display: block;
|
|
388
|
+
text-align: left !important;
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
.el-form-item > .el-form-item__content {
|
|
392
|
+
flex: none;
|
|
393
|
+
text-align: left;
|
|
394
|
+
margin-left: 0 !important; // el-form 的 label-width 会给 content 留左边距
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
/* 上传组件内部不该继承「输入框去边框 + 右对齐」那几条 */
|
|
398
|
+
.el-form-item > .el-form-item__content {
|
|
399
|
+
.el-input .el-input__inner,
|
|
400
|
+
.el-textarea .el-textarea__inner {
|
|
401
|
+
text-align: left;
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
/* ============ 块 E:必填星号与校验错误位 ============ */
|
|
407
|
+
/* 字段行改 flex 后 Element 的星号与错误提示会错位,必须显式定位
|
|
408
|
+
(bill_setting 的 .el-form-item__label:before{position:absolute} 是同一处理) */
|
|
409
|
+
.xform-h5 .field-wrapper.h5-field .el-form-item {
|
|
410
|
+
&.is-required:not(.is-no-asterisk) > .el-form-item__label::before {
|
|
411
|
+
position: absolute;
|
|
412
|
+
left: -8px;
|
|
413
|
+
margin: 0;
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
.el-form-item__error {
|
|
417
|
+
position: static;
|
|
418
|
+
text-align: right;
|
|
419
|
+
padding-top: 2px;
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
/* ============ 块 F:半宽落单行 ============ */
|
|
424
|
+
/* 一行末尾落单的半宽字段保持半宽、右侧留白(bill_setting 的 table 版式天然如此)。
|
|
425
|
+
若产品要求撑满整行,把下面这条注释放开即可。 */
|
|
426
|
+
// 用 // 而非 /* */:sass 的块注释会原样输出到生产 CSS,被注释掉的规则不该进产物
|
|
427
|
+
// .xform-h5 .field-wrapper.h5-field.h5-half:nth-child(odd):last-child {
|
|
428
|
+
// width: 100%;
|
|
429
|
+
// }
|
|
430
|
+
|
|
431
|
+
/* ============ 块 G:骨架(flex 列 + 内部滚动区) ============ */
|
|
432
|
+
/* 改动前是「整页滚 + 底栏 position:fixed」,底栏在弹框里会钉到屏幕底部
|
|
433
|
+
(三个弹框各写过 .H5 补丁想推回去,但那三条选择器从未生效,已删)。
|
|
434
|
+
改成流内布局后,底栏自然贴容器底部,且 iOS 键盘弹起不再顶飞底栏。 */
|
|
435
|
+
.xform-h5 {
|
|
436
|
+
height: 100%;
|
|
437
|
+
|
|
438
|
+
/* container-item-wrapper 那层,高度要能传下去 */
|
|
439
|
+
.container-wrapper {
|
|
440
|
+
height: 100%;
|
|
441
|
+
width:100%;
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
.h5-detail-wrap {
|
|
445
|
+
//display: flex;
|
|
446
|
+
//flex-direction: column; 弹框在里面会有问题
|
|
447
|
+
height: 100%;
|
|
448
|
+
min-height: 0; // 允许在 flex 父级下收缩
|
|
449
|
+
/* 压掉 style.scss:13765 的 padding-bottom:68px(那是给 fixed 底栏让位用的) */
|
|
450
|
+
padding-bottom: 0 !important;
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
.h5-header {
|
|
454
|
+
flex: none;
|
|
455
|
+
height: $xformH5HeaderHeight !important;
|
|
456
|
+
line-height: $xformH5HeaderHeight;
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
.h5-detail-body {
|
|
460
|
+
flex: 1;
|
|
461
|
+
/* ★ 必写:flex 子项默认 min-height:auto 会被内容撑开,
|
|
462
|
+
结果是父级溢出而不是子级滚动 */
|
|
463
|
+
min-height: 0;
|
|
464
|
+
overflow-y: auto;
|
|
465
|
+
-webkit-overflow-scrolling: touch;
|
|
466
|
+
/* 滚到底时最后一张卡片要留出呼吸位,否则它的下边缘正好压在底部动作栏上。
|
|
467
|
+
卡片是 margin:12px 8px 0(只有上间距),末尾这一格只能由滚动区补。
|
|
468
|
+
取 12px 与卡片间距同口径。 */
|
|
469
|
+
padding-bottom: 12px;
|
|
470
|
+
height:calc(100% - $xformH5FooterHeight - $xformH5HeaderHeight) !important;
|
|
471
|
+
|
|
472
|
+
-webkit-overflow-scrolling:touch;
|
|
473
|
+
/* ★ 字段卡片那组的高度必须由内容决定。
|
|
474
|
+
detail-h5-item.vue 的 scoped 样式里有一条从设计器画布抄来的
|
|
475
|
+
`.grid-container .form-widget-list { height: 100% }`,而该组件的根节点
|
|
476
|
+
正是 .h5-detail-wrap.grid-container —— 于是这个 transition-group 被钉成
|
|
477
|
+
滚动区的高度(100%),跟内容实际高度脱钩:内容更高时,排在它后面的
|
|
478
|
+
流程面板会按 100% 那个位置起排,直接压到卡片上(实测重叠 65px,表现
|
|
479
|
+
就是「流程信息和附件信息之间没有间隔」);内容更矮时则反过来空一大段。
|
|
480
|
+
对手是 scoped 的 .grid-container .form-widget-list[data-v-x] (0,3,0),
|
|
481
|
+
本方 (0,4,0)。 */
|
|
482
|
+
> .form-widget-list {
|
|
483
|
+
height: auto;
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
.h5-fixed-bottom-btns {
|
|
489
|
+
/* 压掉 style.scss:10246 附近的 position:fixed 与 height:56px!important。
|
|
490
|
+
单行固定高:超出三个的按钮进图标下拉,不换行。 */
|
|
491
|
+
//position: static !important;
|
|
492
|
+
flex: none;
|
|
493
|
+
height: $xformH5FooterHeight !important;
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
/* ============ 块 G2:底栏没按钮时把那一格还给内容区 ============ */
|
|
498
|
+
/* 底栏一个按钮都没有时 detail-h5-item 不渲染它,并在根节点打 h5-no-bottom-btns。
|
|
499
|
+
块 G 的 .h5-detail-body 高度是 calc(100% - 底栏 - 标题栏) 硬减出来的,
|
|
500
|
+
不跟着改的话底部会空出一条 56px 的白带(底栏没了,减法还在)。
|
|
501
|
+
对手是块 G 里 .xform-h5 .h5-detail-body 那条 (0,2,0) + !important,
|
|
502
|
+
本方 (0,4,0) + !important,靠段数取胜,不依赖书写顺序。 */
|
|
503
|
+
.xform-h5 .h5-detail-wrap.h5-no-bottom-btns .h5-detail-body {
|
|
504
|
+
height: calc(100% - $xformH5HeaderHeight) !important;
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
/* ★ 页面态必须定死一屏,不能用 min-height。
|
|
508
|
+
实测宿主链没有确定高度(#containt 只有背景/圆角,没有 height),
|
|
509
|
+
.designer-view{height:100%} → .xform-h5{height:100%} 一路塌陷成 auto;
|
|
510
|
+
此时 min-height:100vh 会被内容撑高 → 整页滚动 → 标题栏和底部动作栏跟着滚走。
|
|
511
|
+
改成 height:100vh + overflow:hidden:容器恰好一屏、外层无可滚余量,
|
|
512
|
+
内容只在 .h5-detail-body 里滚,标题栏与底栏才真正固定。
|
|
513
|
+
|
|
514
|
+
★ 但 100vh 在手机浏览器上不是「可见高度」:Chrome/Safari 的 vh 取的是**地址栏
|
|
515
|
+
收起后的大视口**,地址栏还在时容器比可视区高出一截(Chrome 约 56px),
|
|
516
|
+
底栏正好被顶到屏幕外 —— 表现就是「一进来看不到审批按钮,往下拖一下、
|
|
517
|
+
地址栏收起了才出现」。改用动态视口单位 dvh:它随地址栏收放实时变化,
|
|
518
|
+
永远等于当前可见高度。
|
|
519
|
+
两行都要留:不认识 dvh 的旧内核(Chrome<108 / iOS<15.4 / 老 Android WebView)
|
|
520
|
+
会丢弃后一行、退回 100vh 的老行为,不会整条失效。 */
|
|
521
|
+
.xform-h5 .h5-detail-wrap {
|
|
522
|
+
height: 100vh;
|
|
523
|
+
height: 100dvh;
|
|
524
|
+
overflow: hidden;
|
|
525
|
+
}
|
|
526
|
+
/* 弹框/抽屉态:高度由弹框自己的 .cont 给,跟随容器而不是视口 */
|
|
527
|
+
.el-dialog .xform-h5 .h5-detail-wrap,
|
|
528
|
+
.el-drawer .xform-h5 .h5-detail-wrap {
|
|
529
|
+
height: 100%;
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
/* ============ 块 H:底部动作栏(胶囊按钮,单行、最多三个 + 图标下拉) ============ */
|
|
533
|
+
|
|
534
|
+
.xform-h5 .h5-detail-wrap .h5-fixed-bottom-btns {
|
|
535
|
+
display: flex;
|
|
536
|
+
align-items: center;
|
|
537
|
+
background: #fff;
|
|
538
|
+
padding: 8px;
|
|
539
|
+
box-shadow: 0 0 10px rgba(0, 0, 0, 0.06);
|
|
540
|
+
|
|
541
|
+
.form-widget-list,
|
|
542
|
+
.el-form {
|
|
543
|
+
display: flex;
|
|
544
|
+
flex: 1;
|
|
545
|
+
min-width: 0; // 让内部按钮能被压缩,否则长文案会把下拉挤出去
|
|
546
|
+
}
|
|
547
|
+
|
|
548
|
+
/* flex:1 等分 —— 1 个铺满、2 个各一半、3 个各三分之一,全自动 */
|
|
549
|
+
.field-wrapper {
|
|
550
|
+
flex: 1;
|
|
551
|
+
min-width: 0;
|
|
552
|
+
margin: 0 5px;
|
|
553
|
+
}
|
|
554
|
+
|
|
555
|
+
.button-sty,
|
|
556
|
+
.el-button {
|
|
557
|
+
width: 100%;
|
|
558
|
+
height: 40px;
|
|
559
|
+
border-radius: 30px;
|
|
560
|
+
padding: 0;
|
|
561
|
+
/* 三个并排时按钮偏窄:字号收一档、超长省略,避免文字撑破 */
|
|
562
|
+
font-size: 13px;
|
|
563
|
+
overflow: hidden;
|
|
564
|
+
text-overflow: ellipsis;
|
|
565
|
+
white-space: nowrap;
|
|
566
|
+
|
|
567
|
+
i {
|
|
568
|
+
margin-right: 3px;
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
/* 「更多」:一个裸的箭头图标,不做成按钮 —— 没有底色、边框、圆角,
|
|
573
|
+
只按内容宽占位,不参与等分。 */
|
|
574
|
+
> .h5-more-dropdown {
|
|
575
|
+
flex: none;
|
|
576
|
+
margin-left: 4px;
|
|
577
|
+
|
|
578
|
+
.h5-more-icon {
|
|
579
|
+
display: block;
|
|
580
|
+
padding: 0 8px;
|
|
581
|
+
font-size: 20px;
|
|
582
|
+
line-height: 40px;
|
|
583
|
+
color: $baseColor;
|
|
584
|
+
cursor: pointer;
|
|
585
|
+
}
|
|
586
|
+
}
|
|
587
|
+
}
|
|
588
|
+
|
|
589
|
+
/* ============ 「更多」下拉菜单 ============ */
|
|
590
|
+
/* ★ 不能嵌进 .xform-h5:el-dropdown-menu 默认 append-to-body,
|
|
591
|
+
菜单 DOM 会被挪到 <body> 下、脱离根类作用域,嵌套写法一律失效。
|
|
592
|
+
bill_setting 的 .mobileApp_dropdown.el-dropdown-menu 也是顶层选择器,同一模式。 */
|
|
593
|
+
.xform-h5-dropdown.el-dropdown-menu {
|
|
594
|
+
.el-dropdown-menu__item {
|
|
595
|
+
margin: 8px 0;
|
|
596
|
+
line-height: normal;
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
.button-sty,
|
|
600
|
+
.el-button {
|
|
601
|
+
width: 100%;
|
|
602
|
+
height: 36px;
|
|
603
|
+
border-radius: 30px;
|
|
604
|
+
padding: 0 16px;
|
|
605
|
+
font-size: 13px;
|
|
606
|
+
|
|
607
|
+
i {
|
|
608
|
+
margin-right: 4px;
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
|
|
614
|
+
/* ============ 明细行的「查看」角标 ============ */
|
|
615
|
+
/* 对齐 bill_setting 的 .pro-item .t::after:主色淡底圆钮 + 右向箭头,
|
|
616
|
+
提示这一行可以点进详情。与 itemStyle 无关,明细行一律有。
|
|
617
|
+
对手 .h5-list-box .item (0,2,0);本方 (0,3,0)。 */
|
|
618
|
+
.xform-h5 .h5-list-box .item {
|
|
619
|
+
margin-bottom:12px;
|
|
620
|
+
&:last-child{
|
|
621
|
+
margin-bottom:12px;
|
|
622
|
+
}
|
|
623
|
+
.h5-item-arrow {
|
|
624
|
+
position: absolute;
|
|
625
|
+
right: 12px;
|
|
626
|
+
top: 10px;
|
|
627
|
+
z-index: 1;
|
|
628
|
+
width: 20px;
|
|
629
|
+
height: 20px;
|
|
630
|
+
line-height: 20px;
|
|
631
|
+
text-align: center;
|
|
632
|
+
font-size: 12px;
|
|
633
|
+
border-radius: 50%;
|
|
634
|
+
background: transparentize($baseColor, 0.88);
|
|
635
|
+
color: $baseColor;
|
|
636
|
+
|
|
637
|
+
&::before {
|
|
638
|
+
content: "\e6e0";
|
|
639
|
+
font-family: element-icons !important;
|
|
640
|
+
}
|
|
641
|
+
}
|
|
642
|
+
|
|
643
|
+
/* 给角标让位。整块让位(.t2{padding-right:28px})在值左对齐时看不出来,
|
|
644
|
+
但块 I2 把值改成右对齐后,所有行的值都会离右边框 28+14=42px、明显不贴边。
|
|
645
|
+
改成只让被角标压住的第一行:角标是 right:12px + 20px 宽,14(dl 自带) + 26 = 40px。
|
|
646
|
+
|
|
647
|
+
★ 用角标自身作条件(它在 DOM 里就排在 .t2 前面,list-h5-item.vue:84),
|
|
648
|
+
而不是按位置写死:弹框里那份 list 不渲染角标,跟着让位会白缺一块(实测首行
|
|
649
|
+
比其余行短 26px)。查询选择场景(isQueryTable)同样不渲染角标(那时点行是勾选、
|
|
650
|
+
不进详情),自然也不让位。
|
|
651
|
+
★ 整行/半行混排后,被角标压住的是「首行最右那格」,分两种:
|
|
652
|
+
① 首格就是整行 → 它自己占满首行;
|
|
653
|
+
② 首格半行且第二格也半行 → 右上角那格是第二格。
|
|
654
|
+
首格半行、第二格整行时,整行那格放不进首行会换到第二行,首行只剩左半格,
|
|
655
|
+
够不着角标,不必让位(所以没有第三条)。
|
|
656
|
+
基础内边距 7px + 角标占到卡片右缘 32px,让到 28px 刚好留出约 4px 空隙。
|
|
657
|
+
★ 用相邻兄弟 `+` 而不是 `~`:有主标题(.t1)时角标压的是标题行、由块 I3 让位,
|
|
658
|
+
字段区不该再缩,`+` 在中间隔着 .t1 时自然不匹配。 */
|
|
659
|
+
.h5-item-arrow + .t2 > dl:first-child:not(.m2),
|
|
660
|
+
.h5-item-arrow + .t2 > dl.m2:first-child + dl.m2 {
|
|
661
|
+
padding-right: 28px;
|
|
662
|
+
}
|
|
663
|
+
}
|
|
664
|
+
|
|
665
|
+
/* ============ 块 I2:明细行字段「标签左 / 值右」 ============ */
|
|
666
|
+
/* 与块 C 的详情行口径对齐 —— 同一屏里不该有两套。
|
|
667
|
+
注意参考物 bill_setting 的明细卡片本身是左对齐的:它全局那条
|
|
668
|
+
`.form-list-table td .el-form-item__content{text-align:right}`(style.scss:14406)
|
|
669
|
+
被 render.vue 自己的 scoped `.pro-item .info ::v-deep …{text-align:left}`
|
|
670
|
+
(0,5,0) > (0,4,2) 压掉了。这里对齐的是它的主表 .form-table 口径。
|
|
671
|
+
|
|
672
|
+
对手全在 style.scss:14089-14115,裸类名、无 !important:
|
|
673
|
+
`.h5-list-box .item .t2 > dl` (0,3,1) width:100%; display:inline-block
|
|
674
|
+
`.h5-list-box .item .t2 > dl dt` (0,3,2) width:74px
|
|
675
|
+
`.h5-list-box .item .t2 > dl dd` (0,3,2) flex:1(没设 text-align,故默认左)
|
|
676
|
+
`.h5-list-box .item .t2 > dl .field-wrapper` (0,4,1) width:calc(100vw - 159px)
|
|
677
|
+
本方 (0,4,1) / (0,4,3) / (0,5,2) 起步。 */
|
|
678
|
+
|
|
679
|
+
/* 一行一个 / 一行两个混排。默认整行;列在设计器里配了「H5列宽=半行」时,
|
|
680
|
+
list-h5-item 会给它的 <dl> 打上 m2(判等只认 'half')。
|
|
681
|
+
m2 这个类名沿用 style.scss:14095 早就写好的 `.t2 > dl.m2{width:50%}` ——
|
|
682
|
+
那条规则一直没人往 dl 上打类,是条死规则,这里把它接上。
|
|
683
|
+
.t2 要先变成 flex 容器,否则 dl 自带的 width:100% 会让 50% 也各占一行。
|
|
684
|
+
全局 box-sizing:border-box,dl 的左右内边距算在 50% 里,不会溢出。 */
|
|
685
|
+
.xform-h5 .h5-list-box .item .t2 {
|
|
686
|
+
display: flex;
|
|
687
|
+
flex-wrap: wrap;
|
|
688
|
+
align-items: flex-start;
|
|
689
|
+
/* 列间距收一半:dl 自带的左右各 14px 会在两列中间叠成 28px 的空档,
|
|
690
|
+
而卡片外缘只有 14px。改成 .t2 与 dl 各 7px —— 外缘仍是 14px,
|
|
691
|
+
列间也是 14px,省出来的 14px 全给值。 */
|
|
692
|
+
padding-left: 7px;
|
|
693
|
+
padding-right: 7px;
|
|
694
|
+
padding-bottom:0;
|
|
695
|
+
font-size: 13px;
|
|
696
|
+
}
|
|
697
|
+
|
|
698
|
+
.xform-h5 .h5-list-box .item .t2 > dl {
|
|
699
|
+
padding-left: 7px;
|
|
700
|
+
padding-right: 7px;
|
|
701
|
+
margin-top:0;
|
|
702
|
+
> div {
|
|
703
|
+
align-items: flex-start; // 值折行时标签跟着顶对齐,别居中
|
|
704
|
+
}
|
|
705
|
+
|
|
706
|
+
> div > dt {
|
|
707
|
+
flex: 0 0 auto;
|
|
708
|
+
width: auto; // 撤掉 74px:右对齐后定宽标签不再承担对齐职责,只剩死白
|
|
709
|
+
max-width: 45%;
|
|
710
|
+
padding-right: 8px;
|
|
711
|
+
color: #999;
|
|
712
|
+
}
|
|
713
|
+
|
|
714
|
+
> div > dd {
|
|
715
|
+
flex: 1;
|
|
716
|
+
min-width: 0; // 不写这行,长值会撑破行而不是折行
|
|
717
|
+
//text-align: right;
|
|
718
|
+
margin: 0;
|
|
719
|
+
word-break: break-word;
|
|
720
|
+
color: #323232; // 值加深、标签留灰,同块 C 的 #808080 / 默认色关系
|
|
721
|
+
}
|
|
722
|
+
|
|
723
|
+
/* 半行(一行两个)。整行的列不写 width,沿用 style.scss 的 100%。
|
|
724
|
+
本方 (0,5,1) > 对手 style.scss:14090 的 (0,3,1)。 */
|
|
725
|
+
&.m2 {
|
|
726
|
+
width: 50%;
|
|
727
|
+
}
|
|
728
|
+
|
|
729
|
+
/* 半行列里塞不下的值,整段落到标签下一行(仍在本列内右对齐),
|
|
730
|
+
而不是被挤成竖排的一两个字 —— 375px 屏上一列净宽只有约 131px,
|
|
731
|
+
标签先占掉 40~50px。
|
|
732
|
+
★ 关键在 `flex-basis:auto`(即 `flex:1 1 auto`):换行判定用的是弹性项的
|
|
733
|
+
「假定主尺寸」,basis:auto 时它等于内容宽,于是短值放得下就并排、长值放不下
|
|
734
|
+
才整段换行 —— 这是按内容自适应,不是拍一个阈值。
|
|
735
|
+
通用那条写的是 `flex:1`(= `1 1 0%`),假定尺寸恒为 0,永远不会触发换行;
|
|
736
|
+
早先改用 min-width 当阈值,131-44=87 与阈值 88 只差 1px,结果连「电视机」
|
|
737
|
+
这种短值都被踢到下一行。min-width:0 保留,让独占一行的超长值能内部折行而不溢出。
|
|
738
|
+
本方 (0,5,3) > 上面通用那条 (0,4,3)。 */
|
|
739
|
+
&.m2 > div {
|
|
740
|
+
flex-wrap: wrap;
|
|
741
|
+
}
|
|
742
|
+
|
|
743
|
+
&.m2 > div > dd {
|
|
744
|
+
flex: 1 1 auto;
|
|
745
|
+
min-width: 0;
|
|
746
|
+
}
|
|
747
|
+
}
|
|
748
|
+
|
|
749
|
+
/* dd 里是真控件的那份(「明细详情」弹框,list-h5-item.vue:478)。
|
|
750
|
+
列表行本身只出纯文本,这一段只对弹框生效。 */
|
|
751
|
+
.xform-h5 .h5-list-box .item .t2 > dl > div > dd {
|
|
752
|
+
margin:0;
|
|
753
|
+
/* 压 style.scss:14112 的 width:calc(100vw - 159px),本方 (0,5,2) > (0,4,1) */
|
|
754
|
+
.field-wrapper.h5-field {
|
|
755
|
+
display: block;
|
|
756
|
+
width: auto;
|
|
757
|
+
}
|
|
758
|
+
|
|
759
|
+
/* 块 C 会把它做成带下边框的 48px 行,而这里的行分隔由 dl 自己给。
|
|
760
|
+
本方 (0,7,3) > 块 C 的 (0,4,0)。 */
|
|
761
|
+
.field-wrapper.h5-field .el-form-item {
|
|
762
|
+
display: block;
|
|
763
|
+
min-height: 0;
|
|
764
|
+
margin-bottom: 0;
|
|
765
|
+
padding: 0;
|
|
766
|
+
border-bottom: none;
|
|
767
|
+
}
|
|
768
|
+
|
|
769
|
+
/* dt 已经出过字段名,控件自带的 label 是第二个 —— 藏掉。
|
|
770
|
+
(list-h5 传的 tableParam 没有 $table,form-item-wrapper 的
|
|
771
|
+
shouldHideFieldLabel/isDataTableColumnItem 判不出来,标签照出,
|
|
772
|
+
于是弹框里一直是「dt + label」两个字段名。)
|
|
773
|
+
content 的左边距是 element 按 label-width 写的内联样式,只能 !important 压。 */
|
|
774
|
+
.field-wrapper.h5-field .el-form-item > .el-form-item__label {
|
|
775
|
+
display: none;
|
|
776
|
+
}
|
|
777
|
+
|
|
778
|
+
.field-wrapper.h5-field .el-form-item > .el-form-item__content {
|
|
779
|
+
margin-left: 0 !important;
|
|
780
|
+
}
|
|
781
|
+
}
|
|
782
|
+
|
|
783
|
+
|
|
784
|
+
/* ============ 块 I:明细行卡片皮肤(list-h5 的 itemStyle=card) ============ */
|
|
785
|
+
/* 现状 .h5-list-box .item(style.scss:14029)已经是白底+radius8+1px边框+左侧竖条的卡片,
|
|
786
|
+
与 bill_setting 的 .pro-item 只差 4 点:圆角、竖条→圆点、右上角箭头角标、小字段字号。
|
|
787
|
+
对手 .h5-list-box .item (0,2,0);本方 .xform-h5 .h5-list-box .item.h5-item-card (0,4,0)。 */
|
|
788
|
+
.xform-h5 .h5-list-box .item.h5-item-card {
|
|
789
|
+
border-radius: $xformH5CardRadius;
|
|
790
|
+
|
|
791
|
+
.t1 {
|
|
792
|
+
padding-right: 40px; // 给右上角箭头角标让位
|
|
793
|
+
|
|
794
|
+
/* 左侧 4px 竖条 → 5px 圆点(对手 .t1:before 是 0,3,1,本方 0,5,1) */
|
|
795
|
+
&::before {
|
|
796
|
+
position: relative !important;
|
|
797
|
+
display: inline-block;
|
|
798
|
+
left: auto !important;
|
|
799
|
+
top: auto !important;
|
|
800
|
+
width: 5px !important;
|
|
801
|
+
height: 5px !important;
|
|
802
|
+
margin-right: 4px;
|
|
803
|
+
border-radius: 50% !important;
|
|
804
|
+
vertical-align: middle;
|
|
805
|
+
}
|
|
806
|
+
}
|
|
807
|
+
|
|
808
|
+
.t2 > dl {
|
|
809
|
+
min-width: 49%;
|
|
810
|
+
font-size: 11px;
|
|
811
|
+
}
|
|
812
|
+
|
|
813
|
+
/* 行级对比标记(getCompareRowClass 的返回值),角标对齐 bill_setting 的
|
|
814
|
+
.pro-item .t i.el-icon-warning */
|
|
815
|
+
&.xform-compare-row-changed::after {
|
|
816
|
+
content: "\e7a3";
|
|
817
|
+
font-family: element-icons !important;
|
|
818
|
+
position: absolute;
|
|
819
|
+
right: 38px;
|
|
820
|
+
top: 10px;
|
|
821
|
+
font-size: 14px;
|
|
822
|
+
color: #ff731c;
|
|
823
|
+
}
|
|
824
|
+
|
|
825
|
+
&.xform-compare-row-new {
|
|
826
|
+
border-color: $baseColor;
|
|
827
|
+
}
|
|
828
|
+
}
|
|
829
|
+
|
|
830
|
+
/* ============ 块 I3:明细卡片的主标题(对齐 bill_setting 的 .pro-item .t) ============ */
|
|
831
|
+
/* .t1 原本只有查询选择列表在用(一行排若干「标题:值」),style.scss:14031 起给它的
|
|
832
|
+
样式是照那个场景配的:display:flex、line-height:38px、左侧一根 4px 竖条。
|
|
833
|
+
明细卡片的主标题要的是 bill_setting 那副样子 —— 14px 深色单行、前面一个 5px 圆点、
|
|
834
|
+
右边给「查看」角标让位。h5-item-title 由 list-h5-item 只打在明细卡片那条分支上,
|
|
835
|
+
查询选择列表的 .t1 一条都不受影响。
|
|
836
|
+
对手 `.h5-list-box .item .t1` (0,3,0)、`.t1:before` (0,3,1);本方 (0,5,0)/(0,5,1)。
|
|
837
|
+
与块 I 卡片皮肤那条圆点规则同分,写在其后,且两者取值一致。 */
|
|
838
|
+
.xform-h5 .h5-list-box .item .t1.h5-item-title {
|
|
839
|
+
display: block; // 对手的 flex 是给「标题:值」多对并排用的
|
|
840
|
+
line-height: 22px;
|
|
841
|
+
/* 上边距 9px 是算出来的,不是拍的:角标 position:absolute、top:10px、高 20px,
|
|
842
|
+
中心落在距卡片内容顶 20px 处(+1px 边框 = 21px)。标题文字中心 =
|
|
843
|
+
padding-top + line-height/2 = 9 + 11 = 20(+1px 边框 = 21px),正好对齐。
|
|
844
|
+
改动 line-height 或角标的 top/height 时,这个 9px 要跟着重算。
|
|
845
|
+
(角标在 DOM 里排在标题前面,没法用选择器反查「后面有没有标题」来单独挪它 ——
|
|
846
|
+
:has() 在移动端 webview 上不能指望,所以由标题这边去对齐角标。)
|
|
847
|
+
右侧 40px 给角标让位:角标占到卡片右缘 32px。 */
|
|
848
|
+
padding: 9px 40px 6px 12px;
|
|
849
|
+
color: #323232;
|
|
850
|
+
|
|
851
|
+
> b {
|
|
852
|
+
font-size: 14px;
|
|
853
|
+
font-weight: 400;
|
|
854
|
+
word-break: break-word; // 主字段常是长编码,别撑破卡片
|
|
855
|
+
}
|
|
856
|
+
|
|
857
|
+
/* 左侧 4px 竖条 → 5px 圆点。对手把它 position:absolute 钉在 left:0/top:18px,
|
|
858
|
+
三条定位都得显式还原成流内元素。 */
|
|
859
|
+
&::before {
|
|
860
|
+
position: relative !important;
|
|
861
|
+
display: inline-block;
|
|
862
|
+
left: auto !important;
|
|
863
|
+
top: auto !important;
|
|
864
|
+
width: 5px !important;
|
|
865
|
+
height: 5px !important;
|
|
866
|
+
margin-right: 4px;
|
|
867
|
+
border-radius: 50% !important;
|
|
868
|
+
vertical-align: middle;
|
|
869
|
+
}
|
|
870
|
+
|
|
871
|
+
/* style.scss:14079 的 `.t1 + .t2{margin-top:0}` 会让字段区紧贴标题,补一点呼吸位。
|
|
872
|
+
对手 (0,4,1),本方 (0,5,1)。 */
|
|
873
|
+
+ .t2 {
|
|
874
|
+
margin-top: 4px;
|
|
875
|
+
}
|
|
876
|
+
}
|
|
877
|
+
|
|
878
|
+
/* ============ 块 I4:明细列表的「更多」尾行 ============ */
|
|
879
|
+
/* 详情里挂的明细列表默认只出 5 条(list-h5-item 的 H5_LIST_COLLAPSE_SIZE),
|
|
880
|
+
这一行是「更多(N)/ 收起」开关,两态同一行、只换文字与箭头方向,行高不变。
|
|
881
|
+
它是 .h5-list-box 的最后一个子元素,横向跟着那层 12px 内边距与卡片对齐;
|
|
882
|
+
卡片自带 12px 下边距(本文件块「查看角标」那段),这里不再叠上边距。
|
|
883
|
+
无对手规则,(0,3,0) 一条就够。 */
|
|
884
|
+
.xform-h5 .h5-list-box .h5-list-more {
|
|
885
|
+
display: flex;
|
|
886
|
+
align-items: center;
|
|
887
|
+
justify-content: center;
|
|
888
|
+
height: 36px;
|
|
889
|
+
border-radius: 8px;
|
|
890
|
+
background: #fff;
|
|
891
|
+
//border: solid 1px #eee;
|
|
892
|
+
color: $baseColor;
|
|
893
|
+
font-size: 13px;
|
|
894
|
+
cursor: pointer;
|
|
895
|
+
margin:-4px 0 8px;
|
|
896
|
+
.h5-list-more-count {
|
|
897
|
+
color: #999;
|
|
898
|
+
}
|
|
899
|
+
|
|
900
|
+
i {
|
|
901
|
+
margin-left: 2px;
|
|
902
|
+
font-size: 12px;
|
|
903
|
+
}
|
|
904
|
+
}
|
|
905
|
+
|
|
906
|
+
/* ============ 块 J:附件(VabUpload 列表的 H5 行式版式) ============ */
|
|
907
|
+
/* 这一块的第一版是照抄 bill_setting/h5.scss 的 74px 方格口径,实测把附件压没了、
|
|
908
|
+
已撤回;那套 DOM 里 .el-upload-list__item-thumbnail 是 item 的直接子元素,而
|
|
909
|
+
VabUpload 不是。这一版照 VabUpload/view.vue 的真实结构重写:
|
|
910
|
+
|
|
911
|
+
.upload-list 一个附件一个(模板内联 inline-block + float:left)
|
|
912
|
+
.upload-box > ul.el-upload-list--picture
|
|
913
|
+
li.el-upload-list__item
|
|
914
|
+
> div ← 唯一子元素,行的 flex 容器只能挂在它上面
|
|
915
|
+
.el-upload-list__item-thumbnail > p > .el-image
|
|
916
|
+
.el-upload-list__item-name > p 文件名 / p 大小 / p 创建时间
|
|
917
|
+
.el-upload-input showSortInput / showNameInput 时才有
|
|
918
|
+
.el-upload-list__item-status-label
|
|
919
|
+
.el-icon-close 删除(编辑态才渲染)
|
|
920
|
+
.el-icon-tagEdit 下载 + 详情
|
|
921
|
+
|
|
922
|
+
改成「一行一个附件」:左 56px 缩略图,右文件名两行截断 + 次要信息,行右端是常驻的
|
|
923
|
+
操作图标。PC 那套是 102px 卡片流式排,一个附件就吃掉 H5 小半屏,还大片留白。
|
|
924
|
+
|
|
925
|
+
★ 操作入口必须常驻:PC 上 .show-video 靠 :hover 出现、.el-icon-tagEdit 被
|
|
926
|
+
style.scss 的 H5 段直接 display:none —— 触摸屏没有 hover,等于下载/详情在 H5
|
|
927
|
+
上根本点不到。(view.vue 里这两个还受 attachment.h5 !== 1 控制,那是历史遗留
|
|
928
|
+
开关,不是「H5 不给操作」的意思,故三个入口全放开。)
|
|
929
|
+
预览不用放开 .show-video:它只是缩略图上的 hover 遮罩,el-image 自己就绑了
|
|
930
|
+
@click="openPreview",H5 上直接点缩略图即可,放出来反而挡住图。
|
|
931
|
+
|
|
932
|
+
★ 特异度:真正难缠的对手是 style.scss:15604 起的 `#uploadImage.widgetSize-N`
|
|
933
|
+
一段(尺寸全在那里:li 的 width/height/padding-left、缩略图的 width/height 与
|
|
934
|
+
margin-left:-98px 负边距、p 与 img 的定死宽高),**带 id,(1,3,0)~(1,6,0),
|
|
935
|
+
再多的 class 也压不过**。所以本块整体嵌在 #uploadImage 下取到 (1,5,0) 起步,
|
|
936
|
+
每一条都严格高于对应对手。另外两个较弱的对手是 style.scss:13801 起的
|
|
937
|
+
.h5-detail-wrap .h5-item .h5-form-box …(0,4,0~0,5,0)和 body .el-upload-list
|
|
938
|
+
… .show-video(0,4,1),顺带一并压掉。
|
|
939
|
+
注:#uploadImage 是 VabUpload 每个实例都写死的 id(DOM 里会重复),这里只把它
|
|
940
|
+
当选择器用来抬特异度,不依赖它唯一。 */
|
|
941
|
+
/* 三条并列锚点,段数一致((1,4,0) 起步),覆盖附件字段的三种摆法:
|
|
942
|
+
h5-card-pane(.h5-item)/ h5-card(.grid-cell)/ 直挂 detail-h5。
|
|
943
|
+
这里不能换成块 C 的 .field-wrapper.h5-field 锚点:那样只有 (1,3,0),
|
|
944
|
+
压不过上面点名的 #uploadImage.widgetSize-N 那一段。 */
|
|
945
|
+
.xform-h5 .h5-detail-wrap .h5-item .h5-form-box #uploadImage,
|
|
946
|
+
.xform-h5 .h5-detail-wrap .grid-cell .h5-form-box #uploadImage,
|
|
947
|
+
.xform-h5 .h5-detail-body .field-wrapper.h5-field #uploadImage {
|
|
948
|
+
/* 行容器。模板里写死了内联 display:inline-block;float:left,只能用 !important 压 */
|
|
949
|
+
.upload-list {
|
|
950
|
+
display: block !important;
|
|
951
|
+
float: none !important;
|
|
952
|
+
width: 100%;
|
|
953
|
+
margin: 0 0 12px;
|
|
954
|
+
}
|
|
955
|
+
|
|
956
|
+
.upload-box {
|
|
957
|
+
border-top: none;
|
|
958
|
+
margin-top: 0;
|
|
959
|
+
}
|
|
960
|
+
|
|
961
|
+
.el-upload-list {
|
|
962
|
+
margin: 0;
|
|
963
|
+
}
|
|
964
|
+
|
|
965
|
+
.el-upload-list__item {
|
|
966
|
+
width: 100%;
|
|
967
|
+
height: auto;
|
|
968
|
+
margin: 0;
|
|
969
|
+
padding: 8px;
|
|
970
|
+
overflow: visible;
|
|
971
|
+
background: #fff;
|
|
972
|
+
border: solid 1px $xformH5RowBorder;
|
|
973
|
+
border-radius: 8px;
|
|
974
|
+
transition: none; // element 的 item 有 transform 过渡,行式下没意义还会闪
|
|
975
|
+
|
|
976
|
+
/* 行本体。li 下只有这一个 div,所有子块都在它里面 */
|
|
977
|
+
> div {
|
|
978
|
+
display: flex;
|
|
979
|
+
flex-wrap: wrap; // showSortInput/showNameInput 时那两个输入框整行另起
|
|
980
|
+
align-items: center;
|
|
981
|
+
width: 100%;
|
|
982
|
+
}
|
|
983
|
+
|
|
984
|
+
.el-upload-list__item-thumbnail {
|
|
985
|
+
flex: none;
|
|
986
|
+
width: 56px;
|
|
987
|
+
height: 56px;
|
|
988
|
+
margin: 0 10px 0 0;
|
|
989
|
+
padding: 0;
|
|
990
|
+
border-radius: 8px;
|
|
991
|
+
overflow: hidden;
|
|
992
|
+
background: #f7f8fa;
|
|
993
|
+
|
|
994
|
+
/* 这三层的宽高在 #uploadImage.widgetSize-N 里都被写死成 88/98px,逐层压掉 */
|
|
995
|
+
p {
|
|
996
|
+
width: 100%;
|
|
997
|
+
height: 100%;
|
|
998
|
+
padding: 0;
|
|
999
|
+
margin: 0;
|
|
1000
|
+
}
|
|
1001
|
+
|
|
1002
|
+
.el-image {
|
|
1003
|
+
width: 100%;
|
|
1004
|
+
height: 100%;
|
|
1005
|
+
img{width:56px;height:56px}
|
|
1006
|
+
}
|
|
1007
|
+
|
|
1008
|
+
img {
|
|
1009
|
+
max-width: 100%;
|
|
1010
|
+
max-height: 100%;
|
|
1011
|
+
}
|
|
1012
|
+
|
|
1013
|
+
/* hover 遮罩:H5 用不上,直接点缩略图就是预览 */
|
|
1014
|
+
.show-video {
|
|
1015
|
+
display: none;
|
|
1016
|
+
}
|
|
1017
|
+
}
|
|
1018
|
+
|
|
1019
|
+
.el-upload-list__item-name {
|
|
1020
|
+
flex: 1;
|
|
1021
|
+
min-width: 0; // 不写这行,长文件名会把行撑破而不是省略
|
|
1022
|
+
width: auto;
|
|
1023
|
+
height: auto;
|
|
1024
|
+
margin: 0;
|
|
1025
|
+
padding: 0;
|
|
1026
|
+
line-height: 1.4;
|
|
1027
|
+
|
|
1028
|
+
/* 文件名:两行截断 */
|
|
1029
|
+
> .el-tooltip > p,
|
|
1030
|
+
> p:first-child {
|
|
1031
|
+
margin: 0;
|
|
1032
|
+
font-size: 13px;
|
|
1033
|
+
color: #212121;
|
|
1034
|
+
display: -webkit-box;
|
|
1035
|
+
-webkit-line-clamp: 2;
|
|
1036
|
+
-webkit-box-orient: vertical;
|
|
1037
|
+
overflow: hidden;
|
|
1038
|
+
word-break: break-all;
|
|
1039
|
+
}
|
|
1040
|
+
|
|
1041
|
+
/* 大小 / 创建时间等次要信息 */
|
|
1042
|
+
> p + p,
|
|
1043
|
+
> .el-tooltip + p {
|
|
1044
|
+
margin: 2px 0 0;
|
|
1045
|
+
font-size: 11px;
|
|
1046
|
+
color: rgba(128, 128, 128, 0.8);
|
|
1047
|
+
}
|
|
1048
|
+
}
|
|
1049
|
+
|
|
1050
|
+
/* 序号 / 名称输入:整行另起,不跟缩略图挤一行 */
|
|
1051
|
+
.el-upload-input {
|
|
1052
|
+
width: 100%;
|
|
1053
|
+
margin: 8px 0 0;
|
|
1054
|
+
}
|
|
1055
|
+
|
|
1056
|
+
.el-upload-list__item-status-label {
|
|
1057
|
+
display: none;
|
|
1058
|
+
}
|
|
1059
|
+
|
|
1060
|
+
/* 行右端常驻操作:只留「下载」。点击区按 44px 给足 */
|
|
1061
|
+
.el-icon-tagEdit {
|
|
1062
|
+
display: flex;
|
|
1063
|
+
flex: none;
|
|
1064
|
+
position: static;
|
|
1065
|
+
align-items: center;
|
|
1066
|
+
margin-left: 4px;
|
|
1067
|
+
color: $baseColor;
|
|
1068
|
+
|
|
1069
|
+
i {
|
|
1070
|
+
margin: 0;
|
|
1071
|
+
padding: 0 8px;
|
|
1072
|
+
font-size: 20px;
|
|
1073
|
+
line-height: 44px;
|
|
1074
|
+
}
|
|
1075
|
+
|
|
1076
|
+
/* 「文件详情」(属性弹框)H5 上不出:它是 PC 的管理向功能,
|
|
1077
|
+
弹的是一整张属性表,小屏上既挤又用不上。 */
|
|
1078
|
+
.icon-shuxing {
|
|
1079
|
+
display: none;
|
|
1080
|
+
}
|
|
1081
|
+
}
|
|
1082
|
+
|
|
1083
|
+
/* 删除(编辑态才渲染):并进右端图标组,不再做成飘在角上的红点 */
|
|
1084
|
+
.el-icon-close {
|
|
1085
|
+
display: flex;
|
|
1086
|
+
flex: none;
|
|
1087
|
+
position: static;
|
|
1088
|
+
align-items: center;
|
|
1089
|
+
width: auto;
|
|
1090
|
+
height: auto;
|
|
1091
|
+
top: auto;
|
|
1092
|
+
right: auto;
|
|
1093
|
+
background: none;
|
|
1094
|
+
border-radius: 0;
|
|
1095
|
+
color: $dred;
|
|
1096
|
+
opacity: 1;
|
|
1097
|
+
|
|
1098
|
+
i {
|
|
1099
|
+
padding: 0 8px;
|
|
1100
|
+
font-size: 18px;
|
|
1101
|
+
line-height: 44px;
|
|
1102
|
+
}
|
|
1103
|
+
}
|
|
1104
|
+
}
|
|
1105
|
+
|
|
1106
|
+
/* 上传入口(编辑态):PC 是 100×100 的虚线方块,跟行式列表放一起很突兀。
|
|
1107
|
+
改成整行一条虚线「+」条,与上面每条附件同宽同圆角。
|
|
1108
|
+
.el-upload 的 float/inline-block 是模板内联样式,只能 !important 压。 */
|
|
1109
|
+
.el-upload.el-upload--picture {
|
|
1110
|
+
display: block !important;
|
|
1111
|
+
float: none !important;
|
|
1112
|
+
width: 100%;
|
|
1113
|
+
|
|
1114
|
+
.avatar-uploader {
|
|
1115
|
+
width: 100%;
|
|
1116
|
+
height: 44px;
|
|
1117
|
+
line-height: 44px;
|
|
1118
|
+
margin: 0;
|
|
1119
|
+
padding: 0;
|
|
1120
|
+
background: none;
|
|
1121
|
+
border: dashed 1px #dfdfdf;
|
|
1122
|
+
border-radius: 10px;
|
|
1123
|
+
color: $baseColor;
|
|
1124
|
+
|
|
1125
|
+
.avatar-uploader-icon {
|
|
1126
|
+
font-size: 18px;
|
|
1127
|
+
line-height: 44px;
|
|
1128
|
+
}
|
|
1129
|
+
}
|
|
1130
|
+
}
|
|
1131
|
+
}
|
|
1132
|
+
|
|
1133
|
+
/* ============ 块 K:H5 按钮基线 —— 不出图标 ============ */
|
|
1134
|
+
/* H5 的按钮只出文字,不带 el-icon-*。底部动作栏本来就是这样(detail-h5-item.vue
|
|
1135
|
+
构造按钮时明确不取注册表的 iconClass/elIcon),但弹框里的按钮是直接沿用 PC 模板
|
|
1136
|
+
的,`icon="el-icon-close"` / `icon="el-icon-check"` 都跟着进来了,同一屏里两种样子。
|
|
1137
|
+
|
|
1138
|
+
用 CSS 抹而不是逐个删模板上的 icon 属性:这些模板(选用户 views/mobile/user/user、
|
|
1139
|
+
加签 addTaskUserdialog、减签、催办、修改候选人…)同时被手写移动页用着,
|
|
1140
|
+
改模板会波及包外;收在 .xform-h5 下则只影响 xform 的 H5 版式。
|
|
1141
|
+
|
|
1142
|
+
只作用于 el-button 的直接子 i(element 把 icon 渲染成按钮的第一个子元素)。
|
|
1143
|
+
底栏「更多」下拉的触发器是裸 <i class="h5-more-icon">、不在 el-button 里,不受影响。 */
|
|
1144
|
+
.xform-h5 {
|
|
1145
|
+
.h5-detail-wrap .h5-fixed-bottom-btns .el-button > i,
|
|
1146
|
+
.el-dialog.h5view-dialog > .el-dialog__footer .el-button > i {
|
|
1147
|
+
display: none;
|
|
1148
|
+
}
|
|
1149
|
+
}
|
|
1150
|
+
|
|
1151
|
+
/* 同上,但这两条不能收在 .xform-h5 里:.h5-pop-dialog 那 5 个弹层、
|
|
1152
|
+
.h5-pop-tips 那 5 个确认框都已挂到 document.body 下。
|
|
1153
|
+
.h5-pop-dialog 里再弹的高级筛选抽屉(.pop-screen-box)被后代选择器一并覆盖,
|
|
1154
|
+
不必单列 —— 也正好不会误伤手写移动页里那些独立使用的 .pop-screen-box。 */
|
|
1155
|
+
.h5-pop-dialog .el-button > i,
|
|
1156
|
+
.pop-tipsBox.h5-pop-tips .el-button > i {
|
|
1157
|
+
display: none;
|
|
1158
|
+
}
|
|
1159
|
+
|
|
1160
|
+
/* ============ 块 L:移动版流程(wf)面板 ============ */
|
|
1161
|
+
/* 来源:resources/css/h5.scss —— 那份不随包发布、xform 引不到,故把
|
|
1162
|
+
components/mobile/wf/content.vue 实际用到的类搬进包内。
|
|
1163
|
+
原规则嵌在 .h5-box .form-box .c .c-item .cont 下(xform 没有 .h5-box 祖先,
|
|
1164
|
+
本来就命中不了),这里重新挂到 .xform-h5 下,不存在与原规则的覆盖竞争。
|
|
1165
|
+
卡片外壳 .c-item / .tit 已并进块 B,此处只补 wf 专属部分。 */
|
|
1166
|
+
.xform-h5 {
|
|
1167
|
+
/* h5CardPane 的折叠箭头 */
|
|
1168
|
+
.c-item > .tit > .arrow {
|
|
1169
|
+
position: absolute;
|
|
1170
|
+
right: 12px;
|
|
1171
|
+
top: 0;
|
|
1172
|
+
line-height: 45px;
|
|
1173
|
+
font-size: 16px;
|
|
1174
|
+
}
|
|
1175
|
+
|
|
1176
|
+
/* ---- 流程信息区 ---- */
|
|
1177
|
+
.flowPath-box {
|
|
1178
|
+
overflow: hidden;
|
|
1179
|
+
padding: 0 12px;
|
|
1180
|
+
|
|
1181
|
+
> .t,
|
|
1182
|
+
.m2 .t {
|
|
1183
|
+
color: #666;
|
|
1184
|
+
padding:8px;
|
|
1185
|
+
|
|
1186
|
+
&:before {
|
|
1187
|
+
content: "";
|
|
1188
|
+
width: 5px;
|
|
1189
|
+
height: 5px;
|
|
1190
|
+
border-radius: 50%;
|
|
1191
|
+
background: $baseColor;
|
|
1192
|
+
margin-right: 3px;
|
|
1193
|
+
vertical-align: middle;
|
|
1194
|
+
display: inline-block;
|
|
1195
|
+
}
|
|
1196
|
+
|
|
1197
|
+
span {
|
|
1198
|
+
vertical-align: middle;
|
|
1199
|
+
}
|
|
1200
|
+
}
|
|
1201
|
+
|
|
1202
|
+
.c {
|
|
1203
|
+
padding: 0 5px;
|
|
1204
|
+
margin-top: 5px;
|
|
1205
|
+
height: auto;
|
|
1206
|
+
margin-bottom: 12px;
|
|
1207
|
+
|
|
1208
|
+
.name {
|
|
1209
|
+
font-weight: 600;
|
|
1210
|
+
|
|
1211
|
+
.el-tag {
|
|
1212
|
+
line-height: 19px;
|
|
1213
|
+
font-weight: 400;
|
|
1214
|
+
display: inline-block;
|
|
1215
|
+
margin-top: 4px;
|
|
1216
|
+
}
|
|
1217
|
+
}
|
|
1218
|
+
|
|
1219
|
+
.btn {
|
|
1220
|
+
color: $baseColor;
|
|
1221
|
+
background: transparentize($baseColor, 0.91);
|
|
1222
|
+
padding: 7px 10px;
|
|
1223
|
+
font-size: 13px;
|
|
1224
|
+
|
|
1225
|
+
i {
|
|
1226
|
+
font-size: 12px;
|
|
1227
|
+
margin-right: 3px;
|
|
1228
|
+
}
|
|
1229
|
+
}
|
|
1230
|
+
}
|
|
1231
|
+
|
|
1232
|
+
.m2 {
|
|
1233
|
+
min-width: 50%;
|
|
1234
|
+
float: left;
|
|
1235
|
+
margin-bottom: 12px;
|
|
1236
|
+
}
|
|
1237
|
+
}
|
|
1238
|
+
|
|
1239
|
+
/* ---- 审批动作按钮区 ---- */
|
|
1240
|
+
.flowPath-btns {
|
|
1241
|
+
padding: 12px 0;
|
|
1242
|
+
margin: 0 0 0 -10px;
|
|
1243
|
+
|
|
1244
|
+
.btn {
|
|
1245
|
+
height: 34px;
|
|
1246
|
+
border-radius: 20px;
|
|
1247
|
+
padding: 0 0 0 12px;
|
|
1248
|
+
font-size: 13px;
|
|
1249
|
+
width: calc(33% - 24px);
|
|
1250
|
+
margin-left: 24px;
|
|
1251
|
+
margin-bottom: 10px;
|
|
1252
|
+
background: none;
|
|
1253
|
+
position: relative;
|
|
1254
|
+
|
|
1255
|
+
i {
|
|
1256
|
+
width: 22px;
|
|
1257
|
+
height: 23px;
|
|
1258
|
+
background: #e9e9e9;
|
|
1259
|
+
margin: 0 17px 0 -7px;
|
|
1260
|
+
vertical-align: middle;
|
|
1261
|
+
border-radius: 15px;
|
|
1262
|
+
display: inline-block;
|
|
1263
|
+
line-height: 22px;
|
|
1264
|
+
text-align: center;
|
|
1265
|
+
color: #fff;
|
|
1266
|
+
position: absolute;
|
|
1267
|
+
left: 0;
|
|
1268
|
+
top: 4px;
|
|
1269
|
+
font-size: 14px;
|
|
1270
|
+
|
|
1271
|
+
&.icon-tongguo {
|
|
1272
|
+
font-size: 16px;
|
|
1273
|
+
line-height: 24px;
|
|
1274
|
+
}
|
|
1275
|
+
}
|
|
1276
|
+
|
|
1277
|
+
&.el-button--success {
|
|
1278
|
+
color: $green;
|
|
1279
|
+
> i {
|
|
1280
|
+
background: $green;
|
|
1281
|
+
}
|
|
1282
|
+
}
|
|
1283
|
+
|
|
1284
|
+
&.el-button--primary > i {
|
|
1285
|
+
background: $baseColor;
|
|
1286
|
+
}
|
|
1287
|
+
|
|
1288
|
+
&.el-button--warning {
|
|
1289
|
+
color: $yellow;
|
|
1290
|
+
> i {
|
|
1291
|
+
background: $yellow;
|
|
1292
|
+
}
|
|
1293
|
+
}
|
|
1294
|
+
|
|
1295
|
+
&.el-button--danger {
|
|
1296
|
+
color: $dred;
|
|
1297
|
+
> i {
|
|
1298
|
+
background: $dred;
|
|
1299
|
+
}
|
|
1300
|
+
}
|
|
1301
|
+
}
|
|
1302
|
+
}
|
|
1303
|
+
|
|
1304
|
+
|
|
1305
|
+
|
|
1306
|
+
}
|
|
1307
|
+
|
|
1308
|
+
/* ---- 确认/表单提示框(通过、驳回、中断、转办、加签)---- */
|
|
1309
|
+
/* ★ 顶层选择器,不能收回 .xform-h5 里:这 5 个已改走 v-append-to-body,
|
|
1310
|
+
节点在 document.body 下,带 .xform-h5 前缀的规则一条都命中不了。
|
|
1311
|
+
与上面的 .h5-pop-dialog 同一个道理。
|
|
1312
|
+
|
|
1313
|
+
★ 但也不能只写 .pop-tipsBox:confirmDialog / baseAlert / errorMsg 的移动端分支
|
|
1314
|
+
用的是同一个类名,而且它们本来就挂在 body 上。只写 .pop-tipsBox(0,1,0)会和
|
|
1315
|
+
各应用 resources/css/h5.scss 里那条同名顶层规则拼加载顺序,把那三个的样子也一起
|
|
1316
|
+
改掉。所以多挂一个 .h5-pop-tips 作锚点,选择器权重(0,2,0)与改造前的
|
|
1317
|
+
`.xform-h5 .pop-tipsBox` 完全相同,命中范围也仍然只有这 5 个。
|
|
1318
|
+
|
|
1319
|
+
注意:.icon 沿用 resources/images 下的图标,`~@/` 在消费应用里解析到它自己的
|
|
1320
|
+
src/resources/images —— 该目录同样不在 package.json files 内,属隐式依赖。
|
|
1321
|
+
消费应用现有的 h5.scss 已引用同一批图,故风险可控;若要彻底解耦可换字体图标。 */
|
|
1322
|
+
.pop-tipsBox.h5-pop-tips {
|
|
1323
|
+
position: relative;
|
|
1324
|
+
&:before {
|
|
1325
|
+
content: "";
|
|
1326
|
+
position: fixed;
|
|
1327
|
+
top: 0;
|
|
1328
|
+
right: 0;
|
|
1329
|
+
bottom: 0;
|
|
1330
|
+
left: 0;
|
|
1331
|
+
background: rgba(0, 0, 0, 0.4);
|
|
1332
|
+
z-index: 998;
|
|
1333
|
+
}
|
|
1334
|
+
|
|
1335
|
+
> div {
|
|
1336
|
+
position: fixed;
|
|
1337
|
+
top: 19%;
|
|
1338
|
+
left: 32px;
|
|
1339
|
+
right: 32px;
|
|
1340
|
+
box-shadow: 0 0 14px rgba(0, 0, 0, 0.16);
|
|
1341
|
+
border-radius: 18px;
|
|
1342
|
+
padding: 68px 16px 18px;
|
|
1343
|
+
text-align: center;
|
|
1344
|
+
z-index: 999;
|
|
1345
|
+
background-color: #fff;
|
|
1346
|
+
background-size: 100% auto;
|
|
1347
|
+
border: solid 2px #fff;
|
|
1348
|
+
|
|
1349
|
+
.icon {
|
|
1350
|
+
background: url(~@/resources/images/icon-tips.png) no-repeat center;
|
|
1351
|
+
background-size: cover;
|
|
1352
|
+
position: absolute;
|
|
1353
|
+
top: -19px;
|
|
1354
|
+
left: 50%;
|
|
1355
|
+
margin-left: -34px;
|
|
1356
|
+
width: 68px;
|
|
1357
|
+
height: 68px;
|
|
1358
|
+
border-radius: 50%;
|
|
1359
|
+
border: solid 2px #fff;
|
|
1360
|
+
}
|
|
1361
|
+
|
|
1362
|
+
.cont {
|
|
1363
|
+
padding: 0 0 18px;
|
|
1364
|
+
|
|
1365
|
+
.name {
|
|
1366
|
+
font-weight: 600;
|
|
1367
|
+
font-size: 18px;
|
|
1368
|
+
margin-bottom: 24px;
|
|
1369
|
+
}
|
|
1370
|
+
|
|
1371
|
+
/* max-height + overflow:auto 是给「自定义确认文案」这类可能很长的内容留的
|
|
1372
|
+
(提醒内容、脚本里配的提示都走这里)。但确认框里多数只有一行短句,
|
|
1373
|
+
真机 WebView 又是经典滚动条(不像桌面那样会自动淡出),于是「您确定要
|
|
1374
|
+
中断流程吗?」这种一行字旁边也挂着一条灰色滚动条。
|
|
1375
|
+
保留可滚动(长文案照样能滑),只把滚动条本身藏掉 —— 移动端本来就该是
|
|
1376
|
+
无痕滚动。 */
|
|
1377
|
+
.txt,
|
|
1378
|
+
.txt2 {
|
|
1379
|
+
overflow: auto;
|
|
1380
|
+
word-break: break-word;
|
|
1381
|
+
scrollbar-width: none; // Firefox
|
|
1382
|
+
-ms-overflow-style: none; // 旧 Edge/IE
|
|
1383
|
+
text-align:left;
|
|
1384
|
+
font-size:13px;
|
|
1385
|
+
&::-webkit-scrollbar {
|
|
1386
|
+
display: none;
|
|
1387
|
+
}
|
|
1388
|
+
}
|
|
1389
|
+
|
|
1390
|
+
.txt {
|
|
1391
|
+
max-height: 100px;
|
|
1392
|
+
}
|
|
1393
|
+
|
|
1394
|
+
.txt2 {
|
|
1395
|
+
max-height: 200px;
|
|
1396
|
+
}
|
|
1397
|
+
|
|
1398
|
+
.form-box {
|
|
1399
|
+
border: solid 1px #dcdcdc;
|
|
1400
|
+
padding: 0 12px 10px;
|
|
1401
|
+
border-radius: 10px;
|
|
1402
|
+
margin-top: -8px;
|
|
1403
|
+
text-align:left;
|
|
1404
|
+
.el-form-item .el-form-item__label{
|
|
1405
|
+
padding-bottom:0;
|
|
1406
|
+
}
|
|
1407
|
+
.line {
|
|
1408
|
+
border: solid 1px #e8e8e8;
|
|
1409
|
+
}
|
|
1410
|
+
.el-input,.el-select{width:100% !important}
|
|
1411
|
+
}
|
|
1412
|
+
}
|
|
1413
|
+
|
|
1414
|
+
.btns {
|
|
1415
|
+
display: flex;
|
|
1416
|
+
|
|
1417
|
+
.btn {
|
|
1418
|
+
flex: 1;
|
|
1419
|
+
height: 40px;
|
|
1420
|
+
border-radius: 12px;
|
|
1421
|
+
|
|
1422
|
+
&.el-button--primary.is-plain {
|
|
1423
|
+
border-color: $baseColor;
|
|
1424
|
+
}
|
|
1425
|
+
}
|
|
1426
|
+
}
|
|
1427
|
+
}
|
|
1428
|
+
|
|
1429
|
+
&.error > div .icon {
|
|
1430
|
+
background-image: url(~@/resources/images/icon-error.png);
|
|
1431
|
+
border-color: #fff;
|
|
1432
|
+
}
|
|
1433
|
+
}
|
|
1434
|
+
|
|
1435
|
+
/* ============ 页面底色 ============ */
|
|
1436
|
+
.xform-h5 .h5-detail-wrap {
|
|
1437
|
+
background: $xformH5PageBg;
|
|
1438
|
+
}
|
|
1439
|
+
|
|
1440
|
+
/* ---- 全屏弹层(.h5-pop-dialog)---- */
|
|
1441
|
+
/* 用这个根类的一共 5 个,都在 components/mobile/wf/ 下:选用户 selectUserDialog、
|
|
1442
|
+
加签 addTaskUserdialog、减签 deleteTaskUserDialog、催办 urgingDialog、
|
|
1443
|
+
修改候选人 setCandidateDialog。它们共用同一批类名,所以一次搬齐。
|
|
1444
|
+
(流程图预览、任务情况预览是 content.vue 模板里内联写的 el-dialog,走的是
|
|
1445
|
+
.h5view-dialog,不在这一段。同目录的 wfModifyDialog 仍是 .pop-box 就地渲染——
|
|
1446
|
+
H5 不需要「修改单据」,那个只从手写移动页进,样式也走各应用自己的 h5.scss。)
|
|
1447
|
+
|
|
1448
|
+
★ 这一段必须是顶层选择器,不能收进 .xform-h5 里。这 5 个已经改成
|
|
1449
|
+
el-dialog + append-to-body,节点挂在 document.body 下、不在 .xform-h5 子树里,
|
|
1450
|
+
写成 `.xform-h5 .pop-box` 一条都命中不了 —— 与它们最初挂在从不存在的 `.h5-box`
|
|
1451
|
+
下、表现为「列表退化成裸文字」是同一类事故。同理见下方 .h5view-dialog。
|
|
1452
|
+
|
|
1453
|
+
骨架高度不抄原文的 calc(100vh - 102px / 138px / 151px) 那套(值随有没有搜索行
|
|
1454
|
+
而变,脆),一律 flex + min-height:0,与块 A、块 G 同口径。content.vue 那两处
|
|
1455
|
+
.flex 上的内联 height:calc(100vh - 38px) 不用管:flex-basis:0% 会接管主轴尺寸。 */
|
|
1456
|
+
.el-dialog.h5-pop-dialog {
|
|
1457
|
+
/* 外层 .el-dialog__wrapper 已经是铺满视口的 fixed,这里用 absolute 贴着它定位,
|
|
1458
|
+
几何与改造前的 `position:fixed; top:38px; bottom:55px` 完全一致:
|
|
1459
|
+
顶部让出 H5 页头、底部让出审批动作栏。
|
|
1460
|
+
z-index 不再手写 —— 由 element 的 PopupManager 给 wrapper 递增分配,
|
|
1461
|
+
改造前 99 / 内联 zIndex 两套值互相打架的问题一并消掉。 */
|
|
1462
|
+
position: absolute;
|
|
1463
|
+
top: 38px;
|
|
1464
|
+
right: 0;
|
|
1465
|
+
bottom: 55px;
|
|
1466
|
+
left: 0;
|
|
1467
|
+
width: 100% !important;
|
|
1468
|
+
margin: 0 !important;
|
|
1469
|
+
background: #f6f6f6;
|
|
1470
|
+
border-radius: 0;
|
|
1471
|
+
box-shadow: none;
|
|
1472
|
+
display: flex;
|
|
1473
|
+
flex-direction: column;
|
|
1474
|
+
|
|
1475
|
+
/* 标题和关闭按钮都在自己的 .header-box 里,el-dialog 自带的表头整条不要 */
|
|
1476
|
+
> .el-dialog__header {
|
|
1477
|
+
display: none;
|
|
1478
|
+
}
|
|
1479
|
+
|
|
1480
|
+
/* body 顶掉 element 的 30px 20px 内边距,只当骨架的承载层 */
|
|
1481
|
+
> .el-dialog__body {
|
|
1482
|
+
flex: 1;
|
|
1483
|
+
min-height: 0;
|
|
1484
|
+
padding: 0;
|
|
1485
|
+
color: inherit;
|
|
1486
|
+
font-size: inherit;
|
|
1487
|
+
}
|
|
1488
|
+
|
|
1489
|
+
/* 骨架:标题栏 / 搜索行 / 底部按钮条 flex:none,中间那段独占剩余高度并内部滚动 */
|
|
1490
|
+
> .el-dialog__body > div {
|
|
1491
|
+
display: flex;
|
|
1492
|
+
flex-direction: column;
|
|
1493
|
+
height: 100%;
|
|
1494
|
+
}
|
|
1495
|
+
|
|
1496
|
+
.header-box {
|
|
1497
|
+
flex: none;
|
|
1498
|
+
position: relative;
|
|
1499
|
+
background-color: #fff;
|
|
1500
|
+
text-align: center;
|
|
1501
|
+
height: $xformH5HeaderHeight;
|
|
1502
|
+
line-height: $xformH5HeaderHeight;
|
|
1503
|
+
font-size: 16px;
|
|
1504
|
+
color: #212121;
|
|
1505
|
+
border-bottom: solid 1px #f1f6fc;
|
|
1506
|
+
|
|
1507
|
+
.back {
|
|
1508
|
+
position: absolute;
|
|
1509
|
+
right: 14px;
|
|
1510
|
+
top: 50%;
|
|
1511
|
+
margin-top: -10px;
|
|
1512
|
+
line-height: 20px;
|
|
1513
|
+
font-size: 20px;
|
|
1514
|
+
}
|
|
1515
|
+
|
|
1516
|
+
/* 「修改单据 — 节点:xx」这类副标题 */
|
|
1517
|
+
> span {
|
|
1518
|
+
margin: 0 8px;
|
|
1519
|
+
}
|
|
1520
|
+
/* 搜索行(选用户 / 加签):输入框 + 右侧「高级筛选」 */
|
|
1521
|
+
.search-H5box {
|
|
1522
|
+
flex: none;
|
|
1523
|
+
position: relative;
|
|
1524
|
+
display: flex;
|
|
1525
|
+
padding: 8px 16px 0;
|
|
1526
|
+
|
|
1527
|
+
.txt {
|
|
1528
|
+
flex: 1;
|
|
1529
|
+
position: relative;
|
|
1530
|
+
height: 38px;
|
|
1531
|
+
background: #fff;
|
|
1532
|
+
border: solid 1px #e4e4e4;
|
|
1533
|
+
border-radius: 38px 0 0 38px;
|
|
1534
|
+
|
|
1535
|
+
.el-input {
|
|
1536
|
+
width: 100% !important;
|
|
1537
|
+
}
|
|
1538
|
+
|
|
1539
|
+
.el-input__inner {
|
|
1540
|
+
height: 38px !important;
|
|
1541
|
+
width: 100%;
|
|
1542
|
+
border: none;
|
|
1543
|
+
background: none;
|
|
1544
|
+
line-height: 38px;
|
|
1545
|
+
padding-left: 39px;
|
|
1546
|
+
font-size: 13px;
|
|
1547
|
+
}
|
|
1548
|
+
|
|
1549
|
+
/* 放大镜挪到左侧(element 默认在右) */
|
|
1550
|
+
.el-input__suffix {
|
|
1551
|
+
position: absolute;
|
|
1552
|
+
left: 12px;
|
|
1553
|
+
right: inherit;
|
|
1554
|
+
top: 7px;
|
|
1555
|
+
width: 20px;
|
|
1556
|
+
transform: inherit !important;
|
|
1557
|
+
}
|
|
1558
|
+
|
|
1559
|
+
.el-input-group__append {
|
|
1560
|
+
border: none;
|
|
1561
|
+
background: none;
|
|
1562
|
+
|
|
1563
|
+
.el-button {
|
|
1564
|
+
border: none;
|
|
1565
|
+
background: $baseColor;
|
|
1566
|
+
color: #fff;
|
|
1567
|
+
width: 53px;
|
|
1568
|
+
height: 30px;
|
|
1569
|
+
padding: 0;
|
|
1570
|
+
position: absolute;
|
|
1571
|
+
right: 4px;
|
|
1572
|
+
top: 4px;
|
|
1573
|
+
/* element 给 .el-input-group__append .el-button 定了 margin:-10px -20px,
|
|
1574
|
+
绝对定位后这对负边距会把按钮整体往右上顶出去(实测右溢 16px、上溢
|
|
1575
|
+
5px,正好压在「高级筛选」上)。原文是用 right:26px/top:14px 反向补
|
|
1576
|
+
偿的,这里直接清零,right/top 才是所见即所得。 */
|
|
1577
|
+
margin: 0;
|
|
1578
|
+
border-radius: 30px;
|
|
1579
|
+
outline: none;
|
|
1580
|
+
font-size: 13px;
|
|
1581
|
+
}
|
|
1582
|
+
}
|
|
1583
|
+
}
|
|
1584
|
+
|
|
1585
|
+
.icon-screen {
|
|
1586
|
+
flex: none;
|
|
1587
|
+
height: 38px;
|
|
1588
|
+
line-height: 38px;
|
|
1589
|
+
padding: 0 10px;
|
|
1590
|
+
font-size: 13px;
|
|
1591
|
+
color: $baseColor;
|
|
1592
|
+
background: transparentize($baseColor, 0.88);
|
|
1593
|
+
border: solid 1px #e4e4e4;
|
|
1594
|
+
border-left: none;
|
|
1595
|
+
border-radius: 0 10px 10px 0;
|
|
1596
|
+
|
|
1597
|
+
i {
|
|
1598
|
+
margin-right: 5px;
|
|
1599
|
+
font-size: 14px;
|
|
1600
|
+
}
|
|
1601
|
+
}
|
|
1602
|
+
}
|
|
1603
|
+
|
|
1604
|
+
/* 修改单据:表单直接挂在骨架下,不套 .flex */
|
|
1605
|
+
> div > .form-box {
|
|
1606
|
+
flex: 1;
|
|
1607
|
+
min-height: 0;
|
|
1608
|
+
overflow-y: auto;
|
|
1609
|
+
}
|
|
1610
|
+
|
|
1611
|
+
}
|
|
1612
|
+
|
|
1613
|
+
/* 按钮口径与块 H 的底部动作栏、块 G 的明细详情弹框页脚保持一致(40px 高胶囊)。
|
|
1614
|
+
原文搬过来时是 border-radius:14px —— 那是手写移动页 resources/css/h5.scss 的
|
|
1615
|
+
口径,跟包内基线不是一套,同一屏里会出现两种按钮,故改齐。
|
|
1616
|
+
左右 margin 保留:选用户/加签这些是两个按钮并排,需要中间那道缝。 */
|
|
1617
|
+
.fixed-bottom-btns {
|
|
1618
|
+
flex: none;
|
|
1619
|
+
background: #f6f6f6;
|
|
1620
|
+
display: flex;
|
|
1621
|
+
padding: 4px 8px;
|
|
1622
|
+
|
|
1623
|
+
.btn {
|
|
1624
|
+
flex: 1;
|
|
1625
|
+
margin: 4px 6px;
|
|
1626
|
+
height: 40px;
|
|
1627
|
+
border-radius: 30px;
|
|
1628
|
+
padding: 0;
|
|
1629
|
+
font-size: 13px;
|
|
1630
|
+
|
|
1631
|
+
i {
|
|
1632
|
+
margin-right: 3px;
|
|
1633
|
+
}
|
|
1634
|
+
}
|
|
1635
|
+
}
|
|
1636
|
+
|
|
1637
|
+
|
|
1638
|
+
|
|
1639
|
+
}
|
|
1640
|
+
|
|
1641
|
+
|
|
1642
|
+
/* ---- 高级筛选抽屉(h5SearchDialog,从 .pop-box 里再弹一层)---- */
|
|
1643
|
+
.pop-screen-box {
|
|
1644
|
+
position: fixed;
|
|
1645
|
+
top: 0;
|
|
1646
|
+
right: 0;
|
|
1647
|
+
bottom: 0;
|
|
1648
|
+
left: 0;
|
|
1649
|
+
z-index: 99;
|
|
1650
|
+
|
|
1651
|
+
&:before {
|
|
1652
|
+
content: "";
|
|
1653
|
+
position: absolute;
|
|
1654
|
+
left: 0;
|
|
1655
|
+
right: 0;
|
|
1656
|
+
top: 0;
|
|
1657
|
+
bottom: 0;
|
|
1658
|
+
background: rgba(0, 0, 0, 0.3);
|
|
1659
|
+
}
|
|
1660
|
+
|
|
1661
|
+
> div {
|
|
1662
|
+
display: flex;
|
|
1663
|
+
flex-direction: column;
|
|
1664
|
+
position: absolute;
|
|
1665
|
+
top: 0;
|
|
1666
|
+
right: 0;
|
|
1667
|
+
bottom: 0;
|
|
1668
|
+
width: 80%;
|
|
1669
|
+
background: #fff;
|
|
1670
|
+
|
|
1671
|
+
.header-box {
|
|
1672
|
+
flex: none;
|
|
1673
|
+
position: relative;
|
|
1674
|
+
text-align: center;
|
|
1675
|
+
height: $xformH5HeaderHeight;
|
|
1676
|
+
line-height: $xformH5HeaderHeight;
|
|
1677
|
+
font-size: 16px;
|
|
1678
|
+
color: #212121;
|
|
1679
|
+
border-bottom: solid 1px #eee;
|
|
1680
|
+
|
|
1681
|
+
.back {
|
|
1682
|
+
position: absolute;
|
|
1683
|
+
right: 14px;
|
|
1684
|
+
top: 50%;
|
|
1685
|
+
margin-top: -10px;
|
|
1686
|
+
line-height: 20px;
|
|
1687
|
+
font-size: 20px;
|
|
1688
|
+
}
|
|
1689
|
+
}
|
|
1690
|
+
|
|
1691
|
+
.p-cont {
|
|
1692
|
+
flex: 1;
|
|
1693
|
+
min-height: 0;
|
|
1694
|
+
overflow-y: auto;
|
|
1695
|
+
padding: 10px 16px 0;
|
|
1696
|
+
|
|
1697
|
+
.txt {
|
|
1698
|
+
width: 100%;
|
|
1699
|
+
}
|
|
1700
|
+
|
|
1701
|
+
.el-form .el-form-item {
|
|
1702
|
+
margin-bottom: 4px;
|
|
1703
|
+
|
|
1704
|
+
.el-form-item__label {
|
|
1705
|
+
padding: 0;
|
|
1706
|
+
margin: 0;
|
|
1707
|
+
font-size: 13px;
|
|
1708
|
+
}
|
|
1709
|
+
|
|
1710
|
+
.el-input {
|
|
1711
|
+
width: 100% !important;
|
|
1712
|
+
height: 38px;
|
|
1713
|
+
border-radius: 4px;
|
|
1714
|
+
}
|
|
1715
|
+
|
|
1716
|
+
.el-input__inner {
|
|
1717
|
+
font-size: 13px;
|
|
1718
|
+
}
|
|
1719
|
+
}
|
|
1720
|
+
}
|
|
1721
|
+
|
|
1722
|
+
.p-btn {
|
|
1723
|
+
flex: none;
|
|
1724
|
+
display: flex;
|
|
1725
|
+
padding: 8px;
|
|
1726
|
+
|
|
1727
|
+
.btn {
|
|
1728
|
+
flex: 1;
|
|
1729
|
+
margin: 0 8px;
|
|
1730
|
+
height: 42px;
|
|
1731
|
+
border-radius: 42px;
|
|
1732
|
+
}
|
|
1733
|
+
}
|
|
1734
|
+
}
|
|
1735
|
+
}
|
|
1736
|
+
|
|
1737
|
+
.el-dialog.h5view-dialog {
|
|
1738
|
+
margin: 0 !important;
|
|
1739
|
+
/* 同上:手机浏览器地址栏占位时 100vh 比可视区高,弹框底部的「关闭」会被顶出屏幕。
|
|
1740
|
+
dvh 打头、vh 兜底,见块 G 的说明。 */
|
|
1741
|
+
height: calc(100vh - 15px);
|
|
1742
|
+
height: calc(100dvh - 15px);
|
|
1743
|
+
display: flex;
|
|
1744
|
+
flex-direction: column;
|
|
1745
|
+
border-radius: 0;
|
|
1746
|
+
|
|
1747
|
+
> .el-dialog__body {
|
|
1748
|
+
flex: 1;
|
|
1749
|
+
min-height: 0;
|
|
1750
|
+
overflow-y: auto;
|
|
1751
|
+
-webkit-overflow-scrolling: touch;
|
|
1752
|
+
}
|
|
1753
|
+
.form-box {
|
|
1754
|
+
display: flex;
|
|
1755
|
+
flex-direction: column;
|
|
1756
|
+
flex: 1;
|
|
1757
|
+
overflow: hidden;
|
|
1758
|
+
background:#FFF;
|
|
1759
|
+
.tit {
|
|
1760
|
+
margin: 8px 12px;
|
|
1761
|
+
background: rgba(51, 106, 153, 0.1);
|
|
1762
|
+
border-radius: 11px;
|
|
1763
|
+
padding: 10px 12px;
|
|
1764
|
+
font-size: 13px;
|
|
1765
|
+
color: $baseColor;
|
|
1766
|
+
|
|
1767
|
+
&:before {
|
|
1768
|
+
content: "";
|
|
1769
|
+
width: 5px;
|
|
1770
|
+
height: 5px;
|
|
1771
|
+
background: $baseColor;
|
|
1772
|
+
border-radius: 50%;
|
|
1773
|
+
vertical-align: middle;
|
|
1774
|
+
margin-right: 5px;
|
|
1775
|
+
display: inline-block;
|
|
1776
|
+
}
|
|
1777
|
+
|
|
1778
|
+
> span {
|
|
1779
|
+
vertical-align: middle;
|
|
1780
|
+
}
|
|
1781
|
+
}
|
|
1782
|
+
}
|
|
1783
|
+
|
|
1784
|
+
/* 内容区的 height 是模板里的内联样式,只能用 !important 压掉,
|
|
1785
|
+
改由上面的 flex 决定高度 */
|
|
1786
|
+
.cont {
|
|
1787
|
+
height: 100% !important;overflow: auto;
|
|
1788
|
+
.h5-list-box{
|
|
1789
|
+
margin:12px;padding:0 !important;background:none !important;
|
|
1790
|
+
.item{
|
|
1791
|
+
border:none;
|
|
1792
|
+
.t2{
|
|
1793
|
+
dl{
|
|
1794
|
+
font-size:14px;color:#666;
|
|
1795
|
+
dd{
|
|
1796
|
+
margin:0;
|
|
1797
|
+
color:#323232;
|
|
1798
|
+
text-align:right;
|
|
1799
|
+
}
|
|
1800
|
+
}
|
|
1801
|
+
}
|
|
1802
|
+
}
|
|
1803
|
+
}
|
|
1804
|
+
}
|
|
1805
|
+
|
|
1806
|
+
/* 底部「关闭」:与底部动作栏同款胶囊,铺满一行 */
|
|
1807
|
+
> .el-dialog__footer {
|
|
1808
|
+
flex: none;
|
|
1809
|
+
padding: 8px 13px;
|
|
1810
|
+
box-shadow: 0 0 10px rgba(0, 0, 0, 0.06);
|
|
1811
|
+
.dialog-footer{display:flex;}
|
|
1812
|
+
.button-sty,
|
|
1813
|
+
.el-button {
|
|
1814
|
+
height: 40px;
|
|
1815
|
+
border-radius: 30px;
|
|
1816
|
+
padding: 0;
|
|
1817
|
+
font-size: 13px;
|
|
1818
|
+
flex:1;
|
|
1819
|
+
i {
|
|
1820
|
+
margin-right: 3px;
|
|
1821
|
+
}
|
|
1822
|
+
}
|
|
1823
|
+
}
|
|
1824
|
+
|
|
1825
|
+
/*步骤条*/
|
|
1826
|
+
/* ---- 任务情况时间轴 ---- */
|
|
1827
|
+
.h5-process-info {
|
|
1828
|
+
font-size: $xformH5Size;
|
|
1829
|
+
padding: 12px 16px;
|
|
1830
|
+
background: #fff;
|
|
1831
|
+
margin: 12px 16px;
|
|
1832
|
+
border-radius: 15px;
|
|
1833
|
+
overflow:auto;
|
|
1834
|
+
.item {
|
|
1835
|
+
display: flex;
|
|
1836
|
+
line-height: 1.4;
|
|
1837
|
+
padding: 6px 0 8px;
|
|
1838
|
+
position: relative;
|
|
1839
|
+
|
|
1840
|
+
&:after {
|
|
1841
|
+
content: "";
|
|
1842
|
+
width: 2px;
|
|
1843
|
+
position: absolute;
|
|
1844
|
+
background: #e9e9e9;
|
|
1845
|
+
top: 22px;
|
|
1846
|
+
bottom: -10px;
|
|
1847
|
+
left: 76px;
|
|
1848
|
+
z-index: 2;
|
|
1849
|
+
}
|
|
1850
|
+
|
|
1851
|
+
&:last-child:after {
|
|
1852
|
+
display: none;
|
|
1853
|
+
}
|
|
1854
|
+
|
|
1855
|
+
.time {
|
|
1856
|
+
color: #666;
|
|
1857
|
+
width: 82px;
|
|
1858
|
+
position: absolute;
|
|
1859
|
+
top: 37px;
|
|
1860
|
+
left: -14px;
|
|
1861
|
+
right: 0;
|
|
1862
|
+
text-align: center;
|
|
1863
|
+
zoom: 0.9;
|
|
1864
|
+
}
|
|
1865
|
+
|
|
1866
|
+
.status {
|
|
1867
|
+
width: 50px;
|
|
1868
|
+
line-height: 16px;
|
|
1869
|
+
padding: 2px 0;
|
|
1870
|
+
height: 100%;
|
|
1871
|
+
text-align: center;
|
|
1872
|
+
border-radius: 22px;
|
|
1873
|
+
vertical-align: middle;
|
|
1874
|
+
background: #fff;
|
|
1875
|
+
border: 1px solid #dcdfe6;
|
|
1876
|
+
color: #606266;
|
|
1877
|
+
|
|
1878
|
+
&.green {
|
|
1879
|
+
border: solid 1px #acedc9;
|
|
1880
|
+
background: #e7faf0;
|
|
1881
|
+
color: #67c23a;
|
|
1882
|
+
}
|
|
1883
|
+
&.red {
|
|
1884
|
+
border: solid 1px #ffcaca;
|
|
1885
|
+
background: #ffeded;
|
|
1886
|
+
color: #f56c6c;
|
|
1887
|
+
}
|
|
1888
|
+
&.gray {
|
|
1889
|
+
color: #d6d6d6;
|
|
1890
|
+
background: #f4f4f5;
|
|
1891
|
+
border-color: #d3d4d6;
|
|
1892
|
+
}
|
|
1893
|
+
&.orgn {
|
|
1894
|
+
color: #e6a23c;
|
|
1895
|
+
background: #fdf6ec;
|
|
1896
|
+
border-color: #f5dab1;
|
|
1897
|
+
}
|
|
1898
|
+
&.blue {
|
|
1899
|
+
background-color: transparentize($baseColor, 0.94);
|
|
1900
|
+
color: $baseColor;
|
|
1901
|
+
border: solid 1px transparentize($baseColor, 0.72);
|
|
1902
|
+
}
|
|
1903
|
+
}
|
|
1904
|
+
|
|
1905
|
+
.circle {
|
|
1906
|
+
background: $baseColor;
|
|
1907
|
+
width: 14px;
|
|
1908
|
+
height: 14px;
|
|
1909
|
+
border-radius: 50%;
|
|
1910
|
+
border: solid 3px #fff;
|
|
1911
|
+
display: inline-block;
|
|
1912
|
+
margin: 3px 20px;
|
|
1913
|
+
z-index: 9;
|
|
1914
|
+
}
|
|
1915
|
+
|
|
1916
|
+
.info {
|
|
1917
|
+
width: calc(100% - 100px);
|
|
1918
|
+
color:#666;
|
|
1919
|
+
p {
|
|
1920
|
+
margin: 2px 0;
|
|
1921
|
+
display: block;
|
|
1922
|
+
|
|
1923
|
+
> span {
|
|
1924
|
+
display: inline-block;
|
|
1925
|
+
min-width: 50%;
|
|
1926
|
+
|
|
1927
|
+
&.name {
|
|
1928
|
+
font-weight: 600;
|
|
1929
|
+
width: 100%;
|
|
1930
|
+
margin-bottom: 3px;
|
|
1931
|
+
color:#323232;
|
|
1932
|
+
}
|
|
1933
|
+
}
|
|
1934
|
+
|
|
1935
|
+
&.t {
|
|
1936
|
+
display: flex;
|
|
1937
|
+
|
|
1938
|
+
.t1 {
|
|
1939
|
+
min-width: 65px;
|
|
1940
|
+
margin-right: 0;
|
|
1941
|
+
flex: none;
|
|
1942
|
+
}
|
|
1943
|
+
|
|
1944
|
+
span {
|
|
1945
|
+
flex: 1;
|
|
1946
|
+
white-space: pre-line;
|
|
1947
|
+
}
|
|
1948
|
+
}
|
|
1949
|
+
}
|
|
1950
|
+
}
|
|
1951
|
+
}
|
|
1952
|
+
}
|
|
1953
|
+
|
|
1954
|
+
|
|
1955
|
+
/* 搜索行(选用户 / 加签):输入框 + 右侧「高级筛选」 */
|
|
1956
|
+
.search-H5box {
|
|
1957
|
+
flex: none;
|
|
1958
|
+
position: relative;
|
|
1959
|
+
display: flex;
|
|
1960
|
+
padding: 8px 16px 0;
|
|
1961
|
+
|
|
1962
|
+
.txt {
|
|
1963
|
+
flex: 1;
|
|
1964
|
+
position: relative;
|
|
1965
|
+
height: 38px;
|
|
1966
|
+
background: #fff;
|
|
1967
|
+
border: solid 1px #e4e4e4;
|
|
1968
|
+
border-radius: 38px 0 0 38px;
|
|
1969
|
+
|
|
1970
|
+
.el-input {
|
|
1971
|
+
width: 100% !important;
|
|
1972
|
+
}
|
|
1973
|
+
|
|
1974
|
+
.el-input__inner {
|
|
1975
|
+
height: 38px !important;
|
|
1976
|
+
width: 100%;
|
|
1977
|
+
border: none;
|
|
1978
|
+
background: none;
|
|
1979
|
+
line-height: 38px;
|
|
1980
|
+
padding-left: 39px;
|
|
1981
|
+
font-size: 13px;
|
|
1982
|
+
}
|
|
1983
|
+
|
|
1984
|
+
/* 放大镜挪到左侧(element 默认在右) */
|
|
1985
|
+
.el-input__suffix {
|
|
1986
|
+
position: absolute;
|
|
1987
|
+
left: 12px;
|
|
1988
|
+
right: inherit;
|
|
1989
|
+
top: 7px;
|
|
1990
|
+
width: 20px;
|
|
1991
|
+
transform: inherit !important;
|
|
1992
|
+
}
|
|
1993
|
+
|
|
1994
|
+
.el-input-group__append {
|
|
1995
|
+
border: none;
|
|
1996
|
+
background: none;
|
|
1997
|
+
|
|
1998
|
+
.el-button {
|
|
1999
|
+
border: none;
|
|
2000
|
+
background: $baseColor;
|
|
2001
|
+
color: #fff;
|
|
2002
|
+
width: 53px;
|
|
2003
|
+
height: 30px;
|
|
2004
|
+
padding: 0;
|
|
2005
|
+
position: absolute;
|
|
2006
|
+
right: 4px;
|
|
2007
|
+
top: 4px;
|
|
2008
|
+
/* element 给 .el-input-group__append .el-button 定了 margin:-10px -20px,
|
|
2009
|
+
绝对定位后这对负边距会把按钮整体往右上顶出去(实测右溢 16px、上溢
|
|
2010
|
+
5px,正好压在「高级筛选」上)。原文是用 right:26px/top:14px 反向补
|
|
2011
|
+
偿的,这里直接清零,right/top 才是所见即所得。 */
|
|
2012
|
+
margin: 0;
|
|
2013
|
+
border-radius: 30px;
|
|
2014
|
+
outline: none;
|
|
2015
|
+
font-size: 13px;
|
|
2016
|
+
}
|
|
2017
|
+
}
|
|
2018
|
+
}
|
|
2019
|
+
|
|
2020
|
+
.icon-screen {
|
|
2021
|
+
flex: none;
|
|
2022
|
+
height: 38px;
|
|
2023
|
+
line-height: 38px;
|
|
2024
|
+
padding: 0 10px;
|
|
2025
|
+
font-size: 13px;
|
|
2026
|
+
color: $baseColor;
|
|
2027
|
+
background: transparentize($baseColor, 0.88);
|
|
2028
|
+
border: solid 1px #e4e4e4;
|
|
2029
|
+
border-left: none;
|
|
2030
|
+
border-radius: 0 10px 10px 0;
|
|
2031
|
+
|
|
2032
|
+
i {
|
|
2033
|
+
margin-right: 5px;
|
|
2034
|
+
font-size: 14px;
|
|
2035
|
+
}
|
|
2036
|
+
}
|
|
2037
|
+
}
|
|
2038
|
+
|
|
2039
|
+
/* 修改单据:表单直接挂在骨架下,不套 .flex */
|
|
2040
|
+
> .el-dialog__body > div > .form-box {
|
|
2041
|
+
flex: 1;
|
|
2042
|
+
min-height: 0;
|
|
2043
|
+
overflow-y: auto;
|
|
2044
|
+
}
|
|
2045
|
+
.selected-flex-box{
|
|
2046
|
+
display: flex;height:100%;flex-direction: column;
|
|
2047
|
+
}
|
|
2048
|
+
.flex {
|
|
2049
|
+
display: flex;
|
|
2050
|
+
flex-direction: column;
|
|
2051
|
+
flex: 1;
|
|
2052
|
+
min-height: 0;
|
|
2053
|
+
|
|
2054
|
+
/* 可滚动的候选列表 */
|
|
2055
|
+
.checkbox-all_list {
|
|
2056
|
+
flex: 1;
|
|
2057
|
+
min-height: 0;
|
|
2058
|
+
/* 只放开纵向。写成 overflow:auto 时横向也可滚,卡片里一旦有超长内容
|
|
2059
|
+
(用户资料的「地址」字段存的是一整条图片 URL)就会拖出一条横向滚动条。 */
|
|
2060
|
+
overflow-y: auto;
|
|
2061
|
+
overflow-x: hidden;
|
|
2062
|
+
padding: 0 12px;
|
|
2063
|
+
|
|
2064
|
+
.order-item {
|
|
2065
|
+
background: #fff;
|
|
2066
|
+
|
|
2067
|
+
.is-checked {
|
|
2068
|
+
position: absolute;
|
|
2069
|
+
right: 0;
|
|
2070
|
+
top: 0;
|
|
2071
|
+
width: 62px;
|
|
2072
|
+
height: 22px;
|
|
2073
|
+
line-height: 20px;
|
|
2074
|
+
text-align: center;
|
|
2075
|
+
font-size: 13px;
|
|
2076
|
+
color: #fff;
|
|
2077
|
+
background: #e2e2e2;
|
|
2078
|
+
border: solid 1px #dcdcdc;
|
|
2079
|
+
border-radius: 0 8px 0 6px;
|
|
2080
|
+
|
|
2081
|
+
i {
|
|
2082
|
+
margin-right: 3px;
|
|
2083
|
+
font-size: 13px;
|
|
2084
|
+
}
|
|
2085
|
+
}
|
|
2086
|
+
|
|
2087
|
+
&.on {
|
|
2088
|
+
border: solid 1px $baseColor;
|
|
2089
|
+
|
|
2090
|
+
.is-checked {
|
|
2091
|
+
border-color: $baseColor;
|
|
2092
|
+
background: $baseColor;
|
|
2093
|
+
}
|
|
2094
|
+
}
|
|
2095
|
+
}
|
|
2096
|
+
}
|
|
2097
|
+
|
|
2098
|
+
/* 已选区(底部固定,不滚) */
|
|
2099
|
+
.checkbox-all {
|
|
2100
|
+
flex: none;
|
|
2101
|
+
position: relative;
|
|
2102
|
+
min-height: 80px;
|
|
2103
|
+
padding: 0 12px 8px;
|
|
2104
|
+
background: #fff;
|
|
2105
|
+
box-shadow: 0 -3px 4px rgba(0, 0, 0, 0.06);
|
|
2106
|
+
border-bottom: solid 1px $xformH5RowBorder;
|
|
2107
|
+
.ca-t {
|
|
2108
|
+
margin: 8px 0;
|
|
2109
|
+
font-size: 14px;
|
|
2110
|
+
font-weight: 600;
|
|
2111
|
+
}
|
|
2112
|
+
|
|
2113
|
+
.ca-c span {
|
|
2114
|
+
display: inline-block;
|
|
2115
|
+
position: relative;
|
|
2116
|
+
height: 24px;
|
|
2117
|
+
line-height: 24px;
|
|
2118
|
+
padding: 0 28px 0 2px;
|
|
2119
|
+
margin: 4px 10px 4px 0;
|
|
2120
|
+
font-size: 13px;
|
|
2121
|
+
color: $baseColor;
|
|
2122
|
+
border: solid 1px $baseColor;
|
|
2123
|
+
border-radius: 4px;
|
|
2124
|
+
|
|
2125
|
+
i {
|
|
2126
|
+
position: absolute;
|
|
2127
|
+
top: 0;
|
|
2128
|
+
right: 0;
|
|
2129
|
+
width: 24px;
|
|
2130
|
+
height: 24px;
|
|
2131
|
+
line-height: 24px;
|
|
2132
|
+
text-align: center;
|
|
2133
|
+
background: transparentize($baseColor, 0.91);
|
|
2134
|
+
}
|
|
2135
|
+
}
|
|
2136
|
+
}
|
|
2137
|
+
|
|
2138
|
+
.form-box {
|
|
2139
|
+
display: flex;
|
|
2140
|
+
flex-direction: column;
|
|
2141
|
+
flex: 1;
|
|
2142
|
+
overflow: hidden;
|
|
2143
|
+
|
|
2144
|
+
.tit {
|
|
2145
|
+
margin: 8px 12px;
|
|
2146
|
+
background: rgba(51, 106, 153, 0.1);
|
|
2147
|
+
border-radius: 11px;
|
|
2148
|
+
padding: 10px 12px;
|
|
2149
|
+
font-size: 13px;
|
|
2150
|
+
color: $baseColor;
|
|
2151
|
+
|
|
2152
|
+
&:before {
|
|
2153
|
+
content: "";
|
|
2154
|
+
width: 5px;
|
|
2155
|
+
height: 5px;
|
|
2156
|
+
background: $baseColor;
|
|
2157
|
+
border-radius: 50%;
|
|
2158
|
+
vertical-align: middle;
|
|
2159
|
+
margin-right: 5px;
|
|
2160
|
+
display: inline-block;
|
|
2161
|
+
}
|
|
2162
|
+
|
|
2163
|
+
> span {
|
|
2164
|
+
vertical-align: middle;
|
|
2165
|
+
}
|
|
2166
|
+
}
|
|
2167
|
+
}
|
|
2168
|
+
}
|
|
2169
|
+
|
|
2170
|
+
|
|
2171
|
+
/* 列表里的一张候选卡片。原文挂在 .h5-box 下(不在 .pop-box 段内),
|
|
2172
|
+
xform 里只有这批弹层用得到,就收进来。 */
|
|
2173
|
+
.order-item {
|
|
2174
|
+
position: relative;
|
|
2175
|
+
border: solid 1px #f0f1f1;
|
|
2176
|
+
border-radius: 12px;
|
|
2177
|
+
padding: 8px 10px;
|
|
2178
|
+
margin: 8px 0;
|
|
2179
|
+
|
|
2180
|
+
/* 左侧那道竖条 */
|
|
2181
|
+
&:before {
|
|
2182
|
+
content: "";
|
|
2183
|
+
position: absolute;
|
|
2184
|
+
left: 0;
|
|
2185
|
+
top: 6px;
|
|
2186
|
+
width: 3px;
|
|
2187
|
+
height: 50px;
|
|
2188
|
+
background: $baseColor;
|
|
2189
|
+
border-radius: 5px;
|
|
2190
|
+
}
|
|
2191
|
+
|
|
2192
|
+
/* 卡片里放的是用户资料原值,可能出现超长且无空格的串(「地址」字段实际存的
|
|
2193
|
+
是一整条图片 URL)。默认不允许在非空白处断行,这种串会把卡片整体撑宽、
|
|
2194
|
+
连带拖出横向滚动条,所以这里统一允许任意位置断行。 */
|
|
2195
|
+
.t1,
|
|
2196
|
+
.t2 {
|
|
2197
|
+
word-break: break-all;
|
|
2198
|
+
overflow-wrap: anywhere;
|
|
2199
|
+
}
|
|
2200
|
+
|
|
2201
|
+
.t1 {
|
|
2202
|
+
margin-bottom: 6px;
|
|
2203
|
+
|
|
2204
|
+
/* 模板里恒有 <i class="icon">(原文设了一圈头像样式后又 display:none,
|
|
2205
|
+
等于留着没用)。照原样隐藏,避免哪天有人给裸 .icon 加了全局规则时冒出来。 */
|
|
2206
|
+
.icon {
|
|
2207
|
+
display: none;
|
|
2208
|
+
}
|
|
2209
|
+
|
|
2210
|
+
span {
|
|
2211
|
+
vertical-align: middle;
|
|
2212
|
+
margin: 0 5px 0 0;
|
|
2213
|
+
}
|
|
2214
|
+
}
|
|
2215
|
+
|
|
2216
|
+
.t2 {
|
|
2217
|
+
font-size: 11px;
|
|
2218
|
+
color: rgba(128, 128, 128, 0.8);
|
|
2219
|
+
|
|
2220
|
+
p {
|
|
2221
|
+
min-width: 50%;
|
|
2222
|
+
/* 没有 max-width 时,inline-block 会被里面的长串顶到超出卡片宽度 */
|
|
2223
|
+
max-width: 100%;
|
|
2224
|
+
margin: 4px 0;
|
|
2225
|
+
display: inline-block;
|
|
2226
|
+
vertical-align: top;
|
|
2227
|
+
font-size:13px;
|
|
2228
|
+
}
|
|
2229
|
+
}
|
|
2230
|
+
|
|
2231
|
+
/* 修改候选人:卡片内的「设置候选人」按钮 */
|
|
2232
|
+
.btns {
|
|
2233
|
+
text-align: right;
|
|
2234
|
+
margin-top: 4px;
|
|
2235
|
+
|
|
2236
|
+
.btn {
|
|
2237
|
+
height: 28px;
|
|
2238
|
+
padding: 0 10px;
|
|
2239
|
+
font-size: 13px;
|
|
2240
|
+
}
|
|
2241
|
+
}
|
|
2242
|
+
}
|
|
2243
|
+
|
|
2244
|
+
}
|
|
2245
|
+
.el-dropdown-menu__item:not(.is-disabled):hover, .el-dropdown-menu__item:focus{
|
|
2246
|
+
background:none
|
|
2247
|
+
}
|
|
2248
|
+
.h5-dropdown-button.button-sty{
|
|
2249
|
+
width: 100%;
|
|
2250
|
+
height: 40px;
|
|
2251
|
+
border-radius: 30px;
|
|
2252
|
+
padding: 0;
|
|
2253
|
+
/* 三个并排时按钮偏窄:字号收一档、超长省略,避免文字撑破 */
|
|
2254
|
+
font-size: 13px;
|
|
2255
|
+
overflow: hidden;
|
|
2256
|
+
text-overflow: ellipsis;
|
|
2257
|
+
white-space: nowrap;
|
|
2258
|
+
|
|
2259
|
+
i {
|
|
2260
|
+
margin-right: 3px;
|
|
2261
|
+
}
|
|
2262
|
+
}
|