create-young-proj 0.3.0 → 0.5.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.
Files changed (55) hide show
  1. package/README.md +6 -1
  2. package/dist/index.mjs +8 -8
  3. package/package.json +1 -1
  4. package/template-uni-app/.vscode/css.code-snippets +398 -0
  5. package/template-uni-app/.vscode/extensions.json +9 -0
  6. package/template-uni-app/.vscode/js.code-snippets +1669 -0
  7. package/template-uni-app/.vscode/settings.json +7 -0
  8. package/template-uni-app/.vscode/vue-html.code-snippets +668 -0
  9. package/template-uni-app/README.md +46 -0
  10. package/template-uni-app/_env +1 -0
  11. package/template-uni-app/_env.development +11 -0
  12. package/template-uni-app/_env.production +11 -0
  13. package/template-uni-app/_env.test +14 -0
  14. package/template-uni-app/_gitignore +3 -0
  15. package/template-uni-app/auto-imports.d.ts +404 -0
  16. package/template-uni-app/components.d.ts +20 -0
  17. package/template-uni-app/custom-plugins/index.ts +8 -0
  18. package/template-uni-app/custom-plugins/multiconf.ts +77 -0
  19. package/template-uni-app/custom-plugins/polyfill.ts +32 -0
  20. package/template-uni-app/index.html +23 -0
  21. package/template-uni-app/package.json +84 -0
  22. package/template-uni-app/pnpm-lock.yaml +7530 -0
  23. package/template-uni-app/rome.json +26 -0
  24. package/template-uni-app/src/App.vue +76 -0
  25. package/template-uni-app/src/apis/index.ts +36 -0
  26. package/template-uni-app/src/apis/lib/index.ts +236 -0
  27. package/template-uni-app/src/apis/requests/get.ts +52 -0
  28. package/template-uni-app/src/apis/requests/index.ts +8 -0
  29. package/template-uni-app/src/apis/requests/post.ts +23 -0
  30. package/template-uni-app/src/components/young-loading/young-loading.vue +38 -0
  31. package/template-uni-app/src/components/young-navbar/young-navbar.vue +253 -0
  32. package/template-uni-app/src/components/young-tabbar/young-tabbar.vue +137 -0
  33. package/template-uni-app/src/components/young-tabbar-layout/young-tabbar-layout.vue +27 -0
  34. package/template-uni-app/src/config/enum.ts +46 -0
  35. package/template-uni-app/src/config/index.ts +8 -0
  36. package/template-uni-app/src/config/map.ts +15 -0
  37. package/template-uni-app/src/env.d.ts +35 -0
  38. package/template-uni-app/src/main.ts +20 -0
  39. package/template-uni-app/src/manifest.json +83 -0
  40. package/template-uni-app/src/pages/index.vue +52 -0
  41. package/template-uni-app/src/pages/my.vue +29 -0
  42. package/template-uni-app/src/pages.json +63 -0
  43. package/template-uni-app/src/store/index.ts +16 -0
  44. package/template-uni-app/src/store/local/index.ts +40 -0
  45. package/template-uni-app/src/store/system.ts +12 -0
  46. package/template-uni-app/src/uni.scss +76 -0
  47. package/template-uni-app/src/utils/auth.ts +125 -0
  48. package/template-uni-app/src/utils/index.ts +11 -0
  49. package/template-uni-app/src/utils/map.ts +97 -0
  50. package/template-uni-app/src/utils/modal.ts +98 -0
  51. package/template-uni-app/src/utils/route.ts +149 -0
  52. package/template-uni-app/src/utils/system.ts +66 -0
  53. package/template-uni-app/tsconfig.json +13 -0
  54. package/template-uni-app/unocss.config.ts +30 -0
  55. package/template-uni-app/vite.config.ts +68 -0
