chain-saasui 1.0.10-alpha.21 → 1.0.10-alpha.22

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/COMPONENTS.md ADDED
@@ -0,0 +1,319 @@
1
+ # saasui 组件清单
2
+
3
+ 基础组件必须优先使用 `common/saasui` 中的封装,禁止直接使用原生 `el-*` 组件。未在此列出的组件才允许回落到 Element UI。
4
+
5
+ ## 使用前提
6
+
7
+ `saasui` 已在主应用中全局 `Vue.use(saasui)` 注册,模板内直接使用 kebab-case 标签即可:
8
+
9
+ ```vue
10
+ <s-button type="primary">保存</s-button>
11
+ ```
12
+
13
+ 所有组件通过 `v-bind="$attrs"` / `v-on="$listeners"` 透传到底层 Element UI,因此 element 原有 props/事件仍可使用。
14
+
15
+ ---
16
+
17
+ ## 一、按钮类
18
+
19
+ ### `<s-button>`
20
+
21
+ 主按钮,替代 `el-button`。封装了路由跳转、`icon` 类型、边框模式。
22
+
23
+ | 参数 | 类型 | 默认值 | 说明 |
24
+ | ------ | ------ | -------- | ----------------------------------------- |
25
+ | type | String | default | `primary` / `default` / `danger` / `icon` |
26
+ | border | String | - | 边框样式,自定义 class 后缀 |
27
+ | mode | String | button | `button` / `link` / `external` |
28
+ | path | String | - | `mode=link` 时的路由 path |
29
+ | query | Object | - | 路由 query |
30
+ | target | String | - | `_blank` 在新窗口打开 |
31
+
32
+ ```vue
33
+ <s-button type="primary" @click="handleSave">保存</s-button>
34
+ <s-button mode="link" path="/detail" :query="{ id }">查看</s-button>
35
+ ```
36
+
37
+ ### `<s-button-text>`
38
+
39
+ 文字按钮,用于表格行内次要操作,替代 `el-button type="text"`。
40
+
41
+ | 参数 | 类型 | 默认值 | 说明 |
42
+ | ------ | ------ | ---- | --------------------- |
43
+ | type | String | text | `text` / `link` |
44
+ | path | String | - | `type=link` 时的路由 path |
45
+ | query | Object | - | 路由 query |
46
+ | target | String | - | `_blank` 在新窗口打开 |
47
+
48
+ ### `<s-table-buttons>`
49
+
50
+ 行内操作按钮组,**表格操作列强制使用**。超出 `maxLength` 自动收起到下拉更多。
51
+
52
+ | 参数 | 类型 | 默认值 | 说明 |
53
+ | --------- | ------ | ---- | ------------- |
54
+ | list | Array | [] | 按钮配置数组,见下方字段 |
55
+ | row | Object | - | 当前行,透传到 onClick |
56
+ | maxLength | Number | 2 | 最多显示几个,其余进入更多 |
57
+ | moreType | String | text | `text` / `more`(更多按钮样式) |
58
+
59
+ `list` 项:`{ label, onClick, show?, tip?, attrs? }`,`show` 支持布尔或函数。
60
+
61
+ ```vue
62
+ <s-table-buttons :list="actionList" :row="row" @action="handleAction" />
63
+ ```
64
+
65
+ ---
66
+
67
+ ## 二、分页 / 布局 / 容器
68
+
69
+ ### `<s-pagetable>`
70
+
71
+ **列表页外层容器,必须使用**。自带 `header` / `form` / `footer` 插槽。
72
+
73
+ | 参数 | 类型 | 默认值 | 说明 |
74
+ | ----------------- | ------- | ----- | ------------------------ |
75
+ | title | String | 路由标题 | 页头标题,默认取路由 meta |
76
+ | mode | String | page | `page` / `form` |
77
+ | showHeader | Boolean | false | 是否显示头部 |
78
+ | showClose | Boolean | false | 显示返回箭头 |
79
+ | showFooter | Boolean | true | 是否渲染 footer 插槽 |
80
+ | showFooterButton | Boolean | false | 底部是否展示「取消 / 确认」按钮 |
81
+ | loadingBtn | Boolean | false | 确认按钮 loading |
82
+ | confirmText | String | 确定 | |
83
+ | cancelText | String | 取消 | |
84
+
85
+ 插槽:`default`(内容)、`header`、`header-append`、`title`、`form`(搜索区)、`footer`(分页)。
86
+
87
+ ```vue
88
+ <s-pagetable>
89
+ <template #form>...筛选条件...</template>
90
+ <s-table :data="list" :columns="columns" />
91
+ <template #footer>
92
+ <el-pagination ... />
93
+ </template>
94
+ </s-pagetable>
95
+ ```
96
+
97
+ ### `<s-page-tabs>` (项目中的 Tabs 基础组件)
98
+
99
+ 基于数组驱动的标签页,**替代 `el-tabs`**(项目中不存在 `s-tabs`,对应组件就是这个)。支持滚动、拖拽、显隐控制。
100
+
101
+ | 参数 | 类型 | 默认值 | 说明 |
102
+ | ------------ | ----------------- | ------------------------------ | ----------------------- |
103
+ | value | String / Number | '' | `v-model`,当前激活的 value |
104
+ | tabs | Array | [] | `{ label, value, disabled?, show? }` |
105
+ | fieldNames | Object | `{ label, value }` | 字段映射 |
106
+ | gap | String / Number | 32 | tab 间距 |
107
+ | showBorder | Boolean | true | 是否显示下边框 |
108
+ | beforeLeave | Function | - | 切换前钩子,返回 `false`/Promise reject 阻止切换 |
109
+ | draggable | Boolean | false | 是否开启拖拽排序 |
110
+
111
+ 事件:`input`、`tab-click(tab, index)`、`tabs-sort(newTabs, { from, to, tab })`。
112
+
113
+ 插槽:`extra`(右侧)、`tab-suffix`(每个 tab 尾部)。
114
+
115
+ ```vue
116
+ <s-page-tabs v-model="active" :tabs="tabs" />
117
+ ```
118
+
119
+ > 纯样式的简单切换也可以使用原生 `el-tabs`,但项目规范下**优先用 `s-page-tabs`**。
120
+
121
+ ### `<s-page-button>`
122
+
123
+ 页面级按钮区容器,用于 `s-pagetable` 顶部操作栏排布。
124
+
125
+ ### `<s-card>`
126
+
127
+ 内容卡片,带标题和可折叠能力。
128
+
129
+ | 参数 | 类型 | 默认值 | 说明 |
130
+ | ---------- | ------- | ----- | -------- |
131
+ | title | String | '' | 卡片标题 |
132
+ | titleSub | String | '' | 副标题 |
133
+ | isCollapse | Boolean | false | 是否开启折叠箭头 |
134
+
135
+ 插槽:`title`、`action`(右上角)、`default`。
136
+
137
+ ### `<s-container>`
138
+
139
+ 外层容器,不常用,用于非 PageTable 页面的基础容器。
140
+
141
+ ### `<s-group>`
142
+
143
+ 分组数据块,常用于首页卡片类分组展示。
144
+
145
+ | 参数 | 类型 | 默认值 | 说明 |
146
+ | --------------- | -------- | ----- | ---------------------- |
147
+ | list | Array | [] | 分组数据,`{ label, children }` |
148
+ | data | Object | {} | 绑定数据 |
149
+ | isActive | Function | - | 判断 item 是否激活 |
150
+ | showGroupTitle | Boolean | false | 是否显示分组标题 |
151
+
152
+ ---
153
+
154
+ ## 三、表格
155
+
156
+ ### `<s-table>`
157
+
158
+ **列表页表格强制使用**。继承 `el-table` 全部 props + 事件,新增 `columns` 配置化、内置多选列。
159
+
160
+ | 参数 | 类型 | 默认值 | 说明 |
161
+ | ---------------- | -------- | ------- | --------------------------------- |
162
+ | data | Array | - | 同 `el-table` |
163
+ | border | Boolean | true | 默认有边框 |
164
+ | columns | Array | [] | 列配置,见下方 |
165
+ | minWidth | Number/String | 160 | 列默认最小宽度 |
166
+ | selectable | Boolean | false | 是否展示多选列 |
167
+ | selectableType | String | default | `default` / `all`(跨页全选) |
168
+ | reserveSelection | Boolean | false | 翻页保留选中 |
169
+ | checkSelectable | Function | () => true | 行是否可选 |
170
+ | selected | Array | [] | 跨页全选时的选中 id 集合,需 `:selected.sync` |
171
+
172
+ `columns` 项字段:
173
+
174
+ | 字段 | 说明 |
175
+ | -------- | ---------------------------------------- |
176
+ | label | 表头文字 |
177
+ | value | 对应 `prop`,也是插槽名 |
178
+ | type | `text` / `select` / `unit` / `operate` / `index` / `UserModel` |
179
+ | tip | 表头 tooltip |
180
+ | width / minWidth / fixed | 列宽、冻结 |
181
+ | actionList | `type=operate` 时的按钮数组 |
182
+ | options | `type=select` / `unit` 时的字典 |
183
+
184
+ 事件:`action(name, row, column)`(操作列)、`selection-change`、`select-all`、透传 `el-table` 所有事件。
185
+
186
+ 暴露方法:`doLayout()`、`clearSelection()`、`toggleRowSelection()`、`getSelection()`。
187
+
188
+ ```vue
189
+ <s-table
190
+ :data="list"
191
+ :columns="[
192
+ { label: '姓名', value: 'name' },
193
+ { label: '状态', value: 'status', type: 'unit', options: statusOptions },
194
+ { label: '操作', value: 'action', type: 'operate', actionList },
195
+ ]"
196
+ @action="onAction" />
197
+ ```
198
+
199
+ ### `<s-table-column>`
200
+
201
+ 内置于 `s-table` 的列渲染器,一般不直接使用,通过 `columns` 配置。
202
+
203
+ ---
204
+
205
+ ## 四、弹窗 / 抽屉
206
+
207
+ ### `<s-dialog>`
208
+
209
+ **新增 / 编辑弹窗必须使用**。继承 `el-dialog` 全部 props,内置 footer、loading。
210
+
211
+ | 参数 | 类型 | 默认值 | 说明 |
212
+ | ------------------ | ------------- | ----- | ------------------- |
213
+ | visible | Boolean | false | 使用 `visible.sync` |
214
+ | width | String/Number | 720px | |
215
+ | showFooter | Boolean | true | 是否显示底部按钮 |
216
+ | showCancelButton | Boolean | true | |
217
+ | showConfirmButton | Boolean | true | |
218
+ | loadingBtn | Boolean | false | 确认按钮 loading |
219
+ | confirmText | String | 确定 | |
220
+ | cancelText | String | 取消 | |
221
+ | closeOnClickModal | Boolean | false | 强制 false,点击遮罩不关闭 |
222
+
223
+ 事件:`confirm`、`close`、`update:visible`。
224
+
225
+ ```vue
226
+ <s-dialog :visible.sync="visible" title="新增" :loading-btn="saving" @confirm="onSave">
227
+ ...表单...
228
+ </s-dialog>
229
+ ```
230
+
231
+ ### `<s-drawer>`
232
+
233
+ 侧边抽屉,参数同 `s-dialog`,`width` 改为 `size`(默认 720px)。
234
+
235
+ ### `SMessagebox` / `SInputDialog`
236
+
237
+ 以 JS 方式调起的命令式弹窗,直接从 saasui 导入调用。
238
+
239
+ ```js
240
+ import saasui from 'saasui';
241
+ saasui.SMessagebox({ title: '提示', content: '...' });
242
+ ```
243
+
244
+ ---
245
+
246
+ ## 五、表单控件(替代 `el-*`)
247
+
248
+ > 所有控件支持 `from="text"` 进入纯展示模式,用于详情页与表单共用一套配置。
249
+
250
+ | 组件 | 替代 | 关键 props |
251
+ | ------------------- | ----------- | ------------------------------------------------ |
252
+ | `<s-input>` | el-input | `type`、`from`、默认 `clearable`、`maxlength` |
253
+ | `<s-input-number>` | el-input-number | |
254
+ | `<s-select>` | el-select | `options=[{ label, value }]`、默认 `filterable`、支持分组 |
255
+ | `<s-cascader>` | el-cascader | `options`、`props` |
256
+ | `<s-date-picker>` | el-date-picker | `type` 默认 `date`、`valueFormat` 默认 `yyyy-MM-dd` |
257
+ | `<s-radio-group>` | el-radio-group | `options`、`direction`(horizontal / vertical) |
258
+ | `<s-switch>` | el-switch | |
259
+ | `<s-mask-input>` | - | 脱敏输入 |
260
+ | `<s-currency>` | - | 货币金额输入 |
261
+ | `<s-currency-select>`| - | 货币种类选择 |
262
+ | `<s-field-group>` | - | 多字段组合,`fields=[{ field, type, ... }]` |
263
+
264
+ ---
265
+
266
+ ## 六、展示 / 反馈
267
+
268
+ | 组件 | 用途 |
269
+ | ----------------- | ---------------------------------------- |
270
+ | `<s-unit value type options>` | 状态点 / tag 样式展示,配合字典 |
271
+ | `<s-tag>` | 标签,替代 `el-tag` |
272
+ | `<s-tip>` | 提示性文字 / 弱提示 |
273
+ | `<s-alert>` | 警告/通知条,替代 `el-alert` |
274
+ | `<s-tooltip-wrap>`| 自适应文字省略 + tooltip,替代常见 `text-overflow` 包装 |
275
+ | `<s-item-list>` | 展示键值对列表 |
276
+ | `<s-steps>` | 步骤条,替代 `el-steps` |
277
+ | `<s-segmented>` | 分段控件 |
278
+ | `<s-icon>` | 图标统一入口 |
279
+ | `<s-empty>` | 空状态 |
280
+
281
+ ### `<s-tooltip-wrap>`
282
+
283
+ | 参数 | 类型 | 默认值 | 说明 |
284
+ | --------- | ------- | --------- | --------------- |
285
+ | text | String | '' | 展示文本,超出才显示 tooltip |
286
+ | placement | String | top-start | |
287
+ | lineClamp | String | '1' | 多行省略行数 |
288
+ | inherit | Boolean | false | 继承父级文字样式 |
289
+
290
+ ### `<s-unit>`
291
+
292
+ | 参数 | 类型 | 默认值 | 说明 |
293
+ | ------- | -------------- | --- | ------------------- |
294
+ | value | String/Number | - | 值 |
295
+ | type | String | '' | 预设类型 |
296
+ | options | Array | [] | 字典数组 |
297
+ | props | Object | - | 字段映射 `{ value, label, style }` |
298
+ | color | String | '' | 强制指定颜色 |
299
+ | isLink | Boolean | - | 是否当链接展示 |
300
+
301
+ ---
302
+
303
+ ## 七、布局
304
+
305
+ ### `<s-space>` / `<s-space-item>`
306
+
307
+ 元素间距容器,替代手写 `margin`。
308
+
309
+ ---
310
+
311
+ ## 使用规则速记
312
+
313
+ 1. **新建列表页** → `s-pagetable` + `s-table` + `s-table-buttons` + `s-dialog`
314
+ 2. **Tabs 切换** → `s-page-tabs`,不要再写 `el-tabs`
315
+ 3. **表单字段** → `s-input` / `s-select` / `s-date-picker` / `s-radio-group`,详情页传 `from="text"` 即可
316
+ 4. **弹窗** → 新增编辑用 `s-dialog`、侧边配置用 `s-drawer`、命令式用 `SMessagebox`
317
+ 5. **行内操作** → 一律用 `s-table-buttons`,不要手写 `el-button` 列表
318
+ 6. **文字省略** → `s-tooltip-wrap`,不要手写 `text-overflow`
319
+ 7. **状态展示** → `s-unit` + 字典,不要自己拼颜色
@@ -1,5 +1,4 @@
1
1
  .el-button.saas-button-text {
2
- color: #0e1822;
3
2
  padding-left: 8px;
4
3
  padding-right: 8px;
5
4
  display: inline-flex;
@@ -1,6 +1,5 @@
1
1
  .saas-stabs {
2
2
  width: 100%;
3
- background: #fff;
4
3
  position: relative;
5
4
  }
6
5
 
@@ -5,10 +5,11 @@
5
5
  overflow: hidden;
6
6
  white-space: nowrap;
7
7
  text-overflow: ellipsis;
8
- word-break: break-all;
8
+ word-break: break-word;
9
+ overflow-wrap: break-word;
9
10
  }
