create-pubinfo 2.1.3-beta.2 → 2.1.4

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.
Files changed (74) hide show
  1. package/dist/cli.js +1 -1
  2. package/dist/{helper-DqRlR095.js → helper.js} +39 -22
  3. package/dist/index.d.ts +6 -1
  4. package/dist/index.js +1 -1
  5. package/package.json +4 -3
  6. package/templates/pubinfo-monorepo/.browserslistrc +5 -0
  7. package/templates/pubinfo-monorepo/.editorconfig +10 -0
  8. package/templates/pubinfo-monorepo/.vscode/settings.json +50 -0
  9. package/templates/pubinfo-monorepo/_gitignore +38 -0
  10. package/templates/pubinfo-monorepo/_npmrc +5 -0
  11. package/templates/pubinfo-monorepo/apps/basic/.env +2 -0
  12. package/templates/pubinfo-monorepo/apps/basic/.env.development +4 -0
  13. package/templates/pubinfo-monorepo/apps/basic/.env.production +10 -0
  14. package/templates/pubinfo-monorepo/apps/basic/index.html +47 -0
  15. package/templates/pubinfo-monorepo/apps/basic/openapi.config.ts.hbs +33 -0
  16. package/templates/pubinfo-monorepo/apps/basic/package.json.hbs +26 -0
  17. package/templates/pubinfo-monorepo/apps/basic/pubinfo.config.ts +9 -0
  18. package/templates/pubinfo-monorepo/apps/basic/public/browser_upgrade/chrome.png +0 -0
  19. package/templates/pubinfo-monorepo/apps/basic/public/browser_upgrade/edge.png +0 -0
  20. package/templates/pubinfo-monorepo/apps/basic/public/browser_upgrade/index.css +49 -0
  21. package/templates/pubinfo-monorepo/apps/basic/public/loading.css +92 -0
  22. package/templates/pubinfo-monorepo/apps/basic/src/App.vue +7 -0
  23. package/templates/pubinfo-monorepo/apps/basic/src/api/modules/auth/index.ts +3 -0
  24. package/templates/pubinfo-monorepo/apps/basic/src/api/modules/auth/renzhengfuwu.ts +145 -0
  25. package/templates/pubinfo-monorepo/apps/basic/src/api/modules/auth/typings.d.ts +97 -0
  26. package/templates/pubinfo-monorepo/apps/basic/src/api/request.ts +125 -0
  27. package/templates/pubinfo-monorepo/apps/basic/src/assets/icons/logo.svg +1 -0
  28. package/templates/pubinfo-monorepo/apps/basic/src/assets/icons/process-management.svg +1 -0
  29. package/templates/pubinfo-monorepo/apps/basic/src/assets/icons/workbench.svg +1 -0
  30. package/templates/pubinfo-monorepo/apps/basic/src/assets/images/login-bg.webp +0 -0
  31. package/templates/pubinfo-monorepo/apps/basic/src/assets/images/login-bg_dark.webp +0 -0
  32. package/templates/pubinfo-monorepo/apps/basic/src/assets/images/login-small.png +0 -0
  33. package/templates/pubinfo-monorepo/apps/basic/src/assets/images/login-small_dark.webp +0 -0
  34. package/templates/pubinfo-monorepo/apps/basic/src/components/UIProvider/index.vue +51 -0
  35. package/templates/pubinfo-monorepo/apps/basic/src/layouts/index.vue +48 -0
  36. package/templates/pubinfo-monorepo/apps/basic/src/main.ts.hbs +26 -0
  37. package/templates/pubinfo-monorepo/apps/basic/src/modules/captcha.ts +8 -0
  38. package/templates/pubinfo-monorepo/apps/basic/src/modules/rbac.ts +10 -0
  39. package/templates/pubinfo-monorepo/apps/basic/src/routes/index.ts +71 -0
  40. package/templates/pubinfo-monorepo/apps/basic/src/routes/modules/demo/breadcrumb.example.ts +62 -0
  41. package/templates/pubinfo-monorepo/apps/basic/src/routes/modules/demo/link.ts +15 -0
  42. package/templates/pubinfo-monorepo/apps/basic/src/routes/modules/demo/multilevel.menu.example.ts +68 -0
  43. package/templates/pubinfo-monorepo/apps/basic/src/routes/modules/demo/other.page.ts +37 -0
  44. package/templates/pubinfo-monorepo/apps/basic/src/routes/modules/demo/single.ts +14 -0
  45. package/templates/pubinfo-monorepo/apps/basic/src/settings.ts.hbs +8 -0
  46. package/templates/pubinfo-monorepo/apps/basic/src/stores/index.ts +2 -0
  47. package/templates/pubinfo-monorepo/apps/basic/src/stores/modules/conter.ts +16 -0
  48. package/templates/pubinfo-monorepo/apps/basic/src/views/demo/breadcrumb_example/detail1.vue +11 -0
  49. package/templates/pubinfo-monorepo/apps/basic/src/views/demo/breadcrumb_example/detail2.vue +11 -0
  50. package/templates/pubinfo-monorepo/apps/basic/src/views/demo/breadcrumb_example/list1.vue +11 -0
  51. package/templates/pubinfo-monorepo/apps/basic/src/views/demo/breadcrumb_example/list2.vue +11 -0
  52. package/templates/pubinfo-monorepo/apps/basic/src/views/demo/multilevel_menu_example/level2/level3/page1.vue +11 -0
  53. package/templates/pubinfo-monorepo/apps/basic/src/views/demo/multilevel_menu_example/level2/level3/page2.vue +11 -0
  54. package/templates/pubinfo-monorepo/apps/basic/src/views/demo/multilevel_menu_example/level2/page.vue +11 -0
  55. package/templates/pubinfo-monorepo/apps/basic/src/views/demo/multilevel_menu_example/page.vue +11 -0
  56. package/templates/pubinfo-monorepo/apps/basic/src/views/demo/other_page/des.vue +13 -0
  57. package/templates/pubinfo-monorepo/apps/basic/src/views/demo/other_page/index.vue +25 -0
  58. package/templates/pubinfo-monorepo/apps/basic/src/views/demo/preview-empty/index.vue +17 -0
  59. package/templates/pubinfo-monorepo/apps/basic/src/views/demo/single/index.vue +13 -0
  60. package/templates/pubinfo-monorepo/apps/basic/src/views/system/index.vue +5 -0
  61. package/templates/pubinfo-monorepo/apps/basic/src/views/system/login/components/LoginForm.vue +29 -0
  62. package/templates/pubinfo-monorepo/apps/basic/src/views/system/login/components/LoginWithPhone.vue +213 -0
  63. package/templates/pubinfo-monorepo/apps/basic/src/views/system/login/components/PasswordLogin.vue +178 -0
  64. package/templates/pubinfo-monorepo/apps/basic/src/views/system/login/components/Savephone.vue +17 -0
  65. package/templates/pubinfo-monorepo/apps/basic/src/views/system/login/components/Useragreement.vue +26 -0
  66. package/templates/pubinfo-monorepo/apps/basic/src/views/system/login/composables.ts +63 -0
  67. package/templates/pubinfo-monorepo/apps/basic/src/views/system/login/index.vue +142 -0
  68. package/templates/pubinfo-monorepo/apps/basic/tsconfig.json +3 -0
  69. package/templates/pubinfo-monorepo/apps/basic/uno.config.ts +17 -0
  70. package/templates/pubinfo-monorepo/eslint.config.ts +3 -0
  71. package/templates/pubinfo-monorepo/package.json.hbs +46 -0
  72. package/templates/pubinfo-monorepo/pnpm-lock.yaml +12686 -0
  73. package/templates/pubinfo-monorepo/pnpm-workspace.yaml +11 -0
  74. package/templates/pubinfo-monorepo/stylelint.config.js +3 -0
