br-dionysus 1.3.2 → 1.4.0

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/README.md CHANGED
@@ -725,7 +725,7 @@ onMounted(() => {
725
725
 
726
726
  <template>
727
727
  <div class="g-m-select-table-box">
728
- <m-select-table
728
+ <m-select-table-v1
729
729
  v-model="code"
730
730
  placeholder="请选择单号"
731
731
  :remoteMethod="remoteMethod"
@@ -734,7 +734,7 @@ onMounted(() => {
734
734
  focusShow
735
735
  clearable
736
736
  @clear="clearCall"
737
- ></m-select-table>
737
+ ></m-select-table-v1>
738
738
  </div>
739
739
  </template>
740
740
 
@@ -2088,3 +2088,1950 @@ const list = ref<{ name: string, className: string }[]>([
2088
2088
 
2089
2089
 
2090
2090
 
2091
+
2092
+ + moneyFormat([](#))
2093
+
2094
+
2095
+ 对话框
2096
+ =================
2097
+
2098
+ ### 1) 基础用法
2099
+
2100
+
2101
+
2102
+ ```html
2103
+
2104
+ <template>
2105
+ <div>
2106
+ <p>弹窗</p>
2107
+ <el-button @click="dialogVisible = true">默认</el-button>
2108
+ <m-dialog
2109
+ v-model="dialogVisible"
2110
+ draggable
2111
+ title="这是标题"
2112
+ resize
2113
+ @resized="test"
2114
+ @opened="opened"
2115
+ >
2116
+ <div class="u-box j-box">
2117
+ <p
2118
+ class="u-table j-table"
2119
+ :style="'height: ' + height + 'px'"
2120
+ >
2121
+ 这是一条消息{{ height }}
2122
+ </p>
2123
+ <div>这是干扰元素</div>
2124
+ <div class="u-pa">这是绝对<br/>定位元素</div>
2125
+ </div>
2126
+ <template #footer>
2127
+ <div class="dialog-footer">
2128
+ <el-button @click="dialogVisible = false">取消</el-button>
2129
+ <el-button type="primary" @click="dialogVisible = false">
2130
+ 确认
2131
+ </el-button>
2132
+ </div>
2133
+ </template>
2134
+ </m-dialog>
2135
+ </div>
2136
+ </template>
2137
+
2138
+ <script setup lang="ts">
2139
+ import { ref } from 'vue'
2140
+ import { MDialog } from 'packages/MDialog'
2141
+ import { useRemainingSpace } from 'packages/index'
2142
+
2143
+ const dialogVisible = ref<boolean>(false)
2144
+
2145
+ const test = (size: { width: number, height: number }) => {
2146
+ // console.log('size', size)
2147
+ }
2148
+
2149
+ const { height, init } = useRemainingSpace('j-box', 'j-table')
2150
+ const opened = () => {
2151
+ init()
2152
+ }
2153
+ </script>
2154
+
2155
+ <style scoped lang="scss">
2156
+ .u-box {
2157
+ //position: relative;
2158
+ display: flex;
2159
+ width: 100%;
2160
+ height: 100%;
2161
+ border: 1px solid #000;
2162
+ flex-direction: column;
2163
+
2164
+ .u-table {
2165
+ border: 1px solid red;
2166
+ box-sizing: border-box;
2167
+ }
2168
+
2169
+ .u-pa {
2170
+ position: absolute;
2171
+ bottom: 0;
2172
+ right: 0;
2173
+ }
2174
+ }
2175
+ </style>
2176
+
2177
+
2178
+ ```
2179
+
2180
+ ### 2) Attributes
2181
+
2182
+ | 参数 | 说明 | 类型 | 可选值 | 默认值 |
2183
+ |--------|:-------------:|:-------:|:---:|:-----------------------------------------------:|
2184
+ | resize | 是否开启拖拽改变大小 | boolean | - | false |
2185
+ | 其余参数 | 参考el官网的dialog | - | - | https://element-plus.org/zh-CN/component/dialog |
2186
+
2187
+ ### 2) Events
2188
+
2189
+ | 方法名 | 说明 | 参数 |
2190
+ |---------|:-------------:|:------------------------------------------------------:|
2191
+ | resized | 窗口大小改变完成事件 | (contentsSize: { width: number, height: number })内容物大小 |
2192
+ | 其余参数 | 参考el官网的dialog | https://element-plus.org/zh-CN/component/dialog |
2193
+
2194
+
2195
+
2196
+
2197
+ 筛选
2198
+ =================
2199
+
2200
+ ### 1) 基础用法
2201
+
2202
+
2203
+
2204
+ ```html
2205
+
2206
+ <template>
2207
+ <div class="g-demo-m-inline-box">
2208
+ <m-inline size="small">
2209
+ <template #inlineBtn>
2210
+ <el-button
2211
+ type="primary"
2212
+ size="small"
2213
+ icon="Plus"
2214
+ >
2215
+ 新增
2216
+ </el-button>
2217
+ <el-button
2218
+ type="success"
2219
+ size="small"
2220
+ icon="Edit"
2221
+ >
2222
+ 编辑
2223
+ </el-button>
2224
+ <el-button
2225
+ type="warning"
2226
+ size="small"
2227
+ icon="Delete"
2228
+ >
2229
+ 删除
2230
+ </el-button>
2231
+ </template>
2232
+ <template #default>
2233
+ <el-form
2234
+ :model="formInline"
2235
+ labelWidth="80px"
2236
+ :showMessage="false"
2237
+ size="small"
2238
+ @submit.prevent
2239
+ data-box
2240
+ >
2241
+ <el-form-item
2242
+ label="编码"
2243
+ prop="code"
2244
+ data-item
2245
+ >
2246
+ <el-input
2247
+ v-model="formInline.code"
2248
+ clearable
2249
+ placeholder="请输入编码"
2250
+ >
2251
+ </el-input>
2252
+ </el-form-item>
2253
+ <el-form-item
2254
+ label="角色名"
2255
+ prop="name"
2256
+ data-item
2257
+ >
2258
+ <el-input
2259
+ v-model="formInline.name"
2260
+ clearable
2261
+ placeholder="请输入角色名"
2262
+ >
2263
+ </el-input>
2264
+ </el-form-item>
2265
+ <el-form-item
2266
+ label="时间"
2267
+ prop="time"
2268
+ data-item
2269
+ >
2270
+ <el-input
2271
+ v-model="formInline.time"
2272
+ clearable
2273
+ placeholder="请输入时间"
2274
+ >
2275
+ </el-input>
2276
+ </el-form-item>
2277
+ <el-form-item
2278
+ label="编码"
2279
+ prop="code"
2280
+ data-item
2281
+ >
2282
+ <el-input
2283
+ v-model="formInline.code"
2284
+ clearable
2285
+ placeholder="请输入编码"
2286
+ >
2287
+ </el-input>
2288
+ </el-form-item>
2289
+ <el-form-item
2290
+ label="角色名"
2291
+ prop="name"
2292
+ data-item
2293
+ >
2294
+ <el-input
2295
+ v-model="formInline.name"
2296
+ clearable
2297
+ placeholder="请输入角色名"
2298
+ >
2299
+ </el-input>
2300
+ </el-form-item>
2301
+ <el-form-item
2302
+ label="时间"
2303
+ prop="time"
2304
+ data-item
2305
+ >
2306
+ <el-input
2307
+ v-model="formInline.time"
2308
+ clearable
2309
+ placeholder="请输入时间"
2310
+ >
2311
+ </el-input>
2312
+ </el-form-item>
2313
+ </el-form>
2314
+ </template>
2315
+ <template #submitBtn>
2316
+ <el-button
2317
+ type="primary"
2318
+ icon="Search"
2319
+ size="small"
2320
+ >
2321
+ 搜索
2322
+ </el-button>
2323
+ </template>
2324
+ </m-inline>
2325
+ </div>
2326
+ </template>
2327
+
2328
+ <script setup lang="ts">
2329
+ import { reactive } from 'vue'
2330
+
2331
+ // 列表过滤条件表单
2332
+ const formInline = reactive({
2333
+ name: '',
2334
+ code: '',
2335
+ time: ''
2336
+ })
2337
+ </script>
2338
+
2339
+ <style scoped>
2340
+ .g-demo-m-inline-box {
2341
+ max-width: 1000px;
2342
+ }
2343
+ </style>
2344
+
2345
+
2346
+ ```
2347
+
2348
+ ### 2) Attributes
2349
+
2350
+ | 参数 | 说明 | 类型 | 可选值 | 默认值 |
2351
+ |----------|:-----:|:------:|:-------------------------:|:-------:|
2352
+ | minWidth | 列最小宽度 | number | - | 200 |
2353
+ | maxWidth | 列最大宽度 | number | - | 300 |
2354
+ | size | 组件尺寸 | enum | large \| default \| small | default |
2355
+
2356
+ ### 2) Events
2357
+
2358
+ | 方法名 | 说明 | 参数 |
2359
+ |--------|:----------------------:|:---------------:|
2360
+ | switch | 当切换展开与折叠模式时触发,返回当前展开状态 | unfold(boolean) |
2361
+
2362
+
2363
+
2364
+
2365
+ 数值输入框组件
2366
+ =================
2367
+
2368
+ ### 1) 基础用法
2369
+
2370
+
2371
+ ```html
2372
+
2373
+ <template>
2374
+ <div class="g-demo-m-input-number-box">
2375
+ <m-input-number v-model="test"></m-input-number>
2376
+ </div>
2377
+ </template>
2378
+
2379
+ <script setup lang="ts">
2380
+ import { ref } from 'vue'
2381
+
2382
+ const test = ref<number>(0)
2383
+ </script>
2384
+
2385
+ <style scoped>
2386
+ .g-demo-m-input-number-box {
2387
+ max-width: 1000px;
2388
+ }
2389
+ </style>
2390
+
2391
+
2392
+ ```
2393
+
2394
+ ### 2) Attributes
2395
+
2396
+ | 参数 | 说明 | 类型 | 可选值 | 默认值 |
2397
+ |------------------|:-----------------:|:-------:|:------------------:|:---------:|
2398
+ | value / v-model | 绑定值 | number | - | '' |
2399
+ | min | 设置数值输入框允许的最小值 | number | - | -Infinity |
2400
+ | max | 设置数值输入框允许的最大值 | number | - | Infinity |
2401
+ | step | 数值输入框步长 | number | - | 1 |
2402
+ | step-strictly | 是否只能输入 step 的倍数 | boolean | - | true |
2403
+ | size | 数值输入框尺寸 | string | large, small, mini | - |
2404
+ | disabled | 是否禁用数值输入框 | boolean | - | false |
2405
+ | placeholder | 输入框默认 placeholder | string | - | '' |
2406
+ | thousandth-place | 输入框是否显示千分位 | boolean | - | false |
2407
+ | no-border | 是否不要边框 | boolean | - | false |
2408
+ | no-spacing | 不要边距 | boolean | - | false |
2409
+
2410
+ ### 3) Events
2411
+
2412
+ | 方法名 | 说明 | 参数 |
2413
+ |--------|:---------------:|:----------------------:|
2414
+ | change | 绑定值被改变时触发 | currentValue, oldValue |
2415
+ | focus | 当 input 获得焦点时触发 | (event: Event) |
2416
+ | blur | 当 input 失去焦点时触发 | (event: Event) |
2417
+
2418
+
2419
+
2420
+
2421
+ 下拉选择器组件
2422
+ =================
2423
+
2424
+ ### 1) 基础用法
2425
+
2426
+
2427
+
2428
+ ```html
2429
+
2430
+ <template>
2431
+ <div class="g-demo-m-select-box">
2432
+ <m-select
2433
+ v-model="test"
2434
+ checkboxMode
2435
+ multiple
2436
+ >
2437
+ <m-option
2438
+ v-for="item in options"
2439
+ :key="item.value"
2440
+ :label="item.label"
2441
+ :value="item.value"
2442
+ ></m-option>
2443
+ </m-select>
2444
+ </div>
2445
+ </template>
2446
+
2447
+ <script setup lang="ts">
2448
+ import { ref } from 'vue'
2449
+
2450
+ const test = ref<string>('')
2451
+
2452
+ const options: Option[] = [{
2453
+ label: '这是选项一',
2454
+ value: 'a'
2455
+ }, {
2456
+ label: '这是选项二',
2457
+ value: 'b'
2458
+ }]
2459
+ </script>
2460
+
2461
+ <style scoped>
2462
+ .g-demo-m-select-box {
2463
+ max-width: 1000px;
2464
+ }
2465
+ </style>
2466
+
2467
+
2468
+ ```
2469
+
2470
+ ### 2) Attributes
2471
+
2472
+ | 参数 | 说明 | 类型 | 可选值 | 默认值 |
2473
+ |-------------------------------|:---------------------------------------------------------:|:-------:|:---:|:-----:|
2474
+ | value / v-model | 绑定值 | number | - | '' |
2475
+ | checkbox-mode | 是否为复选框模式(只影响样式) | boolean | - | false |
2476
+ | 其他属性同element-plus的el-select组件 | https://element-plus.gitee.io/zh-CN/component/select.html | - | - | - |
2477
+
2478
+
2479
+
2480
+
2481
+ 下拉表格选择器
2482
+ =================
2483
+
2484
+ ### 1) 基础用法
2485
+
2486
+
2487
+
2488
+ ```html
2489
+
2490
+ <template>
2491
+ <div>
2492
+ <p>多选</p>
2493
+ <p>第一个选择器的值: {{ code }}</p>
2494
+ <m-select-table
2495
+ class="u-select"
2496
+ ref="selectRef"
2497
+ v-model="code"
2498
+ placeholder="请选择单号"
2499
+ :tableTitle="commodityOptionsTitle"
2500
+ :options="options"
2501
+ :keywords="{ label: 'ApprovedQtyPU', value: 'DocNo' }"
2502
+ @selected="selected"
2503
+ @selectMultiple="selectMultiple"
2504
+ tableHeight="200"
2505
+ @toPage="toPage"
2506
+ :total="total"
2507
+ scrollbarAlwaysOn
2508
+ filterable
2509
+ remote
2510
+ multiple
2511
+ allowCreate
2512
+ border
2513
+ :remoteMethod="remoteMethod"
2514
+ ></m-select-table>
2515
+ <p>多选单绑定的value为字符串类型</p>
2516
+ <p>第二个选择器的值: {{ code2 }}</p>
2517
+ <m-select-table
2518
+ class="u-select"
2519
+ ref="selectRef"
2520
+ v-model="code2"
2521
+ :name="code2Name"
2522
+ placeholder="请选择单号"
2523
+ :tableTitle="commodityOptionsTitle"
2524
+ :options="options"
2525
+ :keywords="{ label: 'ApprovedQtyPU', value: 'DocNo' }"
2526
+ @selected="selected"
2527
+ @selectMultiple="selectMultiple"
2528
+ tableHeight="200"
2529
+ @toPage="toPage"
2530
+ :total="total"
2531
+ scrollbarAlwaysOn
2532
+ filterable
2533
+ remote
2534
+ multiple
2535
+ border
2536
+ :remoteMethod="remoteMethod"
2537
+ @clear="test"
2538
+ ></m-select-table>
2539
+ <p>单选</p>
2540
+ <p>第三个择器的值: {{ code3 }}</p>
2541
+ <m-select-table
2542
+ class="u-select"
2543
+ ref="selectRef"
2544
+ v-model="code3"
2545
+ placeholder="请选择单号"
2546
+ :tableTitle="commodityOptionsTitle"
2547
+ :options="options"
2548
+ :keywords="{ label: 'ApprovedQtyPU', value: 'DocNo' }"
2549
+ @selected="selected"
2550
+ @selectMultiple="selectMultiple"
2551
+ tableHeight="200"
2552
+ @toPage="toPage"
2553
+ :total="total"
2554
+ scrollbarAlwaysOn
2555
+ filterable
2556
+ remote
2557
+ allowCreate
2558
+ :remoteMethod="remoteMethod"
2559
+ :popupWidth="800"
2560
+ ></m-select-table>
2561
+ <!--<el-select-->
2562
+ <!-- v-model="code2"-->
2563
+ <!-- multiple-->
2564
+ <!--&gt;-->
2565
+ <!-- <el-option-->
2566
+ <!-- v-for="item in options"-->
2567
+ <!-- :key="item.DocNo"-->
2568
+ <!-- :label="item.ApprovedQtyPU"-->
2569
+ <!-- :value="item.DocNo"-->
2570
+ <!-- ></el-option>-->
2571
+ <!--</el-select>-->
2572
+ </div>
2573
+ </template>
2574
+
2575
+ <script setup lang="ts">
2576
+ import { ref, onMounted } from 'vue'
2577
+ import { Page } from 'packages/typings/class'
2578
+
2579
+ const test = () => {
2580
+ console.log('xxx')
2581
+ }
2582
+
2583
+ const commodityOptionsTitle: TableTitle[] = [{
2584
+ prop: 'PRDocType',
2585
+ label: '单据类型'
2586
+ // minWidth: 200
2587
+ }, {
2588
+ prop: 'DocNo',
2589
+ label: '请购单号'
2590
+ // minWidth: 200
2591
+ }, {
2592
+ prop: 'ApprovedQtyPU',
2593
+ // minWidth: 300,
2594
+ label: '名称'
2595
+
2596
+ }, {
2597
+ prop: 'ACCode',
2598
+ label: '货币'
2599
+ // minWidth: 200
2600
+ }]
2601
+ const selectRef: any = ref<HTMLElement | null>(null)
2602
+
2603
+ const code = ref<string | number | Array<string | number>>([])
2604
+ const code2 = ref<string | number | Array<string | number>>('')
2605
+ const code2Name = ref<string | number | Array<string | number>>([])
2606
+ const code3 = ref<string | number | Array<string | number>>('')
2607
+
2608
+ const total = ref(0)
2609
+ const options = ref<any[]>([])
2610
+ const mockData: any[] = []
2611
+ for (let i = 0; i < 1000; i++) {
2612
+ mockData.push({
2613
+ PRDocType: '测试数据' + (i + 1),
2614
+ DocNo: i + 1,
2615
+ ApprovedQtyPU: 'ApprovedQtyPU' + (i + 1),
2616
+ ACCode: 'ACCode'
2617
+ })
2618
+ }
2619
+ const getDataList = (page: Page = new Page(), str: string = '') => {
2620
+ setTimeout(() => {
2621
+ options.value = mockData.filter(item => item.PRDocType.includes(str)).slice(0, page.pageSize)
2622
+ total.value = mockData.length
2623
+ })
2624
+ }
2625
+
2626
+ setTimeout(() => {
2627
+ options.value = [{
2628
+ PRDocType: 'xxxPRDocType1',
2629
+ DocNo: 1,
2630
+ ApprovedQtyPU: 'xxxApprovedQtyPU1',
2631
+ ACCode: 'xxxACCode1'
2632
+ }, {
2633
+ PRDocType: 'xxxPRDocType2',
2634
+ DocNo: 2,
2635
+ ApprovedQtyPU: 'xxxApprovedQtyPU2',
2636
+ ACCode: 'xxxACCode2'
2637
+ }]
2638
+ code.value = [1, 2]
2639
+ code2.value = ''
2640
+ code2Name.value = ['xxxApprovedQtyPU2', 'xxxApprovedQtyPU3', 'xxxApprovedQtyPU4']
2641
+ code3.value = 1
2642
+
2643
+ // setTimeout(() => {
2644
+ // options.value = []
2645
+ // }, 2500)
2646
+ }, 1000)
2647
+
2648
+ const selected = (value: string | number | Array<number | string>) => {
2649
+ // console.log(value)
2650
+ // code.value = value
2651
+ // console.log('selected',value)
2652
+ // // console.log('selected', row)
2653
+ }
2654
+
2655
+ const toPage = (page: Page, str: any) => {
2656
+ getDataList(page, str)
2657
+ }
2658
+ const selectMultiple = (value: string | number | Array<number | string>) => {
2659
+ code.value = value
2660
+ }
2661
+
2662
+ const remoteMethod = async (query: string, page: Page = new Page()) => {
2663
+ await getData(query, page)
2664
+ }
2665
+ const getData = async (query: string, page: any) => {
2666
+ return new Promise<void>((resolve) => {
2667
+ setTimeout(() => {
2668
+ const start = (page.currentPage - 1) * page.pageSize
2669
+ options.value = mockData.filter(item => item.PRDocType.includes(query)).slice(start, start + page.pageSize)
2670
+ total.value = mockData.length
2671
+ resolve()
2672
+ }, 500)
2673
+ })
2674
+ }
2675
+
2676
+ onMounted(() => {
2677
+ getDataList()
2678
+ })
2679
+ // const filterMethod = (searchValue: string, page: Page) => {
2680
+ // // 手动过滤的得 保留一份原始数据
2681
+ // const arr = JSON.parse(JSON.stringify(options.value))
2682
+ // options.value = arr.filter((item: any) => item.ApprovedQtyPU.toString().includes(searchValue))
2683
+ // }
2684
+ </script>
2685
+
2686
+ <style>
2687
+ .u-select {
2688
+ width: 240px;
2689
+ }
2690
+ </style>
2691
+
2692
+
2693
+ ```
2694
+
2695
+ ### 2) Attributes
2696
+
2697
+ | 参数 | 说明 | 类型 | 可选 | 是否必填 | 默认值 |
2698
+ |-------------------|----------------------------------------------------------|-------------------------------------|---------------------------|:----:|---------------------------------|
2699
+ | value / v-model | 绑定值 | number,string, Array<number,string> | - | 否 | '' |
2700
+ | name | 显示值,有值时覆盖所有显示逻辑,直接显示name | number,string, Array<number,string> | - | 否 | '' |
2701
+ | placeholder | 占位符 | string | - | 否 | 请选择 |
2702
+ | disabled | 是否禁用 | boolean | - | 否 | false |
2703
+ | size | 大小 | enum | large \| default \| small | 否 | default |
2704
+ | options | 下拉表的 表内数据,详情见Option接口 | Option[] | - | 否 | [] |
2705
+ | total | 总数量 当有值时,出现分页器 | number | null | 否 | null |
2706
+ | filterMethod | 自定义搜索方法 (使用时必须传递filterable) | Function | null | 否 | null |
2707
+ | filterable | 是否开启筛选 (如果开启但没有传递自定义搜索方法 效果为筛选当前页数据的 keywords[label]) | boolean | - | 否 | false |
2708
+ | remote | 是否使用远程搜索 | boolean | - | 否 | false |
2709
+ | remoteMethod | 自定义远程搜索方法 (使用时必须传递filterable和remote) | Function | - | 否 | {} |
2710
+ | tableTitle | 下拉表的 表头定义,详情见TableTitle接口 | TableTitle[] | - | 否 | [] |
2711
+ | multiple | 是否开启多选 | boolean | - | 否 | false |
2712
+ | keywords | 关键字配置(value-key 配置)映射关键字 | Option | - | 否 | {label: 'label' ,value:'value'} |
2713
+ | reserveSelection | 是否打开翻页多选 需要是多选才有效 | boolean | - | 否 | false |
2714
+ | tableHeight | 表格高度 | string | number | 否 | 200 |
2715
+ | isAffirmBtn | 是否有确认按钮 当使用此按钮时 selected事件无效 需使用selectMultiple事件 | boolean | - | 否 | false |
2716
+ | scrollbarAlwaysOn | 是否常态显示滚动条 | boolean | - | 否 | false |
2717
+ | allowCreate | 是否能够创建条目 | boolean | - | 否 | false |
2718
+ | popupWidth | 弹窗的宽度 | string,number | - | 否 | 500 |
2719
+ | border | 表格边框 | boolean | - | 否 | false |
2720
+
2721
+ #### Options(选项接口)
2722
+
2723
+ | 参数 | 说明 | 类型 | 可选值 | 是否必填 |
2724
+ |---------------------|:---------------------:|:-----------------:|:---:|:----:|
2725
+ | label | 选项的标签,若不设置则默认与value相同 | string | - | 是 |
2726
+ | value | 选项的值 | string \| number | - | 是 |
2727
+ | disabled | 是否禁用该选项 | boolean | - | 否 |
2728
+ | \[propName: string] | 额外字段 | string \| number | - | 否 |
2729
+
2730
+ #### Page (分页对象)
2731
+
2732
+ | 参数 | 说明 | 类型 |
2733
+ |------------------|---------|----------|
2734
+ | total | 总数 | number |
2735
+ | pageSize | 分页大小 | number |
2736
+ | currentPage | 页码 | number |
2737
+ | pageSizesOptions | 分页大小可选项 | number[] |
2738
+
2739
+ ### 3) events
2740
+
2741
+ | 事件名 | 说明 | 回调参数 |
2742
+ |----------------|------------------------------|---------------------------------------------------------------|
2743
+ | selected | 单选或多选之后的回调 | 根据多选和单选的模式不同 返回的也有所区别 单选为 (value,row) 多选为(values[],rows[]) |
2744
+ | toPage | 当没有使用filterMethod时候才会有回调否则没有 | page 表格分页 |
2745
+ | selectMultiple | 多选确认按钮时的回调 配合isAffirmBtn使用 | (values: Array<string \| number>, rows: Option[]) |
2746
+ | clear | 用户点击清空按钮时触发 | - |
2747
+ | removeTag | 多选模式下移除tag时触发 | (tag: any) |
2748
+
2749
+ ### 4) Methods
2750
+
2751
+ | 方法名 | 说明 |
2752
+ |----------------------|--------------------------------------------------------------------------|
2753
+ | defaultBackFillValue | 手动重载反填 使用场景 当前开启多选 并且开启翻页多选的时候 这个时候需要默认反填上值的话 需要赋值之后 延迟调用此方法 其余场景 为默认反填 |
2754
+ | clear | 清空已选择 |
2755
+ | focus | 聚焦下拉框 |
2756
+
2757
+ #### filterMethod
2758
+
2759
+ | 返回值 | 类型 | 说明 |
2760
+ |-------------|--------|--------|
2761
+ | searchValue | string | 返回输入的值 |
2762
+ | Page | Page | 整个分页类 |
2763
+
2764
+ #### remoteMethod
2765
+
2766
+ | 返回值 | 类型 | 说明 |
2767
+ |-------------|--------|--------|
2768
+ | searchValue | string | 返回输入的值 |
2769
+ | Page | Page | 整个分页类 |
2770
+
2771
+
2772
+
2773
+
2774
+ 下拉表格选择器(旧版,只做维护不更新)
2775
+ =================
2776
+
2777
+ ### 1) 基础用法
2778
+
2779
+
2780
+
2781
+ ```html
2782
+
2783
+ <template>
2784
+ <div class="g-m-select-table-box">
2785
+ <m-select-table-v1
2786
+ v-model="code"
2787
+ placeholder="请选择单号"
2788
+ :remoteMethod="remoteMethod"
2789
+ :options="options"
2790
+ :tableTitle="commodityOptionsTitle"
2791
+ focusShow
2792
+ clearable
2793
+ @clear="clearCall"
2794
+ ></m-select-table-v1>
2795
+ </div>
2796
+ </template>
2797
+
2798
+ <script setup lang="ts">
2799
+ import { ref } from 'vue'
2800
+ import { Page } from '../../typings/class'
2801
+
2802
+ const code = ref<string>('')
2803
+ const options = ref<Option[]>()
2804
+ const commodityOptionsTitle: TableTitle[] = [{
2805
+ prop: 'sn',
2806
+ label: '单号'
2807
+ }, {
2808
+ prop: 'fileName',
2809
+ label: '文件名'
2810
+ }, {
2811
+ prop: 'createdUserName',
2812
+ label: '上传者'
2813
+ }, {
2814
+ prop: 'createdTimeStr',
2815
+ label: '上传时间'
2816
+ }]
2817
+
2818
+ const mockData = [{
2819
+ sn: 'SC201564981241',
2820
+ fileName: '测试文件1.zip',
2821
+ createdUserName: '绫波丽',
2822
+ createdTimeStr: '2024-05-06'
2823
+ }, {
2824
+ sn: 'SC201564981242',
2825
+ fileName: '测试文件2.zip',
2826
+ createdUserName: '绫波丽',
2827
+ createdTimeStr: '2024-05-06',
2828
+ disabled: true
2829
+ }, {
2830
+ sn: 'SC201564981243',
2831
+ fileName: '测试文件3.zip',
2832
+ createdUserName: '绫波丽',
2833
+ createdTimeStr: '2024-05-06'
2834
+ }, {
2835
+ sn: 'SC201564981244',
2836
+ fileName: '测试文件4.zip',
2837
+ createdUserName: '绫波丽',
2838
+ createdTimeStr: '2024-05-06'
2839
+ }]
2840
+ const clearCall = (e: any) => {
2841
+ console.log(e)
2842
+ console.log('!@#@#')
2843
+ }
2844
+ const remoteMethod = async (query: string = '', page: Page) => {
2845
+ console.log('page', page)
2846
+ options.value = mockData.map(item => ({
2847
+ label: item.fileName,
2848
+ value: item.sn,
2849
+ sn: item.sn,
2850
+ fileName: item.fileName,
2851
+ createdUserName: item.createdUserName,
2852
+ createdTimeStr: item.createdTimeStr,
2853
+ disabled: item.disabled
2854
+ }))
2855
+ }
2856
+ </script>
2857
+
2858
+ <style lang="scss">
2859
+ </style>
2860
+
2861
+
2862
+ ```
2863
+
2864
+ ### 2) Attributes
2865
+
2866
+ | 参数 | 说明 | 类型 | 可选值 | 默认值 |
2867
+ |-------------------|:------------------------:|:--------:|:--------------------:|:-------:|
2868
+ | value / v-model | 绑定值 | string | number | - | '' |
2869
+ | placeholder | 输入框默认 placeholder | string | - | '' |
2870
+ | disabled | 是否禁用 | boolean | - | false |
2871
+ | size | 数值输入框尺寸 | string | 'large', 'small', '' | '' |
2872
+ | options | 选项内容,详情见Options接口 | Option[] | - | [] |
2873
+ | total | 总数据量,当有值时,出现分页器 | number | null | - |
2874
+ | remoteMethod | 自定义远程搜索方法 | Function | - | - |
2875
+ | tableTitle | 表格标题配置 | any[] | - | [] |
2876
+ | isSelect | 是否多选 | boolean | - | false |
2877
+ | allowCreate | 是否允许用户创建新条目 | boolean | - | false |
2878
+ | focusShow | 是否聚焦显示(既,当搜索值为空时是否显示选择器) | - | false | - |
2879
+ | clearable | 是否可以清空选项 | boolean | - | false |
2880
+ | scrollbarAlwaysOn | 总是显示滚动条 | boolean | - | - |
2881
+ | labelKey | label映射key | string | - | 'label' |
2882
+
2883
+ #### Options(选项接口)
2884
+
2885
+ | 参数 | 说明 | 类型 | 可选值 | 是否必填 |
2886
+ |---------------------|:---------------------:|:-----------------:|:---:|:----:|
2887
+ | label | 选项的标签,若不设置则默认与value相同 | string | - | 是 |
2888
+ | value | 选项的值 | string \| number | - | 是 |
2889
+ | disabled | 是否禁用该选项 | boolean | - | 否 |
2890
+ | \[propName: string] | 额外字段 | string \| number | - | 否 |
2891
+
2892
+ ### 3) Events
2893
+
2894
+ | 方法名 | 说明 | 参数 |
2895
+ |----------------|:-----------:|:---------------------:|
2896
+ | selectMultiple | 多选确认按钮点击时触发 | selectedRow(所选行构成的数组) |
2897
+ | change | 绑定值被改变时触发 | value |
2898
+ | selected | 单选模式点击行时触发 | selectedRow(所选行) |
2899
+ | clear | 清空选择之后回调 | - |
2900
+
2901
+
2902
+
2903
+
2904
+ 下拉选择器V2组件
2905
+ =================
2906
+
2907
+ ### 1) 基础用法
2908
+
2909
+
2910
+
2911
+ ```html
2912
+
2913
+ <template>
2914
+ <div class="g-demo-m-select-box">
2915
+ <m-select-v2
2916
+ v-model="test"
2917
+ checkboxMode
2918
+ multiple
2919
+ :options="options"
2920
+ showAll
2921
+ >
2922
+ </m-select-v2>
2923
+ </div>
2924
+ </template>
2925
+
2926
+ <script setup lang="ts">
2927
+ import { ref } from 'vue'
2928
+
2929
+ const test = ref<string>('')
2930
+
2931
+ const options: Option[] = [{
2932
+ label: '这是选项一',
2933
+ value: 'a'
2934
+ }, {
2935
+ label: '这是选项二',
2936
+ value: 'b'
2937
+ }, {
2938
+ label: '这是选项三',
2939
+ value: 'c',
2940
+ disabled: true
2941
+ }]
2942
+ </script>
2943
+
2944
+ <style scoped>
2945
+ .g-demo-m-select-box {
2946
+ max-width: 1000px;
2947
+ }
2948
+ </style>
2949
+
2950
+
2951
+ ```
2952
+
2953
+ ### 2) Attributes
2954
+
2955
+ | 参数 | 说明 | 类型 | 可选值 | 默认值 |
2956
+ |-------------------------------|:---------------------------------------------------------:|:--------:|:---:|:-----:|
2957
+ | value / v-model | 绑定值 | number | - | '' |
2958
+ | checkbox-mode | 是否为复选框模式(只影响样式) | boolean | - | false |
2959
+ | multiple | 是否多选 | boolean | - | false |
2960
+ | show-all | 是否显示全选选项(只在multiple为true时生效) | boolean | - | false |
2961
+ | options | 选项值 | Option[] | - | [] |
2962
+ | 其他属性同element-plus的el-select组件 | https://element-plus.gitee.io/zh-CN/component/select.html | - | - | - |
2963
+
2964
+ #### Option(选项对象)
2965
+
2966
+ | 参数 | 说明 | 类型 | 必填 | 可选值 | 默认值 |
2967
+ |----------|:---------------------:|:-------:|:--:|:---:|:-----:|
2968
+ | label | 选项的标签,若不设置则默认与value相同 | string | 否 | - | - |
2969
+ | value | 选项的值 | number | 是 | - | - |
2970
+ | disabled | 是否禁用该选项 | boolean | 否 | - | false |
2971
+
2972
+
2973
+
2974
+
2975
+ 表格组件
2976
+ =================
2977
+
2978
+ ### 1) 基础用法
2979
+
2980
+
2981
+
2982
+
2983
+ ```html
2984
+
2985
+ <template>
2986
+ <div>
2987
+ <MTable :data="tableData" @pasteData="pasteData" sole="date">
2988
+ <el-table-column label="Date" prop="date"/>
2989
+ <el-table-column prop="address" label="Address"></el-table-column>
2990
+ <el-table-column prop="name" label="name">
2991
+ <template #default="scope">
2992
+ <el-input v-model="scope.row.name"></el-input>
2993
+ </template>
2994
+ </el-table-column>
2995
+ </MTable>
2996
+ </div>
2997
+ </template>
2998
+
2999
+ <script setup lang="ts">
3000
+ import { ref } from 'vue'
3001
+
3002
+ interface User {
3003
+ date: string;
3004
+ name: string;
3005
+ address: string;
3006
+ tag: string;
3007
+ }
3008
+
3009
+ const tableData = ref(<User[]>[
3010
+ {
3011
+ date: '2016-05-03',
3012
+ name: 'Tom',
3013
+ address: 'No. 189, Grove St, Los Angeles',
3014
+ tag: 'Home'
3015
+ },
3016
+ {
3017
+ date: '2016-05-02',
3018
+ name: 'Tom',
3019
+ address: 'No. 189, Grove St, Los Angeles',
3020
+ tag: 'Office'
3021
+ },
3022
+ {
3023
+ date: '2016-05-04',
3024
+ name: 'Tom',
3025
+ address: 'No. 189, Grove St, Los Angeles',
3026
+ tag: 'Home'
3027
+ },
3028
+ {
3029
+ date: '2016-05-01',
3030
+ name: 'Tom',
3031
+ address: 'No. 189, Grove St, Los Angeles',
3032
+ tag: 'Office'
3033
+ }
3034
+ ])
3035
+
3036
+ const pasteData = (obj: any, data: any) => {
3037
+ tableData.value = data
3038
+ }
3039
+ </script>
3040
+
3041
+ <style lang="scss"></style>
3042
+
3043
+
3044
+ ```
3045
+
3046
+ ### 2) Attributes
3047
+ | 参数 | 说明 | 类型 | 可选值 | 默认值 |
3048
+ | ----------- | ------- | ---------------------------- |-----|--------|
3049
+ |data |表格的数据 | Array | - | [ ] |
3050
+ |sole |行的唯一值 |String , number | - | key |
3051
+ |filtersValue |表格内容筛选 |Function | - | () => void |
3052
+ |其余参数 |参考el官网的table |any | - |https://element-plus.org/zh-CN/component/table.html|
3053
+ ## 要求
3054
+ ```
3055
+ sole 必须传递在表格数据内为唯一的值 如id key 等不会发生重复的关键字
3056
+ ```
3057
+
3058
+ ### 3) Events
3059
+ | 方法名 | 说明 | 回调参数 |
3060
+ | ----------- | ------- | ---------------------------- |
3061
+ | pasteData | 表格粘贴方法 | 共有2个参数,依次为粘贴动作的数据PasteAction ,表格原始数据tableData |
3062
+ |其余方法 |参考el官网的table |https://element-plus.org/zh-CN/component/table.html|
3063
+
3064
+ ### 4) PasteAction
3065
+ |参数 | 说明 | 类型 |
3066
+ |-----|-------|-------|
3067
+ |editRow|返回粘贴的对应行的原始数据|Object|
3068
+ |editColumn|返回粘贴时鼠标所在列的 表格prop值|String|
3069
+ |arr|返回粘贴时候处理之后的 数组信息|Array|
3070
+ |rowIndex|根据sole的值 去data内查找 当前操作的 粘贴行在data内的序号|number|
3071
+
3072
+
3073
+
3074
+
3075
+
3076
+ 表格列组件
3077
+ =================
3078
+
3079
+ ### 1) 基础用法
3080
+
3081
+
3082
+
3083
+
3084
+ ```html
3085
+
3086
+ <template>
3087
+ <div>
3088
+ <el-table
3089
+ :data="tableData"
3090
+ style="width: 100%"
3091
+ >
3092
+ <MTableColumn
3093
+ v-for="item in tableTitle"
3094
+ :key="item.prop"
3095
+ :prop="item.prop"
3096
+ :label="item.label"
3097
+ :minWidth="item.minWidth"
3098
+ v-model:filtersValue="filtersValue"
3099
+ showOverflowTooltip
3100
+ :children="item.children||[]"
3101
+ >
3102
+ <template #default="aa">
3103
+ </template>
3104
+ </MTableColumn>
3105
+ </el-table>
3106
+ </div>
3107
+ </template>
3108
+
3109
+ <script setup lang="ts">
3110
+ import { ref } from 'vue'
3111
+ interface FilterValue {
3112
+ [key: string]: Array<string | number>
3113
+ }
3114
+ const filtersValue = ref<FilterValue>({})
3115
+ interface User {
3116
+ date: string;
3117
+ name: string;
3118
+ address: string;
3119
+ tag: string;
3120
+ }
3121
+ const tableData = ref<User[]>([
3122
+ {
3123
+ date: '2016-05-03',
3124
+ name: 'Tom',
3125
+ address: 'No. 189, Grove St, Los Angeles',
3126
+ tag: 'Home'
3127
+ },
3128
+ {
3129
+ date: '2016-05-02',
3130
+ name: 'Tom',
3131
+ address: 'No. 189, Grove St, Los Angeles',
3132
+ tag: 'Office'
3133
+ },
3134
+ {
3135
+ date: '2016-05-04',
3136
+ name: 'Tom',
3137
+ address: 'No. 189, Grove St, Los Angeles',
3138
+ tag: 'Home'
3139
+ },
3140
+ {
3141
+ date: '2016-05-01',
3142
+ name: 'Tom',
3143
+ address: 'No. 189, Grove St, Los Angeles',
3144
+ tag: 'Office'
3145
+ }
3146
+ ])
3147
+ const tableTitle = [
3148
+ {
3149
+ label: '日期',
3150
+ prop: 'date',
3151
+ minWidth: '172px'
3152
+ },
3153
+ {
3154
+ label: '名称',
3155
+ prop: 'name',
3156
+ minWidth: '134px'
3157
+ },
3158
+ {
3159
+ label: '地址',
3160
+ children: [
3161
+ {
3162
+ label: '123',
3163
+ children: [
3164
+ {
3165
+ label: '222222222222',
3166
+ prop: 'address',
3167
+ minWidth: '134px'
3168
+
3169
+ },
3170
+ {
3171
+ label: 'qqqqqq',
3172
+ prop: 'address',
3173
+ minWidth: '134px'
3174
+
3175
+ }
3176
+ ]
3177
+ },
3178
+ {
3179
+ label: '2222',
3180
+ prop: 'address',
3181
+ minWidth: '134px'
3182
+ }
3183
+ ]
3184
+
3185
+ },
3186
+ {
3187
+ label: '标签',
3188
+ prop: 'tag',
3189
+ minWidth: '134px'
3190
+ }
3191
+ ]
3192
+ </script>
3193
+
3194
+ <style lang="scss"></style>
3195
+
3196
+
3197
+ ```
3198
+
3199
+ ### 2) Attributes
3200
+ | 参数 | 说明 | 类型 | 可选值 | 默认值 |
3201
+ | ------------ | ----------------------------------- | ------------------ | ------ | --------------------------------------------------- |
3202
+ | filtersValue | 列筛选过滤条件 | object | - | { } |
3203
+ | filters | 表格筛选数据 | string[],number[] | - | any[] |
3204
+ | filterMethod | 筛选方法 | Function | - | () => void |
3205
+ | children | 多级表头 时使用传递对应数据进行循环 | Table-column API[] | - | [] |
3206
+ | 其余参数 | 参考el官网的table | any | - | https://element-plus.org/zh-CN/component/table.html |
3207
+
3208
+
3209
+
3210
+
3211
+ 表格头设置组件
3212
+ =================
3213
+
3214
+ ### 1) 基础用法
3215
+
3216
+
3217
+
3218
+
3219
+ ```html
3220
+
3221
+ <template>
3222
+ <div>
3223
+ <MTableColumnSet
3224
+ v-model="tableConfig"
3225
+ foldMode
3226
+ />
3227
+ <div>
3228
+ {{ tableConfig }}
3229
+ </div>
3230
+ </div>
3231
+ </template>
3232
+
3233
+ <script setup lang="ts">
3234
+ import { ref } from 'vue'
3235
+
3236
+ const tableConfig = ref({
3237
+ date: {
3238
+ minWidth: 100,
3239
+ show: true,
3240
+ sort: 0,
3241
+ label: 'date'
3242
+ },
3243
+ name: {
3244
+ minWidth: 100,
3245
+ show: true,
3246
+ sort: 1,
3247
+ label: 'name'
3248
+ },
3249
+ address: {
3250
+ minWidth: 100,
3251
+ show: true,
3252
+ sort: 2,
3253
+ label: 'address'
3254
+ }
3255
+ })
3256
+
3257
+ </script>
3258
+
3259
+ <style lang="scss"></style>
3260
+
3261
+
3262
+ ```
3263
+
3264
+ ### 2) Attributes
3265
+
3266
+ | 参数 | 说明 | 类型 | 可选值 | 默认值 |
3267
+ |-----------------------| ---------------------------------------------------- | ---------------------------------------- | ------ |-------|
3268
+ | model-value / v-model | 绑定值 | { [propName: string]: TableConfigItem } | - | {} |
3269
+ | link | 是否为链接按钮 | boolean | - | false |
3270
+ | foldMode | 是否开启折叠 开启的话需要父级元素为flex布局/grid布局 | boolean | - | false |
3271
+
3272
+
3273
+ ### 3) TableConfigItem
3274
+ | 参数 | 说明 | 类型 |
3275
+ | ----------- | ------------------------------------------------- | -------------------------- |
3276
+ | minWidth | 最小列宽 | number,string |
3277
+ | show | 是否显示 | boolean |
3278
+ | sort | 排序 | number |
3279
+ | label | 列名 | string |
3280
+ | headerAlign | 表头对齐方式, 若不设置该项,则使用表格的对齐方式 | 'left' ,'center' , 'right' |
3281
+
3282
+
3283
+
3284
+
3285
+ 皮肤设置
3286
+ =================
3287
+
3288
+ ### 1) 基础用法
3289
+
3290
+
3291
+
3292
+ ```html
3293
+
3294
+ <template>
3295
+ <div class="g-demo-skin-config-box">
3296
+ <SkinConfig
3297
+ ref="shinConfigRef"
3298
+ @change="size = $event.size"
3299
+ ></SkinConfig>
3300
+
3301
+ <div class="m-box">
3302
+ <div class="u-color-box">
3303
+ <h3>色卡</h3>
3304
+ <ul>
3305
+ <li
3306
+ class="u-li"
3307
+ v-for="item in list"
3308
+ :class="item.className"
3309
+ >
3310
+ {{ item.name }}
3311
+ </li>
3312
+ </ul>
3313
+ </div>
3314
+ <div class="u-el">
3315
+ <h3>元素</h3>
3316
+ <div>
3317
+ <el-button :size="size">Default</el-button>
3318
+ <el-button
3319
+ type="primary"
3320
+ :size="size"
3321
+ >
3322
+ Primary
3323
+ </el-button>
3324
+ <el-button
3325
+ type="success"
3326
+ :size="size"
3327
+ >
3328
+ Success
3329
+ </el-button>
3330
+ <el-button
3331
+ type="info"
3332
+ :size="size"
3333
+ >
3334
+ Info
3335
+ </el-button>
3336
+ <el-button
3337
+ type="warning"
3338
+ :size="size"
3339
+ >
3340
+ Warning
3341
+ </el-button>
3342
+ <el-button
3343
+ type="danger"
3344
+ :size="size"
3345
+ >
3346
+ Danger
3347
+ </el-button>
3348
+ </div>
3349
+ </div>
3350
+ </div>
3351
+ </div>
3352
+ </template>
3353
+
3354
+ <script setup lang="ts">
3355
+ import { ref, onMounted } from 'vue'
3356
+ import { SkinConfig } from 'packages/SkinConfig'
3357
+
3358
+ const size = ref<string>('')
3359
+ const shinConfigRef = ref<InstanceType<typeof SkinConfig> | null>(null)
3360
+ onMounted(() => {
3361
+ const config = shinConfigRef.value ? shinConfigRef.value.getSkin() : null
3362
+ if (config) size.value = config.size
3363
+ })
3364
+
3365
+ const list = ref<{ name: string, className: string }[]>([
3366
+ {
3367
+ name: '--el-color-primary',
3368
+ className: 'el-color-primary'
3369
+ },
3370
+ {
3371
+ name: '--el-color-primary-light-3',
3372
+ className: 'el-color-primary-light-3'
3373
+ },
3374
+ {
3375
+ name: '--el-color-primary-light-5',
3376
+ className: 'el-color-primary-light-5'
3377
+ },
3378
+ {
3379
+ name: '--el-color-primary-light-7',
3380
+ className: 'el-color-primary-light-7'
3381
+ },
3382
+ {
3383
+ name: '--el-color-primary-light-8',
3384
+ className: 'el-color-primary-light-8'
3385
+ },
3386
+ {
3387
+ name: '--el-color-primary-light-9',
3388
+ className: 'el-color-primary-light-9'
3389
+ },
3390
+ {
3391
+ name: '--el-color-primary-dark-2',
3392
+ className: 'el-color-primary-dark-2'
3393
+ },
3394
+ {
3395
+ name: '--el-color-success',
3396
+ className: 'el-color-success'
3397
+ },
3398
+ {
3399
+ name: '--el-color-success-light-3',
3400
+ className: 'el-color-success-light-3'
3401
+ },
3402
+ {
3403
+ name: '--el-color-success-light-5',
3404
+ className: 'el-color-success-light-5'
3405
+ },
3406
+ {
3407
+ name: '--el-color-success-light-7',
3408
+ className: 'el-color-success-light-7'
3409
+ },
3410
+ {
3411
+ name: '--el-color-success-light-8',
3412
+ className: 'el-color-success-light-8'
3413
+ },
3414
+ {
3415
+ name: '--el-color-success-light-9',
3416
+ className: 'el-color-success-light-9'
3417
+ },
3418
+ {
3419
+ name: '--el-color-success-dark-2',
3420
+ className: 'el-color-success-dark-2'
3421
+ },
3422
+ {
3423
+ name: '--el-color-warning',
3424
+ className: 'el-color-warning'
3425
+ },
3426
+ {
3427
+ name: '--el-color-warning-light-3',
3428
+ className: 'el-color-warning-light-3'
3429
+ },
3430
+ {
3431
+ name: '--el-color-warning-light-5',
3432
+ className: 'el-color-warning-light-5'
3433
+ },
3434
+ {
3435
+ name: '--el-color-warning-light-7',
3436
+ className: 'el-color-warning-light-7'
3437
+ },
3438
+ {
3439
+ name: '--el-color-warning-light-8',
3440
+ className: 'el-color-warning-light-8'
3441
+ },
3442
+ {
3443
+ name: '--el-color-warning-light-9',
3444
+ className: 'el-color-warning-light-9'
3445
+ },
3446
+ {
3447
+ name: '--el-color-warning-dark-2',
3448
+ className: 'el-color-warning-dark-2'
3449
+ },
3450
+ {
3451
+ name: '--el-color-danger',
3452
+ className: 'el-color-danger'
3453
+ },
3454
+ {
3455
+ name: '--el-color-danger-light-3',
3456
+ className: 'el-color-danger-light-3'
3457
+ },
3458
+ {
3459
+ name: '--el-color-danger-light-5',
3460
+ className: 'el-color-danger-light-5'
3461
+ },
3462
+ {
3463
+ name: '--el-color-danger-light-7',
3464
+ className: 'el-color-danger-light-7'
3465
+ },
3466
+ {
3467
+ name: '--el-color-danger-light-8',
3468
+ className: 'el-color-danger-light-8'
3469
+ },
3470
+ {
3471
+ name: '--el-color-danger-light-9',
3472
+ className: 'el-color-danger-light-9'
3473
+ },
3474
+ {
3475
+ name: '--el-color-danger-dark-2',
3476
+ className: 'el-color-danger-dark-2'
3477
+ },
3478
+ {
3479
+ name: '--el-color-error',
3480
+ className: 'el-color-error'
3481
+ },
3482
+ {
3483
+ name: '--el-color-error-light-3',
3484
+ className: 'el-color-error-light-3'
3485
+ },
3486
+ {
3487
+ name: '--el-color-error-light-5',
3488
+ className: 'el-color-error-light-5'
3489
+ },
3490
+ {
3491
+ name: '--el-color-error-light-7',
3492
+ className: 'el-color-error-light-7'
3493
+ },
3494
+ {
3495
+ name: '--el-color-error-light-8',
3496
+ className: 'el-color-error-light-8'
3497
+ },
3498
+ {
3499
+ name: '--el-color-error-light-9',
3500
+ className: 'el-color-error-light-9'
3501
+ },
3502
+ {
3503
+ name: '--el-color-error-dark-2',
3504
+ className: 'el-color-error-dark-2'
3505
+ },
3506
+ {
3507
+ name: '--el-color-info',
3508
+ className: 'el-color-info'
3509
+ },
3510
+ {
3511
+ name: '--el-color-info-light-3',
3512
+ className: 'el-color-info-light-3'
3513
+ },
3514
+ {
3515
+ name: '--el-color-info-light-5',
3516
+ className: 'el-color-info-light-5'
3517
+ },
3518
+ {
3519
+ name: '--el-color-info-light-7',
3520
+ className: 'el-color-info-light-7'
3521
+ },
3522
+ {
3523
+ name: '--el-color-info-light-8',
3524
+ className: 'el-color-info-light-8'
3525
+ },
3526
+ {
3527
+ name: '--el-color-info-light-9',
3528
+ className: 'el-color-info-light-9'
3529
+ },
3530
+ {
3531
+ name: '--el-color-info-dark-2',
3532
+ className: 'el-color-info-dark-2'
3533
+ },
3534
+ {
3535
+ name: '--el-box-shadow',
3536
+ className: 'el-box-shadow'
3537
+ },
3538
+ {
3539
+ name: '--el-box-shadow-light',
3540
+ className: 'el-box-shadow-light'
3541
+ },
3542
+ {
3543
+ name: '--el-box-shadow-lighter',
3544
+ className: 'el-box-shadow-lighter'
3545
+ },
3546
+ {
3547
+ name: '--el-box-shadow-dark',
3548
+ className: 'el-box-shadow-dark'
3549
+ },
3550
+ {
3551
+ name: '--el-bg-color-page',
3552
+ className: 'el-bg-color-page'
3553
+ },
3554
+ {
3555
+ name: '--el-bg-color',
3556
+ className: 'el-bg-color'
3557
+ },
3558
+ {
3559
+ name: '--el-bg-color-overlay',
3560
+ className: 'el-bg-color-overlay'
3561
+ },
3562
+ {
3563
+ name: '--el-text-color-primary',
3564
+ className: 'el-text-color-primary'
3565
+ },
3566
+ {
3567
+ name: '--el-text-color-regular',
3568
+ className: 'el-text-color-regular'
3569
+ },
3570
+ {
3571
+ name: '--el-text-color-secondary',
3572
+ className: 'el-text-color-secondary'
3573
+ },
3574
+ {
3575
+ name: '--el-text-color-placeholder',
3576
+ className: 'el-text-color-placeholder'
3577
+ },
3578
+ {
3579
+ name: '--el-text-color-disabled',
3580
+ className: 'el-text-color-disabled'
3581
+ },
3582
+ {
3583
+ name: '--el-border-color-darker',
3584
+ className: 'el-border-color-darker'
3585
+ },
3586
+ {
3587
+ name: '--el-border-color-dark',
3588
+ className: 'el-border-color-dark'
3589
+ },
3590
+ {
3591
+ name: '--el-border-color',
3592
+ className: 'el-border-color'
3593
+ },
3594
+ {
3595
+ name: '--el-border-color-light',
3596
+ className: 'el-border-color-light'
3597
+ },
3598
+ {
3599
+ name: '--el-border-color-lighter',
3600
+ className: 'el-border-color-lighter'
3601
+ },
3602
+ {
3603
+ name: '--el-border-color-extra-light',
3604
+ className: 'el-border-color-extra-light'
3605
+ },
3606
+ {
3607
+ name: '--el-fill-color-darker',
3608
+ className: 'el-fill-color-darker'
3609
+ },
3610
+ {
3611
+ name: '--el-fill-color-dark',
3612
+ className: 'el-fill-color-dark'
3613
+ },
3614
+ {
3615
+ name: '--el-fill-color',
3616
+ className: 'el-fill-color'
3617
+ },
3618
+ {
3619
+ name: '--el-fill-color-light',
3620
+ className: 'el-fill-color-light'
3621
+ },
3622
+ {
3623
+ name: '--el-fill-color-lighter',
3624
+ className: 'el-fill-color-lighter'
3625
+ },
3626
+ {
3627
+ name: '--el-fill-color-extra-light',
3628
+ className: 'el-fill-color-extra-light'
3629
+ },
3630
+ {
3631
+ name: '--el-fill-color-blank',
3632
+ className: 'el-fill-color-blank'
3633
+ },
3634
+ {
3635
+ name: '--el-mask-color',
3636
+ className: 'el-mask-color'
3637
+ },
3638
+ {
3639
+ name: '--el-mask-color-extra-light',
3640
+ className: 'el-mask-color-extra-light'
3641
+ }
3642
+ ])
3643
+ </script>
3644
+
3645
+ <style lang="scss">
3646
+ :root[data-dark="true"] {
3647
+ color-scheme: dark;
3648
+ --el-color-primary: #409eff;
3649
+ --el-color-primary-light-3: #3375b9;
3650
+ --el-color-primary-light-5: #2a598a;
3651
+ --el-color-primary-light-7: #213d5b;
3652
+ --el-color-primary-light-8: #1d3043;
3653
+ --el-color-primary-light-9: #18222c;
3654
+ --el-color-primary-dark-2: #66b1ff;
3655
+ --el-color-success: #67c23a;
3656
+ --el-color-success-light-3: #4e8e2f;
3657
+ --el-color-success-light-5: #3e6b27;
3658
+ --el-color-success-light-7: #2d481f;
3659
+ --el-color-success-light-8: #25371c;
3660
+ --el-color-success-light-9: #1c2518;
3661
+ --el-color-success-dark-2: #85ce61;
3662
+ --el-color-warning: #e6a23c;
3663
+ --el-color-warning-light-3: #a77730;
3664
+ --el-color-warning-light-5: #7d5b28;
3665
+ --el-color-warning-light-7: #533f20;
3666
+ --el-color-warning-light-8: #3e301c;
3667
+ --el-color-warning-light-9: #292218;
3668
+ --el-color-warning-dark-2: #ebb563;
3669
+ --el-color-danger: #f56c6c;
3670
+ --el-color-danger-light-3: #b25252;
3671
+ --el-color-danger-light-5: #854040;
3672
+ --el-color-danger-light-7: #582e2e;
3673
+ --el-color-danger-light-8: #412626;
3674
+ --el-color-danger-light-9: #2b1d1d;
3675
+ --el-color-danger-dark-2: #f78989;
3676
+ --el-color-error: #f56c6c;
3677
+ --el-color-error-light-3: #b25252;
3678
+ --el-color-error-light-5: #854040;
3679
+ --el-color-error-light-7: #582e2e;
3680
+ --el-color-error-light-8: #412626;
3681
+ --el-color-error-light-9: #2b1d1d;
3682
+ --el-color-error-dark-2: #f78989;
3683
+ --el-color-info: #909399;
3684
+ --el-color-info-light-3: #6b6d71;
3685
+ --el-color-info-light-5: #525457;
3686
+ --el-color-info-light-7: #393a3c;
3687
+ --el-color-info-light-8: #2d2d2f;
3688
+ --el-color-info-light-9: #202121;
3689
+ --el-color-info-dark-2: #a6a9ad;
3690
+
3691
+ --el-box-shadow: 0px 12px 32px 4px rgba(0, 0, 0, .36), 0px 8px 20px rgba(0, 0, 0, .72);
3692
+ --el-box-shadow-light: 0px 0px 12px rgba(0, 0, 0, .72);
3693
+ --el-box-shadow-lighter: 0px 0px 6px rgba(0, 0, 0, .72);
3694
+ --el-box-shadow-dark: 0px 16px 48px 16px rgba(0, 0, 0, .72), 0px 12px 32px #000000, 0px 8px 16px -8px #000000;
3695
+ --el-bg-color-page: #0a0a0a;
3696
+ --el-bg-color: #141414;
3697
+ --el-bg-color-overlay: #1d1e1f;
3698
+ --el-text-color-primary: #E5EAF3;
3699
+ --el-text-color-regular: #CFD3DC;
3700
+ --el-text-color-secondary: #A3A6AD;
3701
+ --el-text-color-placeholder: #8D9095;
3702
+ --el-text-color-disabled: #6C6E72;
3703
+ --el-border-color-darker: #636466;
3704
+ --el-border-color-dark: #58585B;
3705
+ --el-border-color: #4C4D4F;
3706
+ --el-border-color-light: #414243;
3707
+ --el-border-color-lighter: #363637;
3708
+ --el-border-color-extra-light: #2B2B2C;
3709
+ --el-fill-color-darker: #424243;
3710
+ --el-fill-color-dark: #39393A;
3711
+ --el-fill-color: #303030;
3712
+ --el-fill-color-light: #262727;
3713
+ --el-fill-color-lighter: #1D1D1D;
3714
+ --el-fill-color-extra-light: #191919;
3715
+ --el-fill-color-blank: transparent;
3716
+ --el-mask-color: rgba(0, 0, 0, .8);
3717
+ --el-mask-color-extra-light: rgba(0, 0, 0, .3);
3718
+ }
3719
+ </style>
3720
+
3721
+ <style scoped lang="scss">
3722
+ .g-demo-skin-config-box {
3723
+ max-width: 1000px;
3724
+ }
3725
+
3726
+ ::-webkit-scrollbar-thumb:hover {
3727
+ background-color: var(--m-scrollbar-thumb-hover-color);
3728
+ }
3729
+
3730
+ .el-color-primary {
3731
+ background-color: var(--el-color-primary);
3732
+ }
3733
+ .el-color-primary-light-3 {
3734
+ background-color: var(--el-color-primary-light-3);
3735
+ }
3736
+ .el-color-primary-light-5 {
3737
+ background-color: var(--el-color-primary-light-5);
3738
+ }
3739
+ .el-color-primary-light-7 {
3740
+ background-color: var(--el-color-primary-light-7);
3741
+ }
3742
+ .el-color-primary-light-8 {
3743
+ background-color: var(--el-color-primary-light-8);
3744
+ }
3745
+ .el-color-primary-light-9 {
3746
+ background-color: var(--el-color-primary-light-9);
3747
+ }
3748
+ .el-color-primary-dark-2 {
3749
+ background-color: var(--el-color-primary-dark-2);
3750
+ }
3751
+ .el-color-success {
3752
+ background-color: var(--el-color-success);
3753
+ }
3754
+ .el-color-success-light-3 {
3755
+ background-color: var(--el-color-success-light-3);
3756
+ }
3757
+ .el-color-success-light-5 {
3758
+ background-color: var(--el-color-success-light-5);
3759
+ }
3760
+ .el-color-success-light-7 {
3761
+ background-color: var(--el-color-success-light-7);
3762
+ }
3763
+ .el-color-success-light-8 {
3764
+ background-color: var(--el-color-success-light-8);
3765
+ }
3766
+ .el-color-success-light-9 {
3767
+ background-color: var(--el-color-success-light-9);
3768
+ }
3769
+ .el-color-success-dark-2 {
3770
+ background-color: var(--el-color-success-dark-2);
3771
+ }
3772
+ .el-color-warning {
3773
+ background-color: var(--el-color-warning);
3774
+ }
3775
+ .el-color-warning-light-3 {
3776
+ background-color: var(--el-color-warning-light-3);
3777
+ }
3778
+ .el-color-warning-light-5 {
3779
+ background-color: var(--el-color-warning-light-5);
3780
+ }
3781
+ .el-color-warning-light-7 {
3782
+ background-color: var(--el-color-warning-light-7);
3783
+ }
3784
+ .el-color-warning-light-8 {
3785
+ background-color: var(--el-color-warning-light-8);
3786
+ }
3787
+ .el-color-warning-light-9 {
3788
+ background-color: var(--el-color-warning-light-9);
3789
+ }
3790
+ .el-color-warning-dark-2 {
3791
+ background-color: var(--el-color-warning-dark-2);
3792
+ }
3793
+ .el-color-danger {
3794
+ background-color: var(--el-color-danger);
3795
+ }
3796
+ .el-color-danger-light-3 {
3797
+ background-color: var(--el-color-danger-light-3);
3798
+ }
3799
+ .el-color-danger-light-5 {
3800
+ background-color: var(--el-color-danger-light-5);
3801
+ }
3802
+ .el-color-danger-light-7 {
3803
+ background-color: var(--el-color-danger-light-7);
3804
+ }
3805
+ .el-color-danger-light-8 {
3806
+ background-color: var(--el-color-danger-light-8);
3807
+ }
3808
+ .el-color-danger-light-9 {
3809
+ background-color: var(--el-color-danger-light-9);
3810
+ }
3811
+ .el-color-danger-dark-2 {
3812
+ background-color: var(--el-color-danger-dark-2);
3813
+ }
3814
+ .el-color-error {
3815
+ background-color: var(--el-color-error);
3816
+ }
3817
+ .el-color-error-light-3 {
3818
+ background-color: var(--el-color-error-light-3);
3819
+ }
3820
+ .el-color-error-light-5 {
3821
+ background-color: var(--el-color-error-light-5);
3822
+ }
3823
+ .el-color-error-light-7 {
3824
+ background-color: var(--el-color-error-light-7);
3825
+ }
3826
+ .el-color-error-light-8 {
3827
+ background-color: var(--el-color-error-light-8);
3828
+ }
3829
+ .el-color-error-light-9 {
3830
+ background-color: var(--el-color-error-light-9);
3831
+ }
3832
+ .el-color-error-dark-2 {
3833
+ background-color: var(--el-color-error-dark-2);
3834
+ }
3835
+ .el-color-info {
3836
+ background-color: var(--el-color-info);
3837
+ }
3838
+ .el-color-info-light-3 {
3839
+ background-color: var(--el-color-info-light-3);
3840
+ }
3841
+ .el-color-info-light-5 {
3842
+ background-color: var(--el-color-info-light-5);
3843
+ }
3844
+ .el-color-info-light-7 {
3845
+ background-color: var(--el-color-info-light-7);
3846
+ }
3847
+ .el-color-info-light-8 {
3848
+ background-color: var(--el-color-info-light-8);
3849
+ }
3850
+ .el-color-info-light-9 {
3851
+ background-color: var(--el-color-info-light-9);
3852
+ }
3853
+ .el-color-info-dark-2 {
3854
+ background-color: var(--el-color-info-dark-2);
3855
+ }
3856
+ .el-box-shadow {
3857
+ background-color: var(--el-box-shadow);
3858
+ }
3859
+ .el-box-shadow-light {
3860
+ background-color: var(--el-box-shadow-light);
3861
+ }
3862
+ .el-box-shadow-lighter {
3863
+ background-color: var(--el-box-shadow-lighter);
3864
+ }
3865
+ .el-box-shadow-dark {
3866
+ background-color: var(--el-box-shadow-dark);
3867
+ }
3868
+ .el-bg-color-page {
3869
+ background-color: var(--el-bg-color-page);
3870
+ }
3871
+ .el-bg-color {
3872
+ background-color: var(--el-bg-color);
3873
+ }
3874
+ .el-bg-color-overlay {
3875
+ background-color: var(--el-bg-color-overlay);
3876
+ }
3877
+ .el-text-color-primary {
3878
+ background-color: var(--el-text-color-primary);
3879
+ }
3880
+ .el-text-color-regular {
3881
+ background-color: var(--el-text-color-regular);
3882
+ }
3883
+ .el-text-color-secondary {
3884
+ background-color: var(--el-text-color-secondary);
3885
+ }
3886
+ .el-text-color-placeholder {
3887
+ background-color: var(--el-text-color-placeholder);
3888
+ }
3889
+ .el-text-color-disabled {
3890
+ background-color: var(--el-text-color-disabled);
3891
+ }
3892
+ .el-border-color-darker {
3893
+ background-color: var(--el-border-color-darker);
3894
+ }
3895
+ .el-border-color-dark {
3896
+ background-color: var(--el-border-color-dark);
3897
+ }
3898
+ .el-border-color {
3899
+ background-color: var(--el-border-color);
3900
+ }
3901
+ .el-border-color-light {
3902
+ background-color: var(--el-border-color-light);
3903
+ }
3904
+ .el-border-color-lighter {
3905
+ background-color: var(--el-border-color-lighter);
3906
+ }
3907
+ .el-border-color-extra-light {
3908
+ background-color: var(--el-border-color-extra-light);
3909
+ }
3910
+ .el-fill-color-darker {
3911
+ background-color: var(--el-fill-color-darker);
3912
+ }
3913
+ .el-fill-color-dark {
3914
+ background-color: var(--el-fill-color-dark);
3915
+ }
3916
+ .el-fill-color {
3917
+ background-color: var(--el-fill-color);
3918
+ }
3919
+ .el-fill-color-light {
3920
+ background-color: var(--el-fill-color-light);
3921
+ }
3922
+ .el-fill-color-lighter {
3923
+ background-color: var(--el-fill-color-lighter);
3924
+ }
3925
+ .el-fill-color-extra-light {
3926
+ background-color: var(--el-fill-color-extra-light);
3927
+ }
3928
+ .el-fill-color-blank {
3929
+ background-color: var(--el-fill-color-blank);
3930
+ }
3931
+ .el-mask-color {
3932
+ background-color: var(--el-mask-color);
3933
+ }
3934
+ .el-mask-color-extra-light {
3935
+ background-color: var(--el-mask-color-extra-light);
3936
+ }
3937
+ </style>
3938
+
3939
+ <style lang="scss">
3940
+ /*浏览器滚动条*/
3941
+ // 滚动条凹槽的颜色,还可以设置边框属性
3942
+ ::-webkit-scrollbar-track-piece {
3943
+ background-color: transparent;
3944
+ }
3945
+
3946
+ // 滚动条的宽度
3947
+ ::-webkit-scrollbar {
3948
+ width: var(--m-scrollbar-thumb-width);
3949
+ height: 9px;
3950
+ }
3951
+
3952
+ // 滚动条的设置
3953
+ ::-webkit-scrollbar-thumb {
3954
+ background-color: var(--m-scrollbar-thumb-color);
3955
+ background-clip: padding-box;
3956
+ border-radius: 5px;
3957
+ min-height: 28px;
3958
+ }
3959
+ </style>
3960
+
3961
+ <style scoped lang="scss">
3962
+ .u-li {
3963
+ width: 300px;
3964
+ }
3965
+
3966
+ .m-box {
3967
+ display: flex;
3968
+ }
3969
+
3970
+ .u-el {
3971
+ margin-left: 20px;
3972
+ }
3973
+ </style>
3974
+
3975
+
3976
+ ```
3977
+
3978
+ ### 2) Exposes
3979
+
3980
+ | 方法名 | 说明 | 参数 | 返回值 |
3981
+ |---------|:--------:|:----------------:|:----------------:|
3982
+ | setSkin | 设置主题配置 | SkinConfig(皮肤对象) | void |
3983
+ | getSkin | 获取当前主题配置 | - | SkinConfig(皮肤对象) |
3984
+
3985
+ #### SkinConfig(皮肤对象)
3986
+
3987
+ | 参数 | 说明 | 类型 | 可选值 | 默认值 |
3988
+ |--------------|:-------:|:-------:|:-------------------------:|:---------:|
3989
+ | darkTheme | 是否为深色主题 | boolean | - | false |
3990
+ | followSystem | 是否跟随系统 | boolean | - | false |
3991
+ | size | 大小 | enum | large \| default \| small | default |
3992
+ | primaryColor | 主题色 | string | - | '#646CFF' |
3993
+ | successColor | 成功色 | string | - | '#67c23a' |
3994
+ | warningColor | 警告色 | string | - | '#e6a23c' |
3995
+ | dangerColor | 危险色 | string | - | '#f56c6c' |
3996
+ | infoColor | 信息色 | string | - | '#909399' |
3997
+
3998
+ ### 3) 说明
3999
+
4000
+ 组件通过修改全局的css变量来实现的效果,故暗夜模式需手动在全局加css,具体见示例。组件一被引用,就会自动读取本地配置生效,无本地配置时,以默认值计算。
4001
+
4002
+ ### 4) Events
4003
+
4004
+ | 方法名 | 说明 | 参数 |
4005
+ |--------|:---------:|:----------:|
4006
+ | change | 绑定值被改变时触发 | SkinConfig |
4007
+
4008
+
4009
+
4010
+
4011
+ 标签页组件
4012
+ =================
4013
+
4014
+
4015
+
4016
+ # 霸软组件Tool说明
4017
+
4018
+ ## Tool列表
4019
+
4020
+
4021
+
4022
+ ### 1) moneyFormat
4023
+
4024
+ | 参数 | 描述 | 类型 | 默认值 |
4025
+ | ----------- | -------------- | ------------- | ------ |
4026
+ | val | 要转换的数字 | number,string | 0 |
4027
+ | isThousands | 是否需要千分位 | boolean | true |
4028
+ | roundDTo | 四舍五入位数 | number | 2 |
4029
+ | config | 配置项 | ConfigType | {} |
4030
+
4031
+ ### 2) ConfigType
4032
+ | 参数 | 描述 | 类型 | 默认值 |
4033
+ | ----------- | ------------ | ------ | ------ |
4034
+ | moneySymbol | 补的金钱符号 | string | - |
4035
+ | repairZero | 末尾补几位零 | number | - |
4036
+
4037
+