10
11
  .saas-tooltip-wrap__content-more {
11
- word-break: break-all;
12
+ word-break: break-word;
12
13
  text-overflow: ellipsis;
13
14
  display: -webkit-box;
14
15
  -webkit-box-orient: vertical;
@@ -1,10 +1,12 @@
1
1
  <template>
2
2
  <div class="saas-table-actions">
3
3
  <el-dropdown v-if="buttonList.length" @command="handleCommand">
4
- <s-button type="text">
5
- {{ $t('TableData.action') }}
6
- <span class="smart-caret-down"></span>
7
- </s-button>
4
+ <slot name="trigger">
5
+ <s-button type="text">
6
+ {{ $t('TableData.action') }}
7
+ <span class="smart-caret-down"></span>
8
+ </s-button>
9
+ </slot>
8
10
  <el-dropdown-menu slot="dropdown">
9
11
  <el-tooltip
10
12
  v-for="(drop, index) in buttonList"
@@ -1,7 +1,9 @@
1
1
  <template>
2
2
  <div class="saas-select" :class="{ 'saas-text-mode': from === 'text' }">
3
- <span v-if="from === 'text'" class="saas-input-text">{{ textValue }}</span>
4
- <el-cascader v-else class="saas-cascader" ref="refCascader" v-on="onEvents" v-model="_value" v-bind="attrs">
3
+ <span v-if="from === 'text'" class="saas-input-text">
4
+ <STooltipWrap :text="getTextValue" />
5
+ </span>
6
+ <el-cascader v-else class="saas-cascader" ref="refCascader" v-on="onEvents" v-model="_value" :options="optionsList" v-bind="attrs">
5
7
  <template v-for="(_, slotName) in $scopedSlots" #[slotName]="scope">
6
8
  <slot :name="slotName" v-bind="scope" />
7
9
  </template>
@@ -12,7 +14,7 @@
12
14
  <script>
13
15
  import { Cascader } from 'element-ui';
14
16
  import attrsMixin from '../mixins/attrsMixin';
15
- import { omit, isEmpty } from 'chain-lodash';
17
+ import { omit, isEmpty, formatIfJson } from 'chain-lodash';
16
18
  export default {
17
19
  name: 'SCascader',
18
20
  mixins: [attrsMixin],
@@ -48,6 +50,10 @@ export default {
48
50
  type: Boolean,
49
51
  default: false,
50
52
  },
53
+ options: {
54
+ type: Array,
55
+ default: () => [],
56
+ },
51
57
  },
52
58
  data() {
53
59
  return {
@@ -69,6 +75,12 @@ export default {
69
75
  'expand-change': this.cascaderVisable,
70
76
  };
71
77
  },
78
+ optionsList() {
79
+ return (this.options || []).map(this.formatOptions);
80
+ },
81
+ getTextValue() {
82
+ return this.getSelectValue() || '-';
83
+ },
72
84
  },
73
85
 
74
86
  methods: {
@@ -80,6 +92,51 @@ export default {
80
92
  });
81
93
  this.$emit('expand-change', ...args);
82
94
  },