@@ -0,0 +1,26 @@
1
+ {
2
+ "formatter": {
3
+ "ignore": [
4
+ "src/utils/**/*.js",
5
+ "src/utils/**/*.map",
6
+ "src/components/ui/**/*",
7
+ "*.d.ts",
8
+ "index.html",
9
+ "yarn.lock",
10
+ "*.json",
11
+ "README.md",
12
+ "dist/**/*"
13
+ ],
14
+ "indentStyle": "space",
15
+ "indentSize": 2,
16
+ "lineWidth": 100
17
+ },
18
+ "javascript": {
19
+ "formatter": {
20
+ "quoteStyle": "single"
21
+ }
22
+ },
23
+ "linter": {
24
+ "enabled": false
25
+ }
26
+ }
@@ -0,0 +1,76 @@
1
+ <!--
2
+ * @Author: zhangyang
3
+ * @Date: 2023-02-13 14:58:26
4
+ * @LastEditTime: 2023-07-19 17:23:20
5
+ * @Description:
6
+ -->
7
+ <script setup lang="ts">
8
+ onLaunch(async () => {
9
+ console.log('App Launch');
10
+ console.log('环境变量:', import.meta.env);
11
+ if (!getUuid()) {
12
+ setUuid();
13
+ }
14
+ await getSystemInfo();
15
+ });
16
+
17
+ onShow(async () => {
18
+ /**
19
+ * 自动更新
20
+ */
21
+ const updateManager = uni.getUpdateManager();
22
+
23
+ updateManager.onCheckForUpdate(function (res) {
24
+ // 请求完新版本信息的回调
25
+ console.log(res.hasUpdate, 'onCheckForUpdate hasUpdate')
26
+ });
27
+
28
+ updateManager.onUpdateReady(function () {
29
+ showModal({
30
+ title: '更新提示',
31
+ content: '新版本已经准备好,是否重启应用?',
32
+ success(res) {
33
+ if (res.confirm) {
34
+ // 新的版本已经下载好,调用 applyUpdate 应用新版本并重启
35
+ updateManager.applyUpdate()
36
+ }
37
+ }
38
+ });
39
+ });
40
+ updateManager.onUpdateFailed(function () {
41
+ // 新版本下载失败
42
+ showModal({ title: '更新提示', content: '新版本下载失败', showCancel: false });
43
+ });
44
+ console.log('App Show');
45
+ });
46
+
47
+ onHide(() => {
48
+ console.log('App Hide');
49
+ });
50
+
51
+ </script>
52
+
53
+ <style lang="scss">
54
+ @import '@dcloudio/uni-ui/lib/uni-scss/index.scss';
55
+
56
+ page {
57
+ background-color: #f6f7fb;
58
+ }
59
+
60
+
61
+ .font-pf {
62
+ font-family: PingFangSC-Semibold, PingFang SC;
63
+ }
64
+
65
+ .cancel_scrollbar ::-webkit-scrollbar {
66
+ display: none;
67
+ width: 0 !important;
68
+ height: 0 !important;
69
+ -webkit-appearance: none;
70
+ background: transparent;
71
+ }
72
+
73
+ .button_bg {
74
+ background: linear-gradient(180deg, #3E3A39 0%, #0D0D0D 100%);
75
+ }
76
+ </style>
@@ -0,0 +1,36 @@
1
+ /*
2
+ * @Author: zhangyang
3
+ * @Date: 2023-07-18 15:35:24
4
+ * @LastEditTime: 2023-07-19 16:47:49
5
+ * @Description:
6
+ */
7
+ import { useHttp } from './lib';
8
+ import { useGet, usePost } from './requests';
9
+
10
+ const http = useHttp({
11
+ baseURL: import.meta.env.VITE_API_BASE_URL,
12
+ loading: {
13
+ start: showLoading,
14
+ end: hideLoading,
15
+ },
16
+ headers: {
17
+ getCommonHeaders: () => ({
18
+ Accept: 'application/vnd.github.v3+json',
19
+ }),
20
+ getAuthHeaders: () => {
21
+ const token = 'todo: change to the real token that you used';
22
+ return {
23
+ Authorization: `Bearer ${token}`,
24
+ };
25
+ },
26
+ },
27
+ fail: (err) => {
28
+ // todo: 错误逻辑处理
29
+ showErrorModal(err.toString());
30
+ },
31
+ });
32
+
33
+ export const apis = {
34
+ get: useGet(http),
35
+ post: usePost(http),
36
+ };
@@ -0,0 +1,236 @@
1
+ /*
2
+ * @Author: zhangyang
3
+ * @Date: 2023-07-18 16:36:39
4
+ * @LastEditTime: 2023-07-18 16:51:41
5
+ * @Description:
6
+ */
7
+ /// <reference types="@uni-helper/axios-adapter/client" />
8
+ import type { AxiosInstance, AxiosRequestConfig, Method, AxiosAdapter } from 'axios';
9
+ import axios from 'axios';
10
+ import { defu } from 'defu';
11
+ import { createUniAppAxiosAdapter } from '@uni-helper/axios-adapter';
12
+
13
+ type Simplify<T> = {
14
+ [P in keyof T]: T[P];
15
+ };
16
+
17
+ type SetRequired<T, K extends keyof T> = Simplify<
18
+ // 将要设置为可选类型的结构取出并设置为必选
19
+ Required<Pick<T, K>> &
20
+ // 取并集
21
+ // 排除需要设置为可选属性的结构,其余的保持不变
22
+ Pick<T, Exclude<keyof T, K>>
23
+ >;
24
+
25
+ export type AllMethod = Lowercase<Method>;
26
+ export type Fn<T extends any = any, R extends any = any> = (...args: T[]) => Promise<R>;
27
+ export type Cbks = {
28
+ [k in AllMethod]?: Record<string, Fn>;
29
+ };
30
+
31
+ type Handlers<R extends Cbks> = {
32
+ [P in keyof R]?: R[P];
33
+ };
34
+
35
+ type Headers = Record<string, string>;
36
+
37
+ type Req = <X extends any = any>(config: AxiosRequestConfig<unknown>) => Promise<X>;
38
+
39
+ type Prototype = {
40
+ __instance__: AxiosInstance;
41
+ __mixin__<T extends Cbks>(
42
+ extentions: Handlers<T>,
43
+ ): SetRequired<Handlers<T>, keyof T> & ThisType<Handlers<T>>;
44
+
45
+ freeReq: Req;
46
+ authReq: Req;
47
+ };
48
+
49
+ export enum UsefulContentTypes {
50
+ JSON = `application/json; charset=UTF-8`,
51
+ URLEncoded = `application/x-www-form-urlencoded; charset=UTF-8`,
52
+ FormData = `multipart/form-data; charset=UTF-8`,
53
+ }
54
+
55
+ export type DefaultMsg = {
56
+ code: number;
57
+ msg: string;
58
+ data: any;
59
+ };
60
+
61
+ export interface DefaultHttpConfig<Msg extends any = DefaultMsg> {
62
+ /**
63
+ * 基础地址
64
+ * @default /api
65
+ */
66
+ baseURL: string;
67
+ /**
68
+ * 动态获取基础地址
69
+ */
70
+ lazyBaseURL?: () => string;
71
+ /**
72
+ * 默认方法
73
+ * @default post
74
+ */
75
+ method: AllMethod;
76
+ /**
77
+ * 超时时间
78
+ * @default 5e3 5s
79
+ */
80
+ timeout: number;
81
+ /**
82
+ * 加载函数
83
+ */
84
+ loading: {
85
+ start: () => void;
86
+ end: () => void;
87
+ };
88
+ /**
89
+ * 错误处理函数,进行错误处理或继续抛出错误
90
+ * 接受各种抛出的错误
91
+ * @default console.error
92
+ */
93
+ fail: (err: string | number | Error | Msg) => void;
94
+ /**
95
+ * 结果校验 + 数据解析,判断此次请求是否正常,正常则返回解包数据,否则抛出异常
96
+ * 不传则默认使用标准 http 状态码作为判断结果,并原样返回
97
+ * @default () => any | never
98
+ */
99
+ checkFn: (res: Msg) => any | never;
100
+ /**
101
+ * 请求头
102
+ */
103
+ headers: {
104
+ /**
105
+ * 生成公共请求头
106
+ * @default () => {}
107
+ */
108
+ getCommonHeaders?: () => Headers;
109
+ /**
110
+ * 生成鉴权请求头
111
+ * @default () => {}
112
+ */
113
+ getAuthHeaders?: () => Headers;
114
+ };
115
+ /**
116
+ * 自定义适配器
117
+ * 微信小程序等其他非标准环境时传入
118
+ */
119
+ adapter?: AxiosAdapter;
120
+ }
121
+
122
+ const defaultConfig: DefaultHttpConfig = {
123
+ baseURL: '/api',
124
+ method: 'post',
125
+ timeout: 5e3,
126
+ loading: {
127
+ start: console.log.bind(null, '🚀 ~ http loading start'),
128
+ end: console.log.bind(null, '🚀 ~ http loading end'),
129
+ },
130
+ fail: console.error.bind(null, '🚀 ~ http loading error'),
131
+ checkFn: (res) => res,
132
+ headers: {
133
+ getCommonHeaders: () => ({}),
134
+ getAuthHeaders: () => ({}),
135
+ },
136
+ };
137
+
138
+ declare module 'axios' {
139
+ export interface AxiosRequestConfig {
140
+ /**
141
+ * 禁用 loading 动画
142
+ * @default false
143
+ */
144
+ notLoading?: boolean;
145
+ }
146
+ }
147
+
148
+ export const useHttp = <Msg extends Record<string, any> = DefaultMsg, Fns extends Cbks = Cbks>(
149
+ config: Partial<DefaultHttpConfig<Msg>> = {},
150
+ ) => {
151
+ const finalConfig = defu(config, defaultConfig);
152
+
153
+ const { baseURL, lazyBaseURL, method, timeout, headers, checkFn, loading, fail } = finalConfig;
154
+
155
+ const net = axios.create({
156
+ method,
157
+ timeout,
158
+ headers: headers.getCommonHeaders!(),
159
+ adapter: createUniAppAxiosAdapter(),
160
+ });
161
+
162
+ net.interceptors.request.use(
163
+ (req) => {
164
+ !req.notLoading && loading.start();
165
+ if (!req.baseURL) {
166
+ req.baseURL = lazyBaseURL?.() ?? baseURL;
167
+ }
168
+ return req;
169
+ },
170
+ (error) => {
171
+ fail(error);
172
+ return Promise.reject(error);
173
+ },
174
+ );
175
+
176
+ net.interceptors.response.use(
177
+ (response) => {
178
+ !response.config.notLoading && loading.end();
179
+ const data = response.data;
180
+
181
+ try {
182
+ return checkFn(data);
183
+ } catch (err) {
184
+ // 应用逻辑异常
185
+ fail(err as any);
186
+ }
187
+ },
188
+ (error) => {
189
+ !error.config.notLoading && loading.end();
190
+ // http 异常
191
+ fail(error);
192
+ },
193
+ );
194
+
195
+ return {
196
+ get: undefined,
197
+ post: undefined,
198
+ delete: undefined,
199
+ put: undefined,
200
+ patch: undefined,
201
+ head: undefined,
202
+ purge: undefined,
203
+ options: undefined,
204
+ link: undefined,
205
+ unlink: undefined,
206
+ __instance__: net,
207
+ __mixin__(extentions: any) {
208
+ for (const method in extentions) {
209
+ if (Object.prototype.hasOwnProperty.call(extentions, method)) {
210
+ // @ts-ignore
211
+ const originFns = this[method] || {};
212
+ const fns = extentions[method];
213
+ // @ts-ignore
214
+ this[method] = {
215
+ ...originFns,
216
+ ...fns,
217
+ };
218
+ }
219
+ }
220
+
221
+ return this;
222
+ },
223
+
224
+ freeReq: net.request,
225
+ authReq: (args: AxiosRequestConfig) =>
226
+ net.request({
227
+ ...args,
228
+ headers: {
229
+ ...headers.getAuthHeaders!(),
230
+ ...args?.headers,
231
+ },
232
+ }),
233
+ } as unknown as Handlers<Fns> & Prototype;
234
+ };
235
+
236
+ export type Http = ReturnType<typeof useHttp>;
@@ -0,0 +1,52 @@
1
+ /*
2
+ * @Author: zhangyang
3
+ * @Date: 2023-07-18 16:50:32
4
+ * @LastEditTime: 2023-07-18 17:08:14
5
+ * @Description:
6
+ */
7
+ import type { Http } from '../lib';
8
+
9
+ export const useGet = (http: Http) => {
10
+ const FreeReq: Http['freeReq'] = (args) => http.freeReq({ method: 'GET', ...args });
11
+ const AuthReq: Http['authReq'] = (args) => http.authReq({ method: 'GET', ...args });
12
+
13
+ return {
14
+ getByUserName: (name: string) =>
15
+ FreeReq<{
16
+ login: string;
17
+ id: number;
18
+ node_id: string;
19
+ avatar_url: string;
20
+ gravatar_id: string;
21
+ url: string;
22
+ html_url: string;
23
+ followers_url: string;
24
+ following_url: string;
25
+ gists_url: string;
26
+ starred_url: string;
27
+ subscriptions_url: string;
28
+ organizations_url: string;
29
+ repos_url: string;
30
+ events_url: string;
31
+ received_events_url: string;
32
+ type: string;
33
+ site_admin: boolean;
34
+ name: string;
35
+ company: null | string;
36
+ blog: string;
37
+ location: null | string;
38
+ email: null | string;
39
+ hireable: null | boolean;
40
+ bio: null | string;
41
+ twitter_username: null | string;
42
+ public_repos: number;
43
+ public_gists: number;
44
+ followers: number;
45
+ following: number;
46
+ created_at: string;
47
+ updated_at: string;
48
+ }>({
49
+ url: `/users/${name}`,
50
+ }),
51
+ };
52
+ };
@@ -0,0 +1,8 @@
1
+ /*
2
+ * @Author: zhangyang
3
+ * @Date: 2023-07-18 16:50:24
4
+ * @LastEditTime: 2023-07-18 17:00:49
5
+ * @Description:
6
+ */
7
+ export * from './get';
8
+ export * from './post';
@@ -0,0 +1,23 @@
1
+ /*
2
+ * @Author: zhangyang
3
+ * @Date: 2023-07-18 16:59:34
4
+ * @LastEditTime: 2023-07-18 16:59:35
5
+ * @Description:
6
+ */
7
+ import type { Http } from '../lib';
8
+
9
+ export const usePost = (http: Http) => {
10
+ const FreeReq: Http['freeReq'] = (args) => http.freeReq({ method: 'POST', ...args });
11
+ const AuthReq: Http['authReq'] = (args) => http.authReq({ method: 'POST', ...args });
12
+
13
+ return {
14
+ createRepo: async (name: string) => {
15
+ await AuthReq({
16
+ url: `/user/repos`,
17
+ params: {
18
+ name,
19
+ },
20
+ });
21
+ },
22
+ };
23
+ };
@@ -0,0 +1,38 @@
1
+ <!--
2
+ * @Author: zhangyang
3
+ * @Date: 2023-07-19 12:12:29
4
+ * @LastEditTime: 2023-07-19 14:27:31
5
+ * @Description:
6
+ -->
7
+ <script lang="ts" setup>
8
+ withDefaults(defineProps<{
9
+ /**
10
+ * 加载中的动图
11
+ */
12
+ loadingGif?: string;
13
+ /**
14
+ * 文本提示
15
+ */
16
+ tip?: string;
17
+ }>(), {
18
+ loadingGif: 'https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/unicloudlogo.png',
19
+ tip: '加载中...'
20
+ });
21
+
22
+ const loading = ref(true);
23
+
24
+ const start = () => loading.value = true;
25
+ const stop = () => loading.value = false;
26
+
27
+ defineExpose({
28
+ start,
29
+ stop
30
+ });
31
+ </script>
32
+ <template>
33
+ <view v-if="loading"
34
+ class="w100vw h100vh fixed left-0 top-0 z-999999 bg-white flex flex-col items-center justify-center">
35
+ <image :src="loadingGif" class="w240rpx h240rpx mb-32rpx" />
36
+ <text class="text-[#999] text-24rpx leading-36rpx">{{ tip }}</text>
37
+ </view>
38
+ </template>