@peng_kai/kit 0.3.0-beta.2 → 0.3.0-beta.21
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/.vscode/settings.json +2 -2
- package/admin/components/currency/src/CurrencyIcon.vue +37 -33
- package/admin/components/date/PeriodPicker.vue +122 -0
- package/admin/components/date/TimeFieldSelectForLabel.vue +24 -0
- package/admin/components/date/TtaTimeZone.vue +516 -0
- package/admin/components/date/TtaTimeZoneSimple.vue +104 -0
- package/admin/components/date/helpers.ts +250 -0
- package/admin/components/date/index.ts +6 -0
- package/admin/components/date/presetProps.ts +19 -0
- package/admin/components/filter/src/FilterReset.vue +53 -8
- package/admin/components/filter/src/more/TableSetting.vue +95 -0
- package/admin/components/provider/Admin.vue +17 -0
- package/admin/components/provider/admin-permission.ts +48 -0
- package/admin/components/provider/admin-router.ts +361 -0
- package/admin/components/provider/index.ts +3 -0
- package/admin/components/rich-text/src/RichText.new.vue +17 -4
- package/admin/components/rich-text/src/editorConfig.ts +10 -1
- package/admin/components/text/index.ts +2 -0
- package/admin/components/text/src/Amount.v2.vue +131 -0
- package/admin/components/text/src/Datetime.vue +17 -12
- package/admin/components/text/src/Num.vue +192 -0
- package/admin/layout/large/Breadcrumb.vue +10 -23
- package/admin/layout/large/Content.vue +14 -6
- package/admin/layout/large/Layout.vue +129 -0
- package/admin/layout/large/Menu.vue +24 -17
- package/admin/layout/large/Notice.vue +138 -0
- package/admin/layout/large/Tabs.vue +183 -0
- package/admin/layout/large/index.ts +61 -1
- package/admin/layout/large/y682.mp3 +0 -0
- package/admin/permission/routerGuard.ts +15 -8
- package/admin/permission/vuePlugin.ts +5 -10
- package/admin/route-guards/index.ts +0 -1
- package/admin/stores/index.ts +1 -0
- package/admin/styles/classCover.scss +1 -1
- package/admin/styles/index.scss +2 -2
- package/antd/hooks/useAntdModal.ts +29 -15
- package/antd/hooks/useAntdTable.ts +10 -7
- package/antd/hooks/useAntdTheme.ts +7 -0
- package/antd/hooks/useTableColumns.ts +83 -0
- package/antd/index.ts +1 -1
- package/libs/bignumber.ts +1 -1
- package/libs/dayjs.ts +15 -1
- package/libs/fingerprintjs.ts +1 -0
- package/package.json +59 -60
- package/request/interceptors/getDeviceInfo.ts +14 -0
- package/utils/LocaleManager.ts +1 -1
- package/utils/locale/LocaleManager.ts +2 -1
- package/utils/locale/helpers.ts +9 -0
- package/utils/number.ts +0 -1
- package/utils/storage.ts +31 -0
- package/utils/upload/AwsS3.ts +11 -4
- package/admin/layout/large/PageTab.vue +0 -70
- package/admin/route-guards/collapseMenu.ts +0 -11
- package/libs/a-calc.ts +0 -1
- package/vue/components/test/KitTest.vue +0 -9
- package/vue/components/test/testStore.ts +0 -11
package/.vscode/settings.json
CHANGED
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
|
|
9
9
|
// Auto fix
|
|
10
10
|
"editor.codeActionsOnSave": {
|
|
11
|
-
"source.fixAll.eslint": "explicit",
|
|
12
|
-
"source.organizeImports": "never"
|
|
11
|
+
// "source.fixAll.eslint": "explicit",
|
|
12
|
+
// "source.organizeImports": "never"
|
|
13
13
|
},
|
|
14
14
|
|
|
15
15
|
// Silent the stylistic rules in you IDE, but still auto fix them
|
|
@@ -1,26 +1,34 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import { computed,
|
|
3
|
-
import { useInjectedAdminConfig } from '../../provider';
|
|
2
|
+
import { computed, ref } from 'vue';
|
|
4
3
|
|
|
5
4
|
export interface CurrencyIconProps {
|
|
6
5
|
symbol?: string
|
|
7
6
|
size?: string
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
base?: string
|
|
8
|
+
iconType?: 'img' | 'text'
|
|
10
9
|
}
|
|
11
10
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
11
|
+
// https://cdn.xxx.com/currency/{symbol}.svg
|
|
12
|
+
export const iconBase = ref('');
|
|
13
|
+
export const imgIcons = ref<Record<string, string>>({
|
|
14
|
+
CNY: 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIj48cGF0aCBkPSJNMTIgMjRjNi42MjcgMCAxMi01LjM3MyAxMi0xMlMxOC42MjcgMCAxMiAwIDAgNS4zNzMgMCAxMnM1LjM3MyAxMiAxMiAxMnoiIGZpbGw9IiNEODAwMjciLz48cGF0aCBkPSJNNi41NjcgNy4zMDNsMS4wMzYgMy4xODhoMy4zNTJsLTIuNzEgMS45NzMgMS4wMzYgMy4xODctMi43MTQtMS45NjgtMi43MTQgMS45NjggMS4wNC0zLjE4N0wyLjE4IDEwLjQ5SDUuNTNsMS4wMzYtMy4xODh6TTE0LjIyNyAxOC41ODZsLS43OTMtLjk3NS0xLjE3MS40NTUuNjgtMS4wNTUtLjc5My0uOTggMS4yMTQuMzI0LjY4NS0xLjA1NS4wNjUgMS4yNTYgMS4yMTkuMzI0LTEuMTc3LjQ1LjA3IDEuMjU2ek0xNS44MDIgMTUuNzI2bC4zNzUtMS4yLTEuMDI3LS43MjYgMS4yNTYtLjAxOS4zNy0xLjIuNDA5IDEuMTkgMS4yNTYtLjAxMy0xLjAwOC43NS40MDMgMS4xOS0xLjAyNi0uNzI2LTEuMDA4Ljc1NXpNMTcuOTI1IDguODA4bC0uNTUzIDEuMTMuOS44NzYtMS4yNDItLjE3OC0uNTU0IDEuMTI1LS4yMTUtMS4yMzgtMS4yNDctLjE3OCAxLjExNi0uNTg2LS4yMTYtMS4yNDIuOS44NzcgMS4xMS0uNTg2ek0xNC4yNiA1LjM4NmwtLjA5NCAxLjI1MSAxLjE2Ny40NzQtMS4yMjMuMy0uMDkgMS4yNTYtLjY2LTEuMDY5LTEuMjI0LjMuODExLS45Ni0uNjY1LTEuMDY1IDEuMTY3LjQ3NC44MS0uOTYxeiIgZmlsbD0iI0ZGREE0NCIvPjxzY3JpcHQvPjxzY3JpcHQvPjwvc3ZnPg==',
|
|
15
|
+
EUR: 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgdmlld0JveD0iMCAwIDMyIDMyIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxjaXJjbGUgY3g9IjE2IiBjeT0iMTYiIHI9IjE2IiBmaWxsPSIjMGY4ZmY4Ii8+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTggMTkuMDA0TDguODEgMTdoLjg1N2ExNi4yNzkgMTYuMjc5IDAgMCAxLS4wMzQtMS4wM2MwLS40NDguMDE5LS44NjQuMDU2LTEuMjVIOGwuODEtMi4wMDNoMS4yNzRDMTEuMjcgOC45MDYgMTMuOTQ0IDcgMTguMTAzIDdjMS4zNjcgMCAyLjY2Ni4xNzcgMy44OTcuNTMydjIuNTI0YTguOTIgOC45MiAwIDAgMC0zLjY4My0uNzc2Yy0yLjQ5MyAwLTQuMDk2IDEuMTQ2LTQuODEgMy40MzhoNy40MjNsLS44MSAyLjAwM2gtNy4wOTdhNi45MzggNi45MzggMCAwIDAtLjA1Ni45OTVjMCAuNDc5LjAxNS45MDcuMDQ1IDEuMjg1aDYuMTgzbC0uOCAyLjAwM0gxMy40NGMuNTMzIDEuMzg5IDEuMTgzIDIuMzU1IDEuOTQ5IDIuOS43NjUuNTQ0IDEuODU4LjgxNiAzLjI3Ny44MTYgMS4wMTQgMCAyLjEyNS0uMjQ3IDMuMzM0LS43NDF2Mi4zNzNjLTEuMTQ5LjQzMi0yLjUxNS42NDgtNC4xLjY0OC00LjE2NyAwLTYuODAzLTEuOTk5LTcuOTA2LTUuOTk2eiIvPjwvZz48c2NyaXB0Lz48c2NyaXB0Lz48L3N2Zz4=',
|
|
16
|
+
JPY: 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgdmlld0JveD0iMCAwIDY0IDY0Ij48Y2lyY2xlIGN4PSIzMiIgY3k9IjMyIiByPSIzMCIgZmlsbD0iI2Y1ZjVmNSIvPjxjaXJjbGUgY3g9IjMyIiBjeT0iMzIiIHI9IjEyIiBmaWxsPSIjZWQ0YzVjIi8+PC9zdmc+',
|
|
17
|
+
PHP: 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIj48ZyBjbGlwLXBhdGg9InVybCgjY2xpcDApIj48cGF0aCBkPSJNMTIgMjRjNi42MjcgMCAxMi01LjM3MyAxMi0xMlMxOC42MjcgMCAxMiAwIDAgNS4zNzMgMCAxMnM1LjM3MyAxMiAxMiAxMnoiIGZpbGw9IiNmZmYiLz48cGF0aCBkPSJNMTIgMHYxMmwtOC40ODUgOC40ODVBMTEuOTYzIDExLjk2MyAwIDAgMCAxMiAyNGM2LjYyNyAwIDEyLTUuMzczIDEyLTEyUzEyIDAgMTIgMHoiIGZpbGw9IiNEODAwMjciLz48cGF0aCBkPSJNMTIgMGExMS45NjMgMTEuOTYzIDAgMCAwLTguNDg1IDMuNTE1TDEyIDEyaDEyYzAtNi42MjctNS4zNzMtMTItMTItMTJ6IiBmaWxsPSIjMDA1MkI0Ii8+PHBhdGggZD0iTTguMjE3IDEybC0xLjQ2Ni0uNjkuNzgtMS40MTktMS41OS4zMDUtLjIwMi0xLjYwOEw0LjYzIDkuNzcxIDMuNTIyIDguNTg4bC0uMjAyIDEuNjA4LTEuNTkxLS4zMDUuNzggMS40MkwxLjA0MyAxMmwxLjQ2Ni42OS0uNzggMS40MTkgMS41OTEtLjMwNS4yMDIgMS42MDggMS4xMDgtMS4xODMgMS4xMDkgMS4xODMuMjAxLTEuNjA4IDEuNTkyLjMwNS0uNzgtMS40Mkw4LjIxNiAxMnpNMy4yIDQuNjk2bC40ODguNjgxLjc5OS0uMjUzLS40OTguNjc1LjQ4OC42ODEtLjc5NS0uMjY0LS40OTguNjc0LjAwNi0uODM4LS43OTUtLjI2NS44LS4yNTMuMDA1LS44Mzh6TTMuMiAxNy4xMWwuNDg4LjY4Mi43OTktLjI1My0uNDk4LjY3NC40ODguNjgyLS43OTUtLjI2NS0uNDk4LjY3NC4wMDYtLjgzOC0uNzk1LS4yNjUuOC0uMjUzLjAwNS0uODM4ek0xMC4xNTYgMTAuOTAzbC0uNDg3LjY4Mi0uOC0uMjU0LjQ5OC42NzUtLjQ4Ny42ODIuNzk1LS4yNjUuNDk4LjY3NC0uMDA3LS44MzguNzk2LS4yNjUtLjgtLjI1My0uMDA2LS44Mzh6IiBmaWxsPSIjRkZEQTQ0Ii8+PC9nPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0wIDBoMjR2MjRIMHoiLz48L2NsaXBQYXRoPjwvZGVmcz48c2NyaXB0Lz48c2NyaXB0Lz48L3N2Zz4=',
|
|
18
|
+
USD: 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIj48cGF0aCBkPSJNMTIgMjRjNi42MjcgMCAxMi01LjM3MyAxMi0xMlMxOC42MjcgMCAxMiAwIDAgNS4zNzMgMCAxMnM1LjM3MyAxMiAxMiAxMnoiIGZpbGw9IiMxNkM3ODQiLz48cGF0aCBkPSJNMTEuNDc2IDE5aDEuMDc5bC4wMDUtMS4yNTJjMi4xODMtLjE3IDMuNDM1LTEuNDYgMy40NC0zLjI5My0uMDA1LTEuOTQtMS40OTYtMi44MjctMy4wNjQtMy4yMjZsLS4zMzUtLjA5My4wMi0zLjEyM2MuODE0LjE1MyAxLjMzOC42NzggMS40MiAxLjQ2NmgxLjgxNmMtLjAzLTEuNzQtMS4zMDItMy4wMDgtMy4yMjYtMy4yMDVMMTIuNjM2IDVoLTEuMDc5bC0uMDA1IDEuMjc0QzkuNjQ0IDYuNDgyIDguMjcgNy43NCA4LjI3NSA5LjU1YzAgMS42MDggMS4wNjMgMi41MzIgMi43NzggMy4wMDhsLjQ1OC4xMjYtLjAyIDMuMzA4Yy0uOTEtLjE1My0xLjU2Ny0uNzEtMS42MzMtMS43SDhjLjA3MSAyLjA1IDEuMzg0IDMuMjcgMy40OCAzLjQ1NkwxMS40NzcgMTl6bTEuMDk0LTMuMDA4bC4wMi0zLjAwMmMuOTI3LjI5IDEuNTE3LjY3MiAxLjUyMiAxLjQ1LS4wMDUuODA4LS42MSAxLjM4OC0xLjU0MiAxLjU1MnptLTEuMDQ4LTUuMTUxYy0uNzAzLS4yNDEtMS4zNDQtLjY0LTEuMzM0LTEuNDE3LjAwNS0uNzA1LjQ5OS0xLjI1MiAxLjM1NC0xLjQxbC0uMDIgMi44Mjd6IiBmaWxsPSIjZmZmIi8+PHNjcmlwdC8+PHNjcmlwdC8+PC9zdmc+',
|
|
19
|
+
// 数字货币
|
|
20
|
+
USDT: 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgdmlld0JveD0iMCAwIDMyIDMyIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxjaXJjbGUgY3g9IjE2IiBjeT0iMTYiIHI9IjE2IiBmaWxsPSIjMjZBMTdCIi8+PHBhdGggZmlsbD0iI0ZGRiIgZD0iTTE3LjkyMiAxNy4zODN2LS4wMDJjLS4xMS4wMDgtLjY3Ny4wNDItMS45NDIuMDQyLTEuMDEgMC0xLjcyMS0uMDMtMS45NzEtLjA0MnYuMDAzYy0zLjg4OC0uMTcxLTYuNzktLjg0OC02Ljc5LTEuNjU4czIuOTAyLTEuNDg2IDYuNzktMS42NnYyLjY0NGMuMjU0LjAxOC45ODIuMDYxIDEuOTg4LjA2MSAxLjIwNyAwIDEuODEyLS4wNSAxLjkyNS0uMDZ2LTIuNjQzYzMuODguMTczIDYuNzc1Ljg1IDYuNzc1IDEuNjU4IDAgLjgxLTIuODk1IDEuNDg1LTYuNzc1IDEuNjU3bTAtMy41OXYtMi4zNjZoNS40MTRWNy44MTlIOC41OTV2My42MDhoNS40MTR2Mi4zNjVjLTQuNC4yMDItNy43MDkgMS4wNzQtNy43MDkgMi4xMThzMy4zMDkgMS45MTUgNy43MDkgMi4xMTh2Ny41ODJoMy45MTN2LTcuNTg0YzQuMzkzLS4yMDIgNy42OTQtMS4wNzMgNy42OTQtMi4xMTZzLTMuMzAxLTEuOTE0LTcuNjk0LTIuMTE3Ii8+PC9nPjwvc3ZnPg==',
|
|
21
|
+
USDC: 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgdmlld0JveD0iMCAwIDMyIDMyIj48ZyBmaWxsPSJub25lIj48Y2lyY2xlIGN4PSIxNiIgY3k9IjE2IiByPSIxNiIgZmlsbD0iIzNFNzNDNCIvPjxnIGZpbGw9IiNGRkYiPjxwYXRoIGQ9Ik0yMC4wMjIgMTguMTI0YzAtMi4xMjQtMS4yOC0yLjg1Mi0zLjg0LTMuMTU2LTEuODI4LS4yNDMtMi4xOTMtLjcyOC0yLjE5My0xLjU3OHMuNjEtMS4zOTYgMS44MjgtMS4zOTZjMS4wOTcgMCAxLjcwNy4zNjQgMi4wMTEgMS4yNzVhLjQ2LjQ2IDAgMCAwIC40MjcuMzAzaC45NzVhLjQxNi40MTYgMCAwIDAgLjQyNy0uNDI1di0uMDZhMy4wNCAzLjA0IDAgMCAwLTIuNzQzLTIuNDg5VjkuMTQyYzAtLjI0My0uMTgzLS40MjUtLjQ4Ny0uNDg2aC0uOTE1Yy0uMjQzIDAtLjQyNi4xODItLjQ4Ny40ODZ2MS4zOTZjLTEuODI5LjI0Mi0yLjk4NiAxLjQ1Ni0yLjk4NiAyLjk3NCAwIDIuMDAyIDEuMjE4IDIuNzkxIDMuNzc4IDMuMDk1IDEuNzA3LjMwMyAyLjI1NS42NjggMi4yNTUgMS42MzkgMCAuOTctLjg1MyAxLjYzOC0yLjAxMSAxLjYzOC0xLjU4NSAwLTIuMTMzLS42NjctMi4zMTYtMS41NzgtLjA2LS4yNDItLjI0NC0uMzY0LS40MjctLjM2NGgtMS4wMzZhLjQxNi40MTYgMCAwIDAtLjQyNi40MjV2LjA2Yy4yNDMgMS41MTggMS4yMTkgMi42MSAzLjIzIDIuOTE0djEuNDU3YzAgLjI0Mi4xODMuNDI1LjQ4Ny40ODVoLjkxNWMuMjQzIDAgLjQyNi0uMTgyLjQ4Ny0uNDg1VjIxLjM0YzEuODI5LS4zMDMgMy4wNDctMS41NzggMy4wNDctMy4yMTd6Ii8+PHBhdGggZD0iTTEyLjg5MiAyNC40OTdjLTQuNzU0LTEuNy03LjE5Mi02Ljk4LTUuNDI0LTExLjY1My45MTQtMi41NSAyLjkyNS00LjQ5MSA1LjQyNC01LjQwMi4yNDQtLjEyMS4zNjUtLjMwMy4zNjUtLjYwN3YtLjg1YzAtLjI0Mi0uMTIxLS40MjQtLjM2NS0uNDg1LS4wNjEgMC0uMTgzIDAtLjI0NC4wNmExMC44OTUgMTAuODk1IDAgMCAwLTcuMTMgMTMuNzE3YzEuMDk2IDMuNCAzLjcxNyA2LjAxIDcuMTMgNy4xMDIuMjQ0LjEyMS40ODggMCAuNTQ4LS4yNDMuMDYxLS4wNi4wNjEtLjEyMi4wNjEtLjI0M3YtLjg1YzAtLjE4Mi0uMTgyLS40MjQtLjM2NS0uNTQ2bTYuNDYtMTguOTM2Yy0uMjQ0LS4xMjItLjQ4OCAwLS41NDguMjQyLS4wNjEuMDYxLS4wNjEuMTIyLS4wNjEuMjQzdi44NWMwIC4yNDMuMTgyLjQ4NS4zNjUuNjA3IDQuNzU0IDEuNyA3LjE5MiA2Ljk4IDUuNDI0IDExLjY1My0uOTE0IDIuNTUtMi45MjUgNC40OTEtNS40MjQgNS40MDItLjI0NC4xMjEtLjM2NS4zMDMtLjM2NS42MDd2Ljg1YzAgLjI0Mi4xMjEuNDI0LjM2NS40ODUuMDYxIDAgLjE4MyAwIC4yNDQtLjA2YTEwLjg5NSAxMC44OTUgMCAwIDAgNy4xMy0xMy43MTdjLTEuMDk2LTMuNDYtMy43NzgtNi4wNy03LjEzLTcuMTYyIi8+PC9nPjwvZz48L3N2Zz4=',
|
|
22
|
+
ETH: 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgdmlld0JveD0iMCAwIDMyIDMyIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxjaXJjbGUgY3g9IjE2IiBjeT0iMTYiIHI9IjE2IiBmaWxsPSIjNjI3RUVBIi8+PGcgZmlsbD0iI0ZGRiIgZmlsbC1ydWxlPSJub256ZXJvIj48cGF0aCBmaWxsLW9wYWNpdHk9Ii42MDIiIGQ9Ik0xNi40OTggNHY4Ljg3bDcuNDk3IDMuMzV6Ii8+PHBhdGggZD0iTTE2LjQ5OCA0TDkgMTYuMjJsNy40OTgtMy4zNXoiLz48cGF0aCBmaWxsLW9wYWNpdHk9Ii42MDIiIGQ9Ik0xNi40OTggMjEuOTY4djYuMDI3TDI0IDE3LjYxNnoiLz48cGF0aCBkPSJNMTYuNDk4IDI3Ljk5NXYtNi4wMjhMOSAxNy42MTZ6Ii8+PHBhdGggZmlsbC1vcGFjaXR5PSIuMiIgZD0iTTE2LjQ5OCAyMC41NzNsNy40OTctNC4zNTMtNy40OTctMy4zNDh6Ii8+PHBhdGggZmlsbC1vcGFjaXR5PSIuNjAyIiBkPSJNOSAxNi4yMmw3LjQ5OCA0LjM1M3YtNy43MDF6Ii8+PC9nPjwvZz48L3N2Zz4=',
|
|
23
|
+
TRX: 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgdmlld0JveD0iMCAwIDMyIDMyIj48ZyBmaWxsPSJub25lIj48Y2lyY2xlIGN4PSIxNiIgY3k9IjE2IiByPSIxNiIgZmlsbD0iI0VGMDAyNyIvPjxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik0yMS45MzIgOS45MTNMNy41IDcuMjU3bDcuNTk1IDE5LjExMiAxMC41ODMtMTIuODk0em0tLjIzMiAxLjE3bDIuMjA4IDIuMDk5LTYuMDM4IDEuMDkzem0tNS4xNDIgMi45NzNsLTYuMzY0LTUuMjc4IDEwLjQwMiAxLjkxNHptLS40NTMuOTM0bC0xLjAzOCA4LjU4TDkuNDcyIDkuNDg3em0uOTYuNDU1bDYuNjg3LTEuMjEtNy42NyA5LjM0M3oiLz48L2c+PC9zdmc+',
|
|
24
|
+
BNB: 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgdmlld0JveD0iMCAwIDMyIDMyIj48ZyBmaWxsPSJub25lIj48Y2lyY2xlIGN4PSIxNiIgY3k9IjE2IiByPSIxNiIgZmlsbD0iI0YzQkEyRiIvPjxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik0xMi4xMTYgMTQuNDA0TDE2IDEwLjUybDMuODg2IDMuODg2IDIuMjYtMi4yNkwxNiA2bC02LjE0NCA2LjE0NHpNNiAxNmwyLjI2LTIuMjZMMTAuNTIgMTZsLTIuMjYgMi4yNnptNi4xMTYgMS41OTZMMTYgMjEuNDhsMy44ODYtMy44ODYgMi4yNiAyLjI1OUwxNiAyNmwtNi4xNDQtNi4xNDQtLjAwMy0uMDAzek0yMS40OCAxNmwyLjI2LTIuMjZMMjYgMTZsLTIuMjYgMi4yNnptLTMuMTg4LS4wMDJoLjAwMlYxNkwxNiAxOC4yOTRsLTIuMjkxLTIuMjktLjAwNC0uMDA0LjAwNC0uMDAzLjQwMS0uNDAyLjE5NS0uMTk1TDE2IDEzLjcwNnoiLz48L2c+PC9zdmc+',
|
|
25
|
+
MATIC: 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgdmlld0JveD0iMCAwIDMyIDMyIj48ZyBmaWxsPSJub25lIj48Y2lyY2xlIGN4PSIxNiIgY3k9IjE2IiByPSIxNiIgZmlsbD0iIzZGNDFEOCIvPjxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik0yMS4wOTIgMTIuNjkzYy0uMzY5LS4yMTUtLjg0OC0uMjE1LTEuMjU0IDBsLTIuODc5IDEuNjU0LTEuOTU1IDEuMDc4LTIuODc5IDEuNjUzYy0uMzY5LjIxNi0uODQ4LjIxNi0xLjI1NCAwbC0yLjI4OC0xLjI5NGMtLjM2OS0uMjE1LS42MjctLjYxLS42MjctMS4wNDJWMTIuMTljMC0uNDMxLjIyMS0uODI2LjYyNy0xLjA0MmwyLjI1LTEuMjU4Yy4zNy0uMjE2Ljg1LS4yMTYgMS4yNTYgMGwyLjI1IDEuMjU4Yy4zNy4yMTYuNjI4LjYxMS42MjggMS4wNDJ2MS42NTRsMS45NTUtMS4xMTV2LTEuNjUzYTEuMTYgMS4xNiAwIDAgMC0uNjI3LTEuMDQybC00LjE3LTIuMzcyYy0uMzY5LS4yMTYtLjg0OC0uMjE2LTEuMjU0IDBsLTQuMjQ0IDIuMzcyQTEuMTYgMS4xNiAwIDAgMCA2IDExLjA3NnY0Ljc4YzAgLjQzMi4yMjEuODI3LjYyNyAxLjA0M2w0LjI0NCAyLjM3MmMuMzY5LjIxNS44NDkuMjE1IDEuMjU0IDBsMi44NzktMS42MTggMS45NTUtMS4xMTQgMi44NzktMS42MTdjLjM2OS0uMjE2Ljg0OC0uMjE2IDEuMjU0IDBsMi4yNTEgMS4yNThjLjM3LjIxNS42MjcuNjEuNjI3IDEuMDQydjIuNTUyYzAgLjQzMS0uMjIuODI2LS42MjcgMS4wNDJsLTIuMjUgMS4yOTRjLS4zNy4yMTYtLjg1LjIxNi0xLjI1NSAwbC0yLjI1MS0xLjI1OGMtLjM3LS4yMTYtLjYyOC0uNjExLS42MjgtMS4wNDJ2LTEuNjU0bC0xLjk1NSAxLjExNXYxLjY1M2MwIC40MzEuMjIxLjgyNy42MjcgMS4wNDJsNC4yNDQgMi4zNzJjLjM2OS4yMTYuODQ4LjIxNiAxLjI1NCAwbDQuMjQ0LTIuMzcyYy4zNjktLjIxNS42MjctLjYxLjYyNy0xLjA0MnYtNC43OGExLjE2IDEuMTYgMCAwIDAtLjYyNy0xLjA0MmwtNC4yOC0yLjQwOXoiLz48L2c+PC9zdmc+',
|
|
26
|
+
BTC: 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgdmlld0JveD0iMCAwIDMyIDMyIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxjaXJjbGUgY3g9IjE2IiBjeT0iMTYiIHI9IjE2IiBmaWxsPSIjRjc5MzFBIi8+PHBhdGggZmlsbD0iI0ZGRiIgZmlsbC1ydWxlPSJub256ZXJvIiBkPSJNMjMuMTg5IDE0LjAyYy4zMTQtMi4wOTYtMS4yODMtMy4yMjMtMy40NjUtMy45NzVsLjcwOC0yLjg0LTEuNzI4LS40My0uNjkgMi43NjVjLS40NTQtLjExNC0uOTItLjIyLTEuMzg1LS4zMjZsLjY5NS0yLjc4M0wxNS41OTYgNmwtLjcwOCAyLjgzOXEtLjU2NS0uMTI3LTEuMTA0LS4yNmwuMDAyLS4wMDktMi4zODQtLjU5NS0uNDYgMS44NDZzMS4yODMuMjk0IDEuMjU2LjMxMmMuNy4xNzUuODI2LjYzOC44MDUgMS4wMDZsLS44MDYgMy4yMzVxLjA3My4wMTcuMTguMDU3bC0uMTgzLS4wNDUtMS4xMyA0LjUzMmMtLjA4Ni4yMTItLjMwMy41MzEtLjc5My40MS4wMTguMDI1LTEuMjU2LS4zMTMtMS4yNTYtLjMxM2wtLjg1OCAxLjk3OCAyLjI1LjU2MWMuNDE4LjEwNS44MjguMjE1IDEuMjMxLjMxOGwtLjcxNSAyLjg3MiAxLjcyNy40My43MDgtMi44NHEuNzA3LjE5IDEuMzc4LjM1N2wtLjcwNiAyLjgyOCAxLjcyOC40My43MTUtMi44NjZjMi45NDguNTU4IDUuMTY0LjMzMyA2LjA5Ny0yLjMzMy43NTItMi4xNDYtLjAzNy0zLjM4NS0xLjU4OC00LjE5MiAxLjEzLS4yNiAxLjk4LTEuMDAzIDIuMjA3LTIuNTM4bS0zLjk1IDUuNTM4Yy0uNTMzIDIuMTQ3LTQuMTQ4Ljk4Ni01LjMyLjY5NWwuOTUtMy44MDVjMS4xNzIuMjkzIDQuOTI5Ljg3MiA0LjM3IDMuMTFtLjUzNS01LjU2OWMtLjQ4NyAxLjk1My0zLjQ5NS45Ni00LjQ3LjcxN2wuODYtMy40NWMuOTc1LjI0MyA0LjExOC42OTYgMy42MSAyLjczMyIvPjwvZz48L3N2Zz4=',
|
|
27
|
+
TON: 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNTYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgY2xhc3M9IlRvbmNvaW5XaWRnZXRfX2xvZ28iPjxwYXRoIGQ9Ik0yOCA1NmMxNS40NjQgMCAyOC0xMi41MzYgMjgtMjhTNDMuNDY0IDAgMjggMCAwIDEyLjUzNiAwIDI4czEyLjUzNiAyOCAyOCAyOHoiIGZpbGw9IiMwMDk4RUEiLz48cGF0aCBkPSJNMzcuNTYgMTUuNjI4SDE4LjQ0Yy0zLjUxNiAwLTUuNzQ1IDMuNzkyLTMuOTc2IDYuODU4bDExLjgwMSAyMC40NTVjLjc3IDEuMzM1IDIuNyAxLjMzNSAzLjQ3IDBsMTEuODA0LTIwLjQ1NWMxLjc2Ny0zLjA2LS40NjItNi44NTgtMy45NzUtNi44NThoLS4wMDN6TTI2LjI1NSAzNi44MDdsLTIuNTctNC45NzQtNi4yMDItMTEuMDkyYy0uNDA5LS43MS4wOTYtMS42Mi45NTMtMS42Mmg3LjgxNlYzNi44MWwuMDAzLS4wMDJ6TTM4LjUxIDIwLjczOWwtNi4yIDExLjA5Ni0yLjU3IDQuOTcyVjE5LjExOWg3LjgxN2MuODU3IDAgMS4zNjIuOTEuOTUzIDEuNjJ6IiBmaWxsPSIjZmZmIi8+PC9zdmc+',
|
|
28
|
+
SOL: 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgdmlld0JveD0iMCAwIDMyIDMyIj48ZyBmaWxsPSJub25lIj48Y2lyY2xlIGN4PSIxNiIgY3k9IjE2IiByPSIxNiIgZmlsbD0iIzY2RjlBMSIvPjxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik05LjkyNSAxOS42ODdhLjYuNiAwIDAgMSAuNDE1LS4xN2gxNC4zNjZhLjI5LjI5IDAgMCAxIC4yMDcuNDk3bC0yLjgzOCAyLjgxNWEuNi42IDAgMCAxLS40MTUuMTcxSDcuMjk0YS4yOTEuMjkxIDAgMCAxLS4yMDctLjQ5OHptMC0xMC41MTdBLjYuNiAwIDAgMSAxMC4zNCA5aDE0LjM2NmMuMjYxIDAgLjM5Mi4zMTQuMjA3LjQ5OGwtMi44MzggMi44MTVhLjYuNiAwIDAgMS0uNDE1LjE3SDcuMjk0YS4yOTEuMjkxIDAgMCAxLS4yMDctLjQ5N3ptMTIuMTUgNS4yMjVhLjYuNiAwIDAgMC0uNDE1LS4xN0g3LjI5NGEuMjkxLjI5MSAwIDAgMC0uMjA3LjQ5OGwyLjgzOCAyLjgxNWMuMTEuMTA5LjI2LjE3LjQxNS4xN2gxNC4zNjZhLjI5MS4yOTEgMCAwIDAgLjIwNy0uNDk4eiIvPjwvZz48L3N2Zz4=',
|
|
21
29
|
});
|
|
22
|
-
const textIcons = ref(['¥', '€', '
|
|
23
|
-
const
|
|
30
|
+
export const textIcons = ref(['¥', '€', '₱', '$', '৳', '£', '₪', '₹', '₩', '₽', '฿', '₺', '₫', 'R', '₴']);
|
|
31
|
+
const fullbackIcon = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgdmlld0JveD0iMCAwIDIwIDIwIj48cGF0aCBmaWxsPSIjODQ4YTlkNTUiIGQ9Ik0xMCAyMGExMCAxMCAwIDEgMSAwLTIwIDEwIDEwIDAgMCAxIDAgMjBtMS01aDFhMyAzIDAgMCAwIDAtNkg3Ljk5YTEgMSAwIDAgMSAwLTJIMTRWNWgtM1YzSDl2Mkg4YTMgMyAwIDEgMCAwIDZoNGExIDEgMCAxIDEgMCAySDZ2MmgzdjJoMnoiLz48L3N2Zz4=';
|
|
24
32
|
|
|
25
33
|
const checkHttpUrl = (value: unknown) => String(value).startsWith('http');
|
|
26
34
|
const checkBase64 = (value: unknown) => String(value).startsWith('data:image');
|
|
@@ -31,27 +39,27 @@ defineOptions({
|
|
|
31
39
|
inheritAttrs: false,
|
|
32
40
|
});
|
|
33
41
|
const props = withDefaults(defineProps<CurrencyIconProps>(), {
|
|
34
|
-
size: '1.
|
|
42
|
+
size: '1.2em',
|
|
35
43
|
symbol: '',
|
|
36
|
-
|
|
44
|
+
iconType: 'img',
|
|
37
45
|
});
|
|
38
46
|
|
|
39
|
-
const
|
|
40
|
-
const cdn = computed(() => props.useCdn ? (props.cdn || toValue(cdnCtx)) : '');
|
|
47
|
+
const base = computed(() => props.iconType === 'img' ? (props.base || iconBase.value) : '');
|
|
41
48
|
const src = computed(() => {
|
|
42
49
|
if (checkHttpUrl(props.symbol) || checkBase64(props.symbol))
|
|
43
50
|
return props.symbol;
|
|
44
|
-
else if (textIcons.value
|
|
51
|
+
else if (props.iconType === 'text' || textIcons.value.includes(props.symbol))
|
|
45
52
|
return props.symbol;
|
|
46
|
-
else if (
|
|
47
|
-
return
|
|
53
|
+
else if (imgIcons.value[props.symbol])
|
|
54
|
+
return imgIcons.value[props.symbol];
|
|
55
|
+
else if (base.value)
|
|
56
|
+
return base.value.replace('{symbol}', props.symbol);
|
|
48
57
|
else
|
|
49
|
-
return
|
|
58
|
+
return fullbackIcon;
|
|
50
59
|
});
|
|
51
60
|
|
|
52
61
|
function onError(ev: Event) {
|
|
53
|
-
|
|
54
|
-
$img.src = fullback;
|
|
62
|
+
(ev.target as HTMLImageElement).src = fullbackIcon;
|
|
55
63
|
}
|
|
56
64
|
</script>
|
|
57
65
|
|
|
@@ -59,23 +67,19 @@ function onError(ev: Event) {
|
|
|
59
67
|
<img
|
|
60
68
|
v-if="checkHttpUrl(src) || checkBase64(src)"
|
|
61
69
|
v-bind="$attrs"
|
|
62
|
-
class="
|
|
70
|
+
class="symbol-icon"
|
|
63
71
|
:src="src"
|
|
64
72
|
:alt="props.symbol"
|
|
65
73
|
:style="{ fontSize: $props.size }"
|
|
74
|
+
:title="props.iconType === 'img' ? props.symbol : ''"
|
|
66
75
|
@error="onError"
|
|
67
76
|
>
|
|
68
|
-
<span v-else v-bind="$attrs">{{ src }}</span>
|
|
77
|
+
<span v-else v-bind="$attrs" class="symbol-text">{{ src }}</span>
|
|
69
78
|
</template>
|
|
70
79
|
|
|
71
80
|
<style lang="scss" scoped>
|
|
72
|
-
img.
|
|
81
|
+
img.symbol-icon {
|
|
73
82
|
width: 1em;
|
|
74
83
|
height: 1em;
|
|
75
84
|
}
|
|
76
85
|
</style>
|
|
77
|
-
|
|
78
|
-
<!--
|
|
79
|
-
透明图片
|
|
80
|
-
data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7
|
|
81
|
-
-->
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import dayjs from '../../../libs/dayjs';
|
|
3
|
+
import { ref, watch, computed } from 'vue';
|
|
4
|
+
import { Button, ButtonGroup, RadioGroup, RangePicker } from 'ant-design-vue';
|
|
5
|
+
|
|
6
|
+
type RangeValue = [dayjs.Dayjs, dayjs.Dayjs] | undefined;
|
|
7
|
+
|
|
8
|
+
const props = defineProps<{
|
|
9
|
+
min?: dayjs.Dayjs;
|
|
10
|
+
max?: dayjs.Dayjs;
|
|
11
|
+
}>();
|
|
12
|
+
const value = defineModel<RangeValue>('value');
|
|
13
|
+
const pickerOptions = [
|
|
14
|
+
{ value: 'date', label: '日' },
|
|
15
|
+
{ value: 'week', label: '周' },
|
|
16
|
+
{ value: 'month', label: '月' },
|
|
17
|
+
{ value: 'year', label: '年' },
|
|
18
|
+
];
|
|
19
|
+
const pickerType = ref(pickerOptions[0].value);
|
|
20
|
+
// 基于 pickerType 和 value 的值,周期跨度,例如开始月为1月份,结束月为4月份,span 为 3
|
|
21
|
+
const span = computed(() => {
|
|
22
|
+
if (value.value?.length !== 2) {
|
|
23
|
+
return 1;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const start = dayjs(value.value[0]);
|
|
27
|
+
const end = dayjs(value.value[1]);
|
|
28
|
+
|
|
29
|
+
if (pickerType.value === 'date') {
|
|
30
|
+
return end.diff(start, 'day') + 1;
|
|
31
|
+
} else if (pickerType.value === 'week') {
|
|
32
|
+
return end.diff(start, 'week') + 1;
|
|
33
|
+
} else if (pickerType.value === 'month') {
|
|
34
|
+
return end.diff(start, 'month') + 1;
|
|
35
|
+
} else if (pickerType.value === 'year') {
|
|
36
|
+
return end.diff(start, 'year') + 1;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return 1;
|
|
40
|
+
})
|
|
41
|
+
|
|
42
|
+
watch(pickerType, toCurrent, { immediate: true });
|
|
43
|
+
|
|
44
|
+
function toPrev() {
|
|
45
|
+
if (value.value?.length !== 2) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
let newVal: RangeValue;
|
|
50
|
+
const s = span.value;
|
|
51
|
+
|
|
52
|
+
if (pickerType.value === 'date')
|
|
53
|
+
newVal = [dayjs(value.value[0]).subtract(s, 'day').startOf('day'), dayjs(value.value[1]).subtract(s, 'day').endOf('day')];
|
|
54
|
+
else if (pickerType.value === 'week')
|
|
55
|
+
newVal = [dayjs(value.value[0]).subtract(s, 'week').startOf('week'), dayjs(value.value[1]).subtract(s, 'week').endOf('week')];
|
|
56
|
+
else if (pickerType.value === 'month')
|
|
57
|
+
newVal = [dayjs(value.value[0]).subtract(s, 'month').startOf('month'), dayjs(value.value[1]).subtract(s, 'month').endOf('month')];
|
|
58
|
+
else if (pickerType.value === 'year')
|
|
59
|
+
newVal = [dayjs(value.value[0]).subtract(s, 'year').startOf('year'), dayjs(value.value[1]).subtract(s, 'year').endOf('year')];
|
|
60
|
+
|
|
61
|
+
value.value = newVal;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
function toCurrent() {
|
|
65
|
+
let newVal: RangeValue;
|
|
66
|
+
|
|
67
|
+
if (pickerType.value === 'date')
|
|
68
|
+
newVal = [dayjs().startOf('day'), dayjs().endOf('day')];
|
|
69
|
+
else if (pickerType.value === 'week')
|
|
70
|
+
newVal = [dayjs().startOf('week'), dayjs().endOf('week')];
|
|
71
|
+
else if (pickerType.value === 'month')
|
|
72
|
+
newVal = [dayjs().startOf('month'), dayjs().endOf('month')];
|
|
73
|
+
else if (pickerType.value === 'year')
|
|
74
|
+
newVal = [dayjs().startOf('year'), dayjs().endOf('year')];
|
|
75
|
+
|
|
76
|
+
value.value = newVal;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
function toNext() {
|
|
80
|
+
if (value.value?.length !== 2) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
let newVal: RangeValue;
|
|
85
|
+
const s = span.value;
|
|
86
|
+
|
|
87
|
+
if (pickerType.value === 'date')
|
|
88
|
+
newVal = [dayjs(value.value[0]).add(s, 'day').startOf('day'), dayjs(value.value[1]).add(s, 'day').endOf('day')];
|
|
89
|
+
else if (pickerType.value === 'week')
|
|
90
|
+
newVal = [dayjs(value.value[0]).add(s, 'week').startOf('week'), dayjs(value.value[1]).add(s, 'week').endOf('week')];
|
|
91
|
+
else if (pickerType.value === 'month')
|
|
92
|
+
newVal = [dayjs(value.value[0]).add(s, 'month').startOf('month'), dayjs(value.value[1]).add(s, 'month').endOf('month')];
|
|
93
|
+
else if (pickerType.value === 'year')
|
|
94
|
+
newVal = [dayjs(value.value[0]).add(s, 'year').startOf('year'), dayjs(value.value[1]).add(s, 'year').endOf('year')];
|
|
95
|
+
|
|
96
|
+
value.value = newVal;
|
|
97
|
+
}
|
|
98
|
+
</script>
|
|
99
|
+
|
|
100
|
+
<template>
|
|
101
|
+
<div class="flex items-center gap-1">
|
|
102
|
+
<RadioGroup v-model:value="pickerType" :options="pickerOptions" buttonStyle="solid" optionType="button" />
|
|
103
|
+
<RangePicker class="w-60" v-model:value="value" :picker="(pickerType as any)" :allowClear="false" />
|
|
104
|
+
<ButtonGroup>
|
|
105
|
+
<Button @click="toPrev" title="上一周期">
|
|
106
|
+
<div class="flex items-center -mx-1">
|
|
107
|
+
<i class="i-ion:arrow-left-b text-[1.2em]" />
|
|
108
|
+
</div>
|
|
109
|
+
</Button>
|
|
110
|
+
<Button @click="toCurrent" title="当前周期">
|
|
111
|
+
<div class="flex items-center justify-center">
|
|
112
|
+
<div class="size-2 rounded-full bg-current" />
|
|
113
|
+
</div>
|
|
114
|
+
</Button>
|
|
115
|
+
<Button @click="toNext" title="下一周期">
|
|
116
|
+
<div class="flex items-center -mx-1">
|
|
117
|
+
<i class="i-ion:arrow-right-b text-[1.2em]" />
|
|
118
|
+
</div>
|
|
119
|
+
</Button>
|
|
120
|
+
</ButtonGroup>
|
|
121
|
+
</div>
|
|
122
|
+
</template>
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { computed } from 'vue';
|
|
3
|
+
import { Dropdown, Menu, MenuItem } from 'ant-design-vue';
|
|
4
|
+
|
|
5
|
+
const props = defineProps<{
|
|
6
|
+
types: Array<string | number>[];
|
|
7
|
+
}>();
|
|
8
|
+
|
|
9
|
+
const value = defineModel<string | number>('value', { default: 'create_time' });
|
|
10
|
+
const current = computed(() => props.types.find(item => item[0] === value.value));
|
|
11
|
+
</script>
|
|
12
|
+
|
|
13
|
+
<template>
|
|
14
|
+
<Dropdown>
|
|
15
|
+
<span class="cursor-pointer underline underline-offset-3">{{ current?.[1] || '时间' }}</span>
|
|
16
|
+
<template #overlay>
|
|
17
|
+
<Menu>
|
|
18
|
+
<MenuItem v-for="item of props.types" :key="item[0]" @click="value = item[0]">
|
|
19
|
+
{{ item[1] }}
|
|
20
|
+
</MenuItem>
|
|
21
|
+
</Menu>
|
|
22
|
+
</template>
|
|
23
|
+
</Dropdown>
|
|
24
|
+
</template>
|