95
+ formatOptions(item) {
96
+ const valueKey = (this.props && this.props.value) || 'value';
97
+ const labelKey = (this.props && this.props.label) || 'label';
98
+ const childrenKey = (this.props && this.props.children) || 'children';
99
+ const value = item[valueKey];
100
+ const label = item[labelKey];
101
+ const children = item[childrenKey];
102
+ return {
103
+ ...item,
104
+ [valueKey]: !isEmpty(value) ? String(value) : '', // 格式化成字符串避免匹配有问题
105
+ [labelKey]: formatIfJson(label),
106
+ [childrenKey]: Array.isArray(children) ? children.map(this.formatOptions) : children,
107
+ };
108
+ },
109
+ getSelectValue() {
110
+ const props = this.props || {};
111
+ const valueKey = props.value || 'value';
112
+ const labelKey = props.label || 'label';
113
+ const childrenKey = props.children || 'children';
114
+ const mul = !!props.multiple;
115
+ const separator = props.separator || ' / ';
116
+ const findPath = (tree, val) => {
117
+ for (const node of tree || []) {
118
+ if (String(node[valueKey]) == String(val)) {
119
+ return [node[labelKey]];
120
+ }
121
+ const children = node[childrenKey];
122
+ if (Array.isArray(children) && children.length) {
123
+ const childPath = findPath(children, val);
124
+ if (childPath) {
125
+ return [node[labelKey], ...childPath];
126
+ }
127
+ }
128
+ }
129
+ return null;
130
+ };
131
+ const values = mul ? this.value || [] : isEmpty(this.value) ? [] : [this.value];
132
+ const nameArr = values
133
+ .map(v => {
134
+ const path = findPath(this.optionsList, v);
135
+ return path ? (this.showAllLevels ? path.join(separator) : path[path.length - 1]) : '';
136
+ })
137
+ .filter(Boolean);
138
+ return nameArr.length ? (nameArr.length > 1 ? `${nameArr[0]} +${nameArr.length - 1}` : nameArr[0]) : '';
139
+ },
83
140
  },
84
141
  };
85
142
  </script>
@@ -16,9 +16,8 @@
16
16
  </template>
17
17
 
18
18
  <script>
19
- import { isEmpty } from 'chain-lodash';
19
+ import { isEmpty, currency } from 'chain-lodash';
20
20
  import attrsMixin from '../mixins/attrsMixin';
21
- import currency from './currency';
22
21
 
23
22
  export default {
24
23
  name: 'SCurrency',
@@ -6,16 +6,16 @@
6
6
  <el-select v-else class="saas-select-input" v-model="newValue" v-on="onEvents" v-bind="attrs" filterable :clearable="clearable">
7
7
  <template v-for="item in optionsList">
8
8
  <!-- 如果item有options属性,说明是分组 -->
9
- <el-option-group v-if="item.options" :key="item.value" :label="item.label">
9
+ <el-option-group v-if="item.options" :key="`group-${item.value}`" :label="item.label">
10
10
  <el-option
11
11
  v-for="option in item.options"
12
- :disabled="option.disabled"
12
+ :disabled="isOptionDisabled(option)"
13
13
  :key="option.value"
14
14
  :label="option.label"
15
15
  :value="option.value"></el-option>
16
16
  </el-option-group>
17
17
  <!-- 否则是普通选项 -->
18
- <el-option v-else :disabled="item.disabled" :key="item.value" :label="item.label" :value="item.value"></el-option>
18
+ <el-option v-else :disabled="isOptionDisabled(item)" :key="`opt-${item.value}`" :label="item.label" :value="item.value"></el-option>
19
19
  </template>
20
20
  </el-select>
21
21
  </div>
@@ -68,6 +68,10 @@ export default {
68
68
  type: [String, Function],
69
69
  default: '',
70
70
  },
71
+ optionDisabled: {
72
+ type: [Function, String],
73
+ default: '',
74
+ },
71
75
  },
72
76
  data() {
73
77
  return {};
@@ -157,6 +161,26 @@ export default {
157
161
  },
158
162
  },