@@ -0,0 +1,15 @@
1
+ import type { RouteRecordRaw } from 'vue-router';
2
+
3
+ const routes: RouteRecordRaw = {
4
+ path: '/link',
5
+ name: 'Link',
6
+ redirect: '',
7
+ meta: {
8
+ title: '跳转路由',
9
+ singleMenu: true,
10
+ icon: 'i-solar-confetti-minimalistic-bold',
11
+ link: 'http://124.223.184.245:10000/docs/',
12
+ },
13
+ };
14
+
15
+ export default routes;
@@ -0,0 +1,68 @@
1
+ import type { RouteRecordRaw } from 'vue-router';
2
+
3
+ const routes: RouteRecordRaw = {
4
+ path: '/multilevel_menu_example',
5
+ redirect: '/multilevel_menu_example/page',
6
+ name: 'multilevelMenuExample',
7
+ meta: {
8
+ title: '多级导航',
9
+ icon: 'i-heroicons-solid:menu-alt-3',
10
+ },
11
+ children: [
12
+ {
13
+ path: 'page',
14
+ name: 'multilevelMenuExample1',
15
+ component: () => import('@/views/demo/multilevel_menu_example/page.vue'),
16
+ meta: {
17
+ title: '导航1',
18
+ icon: 'i-heroicons-solid:menu-alt-3',
19
+ },
20
+ },
21
+ {
22
+ path: 'level2',
23
+ name: 'multilevelMenuExample2',
24
+ redirect: '/multilevel_menu_example/level2/page',
25
+ meta: {
26
+ title: '导航2',
27
+ },
28
+ children: [
29
+ {
30
+ path: 'page',
31
+ name: 'multilevelMenuExample2-1',
32
+ component: () => import('@/views/demo/multilevel_menu_example/level2/page.vue'),
33
+ meta: {
34
+ title: '导航2-1',
35
+ },
36
+ },
37
+ {
38
+ path: 'level3',
39
+ name: 'multilevelMenuExample2-2',
40
+ redirect: '/multilevel_menu_example/level2/level3/page1',
41
+ meta: {
42
+ title: '导航2-2',
43
+ },
44
+ children: [
45
+ {
46
+ path: 'page1',
47
+ name: 'multilevelMenuExample2-2-1',
48
+ component: () => import('@/views/demo/multilevel_menu_example/level2/level3/page1.vue'),
49
+ meta: {
50
+ title: '导航2-2-1',
51
+ },
52
+ },
53
+ {
54
+ path: 'page2',
55
+ name: 'multilevelMenuExample2-2-2',
56
+ component: () => import('@/views/demo/multilevel_menu_example/level2/level3/page2.vue'),
57
+ meta: {
58
+ title: '导航2-2-2',
59
+ },
60
+ },
61
+ ],
62
+ },
63
+ ],
64
+ },
65
+ ],
66
+ };
67
+
68
+ export default routes;
@@ -0,0 +1,37 @@
1
+ import type { RouteRecordRaw } from 'vue-router';
2
+
3
+ const routes: RouteRecordRaw = {
4
+ path: '/other-page',
5
+ redirect: '/other-page/list',
6
+ name: 'OtherPage',
7
+ meta: {
8
+ title: '下探页面',
9
+ icon: 'i-solar-confetti-minimalistic-bold',
10
+ },
11
+ children: [
12
+ {
13
+ path: 'list',
14
+ name: 'OtherPageList',
15
+ component: () => import('@/views/demo/other_page/index.vue'),
16
+ meta: {
17
+ title: '列表页',
18
+ sidebar: false,
19
+ breadcrumb: false,
20
+ activeMenu: '/other-page',
21
+ },
22
+ },
23
+ {
24
+ path: 'detail',
25
+ name: 'OtherPageDetail',
26
+ component: () => import('@/views/demo/other_page/des.vue'),
27
+ meta: {
28
+ title: '详情页',
29
+ sidebar: false,
30
+ breadcrumb: true,
31
+ activeMenu: '/other-page',
32
+ },
33
+ },
34
+ ],
35
+ };
36
+
37
+ export default routes;
@@ -0,0 +1,14 @@
1
+ import type { RouteRecordRaw } from 'vue-router';
2
+
3
+ const routes: RouteRecordRaw = {
4
+ path: '/single',
5
+ component: () => import('@/views/demo/single/index.vue'),
6
+ name: 'Single',
7
+ meta: {
8
+ title: '单页面路由',
9
+ singleMenu: true,
10
+ icon: 'i-solar-confetti-minimalistic-bold',
11
+ },
12
+ };
13
+
14
+ export default routes;
@@ -0,0 +1,8 @@
1
+ import { defineSettings } from 'pubinfo';
2
+
3
+ export default defineSettings({
4
+ // 请在此处编写或粘贴配置代码
5
+ app: {
6
+ storagePrefix: '{{key}}',
7
+ },
8
+ });
@@ -0,0 +1,2 @@
1
+ export * from './modules/conter';
2
+ export { useUserStore } from 'pubinfo';
@@ -0,0 +1,16 @@
1
+ import { defineStore } from 'pinia';
2
+ import { computed, ref } from 'vue';
3
+
4
+ export const useCounterStore = defineStore('counter', () => {
5
+ const count = ref(0);
6
+ const doubleCount = computed(() => count.value * 2);
7
+ function increment() {
8
+ count.value++;
9
+ }
10
+
11
+ return {
12
+ count,
13
+ doubleCount,
14
+ increment,
15
+ };
16
+ });
@@ -0,0 +1,11 @@
1
+ <script setup lang="ts">
2
+ import { PageMain } from 'pubinfo';
3
+ </script>
4
+
5
+ <template>
6
+ <div>
7
+ <PageMain>
8
+ 注意看面包屑导航的变化
9
+ </PageMain>
10
+ </div>
11
+ </template>
@@ -0,0 +1,11 @@
1
+ <script setup lang="ts">
2
+ import { PageMain } from 'pubinfo';
3
+ </script>
4
+
5
+ <template>
6
+ <div>
7
+ <PageMain>
8
+ 注意看面包屑导航的变化
9
+ </PageMain>
10
+ </div>
11
+ </template>
@@ -0,0 +1,11 @@
1
+ <script setup lang="ts">
2
+ import { PageMain } from 'pubinfo';
3
+ </script>
4
+
5
+ <template>
6
+ <PageMain>
7
+ <RouterLink :to="{ name: 'breadcrumbExampleDetail1' }">
8
+ 查看详情页
9
+ </RouterLink>
10
+ </PageMain>
11
+ </template>
@@ -0,0 +1,11 @@
1
+ <script setup lang="ts">
2
+ import { PageMain } from 'pubinfo';
3
+ </script>
4
+
5
+ <template>
6
+ <PageMain>
7
+ <RouterLink :to="{ name: 'breadcrumbExampleDetail2' }">
8
+ 查看详情页
9
+ </RouterLink>
10
+ </PageMain>
11
+ </template>
@@ -0,0 +1,11 @@
1
+ <script setup lang="ts">
2
+ import { PageMain } from 'pubinfo';
3
+ </script>
4
+
5
+ <template>
6
+ <div>
7
+ <PageMain>
8
+ 多级导航2-2-2221
9
+ </PageMain>
10
+ </div>
11
+ </template>
@@ -0,0 +1,11 @@
1
+ <script setup lang="ts">
2
+ import { PageMain } from 'pubinfo';
3
+ </script>
4
+
5
+ <template>
6
+ <div>
7
+ <PageMain>
8
+ 多级导航2-2-1
9
+ </PageMain>
10
+ </div>
11
+ </template>
@@ -0,0 +1,11 @@
1
+ <script setup lang="ts">
2
+ import { PageMain } from 'pubinfo';
3
+ </script>
4
+
5
+ <template>
6
+ <div>
7
+ <PageMain>
8
+ 多级导航2-1
9
+ </PageMain>
10
+ </div>
11
+ </template>
@@ -0,0 +1,11 @@
1
+ <script setup lang="ts">
2
+ import { PageMain } from 'pubinfo';
3
+ </script>
4
+
5
+ <template>
6
+ <div>
7
+ <PageMain>
8
+ 多级导航1
9
+ </PageMain>
10
+ </div>
11
+ </template>
@@ -0,0 +1,13 @@
1
+ <script setup lang="ts">
2
+ import { PageMain } from 'pubinfo';
3
+
4
+ defineOptions({
5
+ name: 'OtherPageDetail',
6
+ });
7
+ </script>
8
+
9
+ <template>
10
+ <PageMain>
11
+ 123
12
+ </PageMain>
13
+ </template>
@@ -0,0 +1,25 @@
1
+ <script setup lang="ts">
2
+ import { PageMain } from 'pubinfo';
3
+
4
+ defineOptions({
5
+ name: 'OtherPage',
6
+ });
7
+ /* =============================================
8
+ = 逻辑代码 =
9
+ ============================================= */
10
+ const router = useRouter();
11
+ function jump() {
12
+ router.push({
13
+ name: 'OtherPageDetail',
14
+ });
15
+ }
16
+ </script>
17
+
18
+ <template>
19
+ <PageMain>
20
+ 列表页
21
+ <a-button type="primary" @click="jump">
22
+ 点击跳转入详情页
23
+ </a-button>
24
+ </PageMain>
25
+ </template>
@@ -0,0 +1,17 @@
1
+ <script setup lang="ts">
2
+ /* =============================================
3
+ = Vue SFC Options 配置 =
4
+ ============================================= */
5
+ defineOptions({
6
+ name: 'PreviewEmpty',
7
+ });
8
+ /* =============================================
9
+ = 逻辑代码 =
10
+ ============================================= */
11
+ </script>
12
+
13
+ <template>
14
+ <div>
15
+ 空白展示页面
16
+ </div>
17
+ </template>
@@ -0,0 +1,13 @@
1
+ <script setup lang="ts">
2
+ import { PageMain } from 'pubinfo';
3
+
4
+ defineOptions({
5
+ name: 'Demo',
6
+ });
7
+ </script>
8
+
9
+ <template>
10
+ <PageMain>
11
+ 演示页面,没有任何内容
12
+ </PageMain>
13
+ </template>
@@ -0,0 +1,5 @@
1
+ <template>
2
+ <div class="home">
3
+ 主页
4
+ </div>
5
+ </template>
@@ -0,0 +1,29 @@
1
+ <script setup lang="ts">
2
+ import { useLoginTabs } from '../composables';
3
+
4
+ defineOptions({
5
+ name: 'LoginFrom',
6
+ });
7
+
8
+ const { tabs, initialTab, changeActiveTab } = useLoginTabs();
9
+ </script>
10
+
11
+ <template>
12
+ <div class="flex flex-col w-456px [background:transparent]">
13
+ <div class="flex flex-row overflow-hidden border border-solid border-[#e7e8e9] rounded-1">
14
+ <div
15
+ v-for="(tab, index) in tabs"
16
+ :key="tab.title"
17
+ class="flex flex-row items-center justify-center h-10 text-base cursor-pointer rounded"
18
+ :class="[initialTab === index ? 'text-[#2f6bff] bg-[#ecf1fd]' : 'text-[#8a8e92] ']"
19
+ :style="{ width: `${100 / tabs.length}%` }"
20
+ @click="changeActiveTab(index)"
21
+ >
22
+ {{ tab.title }}
23
+ </div>
24
+ </div>
25
+ <div class="relative min-h-350px">
26
+ <component :is="tabs[initialTab].component" :key="tabs[initialTab].title" :name="tabs[initialTab].title" />
27
+ </div>
28
+ </div>
29
+ </template>
@@ -0,0 +1,213 @@
1
+ <script setup lang="ts">
2
+ import type { SelectProps } from 'ant-design-vue';
3
+ import type { FormInstance, Rule } from 'ant-design-vue/es/form';
4
+ import { useToggle } from '@vueuse/core';
5
+ import { message } from 'ant-design-vue';
6
+ import { useCountdown } from '../composables';
7
+ import Savephone from './Savephone.vue';
8
+
9
+ defineOptions({
10
+ name: 'LoginWithPhone',
11
+ });
12
+
13
+ interface FormState {
14
+ phone: string
15
+ verify: string
16
+ checked: false
17
+ }
18
+ const [verifyDisabled, setVerifyDisabled] = useToggle(true);
19
+ const phoneForm = ref<FormInstance>();
20
+ const { count, start, isStart } = useCountdown();
21
+ const regionCode = ref<number>(0);
22
+ const router = useRouter();
23
+ const route = useRoute();
24
+
25
+ const formState = reactive<FormState>({
26
+ phone: '',
27
+ verify: '',
28
+ checked: false,
29
+ });
30
+
31
+ const rules: Record<string, Rule[]> = {
32
+ phone: [
33
+ {
34
+ validator: checkPhoneIsCorrect,
35
+ whitespace: true,
36
+ trigger: 'change',
37
+ },
38
+ ],
39
+ verify: [
40
+ {
41
+ required: true,
42
+ whitespace: true,
43
+ message: '请输入验证码',
44
+ },
45
+ ],
46
+ };
47
+
48
+ const regionCodeOptins: SelectProps['options'] = [
49
+ {
50
+ value: 0,
51
+ label: '+86 (中国大陆)',
52
+ },
53
+ {
54
+ value: 1,
55
+ label: '+852 (香港行政区)',
56
+ },
57
+ {
58
+ value: 2,
59
+ label: '+853 (澳门行政区)',
60
+ },
61
+ {
62
+ value: 3,
63
+ label: '+886 (台湾省)',
64
+ },
65
+ ];
66
+
67
+ async function checkPhoneIsCorrect(_rule: Rule, value: string) {
68
+ function reject(area: string) {
69
+ setVerifyDisabled(true);
70
+ return Promise.reject(new Error(`请输入正确的${area}手机号`));
71
+ }
72
+ if (!value) {
73
+ setVerifyDisabled(true);
74
+ return Promise.reject(new Error(`请输入手机号`));
75
+ }
76
+ switch (regionCode.value) {
77
+ // 中国大陆
78
+ case 0:
79
+ if (!/^1[3-9]\d{9}$/.test(value)) {
80
+ return reject('中国大陆');
81
+ }
82
+ break;
83
+ // 香港特别行政区
84
+ case 1:
85
+ if (!/^([569])\d{7}$/.test(value)) {
86
+ return reject('香港特别行政区');
87
+ }
88
+ break;
89
+ // 澳门特别行政区
90
+ case 2:
91
+ if (!/^6\d{7}$/.test(value)) {
92
+ return reject('澳门特别行政区');
93
+ }
94
+ break;
95
+ // 台湾省
96
+ case 3:
97
+ if (!/^9\d{8}$/.test(value)) {
98
+ return reject('台湾省');
99
+ }
100
+ break;
101
+ default:
102
+ break;
103
+ }
104
+ setVerifyDisabled(false);
105
+ }
106
+
107
+ async function areaChange() {
108
+ if (!formState.phone) {
109
+ return;
110
+ }
111
+ phoneForm.value?.validateFields('phone');
112
+ }
113
+
114
+ async function sendVerifyCode() {
115
+ message.success('验证码已发送,请注意查收');
116
+ start();
117
+ }
118
+
119
+ async function submit() {
120
+ try {
121
+ await phoneForm.value?.validate();
122
+
123
+ // 实现手机号登录逻辑
124
+
125
+ if (formState.checked) {
126
+ localStorage.setItem('pubinfo_web_savedPhone', formState.phone);
127
+ }
128
+ else {
129
+ localStorage.removeItem('pubinfo_web_savedPhone');
130
+ }
131
+ message.success('登录成功');
132
+ router.push(route.query.redirect?.toString() ?? '/');
133
+ }
134
+ catch (error) {
135
+ }
136
+ }
137
+
138
+ onMounted(() => {
139
+ const phone = localStorage.getItem('pubinfo_web_savedPhone');
140
+ if (phone) {
141
+ formState.phone = phone;
142
+ setVerifyDisabled(false);
143
+ formState.checked = true as any;
144
+ }
145
+ });
146
+ </script>
147
+
148
+ <template>
149
+ <div class="phone-form" mt-40px>
150
+ <a-form
151
+ ref="phoneForm"
152
+ :model="formState"
153
+ autocomplete="off"
154
+ :rules="rules"
155
+ @finish="submit"
156
+ >
157
+ <a-form-item name="phone">
158
+ <a-input-group compact>
159
+ <a-form-item-rest>
160
+ <a-select
161
+ v-model:value="regionCode"
162
+ size="large"
163
+ style="width: 35%;"
164
+ :options="regionCodeOptins"
165
+ @change="areaChange"
166
+ />
167
+ </a-form-item-rest>
168
+ <a-input
169
+ v-model:value="formState.phone"
170
+ allow-clear
171
+ size="large"
172
+ placeholder="请输入手机号"
173
+ style="width: 65%;"
174
+ />
175
+ </a-input-group>
176
+ </a-form-item>
177
+
178
+ <a-form-item name="verify">
179
+ <a-input
180
+ v-model:value="formState.verify"
181
+ allow-clear
182
+ size="large"
183
+ placeholder="请输入验证码"
184
+ >
185
+ <template #suffix>
186
+ <a-button
187
+ size="small"
188
+ type="link"
189
+ :disabled="verifyDisabled"
190
+ >
191
+ <span v-if="!isStart" @click="sendVerifyCode">获取短信验证码</span>
192
+ <span v-else text="#8A8E92">{{ count }}秒后重新获取</span>
193
+ </a-button>
194
+ </template>
195
+ </a-input>
196
+ </a-form-item>
197
+ <a-form-item>
198
+ <Savephone v-model:checked="formState.checked" />
199
+ </a-form-item>
200
+ <a-form-item>
201
+ <a-button
202
+ class="h-48px!"
203
+ block
204
+ type="primary"
205
+ html-type="submit"
206
+ :disabled="!formState.checked"
207
+ >
208
+ 登录
209
+ </a-button>
210
+ </a-form-item>
211
+ </a-form>
212
+ </div>
213
+ </template>