diff --git a/components.d.ts b/components.d.ts index b7a1085..8f4c5fd 100644 --- a/components.d.ts +++ b/components.d.ts @@ -20,6 +20,8 @@ declare module 'vue' { IonAvatar: typeof import('@ionic/vue')['IonAvatar'] IonBackButton: typeof import('@ionic/vue')['IonBackButton'] IonBackdrop: typeof import('@ionic/vue')['IonBackdrop'] + IonBreadcrumb: typeof import('@ionic/vue')['IonBreadcrumb'] + IonBreadcrumbs: typeof import('@ionic/vue')['IonBreadcrumbs'] IonButton: typeof import('@ionic/vue')['IonButton'] IonButtons: typeof import('@ionic/vue')['IonButtons'] IonCard: typeof import('@ionic/vue')['IonCard'] @@ -58,10 +60,16 @@ declare module 'vue' { RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] UiAvatar: typeof import('./src/components/ui/avatar/index.vue')['default'] + UiCollapse: typeof import('./src/components/ui/collapse/index.vue')['default'] + UiCollapseExample: typeof import('./src/components/ui/collapse/example.vue')['default'] + UiDatetime: typeof import('./src/components/ui/datetime/index.vue')['default'] UiDivider: typeof import('./src/components/ui/divider/index.vue')['default'] UiForm: typeof import('./src/components/ui/form/index.vue')['default'] + UiFormFormItem: typeof import('./src/components/ui/form/form-item.vue')['default'] + UiFormItem: typeof import('./src/components/ui/form/item.vue')['default'] UiInput: typeof import('./src/components/ui/input/index.vue')['default'] UiInputLabel: typeof import('./src/components/ui/input-label/index.vue')['default'] + UiResult: typeof import('./src/components/ui/result/index.vue')['default'] UiSelect: typeof import('./src/components/ui/select/index.vue')['default'] UiSelectLabel: typeof import('./src/components/ui/select-label/index.vue')['default'] } @@ -77,6 +85,8 @@ declare global { const IonAvatar: typeof import('@ionic/vue')['IonAvatar'] const IonBackButton: typeof import('@ionic/vue')['IonBackButton'] const IonBackdrop: typeof import('@ionic/vue')['IonBackdrop'] + const IonBreadcrumb: typeof import('@ionic/vue')['IonBreadcrumb'] + const IonBreadcrumbs: typeof import('@ionic/vue')['IonBreadcrumbs'] const IonButton: typeof import('@ionic/vue')['IonButton'] const IonButtons: typeof import('@ionic/vue')['IonButtons'] const IonCard: typeof import('@ionic/vue')['IonCard'] @@ -115,10 +125,16 @@ declare global { const RouterLink: typeof import('vue-router')['RouterLink'] const RouterView: typeof import('vue-router')['RouterView'] const UiAvatar: typeof import('./src/components/ui/avatar/index.vue')['default'] + const UiCollapse: typeof import('./src/components/ui/collapse/index.vue')['default'] + const UiCollapseExample: typeof import('./src/components/ui/collapse/example.vue')['default'] + const UiDatetime: typeof import('./src/components/ui/datetime/index.vue')['default'] const UiDivider: typeof import('./src/components/ui/divider/index.vue')['default'] const UiForm: typeof import('./src/components/ui/form/index.vue')['default'] + const UiFormFormItem: typeof import('./src/components/ui/form/form-item.vue')['default'] + const UiFormItem: typeof import('./src/components/ui/form/item.vue')['default'] const UiInput: typeof import('./src/components/ui/input/index.vue')['default'] const UiInputLabel: typeof import('./src/components/ui/input-label/index.vue')['default'] + const UiResult: typeof import('./src/components/ui/result/index.vue')['default'] const UiSelect: typeof import('./src/components/ui/select/index.vue')['default'] const UiSelectLabel: typeof import('./src/components/ui/select-label/index.vue')['default'] } \ No newline at end of file diff --git a/package.json b/package.json index 27137b7..49e9193 100644 --- a/package.json +++ b/package.json @@ -23,17 +23,21 @@ "@elysiajs/eden": "^1.4.5", "@ionic/vue": "^8.7.11", "@ionic/vue-router": "^8.7.11", - "@riwa/api-types": "http://192.168.1.36:9527/api/riwa-api-types-0.0.12.tgz", + "@riwa/api-types": "http://192.168.1.36:9527/api/riwa-api-types-0.0.16.tgz", "@tailwindcss/vite": "^4.1.18", + "@vee-validate/yup": "^4.15.1", "@vueuse/core": "^14.1.0", + "@vueuse/router": "^14.1.0", "better-auth": "^1.4.6", "ionicons": "^8.0.13", "lodash-es": "^4.17.21", "pinia": "^3.0.4", "tailwindcss": "^4.1.18", + "vee-validate": "^4.15.1", "vue": "^3.5.25", "vue-i18n": "^11.2.2", - "vue-router": "^4.6.3" + "vue-router": "^4.6.3", + "yup": "^1.7.1" }, "devDependencies": { "@antfu/eslint-config": "^6.6.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ac56749..d6fb3d7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -36,14 +36,20 @@ importers: specifier: ^8.7.11 version: 8.7.11(@stencil/core@4.39.0)(vue-router@4.6.3(vue@3.5.25(typescript@5.9.3)))(vue@3.5.25(typescript@5.9.3)) '@riwa/api-types': - specifier: http://192.168.1.36:9527/api/riwa-api-types-0.0.12.tgz - version: http://192.168.1.36:9527/api/riwa-api-types-0.0.12.tgz(@elysiajs/eden@1.4.5(elysia@1.4.18(@sinclair/typebox@0.34.41)(exact-mirror@0.2.5(@sinclair/typebox@0.34.41))(file-type@21.1.1)(openapi-types@12.1.3)(typescript@5.9.3))) + specifier: http://192.168.1.36:9527/api/riwa-api-types-0.0.16.tgz + version: http://192.168.1.36:9527/api/riwa-api-types-0.0.16.tgz(@elysiajs/eden@1.4.5(elysia@1.4.18(@sinclair/typebox@0.34.41)(exact-mirror@0.2.5(@sinclair/typebox@0.34.41))(file-type@21.1.1)(openapi-types@12.1.3)(typescript@5.9.3))) '@tailwindcss/vite': specifier: ^4.1.18 version: 4.1.18(vite@7.2.7(@types/node@24.10.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2)) + '@vee-validate/yup': + specifier: ^4.15.1 + version: 4.15.1(vue@3.5.25(typescript@5.9.3))(yup@1.7.1) '@vueuse/core': specifier: ^14.1.0 version: 14.1.0(vue@3.5.25(typescript@5.9.3)) + '@vueuse/router': + specifier: ^14.1.0 + version: 14.1.0(vue-router@4.6.3(vue@3.5.25(typescript@5.9.3)))(vue@3.5.25(typescript@5.9.3)) better-auth: specifier: ^1.4.6 version: 1.4.6(vue@3.5.25(typescript@5.9.3)) @@ -59,6 +65,9 @@ importers: tailwindcss: specifier: ^4.1.18 version: 4.1.18 + vee-validate: + specifier: ^4.15.1 + version: 4.15.1(vue@3.5.25(typescript@5.9.3)) vue: specifier: ^3.5.25 version: 3.5.25(typescript@5.9.3) @@ -68,6 +77,9 @@ importers: vue-router: specifier: ^4.6.3 version: 4.6.3(vue@3.5.25(typescript@5.9.3)) + yup: + specifier: ^1.7.1 + version: 1.7.1 devDependencies: '@antfu/eslint-config': specifier: ^6.6.1 @@ -1251,9 +1263,9 @@ packages: '@quansync/fs@1.0.0': resolution: {integrity: sha512-4TJ3DFtlf1L5LDMaM6CanJ/0lckGNtJcMjQ1NAV6zDmA0tEHKZtxNKin8EgPaVX1YzljbxckyT2tJrpQKAtngQ==} - '@riwa/api-types@http://192.168.1.36:9527/api/riwa-api-types-0.0.12.tgz': - resolution: {tarball: http://192.168.1.36:9527/api/riwa-api-types-0.0.12.tgz} - version: 0.0.12 + '@riwa/api-types@http://192.168.1.36:9527/api/riwa-api-types-0.0.16.tgz': + resolution: {tarball: http://192.168.1.36:9527/api/riwa-api-types-0.0.16.tgz} + version: 0.0.16 peerDependencies: '@elysiajs/eden': ^1.4.5 @@ -1744,6 +1756,11 @@ packages: peerDependencies: vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0 + '@vee-validate/yup@4.15.1': + resolution: {integrity: sha512-+u6lI1IZftjHphj+mTCPJRruwBBwv1IKKCI1EFm6ipQroAPibkS5M8UNX+yeVYG5++ix6m1rsv4/SJvJJQTWJg==} + peerDependencies: + yup: ^1.3.2 + '@vitejs/plugin-legacy@7.2.1': resolution: {integrity: sha512-CaXb/y0mlfu7jQRELEJJc2/5w2bX2m1JraARgFnvSB2yfvnCNJVWWlqAo6WjnKoepOwKx8gs0ugJThPLKCOXIg==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1903,6 +1920,12 @@ packages: '@vueuse/metadata@14.1.0': resolution: {integrity: sha512-7hK4g015rWn2PhKcZ99NyT+ZD9sbwm7SGvp7k+k+rKGWnLjS/oQozoIZzWfCewSUeBmnJkIb+CNr7Zc/EyRnnA==} + '@vueuse/router@14.1.0': + resolution: {integrity: sha512-8h7g0PhjcMC2Vnu9zBkN1J038JFIzkS3/DP2L5ouzFEhY3YAM8zkIOZ0K+hzAWkYEFLGmWGcgBfuvCUD0U42Jw==} + peerDependencies: + vue: ^3.5.0 + vue-router: ^4.0.0 + '@vueuse/shared@14.1.0': resolution: {integrity: sha512-EcKxtYvn6gx1F8z9J5/rsg3+lTQnvOruQd8fUecW99DCK04BkWD7z5KQ/wTAx+DazyoEE9dJt/zV8OIEQbM6kw==} peerDependencies: @@ -3875,6 +3898,9 @@ packages: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} + property-expr@2.0.6: + resolution: {integrity: sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==} + proto-list@1.2.4: resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} @@ -4244,6 +4270,9 @@ packages: through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + tiny-case@1.0.3: + resolution: {integrity: sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q==} + tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} @@ -4293,6 +4322,9 @@ packages: resolution: {integrity: sha512-9mjy3frhioGIVGcwamlVlUyJ9x+WHw/TXiz9R4YOlmsIuBN43r9Dp8HZ35SF9EKjHrn3BUZj04CF+YqZ2oJ+7w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + toposort@2.0.2: + resolution: {integrity: sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==} + totalist@3.0.1: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} @@ -4345,6 +4377,14 @@ packages: resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} engines: {node: '>=8'} + type-fest@2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} + + type-fest@4.41.0: + resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} + engines: {node: '>=16'} + typescript-eslint@8.49.0: resolution: {integrity: sha512-zRSVH1WXD0uXczCXw+nsdjGPUdx4dfrs5VQoHnUWmv1U3oNlAKv4FUNdLDhVUg+gYn+a5hUESqch//Rv5wVhrg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -4504,6 +4544,11 @@ packages: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true + vee-validate@4.15.1: + resolution: {integrity: sha512-DkFsiTwEKau8VIxyZBGdO6tOudD+QoUBPuHj3e6QFqmbfCRj1ArmYWue9lEp6jLSWBIw4XPlDLjFIZNLdRAMSg==} + peerDependencies: + vue: ^3.4.26 + verror@1.10.0: resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} engines: {'0': node >=0.6.0} @@ -4735,6 +4780,9 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} + yup@1.7.1: + resolution: {integrity: sha512-GKHFX2nXul2/4Dtfxhozv701jLQHdf6J34YDh2cEkpqoo8le5Mg6/LrdseVLrFarmFygZTlfIhHx/QKfb/QWXw==} + zod@4.1.13: resolution: {integrity: sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig==} @@ -6053,7 +6101,7 @@ snapshots: dependencies: quansync: 1.0.0 - '@riwa/api-types@http://192.168.1.36:9527/api/riwa-api-types-0.0.12.tgz(@elysiajs/eden@1.4.5(elysia@1.4.18(@sinclair/typebox@0.34.41)(exact-mirror@0.2.5(@sinclair/typebox@0.34.41))(file-type@21.1.1)(openapi-types@12.1.3)(typescript@5.9.3)))': + '@riwa/api-types@http://192.168.1.36:9527/api/riwa-api-types-0.0.16.tgz(@elysiajs/eden@1.4.5(elysia@1.4.18(@sinclair/typebox@0.34.41)(exact-mirror@0.2.5(@sinclair/typebox@0.34.41))(file-type@21.1.1)(openapi-types@12.1.3)(typescript@5.9.3)))': dependencies: '@elysiajs/eden': 1.4.5(elysia@1.4.18(@sinclair/typebox@0.34.41)(exact-mirror@0.2.5(@sinclair/typebox@0.34.41))(file-type@21.1.1)(openapi-types@12.1.3)(typescript@5.9.3)) @@ -6561,6 +6609,14 @@ snapshots: unplugin-utils: 0.3.1 vite: 7.2.7(@types/node@24.10.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2) + '@vee-validate/yup@4.15.1(vue@3.5.25(typescript@5.9.3))(yup@1.7.1)': + dependencies: + type-fest: 4.41.0 + vee-validate: 4.15.1(vue@3.5.25(typescript@5.9.3)) + yup: 1.7.1 + transitivePeerDependencies: + - vue + '@vitejs/plugin-legacy@7.2.1(terser@5.44.1)(vite@7.2.7(@types/node@24.10.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(yaml@2.8.2))': dependencies: '@babel/core': 7.28.5 @@ -6802,6 +6858,12 @@ snapshots: '@vueuse/metadata@14.1.0': {} + '@vueuse/router@14.1.0(vue-router@4.6.3(vue@3.5.25(typescript@5.9.3)))(vue@3.5.25(typescript@5.9.3))': + dependencies: + '@vueuse/shared': 14.1.0(vue@3.5.25(typescript@5.9.3)) + vue: 3.5.25(typescript@5.9.3) + vue-router: 4.6.3(vue@3.5.25(typescript@5.9.3)) + '@vueuse/shared@14.1.0(vue@3.5.25(typescript@5.9.3))': dependencies: vue: 3.5.25(typescript@5.9.3) @@ -8962,6 +9024,8 @@ snapshots: kleur: 3.0.3 sisteransi: 1.0.5 + property-expr@2.0.6: {} + proto-list@1.2.4: {} proxy-from-env@1.0.0: {} @@ -9344,6 +9408,8 @@ snapshots: through@2.3.8: {} + tiny-case@1.0.3: {} + tinybench@2.9.0: {} tinyexec@1.0.2: {} @@ -9388,6 +9454,8 @@ snapshots: dependencies: eslint-visitor-keys: 3.4.3 + toposort@2.0.2: {} + totalist@3.0.1: {} tough-cookie@5.1.2: @@ -9429,6 +9497,10 @@ snapshots: type-fest@0.8.1: {} + type-fest@2.19.0: {} + + type-fest@4.41.0: {} + typescript-eslint@8.49.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3): dependencies: '@typescript-eslint/eslint-plugin': 8.49.0(@typescript-eslint/parser@8.49.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) @@ -9623,6 +9695,12 @@ snapshots: uuid@8.3.2: {} + vee-validate@4.15.1(vue@3.5.25(typescript@5.9.3)): + dependencies: + '@vue/devtools-api': 7.7.9 + type-fest: 4.41.0 + vue: 3.5.25(typescript@5.9.3) + verror@1.10.0: dependencies: assert-plus: 1.0.0 @@ -9820,6 +9898,13 @@ snapshots: yocto-queue@0.1.0: {} + yup@1.7.1: + dependencies: + property-expr: 2.0.6 + tiny-case: 1.0.3 + toposort: 2.0.2 + type-fest: 2.19.0 + zod@4.1.13: {} zwitch@2.0.4: {} diff --git a/src/api/index.ts b/src/api/index.ts index 923ac73..2694693 100644 --- a/src/api/index.ts +++ b/src/api/index.ts @@ -9,7 +9,7 @@ const client = treaty(window.location.origin, { }); export async function safeClient( - requestPromise: Promise<{ data: T; error: E | null }>, + requestPromise: Promise<{ data: T; error: E }>, options: { silent?: boolean } = {}, ) { const { data, error } = await requestPromise; diff --git a/src/api/types.ts b/src/api/types.ts index a96953a..ab90219 100644 --- a/src/api/types.ts +++ b/src/api/types.ts @@ -19,3 +19,9 @@ export type WithdrawBody = Omit[0], export type UserProfileData = Treaty.Data["userProfile"]; export type UpdateUserProfileBody = NonNullable[0]>; + +export type RwaIssuanceProductsData = Treaty.Data; + +export type RwaIssuanceProductBody = NonNullable[0]>; + +export type RwaIssuanceCategoriesData = Treaty.Data; diff --git a/src/components/ui/collapse/exports.ts b/src/components/ui/collapse/exports.ts new file mode 100644 index 0000000..799b6a7 --- /dev/null +++ b/src/components/ui/collapse/exports.ts @@ -0,0 +1,2 @@ +export { default as Collapse } from './index.vue'; +export type * from './types'; \ No newline at end of file diff --git a/src/components/ui/collapse/index.vue b/src/components/ui/collapse/index.vue new file mode 100644 index 0000000..71d4896 --- /dev/null +++ b/src/components/ui/collapse/index.vue @@ -0,0 +1,138 @@ + + + + + diff --git a/src/components/ui/collapse/types.ts b/src/components/ui/collapse/types.ts new file mode 100644 index 0000000..6984171 --- /dev/null +++ b/src/components/ui/collapse/types.ts @@ -0,0 +1,29 @@ +export interface CollapseProps { + /** 面板标题 */ + title?: string; + /** 是否禁用 */ + disabled?: boolean; + /** 是否显示边框 */ + bordered?: boolean; + /** 尺寸大小 */ + size?: "small" | "medium" | "large"; + /** 是否展开 (v-model:active) */ + active?: boolean; +} + +export interface CollapseEmits { + /** 展开状态变化时触发 */ + "update:active": [value: boolean]; +} + +export interface CollapseSlots { + /** 默认插槽 - 面板内容 */ + default: () => any; + /** 标题插槽 - 自定义标题内容 */ + title: () => any; +} + +export interface CollapseInstance { + /** 切换展开/收起状态 */ + toggle: () => void; +} diff --git a/src/components/ui/datetime/index.vue b/src/components/ui/datetime/index.vue new file mode 100644 index 0000000..ff0d861 --- /dev/null +++ b/src/components/ui/datetime/index.vue @@ -0,0 +1,39 @@ + + + + + diff --git a/src/components/ui/form/index.vue b/src/components/ui/form/index.vue deleted file mode 100644 index 4a8f3df..0000000 --- a/src/components/ui/form/index.vue +++ /dev/null @@ -1,9 +0,0 @@ - - - - - diff --git a/src/components/ui/result/index.vue b/src/components/ui/result/index.vue new file mode 100644 index 0000000..e282b5a --- /dev/null +++ b/src/components/ui/result/index.vue @@ -0,0 +1,22 @@ + + + + + diff --git a/src/locales/en-US.json b/src/locales/en-US.json index 86becae..16e386c 100644 --- a/src/locales/en-US.json +++ b/src/locales/en-US.json @@ -47,7 +47,63 @@ "myCompany": "My Company", "issuingApply": "Issuing Apply", "audit": "Audit", - "supervision": "Supervision" + "supervision": "Supervision", + "apply": { + "title": "Issuing Apply", + "base": "Base", + "issuePeriod": "Issue Period", + "productName": "Product Name", + "enterProductName": "Please enter product name", + "productCode": "Product Code", + "enterProductCode": "Please enter product code", + "productType": "Product Type", + "chooseProductType": "Please choose product type", + "productValue": "Product Valuation", + "enterProductValue": "Please enter product valuation (USD)", + "assetProof": "Asset Proof", + "enterAssetProof": "Please enter asset proof", + "totalSupplyLimit": "Total Supply Limit", + "enterTotalSupplyLimit": "Please enter total supply limit", + "editionName": "Edition Name", + "enterEditionName": "Please enter edition name", + "launchDate": "Launch Date", + "enterLaunchDate": "Please enter launch date", + "perUserLimit": "Per User Limit", + "enterPerUserLimit": "Please enter per user limit", + "totalSupply": "Total Supply", + "enterTotalSupply": "Please enter total supply", + "subscriptionDeadline": "Subscription Deadline", + "enterSubscriptionDeadline": "Please enter subscription deadline", + "unitPrice": "Unit Price", + "enterUnitPrice": "Please enter unit price", + "dividendRate": "Dividend Rate", + "enterDividendRate": "Dividend rate (e.g., 0.01 for 1%)", + "issuePeriodIndex": "Issue Period {index}", + "realEstate": "Real Estate", + "snickers": "Snickers", + "next": "Next", + "back": "Back", + "submit": "Submit", + "addStep": "Add Step", + "removeItem": "Remove Item", + "validation": { + "nameRequired": "Name is required", + "codeRequired": "Code is required", + "categoryRequired": "Type is required", + "editionNameRequired": "Edition name is required", + "launchDateRequired": "Launch date is required", + "perUserLimitRequired": "Per user limit is required", + "totalSupplyRequired": "Total supply is required", + "subscriptionDeadlineRequired": "Subscription deadline is required", + "unitPriceRequired": "Unit price is required", + "dividendRateRequired": "Dividend rate is required" + }, + "done": { + "title": "Application Submitted Successfully", + "description": "Your issuance application has been submitted successfully. We will review your application within business days. Please wait patiently for the review results.", + "viewProducts": "View My Products" + } + } }, "purchase": { "purchaseAsset": "Purchase Assets", diff --git a/src/locales/zh-CN.json b/src/locales/zh-CN.json index df6041b..9bf59a9 100644 --- a/src/locales/zh-CN.json +++ b/src/locales/zh-CN.json @@ -47,7 +47,63 @@ "myCompany": "我的企业", "issuingApply": "发行申请", "audit": "审核审计", - "supervision": "委托监管" + "supervision": "委托监管", + "apply": { + "title": "发行申请", + "base": "基础信息", + "issuePeriod": "发行期", + "productName": "产品名称", + "enterProductName": "请输入产品名称", + "productCode": "产品编码", + "enterProductCode": "请输入产品编码", + "productType": "产品类型", + "chooseProductType": "请选择产品类型", + "productValue": "产品估值", + "enterProductValue": "请输入产品估值(美元)", + "assetProof": "资产证明", + "enterAssetProof": "请输入资产证明", + "totalSupplyLimit": "总发行量上限", + "enterTotalSupplyLimit": "请输入总发行量上限", + "editionName": "发行期名称", + "enterEditionName": "请输入发行期名称", + "launchDate": "发行日期", + "enterLaunchDate": "请输入发行日期", + "perUserLimit": "个人申购上限", + "enterPerUserLimit": "请输入个人申购上限", + "totalSupply": "发行总量", + "enterTotalSupply": "请输入发行总量", + "subscriptionDeadline": "申购截止日期", + "enterSubscriptionDeadline": "请输入申购截止日期", + "unitPrice": "单价", + "enterUnitPrice": "请输入单价", + "dividendRate": "分红率", + "enterDividendRate": "分红率(如0.01代表1%)", + "issuePeriodIndex": "发行期 {index}", + "realEstate": "房地产", + "snickers": "糖果", + "next": "下一步", + "back": "返回", + "submit": "提交", + "addStep": "添加发行期", + "removeItem": "移除项目", + "validation": { + "nameRequired": "产品名称是必填项", + "codeRequired": "产品编码是必填项", + "categoryRequired": "产品类型是必填项", + "editionNameRequired": "发行期名称是必填项", + "launchDateRequired": "发行日期是必填项", + "perUserLimitRequired": "个人申购上限是必填项", + "totalSupplyRequired": "发行总量是必填项", + "subscriptionDeadlineRequired": "申购截止日期是必填项", + "unitPriceRequired": "单价是必填项", + "dividendRateRequired": "分红率是必填项" + }, + "done": { + "title": "申请提交成功", + "description": "您的发行申请已成功提交,我们将在工作日内对您的申请进行审核。请耐心等待审核结果。", + "viewProducts": "查看我的产品" + } + } }, "purchase": { "purchaseAsset": "购买资产", diff --git a/src/router/index.ts b/src/router/index.ts index 7816795..fc71e80 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -54,6 +54,7 @@ const routes: Array = [ }, { path: "/issue/issuing-apply", + props: ({ query, params }) => ({ query, params }), component: () => import("@/views/issue/issuing-apply/index.vue"), }, ]; diff --git a/src/theme/ionic.css b/src/theme/ionic.css index 464ab09..ae6a738 100644 --- a/src/theme/ionic.css +++ b/src/theme/ionic.css @@ -2,3 +2,30 @@ --background: var(--ion-color-primary-contrast); --min-height: 50px; } + +.ui-select::part(label){ + font-size: 14px; + font-weight: 500; +} + +.ui-button { + --border-radius: 8px; +} + +ion-datetime.ui-datetime { + --background: rgb(255 255 255); + --background-rgb: 255, 255, 255; + --wheel-highlight-background: rgb(194 194 194); + --wheel-fade-background-rgb: 255, 255, 255; + border-radius: 16px; + overflow: hidden; +} +@media (prefers-color-scheme: dark) { + ion-datetime.ui-datetime { + --background: rgb(15, 15, 15); + --background-rgb: 15, 15, 15; + --wheel-highlight-background: rgb(50, 50, 50); + --wheel-highlight-border-radius: 48px; + --wheel-fade-background-rgb: 15, 15, 15; + } +} \ No newline at end of file diff --git a/src/views/issue/issuing-apply/base.vue b/src/views/issue/issuing-apply/base.vue new file mode 100644 index 0000000..75561c7 --- /dev/null +++ b/src/views/issue/issuing-apply/base.vue @@ -0,0 +1,127 @@ + + + + + diff --git a/src/views/issue/issuing-apply/done.vue b/src/views/issue/issuing-apply/done.vue new file mode 100644 index 0000000..e75b0cd --- /dev/null +++ b/src/views/issue/issuing-apply/done.vue @@ -0,0 +1,27 @@ + + + + + diff --git a/src/views/issue/issuing-apply/index.vue b/src/views/issue/issuing-apply/index.vue index cde3d92..5c6b86c 100644 --- a/src/views/issue/issuing-apply/index.vue +++ b/src/views/issue/issuing-apply/index.vue @@ -1,14 +1,62 @@ diff --git a/src/views/issue/issuing-apply/issue-period.vue b/src/views/issue/issuing-apply/issue-period.vue new file mode 100644 index 0000000..287df60 --- /dev/null +++ b/src/views/issue/issuing-apply/issue-period.vue @@ -0,0 +1,173 @@ + + + + + diff --git a/src/views/user/index.vue b/src/views/user/index.vue index f27b51e..5077d28 100644 --- a/src/views/user/index.vue +++ b/src/views/user/index.vue @@ -30,7 +30,6 @@ import WalletCard from "./components/wallet-card.vue"; - diff --git a/src/views/user/settings.vue b/src/views/user/settings.vue index 9a92fef..ac770d2 100644 --- a/src/views/user/settings.vue +++ b/src/views/user/settings.vue @@ -160,6 +160,7 @@ onMounted(() => {