159
163
  methods: {
164
+ isOptionDisabled(option) {
165
+ if (!option) return false;
166
+
167
+ // 1) 优先使用外部传入的禁用判定函数
168
+ if (typeof this.optionDisabled === 'function') {
169
+ return !!this.optionDisabled(option, {
170
+ options: this.optionsList,
171
+ value: this.newValue,
172
+ multiple: !!this.multiple,
173
+ });
174
+ }
175
+
176
+ // 2) 也支持传字段名映射,例如 optionDisabled="isDisabled"
177
+ if (typeof this.optionDisabled === 'string' && this.optionDisabled) {
178
+ return !!option[this.optionDisabled];
179
+ }
180
+
181
+ // 3) 默认兼容原有 disabled 字段
182
+ return !!option.disabled;
183
+ },
160
184
  flattenOptions(options) {
161
185
  const result = [];
162
186
  options.forEach(item => {
@@ -87,7 +87,7 @@ export default {
87
87
  methods: {
88
88
  selectValue(row) {
89
89
  let str = '';
90
- let { options = [], type = 'txt', component = null } = this.column;
90
+ let { type = 'txt', component = null } = this.column;
91
91
  const value = row[this.column.value];
92
92
  if (this.column.formatValue) {
93
93
  return this.column.formatValue(row, this.column);
@@ -97,7 +97,7 @@ export default {
97
97
  } else {
98
98
  switch (type) {
99
99
  case 'select':
100
- let obj = options.find(f => f.value == value) || {};
100
+ let obj = this.column.options.find(f => f.value == value) || {};
101
101
  str = formatIfJson(obj.label);
102
102
  break;
103
103
  case 'time':
package/lib/css/index.css CHANGED
@@ -1 +1 @@
1
- @charset "UTF-8";.saas-card,.saas-dialog .el-dialog{border-radius:6px}.saas-dialog-footer,.saas-drawer-footer{height:auto;text-align:right}.saas-dialog .el-dialog__body{padding:0}.saas-dialog .el-dialog__header{border-bottom:1px solid #dbdee7;padding:12px 16px}.saas-dialog .el-dialog__footer{padding:8px 16px;border-top:1px solid #dbdee7}.saas-dialog .el-dialog__headerbtn{top:16px}.content-no-padding .saas-dialog-content{padding:0}.saas-dialog-auto{max-height:calc(85vh - 100px);overflow-y:auto}.saas-dialog-content{padding:16px}.saas-drawer .el-drawer__body{display:flex;position:relative}.saas-drawer .el-drawer__header{padding:12px 16px}.saas-drawer .el-drawer.rtl{border-radius:8px 0 0 8px}.saas-drawer-content{flex:1;padding:16px;overflow-y:auto}.saas-drawer-footer{padding:12px 16px;border-top:1px #efefef solid}.saas-detail{background:#fff;height:100%;display:flex;flex-direction:column;position:relative}.saas-detail-top{flex:1;overflow-y:auto;overflow-x:auto}.saas-detail-header{display:flex;padding:24px 64px;position:sticky;background:#fff;top:0;z-index:10}.saas-detail-title{display:flex;align-items:center;font-size:16px;font-weight:600;color:#0e1822}.saas-detail-sub{margin-top:8px}.saas-title-line{display:inline-block;width:4px;height:16px;background:#28b86a;margin-right:8px;vertical-align:middle}.saas-detail-backbox{display:flex;align-items:center;position:absolute;left:24px;top:24px}.saas-detail-back{display:flex;align-items:center;border-radius:50%;border:1px solid #dbdee7;width:24px;height:24px;justify-content:center;color:#a1a5b2;cursor:pointer}.saas-detail-back:hover{background:#f7f9fb}.saas-detail-content{padding:0 64px 24px;flex:1}.saas-detail-footer{padding:16px 24px;background:#fff;text-align:center;box-shadow:8px 0 12px 0 rgba(161,165,178,.1);border-radius:0;border-top:1px solid #dbdee7;z-index:5}.saas-unit-danger,.saas-unit-deafault,.saas-unit-info,.saas-unit-primary,.saas-unit-success,.saas-unit-warning{width:8px;height:8px;border-radius:2px}.saas-unit{display:flex;align-items:center;gap:6px;white-space:nowrap;color:#0e1822;font-size:14px}.saas-unit-deafault,.saas-unit-primary{background-color:#1890ff}.saas-unit-info{background-color:#a1a5b2}.saas-unit-success{background-color:#2ecc71}.saas-unit-danger{background-color:#ff3b30}.saas-unit-warning{background-color:#f90}.saas-unit-link{text-decoration:underline;cursor:pointer}.saas-unit-link:hover{color:#1890ff}.saas-unit-text{width:auto;flex:1;text-overflow:ellipsis;overflow:hidden}.saas-card{border:1px solid #dbdee7;margin-bottom:24px}.saas-card.hidden-card{border-bottom:none}.saas-card.hidden-card .saas-card-header{border-radius:6px}.saas-card__action{flex-shrink:0;width:auto}.saas-card-header{display:flex;background:#f7f9fb;border-radius:6px 6px 0 0;border-bottom:1px solid #dbdee7;font-weight:500;font-size:16px;color:#0e1822;padding:8px 16px;align-items:center}.saas-card-title{flex:1}.saas-card-title .el-button--text{padding:0}.saas-card-content{padding:16px}.saas-card-icon{cursor:pointer;margin-right:8px}.saas-group{display:flex;overflow-x:auto;min-height:50px;padding-bottom:4px}.saas-group div{box-sizing:border-box}.saas-group::-webkit-scrollbar{width:3px;height:4px;background-color:#fff;cursor:pointer}.saas-group::-webkit-scrollbar-thumb{background:rgba(144,147,153,.2)}.saas-group::-webkit-scrollbar-thumb:hover{background:rgba(144,147,153,.5)}.saas-group::-webkit-scrollbar-track{background-color:#fff}.saas-sort-group{display:flex;border-radius:6px;margin-right:8px;background:#f7f9fb}.saas-sort-item{width:136px;background:#f7f9fb;border:1px solid #f7f9fb;text-align:center;padding:8px 4px;position:relative;cursor:pointer;border-radius:6px;display:flex;flex-direction:column;align-items:center;justify-content:center}.saas-sort-item .title{font-weight:600;font-size:16px;color:#0e1822;line-height:24px}.saas-sort-item .text{font-size:14px;color:#7b8089;line-height:22px;max-width:100%}.saas-sort-item img{display:none;position:absolute;width:16px;right:-1px;top:-1px}.saas-sort-item.active{border:1px solid #28b86a;border-radius:6px;background:#f4fbf8}.s-message-box-dialog,.saas-page-table{border-radius:8px}.saas-sort-item.active .title{color:#28b86a}.saas-sort-item.active img{display:block}.saas-group-title{font-size:14px;color:#0e1822;margin-bottom:8px}.s-message-box-dialog-wrapper{display:flex;align-items:center}.s-message-box-dialog-wrapper .s-message-box-dialog.el-dialog{margin-top:0!important}.s-message-box-dialog .el-dialog__header{padding:24px 24px 0}.s-message-box-dialog .el-dialog__body{padding:0 24px}.s-message-box-dialog .el-dialog__footer{padding:0 24px 24px}.s-message-box-dialog__title{padding-right:8px}.message-box__body{padding-left:32px}.message-box__header{font-weight:600;font-size:16px;color:#333;line-height:24px;margin-bottom:8px}.message-box__content{margin-bottom:24px;color:#5c616a}.message-box__footer{display:flex;justify-content:flex-end}.message-box__input{width:100%;padding:6px}.message-box_icon{color:#f90;display:flex;font-size:24px}.message-box_main{display:flex;gap:8px}.message-box_right{flex:1;width:0}.saas-page-table{background:#fff;height:calc(100% - 16px);overflow-y:auto;overflow-x:hidden;display:flex;flex-direction:column;position:relative;padding:16px}.saas-page-table__header{flex-shrink:0}.saas-page-table__menu{display:flex;align-items:center;font-size:16px;font-weight:600;color:#0e1822;margin-bottom:16px}.saas-page-table__menu.hasClose{font-weight:400}.saas-page-table__back-title{margin-right:16px}.saas-page-table__title-line{height:14px;width:1px;background:#dbdee7;margin-right:16px}.saas-page-table--hasButton .saas-page-table__footer{padding-top:16px;padding-bottom:16px;margin:0 -16px -16px;text-align:center;box-shadow:8px 0 12px 0 rgba(161,165,178,.1);border-radius:0;border-top:1px solid #dbdee7}.saas-page-table--hasButton .saas-page-content__box{overflow-y:auto}.saas-page-table__sub{margin-top:8px}.saas-page-header__line{display:inline-block;width:4px;height:16px;background:#28b86a;margin-right:8px;vertical-align:middle}.saas-page-table__backbox{display:flex;align-items:center;top:24px}.saas-page-table__back,.saas-steptop-btn{align-items:center;display:flex}.saas-page-table__back{border-radius:50%;border:1px solid #dbdee7;width:24px;height:24px;justify-content:center;color:#a1a5b2;cursor:pointer;margin-right:8px}.saas-field-group .saas-field-group-item.saas-field-single .el-input-number__inner,.saas-field-group .saas-field-group-item.saas-field-single .el-input__inner,.saas-segmented{border-radius:6px}.saas-page-table__back:hover{background:#f7f9fb}.saas-page-table__title{flex:1;width:0;overflow:hidden;text-overflow:ellipsis}.saas-page-table--form .saas-page-table__content{min-height:auto}.saas-page-table__content{flex:1;min-height:300px}.saas-page-content__box{height:100%}.saas-page-table__footer{flex-shrink:0}.saas-page__button{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap}.saas-table-buttons{display:flex;gap:0 8px;flex-wrap:wrap;align-items:center}.saas-table-buttons .el-button+.el-button{margin-left:0}.saas-table-buttons .smart-More{font-weight:bolder}.saas-container{display:flex;flex-direction:column;height:100%;flex:1}.saas-container-content{flex:1;min-height:300px}.saas-input .el-input-group__append{padding:0;background:#f7f9fb;color:#0e1822}.saas-input .el-textarea.el-input--small.is-disabled.el-input--suffix .el-textarea__inner{color:var(--saas-gray-900)}.saas-input-number,.saas-select-input{display:inline-block;width:100%}.saas-text-mode{display:inline}.saas-cascader{width:100%}.saas-cascader .el-cascader{height:30px;line-height:30px}.saas-cascader .el-cascader__tags{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex-wrap:nowrap;margin-left:4px}.saas-cascader .el-cascader__tags .el-tag{max-width:75%}.saas-cascader .el-cascader__tags .el-cascader__search-input{margin-left:10px}.saas-datepicker{width:100%}.saas-datepicker.saas-text-mode .saas-datepicker-text{color:#606266;line-height:32px}.saas-datepicker .el-date-editor .el-input,.saas-datepicker .saas-date-picker{width:100%}.el-picker-panel__shortcut:hover{color:var(--saas-success-600)}.saas-field-group{display:flex;align-items:center;width:100%;gap:0}.saas-field-group .saas-field-group-separator{flex:none;padding:0 4px;color:#606266;line-height:1}.el-button.icon,.el-button.saas-button-text{padding-left:8px;padding-right:8px}.saas-field-group .saas-field-group-item{flex:1}.saas-field-group .saas-field-group-item .el-input,.saas-field-group .saas-field-group-item .el-input-number,.saas-field-group .saas-field-group-item .el-select{width:100%}.saas-field-group:not(.saas-has-separator) .saas-field-group-item.saas-field-first .el-input-number__inner,.saas-field-group:not(.saas-has-separator) .saas-field-group-item.saas-field-first .el-input__inner{border-radius:6px 0 0 6px}.saas-field-group:not(.saas-has-separator) .saas-field-group-item.saas-field-middle .el-input-number__inner,.saas-field-group:not(.saas-has-separator) .saas-field-group-item.saas-field-middle .el-input__inner{border-radius:0;border-left:none}.saas-field-group:not(.saas-has-separator) .saas-field-group-item.saas-field-last .el-input-number__inner,.saas-field-group:not(.saas-has-separator) .saas-field-group-item.saas-field-last .el-input__inner{border-radius:0 6px 6px 0;border-left:none}.saas-text-mode .saas-field-group-item{flex:0;width:auto;max-width:50%}.saas-text-mode .saas-field-first{margin-right:4px}.el-button.saas-button-text{color:#0e1822;display:inline-flex;align-items:center;outline:0;background-color:transparent}.el-button.saas-button-mode__link{padding:0}.el-button.saas-button-text:focus,.el-button.saas-button-text:hover{background-color:#f7f9fb}.no-gap>.el-button.saas-button-text{margin:0}.saas-button.saas-button__icon{padding-right:8px;padding-left:8px}.saas-button-border__primary{border-color:var(--saas-success-600);color:var(--saas-success-600)}.saas-button-border__primary:hover{background-color:var(--saas-success-50)}.saas-space{display:inline-flex}.saas-space.saas-horizontal{flex-direction:row}.saas-space.saas-vertical{flex-direction:column}.saas-space-item{display:inline-flex}.saas-steps{display:flex;width:100%;font-size:14px;flex-direction:row;align-items:center}.saas-steps .saas-steps-item{position:relative;flex:1;overflow:hidden;white-space:nowrap}.saas-steps.vertical{flex-direction:column}.saas-steps-item:last-child{flex:none}.saas-steps-item-tail{position:absolute;top:16px;left:16px;width:calc(100% - 32px);height:1px;background-color:#f0f0f0}.vertical .saas-steps-item-tail{width:1px;height:calc(100% - 32px);left:16px;top:32px}.saas-steps-item-finish .saas-steps-item-tail{background-color:#1890ff}.saas-steps-item-icon{width:24px;height:24px;margin-right:8px;background:#fff;border:1px solid #dbdee7;border-radius:50%;line-height:22px;text-align:center;font-size:14px;color:#dbdee7;display:inline-block}.saas-steps-item-active .saas-steps-item-icon{border-color:#28b86a;background-color:#28b86a;color:#fff}.saas-steps-item-finish .saas-steps-item-icon{border-color:#28b86a;color:#28b86a;line-height:25px}.saas-steps-custom-icon{font-size:20px}.saas-steps-item-content{position:relative;display:inline-block;vertical-align:top}.saas-steps-item-title{color:#7c808a;font-weight:400;overflow:hidden}.saas-steps-item-active .saas-steps-item-title,.saas-steps-item-finish .saas-steps-item-title{color:#0e1822}.saas-steps-item-description{color:rgba(0,0,0,.45);font-size:14px;margin-top:4px}.anticon{display:inline-block;width:1em;height:1em;fill:currentColor}.saas-steps-item-title:after{background:#dbdde7;content:"";display:block;height:1px;left:100%;position:absolute;top:12px;width:9999px;margin-left:16px}.saas-steps-item:not(:first-of-type){padding-left:16px}.saas-steps-item:last-of-type .saas-steps-item-title:after{content:"";display:none}.saas-stabs{width:100%;background:#fff;position:relative}.saas-stabs-container{display:flex;align-items:flex-end;justify-content:space-between;width:100%;position:relative}.saas-segmented,.saas-stabs-nav{display:inline-flex;position:relative}.saas-stabs-container--border{border-bottom:1px solid #e4e6ed}.saas-stabs-scroll-container{flex:1;min-width:0;overflow:hidden;position:relative}.saas-stabs-nav{align-items:center;padding:0 0 8px;overflow-x:auto;overflow-y:hidden;white-space:nowrap;min-width:100%;min-height:32px;scrollbar-width:none;-ms-overflow-style:none}.saas-stabs-extra,.saas-stabs-scroll-btn{align-items:center;padding-bottom:8px;display:flex}.saas-stabs-nav::-webkit-scrollbar{display:none}.saas-stabs-scroll-btn{justify-content:center;width:32px;height:32px;background:#fff;cursor:pointer;color:#666;font-size:14px;transition:all .3s ease;flex-shrink:0;z-index:2}.saas-stabs-scroll-btn:hover{color:var(--saas-success)}.saas-stabs-scroll-btn:active{transform:scale(.95)}.saas-stabs-scroll-btn--left{margin-right:8px}.saas-stabs-scroll-btn--right{margin-left:8px}.saas-stabs-extra{margin-left:16px;flex-shrink:0}.stabs-nav-item{display:flex;align-items:center;cursor:pointer;color:var(--saas-gray-600);font-size:14px;white-space:nowrap;flex-shrink:0;user-select:none;transition:transform .2s ease,opacity .2s ease}.stabs-nav-item:hover,.stabs-nav-item__active{color:var(--saas-success)}.stabs-nav-item__active{font-weight:600}.stabs-nav-item__active:hover{background-color:transparent}.stabs-nav-item__disabled:hover{color:var(--saas-gray-400);background-color:transparent}.stabs-nav-item-text{height:22px}.stabs-nav-indicator{position:absolute;bottom:0;left:0;height:2px;background-color:var(--saas-success);border-radius:1px;z-index:2;pointer-events:none}.saas-stabs[data-draggable=true] .stabs-nav-item:not(.stabs-nav-item__disabled){cursor:grab}.saas-stabs[data-draggable=true] .stabs-nav-item:not(.stabs-nav-item__disabled):active{cursor:grabbing}.stabs-nav-item__chosen{opacity:.8}.stabs-nav-item__dragging{opacity:.3!important;transform:scale(.95)!important}.stabs-nav-item__ghost{background:var(--saas-gray-200);cursor:grabbing!important}.stabs-nav-item__fallback{background:var(--saas-gray-200);cursor:grabbing}.stabs-nav-item__disabled{color:var(--saas-gray-400);cursor:not-allowed!important;transform:none!important}.stabs-nav-item__disabled:hover{transform:none!important}.sortable-drag{opacity:.3}.sortable-ghost{opacity:.4;background:#f5f7fa}.saas-segmented{padding:1px;border:1px solid var(--saas-gray-border);background-color:#fff;width:fit-content}.saas-segmented .is-actived,.saas-segmented-slider{background-color:var(--saas-success-100);border-radius:4px}.saas-segmented-slider{position:absolute;top:1px;left:1px;height:calc(100% - 2px);transition:all .3s cubic-bezier(.4,0,.2,1);z-index:1}.saas-segmented-item{position:relative;padding:6px 8px;line-height:1;cursor:pointer;z-index:2;transition:color .3s ease}.saas-segmented-item__icon,.saas-segmented-item__text{display:inline-block;line-height:1;color:var(--saas-gray-500);font-size:14px}.saas-segmented .is-actived{font-weight:500}.saas-segmented .is-actived .saas-segmented-item__icon,.saas-segmented .is-actived .saas-segmented-item__text{color:var(--saas-success)}.saas-segmented__animating .is-actived{background-color:transparent}.saas-segmented-item__with-icon{display:flex;align-items:center;justify-content:center;gap:4px}.saas-segmented-item__icon-only{display:flex;align-items:center;justify-content:center;min-width:32px}.saas-segmented-item__with-icon .saas-segmented-item__icon,.saas-segmented-item__with-icon .saas-segmented-item__text{vertical-align:middle}.el-dropdown-menu .saas-segmented-dropdown-item{display:flex;justify-content:space-between;align-items:center;padding:0 8px}.el-dropdown-menu .saas-segmented-dropdown-item__text{flex:1}.saas-tooltip-wrap__content{display:inline;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;word-break:break-all}.saas-tooltip-wrap__content-more{word-break:break-all;text-overflow:ellipsis;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;-webkit-line-clamp:2;white-space:normal}.saas-tooltip-wrap__text{font-weight:inherit;font-size:inherit}.saas-tooltip-wrap__text-inherit{color:inherit}.saas-currency-select .saas-currency-select-text,.saas-currency.saas-text-mode .saas-currency-text{display:inline-block;line-height:32px;color:#606266}.saas-currency{width:100%}.saas-currency-select{width:100%}.saas-currency-select .currency-input-wrapper{display:flex;align-items:center;gap:0;width:100%}.saas-currency-select .currency-input-wrapper .currency-input-item .el-input,.saas-currency-select .currency-input-wrapper .currency-input-item .el-select,.saas-currency-select .currency-input-wrapper .currency-select-item .el-input,.saas-currency-select .currency-input-wrapper .currency-select-item .el-select{width:100%}.saas-currency-select .currency-input-wrapper .currency-input-item{flex:1;min-width:0}.saas-currency-select .currency-input-wrapper .currency-input-item.field-first .el-input__inner{border-radius:4px 0 0 4px}.saas-currency-select .currency-input-wrapper .currency-input-item.field-first .el-input.is-focus .el-input__inner{border-right-color:#dcdfe6}.saas-currency-select .currency-input-wrapper .currency-select-item{width:80px;flex-shrink:0}.saas-currency-select .currency-input-wrapper .currency-select-item.field-last .el-input__inner{border-radius:0 4px 4px 0;border-left:none}.saas-currency-select .currency-input-wrapper .currency-select-item.field-last .el-input.is-focus .el-input__inner,.saas-currency-select .currency-input-wrapper .currency-select-item.field-last .el-input:hover .el-input__inner{border-left:1px solid #dcdfe6}.saas-currency-select .currency-input-wrapper .currency-select-item.field-last .el-input.is-focus .el-input__inner{border-color:var(--saas-success)}.saas-currency-select .currency-input-wrapper .currency-input-item .el-input-group--prepend .el-input__inner{border-left:none}.saas-currency-select .currency-input-wrapper .currency-input-item .el-input-group__prepend{border-radius:4px 0 0 4px;border-right:none}.saas-alert{display:flex;padding:9px 16px;border-radius:6px;background:#fff;font-size:14px;color:var(--saas-gray-600)}.saas-alert-icon{font-size:16px;margin-right:8px;display:flex;align-items:center;color:var(--saas-warning-600)}.saas-alert-main{flex:1}.saas-alert-title{display:flex;align-items:center;justify-content:space-between;line-height:22px}.saas-alert-title .title-append{margin-left:8px;flex-shrink:0}.saas-alert-content{color:var(--saas-gray-600)}.saas-alert.is-success{background-color:var(--saas-success-50);border:1px solid transparent;border-color:color-mix(in srgb,var(--saas-success-600) 50%,transparent)}.saas-alert.is-success .el-button--text,.saas-alert.is-success .saas-alert-icon{color:var(--saas-success-600)}.saas-alert.is-success .el-button--text:hover{color:var(--saas-success-400)}.saas-alert.is-warning{background-color:var(--saas-warning-50);border:1px solid transparent;border-color:color-mix(in srgb,var(--saas-warning-600) 50%,transparent)}.saas-alert.is-warning .el-button--text,.saas-alert.is-warning .saas-alert-icon{color:var(--saas-warning-600)}.saas-alert.is-warning .el-button--text:hover{color:var(--saas-warning-400)}.saas-alert.is-danger{background-color:var(--saas-danger-50);border:1px solid transparent;border-color:color-mix(in srgb,var(--saas-danger-600) 50%,transparent)}.saas-alert.is-danger .el-button--text,.saas-alert.is-danger .saas-alert-icon{color:var(--saas-danger-600)}.saas-alert.is-danger .el-button--text:hover{color:var(--saas-danger-400)}.saas-alert.is-primary{background-color:var(--saas-primary-50);border:1px solid transparent;border-color:color-mix(in srgb,var(--saas-primary-600) 50%,transparent)}.saas-alert.is-primary .el-button--text,.saas-alert.is-primary .saas-alert-icon{color:var(--saas-primary-600)}.saas-alert.is-primary .el-button--text:hover{color:var(--saas-primary-400)}.saas-alert.is-message{padding:0}.saas-empty-data{text-align:center;display:flex;align-items:center;justify-content:center;min-height:150px}.saas-empty-text{font-weight:400;font-size:14px;color:#a1a5b2;line-height:16px;margin-top:4px}.saas-empty-img{width:100px}.saas-item-list__item{line-height:20px;color:var(--saas-gray-600);font-size:14px;padding:6px 8px;border-radius:6px;margin-bottom:4px;cursor:pointer}.saas-item-list__item.active,.saas-item-list__item:hover{background-color:var(--saas-gray-50)}.saas-item-list--custom .saas-item-list__item{padding:0;margin:0;cursor:inherit}.saas-item-list--custom .saas-item-list__item:hover{background-color:transparent}.saas-item-list__item-label{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.saas-tag{display:inline-block;white-space:nowrap;border-radius:4px}.saas-tag.el-tag--mini{line-height:18px}.saas-tag.saas-tag-success{color:var(--saas-success-600);background-color:var(--saas-success-50);border:1px solid transparent;border-color:var(--saas-success-600)}.saas-tag.saas-tag-warning{color:var(--saas-warning-600);background-color:var(--saas-warning-50);border:1px solid transparent;border-color:var(--saas-warning-600)}.saas-tag.saas-tag-danger{color:var(--saas-danger-600);background-color:var(--saas-danger-50);border:1px solid transparent;border-color:var(--saas-danger-600)}.saas-tag.saas-tag-primary{color:var(--saas-primary-600);background-color:var(--saas-primary-50);border:1px solid transparent;border-color:var(--saas-primary-600)}.saas-tag.saas-tag-info{color:var(--saas-gray-900);background-color:var(--saas-gray-50);border:1px solid transparent;border-color:var(--saas-gray-200)}.saas-tag.saas-tag-draft{color:var(--saas-gray-400);background-color:#fff;border:1px solid transparent;border-color:var(--saas-gray-200)}.saas-tip{font-size:14px;color:#a1a5b2}
1
+ @charset "UTF-8";.saas-card,.saas-dialog .el-dialog{border-radius:6px}.saas-dialog-footer,.saas-drawer-footer{height:auto;text-align:right}.saas-dialog .el-dialog__body{padding:0}.saas-dialog .el-dialog__header{border-bottom:1px solid #dbdee7;padding:12px 16px}.saas-dialog .el-dialog__footer{padding:8px 16px;border-top:1px solid #dbdee7}.saas-dialog .el-dialog__headerbtn{top:16px}.content-no-padding .saas-dialog-content{padding:0}.saas-dialog-auto{max-height:calc(85vh - 100px);overflow-y:auto}.saas-dialog-content{padding:16px}.saas-drawer .el-drawer__body{display:flex;position:relative}.saas-drawer .el-drawer__header{padding:12px 16px}.saas-drawer .el-drawer.rtl{border-radius:8px 0 0 8px}.saas-drawer-content{flex:1;padding:16px;overflow-y:auto}.saas-drawer-footer{padding:12px 16px;border-top:1px #efefef solid}.saas-detail{background:#fff;height:100%;display:flex;flex-direction:column;position:relative}.saas-detail-top{flex:1;overflow-y:auto;overflow-x:auto}.saas-detail-header{display:flex;padding:24px 64px;position:sticky;background:#fff;top:0;z-index:10}.saas-detail-title{display:flex;align-items:center;font-size:16px;font-weight:600;color:#0e1822}.saas-detail-sub{margin-top:8px}.saas-title-line{display:inline-block;width:4px;height:16px;background:#28b86a;margin-right:8px;vertical-align:middle}.saas-detail-backbox{display:flex;align-items:center;position:absolute;left:24px;top:24px}.saas-detail-back{display:flex;align-items:center;border-radius:50%;border:1px solid #dbdee7;width:24px;height:24px;justify-content:center;color:#a1a5b2;cursor:pointer}.saas-detail-back:hover{background:#f7f9fb}.saas-detail-content{padding:0 64px 24px;flex:1}.saas-detail-footer{padding:16px 24px;background:#fff;text-align:center;box-shadow:8px 0 12px 0 rgba(161,165,178,.1);border-radius:0;border-top:1px solid #dbdee7;z-index:5}.saas-unit-danger,.saas-unit-deafault,.saas-unit-info,.saas-unit-primary,.saas-unit-success,.saas-unit-warning{width:8px;height:8px;border-radius:2px}.saas-unit{display:flex;align-items:center;gap:6px;white-space:nowrap;color:#0e1822;font-size:14px}.saas-unit-deafault,.saas-unit-primary{background-color:#1890ff}.saas-unit-info{background-color:#a1a5b2}.saas-unit-success{background-color:#2ecc71}.saas-unit-danger{background-color:#ff3b30}.saas-unit-warning{background-color:#f90}.saas-unit-link{text-decoration:underline;cursor:pointer}.saas-unit-link:hover{color:#1890ff}.saas-unit-text{width:auto;flex:1;text-overflow:ellipsis;overflow:hidden}.saas-card{border:1px solid #dbdee7;margin-bottom:24px}.saas-card.hidden-card{border-bottom:none}.saas-card.hidden-card .saas-card-header{border-radius:6px}.saas-card__action{flex-shrink:0;width:auto}.saas-card-header{display:flex;background:#f7f9fb;border-radius:6px 6px 0 0;border-bottom:1px solid #dbdee7;font-weight:500;font-size:16px;color:#0e1822;padding:8px 16px;align-items:center}.saas-card-title{flex:1}.saas-card-title .el-button--text{padding:0}.saas-card-content{padding:16px}.saas-card-icon{cursor:pointer;margin-right:8px}.saas-group{display:flex;overflow-x:auto;min-height:50px;padding-bottom:4px}.saas-group div{box-sizing:border-box}.saas-group::-webkit-scrollbar{width:3px;height:4px;background-color:#fff;cursor:pointer}.saas-group::-webkit-scrollbar-thumb{background:rgba(144,147,153,.2)}.saas-group::-webkit-scrollbar-thumb:hover{background:rgba(144,147,153,.5)}.saas-group::-webkit-scrollbar-track{background-color:#fff}.saas-sort-group{display:flex;border-radius:6px;margin-right:8px;background:#f7f9fb}.saas-sort-item{width:136px;background:#f7f9fb;border:1px solid #f7f9fb;text-align:center;padding:8px 4px;position:relative;cursor:pointer;border-radius:6px;display:flex;flex-direction:column;align-items:center;justify-content:center}.saas-sort-item .title{font-weight:600;font-size:16px;color:#0e1822;line-height:24px}.saas-sort-item .text{font-size:14px;color:#7b8089;line-height:22px;max-width:100%}.saas-sort-item img{display:none;position:absolute;width:16px;right:-1px;top:-1px}.saas-sort-item.active{border:1px solid #28b86a;border-radius:6px;background:#f4fbf8}.s-message-box-dialog,.saas-page-table{border-radius:8px}.saas-sort-item.active .title{color:#28b86a}.saas-sort-item.active img{display:block}.saas-group-title{font-size:14px;color:#0e1822;margin-bottom:8px}.s-message-box-dialog-wrapper{display:flex;align-items:center}.s-message-box-dialog-wrapper .s-message-box-dialog.el-dialog{margin-top:0!important}.s-message-box-dialog .el-dialog__header{padding:24px 24px 0}.s-message-box-dialog .el-dialog__body{padding:0 24px}.s-message-box-dialog .el-dialog__footer{padding:0 24px 24px}.s-message-box-dialog__title{padding-right:8px}.message-box__body{padding-left:32px}.message-box__header{font-weight:600;font-size:16px;color:#333;line-height:24px;margin-bottom:8px}.message-box__content{margin-bottom:24px;color:#5c616a}.message-box__footer{display:flex;justify-content:flex-end}.message-box__input{width:100%;padding:6px}.message-box_icon{color:#f90;display:flex;font-size:24px}.message-box_main{display:flex;gap:8px}.message-box_right{flex:1;width:0}.saas-page-table{background:#fff;height:calc(100% - 16px);overflow-y:auto;overflow-x:hidden;display:flex;flex-direction:column;position:relative;padding:16px}.saas-page-table__header{flex-shrink:0}.saas-page-table__menu{display:flex;align-items:center;font-size:16px;font-weight:600;color:#0e1822;margin-bottom:16px}.saas-page-table__menu.hasClose{font-weight:400}.saas-page-table__back-title{margin-right:16px}.saas-page-table__title-line{height:14px;width:1px;background:#dbdee7;margin-right:16px}.saas-page-table--hasButton .saas-page-table__footer{padding-top:16px;padding-bottom:16px;margin:0 -16px -16px;text-align:center;box-shadow:8px 0 12px 0 rgba(161,165,178,.1);border-radius:0;border-top:1px solid #dbdee7}.saas-page-table--hasButton .saas-page-content__box{overflow-y:auto}.saas-page-table__sub{margin-top:8px}.saas-page-header__line{display:inline-block;width:4px;height:16px;background:#28b86a;margin-right:8px;vertical-align:middle}.saas-page-table__backbox{display:flex;align-items:center;top:24px}.saas-page-table__back,.saas-steptop-btn{align-items:center;display:flex}.saas-page-table__back{border-radius:50%;border:1px solid #dbdee7;width:24px;height:24px;justify-content:center;color:#a1a5b2;cursor:pointer;margin-right:8px}.saas-field-group .saas-field-group-item.saas-field-single .el-input-number__inner,.saas-field-group .saas-field-group-item.saas-field-single .el-input__inner,.saas-segmented{border-radius:6px}.saas-page-table__back:hover{background:#f7f9fb}.saas-page-table__title{flex:1;width:0;overflow:hidden;text-overflow:ellipsis}.saas-page-table--form .saas-page-table__content{min-height:auto}.saas-page-table__content{flex:1;min-height:300px}.saas-page-content__box{height:100%}.saas-page-table__footer{flex-shrink:0}.saas-page__button{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap}.saas-table-buttons{display:flex;gap:0 8px;flex-wrap:wrap;align-items:center}.saas-table-buttons .el-button+.el-button{margin-left:0}.saas-table-buttons .smart-More{font-weight:bolder}.saas-container{display:flex;flex-direction:column;height:100%;flex:1}.saas-container-content{flex:1;min-height:300px}.saas-input .el-input-group__append{padding:0;background:#f7f9fb;color:#0e1822}.saas-input .el-textarea.el-input--small.is-disabled.el-input--suffix .el-textarea__inner{color:var(--saas-gray-900)}.saas-input-number,.saas-select-input{display:inline-block;width:100%}.saas-text-mode{display:inline}.saas-cascader{width:100%}.saas-cascader .el-cascader{height:30px;line-height:30px}.saas-cascader .el-cascader__tags{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex-wrap:nowrap;margin-left:4px}.saas-cascader .el-cascader__tags .el-tag{max-width:75%}.saas-cascader .el-cascader__tags .el-cascader__search-input{margin-left:10px}.saas-datepicker{width:100%}.saas-datepicker.saas-text-mode .saas-datepicker-text{color:#606266;line-height:32px}.saas-datepicker .el-date-editor .el-input,.saas-datepicker .saas-date-picker{width:100%}.el-picker-panel__shortcut:hover{color:var(--saas-success-600)}.saas-field-group{display:flex;align-items:center;width:100%;gap:0}.saas-field-group .saas-field-group-separator{flex:none;padding:0 4px;color:#606266;line-height:1}.el-button.icon,.el-button.saas-button-text{padding-left:8px;padding-right:8px}.saas-field-group .saas-field-group-item{flex:1}.saas-field-group .saas-field-group-item .el-input,.saas-field-group .saas-field-group-item .el-input-number,.saas-field-group .saas-field-group-item .el-select{width:100%}.saas-field-group:not(.saas-has-separator) .saas-field-group-item.saas-field-first .el-input-number__inner,.saas-field-group:not(.saas-has-separator) .saas-field-group-item.saas-field-first .el-input__inner{border-radius:6px 0 0 6px}.saas-field-group:not(.saas-has-separator) .saas-field-group-item.saas-field-middle .el-input-number__inner,.saas-field-group:not(.saas-has-separator) .saas-field-group-item.saas-field-middle .el-input__inner{border-radius:0;border-left:none}.saas-field-group:not(.saas-has-separator) .saas-field-group-item.saas-field-last .el-input-number__inner,.saas-field-group:not(.saas-has-separator) .saas-field-group-item.saas-field-last .el-input__inner{border-radius:0 6px 6px 0;border-left:none}.saas-text-mode .saas-field-group-item{flex:0;width:auto;max-width:50%}.saas-text-mode .saas-field-first{margin-right:4px}.el-button.saas-button-text{display:inline-flex;align-items:center;outline:0;background-color:transparent}.el-button.saas-button-mode__link{padding:0}.el-button.saas-button-text:focus,.el-button.saas-button-text:hover{background-color:#f7f9fb}.no-gap>.el-button.saas-button-text{margin:0}.saas-button.saas-button__icon{padding-right:8px;padding-left:8px}.saas-button-border__primary{border-color:var(--saas-success-600);color:var(--saas-success-600)}.saas-button-border__primary:hover{background-color:var(--saas-success-50)}.saas-space{display:inline-flex}.saas-space.saas-horizontal{flex-direction:row}.saas-space.saas-vertical{flex-direction:column}.saas-space-item{display:inline-flex}.saas-steps{display:flex;width:100%;font-size:14px;flex-direction:row;align-items:center}.saas-steps .saas-steps-item{position:relative;flex:1;overflow:hidden;white-space:nowrap}.saas-steps.vertical{flex-direction:column}.saas-steps-item:last-child{flex:none}.saas-steps-item-tail{position:absolute;top:16px;left:16px;width:calc(100% - 32px);height:1px;background-color:#f0f0f0}.vertical .saas-steps-item-tail{width:1px;height:calc(100% - 32px);left:16px;top:32px}.saas-steps-item-finish .saas-steps-item-tail{background-color:#1890ff}.saas-steps-item-icon{width:24px;height:24px;margin-right:8px;background:#fff;border:1px solid #dbdee7;border-radius:50%;line-height:22px;text-align:center;font-size:14px;color:#dbdee7;display:inline-block}.saas-steps-item-active .saas-steps-item-icon{border-color:#28b86a;background-color:#28b86a;color:#fff}.saas-steps-item-finish .saas-steps-item-icon{border-color:#28b86a;color:#28b86a;line-height:25px}.saas-steps-custom-icon{font-size:20px}.saas-steps-item-content{position:relative;display:inline-block;vertical-align:top}.saas-steps-item-title{color:#7c808a;font-weight:400;overflow:hidden}.saas-steps-item-active .saas-steps-item-title,.saas-steps-item-finish .saas-steps-item-title{color:#0e1822}.saas-steps-item-description{color:rgba(0,0,0,.45);font-size:14px;margin-top:4px}.anticon{display:inline-block;width:1em;height:1em;fill:currentColor}.saas-steps-item-title:after{background:#dbdde7;content:"";display:block;height:1px;left:100%;position:absolute;top:12px;width:9999px;margin-left:16px}.saas-steps-item:not(:first-of-type){padding-left:16px}.saas-steps-item:last-of-type .saas-steps-item-title:after{content:"";display:none}.saas-stabs{width:100%;position:relative}.saas-stabs-container{display:flex;align-items:flex-end;justify-content:space-between;width:100%;position:relative}.saas-segmented,.saas-stabs-nav{display:inline-flex;position:relative}.saas-stabs-container--border{border-bottom:1px solid #e4e6ed}.saas-stabs-scroll-container{flex:1;min-width:0;overflow:hidden;position:relative}.saas-stabs-nav{align-items:center;padding:0 0 8px;overflow-x:auto;overflow-y:hidden;white-space:nowrap;min-width:100%;min-height:32px;scrollbar-width:none;-ms-overflow-style:none}.saas-stabs-extra,.saas-stabs-scroll-btn{align-items:center;padding-bottom:8px;display:flex}.saas-stabs-nav::-webkit-scrollbar{display:none}.saas-stabs-scroll-btn{justify-content:center;width:32px;height:32px;background:#fff;cursor:pointer;color:#666;font-size:14px;transition:all .3s ease;flex-shrink:0;z-index:2}.saas-stabs-scroll-btn:hover{color:var(--saas-success)}.saas-stabs-scroll-btn:active{transform:scale(.95)}.saas-stabs-scroll-btn--left{margin-right:8px}.saas-stabs-scroll-btn--right{margin-left:8px}.saas-stabs-extra{margin-left:16px;flex-shrink:0}.stabs-nav-item{display:flex;align-items:center;cursor:pointer;color:var(--saas-gray-600);font-size:14px;white-space:nowrap;flex-shrink:0;user-select:none;transition:transform .2s ease,opacity .2s ease}.stabs-nav-item:hover,.stabs-nav-item__active{color:var(--saas-success)}.stabs-nav-item__active{font-weight:600}.stabs-nav-item__active:hover{background-color:transparent}.stabs-nav-item__disabled:hover{color:var(--saas-gray-400);background-color:transparent}.stabs-nav-item-text{height:22px}.stabs-nav-indicator{position:absolute;bottom:0;left:0;height:2px;background-color:var(--saas-success);border-radius:1px;z-index:2;pointer-events:none}.saas-stabs[data-draggable=true] .stabs-nav-item:not(.stabs-nav-item__disabled){cursor:grab}.saas-stabs[data-draggable=true] .stabs-nav-item:not(.stabs-nav-item__disabled):active{cursor:grabbing}.stabs-nav-item__chosen{opacity:.8}.stabs-nav-item__dragging{opacity:.3!important;transform:scale(.95)!important}.stabs-nav-item__ghost{background:var(--saas-gray-200);cursor:grabbing!important}.stabs-nav-item__fallback{background:var(--saas-gray-200);cursor:grabbing}.stabs-nav-item__disabled{color:var(--saas-gray-400);cursor:not-allowed!important;transform:none!important}.stabs-nav-item__disabled:hover{transform:none!important}.sortable-drag{opacity:.3}.sortable-ghost{opacity:.4;background:#f5f7fa}.saas-segmented{padding:1px;border:1px solid var(--saas-gray-border);background-color:#fff;width:fit-content}.saas-segmented .is-actived,.saas-segmented-slider{background-color:var(--saas-success-100);border-radius:4px}.saas-segmented-slider{position:absolute;top:1px;left:1px;height:calc(100% - 2px);transition:all .3s cubic-bezier(.4,0,.2,1);z-index:1}.saas-segmented-item{position:relative;padding:6px 8px;line-height:1;cursor:pointer;z-index:2;transition:color .3s ease}.saas-segmented-item__icon,.saas-segmented-item__text{display:inline-block;line-height:1;color:var(--saas-gray-500);font-size:14px}.saas-segmented .is-actived{font-weight:500}.saas-segmented .is-actived .saas-segmented-item__icon,.saas-segmented .is-actived .saas-segmented-item__text{color:var(--saas-success)}.saas-segmented__animating .is-actived{background-color:transparent}.saas-segmented-item__with-icon{display:flex;align-items:center;justify-content:center;gap:4px}.saas-segmented-item__icon-only{display:flex;align-items:center;justify-content:center;min-width:32px}.saas-segmented-item__with-icon .saas-segmented-item__icon,.saas-segmented-item__with-icon .saas-segmented-item__text{vertical-align:middle}.el-dropdown-menu .saas-segmented-dropdown-item{display:flex;justify-content:space-between;align-items:center;padding:0 8px}.el-dropdown-menu .saas-segmented-dropdown-item__text{flex:1}.saas-tooltip-wrap__content{display:inline;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;word-break:break-word;overflow-wrap:break-word}.saas-tooltip-wrap__content-more{word-break:break-word;text-overflow:ellipsis;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;-webkit-line-clamp:2;white-space:normal}.saas-tooltip-wrap__text{font-weight:inherit;font-size:inherit}.saas-tooltip-wrap__text-inherit{color:inherit}.saas-currency-select .saas-currency-select-text,.saas-currency.saas-text-mode .saas-currency-text{display:inline-block;line-height:32px;color:#606266}.saas-currency{width:100%}.saas-currency-select{width:100%}.saas-currency-select .currency-input-wrapper{display:flex;align-items:center;gap:0;width:100%}.saas-currency-select .currency-input-wrapper .currency-input-item .el-input,.saas-currency-select .currency-input-wrapper .currency-input-item .el-select,.saas-currency-select .currency-input-wrapper .currency-select-item .el-input,.saas-currency-select .currency-input-wrapper .currency-select-item .el-select{width:100%}.saas-currency-select .currency-input-wrapper .currency-input-item{flex:1;min-width:0}.saas-currency-select .currency-input-wrapper .currency-input-item.field-first .el-input__inner{border-radius:4px 0 0 4px}.saas-currency-select .currency-input-wrapper .currency-input-item.field-first .el-input.is-focus .el-input__inner{border-right-color:#dcdfe6}.saas-currency-select .currency-input-wrapper .currency-select-item{width:80px;flex-shrink:0}.saas-currency-select .currency-input-wrapper .currency-select-item.field-last .el-input__inner{border-radius:0 4px 4px 0;border-left:none}.saas-currency-select .currency-input-wrapper .currency-select-item.field-last .el-input.is-focus .el-input__inner,.saas-currency-select .currency-input-wrapper .currency-select-item.field-last .el-input:hover .el-input__inner{border-left:1px solid #dcdfe6}.saas-currency-select .currency-input-wrapper .currency-select-item.field-last .el-input.is-focus .el-input__inner{border-color:var(--saas-success)}.saas-currency-select .currency-input-wrapper .currency-input-item .el-input-group--prepend .el-input__inner{border-left:none}.saas-currency-select .currency-input-wrapper .currency-input-item .el-input-group__prepend{border-radius:4px 0 0 4px;border-right:none}.saas-alert{display:flex;padding:9px 16px;border-radius:6px;background:#fff;font-size:14px;color:var(--saas-gray-600)}.saas-alert-icon{font-size:16px;margin-right:8px;display:flex;align-items:center;color:var(--saas-warning-600)}.saas-alert-main{flex:1}.saas-alert-title{display:flex;align-items:center;justify-content:space-between;line-height:22px}.saas-alert-title .title-append{margin-left:8px;flex-shrink:0}.saas-alert-content{color:var(--saas-gray-600)}.saas-alert.is-success{background-color:var(--saas-success-50);border:1px solid transparent;border-color:color-mix(in srgb,var(--saas-success-600) 50%,transparent)}.saas-alert.is-success .el-button--text,.saas-alert.is-success .saas-alert-icon{color:var(--saas-success-600)}.saas-alert.is-success .el-button--text:hover{color:var(--saas-success-400)}.saas-alert.is-warning{background-color:var(--saas-warning-50);border:1px solid transparent;border-color:color-mix(in srgb,var(--saas-warning-600) 50%,transparent)}.saas-alert.is-warning .el-button--text,.saas-alert.is-warning .saas-alert-icon{color:var(--saas-warning-600)}.saas-alert.is-warning .el-button--text:hover{color:var(--saas-warning-400)}.saas-alert.is-danger{background-color:var(--saas-danger-50);border:1px solid transparent;border-color:color-mix(in srgb,var(--saas-danger-600) 50%,transparent)}.saas-alert.is-danger .el-button--text,.saas-alert.is-danger .saas-alert-icon{color:var(--saas-danger-600)}.saas-alert.is-danger .el-button--text:hover{color:var(--saas-danger-400)}.saas-alert.is-primary{background-color:var(--saas-primary-50);border:1px solid transparent;border-color:color-mix(in srgb,var(--saas-primary-600) 50%,transparent)}.saas-alert.is-primary .el-button--text,.saas-alert.is-primary .saas-alert-icon{color:var(--saas-primary-600)}.saas-alert.is-primary .el-button--text:hover{color:var(--saas-primary-400)}.saas-alert.is-message{padding:0}.saas-empty-data{text-align:center;display:flex;align-items:center;justify-content:center;min-height:150px}.saas-empty-text{font-weight:400;font-size:14px;color:#a1a5b2;line-height:16px;margin-top:4px}.saas-empty-img{width:100px}.saas-item-list__item{line-height:20px;color:var(--saas-gray-600);font-size:14px;padding:6px 8px;border-radius:6px;margin-bottom:4px;cursor:pointer}.saas-item-list__item.active,.saas-item-list__item:hover{background-color:var(--saas-gray-50)}.saas-item-list--custom .saas-item-list__item{padding:0;margin:0;cursor:inherit}.saas-item-list--custom .saas-item-list__item:hover{background-color:transparent}.saas-item-list__item-label{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.saas-tag{display:inline-block;white-space:nowrap;border-radius:4px}.saas-tag.el-tag--mini{line-height:18px}.saas-tag.saas-tag-success{color:var(--saas-success-600);background-color:var(--saas-success-50);border:1px solid transparent;border-color:var(--saas-success-600)}.saas-tag.saas-tag-warning{color:var(--saas-warning-600);background-color:var(--saas-warning-50);border:1px solid transparent;border-color:var(--saas-warning-600)}.saas-tag.saas-tag-danger{color:var(--saas-danger-600);background-color:var(--saas-danger-50);border:1px solid transparent;border-color:var(--saas-danger-600)}.saas-tag.saas-tag-primary{color:var(--saas-primary-600);background-color:var(--saas-primary-50);border:1px solid transparent;border-color:var(--saas-primary-600)}.saas-tag.saas-tag-info{color:var(--saas-gray-900);background-color:var(--saas-gray-50);border:1px solid transparent;border-color:var(--saas-gray-200)}.saas-tag.saas-tag-draft{color:var(--saas-gray-400);background-color:#fff;border:1px solid transparent;border-color:var(--saas-gray-200)}.saas-tip{font-size:14px;color:#a1a5b2}